KR20220013406A - 오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용 - Google Patents

오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용 Download PDF

Info

Publication number
KR20220013406A
KR20220013406A KR1020217042547A KR20217042547A KR20220013406A KR 20220013406 A KR20220013406 A KR 20220013406A KR 1020217042547 A KR1020217042547 A KR 1020217042547A KR 20217042547 A KR20217042547 A KR 20217042547A KR 20220013406 A KR20220013406 A KR 20220013406A
Authority
KR
South Korea
Prior art keywords
transaction
script
output
stack
workcode
Prior art date
Application number
KR1020217042547A
Other languages
English (en)
Inventor
클로이 타르탄
바쎔 암머
바?? 암머
잭 데이비스
자드 와하브
웨이 장
오웬 바우간
크레이그 라이트
Original Assignee
엔체인 홀딩스 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔체인 홀딩스 리미티드 filed Critical 엔체인 홀딩스 리미티드
Publication of KR20220013406A publication Critical patent/KR20220013406A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6227Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • H04L2209/38

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

블록체인 네트워크의 트랜잭션을 실행하는 방법이다. 제1 트랜잭션은 스택 기반 스크립팅 언어의 제1 잠금 스크립트를 포함하는 제1 출력을 적어도 포함하고, 제1 잠금 스크립트는 작업코드의 제1 인스턴스가 실행되기 전에 실행될 제1 잠금 스크립트의 일부를 포함한다. 제2 트랜잭션은 제1 트랜잭션의 제1 출력을 참조하는 제1 잠금 해제 스크립트를 포함한다. 작업코드의 제1 인스턴스를 실행할 때, 제1 트랜잭션을 무효화하지 않고 제1 잠금 스크립트의 실행이 종료된다. 제1 데이터 요소가 적어도 하나의 스택으로부터 판독되며, 제1 데이터 요소는 제1 잠금 해제 스크립트 및 제1 잠금 스크립트의 일부를 실행하는 동안 생성된다. 적어도 하나의 스택으로부터 판독된 제1 데이터 요소는 오프체인 기능에 공급되고, 이 기능은 적어도 상기 제1 데이터 요소를 기반으로 결과를 생성하도록 구성된다.

Description

오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용
본 개시는 추가적인 오프체인(off-chain) 기능을 제공하기 위해, 예를 들어 이전 트랜잭션의 유효한 실행의 기능인 새로운 트랜잭션을 생성하기 위해, 블록체인의 트랜잭션을 사용하는 것에 관한 것이다.
블록체인은 분산 데이터 구조의 일 형태를 지칭하며, 여기에서 블록체인의 복제본이 피어-투-피어(Peer-to-Peer; P2P) 네트워크의 복수의 노드의 각각에서 유지된다. 블록체인은 데이터의 블록의 체인을 포함하며, 각 블록은 하나 이상의 트랜잭션을 포함한다. 각 트랜잭션은 시퀀스 내에서 선행 트랜잭션을 뒤로 가리키며(point back), 블록체인의 시작 부분인 제네시스(genesis) 트랜잭션까지 돌아간다. 트랜잭션은 새로운 블록에 포함되도록 네트워크에 제출될 수 있다. 새로운 블록은 "채굴"로 알려진 프로세스에 의해 생성되며, 이는 복수의 채굴 노드 각각이 "작업 증명", 즉 블록에 포함되기를 기다리는 보류 중인 트랜잭션의 풀에 기초하여 암호화 퍼즐 해결을 수행하기 위해 경쟁하는 것을 수반한다.
일반적으로 블록체인의 트랜잭션은 디지털 자산, 즉 가치 저장소 역할을 하는 데이터를 전달하는 데 사용된다. 그러나, 블록체인 위에 추가적인 기능을 쌓기 위해 블록체인을 활용할 수도 있다. 예를 들어, 블록체인 프로토콜은 트랜잭션 출력 내에 추가 사용자 데이터의 저장을 허용한다. 최신 블록체인은 단일 트랜잭션에 저장할 수 있는 최대 데이터 용량을 늘리고 있어, 더욱 복잡한 데이터를 통합할 수 있다. 예를 들어 이는 블록체인에 전자 문서를 저장하거나, 오디오 또는 비디오 데이터를 저장하는 데에도 사용할 수 있다.
네트워크의 각 노드는 전달, 채굴 및 저장의 세 가지 역할 중 임의의 하나, 둘 또는 모두를 가질 수 있다. 전달 노드는 네트워크 노드 전체에 트랜잭션을 전파한다. 채굴 노드는 트랜잭션을 블록으로 채굴한다. 저장 노드는 각각 블록체인의 채굴된 블록에 대한 자체 사본을 저장한다. 트랜잭션을 블록체인에 기록하기 위해, 당사자는 트랜잭션을 네트워크의 노드 중 하나로 전송하여 전파한다. 트랜잭션을 수신한 채굴 노드는 트랜잭션을 새로운 블록으로 채굴하기 위해 경쟁할 수 있다. 각 노드는 트랜잭션이 유효하기 위한 하나 이상의 조건을 포함하는 동일한 노드 프로토콜을 따르도록 구성된다. 유효하지 않은 트랜잭션은 전파되거나 블록으로 채굴되지 않는다. 트랜잭션이 유효성 검증되어 블록체인에서 수락된다고 가정하면, 트랜잭션(사용자 데이터 포함)은 P2P 네트워크의 각 노드에 변경 불가능한 공개 기록으로 저장되어 유지된다.
최신 블록을 생성하기 위하여 작업 증명 퍼즐을 성공적으로 해결한 채굴자는 일반적으로 디지털 자산의 새로운 금액을 생성하는 "생성 트랜잭션(generation transaction)"이라는 새로운 트랜잭션으로 보상을 받는다. 작업 증명은 블록을 채굴하는 데 많은 양의 컴퓨팅 자원이 필요하고 이중 지출 시도가 포함된 블록은 다른 노드에서 수락되지 않을 가능성이 높기 때문에, 블록에 이중 지출 트랜잭션을 포함함으로써 채굴자가 시스템을 속이지 않도록 장려한다.
"출력 기반" 모델(UTXO 기반 모델로도 지칭됨)에서, 주어진 트랜잭션의 데이터 구조는 하나 이상의 입력과 하나 이상의 출력을 포함한다. 임의의 지출 가능한 출력은 UTXO("미지출 트랜잭션 출력")로도 지칭되는 디지털 자산의 금액을 지정하는 요소를 포함한다. 출력은 출력을 리딤(redeem)하기 위한 조건을 지정하는 잠금 스크립트를 더 포함할 수 있다. 각 입력은 선행 트랜잭션 내의 그러한 출력에 대한 포인터를 포함하고, 가리켜진 출력의 잠금 스크립트를 잠금 해제하기 위한 잠금 해제 스크립트를 더 포함할 수 있다. 따라서 한 쌍의 트랜잭션을 고려하여, 제1 및 제2 트랜잭션(또는 "대상" 트랜잭션)으로 지칭한다. 제1 트랜잭션은 디지털 자산의 금액을 지정하는 적어도 하나의 출력을 포함하고, 출력을 잠금 해제하는 하나 이상의 조건을 정의하는 잠금 스크립트를 포함한다. 제2, 대상 트랜잭션은 제1 트랜잭션의 출력에 대한 포인터를 포함하는 적어도 하나의 입력 및 제1 트랜잭션의 출력을 잠금 해제하기 위한 잠금 해제 스크립트를 포함한다.
이러한 모델에서, 블록체인에 전파되고 기록되기 위하여 제2, 대상 트랜잭션이 P2P 네트워크로 전송될 때, 각 노드에 적용되는 유효성 조건 중 하나는 잠금 해제 스크립트가 제1 트랜잭션의 잠금 스크립트에 정의된 하나 이상의 조건을 모두 충족하는 것이다. 다른 하나는 제1 트랜잭션의 출력이 다른 이전 유효한 트랜잭션에 의해 이미 리딤되지 않았다는 것이다. 이러한 조건에 따라 대상 트랜잭션이 유효하지 않음을 발견한 임의의 노드는 이를 전파하지 않으며 블록체인에 기록할 블록으로 채굴하기 위해 포함하지 않는다.
트랜잭션 모델의 대안적인 유형은 계정 기반(account-based) 모델이다. 이 경우 각 트랜잭션은 과거 트랜잭션의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하는 것이 아니라, 절대 계정 잔액을 참조하여 전달할 금액을 정의한다. 모든 계정의 현재 상태는 블록체인과 별도로 채굴자에 의해 저장되며 지속적으로 갱신된다.
블록체인 프로토콜은 트랜잭션에 대해 스크립팅 언어(scripting language)를 사용할 수 있다. 스크립트는 본질적으로 데이터 또는 명령이 될 수 있는 요소의 목록이다. 명령은 문헌에서 스크립트 단어, 작업코드(opcode), 커맨드 또는 기능이라고 한다. Opcode(작업 코드(operation code)의 약어)는 스크립트 내의 데이터에 대해 미리 정의된 작업을 수행한다.
하나의 블록체인 스크립팅 언어는 임의의 루프 기능을 제외하고 포스(Forth)를 기반으로 한 듀얼(dual) 스택 구현이다. 포스는 듀얼 스택을 사용하며, 데이터 스택이 기본(main) 스택이고 반환 스택이 엑스트라(extra) 스택이다.
그러한 작업코드 중 하나는 OP_RETURN이다. 원래 블록체인 프로토콜에서 OP_RETURN의 목적은 스크립트 실행을 종료하는 것이었다. 이는 스크립트가 포함된 트랜잭션을 무효화하지 않았다. 그러나 이는 OP_RETURN이 트랜잭션의 입력 스크립트(들)에 포함될 때 사기성 공격으로 이어졌다. 특히 OP_RETURN이 포함된 트랜잭션의 임의의 입력 스크립트는 이전 트랜잭션의 출력 스크립트를 잠금 해제하는 데 사용될 수 있다. 따라서, 기존 블록체인 프로토콜에서, 작업코드 OP_RETURN이 증명할 수 있는 지출 불가능한 트랜잭션 출력을 나타내도록 프로토콜이 변경되어, 블록체인에 데이터를 저장할 수 있게 되었다. 기존 프로토콜에서는, OP_RETURN 작업코드를 사용하여 스크립트 실행을 종료함과 동시에 트랜잭션을 무효화하였다. 그러나 그 결과 입력 스크립트에 OP_RETURN이 있는 트랜잭션이 임의의 잠금 해제 스크립트와 함께 실행될 때 '참(TRUE)'(또는 유효한) 실행이 될 수 없기 때문에 블록체인 내에서 기능의 손실을 가져온다.
본원에 개시된 일 양상에 따르면, 블록체인 네트워크의 트랜잭션을 실행하는 방법이 제공되며, 제1 트랜잭션은 스택 기반 스크립팅 언어의 제1 잠금 스크립트를 포함하는 제1 출력을 적어도 포함하고, 상기 제1 잠금 스크립트는 작업코드의 제1 인스턴스가 실행되기 전에 실행될 상기 제1 잠금 스크립트의 일부를 포함하고, 제2 트랜잭션은 상기 제1 트랜잭션의 상기 제1 출력을 참조하는 제1 잠금 해제 스크립트를 포함하고, 상기 방법은, 상기 작업코드의 상기 제1 인스턴스를 실행할 때: 상기 제1 트랜잭션을 무효화하지 않으면서 상기 제1 잠금 스크립트의 실행을 종료하는 것; 적어도 하나의 스택으로부터 제1 데이터 요소를 판독하는 것-상기 제1 데이터 요소는 상기 제1 잠금 해제 스크립트 및 상기 제1 잠금 스크립트의 상기 일부의 실행 동안 생성됨; 및 상기 적어도 하나의 스택으로부터 판독된 상기 제1 데이터 요소를 오프체인(off-chain) 기능에 제공하는 것을 포함하고, 상기 기능은 적어도 상기 제1 데이터 요소에 기초하여 결과를 생성하도록 구성된다.
간결함을 위해, 특정 작업코드는 이하에서 "OP_RETURN"으로 지칭될 것이다. 그러나, 개시는 해당 특정 라벨을 갖는 작업코드에 제한되지 않는다. 더 일반적으로, 실시예가 블록체인 스크립팅 언어의 "OP_RETURN"으로 설명되지만, 스크립트 엔진(예를 들어, 스크립트 번역기)에 의해 호출될 때 특정 기능을 수행하는 임의의 작업코드를 사용하여 동일한 교시가 구현될 수 있으며, 기능은 트랜잭션을 무효화하지 않으면서 스크립트 실행을 종료하는 것이다. 작업코드의 제1 및 제2 인스턴스에 대한 참조는 동일한 유형의 작업코드 인스턴스로 해석되어야 한다.
여기서 OP_RETURN은 트랜잭션을 무효화하지 않는다. 따라서 OP_RETURN 이전의 잠금 스크립트(즉, OP_RETURN 이전에 실행된 스크립트 요소)가 호출(또는 실행)된 스크립트 요소는 오프체인 기능에 대한 입력으로서 사용될 수 있다. 즉, 잠금 스크립트가 실행되면 적어도 하나의 스택(예컨대, 기본 스택 또는 대체 스택(Alt stack))에 데이터가 남게 된다. 본 개시에 따르면, 노드 프로토콜은 OP_RETURN이 이 데이터가 스택(들)에서 판독되게 하고 오프체인 목적을 위한 기능에 제공되도록 적응된다.
예를 들어, 함수는 스택에서 판독된 데이터를 기반으로 새 트랜잭션을 생성할 수 있다. 데이터는 스택(들)으로부터 판독되고 "Return" 스택, 즉 기본 및 대체 스택과는 별개의 스택에 기록될 수 있다.
다른 예로, 스택에 남아 있는 데이터는 트랜잭션의 다른 부분에 대한 참조로서 사용될 수 있다. 예를 들어, 데이터는 함수에 의해 트랜잭션 내 출력의 인덱스(또는 주소)로 해석될 수 있다. 그런 다음 함수는 참조된 출력에 포함된 잠금 스크립트를 실행할 수 있다. 이러한 의미에서 함수는 잠금 스크립트를 식별하고 실행하는 "오프체인 스크립트 인터프리터"로서 작동한다. 이는 오프체인 루프를 만드는 데 사용할 수 있다.
본 개시의 실시예의 이해를 돕고 그러한 실시예가 실행되는 방법을 보여주기 위하여, 단지 예로서 첨부 도면을 참조한다:
도 1은 블록체인을 구현하는 시스템의 개략적인 블록도이다.
도 2는 블록체인에 기록될 수 있는 트랜잭션의 일부 예를 개략적으로 도시한다.
도 3은 블록체인을 구현하는 다른 시스템의 개략적인 블록도이다.
도 4는 트랜잭션을 실행하는 노드 소프트웨어의 개략적인 블록도이다.
도 5a는 각 입력이 플레이어로부터의 확약 r을 갖는 예시적인 개시 트랜잭션 TxIn을 도시한다.
도 5b는 출력 0이 참여자에게 디지털 자산을 전달하고 출력 1이 난수를 산출하는 오라클 트랜잭션 TxOracle의 예를 도시한다.
도 6a는 복합 기능 트랜잭션의 출력 0 내에서 아웃포인트(outpoint) 주소 1로 점프할 때 오프 블록 스크립트 번역기의 예를 도시한다.
도 6b는 아웃포인트 사이에 가능한 많은 점프를 통합하는 복합 기능 트랜잭션의 예를 도시한다.
도 7은 입력 a = 105 및 b = 28에 대한 유클리드 알고리즘의 복합 스크립트 기능에서 루프를 푸는 예이다.
도 8은 입력 5, G를 사용한 타원 곡선 점 곱셈의 예이며, 여기에서 대체 스택(음영 처리됨)이 기본 스택과 함께 표시된다.
도 1은 블록체인(150)을 구현하는 예시적인 시스템(100)을 도시한다. 시스템(100)은 패킷 교환 네트워크(101), 일반적으로 인터넷과 같은 광역 인터네트워크를 포함한다. 패킷 교환 네트워크(101)는 패킷 교환 네트워크(101) 내에서 피어-투-피어(P2P) 오버레이 네트워크(106)를 형성하도록 배열된 복수의 노드(104)를 포함한다. 각 노드(104)는 피어의 컴퓨터 장비를 포함하며, 상이한 노드(104)는 상이한 피어에 속한다. 각 노드(104)는 하나 이상의 프로세서, 예를 들어, 하나 이상의 중앙 처리 장치(CPU), 가속기 프로세서, 애플리케이션 특정 프로세서 및/또는 필드 프로그램 가능 게이트 어레이(FPGA)를 포함한다. 각 노드는 또한 메모리, 즉 비일시적 컴퓨터 판독 가능 매체 형태의 컴퓨터 판독 가능 스토리지를 포함한다. 메모리는 하나 이상의 메모리 매체, 예를 들어, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 드라이브(SSD), 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광 디스크 드라이브와 같은 광 매체를 사용하는 하나 이상의 메모리 유닛을 포함할 수 있다.
블록체인(150)은 데이터 블록의 체인(151)을 포함하며, 블록체인(150)의 각자의 사본이 P2P 네트워크(160)의 복수의 노드 각각에서 유지된다. 체인 내의 각 블록(151)은 하나 이상의 트랜잭션(152)을 포함하며, 이 맥락에서 트랜잭션은 일종의 데이터 구조를 지칭한다. 데이터 구조의 특성은 트랜잭션 모델 또는 체계의 일부로 사용되는 트랜잭션 프로토콜 유형에 의존할 것이다. 주어진 블록체인은 일반적으로 전체에 걸쳐 하나의 특정 트랜잭션 프로토콜을 사용한다. 하나의 공통 유형의 트랜잭션 프로토콜에서, 각 트랜잭션(152)의 데이터 구조는 적어도 하나의 입력 및 적어도 하나의 출력을 포함한다. 각 출력은 출력이 암호로 잠긴 사용자(103)에 속한 디지털 자산의 양을 나타내는 금액을 지정한다(잠금을 해제하여 리딤(redeem)하거나 지출하기 위해서는 해당 사용자의 서명이 필요함). 각 입력은 선행 트랜잭션(152)의 출력을 뒤로 가리키므로, 트랜잭션을 연결한다.
노드(104) 중 적어도 일부는 트랜잭션(152)를 전달하고 이에 따라 전파하는 전달 노드(104F)의 역할을 수행한다. 노드(104) 중 적어도 일부는 블록(151)을 채굴하는 채굴자(104M)의 역할을 수행한다. 노드(104) 중 적어도 일부는 각자의 메모리에 동일한 블록체인(150)의 각자의 사본을 저장하는 저장 노드(104S)(때때로 "전체 사본(full-copy)" 노드라고도 함)의 역할을 한다. 각 채굴자 노드(104M)는 또한 블록(151)으로 채굴되기를 기다리는 트랜잭션(152)의 풀(154)을 유지한다. 주어진 노드(104)는 전달 노드(104), 채굴자(104M), 저장 노드(104S) 또는 이들 중 임의의 둘 또는 모두의 조합일 수 있다.
주어진 현재 트랜잭션(152j)에서, 그(또는 각각의) 입력은 트랜잭션 시퀀스에서 선행 트랜잭션(152i)의 출력을 참조하는 포인터를 포함하며, 이 출력이 현재 트랜잭션(152j)에서 리딤되거나 "지출됨"을 지정한다. 일반적으로, 선행 트랜잭션은 풀(154) 또는 임의의 블록(151) 내의 임의의 트랜잭션일 수 있다. 선행 트랜잭션(152i)은 현재 트랜잭션(152j)이 생성되거나 네트워크(106)로 전송될 때 반드시 존재할 필요는 없지만, 선행 트랜잭션(152i)은 현재 트랜잭션이 유효하려면 존재하고 유효성 검증되어야 한다. 따라서 본원에서 "선행(preceding)"은 포인터에 의해 연결된 논리적 시퀀스의 선행자를 지칭하며, 반드시 시간적 시퀀스로 생성 또는 전송하는 시간이 아니고, 따라서 트랜잭션(152i, 152j)이 순서와 다르게(out-of-order)(고아 트랜잭션에 대한 아래 논의 참조) 생성되거나 전송되는 것을 반드시 배제하지 않는다. 선행 트랜잭션(152i)은 앞선(antecedent) 트랜잭션 또는 선행자(predecessor) 트랜잭션으로 동등하게 지칭될 수 있다.
현재 트랜잭션(152j)의 입력은 또한 선행 트랜잭션(152i)의 출력이 잠겨 있는 사용자(103a)의 서명을 포함한다. 차례로, 현재 트랜잭션(152j)의 출력은 새로운 사용자(103b)에 대해 암호학적으로 잠길 수 있다. 따라서 현재 트랜잭션(152j)은 선행 트랜잭션(152i)의 입력에 정의된 금액을 현재 트랜잭션(152j)의 출력에 정의된 바와 같이 새로운 사용자(103b)에게 전달할 수 있다. 일부 경우에 트랜잭션(152)은 다수의 사용자(그 중 하나는 잔돈을 주기 위해 원래 사용자(103a)일 수 있음) 사이에 입력 금액을 분할하기 위해 다수의 출력을 가질 수 있다. 일부 경우에 트랜잭션은 또한 하나 이상의 선행 트랜잭션의 다수의 출력에서 금액을 수집하고 현재 트랜잭션의 하나 이상의 출력에 재분배하기 위해 다수의 입력을 가질 수도 있다.
위의 것은 "출력 기반" 트랜잭션 프로토콜로 지칭될 수 있으며, 때때로 또한 미지출 트랜잭션 출력(UTXO) 유형 프로토콜(출력을 UTXO로 지칭함)로 지칭된다. 사용자의 총 잔액은 블록체인에 저장된 어떤 하나의 숫자로 정의되지 않으며, 대신 사용자는 블록체인(151) 내의 많은 상이한 트랜잭션(152)에 흩어져 있는 해당 사용자의 모든 UTXO 값을 대조하기 위해 특별한 "지갑" 애플리케이션(105)이 필요하다.
트랜잭션 프로토콜의 대안적인 유형은 계정 기반 트랜잭션 모델의 일부로 "계정 기반" 프로토콜로 지칭될 수 있다. 계정 기반의 경우, 각 트랜잭션은 과거 트랜잭션의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하여 전달할 금액을 정의하지 않고, 절대 계정 잔액을 참조한다. 모든 계정의 현재 상태는 블록체인과 별도로 채굴자에 의해 저장되며 지속적으로 갱신된다. 이러한 시스템에서, 트랜잭션은 계정의 실행 중인 트랜잭션 집계("포지션"이라고도 함)를 사용하여 정렬된다. 이 값은 암호화 서명의 일부로 발신인이 서명하고 트랜잭션 참조 계산의 일부로 해시된다. 또한 선택적 데이터 필드가 또한 트랜잭션 내에서 서명될 수도 있다. 이 데이터 필드는 예를 들어 선행 트랜잭션 ID가 데이터 필드에 포함된 경우 선행 트랜잭션을 뒤로 가리킬 수 있다.
트랜잭션 프로토콜의 어느 유형이든, 사용자(103)가 새로운 트랜잭션(152j)을 시행하기를 원할 때, 그/그녀는 자신의 컴퓨터 단말(102)에서 P2P 네트워크(106)의 노드(104) 중 하나(최근에는 일반적으로 서버 또는 데이터 센터, 그러나 원칙적으로 다른 사용자 단말이 될 수 있음)로 새로운 트랜잭션을 보낸다. 이 노드(104)는 각 노드(104)에 적용되는 노드 프로토콜에 따라 트랜잭션이 유효한지 확인한다. 노드 프로토콜의 세부사항은 해당 블록체인(150)에서 사용되는 트랜잭션 프로토콜의 유형에 대응하며, 함께 전체 트랜잭션 모델을 형성한다. 노드 프로토콜은 일반적으로 노드(104)가 새로운 트랜잭션(152j)의 암호화 서명이 예상되는 서명과 일치하는지 확인하도록 요구하며, 이는 트랜잭션(152)의 정렬된 시퀀스에서 이전 트랜잭션(152i)에 의존한다. 출력 기반의 경우에, 이는 새로운 트랜잭션(152j)의 입력에 포함된 사용자의 암호화 서명이 새로운 트랜잭션이 지출하는 선행 트랜잭션(152i)의 출력에 정의된 조건과 일치하는지 확인하는 것을 포함하며, 여기에서 이 조건은 일반적으로 적어도 새로운 트랜잭션(152j)의 입력 내의 암호화 서명이 새로운 트랜잭션의 입력이 가리키는 이전 트랜잭션(152i)의 출력을 잠금 해제하는지 확인하는 것을 포함한다. 일부 트랜잭션 프로토콜에서 조건은 입력 및/또는 출력에 포함된 사용자 정의 스크립트에 의해 적어도 부분적으로 정의될 수 있다. 대안적으로 단순히 노드 프로토콜만으로 고정되거나, 이들의 조합으로 인한 것일 수 있다. 어느 쪽이든, 새로운 트랜잭션(152j)이 유효하면, 현재 노드는 이를 P2P 네트워크(106)의 하나 이상의 다른 노드(104)로 전달한다. 이러한 노드(104) 중 적어도 일부는 또한 전달 노드(104F)의 역할을 하여, 동일한 노드 프로토콜에 따른 동일한 테스트를 적용하고, 새로운 트랜잭션(152j)을 하나 이상의 추가 노드(104)로 전달하며, 이와 같이 계속된다. 이러한 방식으로 새로운 트랜잭션은 노드(104)의 네트워크 전체에 전파된다.
출력 기반 모델에서, 주어진 출력(예를 들어, UTXO)의 지출 여부에 대한 정의는 노드 프로토콜에 따라 다른 앞의 트랜잭션(152j)의 입력에 의해 유효하게 리딤되었는지의 여부이다. 트랜잭션이 유효하기 위한 다른 조건은 지출 또는 리딤을 시도하는 선행 트랜잭션(152i)의 출력이 다른 유효한 트랜잭션에 의해 이미 지출/리딤되지 않은 것이다. 유효하지 않은 경우에는, 트랜잭션(152j)은 블록체인에 전파되거나 기록되지 않는다. 이는 지출자가 동일한 트랜잭션의 출력을 두 번 이상 사용하고자 시도하는 이중 지출을 방지한다. 반면 계정 기반 모델은 계정 잔액을 유지하여 이중 지출을 방지한다. 트랜잭션의 정의된 순서가 있기 때문에, 계정 잔액은 임의의 일 시간에 단일의 정의된 상태를 갖는다.
유효성 검증에 추가하여, 노드(104M) 중 적어도 일부는 "작업 증명"에 의해 뒷받침되는 채굴로 알려진 프로세스에서 트랜잭션 블록을 최초로 생성하기 위해 경쟁한다. 채굴 노드(104M)에서, 아직 블록에 나타나지 않은 유효한 트랜잭션의 풀에 새로운 트랜잭션이 추가된다. 그런 다음 채굴자는 암호화 퍼즐을 풀고자 시도함으로써 트랜잭션의 풀(154)로부터 트랜잭션(152)의 새로운 유효한 블록(151)을 조립하기 위해 경쟁한다. 일반적으로 이것은 논스가 트랜잭션(154)의 풀과 연결되고 해시될 때 해시의 출력이 미리 결정된 조건을 충족하도록 "논스(nonce)" 값을 검색하는 것을 포함한다. 예를 들어 사전 결정된 조건은 해시의 출력이 사전 정의된 특정 수의 선행 0을 갖는 것일 수 있다. 해시 함수의 속성은 그 입력에 대해 예측할 수 없는 출력을 갖는다는 것이다. 따라서 이 검색은 무차별 대입에 의해서만 수행될 수 있으므로, 퍼즐을 풀고자 하는 각 노드(104M)에서 상당한 양의 처리 자원을 소비한다.
퍼즐을 풀고자 하는 제1 채굴자 노드(104M)는 이를 네트워크(106)에 발표하고, 그 해(solution)를 증명으로 제공하며, 이는 네트워크의 다른 노드(104)가 쉽게 확인할 수 있다(해시에 대한 해가 주어지면 해시의 출력이 조건을 충족하도록 하는지 확인하는 것은 간단하다). 승자가 퍼즐을 해결한 트랜잭션의 풀(154)은 각 노드에서 승자의 발표된 해를 확인한 것에 기초하여, 저장 노드(104S)의 역할을 하는 적어도 일부의 노드(104) 에 의해 블록체인(150)에 새로운 블록(151)으로 기록된다. 블록 포인터(155)가 또한 체인에서 이전에 생성된 블록(151n-1)을 뒤로 가리키는 새로운 블록(151n)에 할당된다. 새로운 블록(151)을 생성하는 데 많은 노력이 필요하고 이중 지출을 포함하는 블록은 다른 노드(104)에 의해 거부될 가능성이 높기 때문에, 채굴 노드(104M)는 이중 지출이 블록에 포함되는 것을 허용하지 않도록 장려되어 작업 증명은 이중 지출의 위험을 줄이는 데 도움이 된다. 일단 생성되면, 블록(151)은 동일한 프로토콜에 따라 P2P 네트워크(106)의 저장 노드(104S) 각각에서 인식되고 유지되기 때문에 수정될 수 없다. 블록 포인터(155)는 또한 블록(151)에 순차적인 순서를 부과한다. 트랜잭션(152)은 P2P 네트워크(106)의 각 저장 노드(104S)에서 순서화된 블록에 기록되기 때문에, 이는 따라서 트랜잭션의 불변 공개 원장을 제공한다.
해의 검색을 시작한 시기에 따라, 주어진 시간에 퍼즐을 풀기 위해 경쟁하는 다른 채굴자(104M)가, 주어진 시간에 채굴되지 않은 트랜잭션 풀(154)의 다른 스냅샷에 기초하여 그렇게 할 수 있다는 점에 유의한다. 각자의 퍼즐을 먼저 푸는 사람이 다음의 새로운 블록(151n)에 포함되는 트랜잭션(152)을 정의하고, 채굴되지 않은 트랜잭션의 현재 풀(154)이 갱신된다. 그런 다음 채굴자(104M)는 새로 정의된 미해결 풀(154)로부터 블록을 생성하기 위해 계속 경쟁하며, 이와 같이 계속된다. 두 채굴자(104M)가 매우 짧은 시간 내에 퍼즐을 해결하여 블록체인에 대한 상충되는 뷰(view)가 전파되는 것인 "포크(fork)"가 발생하는 것을 해결하기 위한 프로토콜 또한 존재한다. 요컨대, 포크의 갈래가 가장 길게 자라는 것이 최종 블록체인(150)이 된다.
대부분의 블록체인에서, 승리한 채굴자(104M)는 새로운 양의 디지털 자산을 어디에선지 모르게 생성하는(한 사용자로부터 다른 사용자에게 디지털 자산의 금액을 전달하는 일반 트랜잭션과 반대) 특별한 종류의 새로운 트랜잭션으로 자동 보상을 받는다. 따라서 승리한 노드는 디지털 자산의 양을 "채굴"했다고 한다. 이 특별한 유형의 트랜잭션은 때때로 "생성" 트랜잭션으로 지칭된다. 이는 새로운 블록(151n)의 일부를 자동으로 형성한다. 이 보상은 채굴자(104M)가 작업 증명 경쟁에 참여하는 인센티브를 제공한다. 종종 일반(비생성) 트랜잭션(152) 또한 해당 트랜잭션이 포함된 블록(151n)을 생성한 우승 채굴자(104M)에게 추가로 보상하기 위해, 그 출력 중 하나에 추가 트랜잭션 수수료를 지정할 것이다.
채굴과 관련된 계산 자원으로 인해, 일반적으로 적어도 각 채굴자 노드(104M)는 하나 이상의 물리적 서버 유닛, 또는 심지어 전체 데이터 센터를 포함하는 서버의 형태를 취한다. 각 전달 노드(104M) 및/또는 저장 노드(104S) 또한 서버 또는 데이터 센터의 형태를 취할 수 있다. 그러나 원칙적으로 임의의 주어진 노드(104)는 함께 네트워크로 연결된 사용자 단말 또는 그룹의 형태를 취할 수 있다.
각 노드(104)의 메모리는 노드 프로토콜에 따라 각자의 역할을 수행하고 트랜잭션(152)을 처리하기 위해 노드(104)의 처리 장치에서 실행되도록 구성된 소프트웨어를 저장한다. 본원에서 노드(104)에 기인한 임의의 동작은 각자의 컴퓨터 장비의 처리 장치에서 실행되는 소프트웨어에 의해 수행될 수 있다는 것이 이해될 것이다. 노드 소프트웨어는 애플리케이션 계층, 또는 운영 체제 계층이나 프로토콜 계층과 같은 하위 계층, 또는 이들의 임의의 조합에서 하나 이상의 애플리케이션에서 구현될 수 있다. 또한, 본원에서 사용하는 "블록체인"이라는 용어는 일반적으로 기술의 종류를 지칭하는 총칭으로, 특정 독점 블록체인, 프로토콜 또는 서비스에 제한되지 않는다.
또한 네트워크(101)에는 소비 사용자의 역할을 하는 복수의 당사자(103) 각각의 컴퓨터 장비(102)가 연결되어 있다. 이들은 트랜잭션에서 지급인 및 수취인 역할을 하지만 다른 당사자를 대신하여 트랜잭션을 채굴하거나 전파하는 데 반드시 참여하는 것은 아니다. 그들은 반드시 채굴 프로토콜을 실행할 필요는 없다. 제1 당사자(103a) 및 그/그녀의 각각의 컴퓨터 장비(102a), 및 제2 당사자(103b) 및 그/그녀의 각각의 컴퓨터 장비(102b)인 두 당사자(103) 및 그들 각자의 장비(102)가 예시 목적으로 도시되어 있다. 더 많은 이러한 당사자(103) 및 그들 각자의 컴퓨터 장비(102)가 존재하고 시스템에 참여할 수 있지만, 편의상 그것들은 도시되지 않았다는 것이 이해될 것이다. 각 당사자(103)는 개인 또는 조직일 수 있다. 순전히 예시로서 제1 당사자(103a)는 본원에서 앨리스(Alice)로 지칭되고 제2 당사자(103b)는 밥(Bob)으로 지칭되지만, 이것이 제한적이지 않고 앨리스 또는 밥에 대한 본원에서의 임의의 언급은 각각 "제1 당사자" 및 "제2 당사자"로 대체될 수 있음을 이해할 것이다.
각 당사자(103)의 컴퓨터 장비(102)는 하나 이상의 프로세서, 예를 들어, 하나 이상의 CPU, GPU, 기타 가속기 프로세서, 애플리케이션 특정 프로세서 및/또는 FPGA를 포함하는 각자의 처리 장치를 포함한다. 각 당사자(103)의 컴퓨터 장비(102)는 메모리, 즉 비일시적 컴퓨터 판독 가능 매체 형태의 컴퓨터 판독 가능 스토리지(storage)를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체, 예를 들어, 하드 디스크와 같은 자기 매체; SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광 디스크 드라이브와 같은 광 매체를 사용하는 하나 이상의 메모리 유닛을 포함할 수 있다. 각 당사자(103)의 컴퓨터 장비(102) 상의 메모리는 처리 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션(105)의 각자의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 당사자(103)에 기인한 임의의 동작은 각자의 컴퓨터 장비(102)의 처리 장치에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것을 이해할 것이다. 각 당사자(103)의 컴퓨터 장비(102)는 적어도 하나 사용자 단말, 예를 들어 데스크탑 또는 랩탑 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 장치를 포함한다. 주어진 당사자(103)의 컴퓨터 장비(102)는 또한 사용자 단말을 통해 접근되는 클라우드 컴퓨팅 자원과 같은 하나 이상의 다른 네트워크 자원을 포함할 수 있다.
클라이언트 애플리케이션(105)은 임의의 주어진 당사자(103)의 컴퓨터 장비(102)에 적절한 컴퓨터 판독 가능 저장 매체 상에, 예를 들어 서버로부터 다운로드하거나, 또는 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, CD 또는 DVD ROM과 같은 광 디스크 또는 이동식 광 드라이브 등과 같은 이동식 저장 장치에 제공되어 초기에 제공될 수 있다.
클라이언트 애플리케이션(105)은 적어도 "지갑" 기능을 포함한다. 여기에는 두 가지 주요 기능이 있다. 이들 중 하나는 각 사용자 당사자(103)가 노드(104)의 네트워크 전체에 전파되어 블록체인(150)에 포함될 트랜잭션(152)을 생성, 서명 및 전송할 수 있게 하는 것이다. 다른 하나는 각각의 당사자에게 현재 소유하고 있는 디지털 자산의 금액을 다시 보고하는 것이다. 출력 기반 시스템에서, 이 제2 기능은 블록체인(150) 전체에 흩어져 있는 해당 당사자에 속하는 다양한 트랜잭션(152)의 출력에 정의된 금액을 대조하는 것을 포함한다.
참고: 다양한 클라이언트 기능이 주어진 클라이언트 애플리케이션(105)에 통합되는 것으로서 설명될 수 있지만, 이는 반드시 제한적인 것이 아니며 대신에 여기에 설명된 임의의 클라이언트 기능은 대신에 둘 이상의 별개의 애플리케이션, 예를 들어, API를 통한 인터페이스, 또는 다른 하나에 대한 플러그인인 것의 모음으로 구현될 수 있다. 보다 일반적으로 클라이언트 기능은 애플리케이션 계층이나 운영 체제와 같은 하위 계층, 또는 이들의 조합에서 구현될 수 있다. 다음은 클라이언트 애플리케이션(105)의 측면에서 설명될 것이지만 이는 제한적이지 않음이 이해될 것이다.
각 컴퓨터 장비(102) 상의 소프트웨어 또는 클라이언트 애플리케이션 (105)의 인스턴스는 P2P 네트워크(106)의 전달 노드(104F) 중 적어도 하나에 동작 가능하게 연결된다. 이는 클라이언트(105)의 지갑 기능이 트랜잭션(152)을 네트워크(106)로 전송할 수 있게 한다. 클라이언트(105)는 또한 각각의 당사자(103)가 수령인인 임의의 트랜잭션에 대해 블록체인(150)에 질의하기 위해(또는 실제로 블록체인(150)에서 다른 당사자의 트랜잭션을 검사하기 위해, 실시예에서 블록체인(150)은 그 공개 가시성을 통해 부분적으로 트랜잭션에 대한 신뢰를 제공하는 공공 시설이므로) 저장 노드(104) 중 하나, 일부 또는 전부에 접촉할 수 있다. 각 컴퓨터 장비(102) 상의 지갑 기능은 트랜잭션 프로토콜에 따라 트랜잭션(152)을 공식화하고 전송하도록 구성된다. 각 노드(104)는 노드 프로토콜에 따라 트랜잭션(152)을 유효성 검증하도록 구성된 소프트웨어를 실행하고, 전달 노드(104F)의 경우 네트워크(106) 전체에 전파하기 위해 트랜잭션(152)를 전달한다. 트랜잭션 프로토콜과 노드 프로토콜은 서로 대응하며, 주어진 트랜잭션 프로토콜은 주어진 트랜잭션 모델을 함께 구현하는 주어진 노드 프로토콜을 따른다. 블록체인(150)의 모든 트랜잭션(152)에 대해 동일한 트랜잭션 프로토콜이 사용된다(그러나 트랜잭션 프로토콜은 내부에서 상이한 하위 유형의 트랜잭션을 허용할 수 있음). 동일한 노드 프로토콜이 네트워크(106)의 모든 노드(104)에 의해 사용된다(그러나 이는 해당 하위 유형에 대해 정의된 규칙에 따라 상이한 하위 유형의 트랜잭션을 상이하게 처리할 수 있으며, 또한 상이한 노드가 상이한 역할을 수행하여 프로토콜의 상이한 대응하는 양상을 구현할 수 있음).
언급된 바와 같이, 블록체인(150)은 블록(151)의 체인을 포함하고, 여기에서 각 블록(151)은 이전에 논의된 바와 같이 작업 증명 프로세스에 의해 생성된 하나 이상의 트랜잭션(152) 집합을 포함한다. 각 블록(151)은 또한 블록(151)에 대한 순차적인 순서를 정의하기 위해 체인에서 이전에 생성된 블록(151)을 다시 가리키는 블록 포인터(155)를 포함한다. 블록체인(150)은 또한 작업 증명 프로세스에 의해 새로운 블록에 포함되기를 기다리는 유효한 트랜잭션의 풀(154)을 포함한다. 각 트랜잭션(152)은 트랜잭션 시퀀스에 대한 순서를 정의하기 위해 이전 트랜잭션에 대한 포인터를 다시 포함한다(트랜잭션(152)의 시퀀스는 분기가 허용됨을 유의한다). 블록의 체인(151)은 체인의 첫 번째 블록인 제네시스 블록(Gb)(153)까지 거슬러 올라간다. 체인(150) 초반의 하나 이상의 원래 트랜잭션(152)은 선행 트랜잭션이 아닌 제네시스 블록(153)을 가리킨다.
주어진 당사자(103), 예를 들어 앨리스가 블록체인(150)에 포함될 새로운 트랜잭션(152j)을 전송하기를 원할 때, 그녀는 (자신의 클라이언트 애플리케이션(105)에서 지갑 기능을 사용하여) 관련 트랜잭션 프로토콜에 따라 새로운 트랜잭션을 공식화한다. 그런 다음 그녀는 클라이언트 애플리케이션(105)으로부터 자신이 연결된 하나 이상의 전달 노드(104F) 중 하나로 트랜잭션(152)을 전송한다. 예를 들어 이는 앨리스의 컴퓨터(102)에 가장 가깝거나 가장 잘 연결된 전달 노드(104F)일 수 있다. 임의의 주어진 노드(104)가 새로운 트랜잭션(152j)을 수신할 때, 노드 프로토콜 및 각자의 역할에 따라 이를 처리한다. 이는 새로 수신된 트랜잭션(152j)이 "유효하기" 위한 특정 조건을 충족하는지 여부를 먼저 확인하는 것을 포함하며, 그 예는 곧 더 자세히 논의될 것이다. 일부 트랜잭션 프로토콜에서, 유효성 검증을 위한 조건은 트랜잭션(152)에 포함된 스크립트에 의해 트랜잭션별로 구성할 수 있다. 대안적으로 조건은 단순히 노드 프로토콜의 내장 기능이거나, 스크립트 및 노드 프로토콜의 조합으로 정의될 수 있다.
새로 수신된 트랜잭션(152j)이 유효한 것으로 간주되는 테스트를 통과한 경우(즉, "유효성 검증된" 조건에서), 트랜잭션(152j)을 수신하는 임의의 저장 노드(104S)는 새로운 유효성 검증된 트랜잭션(152)을 해당 노드(104S)에서 유지되는 블록체인(150)의 사본 내의 풀(154)에 추가할 것이다. 또한, 트랜잭션(152j)을 수신하는 임의의 전달 노드(104F)는 유효성 검증된 트랜잭션(152)을 P2P 네트워크(106)의 하나 이상의 다른 노드(104)로 전파할 것이다. 각 전달 노드(104F)가 동일한 프로토콜을 적용하기 때문에, 트랜잭션(152j)이 유효하다고 가정하면, 이는 곧 전체 P2P 네트워크(106)에 전파될 것임을 의미한다.
하나 이상의 저장 노드(104)에서 유지되는 블록체인(150)의 사본에서 풀(154)에 일단 승인되면, 채굴자 노드(104M)는 새로운 트랜잭션(152)을 포함하는 풀(154)의 최신 버전에서 작업 증명 퍼즐을 풀기 위해 경쟁하기 시작할 것이다(다른 채굴자(104M)가 풀(154)의 이전 뷰에 기초하여 퍼즐을 풀고자 여전히 시도할 수 있지만, 누구든 먼저 도달한 사람이 다음 새로운 블록(151)이 끝나고 새로운 풀(154)이 시작되는 위치를 정의할 것이며, 결국 누군가가 앨리스의 트랜잭션(152j)을 포함하는 풀(154)의 일부에 대한 퍼즐을 풀게 될 것이다). 새로운 트랜잭션(152j)을 포함하는 풀(154)에 대한 작업 증명이 완료되면, 이는 변경 불가능하게 블록체인(150) 내의 블록(151) 중 하나의 일부가 된다. 각 트랜잭션(152)은 이전 트랜잭션에 대한 뒤로의 포인터를 포함하므로, 트랜잭션의 순서가 또한 변경 불가능하게 기록된다.
상이한 노드(104)는 주어진 트랜잭션의 상이한 인스턴스를 먼저 수신할 수 있고, 따라서 하나의 인스턴스가 블록(150)으로 채굴되기 전에 어느 인스턴스가 '유효'한지에 대한 충돌하는 뷰를 가질 수 있으며, 이 시점에서 모든 노드(104)는 채굴된 인스턴스가 유일한 유효한 인스턴스라는 데에 동의한다. 노드(104)가 하나의 인스턴스를 유효한 것으로 수락한 다음 제2 인스턴스가 블록체인(150)에 기록되었음을 발견하면 해당 노드(104)는 이를 수락해야 하고 최초로 수락한 채굴되지 않은 인스턴스를 폐기(즉, 무효로 처리)한다.
도 2는 예시적인 트랜잭션 프로토콜을 도시한다. 이는 UTXO 기반 프로토콜의 예이다. 트랜잭션(152)(약칭 "Tx")은 블록체인(150)의 기본 데이터 구조이다(각 블록(151)은 하나 이상의 트랜잭션(152)을 포함함). 다음은 출력 기반 또는 "UTXO" 기반 프로토콜을 참조하여 설명될 것이다. 그러나 이것은 모든 가능한 실시예로 제한되지 않는다.
UTXO 기반 모델에서, 각 트랜잭션("Tx")(152)은 하나 이상의 입력(202) 및 하나 이상의 출력(203)을 포함하는 데이터 구조를 포함한다. 각 출력(203)은 다른 새로운 트랜잭션의 입력(202)에 대한 소스로서 사용될 수 있는(UTXO가 아직 리딤되지 않은 경우), 미지출 트랜잭션 출력(UTXO)을 포함할 수 있다. UTXO는 디지털 자산(가치 저장소)의 금액을 지정한다. 이는 또한 다른 정보와 함께, 트랜잭션이 발생한 트랜잭션 ID를 포함할 수 있다. 트랜잭션 데이터 구조는 또한 입력 필드(들)(202) 및 출력 필드(들)(203)의 크기의 표시자를 포함할 수 있는 헤더(201)를 포함할 수 있다. 헤더(201)는 또한 트랜잭션의 ID를 포함할 수 있다. 실시예에서 트랜잭션 ID는 트랜잭션 데이터의 해시이고(트랜잭션 ID 자체는 제외) 채굴자(104M)에게 제출된 원시 트랜잭션(152)의 헤더(201)에 저장된다.
앨리스(103a)가 문제의 디지털 자산의 금액을 밥(103b)에게 전달하는 트랜잭션(152j)을 생성하기를 원한다고 하자. 도 2에서 앨리스의 새로운 트랜잭션(152j)은 "Tx1"로 라벨이 지정된다. 이는 시퀀스 내의 선행 트랜잭션(152i)의 출력(203)에서 앨리스에게 잠긴 디지털 자산의 금액을 취하고, 이 중 적어도 일부를 밥에게 전달한다. 선행 트랜잭션(152i)은 도 2에서 "Tx0"으로 라벨이 지정된다. Tx0 및 Tx1은 임의의 라벨일 뿐이다. Tx0이 블록체인(151)의 제1 트랜잭션이거나, Tx1이 풀(154)의 바로 다음 트랜잭션이라는 것을 반드시 의미하지는 않는다. Tx1은 앨리스에게 잠긴 미지출 출력(203)을 여전히 갖고 있는 임의의 선행(즉, 앞선) 트랜잭션을 가리킬 수 있다.
선행 트랜잭션 Tx0은 앨리스가 새로운 트랜잭션 Tx1을 생성할 때, 또는 적어도 그녀가 그것을 네트워크(106)에 전송할 때 이미 유효성 검증되어 블록체인(150)에 포함되어 있을 수 있다. 이는 그 시간에 이미 블록(151) 중 하나에 포함되었거나, 풀(154)에서 여전히 대기 중일 수 있으며, 이 경우 곧 새로운 블록(151)에 포함될 것이다. 대안적으로 Tx0 및 Tx1이 생성되어 네트워크(102)에 함께 전송되거나, 또는 노드 프로토콜이 "고아(orphan)" 트랜잭션 버퍼링을 허용하는 경우 Tx0이 Tx1 이후에 전송될 수 있다. 트랜잭션의 시퀀스의 맥락에서 본원에서 사용되는 "선행" 및 "후속"이라는 용어는 (트랜잭션이 다른 트랜잭션을 뒤로 가리키고, 이와 같이 계속되는) 트랜잭션 내에 지정된 트랜잭션 포인터에 의해 정의된 시퀀스 내의 트랜잭션의 순서를 지칭한다. 이는 "선행자(predecessor)"와 "후행자(successor)", 또는 "앞선(antecedent)"와 "후위의(descendant)", "부모"와 "자식" 등으로 동등하게 대체될 수 있다. 이는 그것들이 생성되고, 네트워크(106)로 전송되거나, 임의의 주어진 노드(104)에 도달하는 순서를 반드시 의미하지는 않는다. 그럼에도 불구하고, 선행 트랜잭션(앞선 트랜잭션 또는 "부모")을 가리키는 후속 트랜잭션(후위의 트랜잭션 또는 "자식")은 부모 트랜잭션이 유효성 검증될 때까지 그리고 유효성 검증되지 않는 한 유효성 검증되지 않는다. 부모보다 먼저 노드(104)에 도착하는 자식은 고아로 간주된다. 이는 노드 프로토콜 및/또는 채굴자 행위에 따라 삭제되거나 부모를 기다리기 위해 특정 시간 동안 버퍼링될 수 있다.
선행 트랜잭션 Tx0의 하나 이상의 출력(203) 중 하나는, 본원에서 UTXO0으로 라벨이 지정되는 특정 UTXO를 포함한다. 각 UTXO는 UTXO가 나타내는 디지털 자산의 금액을 지정하는 값과 후속 트랜잭션이 유효성 검증되고 따라서 UTXO가 성공적으로 리딤되기 위하여 후속 트랜잭션의 입력(202)에서 잠금 해제 스크립트가 충족해야 하는 조건을 정의하는 잠금 스크립트를 포함한다. 일반적으로 잠금 스크립트는 특정 당사자(그것이 포함된 트랜잭션의 수혜자)에게 금액을 잠근다. 즉, 잠금 스크립트는, 일반적으로 후속 트랜잭션의 입력 내의 잠금 해제 스크립트가 선행 트랜잭션이 잠겨 있는 당사자의 암호화 서명을 포함하는 조건을 포함하는 잠금 해제 조건을 정의한다.
잠금 스크립트(일명 scriptPubKey)는 노드 프로토콜에 의해 인식되는 도메인 특정 언어로 작성된 코드이다. 이러한 언어의 특정 예를 "스크립트(Script)"(대문자 S)라고 한다. 잠금 스크립트는 트랜잭션 출력(203)을 사용하는 데 필요한 정보, 예를 들어 앨리스의 서명의 요구 사항을 지정한다. 잠금 해제 스크립트는 트랜잭션 출력에 나타난다. 잠금 해제 스크립트(일명 scriptSig)는 잠금 스크립트 기준을 충족하는 데 필요한 정보를 제공하는 도메인 특정 언어로 작성된 코드이다. 예를 들어, 이는 밥의 서명을 포함할 수 있다. 잠금 해제 스크립트는 트랜잭션의 입력(202)에 나타난다.
따라서 도시된 예에서, Tx0의 출력(203)에 있는 UTXO0은 UTXO0을 리딤하기 위해(엄밀히 말하자면, UTXO0을 리딤하고자 시도하는 후속 트랜잭션이 유효하기 위해) 앨리스의 서명 Sig PA를 요구하는 잠금 스크립트 [Checksig PA]를 포함한다. [Checksig PA]는 앨리스의 공개-개인 키 쌍의 공개 키 PA를 포함한다. Tx1의 입력(202)은 Tx1을 다시 가리키는 포인터를 포함한다(예를 들어, 실시예에서 전체 트랜잭션 Tx0의 해시인 트랜잭션 ID TxID0에 의해). Tx1의 입력(202)은 Tx0의 다른 가능한 출력들 사이에서 이를 식별하기 위해 Tx0 내에서 UTXO0을 식별하는 색인을 포함한다. Tx1의 입력(202)은 앨리스의 암호화 서명을 포함하는 잠금 해제 스크립트 <Sig PA>를 더 포함하며, 이는 앨리스가 키 쌍으로부터 자신의 개인 키를 데이터의 미리 정의된 부분(때때로 암호화에서 "메시지"라고 함)에 적용하여 생성된다. 유효한 서명을 제공하기 위해 앨리스가 서명해야 하는 데이터(또는 "메시지")는 잠금 스크립트, 노드 프로토콜 또는 이들의 조합에 의해 정의될 수 있다.
새로운 트랜잭션 Tx1이 노드(104)에 도달하면, 노드는 노드 프로토콜을 적용한다. 이는 잠금 스크립트와 잠금 해제 스크립트를 함께 실행하여 잠금 해제 스크립트가 잠금 스크립트에 정의된 조건(이 조건은 하나 이상의 기준을 포함할 수 있음)을 충족하는지 여부를 확인하는 것을 포함한다. 실시예에서 이것은 두 개의 스크립트를 연결하는 것을 포함한다:
<Sig P A > <P A > || [Checksig P A ]
여기에서 "||"는 연결을 나타내고 "<...>"는 데이터를 스택에 배치하는 것을 의미하고, "[…]"는 잠금 해제 스크립트(이 예에서는 스택 기반 언어)로 구성된 기능이다. 스크립트를 연결하는 대신, 동등하게 스크립트는 공통 스택을 사용하여 차례로 실행될 수 있다. 어느 쪽이든, 함께 실행될 때, 스크립트는 Tx0의 출력에 있는 잠금 스크립트에 포함된 앨리스의 공개 키 PA를 사용하여 Tx1의 입력에 있는 잠금 스크립트에 예상되는 데이터 부분에 서명하는 앨리스의 서명이 포함되어 있는지 인증한다. 이 인증을 수행하기 위하여 예상되는 데이터 부분 자체("메시지") 또한 Tx0에 포함되어야 한다. 실시예에서 서명된 데이터는 Tx0의 전체를 포함한다(따라서 데이터의 서명된 부분을 지정하는 별도의 요소는 책임 없이 포함될 필요가 없는데, 이미 본질적으로 존재하기 때문이다).
공개-개인 암호화에 의한 인증의 세부 사항은 당업자에게 친숙할 것이다. 기본적으로, 앨리스가 자신의 개인 키로 메시지를 암호화하여 메시지에 서명한 경우, 앨리스의 공개 키와 일반 메시지(암호화되지 않은 메시지)가 주어지면, 노드(104)와 같은 다른 엔티티는 암호화된 버전의 메시지가 앨리스가 서명한 것이라고 인증할 수 있다. 서명은 일반적으로 메시지를 해시하고, 해시에 서명하고, 이를 메시지의 일반 버전에 서명으로 태그를 지정하여, 공개 키 소유자가 서명을 인증할 수 있도록 하는 것을 포함한다. 따라서 특정 데이터 조각 또는 트랜잭션의 일부 등에 서명하는 것에 대한 본원에서의 모든 참조는 실시예에서 해당 데이터 조각 또는 트랜잭션의 일부의 해시에 서명하는 것을 의미할 수 있다.
Tx1의 잠금 해제 스크립트가 Tx0의 잠금 스크립트에 지정된 하나 이상의 조건을 충족하는 경우(따라서 표시된 예에서 앨리스의 서명이 Tx1에 제공되고 인증된 경우), 노드(104)는 Tx1이 유효한 것으로 간주한다. 그것이 저장 노드(104S)라면, 이는 작업 증명을 기다리는 트랜잭션의 풀(154)에 추가할 것임을 의미한다. 그것이 전달 노드(104F)라면, 트랜잭션 Tx1을 네트워크(106)의 하나 이상의 다른 노드(104)로 전달하여, 네트워크를 통해 전파될 것이다. Tx1이 유효성 검증되고 블록체인(150)에 포함되면, Tx0의 UTXO0이 지출된 것으로 정의된다. Tx1은 미지출 트랜잭션 출력(203)을 지출하는 경우에만 유효할 수 있음을 유의한다. 다른 트랜잭션(152)에서 이미 지출한 출력을 지출하려고 시도하는 경우, 다른 모든 조건이 충족되더라도 Tx1은 유효하지 않다. 따라서 노드(104)는 또한 선행 트랜잭션 Tx0에서 참조된 UTXO가 이미 지출되었는지(다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지) 확인할 필요가 있다. 이것이 블록체인(150)이 트랜잭션(152)에 정의된 순서를 부과하는 것이 중요한 이유 중 하나이다. 실제로 주어진 노드(104)는 트랜잭션(152)이 지출된 UTXO(203)를 표시하는 별도의 데이터베이스를 유지할 수 있지만, 궁극적으로 UTXO가 지출되었는지 여부를 결정하는 것은 블록체인(150) 내의 다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지의 여부이다.
주어진 트랜잭션(152)의 모든 출력(203)에 지정된 총 금액이 모든 입력(202)이 가리키는 총 금액보다 큰 경우, 이는 대부분의 트랜잭션 모델에서 무효에 대한 다른 근거가 된다. 따라서 이러한 트랜잭션은 전파되거나 블록(151)으로 채굴되지 않는다.
UTXO 기반 트랜잭션 모델에서, 주어진 UTXO는 전체로서 지출되어야 한다. UTXO에 정의된 금액의 일부가 지출되는 한편 다른 일부가 지출되도록 "뒤에 남겨둘" 수 없다. 그러나 UTXO의 금액은 다음 트랜잭션의 다수의 출력 사이에 분할될 수 있다. 예를 들어 Tx0의 UTXO0에 정의된 금액은 Tx1의 다수의 UTXO 사이에 분할될 수 있다. 따라서 앨리스가 UTXO0에 정의된 모든 금액을 밥에게 주기를 원하지 않으면, 나머지를 사용하여 Tx1의 제2 출력에서 자신에게 잔돈을 주거나, 다른 당사자에게 지불할 수 있다.
실제로 앨리스는 또한 일반적으로 승리한 채굴자에 대한 수수료를 포함해야 하는데, 왜냐하면 최근에는 생성 트랜잭션의 보상만으로는 일반적으로 채굴 동기를 부여하기에 충분하지 않기 때문이다. 앨리스가 채굴자에 대한 수수료를 포함하지 않으면, Tx0은 채굴자 노드(104M)에 의해 거부될 가능성이 있으므로, 기술적으로 유효하지만, 여전히 전파되지 않고 블록체인(150)에 포함되지 않는다(채굴자 프로토콜은 채굴자(104M)가 원하지 않는 경우 트랜잭션(152)을 수락하도록 강요하지 않는다). 일부 프로토콜에서, 채굴 수수료는 그 자체의 별도 출력(203)을 필요로 하지 않는다(즉, 별도의 UTXO가 필요하지 않음). 대신 주어진 트랜잭션(152)의 입력(들)(202)이 가리키는 총 금액과 출력(들)(203)에 지정된 총 금액 사이의 임의의 차이가 자동으로 승리한 채굴자(104)에게 제공된다. 예를 들어, UTXO0에 대한 포인터가 Tx1에 대한 유일한 입력이고 Tx1에는 하나의 출력 UTXO1만 있다고 가정한다. UTXO0에 지정된 디지털 자산의 금액이 UTXO1에 지정된 금액보다 크면, 차액은 자동으로 승리한 채굴자(104M)에게 넘어간다. 그러나 대안적으로 또는 추가적으로, 채굴자 수수료가 트랜잭션(152)의 UTXO(203) 중 그 자체의 UTXO 중 하나에 명시적으로 지정될 수 있다는 것이 반드시 배제되는 것은 아니다.
앨리스와 밥의 디지털 자산은 블록체인(150)의 임의의 위치의 임의의 트랜잭션(152)에 잠겨 있는 미지출 UTXO로 구성된다. 따라서 일반적으로, 주어진 당사자(103)의 자산은 블록체인(150) 전체에 걸쳐 다양한 트랜잭션(152)의 UTXO에 걸쳐 흩어져 있다. 주어진 당사자(103)의 총 잔고를 정의하는 블록체인(150)의 어떤 곳에 저장된 하나의 숫자는 없다. 클라이언트 애플리케이션(105)에서 지갑 기능의 역할은 각 당사자에게 잠겨 있으며 다른 전방 트랜잭션에서 아직 지출되지 않은 모든 다양한 UTXO의 값을 함께 대조하는 것이다. 이는 저장 노드(104S) 중 임의의 것, 예를 들어, 각 당사자의 컴퓨터 장비(102)에 가장 가깝거나 가장 잘 연결된 저장 노드(104S) 에 저장된 블록체인(150)의 사본을 질의함으로써 이를 수행할 수 있다.
스크립트 코드는 종종 도식적으로 표현됨(즉, 정확한 언어가 아님)을 유의한다. 예를 들어, [Checksig PA]를 작성하여 [Checksig PA] = OP_DUP OP_HASH160 <H(PA)> OP_EQUALVERIFY OP_CHECKSIG를 의미할 수 있다. "OP_..."는 스크립트 언어의 특정 작업코드(opcode)를 나타낸다. OP_CHECKSIG("Checksig"라고도 함)는 두 개의 입력(서명 및 공개 키)을 사용하고 타원 곡선 디지털 서명 알고리즘(ECDSA)을 사용하여 서명의 유효성을 검증하는 스크립트 작업코드이다. 런타임에서, 임의의 서명('sig')의 발생은 스크립트에서 제거되지만 해시 퍼즐과 같은 추가 요구 사항은 'sig' 입력으로 검증된 트랜잭션에 남아 있다. 다른 예로서, OP_RETURN은 트랜잭션 내에 메타데이터를 저장할 수 있는 트랜잭션의 지출 불가능한 출력을 생성하기 위한 스크립트 언어의 작업코드이며, 이에 따라 메타데이터를 블록체인(150)에 불변으로 기록할 수 있다. 메타데이터는 블록체인에 저장하려는 문서를 포함할 수 있다.
서명 PA는 디지털 서명이다. 실시예에서 이것은 타원 곡선 secp256k1을 사용하는 ECDSA에 기초한다. 디지털 서명은 특정 데이터 조각에 서명한다. 실시예에서, 주어진 트랜잭션에 대해 서명은 트랜잭션 입력의 일부와 트랜잭션 출력의 전부 또는 일부에 서명할 것이다. 서명하는 출력의 특정 부분은 SIGHASH 플래그에 따라 다르다. SIGHASH 플래그는 서명된 출력을 선택하기 위해 서명 끝에 포함된 4바이트 코드이다(따라서 서명 시에 고정된다).
잠금 스크립트는 해당 트랜잭션이 잠겨 있는 당사자의 공개 키를 포함한다는 사실을 지칭하여 "scriptPubKey"라고도 한다. 잠금 해제 스크립트는 대응하는 서명을 제공한다는 사실을 지칭하여 "scriptSig"라고도 한다. 그러나, 더 일반적으로 UTXO가 리딤되기 위한 조건이 서명 인증을 포함하는 것이 블록체인(150)의 모든 애플리케이션에서 필수적인 것은 아니다. 더 일반적으로 스크립팅 언어는 하나 이상의 조건을 정의하는 데 사용할 수 있다. 따라서 보다 일반적인 용어 "잠금 스크립트" 및 "잠금 해제 스크립트"가 선호될 수 있다.
도 3은 블록체인(150)을 구현하기 위한 추가 시스템(100)을 도시한다. 시스템(100)은 추가적인 통신 기능이 수반된다는 점을 제외하고는 도 1과 관련하여 설명된 것과 실질적으로 동일하다. 앨리스와 밥의 컴퓨터 장비(102a, 120b) 각각의 클라이언트 애플리케이션은 각각 추가 통신 기능을 포함한다. 즉, 이는 (일방 당사자 또는 제3자의 주도로) 앨리스(103a)가 밥(103b)과의 별개의 사이드 채널(301)을 확립할 수 있게 한다. 사이드 채널(301)은 P2P 네트워크와 별개로 데이터 교환을 가능하게 한다. 이러한 통신을 때때로 "오프체인"이라 한다. 예를 들어, 이는 당사자 중 하나가 이를 네트워크(106)로 브로드캐스팅하기로 선택할 때까지 트랜잭션이 (아직) 네트워크 P2P(106)에 공개되거나 체인(150)으로 진행되지 않고 앨리스와 밥 사이의 트랜잭션(152)을 교환하는 데 사용될 수 있다. 대안적으로 또는 추가적으로, 사이드 채널(301)은 키, 협상된 금액 또는 조건(terms), 데이터 콘텐츠 등과 같은 임의의 다른 트랜잭션 관련된 데이터를 교환하는 데 사용될 수 있다.
사이드 채널(301)은 P2P 오버레이 네트워크(106)와 동일한 패킷 교환 네트워크(101)를 통해 확립될 수 있다. 대안적으로 또는 추가적으로, 사이드 채널(301)은 모바일 셀룰러 네트워크, 또는 로컬 무선 네트워크와 같은 로컬 에어리어 네트워크, 또는 심지어 앨리스와 밥의 디바이스(1021, 102b) 사이의 직접 유선 또는 무선 링크와 같은 상이한 네트워크를 통해 확립될 수 있다. 일반적으로, 여기 어디에서나 언급되는 사이드 채널(301)은, 즉 P2P 오버레이 네트워크(106)와는 별개로 "오프체인" 데이터를 교환하기 위한 하나 이상의 네트워킹 기술 또는 통신 매체를 통한 임의의 하나 이상의 링크를 포함할 수 있다. 하나 이상의 링크가 사용되는 경우라면, 오프체인 링크의 번들 또는 컬렉션은 전체로서 사이드 채널(301)이라고 부를 수 있다. 따라서 앨리스와 밥이 사이드 채널(301)을 통해 특정 정보 또는 데이터 등을 교환한다고 해서, 이것이 반드시 이들 모든 데이터가 정확히 동일한 링크 또는 심지어 동종의 네트워크를 통해 전송되어야 함을 의미하는 것은 아니다.
오프체인 기능
본 발명의 실시예는 블록체인 트랜잭션으로부터 추가 기능을 추출하는 것을 제공한다. 이는 트랜잭션을 무효화하지 않고 스크립트의 실행을 종료하도록 OP_RETURN을 구성함으로써 달성된다.
도 4는 UTXO 또는 출력 기반 모델의 예에서 P2P 네트워크(106)의 각 노드(104)에서 실행될 수 있는 노드 소프트웨어(400)의 예를 도시한다. 노드 소프트웨어(400)는 프로토콜 엔진(401), 스크립트 엔진(402), 스택(403), 애플리케이션 레벨 의사결정 엔진(404) 및 하나 이상의 블록체인 관련 기능 모듈 세트(도시되지 않음)를 포함한다. 임의의 주어진 노드(104)에서, 이들은 채굴 모듈, 전달 모듈 및 저장 모듈 중 임의의 하나, 둘 또는 세 개 모두(노드의 역할에 따라 다름)를 포함할 수 있다. 스크립트 엔진(402)은 스크립트의 일부를 데이터 요소 또는 데이터 요소에 대해 동작하기 위한 기능으로 번역하고 및/또는 스택(403)으로부터 데이터 요소를 푸시하거나 판독함으로써 스크립트를 실행하도록 구성된 스크립트 번역기를 포함할 수 있다. 대안적으로 스크립트 엔진(402)은 JIT(Just-In-Time) 컴파일과 같은 다른 형태의 실행을 사용할 수 있다. 일반적으로, "실행"이라는 용어는 어떤 식으로든 스크립트를 실행하는 가장 넓은 의미로 사용된다(컴파일된 기계어 코드 명령을 실행한다는 좁은 의미가 아님). 따라서 "실행"은 현재 맥락에서 번역하는 것을 포함할 수 있다. 또한 현재 맥락에서 "작업코드(opcode)"는 개별 기계어 명령어의 작업코드를 의미하는 것이 아니라 각 노드(104)에서 스크립트 엔진(402)에 의해 각자의 미리 정의된 기능에 매핑되는 상위 레벨 커맨드(command)를 의미한다.
프로토콜 엔진(401)은 트랜잭션(152)의 상이한 필드를 인식하고 노드 프로토콜에 따라 처리하도록 구성된다. 트랜잭션(152m)(Txm)이 다른 선행 트랜잭션(152m-1)(Txm-1)의 출력(예를 들어, UTXO)을 가리키는 입력을 가지고 수신되면, 프로토콜 엔진(401)은 Txm 의 잠금 해제 스크립트를 식별하고 이를 스크립트 엔진(402)에 전달한다. 프로토콜 엔진(401)은 또한 Txm의 입력 내의 포인터에 기초하여 Txm-1를 식별하고 검색한다. Txm-1가 아직 블록체인(150)에 없으면 보류 중인 트랜잭션의 각자의 노드 자체 풀(154)로부터, 또는 Txm-1이 이미 블록체인(150)에 있는 경우 각자의 노드 또는 다른 노드(104)에 저장된 블록체인(150) 내의 블록(151)의 복사본으로부터 Txm-1를 검색할 수 있다. 어느 쪽이든, 프로토콜 엔진(401)은 Txm-1의 가리켜진 출력 내에서 잠금 스크립트를 식별하고 이를 스크립트 엔진(402)으로 전달한다.
따라서, 스크립트 엔진(402)은 Txm-1의 잠금 스크립트 및 Txm의 대응하는 입력으로부터의 잠금 해제 스크립트를 갖는다. 예를 들어 Tx1 및 Tx2가 도 4에 예시되어 있지만, Tx0 및 Tx1등과 같은 임의의 트랜잭션 쌍에 동일하게 적용될 수 있다. 스크립트 엔진(402)은 이전에 논의된 바와 같이 두 개의 스크립트를 실행하며, 이는 사용되는 스택 기반 스크립팅 언어(예를 들어, Script)에 따라 스택(403)에 데이터를 배치하고 이로부터 데이터를 검색하는 것을 포함할 것이다.
스크립트를 함께 실행함으로써, 스크립트 엔진(402)은 잠금 해제 스크립트가 잠금 스크립트에 정의된 하나 이상의 기준을 충족하는지 여부를 결정한다. 즉, 잠금 스크립트가 포함된 출력을 "잠금 해제"하는가? 스크립트 엔진(402)은 이 결정의 결과를 프로토콜 엔진(401)에 반환한다. 잠금 해제 스크립트가 대응하는 잠금 스크립트에 지정된 하나 이상의 기준을 충족한다고 스크립트 엔진(402)이 결정하면, 결과 "참"을 반환한다. 그렇지 않으면 결과 "거짓"을 반환한다.
출력 기반 모델에서 스크립트 엔진(402)의 결과 "참"은 트랜잭션의 유효성을 위한 조건 중 하나이다. 일반적으로 또한 충족되어야 하는 프로토콜 엔진에 의해 평가되는 하나 이상의 추가 프로토콜 수준 조건이 있다. 예컨대 Txm의 입력(들)에 의해 가리켜진 디지털 자산의 총 금액이 출력(들)에 지정된 총 금액을 초과하지 않고, Txm-1의 가리켜진 출력이 다른 유효한 트랜잭션에 의해 이미 지출되지 않아야 한다. 프로토콜 엔진은 하나 이상의 프로토콜 레벨 조건과 함께 스크립트 엔진(402)의 결과를 평가하고, 모두 참인 경우에만 트랜잭션 Txm을 유효성 검증한다. 프로토콜 엔진은 트랜잭션이 유효한지 여부에 대한 표시를 애플리케이션 레벨 의사결정 엔진(404)에 출력한다. Txm이 실제로 유효성 검증된다는 조건에서만, 의사결정 엔진(404)은 채굴 모듈 및 전달 모듈 중 하나 또는 둘 모두가 Txm에 대해 각각의 블록체인 관련 기능을 수행하도록 제어하게끔 선택할 수 있다. 이는 채굴 모듈이 블록(151)으로의 채굴을 위해 노드의 각각의 풀(154)에 Txm을 추가하는 것 및/또는 전달 모듈이 P2P 네트워크(106)의 다른 노드(104)에 Txm을 전달하는 것을 포함할 수 있다. 그러나 실시예에서, 의사결정 엔진(404)이 무효 트랜잭션을 전달하거나 채굴하도록 선택하지 않을 것이지만, 반대로 이것이 단순히 유효하기 때문에 유효한 트랜잭션의 채굴 또는 전달을 트리거해야 한다는 것을 반드시 의미하지는 않는다는 점을 유의한다. 선택적으로, 실시예에서 의사결정 엔진(404)은 이러한 기능 중 하나 또는 둘 다를 트리거하기 전에 하나 이상의 추가 조건을 적용할 수 있다. 예를 들어 노드가 채굴 노드(104M)인 경우, 의사결정 엔진은 트랜잭션이 유효하고 채굴 수수료가 충분히 남아 있다는 두 가지 모두의 조건에서만 트랜잭션을 채굴하도록 선택할 수 있다.
또한 본원에서 "참" 및 "거짓"이라는 용어는 단일 이진 숫자(비트)의 형태로 표현되는 결과를 반환하는 것으로 반드시 제한되지는 않지만, 이는 확실히 하나의 가능한 구현임을 유의한다. 더 일반적으로, "참"은 성공 또는 긍정적인 결과를 나타내는 임의의 상태를 지칭할 수 있고 "거짓"은 실패 또는 비긍정적인 결과를 나타내는 임의의 상태를 지칭할 수 있다. 예를 들어, 계정 기반 모델(도 4에 도시되지 않음)에서, "참"의 결과는 노드(104)에 의한 서명의 암시적, 프로토콜 수준의 유효성 검증과 추가적인 스마트 계약의 긍정적인 결과의 조합에 의해 나타날 수 있다(두 개별 결과가 모두 참인 경우 전체 결과가 참 신호인 것으로 간주된다).
일부 실시예에 따르면, 유효한 트랜잭션에 대한 하나의 조건은 해당 트랜잭션의 잠금 해제 스크립트가 OP_RETURN 동작코드의 인스턴스 또는 트랜잭션을 무효로 표시하지 않는 임의의 다른 그러한 종료 동작코드를 포함할 수 없다는 것이다. 프로토콜 엔진(401) 및/또는 스크립트 엔진(402)은 트랜잭션의 잠금 해제 스크립트 내에서 그러한 동작코드의 존재를 감지하도록 구성된다. 트랜잭션, 예를 들어 Tx2 의 잠금 해제 스크립트에서 종료 동작코드를 감지하면, 프로토콜 엔진(401)은 트랜잭션을 무효로 표시하도록 구성된다. 잠금 해제 스크립트에서 종료 동작코드가 감지되면, 트랜잭션은 즉시 무효로 표시되고 스크립트는 실행되지 않는다.
추가적인 또는 대안적인 실시예에서, 노드 소프트웨어는 오프체인(off-chain) 기능(405)을 포함한다. 여기에서, 프로토콜 엔진(401), 스크립트 엔진(402), 애플리케이션 레벨 의사결정 엔진(404)은 "온체인(on-chain)" 기능이라고 할 수 있다. 온체인은 기능이 실제로 블록(151)에 포함된다는 것을 의미하지 않는다. 오히려, 이는 기능이 네트워크(106)를 통해 전파되고 블록(151)으로 채굴되는 트랜잭션을 유효성 검증하기 위한 프로토콜의 일부로 통합됨을 의미한다. 역으로, 오프체인은 기능이 블록의 유효성 검증 이외의 용도로 사용됨을 의미한다. 일부 예에서, 목적은 새로운 트랜잭션을 생성하거나, 복합 기능을 포함하는 템플릿 스크립트를 생성하거나, 트랜잭션 Tx에서 가져온(또는 그 결과인) 데이터에 대한 계산을 수행하는 것이다.
이들 실시예에서, 스크립트 엔진(402)은 스택(403)으로부터(예를 들어, 스택의 상부로부터) 오프체인 기능(405)으로 데이터 요소를 공급하도록 구성된다. 스크립트 엔진(402)은 도 4에서 Tx1인, 트랜잭션의 잠금 스크립트에 있는 OP_RETURN을 호출할 때 스택(403)으로부터 데이터 요소를 판독하도록 구성된다. 오프체인 기능(405)은 데이터 요소에 기초하여 결과를 생성하도록(또는 달리 말하자면, 데이터 요소에 대한 동작을 수행하도록) 구성된다. 일부 예에서, 데이터 요소는 스택(403)으로부터 판독되고 "오프체인 스택"에 기록된다. 여기에서, "오프체인 스택"은 트랜잭션의 유효성 검증 목적으로 사용되지 않는 스택이다. 데이터 요소는 스택(403)에서 판독되어 스크립트 엔진(402)에 의해 OP_RETURN이 호출될 때마다 오프체인 기능에 공급될 수 있다. 오프체인 기능(405)은 오프체인 스택에 기록된 데이터 요소를 사용하여 새로운 트랜잭션을 생성하도록 구성될 수 있다. 다른 예에서, 오프체인 기능(405)은 Tx1 내의 잠금 스크립트에 대한 참조로서 데이터 요소를 사용하도록 구성된다. 도 4에 도시된 바와 같이, Tx1 은 다수 개의 잠금 스크립트 1 내지 n을 포함한다. 오프체인 기능(405)은 데이터 요소를 잠금 스크립트의 주소 또는 색인(예를 들어, 제3 잠금 스크립트의 색인)으로 번역한 다음, 해당 잠금 스크립트를 실행한다. 추가적으로 또는 대안적으로, 어드레싱된 잠금 스크립트는 메모리에 저장되는 스크립트 템플릿에 추가될 수 있다.
일부 블록체인 프로토콜은 데이터와 작업코드의 두 가지 유형의 요소를 포함하는 스크립팅 언어를 사용한다. 스크립트 내의 데이터는 예를 들어 숫자, 공개 키, 서명, 해시 값 등일 수 있다. 작업코드는 스크립트 내의 데이터에 대해 작동하는 기능이다. 스크립팅 언어에서, 스크립트는 한쪽 끝에서 다른 쪽 끝으로(보통 왼쪽에서 오른쪽으로) 실행되며 "스택"으로 지칭되는 데이터 구조를 사용한다. 데이터는 항상 스택에 푸시된다(즉, 이에 배치된다). 작업코드는 스택에서 데이터를 꺼내고(즉, 스택에서 데이터를 가져옴) 데이터에 대한 동작을 수행한 다음, 선택적으로 새로운 데이터를 스택에 "푸시"할 수 있다. 여러 블록체인에서 일반적으로 사용되는 스크립팅 언어를 그냥 스크립트(Script)라고 한다. 이하에서는 스크립트 언어의 작업코드로 설명한다.
스택 기반 스크립팅 언어는 당업자에게 친숙할 것이다. 다음의 예는 예시적인 스크립트 구현 방법을 보여준다. 특히, 검증 및 잠금 해제 프로세스의 예가 아래에 표시된다.
예시적인 스크립트는 <밥의 서명><밥의 공개 키> OP_DUP OP_HASH <밥의 공개 주소> OP_EQUALVERIFY OP_CHECKSIG를 포함할 수 있다. 스크립트는 왼쪽에서 오른쪽으로 작동한다.
1단계: 스택에 <밥의 서명> 푸시
Figure pct00001
2단계: 스택에 <밥의 공개 키> 푸시(이제 이것이 스택의 최상위 요소이다).
Figure pct00002
3단계: OP_DUP 작업코드는 스택의 최상위 요소에 대해 작동하여 <밥의 공개 키>를 복제한다.
Figure pct00003
4단계: OP_HASH 작업코드는 <밥의 공개 키>를 꺼내고 해시 알고리즘(하나 이상의 선택적 작업이 뒤따름)을 통해 실행하여 <밥의 공개 주소>를 가져와 스택에 배치한다.
Figure pct00004
5단계: <밥의 공개 주소>를 스택에 푸시한다(이제 이것이 스택의 최상위 요소이다).
Figure pct00005
6단계: OP_EQUALVERIFY 작업코드는 스택에서 마지막 두 요소(<밥의 공개 주소> 및 <밥의 공개 주소>)를 꺼내고 두 주소가 동일한지 확인한다. 동일하지 않으면 실행이 실패한 것으로 간주된다. 조건이 참이면, 다음 커맨드가 실행된다.
Figure pct00006
7단계: OP_CHECKSIG 작업코드는 <밥의 공개 키>와 <밥의 서명>을 꺼내고 그 유효성을 확인한다. 이 프로세스가 완료되면, 밥은 트랜잭션을 잠금 해제하고 지정된 금액의 디지털 자산에 접근할 수 있다.
Figure pct00007
트랜잭션을 실행할 때, 트랜잭션의 잠금 해제 스크립트는 이전 트랜잭션의 잠금 스크립트와 함께 실행된다. 트랜잭션은 하나 이상의 잠금 스크립트를 포함할 수 있다. 편의상, 이러한 잠금 스크립트들 중 하나는 이후 제1 잠금 스크립트로 지칭될 것이다. 제1 잠금 스크립트는 트랜잭션(즉, 출력 1)에서 처음으로 나타나는 잠금 스크립트이거나, 또는 제1 잠금 스크립트는 트랜잭션의 다른 출력(예컨대, 출력 6)에 있을 수 있다. 마찬가지로, "제1 출력"에 대한 참조는 반드시 트랜잭션의 출력 목록에서 첫 번째임을 의미하지는 않는다. 문맥에서 달리 요구하지 않는다면, 제1, 제2, 제3 등은 동일한 항목(예컨대, 잠금 스크립트, 출력, 트랜잭션 등)의 다른 것들을 구별하기 위한 라벨일 뿐이다. 제1 잠금 스크립트가 실행되고 그것이 OP_RETURN을 포함하는 경우, OP_RETURN이 호출되면, 제1 잠금 스크립트의 실행이 종료되어 하나 또는 두 개의 스택에 데이터 요소를 남긴다. 본 발명의 실시예는 이 데이터 요소가 추가 기능을 제공하기 위해 활용될 수 있는 여러 방식을 제공한다. 데이터 요소가 스택으로부터 판독되고 데이터 요소를 기반으로 결과를 생성하도록(또는 데이터 요소에 대해 동등하게 작업을 수행하도록) 구성된 오프체인 기능에 제공된다. 잠금 스크립트를 실행하는 동일한 장치(또는 노드) 또한 오프체인 기능을 구현할 수 있다. 대안적으로, 데이터 요소는 오프체인 기능을 구현하기 위해 외부 당사자에게 제공될 수 있다.
새로운 트랜잭션 생성
일부 실시예에서, 기능은 데이터 요소에 기초하여 새로운 트랜잭션을 생성하도록 구성된다. 새로운 트랜잭션은 제1 트랜잭션이 실행된 후 임의의 시점에서 생성되어 전송될 수 있다. 기능은 데이터 요소에 직접 기초하거나 먼저 해당 데이터 요소에 대한 작업을 수행하여 트랜잭션을 생성할 수 있다. 새로운 트랜잭션은 네트워크 전반에 걸친 전파 및/또는 블록체인에서의 기록을 위해 블록체인 네트워크(106)의 하나 이상의 노드(104)로 전송될 수 있다.
예를 들어, 기능은 새로운 트랜잭션의 입력(예를 들어 공개 키, 서명, 랜덤 변수) 중 하나의 적어도 일부를 생성할 수 있다. 추가적으로 또는 대안적으로, 기능은 새로운 트랜잭션의 출력 중 하나의 적어도 일부를 생성할 수 있다(예를 들어 전송할 디지털 자산의 금액).
새로운 트랜잭션은 잠금 스크립트를 갖는 출력을 포함할 수 있다. 잠금 스크립트는 OP_RETURN이 호출되기 전에 실행될 스크립트의 일부를 포함할 수 있다. 잠금 스크립트의 적어도 일부는 오프체인 기능에 제공된 데이터 요소에 기초할 수 있다. 다시 말하지만, OP_RETURN이 호출되면 잠금 스크립트가 종료되고 새로운 데이터 요소가 스택에 남는다. 이 데이터 요소는 스택에서 읽고 오프체인 기능에, 예를 들어 추가 트랜잭션을 생성하기 위하여, 제공될 수 있다. 이는 추가 트랜잭션 각각이 이전 트랜잭션의 잠금 스크립트 실행의 결과인 데이터 요소에 기초하는 트랜잭션의 루프를 구성할 수 있게 한다.
예시적인 블록체인 스크립트에는 두 개의 스택, 즉 기본 스택과 대체 스택이 있다. 트랜잭션을 검증할 때, 스택에서 스크립트가 실행된다. 실행 중에는, 미리 정해진 스크립트 외에는 스택에 아무 것도 기록할 수 없다. 그러나, 실행 종료 직후에 외부 기능(또는 에이전트)를 이용하여 스택에서 데이터를 읽어오는 것은 가능함을 본원에서 알 수 있다. 다음은 "반환 스택"으로 지칭되는 오프체인 스택인 제3 스택의 사용에 대해 설명한다. 반환 스택의 기능은 예를 들어, 블록체인을 외부 세계와 연결하기 위해, 기본 스택과 대체 스택에서 데이터를 읽고 기록하는 것이다. 예를 들어, 반환 스택은 스크립트의 실행 후에 기본 및 대체 스택으로부터 판독될 수 있다. 그런 다음 반환 스택에 저장된 데이터를 오프체인 기능에 공급하여 추가 기능을 제공할 수 있다. 예를 들어, 다음 스크립트 실행에 제공되거나, 새로운 트랜잭션을 생성하거나, 다른 오프체인 계산을 위해 제공된다. "스택"이라는 용어가 사용되지만 기본 또는 대체 스택에서 읽은 데이터를 저장하도록 구성된 임의의 데이터 스토리지를 사용할 수 있다.
사용 사례-크랩스(Craps)
크랩스라는 카지노 게임을 시뮬레이션하는 다음의 예는 반환 스택과 블록체인 트랜잭션 사이의 상호 작용을 설명하기 위해 제공된다. 예는 카지노인 찰리(Charlie)와 플레이어인 앨리스라는 두 엔티티를 포함한다. 이들 각각은 각 당사자(103)일 수 있다. 이 단순화된 예에서, 크랩스 게임은 다음과 같이 진행된다. 한 플레이어, '슈터'는 두 개의 주사위를 가져와 크랩스 테이블에 던지거나 온라인 크랩스를 플레이하는 경우 '굴리기' 버튼을 누른다.
첫 번째 숫자가 나오면 세 가지 가능한 결과가 있다.
1. 내추럴(Natural) - '내추럴'은 굴림의 결과가 7 또는 11임을 의미한다. 이 경우, 플레이어가 이기고 주사위를 다시 굴린다.
2. 크랩스 - 2(스네이크 아이라고도 함), 3 또는 12가 나온다. 이 경우, 플레이어가 진다.
그러나 라운드는 끝나지 않으며, 플레이어는 다시 굴린다.
3. 포인트 - 플레이어가 4, 5, 6, 8, 9 또는 10을 굴린다. 실제 카지노에서 딜러는 테이블에 '포인트'(굴린 숫자)를 표시한다. 온라인 크랩스 게임에서는, 포인트가 설정되면 나타나는 작은 버튼이 있다. 일반적으로 흰색이며 '온(On)'으로 표시된다. 이제 플레이어는 주사위를 한 번 더 굴려 같은 숫자가 다시 나오기를 바란다. 이전에 던진 것과 같은 주사위 조합일 필요는 없다. 합이 같으면 플레이어가 이긴다. 플레이어가 7을 굴리면, 플레이어는 '세븐 아웃' - 패배하고 베팅 라운드를 종료한다.
게임을 더욱 단순하게 만들기 위해, 이 예에서는 "내추럴" 및 "크랩스" 결과가 게임을 종료한다. 앨리스와 찰리가 생성한 아래의 초기 트랜잭션 TX0을 고려한다.
Figure pct00008
TX0에 대한 설명:1) TX0에는 앨리스의 베팅과 찰리의 베팅이라는 두 가지 입력이 있다.
2) TX0에는 두 개의 출력이 있다. 각 출력은 하나의 주사위를 나타낸다. 두 개의 출력을 하나로 결합하는 것이 가능하다. 그러나 두 개의 출력이 있다는 것은 두 개의 주사위가 있고 주사위를 "던질" 사람이 한 명을 넘는 것을 강조한다.
3) 앨리스가 주사위를 던질 수 있는 유일한 플레이어라고 가정한다. 즉, 앨리스는 PK1과 PK2에 대한 개인 키를 모두 알고 있다. 다른 플레이어가 던질 수 있도록, PK2를 다른 플레이어가 선택한 공개 키로 바꿀 수 있다.
4) 앨리스가 부정 행위를 하는 것을 방지하기 위하여, 앨리스의 공개 키는 2개 중 2개의(2-out-of-2) MultiSig로 대체될 수 있으며, 이 경우 앨리스와 찰리의 서명이 모두 필요하다.
5) 각 출력에는 두 개의 OP_IF가 있다. 최상위 스택 값이 거짓이 아니면, 명령문이 실행된다. 최상위 스택 값이 제거된다.
a. 첫 번째는 서명의 유효성을 확인하는 것이다. 이것이 참이면, "던지기"로 진행한다. 이것이 참이 아니면, 찰리는 출력을 요구할 수 있다. 플레이어는 찰리를 신뢰한다고 가정한다. 그렇지 않은 경우, 앨리스가 출력을 요구하는 우선 순위를 갖도록 잠금 시간을 구현할 수 있다.
b. 두 번째는 잠금 해제 스크립트에서 제공하는 랜덤 문자열의 유효성을 확인하는 것이다. 이것은 해시 퍼즐을 통해 문자열의 접두사를 확인하는 것일 수 있다. 예를 들어:
i. [CHECK_RANDOM_STRING]:= "get_first_4_bytes OP_HASH
Figure pct00009
> OP_EQUAL".
c. 랜덤 문자열이 유효하지 않으면 찰리가 출력을 요청할 수 있다.
6) 랜덤 문자열이 유효하고 실제로 랜덤이라고 가정하면, 스크립트 "OP_HASH <6> OP_MOD"는 거의 동일한 확률로 {0,1,2,3,4,5} 범위의 숫자를 생성한다. 이 결과는 주사위 {1,2,3,4,5,6}의 6가지 결과를 나타낸다.
던지기를 시뮬레이션하기 위하여, 앨리스는 두 개의 잠금 해제 스크립트를 구성해야 한다. 그런 다음 앨리스는 이 불완전한 트랜잭션 TX1을 찰리에게 전달한다. 찰리는 두 개의 랜덤 문자열을 추가하여 트랜잭션 TX1을 완료한다.
Figure pct00010
Figure pct00011
PKbetpool은 카지노에서 제어하고 찰리는 두 개의 새로운 랜덤 문자열을 제공할 것으로 신뢰한다고 가정한다.
TX1이 유효성 검증되면, 스크립트 실행 중 하나는 다음과 같다.
Figure pct00012
OP_DUP OP_HASH <Hash of
Figure pct00013
> OP_EQUAL OP_CHECKSIG
OP_IF
[CHECK_RANDOM_STRING]
OP_IF
OP_HASH <6> OP_MOD OP_RETURN
OP_ELSE
OP_DUP OP_HASH <Hash of
Figure pct00014
> OP_EQUALVERIFY OP_CHECKSIGVERIFY
OP_END_IF
OP_ELSE
OP_DUP OP_HASH <Hash of
Figure pct00015
> OP_EQUALVERIFY OP_CHECKSIGVERIFY
OP_ENDIF
이전 버전의 OP_RETURN은 스크립트를 종료하고 OP_RETURN이 호출될 때 트랜잭션을 무효화할 것이다. 그러나, 본원에 설명된 실시예의 노드에 의해 구현되는 OP_RETURN에서는, OP_RETURN이 트랜잭션을 유효한 것으로 표시하고, 실행 후에 스택이 클리어되기 전에 스택에 숫자를 남긴다. 스택에 남아 있는 숫자는 판독되어 반환 스택에 저장된다.
앨리스가 a와 b를 던졌다고 가정한다. 여기에서, a, b∈{1,2,3,4,5,6}이다. 모든 크랩스 규칙은 오프체인 평가를 위한 스크립트(예를 들어 오프체인 기능)로 구현될 수 있다. 의사 코드는 다음과 같다.
1)
Figure pct00016
또는
Figure pct00017
이면, "내추럴".
2)
Figure pct00018
또는
Figure pct00019
이면, "크랩스".
3) 아니면, 반환 스택에
Figure pct00020
저장, 및 "포인트".
각 결과는 새로운 트랜잭션에 대응한다. 반환 스택의 결과를 번역하여, 결과 트랜잭션을 구성할 수 있다.
ㆍ내추럴 - 트랜잭션은 단순히 TX1의 출력에서 앨리스에게 상금을 지불한다.
ㆍ크랩스 - 트랜잭션은 TX1의 출력을 리딤한다. 즉, 찰리에게 지불하는 것이다.
ㆍ포인트 - 트랜잭션은 TX1과 유사한 또 다른 트랜잭션을 생성하여, 앨리스가 다시 던질 수 있도록 한다.
이 예시적인 사용 사례에서, 내추럴 트랜잭션 또는 크랩스 트랜잭션은 게임을 종료하는 반면, 포인트 트랜잭션의 경우, 게임이 계속된다. 가장 중요한 것은 첫 번째 던지기의 출력(a 및 b의 합)이 반환 스택에 저장된다는 것이다. 달리 말하자면, 결과는 스택에서 읽고 반환 스택에 저장되는 데이터 요소이다. 그런 다음 두 번째 던지기의 출력이 a+b와 비교된다. 이들이 동일하면, 앨리스가 상금을 청구할 수 있는 트랜잭션이 생성된다. 그렇지 않으면, 앨리스가 다시 한 번 던질 수 있도록 TX0과 같은 다른 트랜잭션이 생성된다.
요약하면, 반환 스택을 사용하여, 복잡한 while 루프를 시뮬레이션할 수 있다. 이 루프는 오프체인에 존재하며 크랩스를 플레이하는 것은 이 루프를 구현하는 방법의 한 예이다. 반환 스택의 사용은 다음 예에서 보여지는 것처럼 다른 많은 애플리케이션으로 일반화될 수 있다.
사용 사례 - 배심원 선택
예는 블록체인 스크립트에서 난수 생성(random number generation; RNG)을 달성하기 위해 N 참가자 그룹을 사용하는 방법과 관련이 있다. 이 방법은 최소 두 개의 트랜잭션을 포함한다.
a) 개시(제1) 트랜잭션 TxIn - 각 참가자는 개시 트랜잭션에 입력을 추가하고 서명하며, 이는 비밀 값 s에 대한 공개 확약 r을 포함한다. 이 트랜잭션은 디지털 자산을 오라클(oracle)에 지불한다.
b) 오라클(제2) 트랜잭션 TxOracle - 오라클(오프체인 기능)은 각 플레이어로부터 비밀 값 s를 획득하고 트랜잭션을 생성하며 그 잠금 스크립트는 모든 N 플레이어의 비밀 값을 결합하여 난수 RN(제1 데이터 요소 )를 생성하고, 디지털 자산을 해당 수에 따른 공개 키로 잠근다.
오라클 트랜잭션의 잠금 스크립트 내에 생성된 난수 RN은 이러한 디지털 자산을 지출하기 위한 후속 리딤 트랜잭션의 조건을 결정하는 데 사용될 수 있다. 그러나, RN은 의사 무작위임이 입증되기 때문에, 결정론적 프로세스에 시드(seed)가 필요한 실험실 실험과 같은 다른 오프체인 프로세스를 시드하는 데 사용될 수 있다. 특히, 형사 재판 절차에서 입증 가능하게 공정한 배심원 선택을 위해 이 해결책을 사용할 수 있다.
오프체인 배심원 선택에서 온체인 잠금 스크립트에 의해 생성된, 입증 가능하게 공정한 난수를 사용하는 것은 이러한 잠금 스크립트를 실행하고 최종 난수 RN 을 오프체인 번역기에 반환하기 위해 반환 스택을 도입함으로써 추가적으로 지원된다.
법원은 형사 사건에 대한 법적 절차에 참여할 배심원을 선택하는 책임을 맡도록 가정될 수 있으며, 선택은 배심원단이 '조작되거나(packed)' 어떤 식으로든 불공정하게 편향되지 않도록 무작위로 이루어져야 한다. 법원은 오프체인 반환 스택을 실행하는 기능이 있는 하드웨어 및 소프트웨어를 운영할 수 있다. 또한, 법원은 블록체인에서 데이터를 읽고, 트랜잭션 스크립트를 실행하며 이러한 실행 결과를 로컬 반환 스택에 저장할 수 있다. N 명의 가능한 배심원 풀에서 배심원을 선택하기 위해 법원에서 정의한 프로세스는 위에 설명된 온체인 방법을 사용하여 생성된 난수에서 유도된다. 그러나, 법원은 생성 프로세스 자체에 관여할 필요는 없으며 대신 블록체인의 제3자 관찰자 역할을 하고, 이 경우 RNG 프로세스는 다른 제3자 T, 예를 들어 복권 회사에 의해 실행된다.
형사 재판을 위해 배심원을 선택할 때마다, 다음 프로세스가 진행된다.
1) 법원은 서비스 제공자 T에게 온체인 RNG 프로세스를 요청한다:
a. N 참가자를 포함하는 개시 트랜잭션 TxIn이 T에 의해 구성되고 브로드캐스트된다.
b. 오라클 트랜잭션 TxOracle이 T에 의해 생성되고 방송된다.
2) 법원은 블록체인에서 TxIn 및 TxOracle을 검색한다.
3) 법원은 잠금 해제 스크립트를 사용하여 TxOracle의 잠금 스크립트를 실행한다:
a. 잠금 해제 스크립트는 TxIn에서 모든 r 값을 추출하여 생성되며,
b. 잠금 해제 스크립트는 TxOracle에서 추출된다.
4) 맨 위(메인) 스택 항목 RN(제1 데이터 요소)이 법원의 반환 스택에 복사되어 저장된다.
5) 법원의 반환 스택(오프체인 스택)은 배심원을 선택하는 데 사용된다. 예를 들어 스택의 항목이 난수 RN의 연속적인 해시를 취하고 그 결과를 적격 시민의 ID에 매핑하는 오프체인 기능에 공급된다.
4단계를 달성하려면, OP_RETURN이 TxOracle 잠금 스크립트에 포함되어 3단계에서 스크립트 실행을 종료하는 데 사용될 수 있어야 한다. 또한, OP_RETURN에 실행을 종료하고 스크립트 실행이 종료될 때 최상위 스택 항목이 RN인 것을 보장하기 위하여 트랜잭션을 무효화하지 않는 기능이 또한 구비되어야 한다. 그렇지 않고 OP_RETURN이 트랜잭션을 무효화하는 것이라면, 법원 번역기는 종료 시 원하는 난수 대신 오류를 만나게 된다.
이 시나리오와 관련된 트랜잭션은 도 5a 및 도 5b에 도시되어 있다.
법원은 개시 트랜잭션 TxIn의 입력으로부터 확약 r1,…,rN 목록을 추출하고 배심원 선택 프로세스의 3단계에서 잠금 해제 스크립트로 사용할 수 있다.
Figure pct00021
유사하게, 법원은 다음과 같이 작성된 오라클 트랜잭션 TxOracle의 잠금 스크립트 출력 1을 추출한다.
Figure pct00022
이 잠금 스크립트의 첫 번째 줄은 확약된 r-값이 개시 트랜잭션과 일치하는지 확인하는 데 사용된다. 그런 다음 두 번째 줄은 r-값에 의해 확약된 바와 같은, 비밀 s-값을 사용하여, 스크립트 실행 프로세스 중에 난수 RN을 생성한다. 마지막으로, 세 번째 줄은 단순히 OP_RETURN 호출로서, 스크립트 실행을 종료시키고 기본 스택의 맨 위에 RN이 남게 한다.
배심원 선택 프로세스의 3단계에서, 법원은 위의 잠금 및 잠금 해제 스크립트를 함께 실행하며, 이는 난수 RN을 반환하거나 실행이 실패한다. 실행이 성공적으로 완료되면, 법원은 기본 스택의 맨 위에서 난수를 읽어 로컬 머신의 반환 스택에 저장할 수 있다.
그런 다음 이 값 RN은 입증할 수 있는 공정한 방식으로 배심원을 선택하는 데 사용된다. 전체 프로세스는 배심원 선택이 필요할 때마다 반복될 수 있으며, 그 때마다 TxIn 및 TxOracle 생성이 법원의 감독을 받거나 제3자에게 아웃소싱될 수 있다.
이 접근법의 주요 이점은 투명성이다. 대중은 프로세스가 실제로 무작위이고 편향되지 않은 것을 목격하기 위해 체인의 트랜잭션을 판독할 수 있다.
복합 기능
일부 실시예에서, 제1 트랜잭션(이하에서 이전 트랜잭션으로 지칭됨)은 복수의 출력을 가질 수 있고, 각각은 잠금 스크립트(일부는 동일하거나 상이할 수 있음)를 포함한다. 각 출력은 출력 주소(output address; OA)에 의해 참조되며, 아래에서는 아웃포인트(outpoint) 주소로도 지칭된다. 이 주소는 트랜잭션에서 출력 위치를 색인하는 숫자일 수 있다. 출력 중 적어도 하나는 출력 중 다른 하나를 참조하는 출력 주소를 포함하는 잠금 스크립트를 갖는다. 예를 들어, 잠금 스크립트는 OP_RETURN과 결합될 때, 제2 출력(예를 들어 출력 목록에서 두 번째)의 주소로 번역될 수 있는 숫자(예를 들어 2) 또는 작업코드(예를 들어 OP_2)를 포함할 수 있다.
제1 트랜잭션 이후의 어떤 지점에서 생성되는 제2 트랜잭션(아래에서 새로운 또는 추가 트랜잭션으로 지칭됨)은 각각 잠금 해제 스크립트를 갖는 하나 이상의 입력을 포함한다. 이러한 잠금 해제 스크립트 중 적어도 하나는 이전 트랜잭션의 출력(아래에서 제1 또는 기본 출력으로 지칭됨)을 참조한다. 제1 출력이 이전 출력의 출력 목록에서 첫 번째일 필요는 없으며, "제1"이라는 라벨은 출력이 호출될 제1 출력임을 나타내는 데에만 사용된다.
잠금 해제 스크립트를 실행할 때, 제1 출력의 잠금 스크립트를 참조하여 실행한다. 제1 출력의 잠금 스크립트는 동일한 트랜잭션의 출력의 적어도 출력 주소(즉, 출력 주소로 번역될 수 있는 데이터 요소)를 포함한다. 출력은 동일한 출력(즉, 제1 출력)이거나 다른 출력(예를 들어 제2 출력)일 수 있다. 여기에서, 제2 출력은 제2 출력이 이전 트랜잭션의 출력 목록에서 제2 출력임을 의미할 수 있지만, 반드시 의미하지는 않는다. "제2"라는 라벨은 출력이 호출될 제2 출력임을 나타내는 데에만 사용된다. 제1 출력의 잠금 스크립트는 또한 적어도 OP_RETURN 작업코드를 포함한다. 잠금 스크립트는 또한 추가 데이터 요소 또는 작업코드를 포함할 수도 있다.
트랜잭션을 무효화하지 않고 스크립트 실행을 종료하도록 OP_RETURN이 구성되어 있기 때문에, OP_RETURN이 호출될 때, 제2 출력의 출력 주소는 스택에 남아 있다. 일부 예에서, 잠금 스크립트 내의 출력 주소 바로 뒤에 OP_RETURN이 온다. 즉, 출력 주소와 OP_RETURN 사이에 데이터 요소나 작업코드가 없다. 오프체인 기능은 스택에 남아 있는 데이터 요소를 읽고 이를 출력 중 하나(이 경우 제2 출력)의 출력 주소로 번역하도록 구성된다.
그런 다음 기능은 제2 출력의 잠금 스크립트를 실행할 수 있다. 일반적인 잠금 스크립트 실행과 달리, 제2 출력의 잠금 스크립트는 잠금 해제 스크립트와 함께 실행되지 않는다는 점을 유의한다. 이는 기능이 "오프체인"이며, 잠금 스크립트를 실행하는 목적은 블록체인으로 채굴하는 블록체인 네트워크의 노드로 트랜잭션을 전송하기 위한 목적으로 트랜잭션을 유효성 검증하는 것이 아니기 때문이다. 대신, 한 가지 장점은, 예를 들어, 잠금 스크립트 또는 스마트 계약에서 구현하기 위하여 스크립트를 구성하는 것이다.
제2 출력의 잠금 스크립트는 또한, 예를 들어, OP_RETURN이 뒤따르는 제3 출력의, 출력 주소를 포함할 수 있다. 여기에서도, "제3"은 제1 및 제2와 구별하기 위한 라벨로 사용되며 이전 트랜잭션 내에서 출력 순서를 의미하지 않는다. 그러나 제1, 제2 및 제3 출력이 이전 트랜잭션의 정렬된 출력 시퀀스의 일부인 점을 제외하지 않는다. 이 경우, 제2 출력의 잠금 스크립트가 실행되면, 제3 출력의 출력 주소가 스택에 푸시된다. 출력 주소는 기능이 출력 중 하나, 이 경우 제3 출력의 출력 주소로 번역하도록 구성되는 숫자 또는 기타 데이터 요소일 수 있다. 그러면 오프체인 기능은 제3 출력 주소를 사용하여 제3 출력의 잠금 스크립트를 참조할 수 있다.
잠금 스크립트를 실행하는 프로세스는 한 번 이상 반복될 수 있다. OP_RETURN이 호출될 때마다, 스택 맨 위에 있는 데이터 요소는 출력 중 하나의 출력 주소로 번역된다. 이전 트랜잭션의 하나 이상의 출력이 두 번 이상 실행될 수 있다. 출력의 각 잠금 스크립트가 실행되면 프로세스가 종료될 수 있다. 일부 예에서 이전 트랜잭션의 모든 출력이 제2 트랜잭션의 잠금 해제 스크립트 또는 제1 트랜잭션의 출력에 의해 참조되는 것은 아니다.
잠금 스크립트가 참조될 때마다, 해당 잠금이 스크립트 템플릿, 즉 "실행될 스크립트(to-be-executed script)"에 복사될 수 있다. 오프체인 기능이 참조된 모든 잠금 스크립트 실행을 완료하면, 스크립트 템플릿은 이러한 잠금 스크립트 내의 OP_RETURN 작업코드를 제외한, 참조된 잠금 스크립트의 내용을 포함할 것이다. 다시 말하자면, 스크립트 템플릿은 모든 루프가 풀린 스크립트를 가지며, 새로운 트랜잭션에 대해 OP_RETURN 없이 잠금 스크립트를 구성하는 데 사용할 수 있다.
다시 말해, 여러 출력을 포함하는 제1 트랜잭션이 있고 제1 트랜잭션의 출력 중 하나를 참조하는 제2 트랜잭션이 있다고 가정한다. 다음 단계를 수행할 수 있다.
1단계: 참조된 출력의 잠금 스크립트에 OP_RETURN이 있는지 확인한다. 있으면, 제1 트랜잭션에서 모든 잠금 스크립트를 추출하고 그에 따라 색인을 생성한다.
2단계: OP_RETURN이 존재한다고 가정하고, 잠금 해제 스크립트와 잠금 해제 스크립트가 참조하는 잠금 스크립트를 실행될 스크립트에 복사한다.
3단계: 실행될 스크립트를 실행한다.
4단계: OP_RETURN이 호출되면, 스택의 제1 요소가 사용된다.
5단계: 사용된 제1 요소가 유효한 색인이라고 가정하면, 4단계에서 OP_RETURN에 의해 사용된 요소가 참조하는 잠금 스크립트가 이제 실행할 스크립트의 시작 부분에 복사된다.
6단계: 실행이 계속된다.
예를 들어, 제1 트랜잭션은 다음의 잠금 스크립트를 가질 수 있다.
잠금 스크립트1: [기능 1] OP_2 OP_RETURN
잠금 스크립트2: [기능 2]
잠금 스크립트3: OP_1 OP_RETURN
제2 트랜잭션은 잠금 스크립트 3:x를 위한 잠금 해제 스크립트를 가질 수 있다.
따라서 제1 트랜잭션에는 3개의 잠금 스크립트가 있고, 제1 트랜잭션의 제3 출력을 참조하는 제2 트랜잭션에는 하나의 잠금 해제 스크립트가 있다. 기능 1과 2는 각각의 잠금 스크립트 내의 기능이다. 예를 들어, 스택에 데이터를 푸시하거나 및/또는 이에 대해 작동할 수 있다. 기능 1과 2는 잠금 스크립트 3이 먼저 실행되어, 잠금 스크립트 1(기능 1 포함)이 실행되도록 한 다음, 잠금 스크립트 2(기능 2 포함)를 실행할 수 있기 때문에 실행된다.
트랜잭션을 실행하기 위하여:
1. x가 스택으로 푸시된다
2. 잠금 스크립트 3이 실행된다
3. 잠금 스크립트 1이 호출된다
4. 기능 1이 실행된다
5. 잠금 스크립트 2가 호출된다
6. 기능 2가 실행된다
7. 실행이 종료된다
OP_RETURN이 호출되면, 잠금 해제 스크립트가 다시 실행되지 않으며, 다른 잠금 해제 스크립트도 실행되지 않는다. 잠금 스크립트의 실행은 오프체인이다.
오프체인 기능은 오프블록(또는 오프체인) 스크립트 번역기 역할을 한다. 이러한 번역기는 사용자가 잠금 스크립트 및 스마트 계약에서 구현할 복잡한 스크립트를 구성하는 데 도움이 될 수 있다. 온체인에서, OP_RETURN은 트랜잭션의 유효성 검증 중에 호출될 때 트랜잭션을 무효화하지 않고 스크립트 실행을 종료하도록 구성된다. 오프체인에서, 오프블록 스크립트 번역기는 OP_RETURN에 새로운 특징을 추가한다. 새로운 특징은 OP_RETURN을 사용하여 루프가 포함된 복합 스크립트 기능을 구성한다. 일부 블록체인 스크립팅 언어는 루프를 허용하지 않는다. 따라서, 생성된 기능의 루프는 잠금 스크립트에 넣기 전에 풀릴 것이다.
오프체인 기능은 여러 아웃포인트가 있는 단일 트랜잭션을 사용한다(아웃포인트와 출력은 상호 교환적으로 사용됨). OP_RETURN의 오프블록 정의는 트랜잭션 내에서 한 아웃포인트에서 다른 아웃포인트로 점프를 허용하며, 여기에서 스택의 맨 위 항목에 의해 제공된 아웃포인트 색인은 점프할 아웃포인트를 나타내는 데 사용된다.
이는 도 6a 및 도 6b에 도시되어 있으며 다음과 같이 설명할 수 있다.
트랜잭션의 각 아웃포인트는 잠금 스크립트를 포함한다. 각 아웃포인트에 대하여, 이 잠금 스크립트는 단일 기능으로 생각할 수 있다. 각 아웃포인트는 트랜잭션의 아웃포인트의 색인인 고유한 OA에 의해 참조된다.
'기본(main)' 기능으로 생각할 수 있고 가장 먼저 실행되는 아웃포인트가 하나 있다. 이것은 예를 들어 트랜잭션의 마지막 아웃포인트일 수 있다.
트랜잭션 아웃포인트는 0부터 색인되며, 이는 일반적으로 OP_RETURN이 뒤따를 때 실패한 스크립트를 위해 예약된 특수한 값임을 유의한다. 다음 내용에서는 간결함을 위해 아웃포인트가 1부터 색인된다고 가정한다.
OP_RETURN을 실행하면, 오프블록 스크립트 번역기는 스택의 최상위 항목에 의해 주어진 OA로 점프하고, 잠금 스크립트의 작업코드를 명령 세트에 추가한 다음, 이전과 같이 실행을 계속한다. 최상위 항목을 꺼내는 것 외에는, 기본 스택과 대체 스택이 변경되지 않은 상태로 유지된다.
도 6a 및 도 6b에 도시된 바와 같이, 스크립트 번역기는 다음 작업을 수행한다.
ㆍ입력: <OA>
ㆍ연산자: OP_RETURN
ㆍ출력: [<OA>로부터의 잠금 스크립트], <OA>가 사용된다.
OP_RETURN의 실행을 제외하고, 스크립트 번역기는 트랜잭션의 유효성을 검증하는 스크립트 번역기와 동일하다는 점을 강조하는 것이 중요하다. 위의 구성은 트랜잭션이 스크립트의 복합 기능에 대한 템플릿으로 번역될 수 있게 한다. 기능이 컴파일될 수 있는 경우, 이는 모든 루프를 풀어야 하는 단일 아웃포인트에 작성될 수 있으며, 결과는 길고 복잡한 코드 조각이 된다. 그러나, 본 발명의 실시예에서, 모든 로직은 크기가 상당히 더 작을 수 있는, 트랜잭션의 개별 아웃포인트 내에 포함된다. 이 논리는 더 쉽게 소화할 수 있으며 포스(Forth)와 더 밀접하게 관련되어 있다. 더 구체적으로, 이는 코드의 가독성을 향상시키고, 코드베이스를 줄이며, 단위 테스트를 허용한다.
지출하지 않으면, 이 형식의 트랜잭션이 UTXO 세트에 저장되며 이는 향후 참조를 위한 데이터 기록(logging) 측면에서 비트코인의 보편적인 '메모리'로 생각할 수 있다. 트랜잭션은 복합 기능을 구성하는 데 필요한 모든 것을 포함하고, 다른 고급 언어는 필요하지 않다. 이는 보편적으로 합의된 복합 기능 세트를 가능하게 한다. 이는, 예를 들어, 아래에 설명될, 타원 곡선 점 곱셈과 같이 많은 애플리케이션에서 반복될 가능성이 있는 기능에 특히 유용하다.
이는 또한 UTXO 세트를 튜링 완전(Turing complete) 코드 단편을 위한 탈중앙화된 저장소로 사용할 수 있게 한다. 유용한 복합 기능 세트를 저장하는 것 외에도, 이 저장소는 계산적으로 수행하기 어렵지만 검증하기 쉬운 계산 처리를 아웃소싱하는 데 사용될 수 있다. 그런 다음 이러한 계산에 대한 해를 블록체인으로 전송할 수 있으며, 스크립트에서 검증할 수 있는 정확한 해를 제공하여 디지털 자산을 리딤할 수 있다. 다른 가능한 사용 사례는 UTXO 세트를 스마트 계약을 위한 탈중앙화된 저장소로 사용하는 것이다.
UTXO 세트의 이러한 트랜잭션이 지출되는 것을 피하기 위하여, 트랜잭션 작성자 앨리스는 잠금 스크립트 시작 부분에 OP_CHECKSIGVERIFY(그녀의 서명 필요)를 추가할 수 있다. 스크립트를 번역할 때 이 부분은 무시해도 된다. 대안적으로, 위에서 설명한 바와 같이 아웃포인트를 포함하지만 입력이 없는 부분 트랜잭션을 구성할 수 있으며, 이는 기능을 정의하기에 충분하다. 복합 기능이 앨리스가 만족할 정도로 활용되면, 트랜잭션을 완료하여 제출하거나 폐기할 수 있다.
사용 사례 - 유클리드 알고리즘
예를 들어, 트랜잭션 TX_[Euclidean_algorithm]은 유클리드 알고리즘을 포함하는 2개의 아웃포인트를 갖도록 생성될 수 있다. 트랜잭션의 입력은 아웃포인트를 강조하기 위해 공백으로 남겨두었다.
Figure pct00023
유클리드 알고리즘은 2개의 입력(a.b)을 취하고, a 와 b의 최대공약수(GCD)를 출력한다. 단순화를 위해 a>b라고 가정한다.설계상, "<i> OP_RETURN"이 호출될 때마다, 오프블록 번역기는 이들 두 항목을 제i 아웃포인트에 저장된 전체 스크립트로 대체함을 유의한다. 루프 특징은 제i 아웃포인트에 "<i> OP_RETURN"을 가짐으로써 달성된다. 이 사용 사례에서, 트랜잭션의 마지막 아웃포인트가 기본 기능이며 먼저 호출된다. "<1> OP_RETURN"에 대한 호출은 "OP_TUCK OP_MOD OP_DUP OP_IF <1> OP_RETURN OP_ENDIF"로 대체될 것이다. 예는 도 7에 도시되어 있다. 단계별로, 실행은 다음과 같다.
1) 입력은 먼저 스택에 푸시된다.
2) 기본 기능 "<1> OP_RETURN OP_DROP"이 호출된다.
3) "<1> OP_RETURN"이 "OP_TUCK OP_MOD OP_DUP OP_IF <1> OP_RETURN OP_ENDIF"로 대체된다.
4) "OP_TUCK OP_MOD OP_DUP OP_IF"가 실행된다.
5) 입력이 0이 아니므로 if 문 내부의 "<1> OP_RETURN"으로 진행한다.
6) "<1> OP_RETURN"이 "OP_TUCK OP_MOD OP_DUP OP_IF <1> OP_RETURN OP_ENDIF"로 대체된다.
7) "OP_TUCK OP_MOD OP_DUP OP_IF"가 실행된다.
8) 입력이 0이 아니므로 if 문 내부의 "<1> OP_RETURN"으로 진행한다.
9) "<1> OP_RETURN"이 "OP_TUCK OP_MOD OP_DUP OP_IF <1> OP_RETURN OP_ENDIF"로 대체된다.
10) "OP_TUCK OP_MOD OP_DUP OP_IF"가 실행된다.
11) 입력이 0이므로 "OP_ENDIF"로 직접 진행하여 9단계에서 if 문을 닫는다.
12) "OP_ENDIF"로 진행하여 6단계에서 if 문을 닫는다.
13) "OP_ENDIF"로 진행하여 3단계에서 if 문을 닫는다.
14) 기본 기능으로 돌아가 "OP_DROP"으로 진행한다.
15) 결과는 스택 맨 위에 남는다.
사용 사례 - 타원 곡선 점 곱셈
단순화를 위해, 사용 사례는 [DECIMAL_TO_BINARY], [POINT_ADD] 및 [POINT_DOUBLE]로 축약된 세 가지 기능을 포함한다.
[DECIMAL_TO_BINARY]는 스택의 제1 요소 d를 사용하고 스택 <2><dn>...<d0>에 다음의 출력을 푸시하며, 여기에서 <2>는 시퀀스에서 푸시될 제1 요소 표시기이며( 이진 시퀀스의 끝을 신호하기 위해 사용됨)
Figure pct00024
이다. 스택의 제1 요소는 d0일 것임을 유의한다.
[POINT_ADD]는 스택의 처음 두 요소 P1 및 P2를 사용하고 P1 및 P2의 점 덧셈을 스택에 푸시한다.
OP_DUP [POINT_ADD]와 교환 가능한 [POINT_DOUBLE]은 스택의 제1 요소 P를 소비하고 점 2P를 스택으로 푸시한다.
TX_[POINT_MUL]은 타원 곡선 점 곱셈을 위한 복합 스크립트 기능을 포함하는 트랜잭션이다.
Figure pct00025
위의 트랜잭션에서 마지막 아웃포인트로 표시되는, 기본 기능은 두 개의 입력(a,G)을 취하고 a·G를 출력한다. 예는 도 8에 도시되어 있다. "<i> OP_RETURN"은 OP_RETURN이 발생할 때마다 제i 아웃포인트의 전체 스크립트로 대체된다. 스크립트가 하는 작업에 대한 단계별 설명은 다음과 같으며, 여기에서 입력 (a,G)가 스택으로 푸시된다고 가정하고, G는 스택의 제1 요소이다:
기본 기능(아웃포인트 6)이 호출된다.
1) G를 대체 스택으로 푸시한다.
2) a의 이진 표현을 얻기 위하여 [DECIMAL_TO_BINARY]를 호출한다.
3) 대체 스택에서 G를 뒤로 이동한다.
4) 대체 스택에 0을 푸시한다. 이 0은 ALT 스택의 맨 아래에 도달했을 때 식별하는 데 도움이 된다.
5) 처음에는, a의 첫 번째(최하위) 비트를 처리한다. 1이면, G를 대체 스택으로 푸시한다.
6) 그런 다음 1을 대체 스택에 푸시한다. 이 1은 대체 스택에서 옆에 0이 아닌 요소가 있음을 나타낸다.
7) 기본 스택에서 2(이진 시퀀스의 끝을 나타냄)를 만날 때까지 아웃포인트4가 계속 호출된다.
8) 아웃포인트 4는 점을 두 배로 늘리고, 이진 비트가 1이면, 결과를 대체 스택에 푸시하고 그 뒤에 1이 추가된다(6단계에서 설명한 바와 같이).
9) 아웃포인트 4가 완료되면, 함께 추가할 점 목록이 대체 스택에 있을 것이다.
10) 대체 스택의 제1 점을 기본 스택으로 이동하고, 아웃포인트 5를 호출하여 점 덧셈을 시작한다.
11) 대체 스택의 끝에 도달하면, 예상 결과가 기본 스택에 있을 것이다.
프로토콜
위의 설명은, 트랜잭션의 출력 스크립트(예컨대, 잠금 스크립트)에서 OP_RETURN이 트랜잭션을 무효화하지 않고 스크립트의 실행을 종료하도록 허용하는 것이 어떻게 추가적인 기능을 제공할 수 있는지를 보여준다. 그러나 트랜잭션의 잠금 해제 스크립트에서 OP_RETURN이 이러한 방식으로 작동하도록 허용하면 사기성 공격이 발생할 가능성이 열릴 수 있다. 이를 방지하기 위해 트랜잭션을 처리하는 노드는, 임의의 입력 스크립트(예컨대, 잠금 해제 스크립트)가 OP_RETURN을 포함하는 경우, 트랜잭션을 무효화할 수 있다.
대상 트랜잭션을 포함하는 복수의 트랜잭션 각각에 대해, 네트워크의 적어도 일부의 노드는 트랜잭션이 유효한 조건에서 각 트랜잭션을 전파하도록 구성되며 그리고 적어도 일부의 노드는 트랜잭션이 유효한 조건에서 해당 노드에서 블록체인의 사본에 각 트랜잭션을 기록하도록 구성된다. 트랜잭션의 유효성은 위의 프로토콜에 따라 조건부이며, 이에 따라, OP_RETURN이 호출되면 스크립트만 종료되고 결정적으로 트랜잭션이 무효화되지 않는다. 예를 들어, 트랜잭션의 유효성은 스택의 최상위 요소에 의존할 수 있다.
프로토콜은 출력 스크립트와 함께 실행될 때 입력 스크립트가 유효하게 실행되도록 허용함으로써 트랜잭션의 기능을 되찾고 OP_RETURN을 가지는 임의의 입력 스크립트가 임의의 출력 스크립트의 잠금을 해제하는 데 사용할 수 없도록 보장함으로써 사기성 공격을 방지한다.
노드는 위의 프로토콜을 기반으로 처리하는 트랜잭션을 유효성 검증하거나 무효화하도록 구성된다. 즉, 노드가 트랜잭션을 처리할 때, 트랜잭션의 출력 스크립트(또는 둘 이상의 출력 스크립트)에 OP_RETURN을 포함하면 OP_RETURN이 호출될 때 출력 스크립트가 종료된다. 출력 스크립트에 OP_RETURN을 포함하는 것은 트랜잭션을 무효화하지 않는다. 트랜잭션은 어떤 다른 이유로 무효화될 수 있다. 한편, 트랜잭션의 입력 스크립트에 OP_RETURN이 포함되어 있으면, 노드는 항상 트랜잭션을 무효화하도록 구성된다. 여기에서, 임의의 입력 스크립트에 OP_RETURN을 포함하면 트랜잭션이 무효화되는 결과를 가져온다.
블록체인 네트워크의 각 노드의 유형은 동일한 프로토콜을 구현할 수 있다. 블록체인 네트워크의 노드는, 예를 들어, 채굴 노드, 전달 노드 또는 저장 노드일 수 있으며, 각각은 아래에서 논의되는 바와 같이 동일한 기능 중 하나 이상을 갖는다. 예를 들어 노드가 전달 노드인 경우, 전달 노드는, 구현되는 프로토콜의 조건에 따라, 예컨대 트랜잭션의 입력 스크립트의 어느 것에 OP_RETURN 작업코드가 없다는 조건에 따라 블록체인 네트워크의 하나 이상의 노드에만 트랜잭션을 전달할 수 있다.
본 발명의 실시예에 따른 노드에 의해 구현되는 것으로 정의된 프로토콜은 OP_RETURN의 사용에 대해 적어도 두 가지 조건을 부과한다:
1) OP_RETURN은 유효한 트랜잭션의 출력 스크립트에 포함되는 것이 허용된다.
2) OP_RETURN은 유효한 트랜잭션의 입력 스크립트에 포함되는 것이 허용되지 않는다.
OP_RETURN의 기능은 트랜잭션을 무효화하지 않고 스크립트의 실행을 종료하는 것이다. 즉, OP_RETURN이 호출되면, 스크립트가 중지되고 스택은 변경되지 않은 상태로 유지된다.
트랜잭션을 유효성 검증할 때, 노드는 트랜잭션의 출력 스크립트에 OP_RETURN이 있다는 것만 기반으로 트랜잭션을 무효화하지 않는다. 반대로, 노드는 트랜잭션의 입력 스크립트에 OP_RETURN이 있다는 것만 기반으로 트랜잭션을 무효화한다. 트랜잭션이 둘 이상의 입력을 갖는 경우, 그들 입력 중 하나만이, 노드가 트랜잭션을 무효화하기 위한 OP_RETURN을 포함하는 입력 스크립트를 갖는 것으로 충분하다. 잠금 스크립트가 OP_RETURN을 포함하는 경우, 트랜잭션은 결코 실행되지 않으며-트랜잭션은 실행없이 무효화된다.
도 1을 참조하면, 제1 당사자 앨리스(103a)는 하나 이상의 입력 및/또는 하나 이상의 출력을 포함하는 트랜잭션을 생성할 수 있다. 도 2에 나타낸 것처럼, 각각의 입력은 이전 트랜잭션으로부터의 잠금 스크립트를 잠금 해제하기 위한 잠금 해제 스크립트를 가질 수 있다. 각각의 출력은 디지털 자산의 금액을 각각의 제2 당사자, 예컨대 밥(103b)에 대해 잠금하기 위한 잠금 스크립트를 가질 수 있으며, 이는 이후의 트랜잭션의 잠금 해제 스크립트에 의해 잠금 해제될 것이다. 앨리스(103a)는 트랜잭션을 P2P 네트워크의 노드에 전송한다. 전달 노드(104F)는 트랜잭션을 하나 이상의 다른 전달 노드 또는 채굴 노드(104M)로 전파하기 전에 트랜잭션의 유효성을 검사한다. 대안적으로, 채굴 노드(104M)는 앨리스(103a)로부터 직접 트랜잭션을 수신할 수 있다. 각각의 노드는, 적어도 위의 프로토콜을 기반으로 트랜잭션이 유효한지 여부를 결정한다. 트랜잭션이 OP_RETURN의 사용 측면에서 프로토콜의 요구사항(및 프로토콜의 하나 이상의 다른 요구사항)을 충족하는 경우, 트랜잭션은 네트워크 전체에 전파되고/되거나 블록체인에 채굴된다.
일부 실시예에서, OP_RETURN은 트랜잭션의 잠금 스크립트에서만 허용될 수 있다. 유사하게, 일부 실시예에서, OP_RETURN은 트랜잭션의 잠금 해제 스크립트에서만 허용되지 않을 수 있다. 일부 예에서, 입력 스크립트를 실행하기 전에, 노드는 입력 스크립트에서 OP_RETURN의 임의의 인스턴스를 스캔하고 그러한 임의의 인스턴스가 존재하는 경우, 노드는 즉, 입력 스크립트를 실행하기 전에 트랜잭션을 무효화하도록 구성된다. 위에서 논의된 바와 같이, 각 트랜잭션은 각각 잠금 해제 스크립트를 가질 수 있는 하나 이상의 입력, 및 각각 잠금 스크립트를 가질 수 있는 하나 이상의 출력을 포함한다. 주어진 트랜잭션의 잠금 해제 스크립트는 일부 이전 트랜잭션의 잠금 스크립트를 잠금 해제한다.
프로토콜을 구현할 때, 노드가 트랜잭션의 유효성을 검증하면, 이는 다른 조건을 충족하는 중에 트랜잭션이 임의의 입력 스크립트에 임의의 OP_RETURN을 포함하지 않는다는 의미이다. 트랜잭션의 유효성 검증은, 트랜잭션으로부터의 잠금 해제 스크립트와 다른 트랜잭션으로부터의 잠금 스크립트의 조합을 실행한 후 스택 에 비어 있지 않고 0이 아닌 결과를 가져온다. 트랜잭션의 유효성 검증은 추가적으로 또는 대안적으로 노드가 트랜잭션을 네트워크의 하나 이상의 노드로, 예컨대 블록체인 채굴을 위해 채굴자에게 전달하는 결과를 가져온다. 트랜잭션을 유효성 검증한 다른 결과는, 노드가 채굴자인 경우, 채굴자가 블록체인의 블록에서 트랜잭션을 채굴(즉, 기록)하는 것이다.
여기에 정의된 프로토콜은 사기성 공격을 유리하게 방지하고 블록체인의 기존 기능(즉, 데이터 저장 애플리케이션)과의 호환성을 유지한다. 사기성 공격은 트랜잭션의 잠금 해제 스크립트에 OP_RETURN이 존재할 수 없게 함으로써 방지된다. 기존의 기능은 트랜잭션의 출력(예컨대, 잠금 스크립트)에서 OP_RETURN 앞에 <0>을 포함하여 달성될 수 있다. 여기서 <0>은 스택에 0이 푸시되도록 하는 임의의 요소이다. 예를 들어, 제로 작업코드 OP_0이 OP_RETURN 앞에 배치될 수 있다. 이는 트랜잭션의 잠금 스크립트에 즉 [OP_0 OP_RETURN <임의 데이터>]를 삽입함으로써 증명할 수 있는 지출 불가능한 트랜잭션 출력을 생성한다. 임의의 데이터는, 예를 들어, 이미지 데이터, 텍스트 데이터, 비디오 데이터 및 오디오 데이터 중 하나 이상일 수 있다. 예로서, 비디오 파일 또는 법률 문서가 트랜잭션의 출력에 포함될 수 있다.
위의 실시예들은 단지 예로서 설명되었다는 것을 이해할 것이다. 명확히 하자면, 실시예는 특정 이름을 갖는 작업코드로 제한되지 않는다. 오히려, 실시예는 특정 기능을 갖는 작업코드로 제한된다. 간결함을 위해 "OP_RETURN"이라는 용어가 사용되었다.
본원에 개시된 교시의 제1 예시에 따르면, 블록체인 네트워크의 트랜잭션을 실행하는 방법이 제공되며, 상기 방법은, 제1 트랜잭션은 스택 기반 스크립팅 언어의 제1 잠금 스크립트를 포함하는 제1 출력을 적어도 포함하고, 상기 제1 잠금 스크립트는 작업코드의 제1 인스턴스가 실행되기 전에 실행될 상기 제1 잠금 스크립트의 일부를 포함하고, 제2 트랜잭션은 상기 제1 트랜잭션의 상기 제1 출력을 참조하는 제1 잠금 해제 스크립트를 포함하고, 상기 방법은, 상기 작업코드의 상기 제1 인스턴스를 실행할 때: 상기 제1 트랜잭션을 무효화하지 않으면서 상기 제1 잠금 스크립트의 실행을 종료하는 것; 적어도 하나의 스택으로부터 제1 데이터 요소를 판독하는 것-상기 제1 데이터 요소는 상기 제1 잠금 해제 스크립트 및 상기 제1 잠금 스크립트의 상기 일부의 실행 동안 생성됨; 및 상기 적어도 하나의 스택으로부터 판독된 상기 제1 데이터 요소를 오프체인(off-chain) 기능에 제공하는 것을 포함하고, 상기 기능은 적어도 상기 제1 데이터 요소에 기초하여 결과를 생성하도록 구성된다.
상기 작업코드는 종료 작업코드라고 부를 수 있다. 즉, 상기 종료 작업코드는 스크립트의 실행을 종료한다.
제2의 선택적인 예시에 따르면, 제1 예시에 따른 방법이 제공될 수 있으며, 상기 제1 데이터 요소를 판독하는 것은 상기 제1 데이터 요소를 적어도 하나의 오프체인 스택에 기록하는 것을 포함할 수 있고, 상기 제공하는 것은 상기 적어도 하나의 오프체인 스택으로부터 판독된 상기 제1 데이터 요소를 상기 오프체인 기능에 제공하는 것을 포함할 수 있다.
제3의 선택적인 예시에 따르면, 제1 예시 또는 제2 예시에 따른 방법이 제공될 수 있으며, 상기 결과는 상기 블록체인 네트워크의 추가 트랜잭션을 포함할 수 있다.
제4의 선택적인 예시에 따르면, 제1 예시 내지 제3 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 추가 트랜잭션을 생성하는 것은 상기 추가 트랜잭션의 입력을 생성하는 것을 포함할 수 있고, 상기 입력은 적어도 상기 제1 데이터 요소에 기초한다.
제5의 선택적인 예시에 따르면, 제1 예시 내지 제4 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 추가 트랜잭션을 상기 블록체인 네트워크의 하나 이상의 노드로 전송하는 것을 포함할 수 있다.
제6의 선택적인 예시에 따르면, 제3 예시 내지 제5 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 블록체인 네트워크의 제3 트랜잭션을 실행하는 것을 포함할 수 있으며, 상기 제3 트랜잭션은 상기 스택 기반 스크립팅 언어의 제2 잠금 스크립트를 포함하는 제2 출력을 적어도 포함하고, 상기 제2 잠금 스크립트는 상기 작업코드의 제2 인스턴스가 실행되기 전에 실행될 상기 제2 잠금 스크립트의 일부를 포함하고, 상기 추가 트랜잭션은 상기 제3 트랜잭션의 상기 제2 출력을 참조하는 제2 잠금 해제 스크립트를 포함하고, 상기 방법은, 상기 추가 트랜잭션의 상기 작업코드의 상기 제2 인스턴스를 실행할 때: 상기 추가 트랜잭션을 무효화하지 않으면서 상기 제2 잠금 스크립트의 실행을 종료하는 것; 상기 적어도 하나의 스택으로부터 제2 데이터 요소를 판독하는 것-상기 제2 데이터 요소는 상기 제2 잠금 해제 스크립트 및 상기 제2 잠금 스크립트의 상기 일부의 실행 동안 생성됨; 및 상기 적어도 하나의 스택으로부터 판독된 상기 제2 데이터 요소를 상기 오프체인 기능에 제공하는 것을 포함하고, 상기 기능은 적어도 상기 제2 데이터 요소에 기초하여 추가 결과를 생성하도록 구성된다.
제7의 선택적인 예시에 따르면, 제1 예시에 따른 방법이 제공될 수 있으며, 상기 제1 트랜잭션은 각각 각자의 잠금 스크립트를 포함하는 복수의 출력을 포함할 수 있고, 상기 복수의 출력의 각각은 각자의 출력 주소에 의해 참조되고, 상기 제1 데이터 요소는 상기 출력 중 제2의 것을 참조하는 출력 주소이고, 상기 제1 출력은 상기 제2 트랜잭션의 상기 잠금 해제 스크립트 내에서 참조되며; 상기 오프체인 기능은, 상기 작업코드의 상기 제1 인스턴스를 호출할 때, 상기 제2 출력의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성될 수 있다.
제8의 선택적인 예시에 따르면, 제7 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트를 실행하는 것을 포함할 수 있으며, 상기 실행은 상기 제2 출력의 상기 출력 주소를 상기 스택으로 푸시하는 것을 포함한다.
제9의 선택적인 예시에 따르면, 제8 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트의 상기 실행 전에, 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트를 스크립트 템플릿에 복사하는 것을 포함할 수 있으며, 상기 스크립트 템플릿은 실행될(to-be-executed) 스크립트를 포함한다.
제10의 선택적인 예시에 따르면, 제9 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 작업코드의 상기 제1 인스턴스를 호출할 때, 상기 제2 출력의 상기 잠금 스크립트를 상기 스크립트 템플릿의 시작 부분으로 복사하는 것을 포함할 수 있다.
제11의 선택적인 예시에 따르면, 제7 예시 내지 제10 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 제2 출력의 상기 잠금 스크립트를 실행하는 것을 포함할 수 있다.
제12의 선택적인 예시에 따르면, 제11 예시에 따른 방법이 제공될 수 있으며, 상기 제2 출력의 상기 잠금 스크립트는 상기 작업코드의 제2 인스턴스 전에 실행될 스크립트의 일부를 포함할 수 있고, 상기 일부는 상기 출력 중 제3의 것을 참조하는 출력 주소를 포함하고; 상기 제2 출력의 상기 잠금 스크립트의 상기 실행은: 상기 제3 출력의 상기 출력 주소를 상기 스택으로 푸시하는 것을 포함할 수 있고, 상기 기능은, 상기 작업코드의 상기 제2 인스턴스를 호출할 때, 상기 제3 출력의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성된다.
제13의 선택적인 예시에 따르면, 제12 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 작업코드의 상기 제2 인스턴스를 호출할 때, 상기 제3 출력의 상기 잠금 스크립트를 상기 스크립트 템플릿의 상기 시작 부분으로 복사하는 것을 포함할 수 있다.
제14의 선택적인 예시에 따르면, 제12 예시 또는 제13 예시에 따른 방법이 제공될 수 있으며, 상기 제1, 제2 및 제3 출력은 상기 복수의 출력 내에서 순차적으로 나열될 수 있다.
제15의 선택적인 예시에 따르면, 제12 예시 또는 제13 예시에 따른 방법이 제공될 수 있으며, 상기 제1, 제2 및 제3 출력은 상기 복수의 출력 내에서 순차적으로 나열되지 않을 수 있다.
제16의 선택적인 예시에 따르면, 제7 예시 내지 제15 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 방법은 참조된 출력의 잠금 스크립트를 실행하고 각자의 출력의 출력 주소를 상기 오프체인 스택으로 푸시하는 동작을 수행하는 것을 포함할 수 있고; 상기 기능은, 상기 각자의 출력의 상기 작업코드의 상기 각자의 인스턴스를 호출할 때, 상기 출력 중 다음 것의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성되고; 상기 동작은 다른 잠금 스크립트에 의해 참조된 상기 복수의 출력의 각 잠금 스크립트가 실행될 때까지 반복된다.
제17의 선택적인 예시에 따르면, 제16 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 잠금 스크립트 중 하나가 실행될 때마다, 해당 잠금 스크립트를 상기 스크립트 템플릿의 상기 시작 부분으로 복사하는 것을 포함할 수 있다.
제18의 선택적인 예시에 따르면, 제16 예시 또는 제17 예시에 따른 방법이 제공될 수 있으며, 상기 방법은 상기 스크립트 템플릿을 추가 트랜잭션에 대한 잠금 스크립트로 사용하는 것을 포함할 수 있고, 상기 추가 트랜잭션에 대한 상기 잠금 스크립트는 상기 작업코드의 인스턴스를 포함하지 않는다.
제19의 선택적인 예시에 따르면, 제7 예시 내지 제18 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 잠금 스크립트 중 하나 이상은 각자의 기능을 포함할 수 있고, 해당 각자의 잠금 스크립트의 상기 실행은 상기 각자의 기능을 실행하는 것을 포함한다.
제20의 선택적인 예시에 따르면, 제19 예시에 따른 방법이 제공될 수 있으며, 상기 각자의 기능은 상기 각자의 기능이 실행될 때 상기 오프체인 스택 상의 데이터에 동작하도록 구성될 수 있다.
제21의 선택적인 예시에 따르면, 제7 예시 내지 제20 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 방법은, 상기 제1 잠금 스크립트가 상기 작업코드의 인스턴스를 포함하면, 상기 제1 트랜잭션으로부터 모든 잠금 스크립트를 추출하고 각자의 출력 주소로 색인(index)하는 것을 포함할 수 있다.
제22의 선택적인 예시에 따르면, 제7 예시 내지 제21 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 각 잠금 스크립트 내의 각 출력 주소는 각자의 데이터 요소일 수 있고, 상기 방법은 상기 각자의 데이터 요소를 출력 주소로 번역하는 것을 포함할 수 있다.
제23의 선택적인 예시에 따르면, 제1 예시 내지 제22 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 트랜잭션을 상기 실행하는 것은 상기 블록체인에 기록하기 위한 트랜잭션을 유효성 검증하는 것을 포함할 수 있고, 상기 방법은 상기 트랜잭션을 유효성 검증하는 프로토콜을 적용하는 것을 포함하고, 상기 프로토콜은: 종료 작업코드가 상기 트랜잭션의 출력 스크립트에 포함될 수 있도록 허용하고-상기 종료 작업코드는, 상기 노드에 의해 실행될 때, a) 상기 출력 스크립트의 실행을 종료하고, b) 상기 출력 스크립트에 상기 종료 작업코드가 포함된 것에만 기초하여 트랜잭션을 무효화하지 않도록 구성됨; 및 상기 종료 작업코드의 임의의 인스턴스가 상기 트랜잭션의 입력 스크립트에 포함되는 것을 허용하지 않도록 구성될 수 있으며, 상기 허용하지 않는 것은 상기 종료 작업코드의 임의의 인스턴스가 상기 입력 스크립트에 포함되는 경우 상기 노드가 적어도 상기 트랜잭션을 무효화하는 것을 포함한다.
순전히 출력 스크립트에 OP_RETURN이 있기 때문에 트랜잭션은 무효화되지 않는다. 다시 말해, 트랜잭션은 출력 스크립트 자체에서의 OP_RETURN을 기반으로 무효화되지 않지만, 논의된 바와 같이 다른 이유로 무효화될 수 있다.
제24의 선택적인 예시에 따르면, 제23 예시에 따른 방법이 제공될 수 있으며, 상기 출력 스크립트는 상기 트랜잭션에 포함된 잠금 스크립트일 수 있고 상기 입력 스크립트는 이전 트랜잭션의 잠금 스크립트를 잠금 해제하기 위하여 상기 트랜잭션에 포함된 잠금 해제 스크립트이다.
제25의 선택적인 예시에 따르면, 제23 예시 또는 제25 예시에 따른 방법이 제공될 수 있으며, 상기 프로토콜은: 상기 출력 스크립트가 적어도 하나의 데이터 요소가 선행하는 상기 종료 작업코드의 인스턴스의 조합을 포함하는 경우, 상기 적어도 하나의 데이터 요소 및 상기 종료 작업코드의 인스턴스의 조합에 기초하여 상기 트랜잭션을 무효화하도록 구성될 수 있다.
일부 예들에서, 상기 조합에 기초하여 무효화될 트랜잭션에 대해, 종료 작업코드의 인스턴스는 적어도 하나의 데이터 요소가 바로 선행되어야 한다. 즉, 적어도 하나의 데이터 요소와 종료 작업코드는 출력 스크립트의 이웃하는(adjoining) 요소이다. 증명할 수 있는 지출 불가능한 출력은 블록체인 상에서 (예컨대, 계약, 미디어 파일, 문서 등의) 데이터 저장을 가능하게 한다.
제26의 선택적인 예시에 따르면, 제25 예시에 따른 방법이 제공될 수 있으며, 상기 적어도 하나의 데이터 요소는: 0(영) 작업코드; 또는 상기 트랜잭션의 증명할 수 있는 지출 불가능한 출력을 생성하기 위한, 0 값의 표현 중 하나 또는 모두를 포함할 수 있다.
데이터 요소는 스크립트의 임의의 요소(예컨대, 함수, 문자열, 작업코드 등)일 수 있다.
제27의 선택적인 예시에 따르면, 제23 예시 내지 제26 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 프로토콜은: 임의의 작업코드가 상기 트랜잭션의 상기 입력 스크립트에 포함되는 것을 허용하지 않도록 구성될 수 있으며, 상기 허용하지 않는 것은 임의의 작업코드가 상기 입력 스크립트에 포함되는 경우 상기 노드가 적어도 상기 트랜잭션을 무효화하는 것을 포함한다.
제28의 선택적인 예시에 따르면, 제23 예시 내지 제27 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 유효성 검증하는 것은: 상기 출력 스크립트와 상기 입력 스크립트의 조합을, 상기 노드에 의해, 실행한 후 비어 있지 않고 0이 아닌 결과를 가져오는 것; 상기 노드가 상기 블록체인에 기록하기 위해 상기 네트워크의 하나 이상의 노드로 상기 트랜잭션을 전달하는 것; 및 상기 노드가 상기 블록체인에 상기 트랜잭션을 기록하는 것 중 적어도 하나를 포함할 수 있다.
제29의 선택적인 예시에 따르면, 전술한 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 작업코드의 상기 제1 인스턴스는, 실행될 때, 상기 제1 트랜잭션을 유효한 것으로 표시하고, 상기 작업코드의 상기 제1 인스턴스의 상기 실행 이후에 그리고 상기 적어도 하나의 스택이 클리어되기 전에 상기 적어도 하나의 스택에 숫자를 남기도록 구성되고, 상기 제1 데이터 요소는 숫자이다.
제30의 선택적인 예시에 따르면, 전술한 예시 중 어느 하나에 따른 방법이 제공될 수 있으며, 상기 작업코드의 상기 제1 인스턴스는 OP_RETURN 작업코드이다.
제31의 선택적인 예시에 따르면, 제2 예시 또는 제2 예시에 의존하는 임의의 예시에 따른 방법이 제공될 수 있으며, 상기 오프체인 스택은 트랜잭션의 유효성 검증 목적으로 사용되지 않는 스택이다.
본원에 개시된 교시의 제32 예시에 따르면, 컴퓨터 판독 가능 스토리지(storage) 상에 구현되며, 블록체인 네트워크의 노드 상에서 실행될 때, 제1 내지 제28 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공될 수 있다.
본원에 개시된 교시의 제33 예시에 따르면, 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상에서 실행될 때 제1 내지 제28 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨팅 장비가 제공될 수 있다.
개시된 기술의 다른 변형 또는 사용 사례는 본원에서 개시가 주어지면 당업자에게 명백해질 수 있다. 개시의 범위는 설명된 실시예에 의해 제한되지 않고 첨부된 청구범위에 의해서만 제한된다.

Claims (33)

  1. 블록체인 네트워크의 트랜잭션을 실행하는 컴퓨터 구현 방법으로서,
    제1 트랜잭션은 스택 기반 스크립팅 언어의 제1 잠금 스크립트를 포함하는 제1 출력을 적어도 포함하고, 상기 제1 잠금 스크립트는 작업코드(opcode)의 제1 인스턴스가 실행되기 전에 실행될 상기 제1 잠금 스크립트의 일부를 포함하고, 제2 트랜잭션은 상기 제1 트랜잭션의 상기 제1 출력을 참조하는 제1 잠금 해제 스크립트를 포함하고, 상기 방법은, 상기 작업코드의 상기 제1 인스턴스를 실행할 때:
    상기 제1 트랜잭션을 무효화하지 않으면서 상기 제1 잠금 스크립트의 실행을 종료하는 것;
    적어도 하나의 스택으로부터 제1 데이터 요소를 판독하는 것-상기 제1 데이터 요소는 상기 제1 잠금 해제 스크립트 및 상기 제1 잠금 스크립트의 상기 일부의 실행 동안 생성됨; 및
    상기 적어도 하나의 스택으로부터 판독된 상기 제1 데이터 요소를 오프체인(off-chain) 기능에 제공하는 것 - 상기 기능은 적어도 상기 제1 데이터 요소에 기초하여 결과를 생성하도록 구성됨 - 을 포함하는 방법.
  2. 제1항에 있어서, 상기 제1 데이터 요소를 판독하는 것은 상기 제1 데이터 요소를 적어도 하나의 오프체인 스택에 기록하는 것을 포함하고, 상기 제공하는 것은 상기 적어도 하나의 오프체인 스택으로부터 판독된 상기 제1 데이터 요소를 상기 오프체인 기능에 제공하는 것을 포함하는 방법.
  3. 제1항 또는 제2항에 있어서, 상기 결과는 상기 블록체인 네트워크의 추가 트랜잭션을 포함하는 방법.
  4. 제3항에 있어서, 상기 추가 트랜잭션을 생성하는 것은 상기 추가 트랜잭션의 입력을 생성하는 것을 포함하고, 상기 입력은 적어도 상기 제1 데이터 요소에 기초하는 방법.
  5. 제3항 또는 제4항에 있어서, 상기 추가 트랜잭션을 상기 블록체인 네트워크의 하나 이상의 노드로 전송하는 것을 포함하는 방법.
  6. 제3항 내지 제5항 중 어느 한 항에 있어서, 상기 블록체인 네트워크의 제3 트랜잭션을 실행하는 것을 포함하며, 상기 제3 트랜잭션은 상기 스택 기반 스크립팅 언어의 제2 잠금 스크립트를 포함하는 제2 출력을 적어도 포함하고, 상기 제2 잠금 스크립트는 상기 작업코드의 제2 인스턴스가 실행되기 전에 실행될 상기 제2 잠금 스크립트의 일부를 포함하고, 상기 추가 트랜잭션은 상기 제3 트랜잭션의 상기 제2 출력을 참조하는 제2 잠금 해제 스크립트를 포함하고, 상기 방법은, 상기 추가 트랜잭션의 상기 작업코드의 상기 제2 인스턴스를 실행할 때:
    상기 추가 트랜잭션을 무효화하지 않으면서 상기 제2 잠금 스크립트의 실행을 종료하는 것;
    상기 적어도 하나의 스택으로부터 제2 데이터 요소를 판독하는 것-상기 제2 데이터 요소는 상기 제2 잠금 해제 스크립트 및 상기 제2 잠금 스크립트의 상기 일부의 실행 동안 생성됨; 및
    상기 적어도 하나의 스택으로부터 판독된 상기 제2 데이터 요소를 상기 오프체인 기능에 제공하는 것 - 상기 기능은 적어도 상기 제2 데이터 요소에 기초하여 추가 결과를 생성하도록 구성됨 - 을 포함하는 방법.
  7. 제1항에 있어서, 상기 제1 트랜잭션은 각각 각자의 잠금 스크립트를 포함하는 복수의 출력을 포함하고, 상기 복수의 출력의 각각은 각자의 출력 주소에 의해 참조되고, 상기 제1 데이터 요소는 상기 출력 중 제2의 것을 참조하는 출력 주소이고, 상기 제1 출력은 상기 제2 트랜잭션의 상기 잠금 해제 스크립트 내에서 참조되며;
    상기 오프체인 기능은, 상기 작업코드의 상기 제1 인스턴스를 호출할 때, 상기 제2 출력의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성되는 방법.
  8. 제7항에 있어서, 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트를 실행하는 것을 포함하며, 상기 실행은 상기 제2 출력의 상기 출력 주소를 상기 스택으로 푸시하는 것을 포함하는 방법.
  9. 제8항에 있어서, 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트의 상기 실행 전에, 상기 잠금 해제 스크립트 및 상기 제1 잠금 스크립트를 스크립트 템플릿에 복사하는 것을 포함하며, 상기 스크립트 템플릿은 실행될(to-be-executed) 스크립트를 포함하는 방법.
  10. 제9항에 있어서, 상기 작업코드의 상기 제1 인스턴스를 호출할 때, 상기 제2 출력의 상기 잠금 스크립트를 상기 스크립트 템플릿의 시작 부분으로 복사하는 것을 포함하는 방법.
  11. 제7항 내지 제10항 중 어느 한 항에 있어서, 상기 제2 출력의 상기 잠금 스크립트를 실행하는 것을 포함하는 방법.
  12. 제11항에 있어서, 상기 제2 출력의 상기 잠금 스크립트는 상기 작업코드의 제2 인스턴스 전에 실행될 스크립트의 일부를 포함하고, 상기 일부는 상기 출력 중 제3의 것을 참조하는 출력 주소를 포함하고; 상기 제2 출력의 상기 잠금 스크립트의 상기 실행은:
    상기 제3 출력의 상기 출력 주소를 상기 스택으로 푸시하는 것을 포함하고,
    상기 기능은, 상기 작업코드의 상기 제2 인스턴스를 호출할 때, 상기 제3 출력의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성되는 방법.
  13. 제12항에 있어서, 상기 작업코드의 상기 제2 인스턴스를 호출할 때, 상기 제3 출력의 상기 잠금 스크립트를 상기 스크립트 템플릿의 상기 시작 부분으로 복사하는 것을 포함하는 방법.
  14. 제12항 또는 제13항에 있어서, 상기 제1, 제2 및 제3 출력은 상기 복수의 출력 내에서 순차적으로 나열된 방법.
  15. 제12항 또는 제13항에 있어서, 상기 제1, 제2 및 제3 출력은 상기 복수의 출력 내에서 순차적으로 나열되지 않은 방법.
  16. 제7항 내지 제15항 중 어느 한 항에 있어서,
    참조된 출력의 잠금 스크립트를 실행하고 각자의 출력의 출력 주소를 상기 오프체인 스택으로 푸시하는 동작을 수행하는 것을 포함하고; 상기 기능은, 상기 각자의 출력의 상기 작업코드의 상기 각자의 인스턴스를 호출할 때, 상기 출력 중 다음 것의 잠금 스크립트를 참조하기 위하여 상기 스택으로부터 판독된 상기 출력 주소를 사용하도록 구성되고;
    상기 동작은 다른 잠금 스크립트에 의해 참조된 상기 복수의 출력의 각 잠금 스크립트가 실행될 때까지 반복되는 방법.
  17. 제16항에 있어서,
    상기 잠금 스크립트 중 하나가 실행될 때마다, 해당 잠금 스크립트를 상기 스크립트 템플릿의 상기 시작 부분으로 복사하는 것을 포함하는 방법.
  18. 제16항 또는 제17항에 있어서, 상기 스크립트 템플릿을 추가 트랜잭션에 대한 잠금 스크립트로 사용하는 것을 포함하고, 상기 추가 트랜잭션에 대한 상기 잠금 스크립트는 상기 작업코드의 인스턴스를 포함하지 않는 방법.
  19. 제7항 내지 제18항 중 어느 한 항에 있어서, 상기 잠금 스크립트 중 하나 이상은 각자의 기능을 포함하고, 해당 각자의 잠금 스크립트의 상기 실행은 상기 각자의 기능을 실행하는 것을 포함하는 방법.
  20. 제19항에 있어서, 상기 각자의 기능은 상기 각자의 기능이 실행될 때 상기 오프체인 스택 상의 데이터에 동작하도록 구성되는 방법.
  21. 제7항 내지 제20항 중 어느 한 항에 있어서, 상기 제1 잠금 스크립트가 상기 작업코드의 인스턴스를 포함하면, 상기 제1 트랜잭션으로부터 모든 잠금 스크립트를 추출하고 각자의 출력 주소로 색인하는(index) 것을 포함하는 방법.
  22. 제7항 내지 제21항 중 어느 한 항에 있어서, 각 잠금 스크립트 내의 각 출력 주소는 각자의 데이터 요소이고, 상기 방법은 상기 각자의 데이터 요소를 출력 주소로 번역하는 것을 포함하는 방법.
  23. 전술한 청구항 중 어느 한 항에 있어서, 상기 트랜잭션을 상기 실행하는 것은 상기 블록체인에 기록하기 위한 트랜잭션을 유효성 검증하는(validate) 것을 포함하고, 상기 방법은 상기 트랜잭션을 유효성 검증하는 프로토콜을 적용하는 것을 포함하고,
    상기 프로토콜은:
    종료 작업코드가 상기 트랜잭션의 출력 스크립트에 포함될 수 있도록 허용하고-상기 종료 작업코드는, 상기 노드에 의해 실행될 때, a) 상기 출력 스크립트의 실행을 종료하고, b) 상기 출력 스크립트에 상기 종료 작업코드가 포함된 것에만 기초하여 트랜잭션을 무효화하지 않도록 구성됨; 및
    상기 종료 작업코드의 임의의 인스턴스가 상기 트랜잭션의 입력 스크립트에 포함되는 것을 허용하지 않도록 구성되며, 상기 허용하지 않는 것은 상기 종료 작업코드의 임의의 인스턴스가 상기 입력 스크립트에 포함되는 경우 상기 노드가 적어도 상기 트랜잭션을 무효화하는 것을 포함하는 방법.
  24. 제23항에 있어서, 상기 출력 스크립트는 상기 트랜잭션에 포함된 잠금 스크립트이고 상기 입력 스크립트는 이전 트랜잭션의 잠금 스크립트를 잠금 해제하기 위하여 상기 트랜잭션에 포함된 잠금 해제 스크립트인 방법.
  25. 제23항 또는 제24항에 있어서, 상기 프로토콜은:
    상기 출력 스크립트가 적어도 하나의 데이터 요소가 선행하는 상기 종료 작업코드의 인스턴스의 조합을 포함하는 경우, 상기 적어도 하나의 데이터 요소 및 상기 종료 작업코드의 인스턴스의 조합에 기초하여 상기 트랜잭션을 무효화하도록 구성되는 방법.
  26. 제25항에 있어서, 상기 적어도 하나의 데이터 요소는:
    0(영) 작업코드; 또는
    상기 트랜잭션의 증명할 수 있는 지출 불가능한 출력을 생성하기 위한, 0 값의 표현
    중 하나 또는 모두를 포함하는 방법.
  27. 제23항 내지 제26항 중 어느 한 항에 있어서, 상기 프로토콜은:
    임의의 작업코드가 상기 트랜잭션의 상기 입력 스크립트에 포함되는 것을 허용하지 않도록 구성되며, 상기 허용하지 않는 것은 임의의 작업코드가 상기 입력 스크립트에 포함되는 경우 상기 노드가 적어도 상기 트랜잭션을 무효화하는 것을 포함하는 방법.
  28. 제23항 내지 제27항 중 어느 한 항에 있어서, 상기 유효성 검증하는 것은:
    상기 출력 스크립트와 상기 입력 스크립트의 조합을, 상기 노드에 의해, 실행한 후 비어 있지 않고 0이 아닌 결과(a non-empty and a non-zero result)를 가져오는 것;
    상기 노드가 상기 블록체인에 기록하기 위해 상기 네트워크의 하나 이상의 노드로 상기 트랜잭션을 전달하는 것; 및
    상기 노드가 상기 블록체인에 상기 트랜잭션을 기록하는 것
    중 적어도 하나를 포함하는 방법.
  29. 전술한 청구항 중 어느 한 항에 있어서, 상기 작업코드의 상기 제1 인스턴스는, 실행될 때, 상기 제1 트랜잭션을 유효한 것으로 표시하고, 상기 작업코드의 상기 제1 인스턴스의 상기 실행 이후에 그리고 상기 적어도 하나의 스택이 클리어되기(cleared) 전에 상기 적어도 하나의 스택에 숫자를 남기도록 구성되고, 상기 제1 데이터 요소는 숫자인 방법.
  30. 전술한 청구항 중 어느 한 항에 있어서, 상기 작업코드의 상기 제1 인스턴스는 OP_RETURN 작업코드인 방법.
  31. 제2항 또는 제2항에 종속된 어느 한 항에 있어서, 상기 오프체인 스택은 트랜잭션의 유효성 검증 목적으로 사용되지 않는 스택인 방법.
  32. 컴퓨터 판독 가능 스토리지 상에 구현되며, 상기 블록체인 네트워크의 상기 노드 상에서 실행될 때, 전술한 청구항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  33. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고,
    상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상에서 실행될 때 제1항 내지 제31항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨팅 장비.
KR1020217042547A 2019-05-24 2020-04-22 오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용 KR20220013406A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1907346.9 2019-05-24
GBGB1907346.9A GB201907346D0 (en) 2019-05-24 2019-05-24 Using blockchain transactions to provide off-chain functionality
PCT/IB2020/053816 WO2020240298A1 (en) 2019-05-24 2020-04-22 Using blockchain transactions to provide off-chain functionality

Publications (1)

Publication Number Publication Date
KR20220013406A true KR20220013406A (ko) 2022-02-04

Family

ID=67385447

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217042547A KR20220013406A (ko) 2019-05-24 2020-04-22 오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용

Country Status (8)

Country Link
US (1) US20220269810A1 (ko)
EP (1) EP3963498A1 (ko)
JP (1) JP2022534196A (ko)
KR (1) KR20220013406A (ko)
CN (1) CN114175036A (ko)
GB (1) GB201907346D0 (ko)
SG (1) SG11202111436TA (ko)
WO (1) WO2020240298A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102544008B1 (ko) * 2022-11-30 2023-06-15 주식회사 엔터프라이즈블록체인 복수의 어그리게이터들(aggregators)을 관리하는 어그리게이터 매니저를 포함하는 장치 및 그 동작 방법

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201913143D0 (en) * 2019-09-12 2019-10-30 Nchain Holdings Ltd Running a program from a blockchain
GB2594684A (en) 2020-02-19 2021-11-10 Nchain Holdings Ltd Layered network
GB2592211A (en) * 2020-02-19 2021-08-25 Nchain Holdings Ltd Adapting connections of a layered network
GB202108384D0 (en) * 2021-06-11 2021-07-28 Nchain Licensing Ag A computer implemented method and system
GB2618052A (en) * 2021-12-07 2023-11-01 Nchain Licensing Ag Blockchain script engine
US11907677B1 (en) * 2022-03-02 2024-02-20 Arash Borhany Immutable universal language assistive translation and interpretation system that verifies and validates translations and interpretations by smart contract and blockchain technology

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11238450B2 (en) * 2016-12-21 2022-02-01 Nchain Licensing Ag Computer-implemented systems and methods to enable complex functionality on a blockchain while preserving security-based restrictions on script size and opcode limits

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102544008B1 (ko) * 2022-11-30 2023-06-15 주식회사 엔터프라이즈블록체인 복수의 어그리게이터들(aggregators)을 관리하는 어그리게이터 매니저를 포함하는 장치 및 그 동작 방법
WO2024117668A1 (ko) * 2022-11-30 2024-06-06 주식회사 엔터프라이즈블록체인 복수의 어그리게이터들(aggregators)을 관리하는 어그리게이터 매니저를 포함하는 장치 및 그 동작 방법

Also Published As

Publication number Publication date
JP2022534196A (ja) 2022-07-28
US20220269810A1 (en) 2022-08-25
WO2020240298A1 (en) 2020-12-03
GB201907346D0 (en) 2019-07-10
EP3963498A1 (en) 2022-03-09
SG11202111436TA (en) 2021-12-30
CN114175036A (zh) 2022-03-11

Similar Documents

Publication Publication Date Title
KR20220013406A (ko) 오프체인 기능을 제공하기 위한 블록체인 트랜잭션 사용
US12045830B2 (en) Protocol for validating blockchain transactions
US20220300257A1 (en) In-Script Functions Within a Blockchain Transaction
KR20220067549A (ko) 시간 잠금 블록체인 트랜잭션 및 관련 블록체인 기술
JP2023543728A (ja) コンメンサルトークンシステム
JP2023504067A (ja) ブロックチェーンを用いたプロバブリー・フェアー・ゲーム
CN116113921A (zh) 区块链上的伪随机选择
US20220337437A1 (en) Blockchain transactions including portions of code in different languages for complex validation
WO2021053425A1 (en) Multi-criteria blockchain protocol
US20240291678A1 (en) Multi-level blockchain
US20230421383A1 (en) Node versioning
CN117751550A (zh) 分层共识
CN117136527A (zh) 用于区块链实现的数据应用程序中的签名验证的改进方法和系统
CN118044151A (zh) 传播锁定脚本
CN115699676A (zh) 自定义事务脚本
CN114391146A (zh) 在区块链上存储程序
CN118355627A (zh) 区块链脚本引擎
TW202318444A (zh) 對區塊鏈交易施行條件之技術(二)