KR102609711B1 - 블록체인을 사용한 동시적 상태 머신 프로세싱 - Google Patents

블록체인을 사용한 동시적 상태 머신 프로세싱 Download PDF

Info

Publication number
KR102609711B1
KR102609711B1 KR1020207006774A KR20207006774A KR102609711B1 KR 102609711 B1 KR102609711 B1 KR 102609711B1 KR 1020207006774 A KR1020207006774 A KR 1020207006774A KR 20207006774 A KR20207006774 A KR 20207006774A KR 102609711 B1 KR102609711 B1 KR 102609711B1
Authority
KR
South Korea
Prior art keywords
transaction
script
unlocking
state
output
Prior art date
Application number
KR1020207006774A
Other languages
English (en)
Other versions
KR20200044014A (ko
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
Priority claimed from GBGB1713790.2A external-priority patent/GB201713790D0/en
Priority claimed from GBGB1713805.8A external-priority patent/GB201713805D0/en
Priority claimed from GBGB1713794.4A external-priority patent/GB201713794D0/en
Application filed by 엔체인 홀딩스 리미티드 filed Critical 엔체인 홀딩스 리미티드
Publication of KR20200044014A publication Critical patent/KR20200044014A/ko
Application granted granted Critical
Publication of KR102609711B1 publication Critical patent/KR102609711B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/02Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/04Payment circuits
    • G06Q20/06Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
    • G06Q20/065Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/30Payment architectures, schemes or protocols characterised by the use of specific devices or networks
    • G06Q20/36Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3827Use of message hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/405Establishing or using transaction specific rules
    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q2220/00Business processing using cryptography
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • Finance (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • General Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Economics (AREA)
  • Power Engineering (AREA)
  • Marketing (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Tourism & Hospitality (AREA)
  • Development Economics (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

신뢰할 수 없는 결정론적 상태 머신은 블록체인 인프라를 사용하여 구현될 수 있고 상태 머신은 하나보다 더 많은 블록체인 트랜잭션 위에서 동시에 실행될 수 있다. 트랜잭션은 비트코인 블록체인 원장에서 행해질 수 있다. 이전 트랜잭션 출력을 참조하는 트랜잭션 입력을 포함하도록 잠금 해제용 트랜잭션을 제한하는 잠금 해제용 트랜잭션 제약이 결정된다. 상환 가능한 트랜잭션은, 잠금 해제용 트랜잭션 제약을 포함하는 트랜잭션 잠금용 스크립트 및 금액을 포함하는 트랜잭션 출력을 포함하도록 생성되는데, 금액을 잠금 해제하는 것은 잠금 해제용 트랜잭션 제약을 충족하는 잠금 해제용 트랜잭션의 적어도 하나의 잠금 해제용 스크립트의 실행을 조건으로 한다. 상환 가능한 트랜잭션은 블록체인 네트워크의 노드에서 유효성이 확인되게 된다.

Description

블록체인을 사용한 동시적 상태 머신 프로세싱
본 발명은 일반적으로 블록체인 트랜잭션 프로세싱에 따른 컴퓨터 구현 방법에 관한 것으로, 더 상세하게는, 신뢰할 수 없고(trustless), 결정론적이며(deterministic), 동시적인 상태 머신을 비롯한, 블록체인 트랜잭션 프로세싱의 구조 내에서 상태 머신을 구현하는 것에 관한 것이다. 본 발명은 또한, 블록체인 네트워크를 통해 수행되는 전자적 양도(electronic transfer)와 관련하여 보안을 시행하기 위해 암호화(cryptographic) 및 수학 기법을 활용한다. 본 발명은, 스마트 계약 트랜잭션에서 프로세싱 및 거래하고 그러한 스마트 계약 트랜잭션을 사용하여 상태 머신을 구현하는 방법 및 장치에서의 사용에 특히 적합하지만, 그러나 이들로 제한되지는 않는다.
본 문서에서, 용어 "블록체인"은, 여러 가지 타입의 전자 컴퓨터 기반의 분산 원장(distributed ledger) 중 임의의 것을 지칭할 수도 있다. 이들은 합의 기반의 블록체인 및 트랜잭션 체인 기술, 허가 및 비허가 원장, 공유 원장 및 이들의 변형을 포함한다. 다른 블록체인 구현이 제안되고 개발되었지만, 블록체인 기술의 가장 널리 알려진 애플리케이션은 비트코인 원장(Bitcoin ledger)이다. "비트코인"의 예가 편의성 및 예시의 목적을 위해 본원에서 설명되는 기술의 유용한 애플리케이션으로 지칭될 수도 있지만, 비트코인은, 본 개시에서 설명되는 기술이 적용될 수도 있는 많은 애플리케이션 중 단지 하나이다. 그러나, 본 발명은 비트코인 블록체인과 함께 사용되는 것으로 제한되지 않으며; 비상업적 애플리케이션을 비롯한 대안적인 블록체인 구현 및 프로토콜도 또한 본 발명의 범위에 속한다는 것을 유의해야 한다. 예를 들면, 본 개시 내에서 설명되는 기술은, 암호 화폐의 교환이 발생하는지에 관계없이, 트랜잭션 내에서 어떤 제약(constraint)이 인코딩될 수 있는지에 관해 비트코인과 유사한 제한 사항을 갖는 블록체인 구현을 활용하는 것에 대한 이점을 제공할 것이다.
블록체인은, 결국에는 트랜잭션 및 다른 정보로 구성될 수도 있는 블록으로 구성되는 컴퓨터 기반의 탈집중화된(decentralised) 분산 시스템으로서 구현되는 피어 투 피어(peer-to-peer) 전자 원장이다. 몇몇 예에서, "블록체인 트랜잭션"은 데이터 및 조건의 세트를 포함하는 필드 값의 구조화된 콜렉션(collection)을 인코딩하는 입력 메시지를 지칭하는데, 필드의 세트가 블록체인 데이터 구조에 기록되기 위해서는, 조건의 세트의 이행이 필수이다. 블록체인 시스템 또는 블록체인 네트워크는 복수의 블록체인 노드 및 동작의 세트를 포함할 수도 있다. 블록체인 노드는 동작의 세트 내의 동작의 일부 또는 모두를 수행하도록 구성될 수도 있다. 다양한 블록체인 노드는, 노드 운영자에 의해 운영되는 컴퓨터 하드웨어, 컴퓨터 소프트웨어 또는 양자의 조합으로서 구현될 수도 있는데, 노드 운영자는 독립적이고 다른 노드 운영자에 관련되지 않을 수 있다. 블록체인 노드 각각은 블록체인 원장의 사본, 또는 그것의 일부를 유지할 수도 있다. 동작의 세트는, 트랜잭션을 생성하는 것, 트랜잭션을 전파하는 것, 블록체인 원장을 판독하는 것, 블록체인 원장을 평가하는 것, 블록체인 원장에 대한 제안된 추가를 위한 새로운 블록을 생성하는 것(채굴하는 것), 다른 블록체인 노드와 통신하는 것, 및 유저가 블록체인 자산을 관리할 월렛 기능(wallet function)을 제공하는 것을 포함할 수도 있다.
원장이 수정되는 때를 결정하는 단일의 블록체인 노드 또는 엔티티가 없다는 점에서, 블록체인 원장은 탈집중화될 수도 있다. 대신에, 블록체인 노드 각각은 블록체인 프로토콜의 규칙의 지식을 가지고 프로그래밍될 수도 있고 블록체인 원장 및 다른 블록체인 노드의 액션이 그들 규칙과 부합하는지를 검증할 수도 있다. 용어 "블록체인"은, 블록체인 원장이, 각각이 컴퓨터 메모리에서 데이터 구조로서 표현 가능하고, 컴퓨터 프로세스에 의해 판독 가능하고, 데이터 송신(data transmission)으로서 송신 가능한, 일련의 체인화된 블록을 포함한다는 사실을 지칭할 수도 있다. 블록은, 컴퓨터 메모리에서 데이터 구조로서 또한 표현 가능하고, 컴퓨터 프로세스에 의해 판독 가능하며 데이터 송신으로서 송신 가능한, 하나 이상의 트랜잭션을 포함할 수도 있다. 블록체인은, 블록체인에 공식적으로 추가되는 각각의 새로운 블록이 바로 직전의 블록에 대한 불변의 참조를 포함한다는 점에서 체인화될 수도 있는데, 그 바로 직전의 블록은 그것의 바로 이전의 블록에 대한 불변의 참조를 포함할 수도 있고, 계속 그런 식일 수도 있다.
블록체인 프로토콜의 규칙 중 하나는, 일단 블록이 블록체인에 추가되면, 그것은 변경될 수 없다는 것일 수도 있다; 즉, 그것은 불변이며 블록체인 원장의 가능한 유일한 수정은 새로운 블록의 추가일 수도 있다. 블록체인 노드가, 규칙으로서, 상기 사실을 가지고 프로그래밍될 수도 있기 때문에, 그들은 블록체인 원장의 그들의 사본 내의 블록을 수정하지 않을 것이고, 오로지 블록을 추가하기만 할 것이며, 심지어 그때에도, 제안된 블록이 블록체인 프로토콜을 준수하는 것을 보장하기 위해, 제안된 블록에 대한 검증 프로세스를 실행한 이후에만 블록을 추가할 것이다. 그러한 블록은 일단 원장에 추가되면 변경 불가능할 것이기 때문에, 블록 단위의 트랜잭션도 또한 변경 불가능할 수도 있다.
블록체인 노드가 트랜잭션을 생성할 때, 그것은 트랜잭션의 세부 사항을 포함하는 데이터 오브젝트를 생성할 수도 있고, 그것이 연결될 수 있는 다른 블록체인 노드에, 통상적으로 피어 투 피어 방식으로, 그것을 전파할 수도 있다. 몇몇 블록체인 노드는 "채굴자(miner)"로서 동작하며 하나 이상의 트랜잭션을 수집하고, 블록에 대응하는 데이터 구조를 형성하고, 블록에 놓이는 트랜잭션의 유효성을 확인하기(validate) 위해 약간의 계산을 수행하고, 퍼즐을 풀고, 퍼즐에 대한 해(solution)를 데이터 구조 안에 배치하고, 그 블록을 다른 블록체인 노드로 전파하려고 시도한다. 퍼즐은, 원장에서의 블록의 수 및 추가된 마지막 블록으로부터의 데이터와 같은, 블록체인 원장의 현재의 상태 및 트랜잭션의 데이터에 고유한 사소하지 않은 계산의 형태일 수도 있다.
퍼즐이 트랜잭션에 의존하게 하는 것에 의해, 악성 블록체인 노드(rogue blockchain node)는 미리 구성된 블록을 전파할 수 없을 수도 있다. 사소하지 않은 퍼즐을 풀게 하는 것에 의해, 악성 블록체인 노드는 블록체인 네트워크에 블록을 간단하게 삽입할(inject) 수 없을 수도 있지만, 그러나, 블록체인 노드가 노력을 기울였다는 것을 증명하기 위해 블록체인 노드가 어떤 중요한 계산 태스크(task)를 수행해야 한다는 것을 규정할 수도 있다(실제로, 어려운 문제에 대한 해를 나타내는 것은 "작업 증명(proof-of-work)"이다). 바람직하게는, 블록체인 프로토콜에서, 작업 증명은 사소하지 않지만, 그러나, 퍼즐이 풀렸고 작업이 완료되었다는 검증은 용이하다. 그것은, 원장에 추가할 새로운 블록을 제안하고 있는 블록체인 노드를 다른 블록체인 노드가 반드시 신뢰할 필요는 없다는 것을 의미한다. 다른 블록체인 노드에 의해 검증되면, 그 블록체인 노드는 새로운 블록을 블록체인 원장의 자신의 사본의 끝에 추가하고 새로운 블록을 다른 블록체인 노드로 전파할 수도 있다. 다른 블록체인 노드가 동일한 검증을 수행하기 때문에, 그들은 또한, 블록이 유효하고 블록체인 원장에 추가되어야 한다는 결론을 내릴 수도 있으며, 따라서, 그들은 블록체인 원장의 그들의 사본에 그것을 추가할 수도 있다. 제안된 새로운 블록이 유효하지 않다는 것을 블록체인 노드가 결정하면, 블록체인 노드는 블록체인 원장의 자신의 사본에 그것을 추가하지 않을 수도 있고 그것을 전파하지 않을 수도 있다. 블록체인에서의 유효성(validity)이 합의에 기반하기 때문에, 트랜잭션이 유효하다는 것을 대다수의 노드가 동의하면, 트랜잭션은 유효한 것으로 간주될 수도 있다.
블록체인 시스템은, 노드 소유자와 운영자가 다른 노드 소유자와 운영자를 반드시 신뢰하지는 않도록 동작할 수도 있다. 대신, 프로토콜은, 더 앞선(earlier) 블록을 수정하는 것, 대응하는 작업 증명 없이 새로운 블록을 제안하는 것, 또는 무효한 트랜잭션을 포함하는 것과 같은, 프로토콜에 의해 허용되지 않는 소정의 동작을 수행하는 것을 계산적으로 실행 불가능하게 만들 수도 있다. 다른 노드에 의해 눈에 띄지 않는 방식으로 블록체인 프로토콜에 의해 허용되지 않는 동작을 수행하는 것이 계산적으로 실행 불가능한 경우, 특정한 신뢰가 필요하지 않을 수도 있다.
블록체인에 기록되는 블록에 트랜잭션이 포함되기 위해서, (1) 채굴 블록체인 노드는 트랜잭션을 검증할 것이고, (2) 채굴 블록체인 노드는 그 트랜잭션을 포함한 블록을 전파하려고 시도할 것이고, 3) 다른 노드는 블록의 유효성 및 그 블록에서의 트랜잭션의 유효성을 검증할 것이다. 채굴 블록체인 노드가 그들 규칙을 염두에 두고 프로그래밍 또는 구성될 것이기 때문에, 채굴 블록체인 노드는, 검증에 실패한 트랜잭션을 블록에 포함하지 않을 가능성이 있을 것이고, 그러한 만큼, 블록은 다른 노드에서 수락되지 않을 것이고 채굴 노드는 어떠한 이익도 얻지 못할 것이다. 몇몇 블록체인 시스템에 대한 채굴의 하나의 그러한 이점은, 블록이 수락되면, 블록은 "분배(distribution)" 트랜잭션을 포함하도록 허용되는데, 이 경우, 몇몇 다른 엔티티로부터의 가치의 대응하는 감소에 대한 필요 없이 명시된 양의 가치가 그 노드의 운영자에게 할당된다. 이러한 방식으로, 성공적인 채굴자는 블록과 함께 생성되는 가치에 의해 보상받을 수도 있다. 또한, 하기에서 설명되는 바와 같이, 트랜잭션은 트랜잭션 수수료를 포함할 수 있는데, 트랜잭션 수수료는 채굴 블록체인 노드를 제어하는 채굴자에게도 또한 주어질 것이고 트랜잭션 수수료는 또한, 채굴자가 임의의 보상을 받기 위해서는, 트랜잭션이 유효한 것으로 검증 가능해야 한다는 것을 규정한다.
블록체인 네트워크에서의 트랜잭션은, 트랜잭션 가치, 트랜잭션 시간, 및/또는 다른 데이터 엘리먼트와 같은 다양한 데이터 엘리먼트를 포함한다. 탈집중화된 분산 원장 시스템에서, 원장은 공개적이고, 따라서, 누구나 원장을 보고 트랜잭션을 볼 수 있다. 블록체인 원장에는, 블록체인을 시작하고 어떤 단위의 가치를 그 최초 트랜잭션(genesis transaction)에게 돌리는 최초 트랜잭션이 존재할 수도 있다. 본원의 예에서, 설명의 목적을 위해, 가치의 단위는 암호 화폐이지만, 그러나 다른 변형도 가능하다.
최초 트랜잭션 및 분배 트랜잭션 이외의 트랜잭션은, 블록체인 원장 상의 하나 이상의 현존하는 트랜잭션의 가치를 "잠금 해제하는 것(unlocking)"을 수반하고, 그러한 트랜잭션이 블록체인 원장에 추가되면, 그것은, 결국에는, 양도될 수 있다. 각각의 양도되지 않은 트랜잭션(untransferred transaction)은, 공개적인 방식으로, 트랜잭션의 가치를 잠금 해제하기 위해 필요로 되는 요건을 명시한다. 간단한 요건은 "당신은 먼저 자신이 Alice(앨리스)임을 증명해야 하고, 그러면, 당신은 이것을 잠금을 해제할 수 있습니다."일 수도 있다. 그러면, Alice는 그 트랜잭션의 가치를 "잠금 해제"하는 새로운 트랜잭션을 생성할 수도 있는데, Alice의 새로운 트랜잭션은, 그것이 Alice로부터 유래하였고 그 이전 트랜잭션(previous transaction)에 대한 포인터를 갖는다는 것을 증명한다. 분배 트랜잭션의 경우, 트랜잭션 가치가 있지만 그러나 분배 트랜잭션은 이전 트랜잭션을 "잠금 해제"하지 않는다. 물론, 블록체인 네트워크에 의해 수락될 Alice의 트랜잭션의 경우, 그것은 이미 양도된 트랜잭션을 참조할 수 없으며 Alice가 그것을 생성하였다는 것을 실제로 증명해야 한다.
블록체인 프로토콜에 의해 따라서 블록체인 노드의 합의에 의해, 트랜잭션이 이미 양도된 이전 트랜잭션 출력을 가리키는 경우; 즉, 이전 트랜잭션에 대해, 원장은, 그 이전 트랜잭션 출력을 가리키는 유효한 현존하는 트랜잭션 입력을 포함하는 경우, 트랜잭션은 유효하지 않다. 임의의 침입자(interloper)가 이전의 UTXO에 의해 표현되는 가치를 "잠금 해제"하는 새로운 트랜잭션 입력을 생성하는 것을 방지하기 위해, 각각의 트랜잭션 출력은, 그러한 트랜잭션을 생성할 임의의 청구자에게 부과되는 요건을 나타내는 데이터를 포함하고, UTXO가 변경 불가능할 수도 있기 때문에, 그 데이터는 변경될 수 없다. 물론, 양도된 트랜잭션도 또한 변경 불가능할 수도 있다.
상기의 예에서, Alice는, 그녀가 잠금 해제할 능력을 단독으로 가졌던 이전 트랜잭션에서의 가치가 Bob(밥)에게 양도될 수 있도록, 즉, 이제, Bob만이 잠금 해제할 능력을 가지며 그에 의해 Bob만이 잠금 해제하는 새로운 양도되지 않은 트랜잭션이 존재하도록, 잠금 해제용 트랜잭션(unlocking transaction)을 생성했을 수도 있다. Alice가 생성한 잠금 해제용 트랜잭션은 다음의 요건에 대응하는 데이터를 포함할 수도 있다: "Bob의 개인 키를 알고 있다는 것을 증명할 충분한 정보를 제공할 수도 있으면, 누구라도 이 트랜잭션을 자유롭게 가리킬 수 있다 - 그에 의해 그것의 가치 모두를 잠금 해제할 수 있다." Bob이 신중하다고 가정하면, Bob은 그 트랜잭션을 잠금 해제하는 유효 트랜잭션을 생성할 수도 있는 유일한 사람일 것이다. 실제로, Bob은 그 가치를 소유하며, 그 가치를 잠금 해제할 수 있는 유일한 사람이다. 이것은, Bob이 블록체인 노드의 운영자 중 임의의 운영자를 신뢰해야 한다는 것 또는 트랜잭션을 생성할 능력을 가진 임의의 다른 당사자(party)를 신뢰해야 한다는 것을 규정하지는 않는다는 것을 유의한다. Bob이 신뢰할 필요가 있는 모든 것은, 불량 당사자(rogue party)가 대부분의 블록체인 노드를 완전히 차지할 수 없다는 것이다.
특정한 경우에, 하나의 트랜잭션은 이전에 양도되지 않은 하나의 트랜잭션을 완전히 잠금 해제하고 그 하나의 트랜잭션은 나중의 트랜잭션에 의해 완전히 양도될 수 있거나 또는 전혀 양도되지 않을 수 있다. 일반적인 경우에, 트랜잭션은 하나 이상의 입력 및 하나 이상의 출력을 가지는데, 각각의 입력은 이전 트랜잭션의 출력을 참조하고(그리고 그 출력은 상환 가능한 가치를 가지며), 각각의 출력은 상환 가능한 가치(미래의 트랜잭션의 입력에게 양도되거나/그 입력에 의해 참조될 때까지 양도되지 않은 상태로 유지됨)를 갖는다. 트랜잭션의 출력은, 트랜잭션이 완전히 또는 전혀 양도되지 않는다는 점에서, 상환 가능한 단위의 트랜잭션이다. 본원에서 설명되는 몇몇 예에서, 트랜잭션은 "양도되는(transferred)" 것으로 지칭되며, 트랜잭션이 다수의 트랜잭션 출력을 갖는 경우, 설명은, 전체보다는 더 적은 트랜잭션의 출력이 양도될 수도 있는 경우를 포괄할 수도 있다는 것이 이해되어야 한다. 트랜잭션 출력을 잠금 해제하는 것과는 대조적으로, "트랜잭션을 잠금 해제하는 것"을 언급하는 설명은, 단지 하나의 출력만을 갖는 트랜잭션의 출력이 양도되고 있는 경우를 포괄할 수 있다.
트랜잭션이 다수의 출력을 가질 수 있는 경우, 그 트랜잭션의 상이한 트랜잭션 출력은 상이한 시간에 양도될 수 있다. 트랜잭션이 생성되면, 그것의 출력은 양도되지 않은 것으로 간주될 수도 있다. 각각의 출력은, 나중의 트랜잭션의 입력에게 양도되거나 또는 양도되지 않은 상태로 유지된다. 이전 트랜잭션의 출력이 이미 양도된 이후 이전 트랜잭션의 출력을 잠금 해제하려고 시도하는 입력을 트랜잭션이 갖는 경우, 블록체인 노드는 그것을 무효한 트랜잭션으로서 거절할 것이다.
당사자인 Alice가 X의 가치가 있는 UTXO를 제어하고 그 트랜잭션 출력의 일부인 Y만을 잠금 해제하기를 원하는 경우, Alice는 다수의 출력, 즉, Bob에 의해서만 양도될 수 있는 가치 Y를 갖는 트랜잭션 출력인 출력과, Alice에 의해서만 양도될 수 있는 가치 X-Y를 갖는 트랜잭션 출력인 출력을 갖는 새로운 트랜잭션을 명시할 수 있다. 실제로, 원래의 트랜잭션 출력은 완전히 양도되지만, 그러나, Alice의 트랜잭션에 대한 "변경을 행하는" 새로운 트랜잭션 출력이 존재한다.
트랜잭션에 대한 입력의 수 및 그 트랜잭션의 출력의 수는 동일할 필요가 없다. 그러나, 유효 트랜잭션이 되기 위해서, 현재 트랜잭션의 출력에서 명시되는 가치의 합은, 현재 트랜잭션의 입력에게 양도될 수도 있는 이전 트랜잭션 출력의 가치의 합을 초과하지 않아야 하고, 몇몇 경우에는, 약간의 예외를 가지면서, 더 적을 것이다. 최초 트랜잭션 및 분배 트랜잭션의 경우, 출력의 가치의 합이 입력의 가치의 합 보다 더 클 수 있거나, 또는 어떠한 입력도 있을 필요가 전혀 없지만, 그러나, 정규 트랜잭션의 경우, 트랜잭션은, 자신의 출력의 가치의 합이 자신의 입력의 가치의 합을 초과하면, 무효할 것이다. 몇몇 트랜잭션의 경우, 자신의 출력의 가치의 합이 자신의 입력의 가치의 합보다 더 작을 수 있는데, 이 경우, 성공적인 채굴자는 차이에 대한 트랜잭션 수수료 트랜잭션을 추가하여, 이런 식으로 균형을 맞추고 채굴자가 트랜잭션을 프로세싱한 이유를 생성한다. 비트코인 프로토콜에서, 이것은 블록에 추가되며, 새로운 블록을 생성하기 위한 분배를 더한, 비트코인 블록에 포함되는 모든 다른 트랜잭션의 트랜잭션 수수료의 합(즉, 포함된 트랜잭션 모두의 입력 및 출력 모두의 차이의 합)과 동일한 상환 가능한 출력을 갖는 코인베이스(Coinbase) 트랜잭션이다.
트랜잭션의 각각의 출력은, 그 출력의 가치를 잠금 해제하기 위해 충족되어야 하는 제약을 포함한다. 몇몇 블록체인 프로토콜에서, 제약은, 그들 제약이 무엇인지를 정의하는 스크립트 커맨드 및 데이터를 명시하는 "잠금용 스크립트(locking script)"에 임베딩된다. 잠금용 스크립트는, 다른 액터가 트랜잭션 출력의 잠금용 스크립트를 "잠금 해제"할 수 없는 한, 다른 액터가 그 트랜잭션 출력에서 표현되는 가치를 "잠금 해제"할 수 없다는 점에서, 트랜잭션 출력에서 표현되는 가치에 대한 제한부담(encumbrance)으로서 작용한다.
잠금 해제용 트랜잭션에 대한 각각의 입력은 이전 트랜잭션의 출력을 잠금 해제한다. 잠금 해제용 트랜잭션 입력의 "잠금 해제용 스크립트(unlocking script)"는, 그 잠금 해제용 트랜잭션이 이전 트랜잭션의 그 출력을 잠금 해제하는지의 여부를 결정한다. 따라서, 유효 트랜잭션은 적어도 하나의 입력을 명시하며, 유효한 잠금 해제용 트랜잭션의 각각의 입력은, 이전 트랜잭션 출력(양도되고 있는 트랜잭션 출력)에 대한 포인터 및 잠금용 스크립트를 "잠금 해제"하는 잠금 해제용 스크립트를 포함한다. 대응하는 블록체인 프로토콜에 따라 동작하는 블록체인 노드는, 트랜잭션 입력을 검증하기 위해 잠금용 스크립트 및 잠금 해제용 스크립트를 함께 실행할 수도 있다. 특정한 시스템에서, 스크립트는 스택 기반이며 검증용 블록체인 노드(verifying blockchain node)는 빈 스택으로 시작할 수도 있고, 스택 상에 데이터 오브젝트를 남길 수도 있는 잠금 해제용 스크립트를 실행할 수도 있고, 그 다음, 스택 상의 데이터 오브젝트를 사용할 수도 있는 잠금용 스크립트를 실행할 수도 있다.
검증용 블록체인 노드가 잠금용 스크립트 및 잠금 해제용 스크립트를 조합하고 그 조합을 실행하는 경우, 실행 이후 결과는 "TRUE(참)" 또는 "FALSE(거짓)"일 수도 있다. 몇몇 경우에, 스크립트가 완전히 실행되기 이전에, 스크립트의 실행이 FALSE 결과를 가지고 종료된다. 예를 들면, 주어진 스크립트 실행을 위해, 유효한 스크립트 실행에서, 그 스크립트에서 발생하는 것 이외의 것에 무관하게, 항상 동일한 두 개의 값이 있다는 것을 가정한다. 그 스크립트의 실행 도중에, 그들 두 값 사이의 비교가 행해지고 그들이 동일하지 않으며, 그 비교 직후 스크립트의 실행은 중지되고 FALSE 결과를 반환할 수 있다. 스크립트의 나머지는 실행될 필요가 없다.
검증용 블록체인 노드가 잠금용 스크립트 및 잠금 해제용 스크립트를 조합하고, 그 조합을 실행하고, 결과가 TRUE이면(즉, 잠금 해제용 스크립트가 트랜잭션 출력을 잠금 해제하는 데 필요한 모든 것을 포함함), 검증용 블록체인 노드는 그 트랜잭션이 유효한지를 검증할 것이다(적절한 타임스탬프, 적절한 형식 지정(formatting), 이미 양도된 트랜잭션 출력을 가리키지 않음, 등등과 같은 다른 요건이 충족된다는 것을 가정함). 검증용 블록체인 노드가 트랜잭션이 유효한지를 검증하면, 검증용 블록체인 노드는 그것을 전파할 수도 있다. 다른 블록체인 노드는, 트랜잭션이 유효하다는 결론을 내리기 위해 동일한 계산을 수행할 수도 있다. 이러한 방식으로, UTXO만을 가리키는 입력을 가지며 그들 UTXO를 잠금 해제하는 잠금 해제용 스크립트를 갖는 유효 트랜잭션은 전파될 수도 있고, 결국에는, 결국 원장의 일부가 되는 블록의 일부가 될 수도 있다.
다른 한편으로는, 불량 노드가 무효한 트랜잭션을 전파하려고 시도하는 경우, 다른 노드는, 그것이 무효하다는 것을 발견할 수도 있고 그것을 전파하지 않을 수도 있다.
일단 트랜잭션이 유효하고 블록체인 안으로 수락되면, 그것의 콘텐츠는 변경될 수 없다. 그것은, 트랜잭션의 생성시, 잠금용 스크립트가 고정된다는 것을 의미한다. 그러나, 잠금 해제용 스크립트가 나중의 잠금 해제용 트랜잭션 내에 포함되고 나중의 잠금 해제용 트랜잭션이 생성될 때까지 생성될 필요가 없기 때문에, 잠금 해제용 스크립트는 그 때 반드시 고정되지는 않는다.
통상적인 경우, 검증하는 잠금 해제용 스크립트는, 누구나가 아니라, 이전 트랜잭션 출력을 잠금 해제하도록 인가받은 당사자에 의해서만 생성될 수 있다. 상기의 예에서와 같이, 잠금용 스크립트는 "Bob의 개인 키를 알고 있다는 것을 증명할 충분한 정보를 제공할 수 있으면, 모든 사람이 트랜잭션 출력을 자유롭게 가리킬 수 있고 - 그에 의해 그것의 언급된 가치 모두를 잠금 해제할 수 있다"는 것일 수도 있고, 잠금 해제용 스크립트는 "Bob이 그의 개인 키를 사용하여 트랜잭션에 서명하였고 여기에 결과: ABCCC가 있다"는 형태로 이루어질 수도 있다. 그 다음, 검증용 블록체인 노드는 그들 두 서술문(statement)을 프로세싱하고 TRUE 또는 FALSE의 결론에 도달할 수도 있다. 이 프로세스는, ABCCC가 유효한 서명인지를 검증하는 것이 용이하고, Bob(또는 Bob의 개인 키의 지식을 가진 다른 누군가)이 그러한 서명을 생성하는 것이 용이하며, Bob의 개인 키를 알지 못하는 상태에서 다른 누군가가 유효한 서명을 생성하는 것이 매우 어려운 경우, 잘 작동한다. 결과적으로, 신뢰할 수 없는 시스템에서 가치가 양도될 수 있다. Bob이 잠금 해제하려고 하는 트랜잭션의 작성자(originator)는 시스템을 신뢰하거나 또는 Bob을 신뢰할 필요가 없는데, 그 이유는, Bob의 개인 키를 먼저 알지 못하는 상태에서 블록체인 노드의 합의에 의해 수락될 유효하고 검증 가능한 결과를 형성하는 것이 암호적으로(cryptographically) 어렵기 때문이다.
블록체인 노드는, Bob이 트랜잭션에 서명했다는 것을 쉽게 검증할 수 있고 서명이 잠금용 스크립트의 유일한 요건인지를 검증할 수 있다. 물론, 다른 노드가 검증하는 곳을 검증하지 않으며 다른 노드가 검증하지 않는 곳을 검증할 수 있는 불량 노드가 있을 수도 있지만, 그러나, 불량 노드가 블록체인 네트워크 상에서 정상 거동되는(well-behaved) 노드를 압도할 수 없는 한, 불량 노드는 무효한 트랜잭션을 푸시하거나 또는 유효 트랜잭션이 전파되거나 또는 채굴되는 것을 막을 수 없을 것이다.
노드가 트랜잭션 입력(들)의 잠금 해제용 스크립트(들) 및 이전 트랜잭션 입력(들)의 대응하는 잠금용 스크립트(들)를 실행하고 있고 그들의 각각을 TRUE로 평가하며, 해당되는 경우, 다른 유효성 확인 조건(validation condition)이 충족되는 경우, 노드가 해당되는 한 트랜잭션은 유효하다. 그 다음, 그 노드는 유효성이 확인된 트랜잭션을 다른 네트워크 노드로 전파할 것이고, 그 결과, 채굴자 노드는 트랜잭션을 블록에 포함할 것을 선택할 수 있다. 따라서, 트랜잭션을 블록체인에 기록되기 위해서, 트랜잭션은, (1) 트랜잭션을 수신하는 노드에 의해 유효성이 확인되어야 하고, (2) 네트워크의 다른 노드로 (그러나 단지 트랜잭션이 유효성이 확인되는 경우에만) 릴레이되어야 하고, (3) 채굴자에 의해 구축되는 새로운 블록에 추가되어야 하고, (4) 제안된 블록의 일부로서 전파되어야 하고, 그리고 (5) 노드의 합의에 의해 과거 트랜잭션의 공개 원장에 대한 추가로서 그 제안된 블록을 수락되게 해야 한다.
충분한 수의 블록이 블록체인에 추가되어 트랜잭션을 실제로 비가역적으로 만드는 경우, 트랜잭션은 확인된 것으로 간주될 수도 있다. 트랜잭션이 불변이기 때문에, 블록체인 프로토콜은 트랜잭션의 일방적 파기(unilateral reversal)를 차단할 수 있다. 물론, Alice가 가치 X를 Bob에게 양도하고 Alice가 그 가치 X를 다시 원하는 경우, 그녀는 Bob이 동의하면 그것을 얻을 수 있는데, 이 경우, 가치 X에 대한Alice로부터 Bob으로의 트랜잭션(Alice-to-Bob-for-X transaction)은 파기되거나 또는 취소되는 것이 아니라, Bob이 개시하는 새로운 트랜잭션인 가치 X에 대한 Bob으로부터 Alice로의 트랜잭션(Bob-to-Alice-for-X transaction)이 존재한다.
일단 트랜잭션이 블록에 포함되면, 트랜잭션은 불변인 것으로 간주되고, 이단 블록이 블록체인에 커밋되면(committed), 블록은 불변인 것으로 간주된다. 블록체인 내의 포크(fork)가 존재하는 시간의 짧은 기간이 있을 수도 있고 블록체인을 롤백할 어떤 능력이 있지만, 그러나 일반적으로, 더 많은 시간이 지날수록, 임의의 롤백이 가능할 가능성이 더 줄어든다. 본원에서, 달리 지시되지 않는 한, 트랜잭션 및 블록은, 블록체인에 완전히 커밋된 이후, 불변인 것이 가정된다.
불변성을 보장하는 하나의 방법은, 암호화 기술의 사용을 통하는 것이다. 예를 들면, 몇몇 데이터 시퀀스를 그들의 입력으로서 취하고 그 입력 데이터 시퀀스에 어떤 방식으로 대응하는 출력 데이터 시퀀스를 제공하는, 해시(hash) 및 디지털 서명과 같은 암호화 동작(cryptographic operation)이 존재한다. 동작은, 주어진 암호화 입력(예를 들면, 트랜잭션 또는 블록)으로부터 생성된 주어진 암호화 출력(예를 들면, 해시 또는 디지털 서명)에 대해, 동일한 암호화 출력으로 나타나는 상이한 암호화 입력을 발견하기 위해 이용 가능한 컴퓨팅 리소스를 사용하는 것이 계산적으로 실행 불가능하거나 또는 불가능하도록 하는 그러한 것일 수도 있다. 결과적으로, 검증자(verifier)는, 암호화 입력이 암호화 출력과 일치하는 경우, 암호화 출력을 생성하기 위해 사용된 것은, 어떤 다른 수정된 암호화 입력이 아니라, 암호화 입력이다는 것을 가정할 수 있다.
각각의 노드가 서로의 노드를 신뢰할 필요가 없는 블록체인 네트워크에서, 트랜잭션은 그렇게 검증될 수도 있고 블록은 그렇게 검증될 수도 있으며, 검증 불가능한 트랜잭션 및 블록은 무시될 수도 있거나 또는 사용되지 않을 수도 있고, 트랜잭션 및 블록은 실질적으로 불변인 것으로 간주될 수도 있으며, 이것은, 해시 또는 디지털 서명이 트랜잭션 또는 블록에 올바르게 대응하는 경우, 트랜잭션 또는 블록이 그 원래의 것으로부터 수정되지 않았다는 가정의 결과일 수도 있다.
몇몇 블록체인 노드는 전체 원장을 저장할 수도 있고, 반면, 다른 것은 미지출 트랜잭션 출력(unspent transaction output; UTXO; 예를 들면, 비트코인 원장의 경우)만을 저장할 수도 있다. UTXO는 상환 가능한 가치에 대응하고, 바람직하게는, 각각의 UTXO는, 검증 가능한 잠금 해제용 스크립트가 그 가치의 "소유자" 이외의 누군가에 의해 쉽게 생성될 수 없는 잠금용 스크립트를 갖는다. 물론, 그것은 요건이 아니지만, 그러나, 검증 가능한 잠금 해제용 스크립트가 누군가에 의해 쉽게 생성될 수 있는 임의의 UTXO가, 처음 인식하는 사람에 의해서만 상환 가능한 자신의 가치를 다른 UTXO로 양도하는 트랜잭션에서 빠르게 양도될 수도 있다는 것이 예상될 것이다. 결과적으로, 블록체인은, 암호 화폐 가치, 더 일반적으로는, 디지털 자산의 제어를, 블록체인 시스템에서의 한 참가자로부터 블록체인 시스템에서의 다른 참가자에게 양도하기 위해 사용될 수 있고, 양도된 트랜잭션 출력 및 UTXO를 포함하는 트랜잭션의 레코드는 공개적인 불변의 원장에 기록될 수도 있어서, 디지털 자산의 흐름을 검증하는 것 및 그들 디지털 자산의 이중 잠금 해제를 방지하는 것을 용이하게 만들 수도 있다.
실시형태에서, "디지털 자산"은 사용할 권리와 관련되는 이진 데이터를 지칭한다. 디지털 자산의 예는, 비트코인(Bitcoin), 이더(ether) 및 라이트코인(Litecoin)을 포함한다. 본원에서 사용될 때, "디지털 자산"은 하나 이상의 디지털 자산을 지칭할 수도 있다. 예를 들면, 트랜잭션에는 다수의 입력을 가질 수도 있으며 그들 입력의 각각은 상이한 디지털 자산을 나타낼 수도 있다. 그 제어가 양도되는 디지털 자산은, 이 예에서, 다수의 디지털 자산의 콜렉션(collection)일 수도 있는데, 콜렉션 그 자체는 디지털 자산이다. 유사하게, 트랜잭션은, 예를 들면, 입력의 수와 출력의 수가 상이할 수도 있도록, 그들 다수의 입력을 세분 및/또는 결합하여 하나 이상의 출력을 생성할 수도 있다.
한 실시형태에서, 암호 화폐는 토큰 기반의 암호 화폐이며, 여기서 각각의 토큰은 자산의 지분(share)(예를 들면, 회사의 주식)을 나타내고 단일의 트랜잭션은 다수의 타입의 토큰을 수반한다(예를 들면, 하나 이상의 상이한 회사의 주식을 수반함). 예컨대 비트코인을 갖는 몇몇 실시형태에서, 디지털 자산은, 예를 들면, 블록체인에서 식별되는 디지털 자산의 어떠한 식별자도 없지만, 대신, 블록체인 상에 기록되는 유효 트랜잭션을 생성하는 능력을 통해 디지털 자산의 제어가 입증되도록 토큰화 해제된다(untokenized). 그러나, 몇몇 블록체인 구현은, 예를 들면, 디지털 자산이 블록체인 상에 기록되는 정보를 사용하여 구체적으로 식별 가능할 수도 있도록 토큰화된 디지털 자산을 사용할 수도 있다는 것을 유의한다. 디지털 자산이, 몇몇 실시형태에서, 암호 화폐로서 사용될 수도 있지만, 실시형태에서, 디지털 자산은, 다른 상황에서 추가적으로 또는 대안적으로 사용 가능하다는 것이 고려된다. 본 발명은, 디지털 자산의 제어에 적용 가능하지만, 본질적으로 기술적인 것이며, 디지털 자산의 양도를 반드시 수반하지 않으면서 블록체인 데이터 구조를 활용하는 다른 상황에서 사용될 수 있다는 것을 유의한다.
트랜잭션은 잠금용 스크립트 및 잠금 해제용 스크립트를 포함하는데, 이들은 계산 오브젝트(computational object)를 형성할 수 있다. 일단 블록체인에 커밋되면, 트랜잭션은 불변으로 될 수도 있으며, 그 피쳐는 암호 화폐의 형태의 디지털 자산에 대한, 제어의 단지 불변의 양도를 넘어서는 용도를 가질 수도 있다. 가치를 양도하는 것에 추가하여, 불변의 트랜잭션은, 이벤트의 공증 기록(notary recording), 당사자의 권리 및 의무가 트랜잭션에 인코딩될 수도 있는 스마트 계약의 이행, 블록체인 프로토콜에 따른 스마트 계약의 조건에 따른 양도 가치와 같은, 다른 동작을 구현하기 위해 사용될 수 있다.
비트코인 플랫폼 상에서, 스크립트는 스택 기반의 스크립팅 언어를 사용하여 작성되지만, 그러나 다른 접근법이 대신 사용될 수도 있다. 몇몇 예에서, "스택 기반의 스크립팅 언어"는, 다양한 스택 기반의 또는 스택 지향 실행 모델 및 동작을 지원되는 프로그래밍 언어를 지칭한다. 스택 기반의 스크립팅 언어의 명령어를 실행할 때 프로세서(예컨대, 블록체인 노드의 일부)는 스택으로 칭해지는 선입선출 데이터 구조(first-in, last-out data structure)에 데이터를 저장한다. 프로세서는 스택 최상부(top)로 값을 푸시하거나 또는 스택의 최상부로부터 값을 팝핑할(pop) 수 있다. 스택에 대해 수행되는 다양한 동작은, 스택의 최상부로부터 값의 하나 이상을 푸시하거나 또는 팝핑하는 것, 그 값에 대해 연산을 수행하는 것, 스택 상의 엘리먼트 순서를 변경하는 것(이것은 두 번의 팝핑 동작과 두 번의 푸시에 상당할 수도 있는데, 첫 번째 푸시는 팝핑되는 첫 번째 아이템임)으로 나타날 수 있다. 예를 들면, OP_EQUAL 동작은, 스택으로부터 최상부의 두 개의 아이템을 팝핑하고, 그들을 비교하고, 결과(예를 들면, 동일한 경우 1 또는 동일하지 않은 경우 0)를 스택의 최상부로 푸시할 수도 있다. OP_PICK와 같은, 스택에 대해 수행되는 다른 동작은, 스택의 최상부 이외의 위치로부터 아이템이 선택되는 것을 허용할 수도 있다. 본 실시형태 중 일부에 의해 활용되는 몇몇 스크립팅 언어에서, 적어도 두 개의 스택: 메인 스택 및 대안적인 스택이 존재할 수도 있다. 스크립팅 언어의 몇몇 동작은 아이템을 하나의 스택의 최상부로부터 다른 스택의 최상부로 이동시킬 수 있다. 예를 들면, OP_TOALTSTACK 동작을 실행하는 것은, 프로세서로 하여금, 메인 스택의 최상부로부터 대안적인 스택의 최상부로 값을 이동시킨다. 스택 기반의 스크립팅 언어는, 몇몇 경우에, 엄격한 후입 선출(last-in-first-out; LIFO) 방식의 동작으로만 전적으로 제한되지 않을 수도 있다는 것을 유의해야 한다. 예를 들면, 스택 기반의 스크립팅 언어는, 스택에서의 n 번째 아이템을 최상부로 복사 또는 이동하는 동작(예를 들면, 비트코인에서, 각각, OP_PICK 및 OP_ROLL)을 지원할 수도 있다. 스택 기반의 스크립팅 언어로 작성되는 스크립트는, 벡터, 리스트, 또는 스택과 같은 임의의 적절한 데이터 구조를 사용하여 구현할 수 있는 논리적 스택 상으로 푸시될 수도 있다.
트랜잭션에 포함되는 스크립트를 사용하여, 계약의 조건이 스크립트 안으로 인코딩되는 스마트 계약이 구현될 수 있다. 한 예는, "Bob이 Carol(캐롤)에게 X를 지불하였고 Dave(데이브)가 트랜잭션에 대한 퍼미션을 허여받은 경우, Alice는 Bob에게 X의 절반을 지불할 것이다"는 형식을 가질 수도 있고, 그것은, (다른 조건 중에서도) Bob이 Carol에게 지불한 사전 트랜잭션(prior transaction) 및 Dave가 그의 퍼미션을 인코딩한 사전 트랜잭션이 존재하는 경우에만 TRUE로 평가될 잠금용 스크립트의 일부로서 인코딩될 수 있다. 본원에서 사용될 때, "사전 트랜잭션"은, 반드시, 잠금 해제용 트랜잭션이 잠금 해제하는 출력을 갖는 이전 트랜잭션이 아니라, 블록체인에 이미 추가된 임의의 트랜잭션을 지칭할 수도 있다. 실제로, 스마트 계약은 결과를 생성하기 위해 입력을 정의하는 규칙을 포함하는 머신 실행 가능 프로그램을 나타낼 수 있는데, 그 규칙은, 그 다음, 그들 결과에 의존하여 액션이 수행되게 할 수 있다.
가치의 양도에 추가하여, 트랜잭션은 또한 가치를 갖는 다른 오브젝트 또는 소유 이권(possessory interest)을 양도할 수도 있다. 예를 들면, 트랜잭션은 어떤 명목상의 암호 화폐 가치를 양도할 수도 있지만, 그러나 또한, "이 트랜잭션을 잠금 해제할 수도 있는 사람은 누구이든, 또한, 123 Marley Circle의 집과 토지의 정당한 소유자이다"는 표명(assertion)에 대응하는 데이터를 포함할 수도 있다. 소유 이권은, 같은 취지로, 공개 기록에서 가려질 수도 있다. 예를 들면, 트랜잭션은, "이 트랜잭션을 잠금 해제할 수도 있는 사람은 누구이든, 또한, Central Bank of Trust에서 보유되는 신탁 번호 12345에 따라 신탁으로 보관되어 있는 소정의 자산의 정당한 소유자이다"는 표명에 대응하는 데이터를 포함할 수도 있다. 본원에서, 이것은 토큰으로 지칭되며, 토큰은 블록체인을 통한 실세계 엔티티의 양도를 나타내고 영향을 미친다. 잠재적으로 민감한 또는 은밀한 아이템은, 식별 가능한 의미 또는 가치가 없는 토큰에 의해 표현될 수 있다. 따라서, 토큰은, 실세계 아이템이 블록체인으로부터 참조되는 것을 허용하는 식별자로서 역할을 할 수도 있다.
몇몇 실시형태에서, 특정한 엔티티와의 상호 작용은 스마트 계약의 특정한 단계에서 인코딩되고, 그렇지 않으면, 스마트 계약은 자동적으로 자체 실행되고 자체 시행될 수 있다. 몇몇 예에서, 자동 실행은, UTXO의 양도를 가능하게 하기 위해 수행되는 스마트 계약의 실행을 지칭한다. 그러한 예에서, UTXO를 잠금 해제할 수 있는 "임의의 엔티티"는, 어떤 비밀의 지식을 증명할 것을 요구받지 않으면서 잠금 해제용 스크립트를 생성할 수 있는 엔티티를 지칭한다는 것을 유의한다. 다시 말하면, 잠금 해제용 트랜잭션은, 데이터의 소스가 암호화 비밀(예를 들면, 개인 비대칭 키, 대칭 키, 등등)에 액세스하는 것을 검증하지 않고도 유효성이 확인될 수 있다. 또한, 그러한 예에서, 자체 시행은, 스마트 계약의 제약에 따라 잠금 해제용 트랜잭션의 유효성을 확인하는 블록체인 네트워크의 유효성 확인 노드의 결과로서 발생한다. 몇몇 예에서, UTXO를 "잠금 해제하는 것"은, UTXO를 참조하고 유효한 것으로 실행되는 잠금 해제용 트랜잭션 출력을 생성하는 것을 가리킨다. 그러한 트랜잭션 출력을 잠금 해제하는 것의 부작용은, 블록체인 네트워크가 잠금용 스크립트 및 잠금 해제용 스크립트를 프로세싱하여 새로운 트랜잭션인 잠금 해제용 트랜잭션의 유효성을 확인할 수도 있다는 것이다. 유효하면, 그 이전 트랜잭션 출력은 양도된 것으로 간주된다. 트랜잭션 출력에 소정의 가치를 포함하고 누군가가 그 출력을 잠금 해제할 수 있도록 하는 것에 의해, 당사자가 그러한 잠금 해제용 트랜잭션을 생성할 이유가 있으며, 따라서, 스마트 계약에서의 참가자에 의해서가 아니면, 다른 동작하는 블록체인 노드에 의해 스마트 계약의 단계가 수행될 가능성이 있다.
트랜잭션의 일부로서 기록되는 잠금용 스크립트 및 잠금 해제용 스크립트를 형성하는 스크립트는 불변일 수도 있고, 따라서, 잠금용 스크립트는 정상적으로 수정될 수 없거나 또는 미래의 트랜잭션의 일부를 참조할 수 없는데, 그 이유는, 트랜잭션이 고정되는 때에 그들이 알려지지 않을 수도 있기 때문이다. 트랜잭션 입력의 잠금 해제용 스크립트는, 이전 트랜잭션 이외의 블록체인 내의 사전 트랜잭션 또는 트랜잭션 입력에 의해 지시되는 이전 트랜잭션 출력의 일부를 참조할 수 있다. 이것은 트랜잭션이 사용될 수 있는 방법을 제한할 수도 있다.
이들 양태 중 하나 이상에서 블록체인 기술을 사용하기 위한 추가적인 기능성(functionality) 및 향상된 방법 및 시스템을 제공하는 것이 바람직하다. 따라서, 본 발명에 따르면, 첨부된 청구범위에 정의되는 바와 같은 시스템 및/또는 방법이 제공된다.
컴퓨터 구현 방법의 다양한 실시형태에서, 방법은 다음의 것을 포함한다: 제1 지출 트랜잭션 출력(spending transaction output)에 대한 제약의 제1 세트를 결정하는 것; 제2 지출 트랜잭션 출력에 대한 제약의 제2 세트를 결정하는 것; 제약의 제1 세트 및 제약의 제2 세트를 포함하는 적어도 하나의 초기 잠금용 스크립트; 및 적어도 하나의 지출 가능한 가치:를 포함하는 초기 트랜잭션을 생성하는 것 - 적어도 하나의 지출 가능한 가치를 지출하는 것은, 지출 트랜잭션이 제1 지출 트랜잭션 출력을 포함한다는 것의 유효성을 확인하는 것에 의해, 제약의 제1 세트가 적어도 부분적으로 충족되는 것; 및 지출 트랜잭션이 제2 지출 트랜잭션 출력을 포함한다는 것의 유효성을 확인하는 것에 의해, 제약의 제2 세트가 적어도 부분적으로 충족되는 것:을 조건으로 함 - ; 및 초기 트랜잭션으로 하여금, 블록체인 네트워크의 노드에서 유효성이 확인되게 하는 것.
제1 지출 트랜잭션 출력에서의 잠금용 스크립트는 제2 지출 트랜잭션 출력에서의 잠금용 스크립트의 복제물(duplicate)일 수도 있다.
제1 지출 트랜잭션 출력에서의 잠금용 스크립트는 제2 지출 트랜잭션 출력에서의 잠금용 스크립트와는 상이할 수도 있다.
제1 지출 트랜잭션 출력에서의 잠금용 스크립트는 적어도 하나의 초기 잠금용 스크립트의 적어도 일부를 포함할 수도 있다.
적어도 하나의 잠금용 초기 스크립트의 실행은, 적어도 하나의 초기 잠금용 스크립트의 복수의 부분으로부터 적어도 일부를 선택할 수도 있다.
지출 트랜잭션의 잠금 해제용 스크립트의 실행은, 적어도 하나의 초기 잠금용 스크립트가, 제1 지출 트랜잭션 출력 또는 제2 지출 트랜잭션 출력 중 하나에 대응하는 데이터를 수신하는 것으로 나타날 수도 있다.
데이터는 인덱스 값을 가질 수도 있다. 인덱스 값이 제1 인덱스 값이면, 적어도 하나의 초기 잠금용 스크립트의 실행은, 제약의 제1 세트가 충족되는지의 여부를 결정할 수도 있다. 인덱스 값이 제2 인덱스 값이면, 적어도 하나의 초기 잠금용 스크립트의 실행은, 제약의 제2 세트가 충족되는지의 여부를 결정할 수도 있다.
데이터에는 새로운 잠금용 스크립트를 포함할 수도 있다. 데이터를 수신하는 것의 결과로서, 제1 지출 트랜잭션 출력은 새로운 잠금용 스크립트를 포함하도록 제한될 수도 있다.
적어도 하나의 초기 잠금용 스크립트는 데이터 소스의 제약을 포함할 수도 있다.
방법은 제1 지출 트랜잭션 출력에 대한 지출 가능한 가치를 결정하는 것을 더 포함할 수도 있다.
초기 트랜잭션은 복수의 상태를 갖는 계약을 인코딩할 수도 있다.
지출 트랜잭션은 복수의 상태에 대응하는 복수의 입력 값을 포함할 수도 있다.
제약의 제1 세트는 제1 상태를 가지도록 제1 지출 트랜잭션 출력을 제한할 수도 있다. 제약의 제2 세트는 제2 상태를 가지도록 제2 지출 트랜잭션 출력을 제한한다.
또한, 이전 트랜잭션 출력을 참조하는 지출 트랜잭션 입력(spending transaction input)을 포함하도록 지출 트랜잭션을 제한하는 지출 트랜잭션 제약(spending transaction constraint)을 결정하는 것; 지출 가능한 금액(spendable amount)을 포함하는 지출 가능한 트랜잭션 출력; 및 지출 트랜잭션 제약을 포함하는 지출 가능한 트랜잭션 잠금용 스크립트:를 포함하는 지출 가능한 트랜잭션(spendable transaction)을 생성하는 것 - 지출 가능한 금액을 지출하는 것은, 지출 트랜잭션의 적어도 하나의 잠금 해제용 스크립트의 실행이 지출 트랜잭션 제약을 충족하는 것을 조건으로 함 - ; 및 지출 가능한 트랜잭션으로 하여금, 블록체인 네트워크의 노드에서 유효성이 확인되게 하는 것을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다.
지출 트랜잭션 제약은, 특정한 해시 값을 포함하도록 지출 트랜잭션 입력을 추가로 제한할 수도 있다.
특정한 해시 값은 이전 트랜잭션 출력을 참조하는 식별자를 인코딩할 수도 있다.
지출 트랜잭션 제약은, 지출 가능한 트랜잭션 잠금용 스크립트로부터 복제되는 스크립트 엘리먼트의 세트를 포함하도록 지출 트랜잭션의 잠금용 스크립트를 추가로 제한할 수도 있다.
지출 가능한 트랜잭션은 복수의 상태를 갖는 계약을 인코딩할 수도 있다.
방법은 지출 트랜잭션의 출력에 대한 지출 가능한 가치를 결정하는 것을 더 포함할 수도 있다.
지출 트랜잭션 제약은 이전 트랜잭션 출력으로부터의 특정한 잠금용 스크립트 엘리먼트를 포함할 수도 있다. 지출 트랜잭션 입력이 특정한 잠금용 스크립트 엘리먼트를 포함하는 것의 결과로서, 적어도 하나의 잠금 해제용 스크립트의 실행은 지출 트랜잭션 제약을 충족할 수도 있다.
특정한 잠금용 스크립트 엘리먼트는 특정한 엔티티의 암호화 키(cryptographic key)를 인코딩할 수도 있다.
지출 트랜잭션 제약은 제1 지출 트랜잭션 제약일 수도 있고; 방법은, 지출 트랜잭션을 추가로 제한할 제2 지출 트랜잭션 제약을 결정하는 것; 및 제2 지출 가능한 금액; 및 제2 지출 트랜잭션 제약을 포함하는 제2 지출 가능한 트랜잭션 잠금용 스크립트:를 포함하는 제2 지출 가능한 트랜잭션을 생성하는 것 - 제2 지출 가능한 금액을 지출하는 것은 또한, 적어도 하나의 잠금 해제용 스크립트의 실행이 제2 지출 트랜잭션 제약을 충족하는 것을 조건으로 할 수도 있음 - 을 더 포함할 수도 있다.
지출 가능한 트랜잭션 잠금용 스크립트는 제1 지출 가능한 트랜잭션 잠금용 스크립트일 수도 있고, 적어도 하나의 잠금 해제용 스크립트는 제1 잠금 해제용 스크립트 및 제2 잠금 해제용 스크립트를 포함할 수도 있다. 제1 지출 트랜잭션 제약은, 제1 지출 가능한 트랜잭션 잠금용 스크립트의 적어도 일부를 포함하도록 제1 잠금 해제용 스크립트를 제한할 수도 있다. 제2 지출 트랜잭션 제약은, 제2 지출 가능한 트랜잭션 잠금용 스크립트의 적어도 일부를 포함하도록 제2 잠금 해제용 스크립트를 제한할 수도 있다.
제1 지출 가능한 트랜잭션 잠금용 스크립트의 적어도 일부는 제1 엔티티와 관련되는 암호화 키를 포함할 수도 있다. 제2 지출 가능한 트랜잭션 잠금용 스크립트의 적어도 일부는 제1 엔티티와는 상이한 제2 엔티티와 관련되는 암호화 키를 포함할 수도 있다.
지출 트랜잭션 제약은, 지출 트랜잭션의 출력을 제한하기 위해 지출 트랜잭션을 추가로 제한할 수도 있다.
지출 트랜잭션 제약은 계약과는 별개의 다른 계약을 인코딩할 수도 있다. 지출 가능한 금액을 지출하는 것은, 다른 계약이 지출 트랜잭션의 출력에서 구현되는 것을 조건으로 할 수도 있다.
또한, 제1 상태에 있으며 허용 가능한 상태 전이의 세트를 갖는 상태 머신; 및 스크립트 엘리먼트의 세트:를 인코딩하는 블록체인 트랜잭션을 생성하는 것 - 스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 허용 가능한 상태 전이의 세트에 따라 상태 머신을 인코딩하게 하기 위해; 그리고 지출 트랜잭션에 대한 입력에 대한 제한(restriction)을 준수하게 하거나 또는 지출 트랜잭션의 출력에 대한 제한을 준수하게 하기 위해: 실행될 것임 - ; 및 블록체인 트랜잭션으로 하여금, 블록체인 네트워크 내의 노드에 의해 유효성이 확인되게 하는 것:을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다.
허용 가능한 상태 전이의 세트는, 별개의 블록체인 트랜잭션에서 독립적으로 그리고 동시에 구현될 수 있는 상태 전이를 포함할 수도 있다.
스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 지출 트랜잭션의 출력에 대한 제한을 준수하게 할 수도 있다. 출력에 대한 제한은: 지출 트랜잭션의 제1 출력에게, 허용 가능한 상태 전이의 세트에 따라 제1 출력에 대응하는 상태를 나타낼 것을; 그리고 지출 트랜잭션의 제2 출력에게, 허용 가능한 상태 전이의 세트에 따라 제2 출력에 대응하는 상태를 나타낼 것을 요구할 수도 있다.
제1 출력에 대응하는 상태와 제2 출력에 대응하는 상태는 동일할 수도 있다.
제1 출력에 대응하는 상태와 제2 출력에 대응하는 상태는 상이한 상태일 수도 있다.
스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 지출 트랜잭션의 입력에 대한 제한을 준수하게 할 수도 있다. 입력에 대한 제한은, 다른 블록체인 트랜잭션에서 인코딩되는 다른 상태 머신을 나타낼 것을 지출 트랜잭션에 대한 입력에게 요구할 수도 있다.
입력에 대한 제한은, 입력에게, 제1 상태에서 상태 머신을 참조할 것을 그리고 제1 상태와는 상이한 다른 상태에서 다른 상태 머신을 참조할 것을 요구할 수도 있다.
제1 상태로부터 제2 상태로의 제1 전이는 허용 가능한 상태 전이의 세트 내에 있을 수도 있다. 다른 상태로부터 제2 상태로의 제2 전이는 허용 가능한 상태 전이의 세트 내에 있을 수도 있다.
스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 지출 트랜잭션의 입력에 대한 제한을 준수하게 할 수도 있다. 입력에 대한 제한은 상태 머신을 진척시키기 위한 조건의 세트를 나타낼 수도 있다. 상태 머신을 진척시키기 위한 조건의 세트는 다른 상태 머신의 상태에 의존할 수도 있다.
다른 상태 머신은 다른 블록체인 트랜잭션에서 인코딩될 수도 있다. 다른 트랜잭션은 다른 상태 머신을 진척시키기 위한 조건의 세트를 인코딩할 수도 있다. 다른 상태 머신을 진척시키기 위한 다른 조건의 세트는 상태 머신의 상태에 의존할 수도 있다.
스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 지출 트랜잭션의 출력에 대한 제한을 준수하게 할 수도 있다. 출력에 대한 제한은, 지출 트랜잭션에게, 스마트 계약의 요소의 세트를 출력에 통합할 것을 요구할 수도 있다.
스마트 계약의 요소의 세트는 다른 블록체인 트랜잭션으로부터 획득될 수도 있다.
스크립트 엘리먼트의 세트는, 지출 트랜잭션으로 하여금, 지출 트랜잭션의 입력에 대한 제한 및 지출 트랜잭션의 출력에 대한 제한 둘 모두를 준수하게 할 수도 있다.
또한, 블록체인 네트워크 내의 노드에서, 제1 지출 트랜잭션의 제1 지출 트랜잭션 입력에 의해 지출될 수 있는 트랜잭션 출력을 갖는 블록체인 트랜잭션을 생성하는 것, 블록체인 트랜잭션 안으로, 상태 머신의 동작에 대응하는 지출 트랜잭션 스크립트 엘리먼트의 제1 세트를 포함하도록 제1 지출 트랜잭션을 제한할 스크립트 엘리먼트의 제1 세트를 삽입하는 것, 및 블록체인 트랜잭션 안으로, 블록체인 네트워크에 의해 동시에 그러나 독립적으로 프로세싱될 수 있는 별개의 블록체인 트랜잭션을 사용하여 구현될 수 있는 상태를 포함하는 허용된 상태 머신 상태 전이에 대응하는 지출 트랜잭션 스크립트 엘리먼트의 제2 세트를 제한할 스크립트 엘리먼트의 제2 세트를 삽입하는 것을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다. 블록체인 트랜잭션은 제1 잠금용 스크립트를 갖는 제1 출력을 포함할 수 있고, 제1 트랜잭션 출력 값은 제2 잠금용 스크립트 및 제2 트랜잭션 출력 값을 갖는 제2 출력을 포함할 수 있는데, 스크립트 엘리먼트의 제1 세트는 제1 잠금용 스크립트의 일부이다.
지출 트랜잭션은, 이전 트랜잭션 출력 잠금용 스크립트를 갖는 트랜잭션 검증자에 의해 실행될 때, 미리 결정된 검증 테스트를 충족할 그리고 노드로 하여금 지출 트랜잭션의 필드를 나타내는 값을, 이전 트랜잭션 출력 잠금용 스크립트를 실행할 때, 지출 트랜잭션 안으로, 스크립트 엘리먼트의 제1 세트 - 스크립트 엘리먼트의 제1 세트는 지출 트랜잭션의 제1 출력의 지출 트랜잭션 잠금용 스크립트의 일부를 형성하며 이전 트랜잭션 잠금용 스크립트에 의해 지시되는 요건과 부합하고 스크립트 엘리먼트의 제1 세트는 상태 머신의 동작에 대응함 - 를 삽입할 때, 그리고 지출 트랜잭션 안으로, 스크립트 엘리먼트의 제2 세트 - 스크립트 엘리먼트의 제2 세트는 지출 트랜잭션 잠금용 스크립트의 일부를 형성하고, 이전 트랜잭션 잠금용 스크립트에 의해 지시되는 요건과 부합하며, 블록체인 네트워크에 의해 동시에 그러나 독립적으로 프로세싱될 수 있는 별개의 블록체인 트랜잭션을 사용하여 구현될 수 있는 상태를 포함하는 허용된 상태 머신 상태 전이에 대응함 - 를 삽입할 때, 트랜잭션 검증자가 액세스 가능한 메모리에 적어도 저장하게 할 잠금 해제용 스크립트를 포함할 수 있다.
지출 트랜잭션은 입력 및 출력을 포함할 수 있는데, 입력은 이전 트랜잭션 출력을 참조하고, 지출 트랜잭션은, 이전 트랜잭션 출력의 이전 트랜잭션 잠금용 스크립트를 갖는 트랜잭션 검증자에 의해 실행될 때, 미리 결정된 검증 테스트를 충족할 잠금 해제용 스크립트를 포함하고, 잠금 해제용 스크립트는, 노드로 하여금, 지출 트랜잭션의 필드를 나타내는 값을, 잠금용 스크립트를 실행할 때, 그리고, 지출 트랜잭션에서 사용되는 지출 트랜잭션 입력 및/또는 지출 트랜잭션 출력의 수가 상태 머신 전이의 수에 대해 충분하도록 허용된 상태 머신 상태 전이에 기초하여, 추가적인 상태 머신에 대응하는 데이터를, 지출 트랜잭션 입력 및/또는 지출 트랜잭션 출력으로서, 지출 트랜잭션 안으로, 삽입할 때, 트랜잭션 검증자가 액세스 가능한 메모리에 적어도 저장하게 한다.
허용된 상태 머신 상태 전이는, 지출 트랜잭션에 대해, 제1 후속 상태에 대응하는 제1 트랜잭션 출력을 생성하는 것, 지출 트랜잭션에, 제1 트랜잭션 출력으로 하여금, 제1 트랜잭션 출력을 참조하는 제1 후속 트랜잭션에 대한 입력이 되게 하기에 충분한 제1 트랜잭션 출력에 대한 제1 트랜잭션 출력 값을 삽입하는 것, 지출 트랜잭션의 제1 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제3 세트 - 스크립트 엘리먼트의 제3 세트는 제1 후속 상태를 취하도록 제1 후속 트랜잭션을 제한하는 제1 잠금용 스크립트의 일부임 - 를 삽입하는 것, 지출 트랜잭션에 대해, 제2 후속 상태에 대응하는 제2 트랜잭션 출력을 생성하는 것, 지출 트랜잭션에, 제2 트랜잭션 출력으로 하여금, 제2 트랜잭션 출력을 참조하는 제2 후속 트랜잭션에 대한 입력이 되게 하기에 충분한 제2 트랜잭션 출력에 대한 제2 트랜잭션 출력 값을 삽입하는 것, 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제4 세트 - 스크립트 엘리먼트의 제4 세트는 제2 후속 상태를 취하도록 제2 후속 트랜잭션을 제한하는 제2 잠금용 스크립트의 일부임 - 를 삽입하는 것, 및 제1 트랜잭션 출력 또는 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제5 세트 - 스크립트 엘리먼트의 제5 세트는, 제1 후속 트랜잭션 및 제2 후속 트랜잭션이 별개의 것이어야 한다는 제약을 부과하는 제1 잠금용 스크립트 또는 제2 잠금용 스크립트의 일부임 - 를 삽입하는 것에 의해 하나의 초기 상태로부터 두 개의 후속 상태로의 포킹 전이(forking transition)를 포함할 수도 있다.
제1 잠금용 스크립트는 제1 상태를 가지도록 제1 후속 트랜잭션을 제한할 수 있고, 제2 잠금용 스크립트는 제2 상태를 가지도록 제2 후속 트랜잭션을 제한할 수 있다. 지출 트랜잭션은 세 개 이상의 상태의 포크(fork)에 대응하는 세 개 이상의 트랜잭션 출력 값을 포함할 수 있다. 지출 트랜잭션은 세 개 이상의 상태의 병합에 대응하는 세 개 이상의 트랜잭션 입력 값을 포함할 수 있다. 제1 잠금용 스크립트 및 제2 잠금용 스크립트는 동일한 상태를 가지도록 제1 후속 트랜잭션 및 제2 후속 트랜잭션을 제한할 수 있다.
일반적으로, 지출 트랜잭션은 N 개의 트랜잭션 입력 값 및 N 개의 트랜잭션 출력 값을 포함할 수도 있는데, N은 1, 2, 3 이상이다.
허용된 상태 머신 상태 전이는, 지출 트랜잭션 안으로, 제1 사전 상태에 대한 제1 트랜잭션 입력을 삽입하는 것, 지출 트랜잭션 안으로, 제2 사전 상태에 대한 제2 트랜잭션 입력을 삽입하는 것, 및 지출 트랜잭션 안으로, 상태 전이 매트릭스에 따른 제1 사전 상태 및 제2 사전 상태로부터의 허용된 전이인 병합 상태(merged state)를 삽입하는 것에 의해 두 개의 초기 상태로부터 하나의 후속 상태로의 병합 전이(merging transition)를 포함할 수 있다.
허용된 상태 머신 상태 전이는, 제1 트랜잭션 입력 안으로, 제1 사전 상태를 갖는 제1 이전 트랜잭션에 대한 제1 참조(reference)를 삽입하는 것, 제2 트랜잭션 입력 안으로, 제2 사전 상태를 갖는 제2 이전 트랜잭션에 대한 제2 참조를 삽입하는 것, 및 지출 트랜잭션 안으로, 상태 전이 매트릭스가 제1 이전 트랜잭션 및 제2 이전 트랜잭션에게 이용 가능한 병합 상태에 대한 제1 트랜잭션 출력을 삽입하는 것에 의해 제1 트랜잭션 입력 및/또는 제2 트랜잭션 입력 안으로 하드코딩될 수 있다.
허용된 상태 머신 상태 전이는, 지출 트랜잭션 안으로, 제1 사전 상태에 대한 제1 트랜잭션 입력을 삽입하는 것, 지출 트랜잭션 안으로, 제2 사전 상태에 대한 제2 트랜잭션 입력을 삽입하는 것, 제1 트랜잭션 입력 안으로, 제1 사전 상태를 갖는 제1 이전 트랜잭션에 대한 제1 참조를 삽입하는 것, 제2 트랜잭션 입력 안으로, 제2 사전 상태를 갖는 제2 이전 트랜잭션에 대한 제2 참조를 삽입하는 것, 지출 트랜잭션 안으로, 제1 후속 상태에 대한 제1 트랜잭션 출력을 삽입하는 것, 제1 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제3 세트 - 스크립트 엘리먼트의 제3 세트는 제1 후속 상태를 취하도록 제1 후속 트랜잭션을 제한하는 제1 잠금용 스크립트의 일부임 - 를 삽입하는 것, 지출 트랜잭션 안으로, 제2 후속 상태에 대한 제2 트랜잭션 출력을 삽입하는 것, 및 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제4 세트 - 스크립트 엘리먼트의 제4 세트는 제2 후속 상태를 취하도록 제2 후속 트랜잭션을 제한하는 제2 잠금용 스크립트의 일부임 - 를 삽입하는 것에 의해 다수인 N 개의 - N은 2 이상임 - 초기 상태로부터 N 개의 후속 상태로의 병렬 동작을 포함할 수 있다.
상태 머신의 동작은 블록체인을 사용하여 구현되는 스마트 계약을 인코딩할 수도 있다.
트랜잭션은 임의의 제약을 사용하여 분할될 수 있다. 방법은, 블록체인 네트워크 내의 노드에서, 제1 트랜잭션 - 제1 트랜잭션은 제1 지출 가능한 가치를 갖는 제1 출력 및 제1 잠금용 스크립트를 포함하고 제1 트랜잭션은 제2 지출 가능한 가치를 갖는 제2 출력 및 제2 잠금용 스크립트를 포함함 - 을 생성하는 것, 제1 잠금용 스크립트에, 제1 선택된 트랜잭션 출력에 대한 제약의 제1 세트 - 제약의 제1 세트는, 제1 선택된 트랜잭션 출력이 제1 지출 가능한 가치를 지출하는 데 유효하게 될 경우 제1 잠금 해제용 스크립트에 의해 충족될 것임 - 를 포함하는 것, 제2 잠금용 스크립트에, 제2 선택된 트랜잭션 출력에 대한 제약의 제2 세트 - 제약의 제2 세트는, 제2 선택된 트랜잭션 출력이 제2 지출 가능한 가치를 지출하는 데 유효하게 될 경우 제2 잠금 해제용 스크립트에 의해 충족될 것이고, 제약의 제1 세트 또는 제약의 제2 세트는, 지출 트랜잭션 출력으로서 제1 선택된 트랜잭션 출력 또는 제2 선택된 트랜잭션 출력을 갖는 지출 트랜잭션의 잠금용 스크립트에 대해 제약을 부과함 - 를 포함하는 것을 포함할 수도 있다.
제1 선택된 트랜잭션 출력은 제1 지출 트랜잭션의 출력일 수 있고, 제2 선택된 트랜잭션 출력은 제1 지출 트랜잭션과는 별개인 제2 지출 트랜잭션의 출력일 수 있다. 제약의 제1 세트는 제약의 제2 세트와는 별개일 수 있고 제1 트랜잭션의 트랜잭션 입력에 대한 제약과는 별개일 수 있다. 제약의 제1 세트 및 제약의 제2 세트 각각은 제약의 공통 세트를 포함할 수 있다. 지출 트랜잭션의 잠금용 스크립트에 대한 제약은, 지출 트랜잭션이 유효하기 위해, 지출 트랜잭션의 잠금용 스크립트가 지출 트랜잭션의 적어도 하나의 필드에 대한 참조를 포함해야 한다는 것을 규정할 수 있다. 잠금용 스크립트에 대한 다른 제약은, 지출 트랜잭션이 유효하기 위해, 지출 트랜잭션의 잠금용 스크립트는 제1 잠금용 스크립트의 일부의 사본 및/또는 제2 잠금용 스크립트의 일부의 사본을 포함해야 한다는 것을 규정한다.
제1 선택된 트랜잭션 출력은 제1 지출 트랜잭션의 출력일 수 있고, 제2 선택된 트랜잭션 출력은 제2 지출 트랜잭션의 출력일 수 있고, 제1 잠금 해제용 스크립트는 제1 트랜잭션의 필드, 제1 선택된 트랜잭션의 필드, 및 제2 지출 트랜잭션의 필드를 포함할 수 있고, 제1 잠금용 스크립트는 제1 트랜잭션의 추출된 필드의 제1 비교 및 제1 지출 트랜잭션의 추출된 필드의 제2 비교를 포함할 수 있다.
제약의 제1 세트 및 제약의 제2 세트 각각은 제약의 공통 세트를 포함할 수 있고, 그에 의해 두 개의 제한된 지출 트랜잭션 출력 잠금용 스크립트는 제약의 공통 세트에 의해 제한된다. 제약의 제1 세트 및/또는 제약의 제2 세트는 제1 잠금용 스크립트의 일부의 해시 및/또는 제2 잠금용 스크립트의 일부의 해시, 및/또는 제1 잠금용 스크립트의 일부의 사이즈 및/또는 제2 잠금용 스크립트의 일부의 사이즈에 대한 제약을 포함할 수 있다.
제약의 제1 세트 및/또는 제약의 제2 세트는 입력 데이터에 대한 옵션 사항인(optional) 참조를 포함할 수 있다. 제1 트랜잭션의 복수의 출력의 각각은 복수의 출력의 출력에 적용되는 상이한 제약에 의해 제한될 수 있다.
트랜잭션은 컴퓨터 구현 방법과 같은 임의의 제약을 갖는 상호 의존성을 병합할 수 있거나 또는 그 상호 의존성을 가질 수 있는데, 컴퓨터 구현 방법은, 블록체인 네트워크 내의 노드에서, 제1 지출 가능한 트랜잭션 - 제1 지출 가능한 트랜잭션은, 제1 지출 가능한 가치를 갖는 제1 지출 가능한 출력 및 제1 잠금용 스크립트를 포함함 - 을 생성하는 것, 제1 잠금용 스크립트에, 지출 트랜잭션에 대한 제약의 제1 세트 - 제약의 제1 세트는, 지출 트랜잭션이 제1 지출 가능한 출력을 지출하는 데 유효하게 될 경우 지출 트랜잭션의 제1 잠금 해제용 스크립트에 의해 충족될 것임 - 를 포함하는 것, 제약의 제1 세트에, 스마트 계약 스크립트 명령어의 제1 세트를 포함할 제1 지출 트랜잭션 출력 잠금용 스크립트를 포함할 것을 지출 트랜잭션의 제1 지출 트랜잭션 출력에게 요구하는 제1 지출 트랜잭션 제약을 포함하는 것, 및 제약의 제1 세트에, 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 지출 트랜잭션에게 요구하며 제2 지출 가능한 트랜잭션 출력을 참조하는 지출 트랜잭션 입력을 포함할 것을 지출 트랜잭션에게 요구하는 제2 지출 트랜잭션 제약을 포함하는 것을 포함한다.
스마트 계약 스크립트 명령어의 제1 세트는, 제1 잠금용 스크립트로부터 복제되는 스크립트 명령어 및/또는 제1 잠금용 스크립트에서 구현되는 스마트 계약과는 별개인 새로운 스마트 계약에 대응하는 스크립트 명령어를 포함할 수 있다.
제약의 제1 세트는, 제1 지출 트랜잭션 출력 잠금용 스크립트가 제2 지출 가능한 트랜잭션 출력에 대한 참조를 포함하고 스마트 계약 스크립트 명령어의 제2 세트가 제1 지출 가능한 트랜잭션의 출력에 대한 참조를 포함한다는 것일 수도 있다.
방법은, 제약의 제1 세트에, 제1 지출 가능한 트랜잭션을 참조하는 제1 지출 트랜잭션 입력을 포함할 것을 지출 트랜잭션에게 요구하는 제1 병렬 제약, 제2 지출 가능한 트랜잭션 출력을 참조하는 제2 지출 트랜잭션 입력을 포함할 것을 지출 트랜잭션에게 요구하는 제2 병렬 제약, 적어도, 제1 잠금용 스크립트에 의해 적어도 부분적으로 결정되는 스크립트 명령어의 제1 세트를, 스마트 계약 스크립트 명령어의 제1 세트에 포함할 것을 제1 지출 트랜잭션 출력 잠금용 스크립트에게 요구하는 제3 병렬 제약, 및 제2 지출 가능한 트랜잭션 출력의 잠금용 스크립트에 의해 적어도 부분적으로 결정되는 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 제2 지출 트랜잭션 출력 잠금용 스크립트에게 요구하는 제4 병렬 제약을 제공하는 것을 포함할 수도 있다.
제약의 제1 세트는, 제1 지출 가능한 트랜잭션을 참조하는 제1 지출 트랜잭션 입력을 포함할 것을 지출 트랜잭션에게 요구하는 제1 병렬 제약, 제2 지출 가능한 트랜잭션 출력을 참조하는 제2 지출 트랜잭션 입력을 포함할 것을 지출 트랜잭션에게 요구하는 제2 병렬 제약, 적어도, 제1 잠금용 스크립트로부터 복제되는 스크립트 명령어의 제1 세트를, 스마트 계약 스크립트 명령어의 제1 세트에 포함할 것을 제1 지출 트랜잭션 출력 잠금용 스크립트에게 요구하는 제3 병렬 제약, 및 제2 지출 가능한 트랜잭션 출력의 잠금용 스크립트로부터 복제되는 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 제2 지출 트랜잭션 출력 잠금용 스크립트에게 요구하는 제4 병렬 제약을 포함할 수도 있다.
또한, 제1 잠금 해제용 트랜잭션 출력에 대한 제약의 제1 세트를 결정하는 것; 제2 잠금 해제용 트랜잭션 출력에 대한 제약의 제2 세트를 결정하는 것; 제약의 제1 세트 및 제약의 제2 세트를 포함하는 적어도 하나의 초기 잠금용 스크립트; 및 적어도 하나의 상환 가능한 가치:를 포함하도록 초기 트랜잭션을 생성하는 것 - 적어도 하나의 상환 가능한 가치를 잠금 해제하는 것은, 적어도 부분적으로, 잠금 해제용 트랜잭션이 제1 잠금 해제용 트랜잭션 출력을 포함한다는 것의 유효성을 확인하는 것에 의해, 제약의 제1 세트가 충족되는 것; 및 적어도 부분적으로, 잠금 해제용 트랜잭션이 제2 잠금 해제용 트랜잭션 출력을 포함한다는 것의 유효성을 확인하는 것에 의해, 제약의 제2 세트가 충족되는 것:을 조건으로 함 - ; 및 초기 트랜잭션으로 하여금, 블록체인 네트워크의 노드에서 유효성이 확인되게 하는 것을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다.
제1 잠금 해제용 트랜잭션 출력에서의 잠금용 스크립트는 제2 잠금 해제용 트랜잭션 출력에서의 잠금용 스크립트의 복제물 수도 있다.
제1 잠금 해제용 트랜잭션 출력에서의 잠금용 스크립트는 제2 잠금 해제용 트랜잭션 출력에서의 잠금용 스크립트와는 상이할 수도 있다.
제1 잠금 해제용 트랜잭션 출력에서의 잠금용 스크립트는 적어도 하나의 초기 잠금용 스크립트의 적어도 일부를 포함할 수도 있다.
적어도 하나의 잠금용 초기 스크립트의 실행은, 적어도 하나의 초기 잠금용 스크립트의 복수의 부분으로부터 적어도 일부를 선택할 수도 있다.
잠금 해제용 트랜잭션의 잠금 해제용 스크립트의 실행은, 적어도 하나의 초기 잠금용 스크립트가, 제1 잠금 해제용 트랜잭션 출력 또는 제2 잠금 해제용 트랜잭션 출력 중 하나에 대응하는 데이터를 수신하는 것으로 나타날 수도 있다.
데이터는 인덱스 값을 가질 수도 있다. 인덱스 값이 제1 인덱스 값이면, 적어도 하나의 초기 잠금용 스크립트의 실행은, 제약의 제1 세트가 충족되는지의 여부를 결정할 수도 있다. 인덱스 값이 제2 인덱스 값이면, 적어도 하나의 초기 잠금용 스크립트의 실행은, 제약의 제2 세트가 충족되는지의 여부를 결정할 수도 있다.
데이터에는 새로운 잠금용 스크립트를 포함할 수도 있다. 데이터를 수신하는 것의 결과로서, 제1 잠금 해제용 트랜잭션 출력은 새로운 잠금용 스크립트를 포함하도록 제한될 수도 있다.
적어도 하나의 초기 잠금용 스크립트는 데이터 소스의 제약을 포함할 수도 있다.
방법은 제1 잠금 해제용 트랜잭션 출력에 대한 상환 가능한 가치를 결정하는 것을 더 포함할 수도 있다.
초기 트랜잭션은 복수의 상태를 갖는 계약을 인코딩할 수도 있다.
잠금 해제용 트랜잭션은 복수의 상태에 대응하는 복수의 입력 값을 포함할 수도 있다.
제약의 제1 세트는 제1 상태를 가지도록 제1 잠금 해제용 트랜잭션 출력을 제한할 수도 있다. 제약의 제2 세트는 제2 상태를 가지도록 제2 잠금 해제용 트랜잭션 출력을 제한한다.
또한, 이전 트랜잭션 출력을 참조하는 잠금 해제용 트랜잭션 입력을 포함하도록 잠금 해제용 트랜잭션을 제한하는 잠금 해제용 트랜잭션 제약을 결정하는 것; 상환 가능한 금액을 포함하는 상환 가능한 트랜잭션 출력; 및 잠금 해제용 트랜잭션 제약을 포함하는 상환 가능한 트랜잭션 잠금용 스크립트:를 포함하는 상환 가능한 트랜잭션을 생성하는 것 - 상환 가능한 금액을 잠금 해제하는 것은, 잠금 해제용 트랜잭션 제약을 충족하는 잠금 해제용 트랜잭션의 적어도 하나의 잠금 해제용 스크립트의 실행을 조건으로 함 - ; 및 상환 가능한 트랜잭션으로 하여금, 블록체인 네트워크의 노드에서 유효성이 확인되게 하는 것을 를 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다.
잠금 해제용 트랜잭션 제약은 특정한 해시 값을 포함하도록 잠금 해제용 트랜잭션 입력을 추가로 제한할 수도 있다.
특정한 해시 값은 이전 트랜잭션 출력을 참조하는 식별자를 인코딩할 수도 있다.
잠금 해제용 트랜잭션 제약은, 상환 가능한 트랜잭션 잠금용 스크립트로부터 복제되는 스크립트 엘리먼트의 세트를 포함하도록 잠금 해제용 트랜잭션의 잠금용 스크립트를 추가로 제한할 수도 있다.
상환 가능한 트랜잭션은 복수의 상태를 갖는 계약을 인코딩할 수도 있다.
방법은 잠금 해제용 트랜잭션의 출력에 대한 상환 가능한 가치를 결정하는 것을 더 포함할 수도 있다.
잠금 해제용 트랜잭션 제약은 이전 트랜잭션 출력으로부터의 특정한 잠금용 스크립트 엘리먼트를 포함할 수도 있다. 잠금 해제용 트랜잭션 입력이 특정한 잠금용 스크립트 엘리먼트를 포함하는 것의 결과로서, 적어도 하나의 잠금 해제용 스크립트의 실행은 잠금 해제용 트랜잭션 제약을 충족할 수도 있다.
특정한 잠금용 스크립트 엘리먼트는 특정한 엔티티의 암호화 키(cryptographic key)를 인코딩할 수도 있다.
잠금 해제용 트랜잭션 제약은 제1 잠금 해제용 트랜잭션 제약일 수도 있고; 방법은, 잠금 해제용 트랜잭션을 추가로 제한할 제2 잠금 해제용 트랜잭션 제약을 결정하는 것; 및 제2 상환 가능한 금액; 및 제2 잠금 해제용 트랜잭션 제약을 포함하는 제2 상환 가능한 트랜잭션 잠금용 스크립트:를 포함하는 제2 상환 가능한 트랜잭션을 생성하는 것 - 제2 상환 가능한 금액을 잠금 해제는 것은 또한, 제2 잠금 해제용 트랜잭션 제약을 충족하는 적어도 하나의 잠금 해제용 스크립트의 실행을 조건으로 할 수도 있음 - 을 더 포함할 수도 있다.
상환 가능한 트랜잭션 잠금용 스크립트는 제1 상환 가능한 트랜잭션 잠금용 스크립트일 수도 있고, 적어도 하나의 잠금 해제용 스크립트는 제1 잠금 해제용 스크립트 및 제2 잠금 해제용 스크립트를 포함할 수도 있다. 제1 잠금 해제용 트랜잭션 제약은, 제1 상환 가능한 트랜잭션 잠금용 스크립트의 적어도 일부를 포함하도록 제1 잠금 해제용 스크립트를 제한할 수도 있다. 제2 잠금 해제용 트랜잭션 제약은, 제2 상환 가능한 트랜잭션 잠금용 스크립트의 적어도 일부를 포함하도록 제2 잠금 해제용 스크립트를 제한할 수도 있다.
제1 상환 가능한 트랜잭션 잠금용 스크립트의 적어도 일부는 제1 엔티티와 관련되는 암호화 키를 포함할 수도 있다. 제2 상환 가능한 트랜잭션 잠금용 스크립트의 적어도 일부는 제1 엔티티와는 상이한 제2 엔티티와 관련되는 암호화 키를 포함할 수도 있다.
잠금 해제용 트랜잭션 제약은 잠금 해제용 트랜잭션의 출력을 제한하도록 잠금 해제용 트랜잭션을 추가로 제한할 수도 있다.
잠금 해제용 트랜잭션 제약은 계약과 별개의 다른 계약을 인코딩할 수도 있다. 상환 가능한 금액의 잠금 해제는, 다른 계약이 잠금 해제용 트랜잭션의 출력에서 구현되는 것을 조건으로 할 수도 있다.
또한, 제1 상태에 있으며 허용 가능한 상태 전이의 세트를 갖는 상태 머신; 및 스크립트 엘리먼트의 세트:를 인코딩하는 블록체인 트랜잭션을 생성하는 것 - 스크립트 엘리먼트의 세트는, 잠금 해제용 트랜잭션으로 하여금, 허용 가능한 상태 전이의 세트에 따라 상태 머신을 인코딩하게 하기 위해; 그리고 잠금 해제용 트랜잭션에 대한 입력에 대한 제한을 준수하게 하거나 또는 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 하기 위해: 실행될 것임 - ; 및 블록체인 트랜잭션으로 하여금, 블록체인 네트워크 내의 노드에 의해 유효성이 확인되게 하는 것을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다.
허용 가능한 상태 전이의 세트는, 별개의 블록체인 트랜잭션에서 독립적으로 그리고 동시에 구현될 수 있는 상태 전이를 포함할 수도 있다.
스크립트 엘리먼트의 세트는 잠금 해제용 트랜잭션으로 하여금 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 할 수도 있다. 출력에 대한 제한은: 잠금 해제용 트랜잭션의 제1 출력에게, 허용 가능한 상태 전이의 세트에 따라 제1 출력에 대응하는 상태를 나타낼 것을; 그리고 잠금 해제용 트랜잭션의 제2 출력에게, 허용 가능한 상태 전이의 세트에 따라 제2 출력에 대응하는 상태를 나타낼 것을: 요구할 수도 있다.
제1 출력에 대응하는 상태와 제2 출력에 대응하는 상태는 동일할 수도 있다.
제1 출력에 대응하는 상태와 제2 출력에 대응하는 상태는 상이한 상태일 수도 있다.
스크립트 엘리먼트의 세트는 잠금 해제용 트랜잭션으로 하여금 잠금 해제용 트랜잭션의 입력에 대한 제한을 준수하게 할 수도 있다. 입력에 대한 제한은, 다른 블록체인 트랜잭션에 인코딩되는 다른 상태 머신을 나타낼 것을, 잠금 해제용 트랜잭션에 대한 입력에게 요구할 수도 있다.
입력에 대한 제한은, 입력에게, 제1 상태에서 상태 머신을 참조할 것을 그리고 제1 상태와는 상이한 다른 상태에서 다른 상태 머신을 참조할 것을 요구할 수도 있다.
제1 상태로부터 제2 상태로의 제1 전이는 허용 가능한 상태 전이의 세트 내에 있을 수도 있다. 다른 상태로부터 제2 상태로의 제2 전이는 허용 가능한 상태 전이의 세트 내에 있을 수도 있다.
스크립트 엘리먼트의 세트는 잠금 해제용 트랜잭션으로 하여금 잠금 해제용 트랜잭션의 입력에 대한 제한을 준수하게 할 수도 있다. 입력에 대한 제한은 상태 머신을 진척시키기 위한 조건의 세트를 나타낼 수도 있다. 상태 머신을 진척시키기 위한 조건의 세트는 다른 상태 머신의 상태에 의존할 수도 있다.
다른 상태 머신은 다른 블록체인 트랜잭션에서 인코딩될 수도 있다. 다른 트랜잭션은 다른 상태 머신을 진척시키기 위한 조건의 세트를 인코딩할 수도 있다. 다른 상태 머신을 진척시키기 위한 다른 조건의 세트는 상태 머신의 상태에 의존할 수도 있다.
스크립트 엘리먼트의 세트는 잠금 해제용 트랜잭션으로 하여금 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 할 수도 있다. 출력에 대한 제한은, 잠금 해제용 트랜잭션에게, 스마트 계약의 요소의 세트를 출력에 통합할 것을 요구할 수도 있다.
스마트 계약의 요소의 세트는 다른 블록체인 트랜잭션으로부터 획득될 수도 있다.
스크립트 엘리먼트의 세트는, 잠금 해제용 트랜잭션으로 하여금, 잠금 해제용 트랜잭션의 입력에 대한 제한 및 잠금 해제용 트랜잭션의 출력에 대한 제한 둘 모두를 준수하게 할 수도 있다.
또한, 블록체인 네트워크 내의 노드에서, 제1 잠금 해제용 트랜잭션의 제1 잠금 해제용 트랜잭션 입력에게 양도될 수 있는 트랜잭션 출력을 갖는 블록체인 트랜잭션을 생성하는 것, 블록체인 트랜잭션 안으로, 상태 머신의 동작에 대응하는 잠금 해제용 트랜잭션 스크립트 엘리먼트의 제1 세트를 포함하도록 제1 잠금 해제용 트랜잭션을 제한할 스크립트 엘리먼트의 제1 세트를 삽입하는 것, 및 블록체인 트랜잭션 안으로, 블록체인 네트워크에 의해 동시에 그러나 독립적으로 프로세싱될 수 있는 별개의 블록체인 트랜잭션을 사용하여 구현될 수 있는 상태를 포함하는 허용된 상태 머신 상태 전이에 대응하는 잠금 해제용 트랜잭션 스크립트 엘리먼트의 제2 세트를 제한할 스크립트 엘리먼트의 제2 세트를 삽입하는 것을 포함하는 컴퓨터 구현 방법을 제공하는 것이 바람직하다. 블록체인 트랜잭션은 제1 잠금용 스크립트를 갖는 제1 출력을 포함할 수 있고, 제1 트랜잭션 출력 값은 제2 잠금용 스크립트 및 제2 트랜잭션 출력 값을 갖는 제2 출력을 포함할 수 있는데, 스크립트 엘리먼트의 제1 세트는 제1 잠금용 스크립트의 일부일 수도 있다.
잠금 해제용 트랜잭션은, 이전 트랜잭션 출력 잠금용 스크립트를 갖는 트랜잭션 검증자에 의해 실행될 때, 미리 결정된 검증 테스트를 충족할 수도 있는 그리고 노드로 하여금 잠금 해제용 트랜잭션의 필드를 나타내는 값을, 이전 트랜잭션 출력 잠금용 스크립트를 실행할 때, 잠금 해제용 트랜잭션 안으로, 스크립트 엘리먼트의 제1 세트 - 스크립트 엘리먼트의 제1 세트는 잠금 해제용 트랜잭션의 제1 출력의 잠금 해제용 트랜잭션 잠금용 스크립트의 일부를 형성하며 이전 트랜잭션 잠금용 스크립트에 의해 지시되는 요건과 부합할 수도 있고 스크립트 엘리먼트의 제1 세트는 상태 머신의 동작에 대응함 - 를 삽입할 때, 그리고 잠금 해제용 트랜잭션 안으로, 스크립트 엘리먼트의 제2 세트 - 스크립트 엘리먼트의 제2 세트는 잠금 해제용 트랜잭션 잠금용 스크립트의 일부를 형성하고, 이전 트랜잭션 잠금용 스크립트에 의해 지시되는 요건과 부합할 수도 있고, 블록체인 네트워크에 의해 동시에 그러나 독립적으로 프로세싱될 수 있는 별개의 블록체인 트랜잭션을 사용하여 구현될 수 있는 상태를 포함하는 허용된 상태 머신 상태 전이에 대응할 수도 있음 - 를 삽입할 때, 트랜잭션 검증자가 액세스 가능한 메모리에 적어도 저장하게 할 수도 있는 잠금 해제용 스크립트를 포함할 수 있다.
잠금 해제용 트랜잭션은 입력 및 출력을 포함할 수 있는데, 입력은 이전 트랜잭션 출력을 참조하고, 잠금 해제용 트랜잭션은, 이전 트랜잭션 출력의 이전 트랜잭션 잠금용 스크립트를 갖는 트랜잭션 검증자에 의해 실행될 때, 미리 결정된 검증 테스트를 충족할 수도 있는 잠금 해제용 스크립트를 포함하고, 잠금 해제용 스크립트는, 노드로 하여금, 잠금 해제용 트랜잭션의 필드를 나타내는 값을, 잠금용 스크립트를 실행할 때, 그리고, 잠금 해제용 트랜잭션에서 사용되는 잠금 해제용 트랜잭션 입력 및/또는 잠금 해제용 트랜잭션 출력의 수가 상태 머신 전이의 수에 대해 충분하도록 허용된 상태 머신 상태 전이에 기초하여, 추가적인 상태 머신에 대응하는 데이터를, 잠금 해제용 트랜잭션 입력 및/또는 잠금 해제용 트랜잭션 출력으로서, 잠금 해제용 트랜잭션 안으로, 삽입할 때, 트랜잭션 검증자가 액세스 가능한 메모리에 적어도 저장하게 한다.
허용된 상태 머신 상태 전이는, 잠금 해제용 트랜잭션에 대해, 제1 후속 상태에 대응하는 제1 트랜잭션 출력을 생성하는 것, 잠금 해제용 트랜잭션에, 제1 트랜잭션 출력으로 하여금, 제1 트랜잭션 출력을 참조하는 제1 후속 트랜잭션에 대한 입력이 되게 하기에 충분한 제1 트랜잭션 출력에 대한 제1 트랜잭션 출력 값을 삽입하는 것, 잠금 해제용 트랜잭션의 제1 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제3 세트 - 스크립트 엘리먼트의 제3 세트는 제1 후속 상태를 취하도록 제1 후속 트랜잭션을 제한하는 제1 잠금용 스크립트의 일부일 수도 있음 - 를 삽입하는 것, 잠금 해제용 트랜잭션에 대해, 제2 후속 상태에 대응하는 제2 트랜잭션 출력을 생성하는 것, 잠금 해제용 트랜잭션에, 제2 트랜잭션 출력으로 하여금, 제2 트랜잭션 출력을 참조하는 제2 후속 트랜잭션에 대한 입력이 되게 하기에 충분한 제2 트랜잭션 출력에 대한 제2 트랜잭션 출력 값을 삽입하는 것, 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제4 세트 - 스크립트 엘리먼트의 제4 세트는 제2 후속 상태를 취하도록 제2 후속 트랜잭션을 제한하는 제2 잠금용 스크립트의 일부일 수도 있음 - 를 삽입하는 것, 및 제1 트랜잭션 출력 또는 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제5 세트 - 스크립트 엘리먼트의 제5 세트는, 제1 후속 트랜잭션 및 제2 후속 트랜잭션이 별개의 것이어야 한다는 제약을 부과하는 제1 잠금용 스크립트 또는 제2 잠금용 스크립트의 일부일 수도 있음 - 를 삽입하는 것에 의해 하나의 초기 상태로부터 두 개의 후속 상태로의 포킹 전이(forking transition)를 포함할 수도 있다.
제1 잠금용 스크립트는 제1 상태를 가지도록 제1 후속 트랜잭션을 제한할 수 있고, 제2 잠금용 스크립트는 제2 상태를 가지도록 제2 후속 트랜잭션을 제한할 수 있다. 잠금 해제용 트랜잭션은 세 개 이상의 상태의 포크에 대응하는 세 개 이상의 트랜잭션 출력 값을 포함할 수 있다. 잠금 해제용 트랜잭션은 세 개 이상의 상태의 병합에 대응하는 세 개 이상의 트랜잭션 입력 값을 포함할 수 있다. 제1 잠금용 스크립트 및 제2 잠금용 스크립트는 동일한 상태를 가지도록 제1 후속 트랜잭션 및 제2 후속 트랜잭션을 제한할 수 있다.
일반적으로, 잠금 해제용 트랜잭션은 N 개의 트랜잭션 입력 값 및 N 개의 트랜잭션 출력 값을 포함할 수도 있는데, 여기서 N은 1, 2, 3 이상이다.
허용된 상태 머신 상태 전이는, 잠금 해제용 트랜잭션 안으로, 제1 사전 상태에 대한 제1 트랜잭션 입력을 삽입하는 것, 잠금 해제용 트랜잭션 안으로, 제2 사전 상태에 대한 제2 트랜잭션 입력을 삽입하는 것, 및 잠금 해제용 트랜잭션 안으로, 상태 전이 매트릭스에 따른 제1 사전 상태 및 제2 사전 상태로부터의 허용된 전이인 병합 상태를 삽입하는 것에 의해 두 개의 초기 상태로부터 하나의 후속 상태로의 병합 전이를 포함할 수 있다.
허용된 상태 머신 상태 전이는, 제1 트랜잭션 입력 안으로, 제1 사전 상태를 갖는 제1 이전 트랜잭션에 대한 제1 참조를 삽입하는 것, 제2 트랜잭션 입력 안으로, 제2 사전 상태를 갖는 제2 이전 트랜잭션에 대한 제2 참조를 삽입하는 것, 및 잠금 해제용 트랜잭션 안으로, 상태 전이 매트릭스가 제1 이전 트랜잭션 및 제2 이전 트랜잭션에게 이용 가능한 병합 상태에 대한 제1 트랜잭션 출력을 삽입하는 것에 의해 제1 트랜잭션 입력 및/또는 제2 트랜잭션 입력 안으로 하드코딩될 수 있다.
허용된 상태 머신 상태 전이는, 잠금 해제용 트랜잭션 안으로, 제1 사전 상태에 대한 제1 트랜잭션 입력을 삽입하는 것, 잠금 해제용 트랜잭션 안으로, 제2 사전 상태에 대한 제2 트랜잭션 입력을 삽입하는 것, 제1 트랜잭션 입력 안으로, 제1 사전 상태를 갖는 제1 이전 트랜잭션에 대한 제1 참조를 삽입하는 것, 제2 트랜잭션 입력 안으로, 제2 사전 상태를 갖는 제2 이전 트랜잭션에 대한 제2 참조를 삽입하는 것, 잠금 해제용 트랜잭션 안으로, 제1 후속 상태에 대한 제1 트랜잭션 출력을 삽입하는 것, 제1 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제3 세트 - 스크립트 엘리먼트의 제3 세트는 제1 후속 상태를 취하도록 제1 후속 트랜잭션을 제한하는 제1 잠금용 스크립트의 일부일 수도 있음 - 를 삽입하는 것, 잠금 해제용 트랜잭션 안으로, 제2 후속 상태에 대한 제2 트랜잭션 출력을 삽입하는 것, 및 제2 트랜잭션 출력 안으로, 스크립트 엘리먼트의 제4 세트 - 스크립트 엘리먼트의 제4 세트는 제2 후속 상태를 취하도록 제2 후속 트랜잭션을 제한하는 제2 잠금용 스크립트의 일부임 - 를 삽입하는 것에 의해 다수인 N 개의 - N은 2 이상임 - 초기 상태로부터 N 개의 후속 상태로의 병렬 동작을 포함할 수 있다.
상태 머신의 동작은 블록체인을 사용하여 구현되는 스마트 계약을 인코딩할 수도 있다.
트랜잭션은 임의의 제약을 사용하여 분할될 수 있다. 방법은, 블록체인 네트워크 내의 노드에서, 제1 트랜잭션 - 제1 트랜잭션은 제1 상환 가능한 가치를 갖는 제1 출력 및 제1 잠금용 스크립트를 포함하고 제1 트랜잭션은 제2 상환 가능한 가치를 갖는 제2 출력 및 제2 잠금용 스크립트를 포함함 - 을 생성하는 것, 제1 잠금용 스크립트에, 제1 선택된 트랜잭션 출력에 대한 제약의 제1 세트 - 제약의 제1 세트는, 제1 선택된 트랜잭션 출력이 제1 상환 가능한 가치를 잠금 해제하는 데 유효하게 될 경우 제1 잠금 해제용 스크립트에 의해 충족될 수도 있음 - 를 포함하는 것, 제2 잠금용 스크립트에, 제2 선택된 트랜잭션 출력에 대한 제약의 제2 세트 - 제약의 제2 세트는, 제2 선택된 트랜잭션 출력이 제2 상환 가능한 가치를 잠금 해제하는 데 유효하게 될 경우 제2 잠금 해제용 스크립트에 의해 충족될 수도 있고, 제약의 제1 세트 또는 제약의 제2 세트는, 잠금 해제용 트랜잭션 출력으로서 제1 선택된 트랜잭션 출력 또는 제2 선택된 트랜잭션 출력을 갖는 잠금 해제용 트랜잭션의 잠금용 스크립트에 대해 제약을 부과함 - 를 포함하는 것을 포함할 수도 있다.
제1 선택된 트랜잭션 출력은 제1 잠금 해제용 트랜잭션의 출력일 수 있고, 제2 선택된 트랜잭션 출력은 제1 잠금 해제용 트랜잭션과는 별개인 제2 잠금 해제용 트랜잭션의 출력일 수 있다. 제약의 제1 세트는 제약의 제2 세트와는 별개일 수 있고 제1 트랜잭션의 트랜잭션 입력에 대한 제약과는 별개일 수 있다. 제약의 제1 세트 및 제약의 제2 세트 각각은 제약의 공통 세트를 포함할 수 있다. 잠금 해제용 트랜잭션의 잠금용 스크립트에 대한 제약은, 잠금 해제용 트랜잭션이 유효하기 위해, 잠금 해제용 트랜잭션의 잠금용 스크립트가 잠금 해제용 트랜잭션의 적어도 하나의 필드에 대한 참조를 포함해야 한다는 것을 규정할 수 있다. 잠금용 스크립트에 대한 다른 제약은, 잠금 해제용 트랜잭션이 유효하기 위해, 잠금 해제용 트랜잭션의 잠금용 스크립트는 제1 잠금용 스크립트의 일부의 사본 및/또는 제2 잠금용 스크립트의 일부의 사본을 포함해야 한다는 것을 규정한다.
제1 선택된 트랜잭션 출력은 제1 잠금 해제용 트랜잭션의 출력일 수 있고, 제2 선택된 트랜잭션 출력은 제2 잠금 해제용 트랜잭션의 출력일 수 있고, 제1 잠금 해제용 스크립트는 제1 트랜잭션의 필드, 제1 선택된 트랜잭션의 필드, 및 제2 잠금 해제용 트랜잭션의 필드를 포함할 수 있고, 제1 잠금용 스크립트는 제1 트랜잭션의 추출된 필드의 제1 비교 및 제1 잠금 해제용 트랜잭션의 추출된 필드의 제2 비교를 포함할 수 있다.
제약의 제1 세트 및 제약의 제2 세트 각각은 제약의 공통 세트를 포함할 수 있고, 그에 의해 두 개의 제한된 잠금 해제용 트랜잭션 출력 잠금용 스크립트는 제약의 공통 세트에 의해 제한될 수도 있다. 제약의 제1 세트 및/또는 제약의 제2 세트는 제1 잠금용 스크립트의 일부의 해시 및/또는 제2 잠금용 스크립트의 일부의 해시, 및/또는 제1 잠금용 스크립트의 일부의 사이즈 및/또는 제2 잠금용 스크립트의 일부의 사이즈에 대한 제약을 포함할 수 있다.
제약의 제1 세트 및/또는 제약의 제2 세트는 입력 데이터에 대한 옵션 사항인 참조를 포함할 수 있다. 제1 트랜잭션의 복수의 출력의 각각은 복수의 출력의 출력에 적용되는 상이한 제약에 의해 제한될 수 있다.
트랜잭션은 컴퓨터 구현 방법과 같은 임의의 제약을 갖는 상호 의존성을 병합할 수 있거나 또는 그 상호 의존성을 가질 수 있는데, 컴퓨터 구현 방법은, 블록체인 네트워크 내의 노드에서, 제1 상환 가능한 트랜잭션 - 제1 상환 가능한 트랜잭션은 제1 상환 가능한 가치를 갖는 제1 상환 가능한 출력 및 제1 잠금용 스크립트를 포함함 - 을 생성하는 것, 제1 잠금용 스크립트에, 잠금 해제용 트랜잭션에 대한 제약의 제1 세트 - 제약의 제1 세트는, 잠금 해제용 트랜잭션이 제1 상환 가능한 출력을 잠금 해제하는 데 유효하게 될 경우 잠금 해제용 트랜잭션의 제1 잠금 해제용 스크립트에 의해 충족될 것임 - 를 포함하는 것, 제약의 제1 세트에, 스마트 계약 스크립트 명령어의 제1 세트를 포함할 제1 잠금 해제용 트랜잭션 출력 잠금용 스크립트를 포함할 것을 잠금 해제용 트랜잭션의 제1 잠금 해제용 트랜잭션 출력에게 요구하는 제1 잠금 해제용 트랜잭션 제약을 포함하는 것, 및 제약의 제1 세트에, 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 잠금 해제용 트랜잭션에게 요구하며 제2 상환 가능한 트랜잭션 출력을 참조하는 잠금 해제용 트랜잭션 입력을 포함할 것을 잠금 해제용 트랜잭션에게 요구하는 제2 잠금 해제용 트랜잭션 제약을 포함하는 것을 포함한다.
스마트 계약 스크립트 명령어의 제1 세트는, 제1 잠금용 스크립트로부터 복제되는 스크립트 명령어 및/또는 제1 잠금용 스크립트에서 구현되는 스마트 계약과는 별개인 새로운 스마트 계약에 대응하는 스크립트 명령어를 포함할 수 있다.
제약의 제1 세트는, 제1 잠금 해제용 트랜잭션 출력 잠금용 스크립트가 제2 상환 가능한 트랜잭션 출력에 대한 참조를 포함하고 스마트 계약 스크립트 명령어의 제2 세트가 제1 상환 가능한 트랜잭션의 출력에 대한 참조를 포함한다는 것일 수도 있다.
방법은, 제약의 제1 세트에, 제1 상환 가능한 트랜잭션을 참조하는 제1 잠금 해제용 트랜잭션 입력을 포함할 것을 잠금 해제용 트랜잭션에게 요구하는 제1 병렬 제약, 제2 상환 가능한 트랜잭션 출력을 참조하는 제2 잠금 해제용 트랜잭션 입력을 포함할 것을 잠금 해제용 트랜잭션에게 요구하는 제2 병렬 제약, 적어도, 제1 잠금용 스크립트에 의해 적어도 부분적으로 결정되는 스크립트 명령어의 제1 세트를, 스마트 계약 스크립트 명령어의 제1 세트에 포함할 것을 제1 잠금 해제용 트랜잭션 출력 잠금용 스크립트에게 요구하는 제3 병렬 제약, 및 제2 상환 가능한 트랜잭션 출력의 잠금용 스크립트에 의해 적어도 부분적으로 결정되는 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 제2 잠금 해제용 트랜잭션 출력 잠금용 스크립트에게 요구하는 제4 병렬 제약을 제공하는 것을 포함할 수도 있다.
제약의 제1 세트는, 제1 상환 가능한 트랜잭션을 참조하는 제1 잠금 해제용 트랜잭션 입력을 포함할 것을 잠금 해제용 트랜잭션에게 요구하는 제1 병렬 제약, 제2 상환 가능한 트랜잭션 출력을 참조하는 제2 잠금 해제용 트랜잭션 입력을 포함할 것을 잠금 해제용 트랜잭션에게 요구하는 제2 병렬 제약, 적어도, 제1 잠금용 스크립트로부터 복제되는 스크립트 명령어의 제1 세트를, 스마트 계약 스크립트 명령어의 제1 세트에 포함할 것을 제1 잠금 해제용 트랜잭션 출력 잠금용 스크립트에게 요구하는 제3 병렬 제약, 및 제2 상환 가능한 트랜잭션 출력의 잠금용 스크립트로부터 복제되는 스마트 계약 스크립트 명령어의 제2 세트를 포함할 것을 제2 잠금 해제용 트랜잭션 출력 잠금용 스크립트에게 요구하는 제4 병렬 제약을 포함할 수도 있다.
프로세서; 및 실행 가능 명령어를 포함하는 메모리:를 포함하는 시스템을 제공하는 것이 또한 바람직한데, 실행 가능 명령어는, 프로세서에 의한 실행의 결과로서, 시스템으로 하여금, 청구되는 바와 같은 방법 중 임의의 것을 수행하게 한다.
또한, 실행 가능 명령어를 저장한 비일시적 컴퓨터 판독 가능 저장 매체를 제공하는 것이 또한 바람직한데, 실행 가능 명령어는, 컴퓨터 시스템의 프로세서에 의해 실행되는 것의 결과로서, 컴퓨터 시스템으로 하여금, 청구되는 바와 같은 방법 중 임의의 것을 적어도 수행하게 한다.
본 발명의 이들 및 다른 양태는 본원에서 설명되는 실시형태로부터 명백해질 것이고 그 실시형태를 참조하여 설명될 것이다. 이제, 본 발명의 실시형태가, 단지 예로서, 그리고 첨부하는 도면을 참조하여, 설명될 것이다:
도 1은 다양한 실시형태가 구현될 수 있는 블록체인 환경을 예시한다.
도 2는 도 1의 블록체인 환경에서 사용될 수도 있는 블록체인 노드의 예를 예시한다.
도 3은 도 2의 블록체인 노드에 의해 사용하는 블록체인 원장에 저장될 수도 있는 것과 같은 트랜잭션의 예를 예시한다.
도 4는 비트코인 블록체인 환경에 고유한, 블록체인 트랜잭션의 예를 예시한다.
도 5는 서명을 생성하기 위해 OP_GENSIG 스크립트를 구현하기 위한 예시적인 스크립트를 예시한다.
도 6은 잠금 해제용 트랜잭션의 입력에 대응하는 이전 트랜잭션을 삽입하기 위해 OP_PREVTXINJECTION 스크립트를 구현하기 위한 예시적인 스크립트를 예시한다.
도 7은 서명될 입력에 대응하는 이전 트랜잭션을 삽입하기 위해 OP_SELFTXINJECTION 스크립트를 구현하기 위한 예시적인 스크립트를 예시한다.
도 8은 직렬화된 잠금 해제용 트랜잭션을 잠금용 스크립트에 삽입하기 위해 OP_SPENDINGTXINJECTION 스크립트를 구현하기 위한 예시적인 스크립트를 예시한다.
도 9는 한 쌍의 트랜잭션의 예를 예시하는 데, 하나는 양도될 가치를 갖는 트랜잭션이고 다른 하나는 그 가치의 잠금 해제를 나타내는 트랜잭션이다.
도 10은 다수의 트랜잭션의 예를 예시하는데, 트랜잭션은 다른 트랜잭션으로부터의 다수의 입력 및 미래의 트랜잭션에게 양도될 수 있는 다수의 출력을 갖는다.
도 11은 한 실시형태에 따른 트랜잭션 필드의 직렬화된 세트로부터 서명을 생성하는 예를 예시한다.
도 12는 잠금 해제용 트랜잭션의 일부 사본을 포함하는 잠금 해제용 스크립트를 포함하는 잠금 해제용 트랜잭션의 예를 예시한다.
도 13은 잠금 해제용 트랜잭션 및 이전 트랜잭션을 예시한다.
도 14는 잠금 해제용 트랜잭션의 잠금용 스크립트에 대해 제약을 부과하는 잠금용 스크립트의 예의 플로우차트이다.
도 15는 도 14의 단계에 대응하는 더욱 특정한 단계의 몇몇 예를 예시한다.
도 16은 잠금 해제용 스크립트를 검증하는 예를 예시한다.
도 17은 입력에 대해 제약의 세트를 부과하는 잠금용 스크립트 예를 예시한다.
도 18은 잠금 해제용 트랜잭션의 입력에 대해 제약을 부과하는 잠금용 스크립트의 예의 플로우차트이다.
도 19는 입력 제약의 예를 예시한다.
도 20은 도 18에서 도시되는 프로세스의 맥락에서의 제약의 예를 예시한다.
도 21은 연동하는(interlocking) 스크립트 제약을 예시한다.
도 22는 블록체인 트랜잭션을 사용하여 구현되는 상태 머신의 예를 예시한다.
도 23은 상태 머신 로직이 블록체인 트랜잭션에서 인코딩될 수도 있는 방법의 예를 예시한다.
도 24는 한 실시형태에 따른 신뢰할 수 없고, 결정론적인 상태 머신의 예를 예시한다.
도 25는 다양한 실시형태에 따른 신뢰할 수 없고, 결정론적인 상태 머신에 대한 프로세스의 예를 예시하는 플로우차트이다.
도 26은 소정의 피쳐를 갖는 상태 전이 매트릭스를 사용하는 상태 머신을 예시한다.
도 27은 상태 머신을 구현하는 데 사용 가능한 트랜잭션의 예를 예시한다.
도 28은 블록체인 트랜잭션을 사용한 스마트 계약의 일부의 포킹의 예를 예시한다.
도 29는 포킹 프로세스의 예시적인 의사 코드 시퀀스(pseudocode sequence)이다.
도 30은 블록체인 트랜잭션을 사용한 스마트 계약으로부터의 새로운 스마트 계약의 생성의 예를 예시한다.
도 31은 잠금 해제용 트랜잭션에서 스마트 계약을 강제하기 위한 예시적인 의사 코드 시퀀스이다.
도 32는 블록체인 트랜잭션을 사용한 스마트 계약에 대한 병합 동작의 예를 예시한다.
도 33은 약한 의존성을 갖는 병합 프로세스에 대한 예로서의 의사 코드 시퀀스이다.
도 34는 강한 의존성을 갖는 병합 프로세스에 대한 예로서의 의사 코드 시퀀스이다.
도 35는 블록체인 트랜잭션을 사용한 스마트 계약에 대한 병렬 프로세싱 동작의 예를 예시한다.
도 36은 병렬 트랜잭션 장벽 프로세스에 대한 예로서의 의사 코드 시퀀스이다.
도 37은 동시적 경로에서 블록체인 트랜잭션을 사용하여 계약 장벽에 따라 스마트 계약의 일부가 어떻게 실행될 수도 있는지의 예를 예시한다.
본 개시의 실시형태에 따른 블록체인과 관련되는 예시적인 블록체인 네트워크(100)를 예시하는 도 1에 대한 참조가 먼저 이루어질 것이다. 실시형태에서, 블록체인 네트워크(100)는, 블록체인 노드의 운영자 사이에서, 전체적으로 또는 부분적으로, 합의되는 블록체인 프로토콜을 따르는 동작을 수행하는 소프트웨어 및/또는 하드웨어의 인스턴스를 각각 실행하는 피어 투 피어의 분산된 전자 디바이스(peer-to-peer distributed electronic device)로서 구현될 수도 있는 블록체인 노드를 포함한다. 몇몇 예에서, 이들 분산된 전자 디바이스는, 도 1에서의 노드(102)와 같은 "노드"로서 간단히 지칭된다. 블록체인 프로토콜의 예는 비트코인 프로토콜이다.
노드(102)는, 컴퓨팅 리소스 서비스 공급자의 분산 시스템에서의 다수의 컴퓨팅 디바이스에 의한, 또는 임의의 적절한 전자 클라이언트 디바이스에 의한, 임의의 적절한 컴퓨팅 디바이스(예를 들면, 데이터 센터 내의 서버, 클라이언트 컴퓨팅 디바이스 예컨대 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 스마트폰, 등등)를 포함할 수도 있다. 노드(102)는, 트랜잭션(104)과 같은 제안된 트랜잭션을 나타내는 오브젝트 또는 데이터 메시지를 수신하기 위한 입력을 가질 수 있다. 노드(102)는 트랜잭션 상태의 그들의 이해와 같은, 그들이 유지하는 정보에 대해 질의 가능할 수도 있다.
도 1에서 도시되는 바와 같이, 몇몇 노드(102)는, 노드(102) 중 하나 이상의 다른 노드에 통신 가능하게 커플링될 수도 있다. 어떤 노드(102)가 어떤 다른 노드와 통신할 수 있는지에 관해서, 그들 세부 사항은 중앙에서(centrally) 결정될 필요가 없다. 블록체인 프로토콜이 나타내는 메시지가 포워딩되어야 한다는 것을 가정하여, 하나의 노드(102)로부터 다른 노드(102)로 전달되는 메시지가 블록체인 네트워크(100) 전체를 통해(또는 그것의 어떤 상당한 부분을 통해) 전파될 수 있도록 블록체인 네트워크(100) 내의 활성 노드가 하나 이상의 다른 노드(102)와 통신할 수 있는 것이면 충분할 수도 있다. 하나의 그러한 메시지는 노드(102A) 중 하나에 의한 제안된 트랜잭션의 발행일 수도 있는데, 그 제안된 트랜잭션은, 그 다음, 경로(106)와 같은 경로를 따라 전파될 것이다. 다른 그러한 메시지는, 블록체인 상으로의 포함을 위해 제안되는 새로운 블록의 발행일 수도 있다.
도 2는, 도 1의 블록체인 네트워크에서의 노드로서 블록체인 환경에서 사용될 수도 있는 블록체인 노드(202)의 예를 예시한다. 예시되는 바와 같이, 프로세서(204), 프로그램 메모리(206), 블록체인 규칙 및 프로토콜 세부 사항(208)을 위한 스토리지, 피어의 리스트(210), 애플리케이션 변수를 위한 스토리지(212), 통신 인터페이스(214), 및 블록체인 원장(216)을 위한 스토리지를 포함하는 블록체인 노드(202)가 도시된다. 블록체인 원장(216)은, 트랜잭션(230(1)-(4))을 갖는 블록(222)과 같은 트랜잭션에 대응하는 데이터를 포함하는 블록(221, 222, 223)과 같은 블록체인 내의 블록에 대응하는 데이터를 포함한다. 블록(223)을 제외한 블록은, 후속 블록이 불변으로 될 때 블록 상에서 계산되는 값에 의존하고 불변의 블록에 대한 임의의 수정이 다른 블록체인 노드에 의해 무효한 블록으로서 쉽게 인식될 수 있다는 점에서, 암호화적으로 불변일 수도 있다. 블록(223)은, 어쩌면 변하기 쉬울 수도 있고 아직 블록체인에 커밋되지 않을 수도 있는 트랜잭션의 스토리지를 나타내는 열린 박스로서 예시되어 있다.
블록체인 노드(202)는 통신 인터페이스(214)를 통해 통신하는데, 통신 인터페이스(214)는 유선 또는 무선 통신 중 하나 이상으로서 구현될 수 있다. 블록체인 원장(216)은 블록체인 네트워크의 블록체인 원장의 완전한 사본 또는 그 일부일 수도 있다. 몇몇 블록체인 노드는 양도되지 않은 트랜잭션만 유지할 수도 있고, 한편 다른 것은 전체 원장을 유지 유지할 수도 있다. 이러한 방식으로, 원장은, 각각의 노드가 그 자신의 사본을 가질 수 있으므로, 분산 원장이다. 노드는 프로토콜의 규칙에 따라서만 자신의 사본을 수정하는 것이 바람직하며, 그들 규칙을 완전히 따르는 모든 노드의 경우, 그들의 사본은, 가끔은, 다른 노드와 동일해야 하고, 블록 및 트랜잭션에 대한 약간의 전파 시간을 절약해야 한다. 블록체인 노드는, 자신이 수신하는 블록 및 그들 블록 내의 트랜잭션을 검증하는 능력을 포함해야 한다. 블록체인 프로토콜의 규칙은, 블록체인 노드가 트랜잭션의 블록이 무효하다는 것을 결정하는 경우, 블록체인 노드는 블록 또는 트랜잭션을 다른 노드로 전파하지 않아야 한다는 것일 수도 있다. 그 규칙을 사용하여, 유효하며 유효한 것으로 검증되는 블록 및 트랜잭션은 블록체인 네트워크를 전파할 수도 있고, 한편 무효한 블록체인 트랜잭션은 그렇지 않을 수도 있다.
블록체인 네트워크 내의 노드 중 일부는, 새로운 블록이 블록체인에 커밋될 수 있도록 트랜잭션을 수집하고 트랜잭션 블록을 생성하는 동작을 수행하는 채굴자 노드일 수도 있다. 채굴자 노드는 (불량 노드가 부적절한 블록을 쉽게 생성하는 것을 방지하기 위해) 복잡할 뿐만 아니라 (불량 노드가 미리 복잡한 동작을 수행할 수 없도록) 포함된 트랜잭션의 데이터에 의존하기도 하는 몇몇 동작을 수행할 것으로 예상될 수도 있는데, 그들 태스크의 성능은 다른 노드에서 쉽게 검증된다. 그들 다른 노드가 채굴자 노드의 작업을 검증하고, 검증이 완료되면, 그들은 그 블록을 블록체인의 그들의 사본 안으로 수용하고 그것을 전파한다. 이것은 블록체인의 분산 원장에게 새로운 블록을 커밋한다. 몇몇 예에서, 블록은 트랜잭션의 그룹이며, 종종 이전 블록의 "핑거프린트"(예를 들면, 해시) 및 타임스탬프와 함께 마킹된다. 이러한 방식으로, 각각의 블록은 이전 블록에 연결되고, 그에 의해, 블록체인에서 블록을 연결하는 "체인"을 생성한다. 실시형태에서, 유효 블록은 블록체인 네트워크 내의 노드의 합의에 의해 블록체인에 추가될 수도 있다. 또한, 몇몇 예에서, 블록체인은 유효성이 확인된 블록의 리스트를 포함한다.
한 실시형태에서, 노드 중 적어도 일부는 본 개시에서 설명되는 바와 같이 트랜잭션의 유효성을 확인하는 검증 노드로서 동작한다. 몇몇 예에서, 블록체인은 디지털 자산의 형태로 가치를 증명하고, 블록체인의 트랜잭션은, 함께, (블록체인을 시작하는) 최초 트랜잭션으로부터의 또는 채굴자 노드 운영자가 참가하는 이유로서 새롭게 "채굴된" 디지털 자산을 생성하는 분배 트랜잭션으로부터의 체인을 후속 트랜잭션으로 제공한다. 체인의 한 부분의 끝은 양도되지 않은 트랜잭션, 또는 그 일부분일 것이고, 블록체인 상의 각각의 트랜잭션은 하나 이상의 출력을 명시하는데, 그들 중 일부는 양도될 수도 있고 일부는 양도되지 않을 수도 있으며, 출력은 그 출력의 값의 명세 및 체인의 그 부분을 확장시킬 유효 트랜잭션(즉, 명시된 요건을 적어도 충족하는 트랜잭션)을 삽입하는 것에 의해 누군가가 그 출력을 "잠금 해제"하는 데 필요한 요건을 포함한다. 본원에서 사용될 때, 미지출 트랜잭션 출력은 UTXO로서 지칭될 수도 있다. UTXO의 잠금을 해제하는 것은 기술 분야에서 UTXO를 지출하는 것으로도 또한 알려져 있을 수도 있다.
누군가가 UTXO를 잠금 해제하는 데 필요한 요건은 UTXO의 잠금용 스크립트에서 명시될 수도 있다. 유효한 잠금 해제용 트랜잭션은, (i) 하나 이상의 이전 UTXO를 트랜잭션 입력으로서 명시하는 - 명세는 UTXO에 대한 포인터와 함께 있을 수도 있음 - , (ii) 그들 UTXO의 각각에 대한 잠금용 스크립트(들)의 요건을 충족하는, 그리고 (iii) 그들 입력에 의해 지시되는 UTXO의 모두의 값의 합이 트랜잭션의 출력 모두의 값의 합 이하이도록 하는 입력을 갖는 것일 수 있다. 잠금용 스크립트의 요건의 충족을 나타내는 데이터는 잠금 해제용 스크립트로 지칭될 수 있다. 유효성을 확인하는 노드는 잠금 해제용 스크립트를, 후속하여 잠금용 스크립트를 프로세싱할 수 있고, 그 프로세스의 출력은, 무효한 결과이거나 또는 잠금 해제용 트랜잭션의 유효성 확인 중 어느 하나이다.
프로세스는 상태 비보존형(stateless) 프로세스일 수 있고, 그 결과, 하나의 노드가 그 잠금 해제용 스크립트 및 그 잠금용 스크립트를 실행하면, 결과는 다른 노드에서의 결과일 유효성 확인이다. 따라서, 아직 양도되지 않은 블록체인 상에 이미 있는 이전 트랜잭션의 출력의 잠금용 스크립트를 충족하는 잠금 해제용 트랜잭션이 전파될 수도 있고 결국 블록체인에 커밋될 수도 있다. 커밋된 잠금 해제용 트랜잭션을 생성한 노드는, 이어서, 누군가가 그 새로운 트랜잭션의 출력의 값(들)을 잠금 해제하는 데 필요한 요건을 그 자신의 잠금용 스크립트(들)에서 명시했을 것이다. 프로세스는, 스크립트가 스크립트 외부의 참조를 참조할 필요가 없고, 어떤 작은 예외를 가지면서, 그들 스크립트 외부의 변수 또는 다른 상태에 의존하지 않을 수도 있다는 점에서 상태 비보존형인 것으로 간주될 수도 있다. 결과적으로, 잠금 해제용 스크립트 및 잠금용 스크립트는 별개로 평가될 수 있다.
다른 변형예에서, 블록체인 시스템은, 외부 데이터가 스크립트 평가 프로세스에 포함되는 것을 허용하는 기능성을 포함할 수도 있다. 그러한 경우에, 외부 데이터는, 잠금 해제용 스크립트 및 잠금용 스크립트가 외부 데이터를 사용하여 평가될 때, 평가는 평가를 수행하는 노드에 걸쳐 일관될 수도 있는 방식으로 제어 및/또는 보호될 수 있다.
도 3은, 도 2의 블록체인 노드에 의해 사용되는 블록체인 원장에 저장될 수도 있는 것과 같은 트랜잭션(300)의 예를 예시한다. 유사한 기능성을 갖는 다른 변형예도 가능하다. 트랜잭션의 데이터 엘리먼트 또는 필드는 도 3에서 도시되는 바와 같을 수도 있고 본 개시에서 설명되는 것들 이외의 추가 필드를 포함할 수도 있다. 도시되는 바와 같이, 트랜잭션(300)의 블록체인 프로토콜 버전을 나타내는 값을 갖는 블록체인 버전 필드(302)가 존재한다. #vin 필드(304)는, 트랜잭션(300)에 얼마나 많은 트랜잭션 입력(하기에서 설명됨)이 존재하는지를 나타낸다. 다른 필드가 존재할 수도 있고 예시되지 않을 수도 있지만, 그러나, 각각의 트랜잭션 입력(여기에서는 Vin[y](310)으로서 예시됨)에 대해, 이전 트랜잭션의 트랜잭션 ID(TxID)(311), 그 이전 트랜잭션(트랜잭션 입력(310)과 매치하는 트랜잭션 출력을 공급하는 트랜잭션)의 출력 중 하나에 대한 포인터(312)를 포함하는 필드의 세트가 존재할 수도 있는데, TxID(311) 및 포인터(312)는, 함께, 이전 트랜잭션의 출력을 참조하는 포인터(313)를 형성한다. 본원에서 사용될 때, 용어 "이전 트랜잭션"은 현재(current) 또는 본(present) 트랜잭션과 관련한 맥락에서 사용되는 경우, 현재 또는 본 트랜잭션에 의해 참조되는(및 "양도되는") 트랜잭션 출력을 갖는 특정한 사전 트랜잭션(또는 트랜잭션들)을 지칭할 수도 있다. 예를 들면, 현재 또는 본 트랜잭션은 "잠금 해제용 트랜잭션"으로 지칭될 수도 있다.
몇몇 블록체인 구현예에서, 고유한 TxID 값을 할당하기 위한 중앙 집중식 메커니즘은 없으며, 대신, 예컨대 트랜잭션 그 자체의 콘텐츠의 해시를 생성하는 것에 의해, 트랜잭션에 대한 고유한 TxID를 생성하기 위한 탈집중화된 메커니즘이 있다. 유효 트랜잭션이 다른 유효 트랜잭션과 정확히 동일한 콘텐츠 모두를 가질 수 없기 때문에, 각각의 유효 트랜잭션은 자신의 TxID에 대해 고유한 해시를 가질 수도 있다(해시 충돌의 천문학적으로 낮은 가능성을 제외함). 그러나, 구현될 때, 본원에서, 각각의 트랜잭션은 고유의 트랜잭션 ID를 갖는다는 것이 가정된다. 해싱의 본질에 기인하여, 일단 트랜잭션의 콘텐츠로부터 TxID가 생성되면, 그 콘텐츠 중 어느 것도 변경될 수 없으며 TxID가 그 트랜잭션에 대해 유효하게 유지되게 한다.
도 3에서 도시되는 바와 같이, 트랜잭션 입력 Vin[y](310)에 대한 필드의 세트는 또한, 후속하는 스크립트의 길이를 나타내는 Unlocking_Script_Length 필드(314), 포인터(313)에 의해 지시되는 트랜잭션 출력의 대응하는 잠금용 스크립트를 "잠금 해제하는" vin[y](310)에 대한 잠금 해제용 스크립트를 포함하는 Unlocking_Script 필드(315), 및 트랜잭션(300)을 제한하기 위해 사용될 수도 있는 시퀀스 # 필드(316)를 포함한다.
도 3이 하나의 트랜잭션 입력 및 하나의 트랜잭션 출력만을 명시적으로 도시하지만, 각각이 하나보다 많은 것도 가능할 수도 있다. 트랜잭션 입력에 후속하여, 트랜잭션(300)에 얼마나 많은 트랜잭션 출력(또한 하기에서 설명됨)이 존재하는지를 나타낼 수도 있는 #vout 필드(320)가 있을 수도 있다. 각각의 트랜잭션 출력(여기서는 예시적인 Vout[x](330)으로서 예시됨)에 대해, 이 트랜잭션 출력(Vout[x](330))에 의해 제공되는 트랜잭션 가치를 나타내는 출력 값 필드(332), 후속하는 스크립트의 길이를 나타내는 Locking_Script_Length 필드(334), 이 트랜잭션 출력(Vout[x](330))에 대한 잠금용 스크립트를 포함하는 Locking_Script 필드(336)를 포함하는 필드의 세트가 존재할 수도 있다. 설명되는 바와 같이, 이 트랜잭션 출력의 트랜잭션 가치는, 그 잠금 해제용 스크립트 및 그 잠금용 스크립트를 사용하여 검증을 수행할 때 블록체인 노드가TRUE로서 검증할 수도 있는 잠금 해제용 스크립트를 갖는 트랜잭션 입력을 갖는 잠금 해제용 트랜잭션을 생성할 수 있는 누군가에 의해 "양도될" 수 있다. 명시된 미래의 시간 이전에 또는 명시된 미래의 블록 이전에 활성화되지 않도록 트랜잭션(300)을 제한할 수도 있는 잠금 시간 필드(338)와 같은, 다른 필드가 트랜잭션 출력 필드에 후속할 수도 있다. 잠금 해제용 트랜잭션의 각각의 트랜잭션 입력이 이전 트랜잭션 출력의 대응하는 트랜잭션 출력을 가리키고 이전 트랜잭션 출력이 트랜잭션 가치를 포함하는 경우, 트랜잭션 입력은 그 트랜잭션 가치를 나타내는 필드를 포함할 필요는 없다.
도 4는 비트코인 블록체인 환경에 고유한 블록체인 트랜잭션(400)의 예를 예시한다. 이 예에서, 블록체인 트랜잭션(400)는 도시되는 데이터 엘리먼트 또는 필드를 포함하며 본 개시에서 도시되거나 또는 설명되는 것 이외의 추가 필드를 포함할 수도 있다. 트랜잭션(400)은 트랜잭션(400)의 버전을 나타내기 위한 값을 갖는 nVersion 필드(402)를 포함한다. #vin 필드(404)는 트랜잭션(400)에 얼마나 많은 트랜잭션 입력이 존재하는지를 나타낼 수도 있다. 트랜잭션 입력 Vin[y](410)과 같은 각각의 트랜잭션 입력에 대해, 이전 트랜잭션을 참조하는 해시(411), 그 이전 트랜잭션의 특정한 출력을 가리키는 포인터 n(412), 후속하는 잠금 해제용 스크립트의 길이를 나타내는 scriptSigLen 필드(414), 그 트랜잭션 입력 Vin[y](410)에 대한 잠금 해제용 스크립트를 포함하는 scriptSig 필드(415), 및 트랜잭션(400)을 제한하기 위해 사용될 수도 있는 nSequence 필드(416)를 포함하는 필드의 세트가 존재할 수도 있다.
트랜잭션 입력에 후속하여, 트랜잭션(400)에 얼마나 많은 트랜잭션 출력이 존재하는지를 나타내는 #vout 필드(420)가 있을 수도 있고, 각각의 트랜잭션 출력(여기서는 예시적인 Vout[x](430)로서 하나가 예시됨)에 대해, 이 트랜잭션 출력(Vout[x](430))에 의해 제공되는 트랜잭션 가치를 나타내는 nValue 필드(432), 후속하는 잠금용 스크립트의 길이를 나타내는 scriptPubKeyLen 필드(434), 및 이 트랜잭션 출력(Vout[x](430))에 대한 잠금용 스크립트를 포함하는 scriptPubKey 필드(436)를 포함하는 필드의 세트가 존재할 수도 있다. 트랜잭션(440)은 또한, 명시된 미래의 시간 이전에 또는 명시된 미래의 블록 이전에 활성화되지 않도록 트랜잭션(400)을 제한할 수도 있는nLockTime 필드(438)와 함께 도시될 수도 있다.
OP 코드
많은 비트코인 블록체인 노드에서 사용되는 것과 같은 스크립팅 언어의 예에는, 잠금용 스크립트 또는 잠금 해제용 스크립트와 같은, 스크립트에서 스크립트 명령어로서 나타날 수 있는 동작 코드(operation code)(OP 코드)의 세트가 존재할 수도 있다. 본 개시에서, 다양한 동작을 수행하기 위해 다양한 스크립트 OP 코드 및 키워드가 참조된다. 그러나, 다른 블록체인 기술이 상이한 명령어 세트를 구현할 수 있고, 따라서 본 개시에 설명되는 동작 코드는 동작 코드에 의해 수행되는 동작을 예시하는 것으로 간주되어야 한다는 것이 고려된다.
본 개시의 소정의 실시형태는, 설명되는 명령어의 세트를 구현하기 위한 스크립팅 시스템 또는 다른 시스템이 단일의 스크립트에서 200 개보다 더 많은 명령어(예를 들면, 200 개보다 더 많은 OP 코드)를 허용한다는 가정하에 동작한다. 마찬가지로, 본 개시의 소정의 실시형태는, 본 개시에서 언급되는 동작 코드에 의해 제공되는 기능성이 존재하고 명령어의 동작 코드 스크립트/세트를 실행하는 시스템에서 인에이블된다는 것을 추가로 가정한다. 본 개시에서 언급되는 동작 코드의 예는 다음의 것을 포함한다:
스택으로부터 최상부의 두 개의 아이템을 팝핑하고, 그들을 추가하고 결과를 스택 상으로 푸시하는 OP_ADD
스택으로부터 최상부의 두 개의 아이템을 팝핑하고, 제2 아이템을 제1의 것으로 나누고 나머지를 스택으로 푸시하는 OP_BIGMOD
스택으로부터 최상부의 세 개의 아이템을 팝핑하고, 제1 아이템 모듈로(modulo) 제3 아이템 및 제2 아이템 모듈로 제3 아이템의 모듈로 가산(modulo addition)을 수행하고, 결과를 스택 상으로 푸시하는 OP_BIGMODADD
스택으로부터 최상부의 두 개의 아이템을 팝핑하고, 제1 아이템 모듈로 제2 아이템의 모듈로 음의 지수 연산을 수행하고, 결과를 스택 상으로 푸시하는OP_BIGMODINVERSE
스택으로부터 최상부의 세 개의 아이템을 팝핑하고, 제1 아이템 모듈로 제3 아이템 및 제2 아이템 모듈로 제3 아이템의 모듈로 승산(modulo multiplication)을 수행하고, 결과를 스택 상으로 푸시하는 OP_BIGMODMUL
스택으로부터 최상부의 두 개의 아이템을 팝핑하고, 두 아이템을 사슬 연결하고 결과를 스택 상으로 푸시하는 OP_CAT
스택으로부터 두 개의 아이템을 팝핑하고, 제1의 것을 공개 키로서 그리고 제2의 것을 서명으로서 사용하여, 팝핑된 서명이 유효한 서명인지의 여부를 체크하고, 유효한 경우, 1(TRUE)을 스택상으로 푸시하고, 그렇지 않으면, 0(FALSE)을 스택 상으로 푸시하는 OP_CHECKSIG
OP_CHECKSIG와 동일하게 기능하지만, 그러나, 나중에 OP_VERIFY가 실행되는 OP_CHECKSIGVERIFY
스택으로부터 두 개의 아이템을 팝핑하고, 제1 아이템으로부터 제2 아이템을 나누고, 결과를 스택 상으로 푸시하는 OP_DIV
스택 상의 최상부 아이템 사본을 스택 상으로 푸시하고, 따라서 최상부 아이템을 복제하는 OP_DUP
선행 OP_IF 또는 OP_NOTIF 또는 OP_ELSE가 실행되지 않은 경우, 이들 명령문이 실행되고; 그렇지 않고, 선행 OP_IF 또는 OP_NOTIF 또는 OP_ELSE가 실행된 경우, 이들 명령문이 실행되지 않는 OP_ELSE.
if/else 블록을 종료하는 OP_ENDIF
스택 상의 처음 두 개의 아이템을 판독하고 두 개의 아이템이 정확히 동일한 경우, 스택 상으로 1을, 그렇지 않으면 0을 푸시하는 OP_EQUAL
OP_EQUAL과 동일하지만, 그러나 나중에 OP_VERIFY를 실행하는 OP_EQUALVERIFY
입력을 메인 스택의 최상부 상에 놓고 대안적인 스택에서 그것을 제거하는 OP_FROMALTSTACK
입력이 두 번: 먼저 SHA-256을 사용하여 그 다음 RIPEMD-160을 사용하여 해싱되는 OP_HASH256
최상부 스택 값이 False가 아닌 경우, 명령문이 실행되고 최상부 스택 값이 제거되는 OP_IF
스택 상의 최상부의 두 개의 아이템을 승산하는 OP_MUL
최상부 스택 값이 False인 경우, 명령문이 실행되고 최상부 스택 값이 제거되는 OP_NOTIF
스택 상의 제2 아이템을 복사하여 그것을 스택의 최상부 상으로 푸시하는 OP_OVER
스택에서 n 아이템 깊이에 있는 아이템이 최상부로 이동되는 OP_ROLL
문자열의 섹션을 반환하는 OP_SUBSTR
스택 상의 최상부의 두 개의 아이템을 스왑하는 OP_SWAP
입력을 대안적인 스택의 최상부 상에 놓고 그것을 메인 스택으로부터 제거하는 OP_TOALTSTACK
최상위 스택 값이 참이 아닌 경우 트랜잭션을 무효한 것으로 마킹하는 OP_VERIFY
상기의 OP 코드 중 일부는 블록체인 노드에 의해 지원되는 기본 OP 코드일 수도 있고, 반면 다른 것은 설명의 명확성을 위해 OP 코드로서 참조되지만 그러나 통상적으로 다수의 기본 OP 코드로 구성되는 작은 스크립트로서 구현된다. 예를 들면, OP_BIGMOD는 OP 코드로 참조되지만, 그러나 스택 상의 최상부의 두 개의 아이템을 나눈 이후 나머지를 반환하는 기능을 수행하기 위해 OP 코드의 시퀀스를 사용하여 구현될 수도 있다. OP_BIGMODADD, OP_BIGMODINVERSE, 및 OP_BIGMODMUL은 OP 코드의 유사한 시퀀스에 의해 간단한 방식으로 표현될 수도 있다.
OP_GENSIG: 본 개시에서, OP_GENSIG에 대한 언급은 본원에서 설명되는 OP_GENSIG 스크립트에 대응하는 동작에 대한 약칭으로서 간주되어야 한다. OP_GENSIG 스크립트는 트랜잭션의 서명을 생성하는데, 그 서명은, 이어서, 스택 상으로 푸시될 수도 있거나 또는 사용될 수도 있다. OP_GENSIG 스크립트는, 메인(후입선출(last-in, first-out)) 스택 상으로 푸시되는 입력이, 순서대로, <SIGHASH Type(타입)>(트랜잭션의 어떤 필드가 해시에서 사용될지를 나타냄), 메시지 값 <m>(트랜잭션의 사용된 트랜잭션 필드의 직렬화된 세트의 이중 SHA256), 개인 키 <a>(메시지 값 <m>을 해싱함에 있어서 사용됨), 및 숫자 <k>(개인 키를 마스킹/보호하기 위해 사용되는 난수 또는 의사랜덤 숫자; "마스크 숫자(mask number)")이다는 가정을 가지고 시작한다.
도 5는 OP_GENSIG 스크립트의 입력 및 출력을 도시한다. OP_GENSIG 스크립트에서, 제1 라인은 숫자 <k>로 하여금 대안적인 스택으로 복사되게 하고, 그 다음, 타원 곡선 생성기 <PubK G>에 대해 <k>를 승산하여 메인 스택의 최상부에 타원 곡선 포인트 K를 생성한다. 스크립트의 제2 라인은, r로 하여금, K 모듈로 n의 x 좌표로부터 계산되게 하고 r의 사본을 대안적인 스택으로 푸시한다. 스크립트의 제3 라인은 s = k-1(m + r × a) mod n을 결정한다. 마지막으로, 스크립트의 제4 라인은, r 및 s로 하여금 DER 포맷으로 인코딩되고 <SIGHASH Type>과 사슬 연결되게 한다.
서명 해시의 타입은 바이트 인코딩 값 SIGHASH Type에 의해 나타내어질 수 있다. SIGHASH Type 값은, 직렬화(예를 들면, 정규화) 및 해싱되기 이전에 트랜잭션으로부터 추출될 필드의 세트를 명시한다. 몇몇 예에서, SIGHASH Type 값은 SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE, SIGHASH_ANYONECANPAY 또는 이들 중 두 개 이상의 어떤 조합일 수 있다. 한 실시형태에서, 타입 SIGHASH_ALL은, 입력 스크립트를 제외한, 트랜잭션 내의 모든 필드가 직렬화에 포함될(따라서 해싱되고 서명될) 것이다는 것을 나타낸다. 한 실시형태에서, 타입 SIGHASH_NONE은, 출력이 서명될 필요가 없다는 것을 나타내는데, 이것은 다른 것이 트랜잭션을 업데이트하는 것을 허용할 수 있다. 한 실시형태에서, 타입 SIGHASH_SINGLE은, 입력이 서명되지만 그러나 시퀀스 번호는 비워진다는 것을 나타내고, 따라서 다른 것은 (해싱되는 필드가 변경되지 않는다는 것을 가정하여) 동일한 해시를 사용할 트랜잭션의 새로운 버전을 생성할 수 있지만, 그러나 서명되는 유일한 출력은 입력과 동일한 위치에 있는 것이다.
한 실시형태에서, 타입 SIGHASH_ANYONECANPAY는 다른 타입과 결합되며 SIGHASH_ANYONECANPAY를 포함하는 입력이 서명되지만 그러나 다른 입력은 서명될 필요가 없다는 것을 나타낸다. SIGHASH Type 값은 SIGHASH Type을 나타내는 숫자에 의해 표현될 수 있다. 예를 들면, 몇몇 구현예에서, SIGHASH_ALL은 1의 값을 갖는 바이트(예를 들면, 이진수 "00000001")에 의해 표현되고, SIGHASH_NONE는 2의 값을 갖는 바이트(예를 들면, 이진수 "00000010")에 의해 표현되고, SIGHASH_SINGLE은 3의 값을 갖는 바이트(예를 들면, 이진수 "00000011")에 의해 표현되고, 그리고 SIGHASH_ANYONECANPAY는 80의 값을 갖는 바이트(예를 들면, 이진수 "01010000")에 의해 표현된다. 몇몇 구현예에서, SIGHASH Type 값을 결합하는 것은, 각각의 바이트 값의 이진 가산에 의해 수행된다. 몇몇 예에서, SIGHASH Type에 의해 결정되는 트랜잭션 필드의 세트는, 직렬화되는 대응하는 트랜잭션의, SIGHASH Type 값에 의해 결정되는 바와 같은, 서브세트를 지칭한다. 예를 들면, SIGHASH_ANYONECANPAY을 갖는 SIGHASH Type에서, 단지 하나의 트랜잭션 입력만이 서명 내에 포함된다.
잠금 해제용 스크립트가 SIGHASH를 포함해야 한다는 것을 규정하는 것에 의해, 잠금용 스크립트는, 잠금 해제용 스크립트에 의해 제공되는 잠금 해제용 트랜잭션 필드의 직렬화된 세트가 실제로 SIGHASH의 소스였는지를 검증할 수 있고, 이어서, OP 코드(OP_CHECKSIG)를 사용하여, 잠금용 스크립트는, 잠금 해제용 스크립트에 의해 제공되는 SIGHASH Type 값이 잠금 해제용 트랜잭션의 서명 해시와 매치하는지를 검증할 수 있다. 잠금용 스크립트는 이것을 행할 수 있는데, 그 이유는, 잠금용 스크립트가 트랜잭션 검증자에 의해 실행될 때, 그 시간에, 트랜잭션 검증자가 OP_CHECKSIG 동작을 실행할 수 있고 실제 잠금 해제용 트랜잭션의 서명을 스택 상으로 배치할 수도 있기 때문이다.
OP_DERENCODE: 본 개시에서, OP_DERENCODE에 대한 언급은, 스택으로부터 최상부 두 개의 아이템을 팝핑하고, 그들을 DER 포맷으로 인코딩하고 결과를 스택 상으로 푸시하는 것에 대응하는 동작에 대한 약칭으로서 간주되어야 한다.
OP_ECPMULT: 본 개시에서, OP_ECPMULT에 대한 언급은, 스택으로부터 두 개의 아이템을 팝핑하고, 그들 두 개의 아이템의 타원 곡선 포인트 곱셈(타원 곡선 스칼라 곱으로 또한 칭해짐)을 수행하고, 결과를 스택 상으로 푸시하는 것에 대응하는 동작에 대한 약칭으로서 간주되어야 한다.
OP_ECPX: 본 개시에서, OP_ECPX에 대한 언급은, 스택으로부터 두 개의 아이템을 팝핑하고, 제1 아이템을 계수(modulus) n으로서 그리고 제2 아이템을 타원 곡선 포인트 K로서 사용하고, K 모듈로 n의 x 좌표를 계산하고, 결과를 스택 상으로 푸시하는 것에 대응하는 동작에 대한 약칭으로서 간주되어야 한다.
OP_PREVTXINJECTION: 본 개시에서, OP_PREVTXINJECTION에 대한 언급은, 잠금 해제용 트랜잭션의 입력 X에 대응하는 이전 트랜잭션의 삽입에 대응하는 동작에 대한 약칭으로서 간주되어야 한다. 도 6은 OP_PREVTXINJECTION 스크립트의 입력 및 출력을 도시한다.
OP_SELFTXINJECTION: 본 개시에서, OP_SELFTXINJECTION에 대한 언급은, 서명되고 있는 입력에 대응하는 이전 트랜잭션의 삽입에 대응하는 동작에 대한 약칭으로서 간주되어야 한다. 도 7은 OP_SELFTXINJECTION 스크립트의 입력 및 출력을 도시한다.
OP_SPENDINGTXINJECTION: 본 개시에서, OP_SPENDINGTXINJECTION에 대한 언급은 직렬화된 잠금 해제용 트랜잭션을 잠금용 스크립트에 삽입하는 것에 대응하는 동작에 대한 약칭으로서 간주되어야 한다. SIGHASH Type 값 및 SIGHASH Type에 따라 결정되는 잠금 해제용 트랜잭션 필드의 세트를 제공하는 임의의 엔티티는 트랜잭션 출력을 잠금 해제할 수 있다. 이것은 유용한 피쳐일 수 있다. 도 8은 OP_SPENDINGTXINJECTION 스크립트의 입력 및 출력을 도시한다.
OP_EXTRACTTXID: 본 개시에서, OP_EXTRACTTXID에 대한 언급은, 입력으로서 트랜잭션 ID 및 트랜잭션 ID 위치를 취하고 추출된 트랜잭션 ID를 출력하는 것에 대응하는 동작에 대한 약칭으로서 간주되어야 한다. OP_EXTRACTTXID에 대한 입력은, 직렬화된 트랜잭션 및 입력 인덱스를 나타내는 값 X이며, 출력은 그 직렬화된 트랜잭션에서 그 인덱스에 있는 트랜잭션 입력과 관련되는 트랜잭션 식별자이다. 직렬화된 트랜잭션이 직렬화된 트랜잭션의 다른 필드에 의해 나타내어지는 길이에서의 분산을 갖는 가변 길이를 갖는 필드를 포함할 수도 있기 때문에, 이 스크립트는 직렬화된 트랜잭션을 파싱하여 트랜잭션 ID를 추출하는 것을 필요로 할 수도 있다.
도 9는 한 쌍의 트랜잭션의 예를 예시한다. 트랜잭션을 검증하는 블록체인 노드(902)는 트랜잭션 검증자(904)를 가질 수도 있는데, 이것은 그것의 입력이 유효한지의 여부에 따라 TRUE 또는 FALSE 결과(906)를 출력하는 상태 비보존형 스택 기반의 트랜잭션 검증자일 수 있다. 다른 변형예에서, 트랜잭션 검증자는 반드시 상태 비보존형인 것은 아니고 및/또는 외부의 신뢰된 데이터 또는 상태를 참조할 수 있다. 여기에서의 교시는 스택 기반의 트랜잭션 검증자를 사용하지 않는 블록체인 시스템에도 또한 적용될 수도 있다.
트랜잭션 검증자(904)에 대한 입력은, 이전 트랜잭션(912)의 출력(양도되고 있는 트랜잭션 출력)으로부터의 잠금용 스크립트(910) 및 잠금 해제용 트랜잭션(922)의 입력(잠금 해제를 행하고 있는 트랜잭션 입력)의 잠금 해제용 스크립트(920)일 수도 있다. 비록 도시되지는 않지만 각각의 트랜잭션은 다른 필드를 포함할 수도 있다. 더욱 일반적인 경우에, 각각의 트랜잭션은 다수의 입력 및/또는 다수의 출력을 가질 수 있는데, 이 경우 잠금용 스크립트(910)는 이전 트랜잭션(912)의 복수의 트랜잭션 출력 중 하나에 대한 잠금용 스크립트일 수도 있고 잠금 해제용 스크립트(920)는 잠금 해제용 트랜잭션(922)의 복수의 트랜잭션 입력 중 하나에 대한 잠금 해제용 스크립트일 수도 있다.
상태 비보존형 스택 기반의 트랜잭션 검증자를 사용하여, 잠금용 스크립트(910) 및 잠금 해제용 스크립트(920)는, 어떤 작은 예외를 제외하고는, 별개로 프로세싱될 수도 있고 그들 스크립트 외부의 변수 또는 다른 상태에 의존하지 않을 수도 있다. 결과적으로, 잠금용 스크립트(910)는 잠금용 스크립트(910) 그 자체 외부의 이전 트랜잭션의 필드를 참조하지 않을 수도 있다. 잠금용 스크립트(910)는 또한 잠금 해제용 트랜잭션(922)의 필드를 참조할 수 없는데, 그 이유는, 그 이전 트랜잭션(912), 및 따라서 또한 잠금용 스크립트(910)가 생성되어 불변으로 되었던 시간에 잠금 해제용 트랜잭션(922)이 존재하지 않았기 때문이다.
잠금 해제용 스크립트(920)는, 상태 비보존형이기 위해, 또한, 잠금 해제용 트랜잭션(922)의 필드에 대해 직접적으로 동작할 수 없다. 상태 비보존형 품질은, 동일한 잠금용 스크립트(910) 및 동일한 잠금 해제용 스크립트(920)를 고려하면 임의의 적절하게 프로그래밍된 블록체인 노드가 동일한 결과(906)에 도달할 것이다는 것을 그것이 보장한다는 점에서, 유용할 수도 있다. 이것에 대한 하나의 예외는, 한 스크립트가, 트랜잭션 전체에서 생성되는 서명에 대비하여, 스크립트 중 하나에서의 서명을 체크하는 능력을 가질 수도 있다는 것이다. 한 실시형태에서, 스크립트는 이 목적을 위해 OP_CHECKSIG를 사용할 수 있다.
스택 기반의 동작에서, 트랜잭션 검증자는 스크립트 내의 각각의 OP 코드를 차례로 프로세싱하는 것에 의해 잠금 해제용 스크립트를 실행한다. 몇몇 OP 코드는 프로세싱으로 나타나거나, 몇몇은 데이터가 스택 상으로 푸시되거나 또는 스택으로부터 팝핑되는 것으로 나타나거나, 또는 어떤 조합으로 나타난다. 일단 잠금 해제용 스크립트의 실행이 완료되면, 스택 상에 남아 있는 데이터가 있을 수도 있다. 잠금 해제용 스크립트의 실행에 스크립팅 에러 또는 실행을 종료하는 OP 코드가 없는 경우, 그러면, 트랜잭션 검증자는 스택 상에 존재하는 그 데이터를 사용할 수 있는 잠금용 스크립트를 실행한다. 잠금용 스크립트 및 잠금 해제용 스크립트가 OP 코드의 동일한 세트를 사용하여 작성될 수도 있는 경우, 이것은, 잠금용 스크립트가 후속되는 잠금 해제용 스크립트의 사슬 연결을 포함하는 단일의 스크립트를 실행하는 것과 사실상 유사하다. 그러나, 잠금 해제용 스크립트의 OP 코드의 실행의 끝에서 그리고 잠금용 스크립트의 OP 코드의 실행 이전에 스크립팅 에러에 대한 체크를 하는 것은, 기형의 잠금 해제용 스크립트에 의해 야기되는 문제를 방지할 수 있다.
일단 스크립트의 실행이 완료되면, 스택의 최상부에 남아 있는 결과는 검증의 결과이다. TRUE가 스택의 최상부 상에 있는 경우, 그것은 잠금 해제용 스크립트가 실제로 잠금용 스크립트를 잠금 해제한다는 검증으로 간주될 수도 있다. 이와 관련하여, 잠금 해제용 스크립트는 잠금용 스크립트의 모든 요건을 충족한다.
도 10은 다수의 트랜잭션 및 다수의 입력/출력의 예를 예시한다. 도시되는 바와 같이, 이전 트랜잭션(1002)은 두 개의 트랜잭션 출력인, 자신의 잠금용 스크립트(1006)를 갖는 Vout[0](1004) 및 자신의 잠금용 스크립트(1016)를 갖는 Vout[1](1014), 및, 이전 트랜잭션(1002)에 대한 트랜잭션 입력과 같은, 도시되지 않은 다른 필드 중에서, 그들의 대응하는 트랜잭션 출력 값을 갖는다. 잠금 해제용 트랜잭션(1020)은 두 개의 트랜잭션 입력인 Vin[0](1024)(자신의 잠금 해제용 스크립트(1026) 및 자신의 대응하는 이전 트랜잭션 출력에 대한 포인터(1028)를 가짐) 및 Vin[1](1034)(자신의 잠금 해제용 스크립트(1036) 및 자신의 대응하는 이전 트랜잭션 출력에 대한 포인터(1038)를 가짐)과 함께 도시된다. 이 예에서, Vin[0]에 대한 대응하는 이전 트랜잭션 출력은 이전 트랜잭션(1002)(Previous(이전) Tx 1)의 Vout[0]이고, 한편 Vin[1]에 대한 대응하는 이전 트랜잭션 출력은 다른 트랜잭션(Previous Tx 2)의 어떤 출력(도시되지 않음)이다.
잠금 해제용 트랜잭션(1020)의 유효성을 확인하기 위해, 트랜잭션 검증자(1044)를 갖는 블록체인 노드(1042)는 자신의 입력 모두가 유효한지의 여부에 따라 TRUE 또는 FALSE 결과(1046)를 출력한다. 이 경우, 잠금 해제용 트랜잭션(1020)에 대해 다수의 입력이 존재할 수도 있고, 따라서 그들 각각은, 트랜잭션 입력의 잠금 해제용 스크립트 및 입력의 포인터에 의해 지시되는 대응하는 트랜잭션 출력의 잠금용 스크립트를 프로세싱하는 것에 의해 유효성이 확인된다.
다수의 출력 및 다수의 입력을 갖는 능력을 통해, 하나의 트랜잭션의 가치는 다수의 다른 트랜잭션에게 양도될 수 있고 새로운 트랜잭션에서 상환 가능한 가치는 하나보다 더 많은 이전 트랜잭션으로부터 유래할 수도 있다. 상기에서 설명되는 바와 같이, 잠금용 스크립트는, 서명 및 다른 암호화 기술을 통해, 잠금 해제용 스크립트에 있어야 하는 것에 대한 제약을 부과할 수 있다.
하나의 그러한 제약은, 잠금 해제용 스크립트가 어떤 임의의 데이터를 포함해야 한다는 것일 수도 있다. 어떤 제약은, 잠금 해제용 스크립트가 4 바이트, 또는 임의의 특정한 값이 되도록 그들 바이트를 제한하지 않는 어떤 특정한 수의 바이트의 길이를 갖는 어떤 데이터를 포함해야 한다는 제약과 같은, "약한 제약" 또는 더욱 일반적인 제약일 수도 있다. 더 강한, 또는 더욱 특정한 제약은, 데이터가 해싱될 때 데이터가 특정한 해시 값을 생성해야 한다는 것일 수도 있다. 누군가가 동일한 해시로 나타날 상이한 값을 결정하는 것이 거의 불가능할 수도 있기 때문에, 이 후자의 제약은, 데이터가 특정한 길이를 가져야 하고 그 데이터에 대한 특정한 값이어야 한다는 것을 통상적으로 규정한다. 제약은, 잠금 해제용 스크립트가 그 데이터를 스택 상으로 푸시하고, 또는 그 데이터의 해시를 스택 상으로 푸시하고, 잠금용 스크립트가 필요한 해시를 스택 상으로 푸시하게 하고 그 다음 OP_EQUAL을 그 다음 OP_VERIFY OP 코드를 실행하는 것에 의해 스크립트에서 구현될 수도 있다. 그들 OP 코드는, 그들 두 개의 푸시된 아이템이 매치하면 참을 반환할 것이고 그들이 매치하지 않으면 거짓을 반환할 것이다. 더욱 일반적인 경우에, 소정의 데이터가 존재해야 하거나 또는 소정의 특성을 갖는 데이터가 존재해야 한다는 것을 규정하는 제약이 부과될 수 있다.
약한 제약의 예는, 잠금 해제용 트랜잭션 필드의 직렬화된 세트를, 그들 필드가 임의의 특정한 값이어야 한다는 것을 반드시 규정하지 않으면서, 포함할 수도 있는 소정의 데이터를 잠금 해제용 스크립트가 포함해야 한다는 것이다. 이러한 방식으로, 잠금용 스크립트는, 잠금 해제용 스크립트가 유래한 잠금 해제용 트랜잭션의 필드를 포함하도록 그 잠금용 스크립트의 출력을 잠금 해제하는 잠금 해제용 스크립트의 스크립트를 제한할 수 있다. 이것은, 잠금 해제용 스크립트가 스택 상에 남겨두는 잠금 해제용 트랜잭션의 필드에 대해 잠금용 스크립트가 동작을 수행하는 것을 효과적으로 허용한다. 약한 제약의 다른 예는, 어쩌면 명시된 장소로부터 획득되는 소정의 데이터를 잠금 해제용 스크립트가 포함해야 한다는 것이지만, 그러나 이 경우 그 데이터의 값에 대한 제약은 없다. 이것은, 잠금용 스크립트가 불변인 훨씬 이후까지 데이터의 값이 결정되지 않더라도 부과될 수 있는 어떤 약한 제약을 허용한다.
제한하는 동작 및 제약의 데이터는, "스마트 계약"의 엘리먼트를 포함할 수도 있다. 스마트 계약은, 누가 무엇을 할 수 있는지, 그들이 그것을 언제 할 수 있는지, 및 누가 무엇을 언제 지불하는지에 관한 계약의 조건(terms and conditions)을 정의한다. 조건이 잠금 해제용 스크립트 또는 잠금 해제용 트랜잭션의 다른 부분에 대한 약한 또는 강한 제약으로서 표현될 수 있는 경우, 스마트 계약의 그들 조건은 블록체인 프로토콜에 의해 시행될 수 있다. 따라서, 잠금되는 트랜잭션 출력의 값을 Bob만이 잠금 해제할 수 있는(Bob만이 생성할 수 있는 잠금 해제용 스크립트만이 그 트랜잭션 출력을 잠금해제할 것이기 때문임) 상기의 예에서와 같이, 한 당사자에 의해 허여되는 허가의 획득시에만 그리고 소정의 시간 이후 그리고 다른 트랜잭션 출력이 지출된 이후에만, 등등, 그 다음, 트랜잭션 출력이 지출될 수 있는 제약이 존재할 수도 있다.
도 8은, 잠금 해제용 트랜잭션 필드의 직렬화된 세트의 삽입을 야기하기 위한 제약을 인코딩하는 스크립트에 대한 OP 코드 약칭인OP_SPENDINGTXINJECTION을 도시한다. 잠금용 스크립트는, OP 코드 OP_CHECKSIG(이것은 서명이 잠금 해제용 트랜잭션에 대한 유효한 서명인지에 대해 체크되는 것으로 나타날 것임)가 후속되는 OP 코드 OP_GENSIG(이것은 비트코인 서명의 생성으로 나타날 것임)를 포함할 수도 있다. OP_GENSIG가 유효한 서명을 생성하기 위해, 그것은 입력으로서 소정의 엘리먼트를 구비해야 한다: SIGHASH 타입 엘리먼트, 잠금 해제용 트랜잭션 필드의 직렬화된 세트(SIGHASH 타입 엘리먼트에 대응하는 특정한 세트)의 해시, 개인 키, 및 마스크 숫자(예를 들면, 개인 키를 마스킹/보호하기 위해 사용되는 난수 또는 의사 난수). 잠금용 스크립트에 해시 OP 코드, 개인 키 및 난수를 포함하는 것에 의해, 이것은 SIGHASH 타입 및 잠금 해제용 트랜잭션 필드의 직렬화된 세트를 제공하도록 잠금 해제용 스크립트를 효과적으로 제한한다.
도 11은 트랜잭션 필드의 직렬화된 세트로부터 서명을 생성하기 위한 프로시져를 예시한다. 이것은, 트랜잭션을 생성하고 있는 블록체인 노드 또는 트랜잭션의 어떤 다른 생성기에 의해 행해질 수도 있다. 도 11에서 예시되는 바와 같이, 직렬화된 트랜잭션(1110)(즉, 특정한 포맷의 일련의 데이터 오브젝트로 표현되는 트랜잭션)은 트랜잭션의 필드 값의 세트를 포함한다. 직렬화된 트랜잭션(1110)의 서명자(signer)는 SIGHASH Type(1112)을 선택하고 서명자의 개인 키를 제공한다. 블록체인 클라이언트/노드는, SIGHASH Type(1112)으로부터, 직렬화된 트랜잭션(1110)의 어떤 필드, 또는 수정된 필드가 사용될지를 결정할 수 있다. 해시가 생성되기 이전에 필드 중 일부가 수정될 수도 있다(그들을 제로로 설정하는 것 제외). 도 11의 예에서, SIGHASH Type은, SIGHASH_NONE | SIGHASH_ANYONECANPAY와 동일하게 설정되고 따라서 선택되는 필드는 수정된 직렬화된 트랜잭션(1114)에 의해 나타내어지는 것이다.
블록체인 클라이언트/노드는 수정된 직렬화된 트랜잭션(1114)의 해시를 생성하는데(예를 들면, 이중 SHA-256 해시를 수행함), 이것은 메시지인 m(1116)으로 나타난다. 직렬화된 트랜잭션(1110)을 핸들링하는 블록체인 클라이언트/노드는, 개인 키를 마스킹/보호하기 위해 통상적으로 난수 또는 의사 난수인 숫자 k(1118)를 선택한다. 숫자 k는 본 개시에서 때때로 "마스크 숫자"로 지칭된다. 그 다음, 블록체인 클라이언트/노드는, SIGHASH Type(1112), 메시지 m(1116), 서명자의 개인 키(1122), 및 숫자 k(1118)로부터의 서명 입력(1120)의 세트로부터 서명(1124)(이 예에서는, DER 인코딩된 EC 서명)을 생성한다. 그 다음, 서명(1124) 및 SIGHASH Type(1112)을 잠금 해제용 스크립트에서 사용될 수 있다.
도 12는, (잠금 해제용 트랜잭션의 필드의 직렬화된 세트와 같은) 잠금 해제용 트랜잭션의 사본을 포함하는 잠금 해제용 스크립트(1203)를 포함하는 잠금 해제용 트랜잭션(1200)의 한 예를 예시한다. 도 12에서 예시되는 바와 같이, 트랜잭션 입력 중 하나는 Vin[z]이다. 입력 Vin[z]는 이전 트랜잭션 TxID인 해시 및 그 이전 트랜잭션의 출력 숫자 n을 갖는다. 이들은 함께, Vin[z]가 잠금을 해제할 특정한 이전 트랜잭션의 특정한 출력에 대한 포인터(1202)를 형성한다. 트랜잭션 입력 Vin[z]는 잠금 해제용 스크립트(1203)를 갖는데, 잠금 해제용 스크립트(1203)는, 결과적으로, 여러 컴포넌트 또는 하위 스크립트(subscript)(1206, 1208, 1210, 1212)를 갖는다. 잠금 해제용 스크립트(1203)는 Previous Tx Z의 직렬화된 버전(1206)을 포함한다. 또한, 동일한 방식으로 직렬화되는, Previous Tx Z에게 양도된 출력을 갖는 트랜잭션인 Previous Tx Z'의 직렬화된 버전(1208)이 도시된다. 도시되지는 않지만, 추가적인 이전 트랜잭션이 포함될 수 있다. 잠금 해제용 스크립트(1203)는 또한, 잠금 해제용 트랜잭션(1200)의 어떤 필드가 포함되었는지를 나타내는 SIGHASH_TYPE 바이트(1210)를 포함한다.
이전 트랜잭션의 잠금용 스크립트는 OP_GENSIG 및 OP_CHECKSIG를 사용하여 잠금 해제용 트랜잭션을 포함하도록 잠금 해제용 스크립트를 제한하고, 이전 트랜잭션의 TxID 및 OP_EQUALVERIFY를 사용하여 Previous Tx Z의 직렬화된 버전(1206)을 포함하도록 잠금 해제용 스크립트를 제한한다. Previous Tx Z의 TxID는 잠금 해제용 트랜잭션의 필드로부터 추출될 수 있고 Previous Tx Z는 삽입될 수 있다. Previous Tx Z 그 자체가 Previous Tx Z'의 TxID를 포함하기 때문에, 그 TxID는 추출될 수 있고 계속 그런 식일 수 있다.
잠금 해제용 트랜잭션의 트랜잭션 필드의 직렬화된 세트는 잠금 해제용 트랜잭션 그 자체의 잠금 해제용 스크립트(들)를 포함하지 않는다; 그렇지 않으면 그것은 인과 관계 문제(causality issue)를 가질 것이다. 비트코인 블록체인 환경과 같은 몇몇 실시형태에서, 트랜잭션의 서명 해시는 몇몇 미리 결정된 필드를 배제할 수 있다. SIGHASH Type은, 직렬화 및 해싱되기 이전에, 트랜잭션으로부터 필드의 어떤 세트가 추출되는지를 가리킬 수도 있다.
잠금 해제용 트랜잭션이 유효하기 위해서는, 잠금 해제용 트랜잭션의 잠금 해제용 스크립트가 잠금 해제용 트랜잭션의 필드 중 일부 또는 모두의 사본 및 잠금 해제용 트랜잭션이 잠금 해제하는 이전 트랜잭션(들) 중 하나 이상에 대한 참조를 포함할 필요가 있다는 요건을, 이전 트랜잭션의 잠금용 스크립트가 잠금 해제용 트랜잭션에 대해 부과할 수 있다. 물론, 잠금 해제용 트랜잭션의 필드는 잠금 해제용 트랜잭션이 생성되는 시간에 변하기 쉬울 수도 있다. 그러나, 잠금 해제용 트랜잭션의 잠금 해제용 스크립트의 일부인 잠금 해제용 트랜잭션의 그들 필드가 그들 제약을 충족하지 못하면, 잠금 해제용 트랜잭션은, 잠금용 스크립트가 실행될 때 유효성이 확인되지 않을 수도 있다는 점에서, 이전 트랜잭션의 잠금용 스크립트는 잠금 해제용 트랜잭션의 필드에 제약을 부과할 수 있다. 잠금 해제용 스크립트의 일부가 아닌 필드(예컨대, SIGHASH Type 값에 의해 포함되지 않는 또는 제로로 설정되는 필드)는 잠금용 스크립트에 의해 제한되지 않을 수도 있다. 또한, 직렬화된 잠금 해제용 트랜잭션에 포함되는 모든 필드가 제약을 가질 필요가 있는 것은 아니다. 예를 들면, 잠금용 스크립트는, 잠금 해제용 스크립트에 포함되는 직렬화된 잠금 해제용 트랜잭션의 많은 필드 중 하나만을 제한할 수도 있다.
이전 트랜잭션의 상이한 출력은, 아마도 상이한 잠금 해제용 트랜잭션의 상이한 입력 및 출력에 대해, 제약의 상이한 세트를 적용할 수 있다. 그러한 기술을 사용하여, 블록체인 노드는 그러한 잠금용 스크립트를 갖는 트랜잭션을 생성할 수 있고, 그 잠금용 스크립트는, 생성된 트랜잭션 출력이 양도됨에 따라, 그 트랜잭션 출력을 잠금 해제하는 트랜잭션, 등등이 다양한 데이터 엘리먼트 및 상태를 반드시 반송할(carry) 수도 있도록 다른 체크를 추가로 수행할 수 있다.
도 12의 트랜잭션은 상당히 복잡한 기능성을 가진 상태 머신을 구현하도록 확장될 수 있다. 상기에서 설명되는 바와 같이, 잠금용 스크립트는, 검증시, 잠금용 스크립트가 생성되고 고정된 이후에만 이용 가능할 수도 있는 데이터에 액세스할 수 있다. 그 데이터는, 검증되고 있는 잠금 해제용 트랜잭션의 필드의 세부 사항뿐만 아니라 잠금용 스크립트를 포함하는 이전 트랜잭션(및 어쩌면, 그 시간에 잠금 해제용 트랜잭션을 생성하고 있는 블록체인 노드에게 알려져 있는 다른 이전 트랜잭션)의 세부 사항을 포함할 수 있다. 이것은, 상태 머신의 상태가 스크립트에서 표현되는 것 및 상태 및 상태 전이가 구현되고 블록체인 환경의 신뢰할 수 없는 범위 내에서 발생하는 것을 허용한다. 다시 말하면, 상태 머신은, 블록체인 네트워크에 의해 핸들링되는 다른 트랜잭션에서와 마찬가지로 프로세싱되는 트랜잭션을 갖는 것에 의해, 반드시 신뢰되지는 않는 블록체인 노드에 의해 검증되는 트랜잭션을 사용하여 구현될 수 있다. 몇몇 예에서, "신뢰할 수 없는(trustless)"은, 임의의 엔티티가, 제약이 충족되고 그 엔티티가 신뢰될 필요가 없는 한, 유효한 잠금 해제용 트랜잭션을 생성할 수 있다는 속성(property)을 가리킨다. 그러나, 몇몇 경우에, 엔티티는 필요한 입력을 획득하기 위해 결정된 소스와 상호 작용하는 것을 필요로 할 수도 있다. 몇몇 실시형태에서, 하나 이상의 입력은 미결정 소스로부터, 예컨대 직렬화된 이전 트랜잭션으로부터 획득될 수 있다.
블록체인 네트워크에서, 트랜잭션은 (트랜잭션 입력이 잠금 해제하는 이전 트랜잭션의 트랜잭션 출력 값에 의해 결정되는) 자신의 입력에 대한 어떤 값 및 자신의 출력에 대한 어떤 값을 갖는다. 유효하기 위해서는, 출력의 합은 입력의 합을 초과할 수 없고(이 설명을 위해 따로 설정될 수 있는 분배 트랜잭션 및 최초 트랜잭션을 제외), 채굴자 노드에 의해 점유되기 위해서, 출력은, 채굴자 노드 운영자가 참가할 이유를 제공하도록, 입력 보다 더 작을 수도 있다. 블록체인 네트워크를 사용하여 신뢰할 수 없는 결정론적 상태 머신을 구현함에 있어서, 상태 머신의 초기 상태는, 상태 머신의 상태 전이에 대응하는 트랜잭션을 채굴자가 포함할 이유를 제공하기에 충분한 가치를 포함하는 트랜잭션 내에 있을 것이다.
일반적인 경우에, 이전 트랜잭션의 잠금용 스크립트는 상태 머신을 구현함에 있어서, 잠금 해제용 트랜잭션의 콘텐츠를 제한하는, 특히, 잠금 해제용 트랜잭션의 다양한 트랜잭션 출력의 콘텐츠 및 본질(nature)을 제한하는 잠금용 스크립트를 사용하여 잠금 해제용 트랜잭션이 그 상태 머신의 상태 전이를 표현하도록, 사용될 수 있다. 따라서, 이전 트랜잭션의 출력의 잠금용 스크립트는, 사실상, 잠금 해제용 트랜잭션의 각각의 트랜잭션 출력이 어떻게 보일 필요가 있는지를 명시할 수 있다. 잠금용 스크립트는, 예컨대 잠금 해제용 트랜잭션의 Vout[0]이 소정의 데이터 및 스크립트 엘리먼트를 포함해야 한다는 것 및 잠금 해제용 트랜잭션의 Vout[1]이 소정의 다른 데이터 및 다른 스크립트 엘리먼트를 포함해야 한다는 것을 규정하는 것에 의해, 상이한 잠금 해제용 트랜잭션 출력의 상이한 특성을 규정할 수 있다.
SIGHASH Type 및 특정한 SIGHASH Type이 사용하는 잠금 해제용 트랜잭션 필드의 세트를 제공하는 임의의 엔티티는 트랜잭션 출력을 잠금 해제할 수 있다. 이런 방식에서, 몇몇 당사자는, 트랜잭션을 잠금 해제하고 잠금용 스크립트로부터 세부 사항을 진행시키는 것에 의해, 트랜잭션의 콘텐츠를 전파할 이유를 가질 것이다. 상기에서 언급되는 바와 같이, 몇몇 예에서, 트랜잭션 출력을 "잠금 해제"하는 것은, 트랜잭션 출력을 참조하고 유효한 것으로 평가될 수도 있는 잠금 해제용 트랜잭션을 생성하는 것을 가리키는데, 잠금 해제용 트랜잭션은, 그에 의해, 트랜잭션 출력으로 하여금 양도되게 할 수도 있다.
상기에서 설명되는 기술 및 장치를 사용하여, 스마트 계약을 구현하는, 상태 머신을 구현할 수 있는, 그리고 현재 트랜잭션, 현재 트랜잭션에 의해 출력이 양도된 이전 트랜잭션, 및 어쩌면 다른 사전 트랜잭션의 필드를 참조할 수 있는 스크립트를 포함하는 트랜잭션이 블록체인 원장 상에서 생성될 수 있다. 이들 기능을 통해, 트랜잭션 플로우는, 스마트 계약과 함께 또는 달리 사용하기 위해, 자기 복제 스크립트(self-replicating script)를 시행할 수 있다.
도 13은 잠금 해제용 트랜잭션(1320) 및 이전 트랜잭션(1310)을 예시한다. 이 예에서, 잠금 해제용 트랜잭션은, 이전 트랜잭션 및 그 이전 트랜잭션의 트랜잭션 출력 Vout[x](1314)을 참조하는 입력 Vin[0](1322)를 갖는다. 잠금 해제용 트랜잭션이 유효한 것으로 간주되기 위해서는, Vout[x]의 잠금용 스크립트의 제약이 충족되어야만 한다. 상기에서 설명되는 바와 같이, 잠금용 스크립트를 지시하는 잠금 해제용 트랜잭션 입력의 잠금 해제용 스크립트가 잠금용 스크립트 상에서 나타나는 공개 키에 의해 서명되는 유효한 서명을 제공할 수 있어야만 한다는 간단한 요건과 같이, 몇몇 제약은 간단할 수도 있다. 그러나, 잠금용 스크립트는, 본원에서 설명되는 바와 같이, 더욱 복잡한 제약을 제공할 수 있다.
예를 들면, 이전 트랜잭션(1310)의 Vout[x](1314)의 잠금용 스크립트는 잠금 해제용 트랜잭션의 출력에 대해 구체적으로 제약을 부과할 수 있다. 이 예에서 Vout[x](1314)의 잠금용 스크립트는 잠금 해제용 트랜잭션(1320)의 출력 Vout[0](1324)에 대해 제약의 세트(Constraint Set(제약 세트) 1)를, 그리고 잠금 해제용 트랜잭션(1320)의 출력 Vout[0](1326)에 대해 제약의 세트(제약 세트 2)를 부과한다. 특정한 경우에, 제약 세트 1 및 제약 세트 2는 동일하며 둘 모두는, 단지, 출력 Vout[0](1324) 및 Vout[1](1326)의 잠금용 스크립트가 이전 트랜잭션(1310)의 Vout[x](1314)의 잠금용 스크립트와 동일해야 한다는 것을 규정한다.
더욱 일반적인 경우, 제약은 단지 잠금용 스크립트를 복사하는 요건을 넘어설 수 있다. 추가적으로, 제약 세트는 잠금 해제용 트랜잭션 출력으로부터 출력까지 변할 수 있다. 제약은, 잠금 해제용 트랜잭션이 가질 수 있는 출력의 수, 각각의 출력의 값, 뿐만 아니라, 잠금 해제용 트랜잭션의 출력의 잠금용 스크립트에서 소정의 콘텐츠를 요구하는 것에 대한 것일 수 있다.
삽입된 잠금 해제용 트랜잭션의 출력에 대한 제약
도 14는 잠금 해제용 트랜잭션의 잠금용 스크립트에 대해 제약을 부과하는 이전 트랜잭션의 잠금용 스크립트의 일부(1400)의 예의 플로우차트이다. 이 예는, 스택 상에 데이터를 남겨둘 수도 있는, 잠금 해제용 트랜잭션 출력의 잠금 해제용 스크립트를 프로세싱하는, 그 다음, 이 프로세스를 수행하기 위해 이전 트랜잭션의 출력의 잠금용 스크립트를 프로세싱하는 스택 기반의 검증자에 의해 실행될 수도 있다. 잠금 해제용 스크립트의 프로세싱이 스택 상에 데이터를 남길 수 있기 때문에, 그리고 잠금 해제용 스크립트가, 예를 들면, 잠금 해제용 트랜잭션의 잠금용 스크립트의 상세(particulars)를 비롯하여, 스택 상에 잠금 해제용 트랜잭션의 직렬화된 콘텐츠를 남길 수 있기 때문에, 그들 상세는 검증 시간에 이용 가능할 수도 있다.
프로세스의 단계(1402)에서, 검증자는, 잠금 해제용 스크립트가 소정의 데이터를 포함하는지를 검증하고, 검증자는, 출력 단위 기반으로 행해질 필요가 없는 다른 검증을 수행할 수도 있다. 그러한 데이터의 예는, 잠금 해제용 트랜잭션 필드의 직렬화된 세트, 직렬화된 이전 트랜잭션, 더 앞선 트랜잭션에 대한 참조, 등등을 포함할 수도 있다. 단계(1404)에서, 검증자는, 그들 제약이 충족되었는지를 검사하고, 그렇지 않다면, 단계(1406)에서 정지하여, 잠금 해제용 트랜잭션을 무효화한다. 그렇지 않으면, 프로세싱은 단계(1408)에서 계속되는데, 여기서 검증자는 체크할 임의의 잠금 해제용 트랜잭션 출력이 있는지의 여부를 결정한다. 전체에 걸쳐 처음에, 검증자는 인덱스 i = 0을 설정할 수도 있고, 체크할 더 이상의 출력이 없으면, 단계(1410)에서 프로세싱의 다른 플로우로 이동한다.
출력의 각각의 인덱스에 대해, 검증자는 단계(1412, 1414 및 1416)를 수행하고, 그 다음, i를 증분시키고(단계(1418)), 고려할 더 이상의 인덱스가 없을 때까지 단계(1408)로 복귀한다. 다른 변형예에서, 인덱스를 1만큼 증분시키고 각각의 출력을 검증하는 대신, 검증자는 체크할 인덱스의 세트를 루프 스루할 수도 있는데, 이 경우, 세트는 반드시 i의 모든 값을 포함하지는 않고 및/또는 반드시 그들을 포함하고 그들을 증분 순서로 검증하지는 않는다. 그러한 변형예에서, 단계(1418)는 상응하여 상이한데, 체크되고 있는 인덱스의 특정한 세트에서 출력에 대한 인덱스 i를 루프 스루한다.
단계(1412)에서, 검증자는 잠금 해제용 트랜잭션의 Vout[i]의 잠금용 스크립트를 추출한다. 이것은, 스택 콘텐츠에 대한 OP_SUBSTR 동작을 사용하여 구현될 수도 있다. 다음으로, 단계(1414)에서, 검증자는, 이전 트랜잭션의 출력의 잠금용 스크립트에 기초하여, 잠금 해제용 트랜잭션의 Vout[i]의 잠금용 스크립트에 대해 어떤 제약이 있을지를 결정한다. 단계(1416)에서, 검증자는, 그 다음, 그들 제약을 검증한다. 이러한 방식으로, 잠금 해제용 트랜잭션의 입력에게 양도되고 있는 이전 트랜잭션의 출력의 잠금용 스크립트는, 잠금 해제용 트랜잭션의 출력에 대해 제약을 부과할 수 있다.
이전 트랜잭션 출력의 잠금용 스크립트는, 잠금 해제용 트랜잭션의 출력이 어떻게 양도될 수 있는지에 대한 규칙을 그 이전 트랜잭션 잠금용 스크립트가 지시하는 것을 허용하기 위해, 잠금 해제용 트랜잭션의 출력을 제한한다. 이들 제약은 이전 트랜잭션의 출력의 잠금용 스크립트에 하드코딩될 수 있거나 또는 그 제약은, 이전 트랜잭션의 그 출력을 지시하는 잠금 해제용 트랜잭션의 입력의 잠금 해제용 스크립트에 존재하는 데이터에 기초하여 결정될 수 있다.
도 15는, 도 14의 단계(1402 및 1414)에 대응하는 더욱 특정한 단계의 몇몇 예를 예시한다. 검증자가 단계(1402)를 수행하는 것의 하나의 예는, 잠금 해제용 트랜잭션의 입력에서의 잠금 해제용 스크립트 내의(또는 그 밖의 곳의) 데이터의 어떤 부분이 결정된 소스로부터 유래하는지를 검증자가 결정하는 단계(1502)를 수행하는 것이다. 결정된 소스는 잠금 해제용 트랜잭션의 직렬화 또는 직렬화된 사전 트랜잭션일 수도 있다. 대안적으로, 또는 추가적으로, 검증자는 단계(1504)를 수행하고 잠금 해제용 트랜잭션 데이터 세부 사항의 어떤 다른 검증을 수행할 수 있다.
이전 트랜잭션의 출력의 잠금용 스크립트가 잠금 해제용 트랜잭션의 출력의 잠금용 스크립트에 대해 부과할 수 있는 특정한 제약에 관해서는, 잠금 해제용 트랜잭션의 출력 Vout[i]의 잠금용 스크립트가 어떤 결정된 소스로부터의 데이터와 동일해야만("=="는 동등성(equality)에 대한 테스트를 가리킴) 하는 단계(1506)가 존재한다. 다른 예는, 잠금 해제용 트랜잭션의 출력 Vout[i]의 잠금용 스크립트가, 이전 트랜잭션의 출력의 잠금용 스크립트에 하드코딩되는 데이터와 동일해야만 하는 단계(1508)이다. 단계(1510)는, 결정된 소스로부터의 데이터에 기초하여 잠금 해제용 트랜잭션의 출력 Vout[i]에 대해 다른 제약이 부과되는 경우를 포괄하고, 단계(1512)는, 이전 트랜잭션의 출력의 잠금용 스크립트로부터의 하드코딩된 데이터에 기초하여 Vout[i]에 대해 다른 제약이 부과되는 경우를 포괄한다.
몇몇 경우에, 소스로부터의 또는 하드코딩되는 데이터의 전체 범위를 사용하는 대신, 데이터의 해시가 사용될 수 있고, 이 경우, 비교는 해시 단위로 행해진다.
사용될 데이터는 이전 트랜잭션으로부터, 예컨대 이전 트랜잭션의 출력의 잠금용 스크립트에 하드코딩되는 것으로부터 유래할 수 있거나, 또는 그것은, 잠금 해제용 트랜잭션으로부터 두 링크 떨어진, 이전 트랜잭션의 선행 트랜잭션(preceding transaction)(또는 그 선행 트랜잭션에 대한 참조)(즉, 자신의 출력 중 하나 이상이 이전 트랜잭션에게 양도된 트랜잭션)으로부터의 데이터일 수 있다. 이러한 방식으로, 사용되는 데이터는 이전 트랜잭션으로부터 분배 트랜잭션(들)(예를 들면, 비트코인 프로토콜에서의 코인베이스 트랜잭션(들))로의 체인 내의 임의의 트랜잭션으로부터 유래할 수 있다.
도 16은 이것의 예를 예시한다. 도 14의 프로세스(1400)에서의 단계(1402)(여기서 검증은, 잠금 해제용 스크립트가 소정의 데이터를 갖는다는 것임)의 경우, 단계(1602, 1604, 1608, 1610 및 1612)는, 잠금 해제용 트랜잭션의 잠금 해제용 스크립트가 트랜잭션의 체인 내의 트랜잭션에 대한 참조를 갖는지를 검증하기 위해 수행될 수도 있다.
단계(1602)에서, 검증자는 잠금 해제용 트랜잭션의 입력으로부터 트랜잭션 ID(TxID)를 추출하는데, 검증자는 잠금 해제용 스크립트에서 그것이 이용 가능한 경우 이것을 행할 수 있다. 검증자는, 그 다음, 단계(1604)에서, 잠금 해제용 스크립트가 또한 그 TxID에 대한 이전 트랜잭션의 직렬화된 사본을 포함하는지를 검증할 수 있다. 만약 아니라면, 검증자는 트랜잭션을 무효화할 수 있지만, 그러나, 만약 그렇다면, 단계(1608)에서, 검증자는 이전 트랜잭션으로부터의 TxID인, TxID'를 추출하고, 그 다음, 단계(1610)에서, 이전 트랜잭션이 TxID'에 의해 참조되는 트랜잭션의 직렬화된 사본 또는 그에 대한 참조를 포함하는지를 검증한다. 이 체인은 n 번 계속될 수 있는데, 이 경우, 단계(1612)에서, 검증자는 TxID(n-1)'(n-1 프라임)에 의해 참조되는 트랜잭션이 TxIDn'(n 프라임)에 의해 참조되는 트랜잭션의 직렬화된 사본을 포함하는지를 검증한다.
도 16에서, 단계(1614 및 1616)는 TxIDn'에 의해 참조되는 트랜잭션의 사본에 대한 잠금용 스크립트를 추출하는 것 및 잠금 해제용 트랜잭션의 출력 Vout[i]의 잠금용 스크립트가 TxIDn'에 의해 참조되는 트랜잭션의 추출된 잠금용 스크립트와 동일하다는 제약을 검증하는 것을 수반한다.
제약은, 전체 잠금용 스크립트 대신, 출력의 잠금용 스크립트의 서브세트에 적용될 수 있다. 제약은, 전체 데이터 대신, 데이터의 서브세트로부터 결정될 수 있다. 예를 들면, 하나의 서브세트는, "Pay-to-Public-Key-Hash(공개 키 해시에 대한 지불)"가 나타나야 한다는 것을 규정할 수도 있고, 다른 서브세트는 "Pay to Bob(밥에 대한 지불)"이 나타나야 한다는 것을 규정할 수도 있다.
잠금 해제용 트랜잭션의 출력의 잠금용 스크립트가 두 부분 <x><y>에 의해 표현될 수도 있다는 것을 가정하는데, 여기서 <x> 및 <y>는, 제약이 <x> 및 <y>에 개별적으로 적용되도록 문자열 스플라이싱 동작을 사용하여 추출될 수 있다. 한 예는, <x>가 <PubK A>가 되도록 제한되고 <y>가 OP_CHECKSIG가 되도록 제한되는 경우이다. 이러한 방식으로, 전체 잠금용 스크립트는 <PubK A> OP_CHECKSIG가 되도록 제한된다. 잠금 해제용 스크립트에서의 데이터로부터 유도되는 제약을 사용하는 것도 또한 가능할 수도 있다.
이들 기술을 사용하여, 이전 트랜잭션의 출력의 잠금용 스크립트가, 그 출력을 잠금 해제하려고 시도하는 잠금 해제용 트랜잭션에 대해 제약을 부과할 수 있다. 특히, 제약은, 잠금 해제용 트랜잭션이 갖는 출력의 세트에 대한 제약일 수 있으며, 제약은 상이한 출력에 대해 상이할 수 있고, 또한, 이전 트랜잭션의 잠금용 스크립트와는 상이할 수 있다.
제약은 다양한 출력을 참조하는 인덱스에 대응할 수 있다. 하나의 경우에, 제약은 각각의 인덱스에 대해 반복되지만, 그러나 다른 경우에, 몇몇 구조체가 제공될 수 있다. 예를 들면, 제약에 대한 인덱스는, "if index == 0: constraint A else constraint B(index == 0이면 제약 A 그렇지 않으면 제약 B)"와 같은, 제약의 세트를 고르기 위한 조건문(conditional statement)에서 사용될 수 있다.
인덱스의 세트가 하드코딩되는 경우, 인덱스를 사용하는 스크립트의 일부의 결과는 고정될 수도 있다. 잠금 해제용 트랜잭션의 출력에 대한 제약 대신, 또는 그 제약에 추가하여, 잠금 해제용 트랜잭션의 입력에 대한 제약이 또한 존재할 수 있다.
삽입된 잠금 해제용 트랜잭션의 입력에 대한 제약
잠금 해제용 트랜잭션의 입력을 제한하는 잠금용 스크립트를 갖는 것의 하나의 용도는, 잠금용 스크립트가 소정의 속성을 갖는 트랜잭션에 대한 의존성을 인코딩하는 것을 허용하는 것이다(예를 들면, 제한된 입력은 그 트랜잭션을 참조해야만 함). 이것은, 출력이 변하기 쉽기 때문에 잠금 해제용 트랜잭션의 출력을 제한하는 것과는 상이하며, 한편, 입력은 블록체인 상의 기존의 불변의 UTXO에 대한 참조일 수도 있다. 다시 말하면, 제약과 매치하도록 출력이 수정될 수 있고, 한편, 그들 제약과 매치하는 입력이 발견되어야만 한다.
잠금 해제용 트랜잭션의 입력에 대한 제약은 두 가지 일반적인 타입에 속할 수도 있다: (1) 입력의 참조(즉, 트랜잭션 TxID 필드, 및 옵션 사항으로(optionally) 출력 포인터 필드)에 대해 직접적으로 설정되는 제약, 및 (2) 입력에서의 참조에 의해 지시되는 이전 트랜잭션의 필드에 대한 제약.
도 17은 이전 트랜잭션(1710) 및 잠금 해제용 트랜잭션(1720)을 예시하는데, 여기서 이전 트랜잭션(1710)은 입력 Vin[y](1712) 및 출력 Vout[x](1714)를 가지며 잠금 해제용 트랜잭션(1720)은 입력 Vin[0](1722) 및 Vin[1](1723), 및 출력 Vout[0](1724)을 갖는다. Vout[x](1714)의 잠금용 스크립트는 입력 Vin[0](1722)에 대해 제약의 세트(제약 세트 1)를 입력 Vin[0](1723)에 대해 제약의 세트(제약 세트 2)를 부과한다. 제약 세트는, 잠금 해제용 스크립트에 대한, 참조에 대한, 또는 입력의 다른 부분에 대한 제약을 포함할 수도 있다. 제약 세트는 동일하거나 또는 상이할 수 있고, 또는 두 개보다 더 많은 입력이 존재하는 경우, 몇몇은 동일하고 몇몇은 상이할 수 있다.
부분적으로, 이들 제약은, 예컨대 OP_SPENDINGTXINJECTION 스크립트를 사용하여 잠금 해제용 스크립트에 데이터로서 삽입되는 잠금 해제용 트랜잭션 필드의 직렬화된 세트를 갖는 것에 의해, 잠금 해제용 트랜잭션의 일부를 참조할 수 있다.
도 18은, 잠금 해제용 트랜잭션의 입력에 대해 제약을 부과하는 이전 트랜잭션의 잠금용 스크립트의 일부(1800)의 예의 플로우차트이다. 이 예는, 잠금 해제용 트랜잭션의 세부 사항을 비롯하여, 스택 상에 데이터를 남겨둘 수도 있는, 잠금 해제용 트랜잭션 출력의 잠금 해제용 스크립트를 프로세싱하는, 그 다음, 이 프로세스를 수행하기 위해 이전 트랜잭션의 출력의 잠금용 스크립트를 프로세싱하는 검증자에 의해 실행될 수도 있다.
프로세스의 단계(1802)에서, 검증자는, 잠금 해제용 스크립트가 소정의 데이터를 포함하는지를 검증하고, 검증자는, 출력 단위 기반으로 행해질 필요가 없는 다른 검증을 수행할 수도 있다. 단계(1804)에서, 검증자는, 그들 제약이 충족되었는지를 검사하고, 그렇지 않다면, 단계(1806)에서 정지하여, 잠금 해제용 트랜잭션을 무효화한다. 그렇지 않으면, 프로세싱은 단계(1808)에서 계속되는데, 여기서 검증자는 체크할 임의의 잠금 해제용 트랜잭션 입력이 있는지의 여부를 결정한다. 전체에 걸쳐 처음에, 검증자는 인덱스 i = 0을 설정할 수도 있고, 체크할 더 이상의 입력이 없으면, 단계(1810)에서 프로세싱의 다른 플로우로 이동한다.
입력의 각각의 인덱스에 대해, 검증자는 단계(1812, 1814 및 1816)를 수행하고, 그 다음, i를 증분시키고(단계(1818)), 고려할 더 이상의 인덱스가 없을 때까지 단계(1808)로 복귀한다(또는, 검증자가 체크할 인덱스의 세트를, 반드시 그들 모두는 아닌 및/또는 반드시 증분 순서는 아니게, 루프 스루하고; 그들 경우에, 단계(1818)는 상응하여 상이한데, 체크되고 있는 입력에 대한 인덱스 i를 루프 스루한다. 단계(1812)에서, 검증자는 잠금 해제용 트랜잭션 입력 Vin[i]로부터 이전 트랜잭션에 대한 그것의 참조를 추출하고 출력은 잠금 해제된다. 이것은, 스택 콘텐츠에 대한 OP_SUBSTR 동작을 사용하여 구현될 수도 있다. 다음으로, 단계(1814)에서, 검증자는, 이전 트랜잭션의 출력의 잠금용 스크립트에 기초하여, 참조에 대해 어떤 제약이 있을지 또는 이전 트랜잭션의 삽입을 야기하기 위해 그 참조를 어떤 제약이 사용할지를 결정하는데, 그 이후, 제약은 이전 트랜잭션의 필드에 적용될 수 있다. 단계(1816)에서, 검증자는, 그 다음, 그들 제약을 검증한다. 이러한 방식으로, 잠금 해제용 트랜잭션의 입력에게 양도되고 있는 이전 트랜잭션의 출력의 잠금용 스크립트는, 잠금 해제용 트랜잭션의 입력에 대해 제약을 부과할 수 있다.
입력 제약의 다른 예는, 도 19에서, 엘리먼트(1902, 1904, 1906, 1910, 1912 및 1914)에 의해 도시된다. TxID가 트랜잭션과 일대일 매핑일 수도 있기 때문에, 그것은, 입력에서 특정한 트랜잭션이 참조되어야 한다는 것이 제약일 수도 있다는 것을 의미한다. 잠금용 스크립트가 의존하는 트랜잭션이 먼저 생성될 수도 있고, 그에 의해, 잠금용 스크립트가 그 자신의TxID를 잠금 해제용 트랜잭션의 입력에 대한 제약에서 사용하는 것을 허용할 수도 있다.
입력에서의 참조에 대응하는 이전 트랜잭션의 필드에 제약이 설정될 수 있다. 이것은, 입력에서 TxID를 사용하여, 이전 트랜잭션의 필드에 대해 제약을 설정하기 이전에, 대응하는 이전 트랜잭션의 삽입을 야기하는 것에 의해 가능할 수도 있다. 제약은, 제약을 부과하고 있는 잠금용 스크립트를 갖는 이전 트랜잭션의 출력을 잠금 해제하고 있는 입력과는 상이한 입력을 참조할 수 있다.
도 20은, 도 18의 프로세스(1800)에서의 단계(1802 및 1814)의 맥락에서, 제약의 예를 예시한다. 도 20에서, 단계(2002, 2004, 2014 및 2016)가 수행될 수도 있다. 단계(2002)에서, 검증자는 잠금 해제용 트랜잭션의 입력으로부터 트랜잭션 ID(TxID)를 추출하는데, 검증자는 잠금 해제용 스크립트에서 그것이 이용 가능한 경우 이것을 행할 수 있다. 검증자는, 그 다음, 단계(2004)에서, 잠금 해제용 스크립트가 또한 그 TxID에 대한 이전 트랜잭션의 직렬화된 사본을 포함하는지를 검증할 수 있다. 단계(1614)에서, 검증자는 이전 트랜잭션으로부터 하나 이상의 필드의 세트를 추출하고 단계(1616)에서 추출된 필드의 그 세트에 대한 어떤 제약을 검증한다.
도 21은 연동하는 스크립트 제약을 예시한다. 그곳에서 예시되는 바와 같이, 이전 트랜잭션(Previous Tx 1)(2102) 및 이전 트랜잭션(2104)(Previous Tx 2)은 잠금 해제용 트랜잭션(Unlocking(잠금 해제용) Tx 1)(2106)의 입력에 의해 참조될 수도 있다. 특히, Unlocking Tx 1의 입력 Vin[0]은 화살표(2110)에 의해 나타내어지는 바와 같이, Previous Tx 1의 Vout[0]을 가리킨다. 따라서 Unlocking Tx 1가 유효하면, 그것은 Previous Tx 1의 Vout[0]을 잠금 해제할 수도 있다. 또한, Unlocking Tx 1의 입력 Vin[1]은 화살표(2112)에 의해 나타내어지는 바와 같이, Previous Tx 2의 Vout[0]을 가리킨다. 그러한 참조는, 다수의 이전 트랜잭션을 참조하는 다수의 입력을 가진 잠금 해제용 트랜잭션에 대한 종래의 참조일 수도 있다.
이전 트랜잭션을 참조하기 위해, 그들 트랜잭션은 미리 존재해야 하고 잠금 해제용 트랜잭션의 생성 이전에 불변이어야 한다. 그럼에도 불구하고, 이전 트랜잭션은 잠금 해제용 트랜잭션에 대해 상호 의존적 잠금용 스크립트 제약을 적용할 수 있다. 잠금 해제용 트랜잭션의 입력의 세트에 대해 제약을 설정하는 것에 의해, 상호 의존적 잠금용 스크립트가 구현될 수 있는데, 이것은 신뢰할 수 없는 결정론적 상태 머신의 맥락에서 - 다른 것들 중에서도 - 동시성을 제공할 수 있다.
Previous Tx 1의 출력 Vout[0]의 잠금용 스크립트(2120)는, 입력의 포인터(2122)(예를 들면, 이전 트랜잭션 및 그 이전 트랜잭션의 출력에 대한 그것의 참조)가 Previous Tx 2 및 Previous Tx 2의 Vout[0]에 대한 참조여야 한다는 것을 규정하는 Unlocking Tx 1의 입력 Vin[1]에 대한 제약을 갖는다. Previous Tx 2의 출력 Vout[0]의 잠금용 스크립트(2124)는, 입력의 포인터(2126)(예를 들면, 이전 트랜잭션 및 그 이전 트랜잭션의 출력에 대한 그것의 참조)가 Previous Tx 1 및 Previous Tx 1의 Vout[0]에 대한 참조여야 한다는 것을 규정하는 Unlocking Tx 1의 입력 Vin[0]에 대한 제약을 갖는다.
트랜잭션의 TxID가 트랜잭션이 종료될 때까지 알려지지 않기 때문에, 트랜잭션 잠금용 스크립트는, 잠금 해제용 트랜잭션 잠금 해제용 스크립트가 어떤 TxID를 참조해야만 하는지를 직접적으로 명시할 수 없지만, 그러나 이것은, 입력의 포인터(이것은 잠금용 스크립트를 갖는 이전 트랜잭션의 TxID를 포함함)를 추출하는 잠금용 스크립트에 의해 본질적으로 달성될 수 있고, 그 TxID를 사용하여 이전 트랜잭션의 필드를 삽입할 수 있고 이전 트랜잭션의 어떤 필드가 예상되는 값과 동일한지를 검증할 수 있다. 다시 말하면, 이전 트랜잭션이 소정의 값으로 설정되는 필드를 가지며 그 이전 트랜잭션의 잠금용 스크립트가 잠금 해제용 트랜잭션 입력으로부터 TxID를 획득하고, 그 TxID에 의해 참조되는 모든 트랜잭션을 삽입하고, 소정의 값으로 설정될 그 필드를 체크하고 그 필드가 그 소정의 값으로 설정되지 않으면, 잠금 해제용 트랜잭션 입력이 상이한 이전 트랜잭션을 지시하고 있는 경우임이 틀림없다. 따라서, 그 소정의 값을 체크하는 것에 의해, 이전 트랜잭션 출력의 잠금용 스크립트는, 잠금 해제용 트랜잭션 입력이 그 이전 트랜잭션 출력을 참조하는지 또는 하지 않는지의 여부를 확인할 수 있다.
이러한 방식으로, Previous Tx 1은, 자신의 제1 출력이, 특정한 트랜잭션(Previous Tx 2)의 제1 출력을 또한 잠금 해제하는 트랜잭션에게만 양도될 수 있다는 것을 말하고 있고, Previous Tx 2는, 자신의 제1 출력이, Previous Tx 1의 제1 출력을 또한 잠금 해제하는 트랜잭션에게만 양도될 수 있다는 것을 말하고 있다.
상호 의존적 잠금용 스크립트는, 다른 것들 중에서도, 서로에게 조건을 설정하는 다수의 스마트 계약을 허용한다. 예를 들면, Smart Contract(스마트 계약) 1은 "단지 Bob이 Carol에게 2BTC를 기부하는 경우에만, Alice가 Carol에게 1BTC를 기부할 것을 동의함"일 수도 있고 Smart Contract 2는 "Alice가 Carol에게 1BTC를 기부할 것을 동의하는 경우에만 Bob이 Carol에게 2BTC를 기부할 것을 동의함"일 수도 있다. 유효하기 위해, 잠금 해제용 트랜잭션은 스마트 계약 둘 모두를 모두 잠금 해제해야 한다.
상기에서 설명되는 바와 같이, 잠금용 스크립트는 소정의 속성을 가진 트랜잭션으로 의존성을 인코딩할 수 있고, 그들 속성은 그 트랜잭션의 필드를 포함할 수 있다. 이것은, 잠금용 스크립트가 소정의 잠금용 스크립트를 갖는 트랜잭션에 의존하게 하는 것이 가능할 수도 있다는 것을 의미한다.
예를 들면, 도 21의 예시에서, (Previous Tx 1의 Vout[0]의) 잠금용 스크립트 #1은 (Previous Tx 2의 Vout[0]의) 잠금용 스크립트(2124)를 참조하고 있도록 Unlocking Tx 1의 Vin[1]을 제한하고, 잠금용 스크립트 #3(2124)은 Previous Tx 1의 Vout[0]의 잠금용 스크립트 #1을 참조하고 있도록 Unlocking Tx 1의 Vout[0]을 제한한다. 본원에서, 이것은 다른 잠금용 스크립트에 대한 잠금용 스크립트 인코딩 의존성으로서 칭해질 수도 있다.
상호 의존적 잠금용 스크립트를 구현하는 것은, 인과 관계 경쟁 조건(causality race condition)이 생성할 수도 있는데, 여기서 제1 잠금용 스크립트는 제2 잠금용 스크립트에 대한 의존성을 인코딩하고 제2 잠금용 스크립트는 제1 잠금용 스크립트에 대한 의존성을 인코딩하는데, 그 이유는, Previous Tx 1 및 Previous Tx 2 중 하나가 다른 것 이전에 존재할지도 모르기 때문이다. 잠금용 스크립트 A가 잠금용 스크립트 B 상으로 의존성을 하드코딩하는 경우, 잠금용 스크립트 B가 아직 알려지지 않은 잠금용 스크립트 A에 대한 의존성을 하드코딩하는 것을 불가능하게 만들면서, 잠금용 스크립트 B는 이미 알려져 있고 고정되어야 한다. 이것은, 적어도 잠금용 스크립트 중 하나에서, 결정 가능한 의존성을 갖는 것에 의해 다루어질 수 있다.
한 예로서, 잠금용 스크립트 A가 잠금용 스크립트 X에 의존하고 잠금용 스크립트 X가 잠금 해제용 스크립트 A에서 제공될 것이고, 잠금용 스크립트 B가, 잠금 해제용 스크립트 B에서 제공될 잠금용 스크립트 Y에 의존한다. 잠금 해제용 트랜잭션이 생성되는 경우, 잠금용 스크립트 A와 잠금용 스크립트 B 둘 모두가 이미 알려져 있을 것이고, 그에 의해, 잠금 해제용 트랜잭션의 잠금 해제용 스크립트 A가, 잠금용 스크립트 B를 자신의 데이터로서 포함하는 것, 및 잠금 해제용 트랜잭션의 잠금 해제용 스크립트 B가 잠금용 스크립트 A를 자신의 데이터로서 포함하는 것을 가능하게 만들 것이다.
몇몇 변형예에서, 잠금 해제용 트랜잭션 입력이 유효성을 확인하기 위해, 그것의 잠금 해제용 스크립트는 Previous Tx 1 및 Previous Tx 2에 대한 참조를 가져야만 한다. 다른 변형예에서, 잠금 해제용 스크립트는, Previous Tx 1과 동일한 잠금용 스크립트를 갖는 임의의 두 개(또는 그 이상)의 이전 트랜잭션에 대한 참조를 갖는 것으로 충분하다.
몇몇 변형예에서, 잠금 해제용 스크립트가 특정한 이전 트랜잭션 또는 다수의 이전 트랜잭션의 세트를 참조해야 한다는 요건을 부과하는 대신, 잠금 해제용 스크립트가 특정한 이전 트랜잭션 또는 다수의 이전 트랜잭션의 세트를 참조하지 않아야 한다는 것이 요건일 수도 있다는 점에서, 요건은 배타적일(exclusionary) 수도 있다. 어떤 이전 트랜잭션이 참조되는지에 대해 부울 로직(Boolean logic)을 효과적으로 구현하는, 이들 변형예의 조합도 또한 가능할 수도 있다. 예를 들면, 잠금 해제용 트랜잭션 입력이 유효성을 확인하기 위해, 그것의 잠금 해제용 스크립트는 Previous Tx 1 및 Previous Tx 2에 대한 참조를 가져야만 하고, Previous Tx A에 대한 참조는 가지지 않아야 하며, Previous Tx B에 대한 또는 Previous Tx C에 대한 참조를 가져야만 한다는 것이 요건일 수도 있다. 다른 논리적 표현도 또한 가능할 수도 있다.
상태 머신
상기의 기술을 사용하여, 상태 머신은 블록체인 트랜잭션을 사용하여 구현될 수 있는데, 여기서 트랜잭션은 상태를 가지며, 예컨대 전이 매트릭스 및 허용된 다음 상태에 의해, 상태 머신 구조로 인코딩된다. 잠금 해제용 트랜잭션은 그러한 블록체인 트랜잭션의 출력을 잠금 해제하여, 사실상 상태 머신의 상태 전이를 야기할 수 있다.
도 22는 블록체인 트랜잭션을 사용하여 구현되는 상태 머신의 예(2200)를 예시한다. 구체적으로, 도 22는 블록체인 트랜잭션을 사용하여 제1 상태로부터 제2 상태로 전이하는 상태 머신을 묘사한다. 몇몇 예에서, 상태 머신의 상태 전이는, (1) 현재 상태, (2) 하나 이상의 입력(2226), 및 (3) 상태 규칙의 세트(2206)가 주어지면, 다음 상태를 결정하는 것으로 설명된다. 도 22의 예(2200)는, 상태 규칙의 세트(2206) 및 제1 상태(2228A)가 파라미터에 임베딩된 이전 트랜잭션(2202)을 예시한다. 몇몇 실시형태에서, 잠금 해제용 트랜잭션(2204)은 결정된 소스로부터 입력(2226)을 수용하도록 생성된다. 입력(2226)은, 제1 상태(2228A)와 조합하여, 잠금 해제용 트랜잭션(2204)의 파라미터에 임베딩되는 제2 상태(2228B)를, 상태 규칙의 세트(2206)를 참조하여, 결정하기 위해 사용될 수도 있다.
실시형태에서, 상태 규칙의 세트(2206)는 잠금용 스크립트에 의해 부과되는 잠금 해제용 트랜잭션(2204)에 대한 제약에 의해 표현될 수 있는 상태-트랜잭션 매트릭스(state-transaction matrix)를 포함한다. 그러한 실시형태에서, 제약은, 현재 상태 및 다음 상태가 결정되는 입력에 의해 파라미터화될 수도 있다. 제약은, 잠금 해제용 트랜잭션(2204)이 특정한 필드에서 다음 상태 값을 포함하는 출력을 포함한다는 것을 보장하기 위한 체크를 포함할 수 있다.
실시형태에서, 현재 상태는 트랜잭션에, 예컨대 그 트랜잭션의 출력의 잠금용 스크립트의 일부에 임베딩되는 파라미터로서 표현되고, 잠금 해제용 트랜잭션(2204)은 잠금 해제용 트랜잭션(2204)에 또한 임베딩되는 다음 상태 값을 가질 수도 있다. 다음 상태 값은, 상기에서 언급되는 바와 같이, 잠금 해제용 트랜잭션(2204)이 생성될 때 액세스될 수도 있는, 잠금 해제용 트랜잭션(2204)의 필드 값의 세트에 대한 현재 상태일 수도 있다.
몇몇 실시형태에서, 잠금 해제용 트랜잭션(2204)이 생성되는 때에 결정되는 파라미터에서 적어도 하나의 입력이 외부 데이터로서 제공된다. 보안을 유지하기 위해, 그러한 파라미터는 결정된 소스로부터 유래한다. 이것은 결정론적인 상태 전이를 제공할 수 있다. 마지막으로, 자기 복제 잠금용 스크립트의 스크립트를 활용하는 것에 의해, 신뢰할 수 없는 결정론적 상태 머신의 한 실시형태가 생성될 수 있다. 상이한 잠금용 스크립트가 트랜잭션의 상이한 트랜잭션 입력 및 출력에 부과되는 것을 추가로 허용하는 것에 의해, 동시적인 신뢰할 수 없는 결정론적 상태 머신이 구현될 수 있다.
도 23은 이 점을 예시한다. 그 예에서, 신뢰할 수 없는 결정론적 상태 머신 시스템(2300)은, 상태 규칙의 세트(2306)의 제1 상태(2328A)("S1")에 있는 이전 트랜잭션(2302)을 포함할 수도 있다. 상태 규칙의 세트(2306)는 다음 상태에 대한 두 개의 가능한 상태(2330A)("S2" 또는 "S3")를 제공한다. 상태 규칙의 세트(2306)는 이전 트랜잭션(2302)의 출력의 잠금용 스크립트에 인코딩될 수도 있다. 현재 상태(2328A)는 잠금 시간 필드에 임베딩될 수도 있거나, 또는 잠금용 스크립트에 임베딩될 수 있다. 이 예에서의 다음 상태인 S2(2328B)는, 상태 전이를 실행하기 위해 이전 트랜잭션의 출력을 잠금 해제하는 잠금 해제용 트랜잭션의 출력의 잠금용 스크립트에 인코딩된다.
예(2300)에서 알 수 있는 바와 같이, 자신의 잠금 해제용 스크립트에서의 입력(2326) 및 이전 트랜잭션(2302)의 필드 값의 세트에 임베딩되는 제1 상태(2328A)("S1")를 입력으로서 취하는 잠금 해제용 트랜잭션(2304)은, 상태 규칙의 세트(2306)로부터 적절한 제2 상태(2328B)("S2")를 결정한다. 그 예(2300)에서 더 알 수 있는 바와 같이, 상태-전이 매트릭스는 이제, 제2 상태(2328B)로부터 다음 상태 전이에 대해 가능한 새로운 상태(2330B)("S4" 또는 "S5")를 제공한다. 상태 규칙의 세트(2306)는 현재 상태 및 하나 이상의 입력에 의해 파라미터화되는 스위치 명령문(switch statement) 또는 다른 조건 명령문(예를 들면, "if-then-else")으로서 코딩될 수도 있다는 것을 유의한다. 현재 상태인 S2(2328B)는 잠금 시간 필드에 임베딩될 수도 있거나, 또는 잠금용 스크립트에 임베딩될 수 있다. 이 예에서의 다음 상태인 S2(2328B)는, 상태 전이를 실행하기 위해 이전 트랜잭션의 출력을 잠금 해제하는 잠금 해제용 트랜잭션의 출력의 잠금용 스크립트에 인코딩된다.
실시형태에서, 각각의 가능한 상태는 자기 복제 잠금용 스크립트에서, 상태-전이 매트릭스와 같은, 상태 변화에 대한 규칙의 세트에서 표현되며, 특정한 트랜잭션 출력은 특정한 상태의 상태 머신을 나타낸다. 그러한 실시형태에서, 트랜잭션 출력의 잠금용 스크립트는, 디지털 자산의 제어를 다음 트랜잭션으로 양도하려고 시도하는 모든 잠금 해제용 트랜잭션에 복제되는데, 다음 트랜잭션은 현재 트랜잭션 출력에 링크되어야만 한다. 이 프로세스는 종료 조건이 이행될 때까지 복제될 수도 있다. 입력이 고정되지 않고 미결정 데이터일 수 있기 때문에, 상태 머신의 상태는 특정한 외부 입력에 기초하여 변하도록 만들어질 수 있다. 따라서, 미결정 데이터는 다음 상태에 영향을 줄 수 있는 입력을 제공한다.
예시적인 예에서, Alice는 Bob에게 약간의 돈을 빌려주고 Bob은 Alice에게 돈을 갚을 것을 동의한다. 본 개시에서 설명되는 바와 같이, 신뢰할 수 없는 결정론적 상태 머신은, Bob이 Alice에게 행하는 지불을 나타내는 스마트 계약으로서 구현될 수 있다. 예를 들면, Bob이 다음 삼 개월 동안 매달 Alice에게 지불하도록 스마트 계약이 구성될 수도 있으며, 지불이 누락되면, Bob의 부채가 부채 수집 단계로 들어간다. 따라서, Bob이 월별 지불을 행하는 한, 현재 상태는 변제 상태(repayment state)로 유지된다. 그러나, Bob이 지불하지 않았다는 것을 나타내는 입력을 외부 엔티티가 제공하면, 상태는 미지불 상태(missed payment state)로 분기된다. 미지불 상태에서, Alice는 트랜잭션을 해제하여 그것을 부채 수금 업자(debt collector)로 넘길 수 있는데, 그 결과, 신뢰할 수 없는 결정론적 상태 머신은 부채 수금 상태(debt collection state)로 전환된다. 부채 수금 상태에서, 부채 수금 업자는 Bob으로부터 부채를 수금할 것이다. 그러한 스마트 계약은 본원에서 설명되는 스크립트에 대한 변형을 사용하여 생성될 수 있다.
다른 예에서, Alice는 매달 1 단위의 디지털 자산을 나누어 주는 매우 자선적인 사람이다. 그녀의 규칙은 누구나 디지털 자산을 청구할 수 있지만, 그러나 한 달에 1 단위만 청구될 수 있다는 것일 수도 있다. Alice는 본 개시에 설명되는 방식으로 스마트 계약을 생성하고 그것에 3 단위의 디지털 자산의 초기 풀(pool)을 공급한다(seed). Alice는 임의의 엔티티가 한 달에 1 단위의 디지털 자산을 가져가는 것을 허용하는 스크립트를 구성할 수 있다. 디지털 자산의 나머지 부분은 계속되는 스마트 계약으로 복제된다.
도 24는 본 개시의 예시적인 신뢰할 수 없는 결정론적 상태 머신에 대한 잠금 해제용 스크립트 및 잠금용 스크립트를 예시한다.
도 25는 다양한 실시형태에 따른 신뢰할 수 없는 결정론적 상태 머신에 대한 프로세스(2500)의 예를 예시하는 플로우차트이다. 이것을 구현하는 예시적인 스크립트가 도 24의 스크립트이다. 프로세스(2500)의 일부 또는 전부(또는 설명되는 임의의 다른 프로세스, 또는 그들 프로세스의 변형 및/또는 조합)는, 실행 가능한 명령어 및/또는 다른 데이터를 가지고 구성되는 하나 이상의 컴퓨터 시스템의 제어 하에 수행될 수 있고, 하나 이상의 프로세서 상에서 집합적으로 실행되는 실행 가능한 명령어로서 구현될 수 있다. 실행 가능 명령어 및/또는 다른 데이터는 비일시적 컴퓨터 판독 가능 저장 매체 상에 저장될 수 있다(예를 들면, 자기, 광학 또는 플래시 매체에 영구적으로 저장되는 컴퓨터 프로그램). 이들 명령어는 블록체인 트랜잭션 검증 프로세스의 일부로 실행될 수도 있다.
예를 들면, 프로세스(2500)의 일부 또는 전부는 도 1의 예시적인 블록체인 네트워크(100)와 같은 예시적인 블록체인 네트워크의 유효성 확인 노드(validation node)에 의해 수행될 수 있다. 그러한 유효성 확인 노드는 (예를 들면, 데이터 센터에서 서버에 의한, 클라이언트 컴퓨팅 디바이스에 의한, 컴퓨팅 리소스 서비스 공급자의 분산 시스템에서의 다수의 컴퓨팅 디바이스에 의한, 또는 임의의 적절한 전자 클라이언트 디바이스에 의한) 임의의 적절한 컴퓨팅 디바이스를 포함할 수도 있다. 프로세스(2500)는, 자가 복제 스마트 계약의 잠금용 스크립트가 검증되고, 직렬화된 이전 트랜잭션으로부터 현재 상태가 획득될 수도 있고, 잠금 해제용 스크립트로부터 입력이 획득될 수도 있고, 그리고 상태 규칙의 세트에 적어도 부분적으로 기초하여 다음 상태가 결정될 수도 있는 일련의 동작을 포함한다.
단계(2502)에서, 시스템은 잠금 해제용 트랜잭션을 수신한다. 시스템은, 직렬화된 이전 트랜잭션 및 잠금용 스크립트에 임베딩되는 입력으로 하여금 스택에 배치되게 하는, 잠금 해제용 트랜잭션 입력의 잠금 해제용 스크립트를 실행하는 것에 의해 시작한다. 이들 입력은 2512에서 취출될(retrieved) 수도 있다. 2504에서, 프로세스(2500)를 수행하는 시스템은 종료 조건이 이행되는지의 여부를 결정한다. 실시형태에서, 종료 조건은, 이행시, 상태 머신 전이가 종료되게 하는 조건이다. 종료 조건이 이행되면, 프로세스(2500)를 수행하는 시스템은 2506으로 진행하고, 그 결과, 신뢰할 수 없는 결정론적 상태 머신은 자기 복제 및/또는 상태의 전파를 중단한다.
단계(2508)에서, 시스템은 이전 트랜잭션 출력 잠금용 스크립트가 잠금 해제용 트랜잭션 출력 잠금용 스크립트와 매치하는지를 검증한다. 잠금용 스크립트가 매치하지 않으면, 유효성 확인은 실패하고 잠금 해제용 트랜잭션은 유효성이 확인되지 않을 수도 있다. 그렇지 않고, 잠금용 스크립트가 매치하면, 2510에서, 시스템은 직렬화된 이전 트랜잭션으로부터 가능한 상태의 세트의 현재 상태를 추출한다. 2512에서, 시스템은 잠금용 스크립트의 실행의 결과로서 스택 상에 배치되는 입력 또는 입력들을 획득한다. 그 다음, 2514에서, 시스템은, 현재 상태 및 입력 또는 입력들에 기초하여, 신뢰할 수 없는 결정론적 상태 머신에 대한 가능한 상태의 세트의 다음 상태를 결정하기 위해 상태 규칙의 세트를 적용한다. 2516에서, 시스템은, 다음 상태(예를 들면, 상태 변수 및, 적용 가능한 경우, 다른 상태 관련 데이터)가 잠금 해제용 트랜잭션에 임베딩되는지를 검증할 수도 있다. 시스템은, 잠금용 스크립트에서 명시되는 대로, 임의의 나머지 제약을 또한 적용할 수도 있다. 2502 내지 2516의 동작의 성공적인 완료 이후, 프로세스는 2518과 함께 종료되며, 그 결과, 잠금 해제용 트랜잭션은 프로세스를 수행하는 시스템에 의해 유효한 것으로 간주될 수 있다. 단계(2502 내지 2518)에서 수행되는 동작 중 하나 이상은, 병렬을 포함하여, 다양한 순서 및 조합으로 수행될 수도 있다는 것을 유의한다.
개시된 실시형태를 설명하는 맥락에서, 달리 명시되지 않는 한, 도움 없이 "명령어"가 보통은 수행하지 않는 동작(예를 들면, 데이터의 송신, 계산, 등등)을 수행하는 실행 가능 명령어(코드, 애플리케이션, 에이전트, 등등으로 또한 칭해짐)에 관한 표현의 사용은, 명령어가 머신에 의해 실행되고 있고, 그에 의해, 머신으로 하여금 명시된 동작을 수행하게 한다는 것을 나타낸다는 것을 유의한다.
블록체인 트랜잭션으로서의 상태 머신
상기에서 설명되는 기술 및 장치를 사용하여, 상태 머신은 블록체인 트랜잭션을 사용하여 구현될 수 있다. 상태 머신은 상태 전이 매트릭스를 따라 상태에서 상태로 변하는 상태를 갖는 것에 의해 동작될 수도 있다. 몇몇 상태 다이어그램은 상당히 복잡하고 다수의 경로를 가질 수 있다. 그러한 경우, 상태 머신이 수행하는 계산 중 일부는 다른 계산과 동시에 행해질 수 있다. 본원에서 설명될 바와 같이, 상태 머신은 블록체인 트랜잭션을 사용하여 동작할 수 있고, 부분적으로는, 동시에 그렇게 할 수 있다.
더욱 상세하게 설명될 바와 같이, 신뢰할 수 없는 결정론적 상태 머신은 블록체인 트랜잭션의 잠금용 스크립트 및 잠금 해제용 스크립트를 사용하여 구현될 수도 있다. 잠금용 스크립트는, 잠금 해제용 스크립트에 부과될 수도 있으며 따라서 잠금 해제용 트랜잭션 그 자체의 직렬화된 필드, 실행되고 있는 잠금용 스크립트를 포함하는 이전 트랜잭션의 직렬화된 필드, 현재 상태 값, 결정된 소스로부터의 입력(옵션 사항), 및 상태 머신의 동작 및 플로우 조건의 세트를 정의하는 상태 전이 매트릭스와 같은, 소정의 데이터의 잠금 해제용 트랜잭션 입력의 잠금 해제용 스크립트 안으로 삽입을 요구할 수 있는 제약을 포함하며, 현재 상태 및 다른 입력으로부터 다음 상태를 계산하는 방법을 명시한다. 잠금 해제용 트랜잭션에 대한 하나의 잠금용 스크립트 제약은, 잠금 해제용 트랜잭션이 자신의 출력 중 하나에서 잠금용 스크립트를 복제하여, 상태 머신을 전파해야 한다는 것일 수도 있다.
도 26은 소정의 피쳐를 갖는 상태 전이 매트릭스(2600)를 사용하는 상태 머신을 예시한다. 현재 상태를 나타내기 위해 상태 S1이 강조 표시된다. 상태 머신은 상태 전이를 따라 임의의 상태로 전이할 수 있는데, 이것은 화살표에 의해 나타내어진다. 그 상태 전이 매트릭스에서, S1-S2-S3-S4-S8-S12를 따르는 가능한 전이가 있을 수도 있지만, 그러나 상태 S1로부터의 전이는 또한 상태 S5에 있을 필요가 또한 있을 수도 있다. 마찬가지로, 상태 S5는 S6 및 S9로 전이한다. 상태 S9로부터 상태 S10으로의 전이는, 동시에 발생하는 상태 S6으로부터 상태 S7로의 전이가 있을 때 때까지 상태 전이가 발생하지 않을 수도 있다는 점에서, 조건부일 수도 있거나, 또는 장벽을 가질 수도 있다. 상태 S8로의 전이는, 상태 S4 및 상태 S7로부터 병합으로서 발생할 수도 있다.
이들 상태의 각각은, 블록체인 트랜잭션 출력 및 트랜잭션 출력의 단일의 경로에 의해 핸들링되는 각각의 전이에 의해 표현되는 상태 머신에 의해 진입될 수도 있는데, 잠금 해제용 트랜잭션 입력이 이전 트랜잭션 출력을 잠금 해제하는 경우, 예컨대 도 22 또는 도 23에서 도시되는 상태 전이가 발생한다. 그러나, 블록체인 트랜잭션의 입력 및 출력을 사용하여, 상태의 동시적 프로세싱이 달성될 수 있다. 이것은, 스마트 계약이 다수의 동시적 단계에서 실행될 필요가 있는 경우 유용할 수도 있다. 계약의 과정에 걸쳐, 태스크는 계약의 과정에서 때때로 동시에 수행될 수 있다. 예를 들면, 집을 건설하기 위한 계약은, 타일 작업에 대한 다양한 완료 단계 및 조경에 대한 다양한 완료 단계를 가질 수도 있는데, 이는 병행하여 행해질 수도 있다. 스마트 계약 내에서 동시성을 허용하는 것에 의해, 계약의 상이한 단편이, 비동기적 방식으로, 서로 독립적으로 실행될 수 있다.
도 26은 그러한 프로세싱에 대한 다수의 요구를 예시한다. 하나는 한 상태로부터 다수의 경로의 생성이다. 이것은 스마트 계약의 포킹일 수도 있다. 스마트 계약이 상태 S1에서 시작한다고 가정한다. 그 스마트 계약의 포킹은, 상태 S2의 하나와 상태 S5의 하나의 두 개의 상태 머신을 생성할 수도 있다. 다른 요구는, 병렬로 실행하는, 각각이 동일한 상태에 있는, 두 개의 동일한 상태 머신을 가지기 위한, 스마트 계약의 클로닝(cloning)에 대한 것일 수도 있다. 예를 들면, 스마트 계약은 S2-S3-S4의 단계의 다수의 인스턴스를 호출할 수도 있다. 이것은 또한 스마트 계약의 클로닝일 수도 있는데, 이것은, 두 개 이상의 새로운 트랜잭션 출력이 동일한 상태를 갖는 포킹의 특별한 경우이다.
다른 유용한 피쳐는 새로운 계약의 스포닝(spawning)이다. 예를 들면, 도 26의 상태 전이 매트릭스(2600)에 의해 표현되는 스마트 계약은, 상태 S3에서, 스마트 계약에 대한 어떤 당사자가 스마트 계약에 결부될 수도 있는 그러나 스마트 계약의 일부가 아닐 수도 있는 및/또는 스마트 계약이 생성된 이후 생성될 수도 있는 별개의 계약을 생성해야 하는 그러한 것일 수도 있다. 이것은 본원에서 스포닝으로 지칭될 수도 있다. 새로운 계약은, 초기에 도 26의 상태 전이 다이어그램을 제공한 원래의 스마트 계약과는 상이할 수 있다.
병합은, 상태 S4 및 S7을 갖는 경우일 수도 있는 바와 같이, 두 개의 상태 머신 또는 두 개의 스마트 계약이 병합되는 경우이다. 설명될 바와 같이, S2-S3-S4 및 S5-S6-S7과 같은 상이한 경로가 동시에 실행될 수 있다. 이들 엘리먼트를 사용하여, 블록체인 환경에서 동시적인 신뢰할 수 없는 결정론적 상태 머신이 쉽게 구현될 수 있다.
도 27은 하나의 입력인 Vin[0]과 두 개의 출력인 Vout[0] 및 Vout[1]을 갖는 트랜잭션의 예를 예시한다. 이 트랜잭션의 출력을 잠금 해제하는 것에 의해, 두 개의 독립적인 트랜잭션은 그때 블록체인 원장에 있을 것이고 이들 트랜잭션의 생성자(creator)는 이 트랜잭션에 의해 제시되는 어떤 가치(도시되지 않음)에 의해 보상 받을 것이다. 예시되는 바와 같이, 이전 트랜잭션 출력(Vin[0]에 의해 지시되는 것)의 잠금용 스크립트는, 그 출력을 잠금 해제하는 잠금 해제용 트랜잭션이 상태 S2 및 S5를 포함해야 한다는 것을 규정한다. 상태 S2를 포함하는 잠금 해제용 트랜잭션의 출력(도 27의 Vout[0])을 잠금 해제하기 위해, 미래의 잠금 해제용 트랜잭션은 현재 상태가 S2인 것에 기초하여 다음 상태를 포함하도록 제한될 것이다. S5 상태에 대해서도 마찬가지이다.
이러한 방식으로, 트랜잭션 출력은 상태를 가질 수도 있고 잠금 해제용 트랜잭션이 어떤 상태에 있을 수 있는지에 대해 제약을 부과할 수 있다. 이것을 통해, 블록체인 트랜잭션은 도 26에서 도시되는 것과 같은 상태 다이어그램에 따라 프로세싱을 구현할 수 있고, 트랜잭션 출력의 잠금 해제는 상태 다이어그램의 상태 전이에 대응한다. 누군가가 다수의 입력을 갖는 하나의 트랜잭션을 생성하고 나타내어지는 트랜잭션의 출력 둘 모두를 잠금 해제하는 경우를 방지하기 위해, 잠금용 스크립트는 그것에 대해 체크하고 그것을 허용하지 않을 수 있다. 얼마나 많은 출력이 필요로 되는지와 같은, 유효한 트랜잭션이 생성될 수 있는 방법의 규칙은, 스마트 계약이 생성된 이후 공급될 수도 있는 파라미터 또는 하드코딩된 값으로서 스마트 계약에서 인코딩될 수 있다.
블록체인 트랜잭션을 사용한 스마트 계약의 포킹 및 복제
한 상태가 두 개 이상의 (반드시 고유하지는 않은) 다음 상태로 동시에 전이할 필요가 있는 경우, 포크가 사용될 수도 있다. 때로는, 스마트 계약은 가능한 동시성이 전혀 없이 프로세싱될 수 있지만, 그러나 동시성이 있어야 하는 경우 포크가 그것을 시작할 수 있다. 상기에서 설명되는 바와 같이, 블록체인 원장 상의 스마트 계약 트랜잭션의 출력의 잠금용 스크립트는, 블록체인 원장 상에 있는 잠금 해제용 트랜잭션의 출력의 잠금용 스크립트 및/또는 잠금 해제용 트랜잭션의 입력에 대해 "요건"을 부과할 수 있다. 복제는, 다음 상태의 세트가 모두 동일한 상태일 수도 있는 특정한 타입의 포킹일 수도 있다. 잠금 해제용 트랜잭션의 관점에서, 다수의 출력은 전이 매트릭스를 복제하도록 그리고 그들 각각의 다음 상태를 임베딩하도록 제한될 수도 있다.
신뢰할 수 없는 결정론적 상태 머신의 제약을 출력의 세트에 적용하는 것에 의해 포킹/클로닝이 달성될 수 있다. 상기에서 논의되는 바와 같이, 인덱스의 세트는 상이한 출력에 대해 상이한 제약이 적용되는 것을 허용한다. 인덱스의 이 세트는, 전이 매트릭스 내부에서 하드코딩되거나 또는 유효성 확인 프로세스에 대한 입력의 일부로서 제공될 수 있다.
주어진 잠금 해제용 트랜잭션이 다수의 출력을 가질 수도 있거나, 그 중 일부가 상태 머신에 관련되지 않을 수도 있거나, 또는 다수의 관련되지 않은 상태 머신에 관련될 수도 있기 때문에, 잠금 시간 필드와 같은, 모든 출력에 공통인 필드에 다음 상태를 임베딩하는 대신, 트랜잭션의 잠금용 스크립트에 그것을 임베딩하는 것이 더욱 실용적일 수도 있다. 출력의 잠금용 스크립트의 서브세트를 제한하는 것은 상기에서 설명된다.
도 28은 포킹 동작을 위해 스크립트가 어떻게 관련되는지를 예시한다. 그곳에서 예시되는 바와 같이, 상태 머신(2810)은 이전 트랜잭션(2820) 및 잠금 해제용 트랜잭션(2830)을 사용하여 구현된다. 이전 트랜잭션(2820)의 잠금용 스크립트는, 후속하는 잠금 해제용 트랜잭션이 명시된 상태의 출력을 가질 것을(그리고 별개의 트랜잭션일 것을) 각각 요구하는 적어도 두 개의 출력을 가지도록 잠금 해제용 트랜잭션(2830)을 제한한다. 이것은 그들 상태 S2, S3이 독립적으로 그리고 어쩌면 동시에 실행되는 것을 허용할 수도 있다.
상태 머신을 사용하여, 서브태스크(subtask)가 더 빠른 동시적 스마트 계약을 가능하게 하는 데 유용하게 될 수 있다. 서브태스크를 다루기 위해, 다수의 상태가 사용될 수도 있고, 하나의 상태 머신은 일반적으로 한 번에 단일의 상태에만 있을 수도 있기 때문에, 트랜잭션의 별개의 스레드를 갖는 것에 의해 동시성이 제공될 수도 있다. 상태 머신은 다수의 트랜잭션 잠금용 스크립트의 생성을 통해 포킹될 수 있다. 이전 트랜잭션 출력으로부터의 현재 상태에 기초하여, 잠금 해제용 트랜잭션은 도 28에서 도시되는 바와 같이 잠금용 스크립트를 사용하여 두 개 이상의 출력을 가지도록 제한될 수 있다. 포크가 상환 불가능하게 되는 것, 및 조기에 정지되는 것을 방지하기 위해, 그 상태 머신을 지속시킬 충분한 자금이 있다는 것을 보장하도록 각각의 출력 값은 체크되어야 한다.
점선 화살표에 의해 나타내어지는 바와 같이, 잠금 해제용 트랜잭션(2830)의 입력 Vin[0]은 이전 트랜잭션(2820) 및 그 트랜잭션의 출력 Vout[0]을 지시한다. Vout[0]의 잠금용 스크립트는 현재 상태("S1"), 상태 머신에 대한 전이 매트릭스를 포함하고, 잠금 해제용 트랜잭션(2830)의 Vout[x]을 다음 상태("S3")에 있도록 그리고 잠금 해제용 트랜잭션(2830)의 Vout[y]를 다른 다음 상태("S2")에 있도록 제한하는데, 각각은 또한 상태 전이 매트릭스, 및 어쩌면 다른 제약을 가지도록 제한된다.
이전 트랜잭션의 출력의 잠금용 스크립트는 <Current State(현재 상태)><Transition Matrix(전이 매트릭스)><other script(다른 스크립트)>의 사슬 연결을 포함할 수도 있고, 한편 잠금 해제용 트랜잭션 출력의 잠금용 스크립트는 <Next State(다음 상태)><Transition Matrix(전이 매트릭스)><other script(다른 스크립트)>의 사슬 연결을 포함할 수도 있다. 전체 잠금용 스크립트를 복제하는 대신, 잠금용 스크립트의 서브세트만이 복제될 수도 있지만, 다른 서브세트는 상태를 포함하도록 제한될 수도 있다.
상태를 잠금용 스크립트에 저장하는 대신, 상태 머신의 상태는, Lock Time(잠금 시간) 필드와 같은 다른 목적으로 사용되지 않을 수도 있는 트랜잭션 필드에 저장될 수도 있다. 실제로, 상이한 미사용 트랜잭션 필드가 사용될 수 있다. 이것은 단일의 상태와 작용하며, 또한, 다수의 상태가 저장될 필요가 있는 경우에도 작용하지만, 그것은 더 복잡할 수도 있다.
도 29는, 포킹 또는 클로닝 프로세스를 구현하기 위해 실행될 수도 있는 예시적인 의사 코드를 도시한다. 이 의사 코드는 본원에서 설명되는 OP 코드를 사용하여 구현될 수도 있다. 이 의사 코드는, 트랜잭션을 생성하고 및/또는 트랜잭션의 유효성을 확인하는 블록체인 노드의 프로세서에 의해 실행될 수도 있다. 몇몇 실시형태에서, 스크립트의 일부는 잠금 해제용 스크립트로부터 유래하고 스크립트의 일부는 잠금용 스크립트로부터 유래한다.
도 29의 의사 코드에서, 이전 트랜잭션, 잠금 해제용 트랜잭션 및 옵션 사항인 입력이 삽입되고 따라서 잠금용 스크립트는 그들에 액세스한다. 그 다음, 종료 조건에 대한 체크가 있을 수도 있다. 스마트 계약이 종료되지 않으면, 프로세서는 이전 트랜잭션 잠금용 스크립트 및 이전 트랜잭션 현재 상태를 추출하는데, 프로세서는 본원에서 설명되는 기술을 사용하여 이것을 수행할 수 있다. 그 다음, 프로세서는 잠금 해제용 트랜잭션의 출력을 루프 스루하고, 그들의 각각에 대해, 그것의 잠금용 스크립트를 추출하고 이전 트랜잭션 잠금용 스크립트에서 전이 매트릭스를 체크하여, 그것이 프로세싱되고 있는 잠금 해제용 트랜잭션 출력의 잠금용 스크립트에서의 전이 매트릭스와 매치하는지를 결정한다. 그들이 매치하지 않으면, 프로세서는 그것을 스크립트 실패로서 다루고 잠금 해제용 트랜잭션을 중지하고 그것의 유효성 확인을 행하지 않는다. 그들이 매치하면, 프로세서는, 추출된 현재 상태, 상태 전이 매트릭스, 옵션 사항으로 입력, 및 출력 인덱스 값으로부터, 상태 머신에 대한 다음 상태를 결정한다. 그 다음, 프로세서는 프로세싱되고 있는 잠금 해제용 트랜잭션 출력에서의 다음 상태에 대해 결정된 다음 상태를 체크한다. 그들이 매치하지 않으면, 프로세서는 그것을 스크립트 실패로서 다루고 잠금 해제용 트랜잭션을 중지하고 그것의 유효성 확인을 행하지 않는다. 체크될 다른 옵션 사항의 제약이 있는 경우, 그들은 이 시점에서 체크될 수 있다. 모든 제약이 충족되면, 스크립트는 패스한다.
스마트 계약의 작업자 스포닝(Worker Spawning)
이전 섹션에서, 스마트 계약을 포킹하고 클로닝하는 능력이 설명되었다. 이 섹션은 잠금 해제용 트랜잭션에 존재하도록 새로운 스마트 계약을 강제하는 능력을 상술하는데, 그 새로운 스마트 계약은, 다른 완전히 상이한 상태 머신 또는 상태 머신이 아니라, 완전히 상이한 타입의 스마트 계약일 수도 있는 스마트 계약일 수 있다.
상태 머신인 새로운 스마트 계약을 강제할 제약의 예가 도 30에서 예시된다. 그곳에서 도시되는 바와 같이, 이전 트랜잭션의 출력의 잠금용 스크립트는, 잠금 해제용 트랜잭션의 출력 잠금용 스크립트가 소망되는 새로운 스마트 계약 스크립트와 동일해야 하도록, 또는 출력 잠금용 스크립트의 해시가 소망되는 새로운 스마트 계약 스크립트의 해시와 동일해야 하도록,잠금 해제용 트랜잭션의 출력에 대한 제약을 제공한다. 새로운 스마트 계약 스크립트 또는 해시는 이전 트랜잭션의 출력의 잠금용 스크립트에 하드코딩될 수 있거나 또는 잠금 해제용 트랜잭션 입력의 잠금 해제용 스크립트를 통해 파라미터로서 안전하게 제공될 수 있다. 잠금 해제용 트랜잭션 출력에서의 다수의 새로운 스마트 계약은, 각각의 새로운 스마트 계약에 대해 상기에서 설명되는 바와 같이 잠금용 스크립트에서 대응하는 제약을 갖는 것에 의해 강제될 수 있다.
설명되는 바와 같이, 상태 머신일 수도 있는 새로운 스마트 계약이 생성된다. 그것은, 이전 트랜잭션에 관해서 동일한 상태 머신일 수 있거나 또는 다른 완전히 상이한 상태 머신일 수 있다. 새로운 상태 및 전이 매트릭스는 체크될 수 있다. 이것은 개별적으로 행해질 수 있거나(예를 들면, 새로운 상태를 체크하고, 그 다음, 전이 매트릭스 값을 체크함) 또는 함께 행해질 수 있다.
비록 도 30에서 도시되지 않지만, 새로운 스마트 계약은 상태 머신 이외의 것일 수 있다. 그러한 경우, 다음 상태 값이 요구될 수도 있거나 또는 요구되지 않을 수도 있지만, 그러나 새로운 스마트 계약은 스크립트, 또는 그 해시의 동등성 검사를 사용하여 검증될 수 있다.
잠금 해제용 트랜잭션의 출력에 대한 새로운 스마트 계약 및 이전 트랜잭션에서의 현재 상태로부터 전이하여 새로운 스마트 계약이 스포닝될 수 있다. 도시되는 예에서, 잠금 해제용 트랜잭션의 출력의 제1 세트는 상태 전이 매트릭스를 복제하고 그리고 다음 상태(들)를 임베딩하도록 제한되고, 출력의 제2 세트는 새로운 스마트 계약을 포함하도록 제한된다. 잠금 해제용 트랜잭션의 출력은 새로운 잠금용 스크립트를 포함하도록 제한될 수 있고, 다수의 인덱스를 사용하는 것에 의해, 상이한 출력에 대해 상이한 제약이 적용될 수 있다. 새로운 스마트 계약의 세트는 전이 매트릭스에 하드코딩되거나 또는 입력의 일부로 제공될 수 있다.
상태 머신 관점에서, 상태 머신은, 호출 상태 머신과 동시에 실행할 새롭고 상이한 상태 머신을 인스턴스화할 수 있다. 이 접근법을 상태 머신에 적용하기 위해, 이 동작에 대한 잠금용 스크립트는 포크/클로닝 동작의 것과 유사할 수도 있지만, 그러나 자신의 잠금용 스크립트에서 동등성에 대해 체크되는 각각의 새로운 상태 머신 인스턴스 대신, 그것은 새로운 스마트 계약의 존재에 대해 체크될 수도 있다. 동등성 체크는, 트랜잭션에 대한 트랜잭션 필드의 직렬화된 세트, 잠금용 스크립트 바이트코드, 또는 이들의 해시를 비롯한, 상이한 값의 어떤 범위에 걸쳐 수행될 수 있다.
도 30은 새로운 스마트 계약을 스포닝하는 것을 예시한다. 그곳에서 예시되는 바와 같이, 상태 머신(3010)은 이전 트랜잭션(3020) 및 잠금 해제용 트랜잭션(3030)을 사용하여 구현된다. 이전 트랜잭션(3020)의 출력 Vout[0]의 잠금용 스크립트는, 후속하는 잠금 해제용 트랜잭션이 명시된 상태의 출력을 가질 것을(그리고 별개의 트랜잭션일 것을) 각각 요구하는 적어도 두 개의 출력 Vout[x] 및 Vout[y]을 가지도록 잠금 해제용 트랜잭션(3030)을 제한한다. 구체적으로, 도시되는 바와 같이, 잠금 해제용 트랜잭션(3030)의 입력 Vin[0]이 이전 트랜잭션(3020)의 Vout[0]을 잠금 해제하기 위해, 잠금 해제용 트랜잭션(3030)은, 새로운 스마트 계약을 가지도록 Vout[y]를 또한 제한하면서, Vout[x]가 전이 매트릭스를 가지게 하고 상태 S4에 있게 하도록 제한될 수도 있다.
이 접근법을 사용하여, 새로운 스마트 계약은 상태 머신과 병렬로 프로세싱될 수 있다. 비록 명시적으로 도시되지는 않지만, 새로운 스마트 계약은 제2 상태 머신일 수 있다. 상기에서 설명되는 바와 같이, 새로운 스마트 계약은 그 자체가 상태 머신일 필요는 없는데, 이 경우, 결과적으로 나타나는 스마트 계약은 상태 값에 대한 필드를 가질 필요가 없을 수도 있다.
도 30에서 점선의 화살표에 의해 나타내어지는 바와 같이, 잠금 해제용 트랜잭션(3030)의 입력 Vin[0]은 이전 트랜잭션(3020) 및 그 트랜잭션의 출력 Vout[0]을 지시한다. 이것은 이전 트랜잭션(3020)의 TxID의 형태일 수도 있고, 출력 Vout[0]을 가리키도록 "0"으로 설정되는 정수 값일 수도 있다. Vout[0]의 잠금용 스크립트는 현재 상태("S3"), 상태 머신에 대한 전이 매트릭스를 포함하고, 잠금 해제용 트랜잭션(3030)의 Vout[x]을 다음 상태("S4")의 상태 머신이 되도록 그리고 잠금 해제용 트랜잭션(3030)의 Vout[y]를 새로운 스마트 계약(new smart contract; "NSC"), 및 어쩌면 다른 제약이 되도록 제한한다.
한 예로서, 작업자 스포닝 프로세스의 한 예 및 잠금 해제용 트랜잭션에 존재하도록 새로운 스마트 계약을 강제하기 위한 프로세스에 대한 의사 코드는 도 31에서 도시되는 바와 같을 수도 있다.
스마트 계약의 병합
두 개 이상의 상태가 동일한 다음 상태로 병합될 필요가 있는 경우, 상태의 병합 또는 결합이 사용될 수 있다. 몇몇 경우에, 동시에 동작하는 상태 머신은 동일한 상태에 있는 그들 자신을 발견할 수도 있지만, 그러나, 스마트 계약에 의해 요구되지 않는 경우, 병합되지 않을 수도 있다. 예를 들면, 도 26의 상태 다이어그램에서, S4 및 S7이 S8로 개별적으로 전이하고 두 개의 별개의 트랜잭션으로서 유지되는 것이 가능할 수도 있다.
도 32는 상태 머신(3210)의 병합 동작을 예시한다. 이 경우, 잠금 해제용 트랜잭션(3230)(입력 Vin[0] 및 Vin[1] 및 출력 Vout[x]을 가짐)은, 이전 트랜잭션(3220) 및 이전 트랜잭션(3222) 둘 모두의 출력 Vout[0]을 잠금 해제한다. 이들 기술을 사용하여, 스마트 계약은 그 자신의 새로운 인스턴스를 인스턴스화하는 것에 의해 또는 상이한 스마트 계약을 인스턴스화하는 것에 의해 분기될 수 있으며, 동일한 또는 동일하지 않은 다수의 스마트 계약은 자신의 대응하는 상태 머신을 통해 단일의 스마트 계약을 형성하도록 병합될 수 있다.
각각의 병합하는 잠금 해제용 트랜잭션은 하나의 잠금용 스크립트를 가질 수도 있다. 이 잠금용 스크립트는 단일의 스마트 계약의 실행을 지속한다. 이것은 스마트 계약 중 하나가 병합되는 것, 또는 완전히 새로운 스마트 계약 중 어느 하나일 수 있다. 어쨌든, 다수의 체크가 수행될 수도 있다. 스마트 계약의 각각은 잠금 해제용 트랜잭션에 대한 유효한 입력인 것으로 체크될 수도 있다. 이것은 이전 트랜잭션을 사용하는 유효성 확인에 의해 수행될 수 있다.
도 32에서 도시되는 바와 같이, Vin[0]은 이전 트랜잭션(3220) 및 그것의 출력 Vout[0]을 가리키고, 한편 Vin[1]은 이전 트랜잭션(3222) 및 그것의 출력 Vout[0]을 지시한다. Vout[0] 둘 모두의 잠금용 스크립트는, 다음 상태(S8) 및 상태 전이 매트릭스를 가지도록 잠금 해제용 트랜잭션(3230)의 Vout[x]를 제한한다. 이들 제약은, 새로운 스마트 계약이 잠금 해제용 트랜잭션의 출력인지를 체크하는 이전 트랜잭션(3222)의 잠금용 스크립트에 의해 시행될 수도 있다.
이것을 동시적 상태 머신을 사용하여 달성하기 위해, 트랜잭션은, 결합될 필요가 있는 각각의 상태 머신에 대한 입력을 갖는 다수의 입력을 사용할 수 있다. 상태 머신 전이 매트릭스 내에서, 모든 결합된 독립적인 상태 머신의 상태를 체크하기 위해, 제약이 추가될 수 있다. 결합된 상태 머신 중 하나가 수렴하도록 허용되는 상태가 아닌 경우, 트랜잭션은 거부될 수도 있다. 결합 동작을 보장하기 위해, 두 개의 잠금 해제용 스크립트가 존재하는지를 체크하기 위해, 잠금 해제용 트랜잭션에서의 상태에 기초하여, 상태 머신에 제약이 추가될 수 있다. 각각의 스크립트에 대해, 각각이 전이에 필요한 정확한 상태에 있다는 것을 보장하기 위해, 체크가 수행될 수 있다. 본원의 그 밖의 곳에서 설명되는 바와 같이, 상호 의존적 잠금용 제약이 또한 사용될 수도 있다.
도 33은 약한 의존성을 사용하여 잠금 해제용 트랜잭션에서의 스마트 계약을 병합하기 위한 프로세스의 한 예로서의 의사 코드 시퀀스를 예시한다. 병합을 위해, 현재 상태의 세트(반드시 고유 상태는 아님)로부터 공유된 다음 상태의 세트로의 전이가 발생한다. 잠금 해제용 트랜잭션의 관점에서, 그것의 입력의 세트는, 동일한 출력이 전이 매트릭스를 복제해야 하고 동일한 다음 상태를 임베딩해야 한다는 제약을 공유하는 잠금용 스크립트 세트를 잠금 해제하고 있을 수도 있다. 약한 의존성의 경우, 동일한 출력에 대해 동일한 다음 상태를 그렇게 우연히 갖게 되는 다수의 상태 머신이 존재할 수도 있다.
도 32 및 도 33에 따른 병합은, 약한 의존성을 가지고 발생할 수 있다. 잠금용 스크립트는, 상호 의존성, 포킹, 새로운 스마트 계약의 스포닝, 등등과 같은 다른 제약을 포함할 수 있다. 약한 의존성의 예로서, 병합이 동시에 발생하는 경우, 잠금용 스크립트 1은 상태 A로부터 상태 X 및 Y로의 포크일 수도 있고 잠금용 스크립트 2는 상태 B로부터 상태 X로의 정상적인 전이일 수도 있다. 그들 두 개의 잠금용 스크립트는, 상태 X를 포함하도록 잠금 해제용 트랜잭션의 출력을 단지 그렇게 우연히 제한한다.
도 33의 의사 코드 시퀀스에서, 그 의사 코드 시퀀스에 따라 스크립트를 프로세싱하는 프로세서는, 이전 트랜잭션, 잠금 해제용 트랜잭션, 및 옵션 사항으로 몇몇 입력 데이터를 삽입할 수도 있고, 진행하기 이전에 종료 조건을 체크할 수도 있다. 그 다음, 프로세서는 이전 트랜잭션 잠금용 스크립트 및 잠금 해제용 트랜잭션 잠금용 스크립트를 추출한다. 다음으로, 프로세서는, 이전 트랜잭션 잠금용 스크립트에서의 전이 매트릭스가 잠금 해제용 트랜잭션 잠금용 스크립트에서의 전이 매트릭스와 동일한지를 체크하고, 아니라면, 중단할 수도 있다. 그로부터, 프로세서는 이전 트랜잭션의 현재 상태 값을 추출하고, 그것으로부터, 그리고 전이 매트릭스 및 입력(사용되는 경우)으로부터, 다음 상태를 결정하고 다음 상태를 체크하여 그것이 잠금 해제용 트랜잭션 잠금용 스크립트에서의 다음 상태와 매치하는지를 결정한다. 옵션 사항으로, 다른 제약이 여기에서 체크될 수 있다.
도 34는 명시적 의존성을 사용하여 잠금 해제용 트랜잭션에서의 스마트 계약을 병합하기 위한 프로세스의 한 예로서의 의사 코드 시퀀스를 예시한다. 명시적 의존성의 경우, 다수의 상태 머신이 있을 수도 있고, 그들이 동일한 출력에 대해 동일한 다음 상태를 우연히 가질 만큼 그것이 충분하지 않을 수도 있지만, 그러나, 추가적으로, 그들은 특정한 상태 머신일 수도 있다. 도 32 및 도 34에 따른 병합은, 명시적 의존성에 의해 발생할 수 있다. 강한 제약에서, 잠금 해제용 트랜잭션은 두 개 이상의 특정한 병합 상태 머신을 지시하도록 요구받을 수도 있다.
도 34의 의사 코드 시퀀스에서, 그 의사 코드 시퀀스에 따라 스크립트를 프로세싱하는 프로세서는, 이전 트랜잭션, 잠금 해제용 트랜잭션, 및 옵션 사항으로 몇몇 입력 데이터를 삽입할 수도 있고, 진행하기 이전에 종료 조건을 체크할 수도 있다. 그 다음, 프로세서는 잠금 해제용 트랜잭션 잠금용 스크립트를 추출한다. 다음으로, 프로세서는 입력 인덱스의 세트를 루프 스루할 수도 있고 그것의 대응하는 이전 트랜잭션 잠금용 스크립트를 추출하고, 대응하는 이전 트랜잭션 잠금용 스크립트에서의 전이 매트릭스가 잠금 해제용 트랜잭션 잠금용 스크립트에서의 전이 매트릭스와 동일한지를 체크하고, 아니라면, 중단한다. 그로부터, 프로세서는 이전 트랜잭션의 현재 상태 값을 추출하고 그것을 현재 상태 리스트에 추가하고 다른 입력에 대해 반복한다. 현재 상태로부터 그리고 전이 매트릭스 및 입력(사용되는 경우)으로부터, 프로세서는 다음 상태를 결정하고 다음 상태를 체크하여 그것이 잠금 해제용 트랜잭션 잠금용 스크립트에서의 다음 상태와 매치하는지를 결정한다. 옵션 사항으로, 다른 제약이 여기에서 체크될 수 있다.
병렬 스마트 계약/장벽
상기에서 설명되는 바와 같이, 두 개 이상의 스마트 계약은, 약한 또는 강한 제약을 사용하여 단일의 스마트 계약으로 병합될 수 있다. 함께 병렬로 실행될 수 있는 두 개 이상의 스마트 계약을 갖는 것이 또한 유용할 수도 있다. 이것은, 두 개의 동시적 경로가 하나의 잠금 해제용 트랜잭션을 통과해야 한다는 것이 제약일 수도 있다는 점에서, 단지 동시적 프로세싱 이상의 것일 수도 있다. 이것은 또한 동시적 상태 머신에서 "장벽"에 대해 사용될 수 있는데, 이 경우, 상태 머신의 그 밖의 곳에서 다른 전이가 발생할 때까지 특정한 전이는 발생하도록 허용되지 않을 수도 있다.
도 35는 병렬 프로세싱 동작을 예시한다. 이 경우, 잠금 해제용 트랜잭션(3530)은, 이전 트랜잭션(3520) 및 이전 트랜잭션(3530)의 각각에 대해 하나씩의 두 개의 입력(Vin[0], Vin[1]), 및 별개의 스마트 계약을 각각 지속시키기 위한 하나씩의 두 개의 출력(Vout[x], Vout[y])을 갖는다. 잠금 해제용 트랜잭션(3530)은 스마트 계약의 이전 트랜잭션의 각각을 포함하는 잠금 해제용 스크립트를 포함한다. 또한, 각각의 스마트 계약의 실행을 지속하기 위해서는, 각각의 스마트 계약에 대한 잠금용 스크립트가 필요로 될 수도 있다. 병렬 스마트 계약을 사용하여, 각각의 계약이 독립적으로 전이할 수는 없지만, 그러나 대신, (잠금용 스크립트에서 정의되는 바와 같은) 모든 계약이 동시에 발생할 필요가 있다.
앞선 예는 스마트 계약을 포킹하고, 두 개의 스마트 계약을 병합하고, 그리고 그 둘(또는 더 많은 스마트 계약)의 병렬 동작을 위해 제공되었다. 그들은 병렬 스마트 계약과 연계하여 사용될 수 있다. 상태 전이가 다른 것과 논리적 관계를 갖는 경우 장벽이 사용될 수도 있다. 한 예로서, 그것은 다른 상태 머신이 특정한 상태에 있는 것을 필요로 할 수도 있거나, 또는 그 상태 머신으로부터의 입력 데이터를 필요할 수도 있다.
이 기능성을 용이하게 하기 위해, 다수의 입력 및 출력을 포함하는 잠금 해제용 트랜잭션이 생성될 수 있다. 장벽에서 필요로 되는 상태 머신(전이하는 것, 또는 제약에서 수반되는 것)의 각각은 그들 자신의 잠금 해제용 스크립트에 포함될 수도 있다. 전이가 진행 중인 각각의 상태 머신에 대해, 잠금용 스크립트가 사용될 수도 있다. 도 26에서 도시되는 예에서, 상태 S9로부터 S10으로의 전이는, S6으로부터 S7로의 전이가 동시에 발생하는 경우에만, 허용된다. 잠금 해제용 트랜잭션에서의 이것을 위해, 상태 S6에 있는 상태 머신에 대한 하나와, 상태 S9에 있는 상태 머신에 대한 하나인 두 개의 잠금 해제용 스크립트가 있을 것이다. 그러면, 잠금 해제용 트랜잭션은, 여전히 S7에 있는 상태 머신에 대한 하나와, 이제 S10에 있는 상태 머신에 대한 하나인 두 개의 잠금용 스크립트를 갖는다.
도 36은, 병렬 트랜잭션 입력/출력을 필요로 하는 동시적 상태 머신에서 장벽을 사용하기 위한 한 예로서의 의사 코드 시퀀스이다. 이 예에서, 그 의사 코드 시퀀스에 따른 스크립트는, 이전 트랜잭션의 각각이 잠금 해제용 트랜잭션에서의 것과 동일한 잠금용 스크립트를 갖는지를 체크한다. 이 예에서, 하나의 잠금용 스크립트는 제1 이전 트랜잭션, 등등과 매치하도록 설정된다. 다음으로, 그 의사 코드 시퀀스에 따른 스크립트는 이전 트랜잭션 둘 모두로부터 현재 상태를 추출하고, 상태 머신 둘 모두에 대한 입력을 판독하고, 상태 전이 둘 모두에 대해 설정되는 임의의 장벽을 체크한다.
다시 도 35를 참조하면, 다양한 의존성이 점선의 화살표 및 숫자로 표시된 원을 사용하여 도시된다. 의존성 #1은, Vin[0]이 이전 트랜잭션(3520)을 참조해야 한다는 것일 수도 있고, 의존성 #2는, Vin[0]이 명시된 트랜잭션(이전 트랜잭션(3520))의 제1 출력(Vout[0])을 참조해야 한다는 것일 수도 있고, 의존성 #3은, Vin[1]이 이전 트랜잭션(3522)을 참조해야 한다는 것일 수도 있고, 의존성 #4는 Vin[1]이 명시된 트랜잭션(이전 트랜잭션(3522))의 제1 출력(Vout[0])을 참조해야 한다는 것일 수도 있다. 이것은 단순히, Vin[0]이 트랜잭션(3520)의 Vout[0]을 참조해야 한다는 의존성 및 Vin[1]이 트랜잭션(3522)의 Vout[0]을 참조해야 한다는 의존성의 두 가지 의존성일 수도 있다.
이전 트랜잭션(3520)의 Vout[0]의 잠금용 스크립트는, Vout[x]가 상태 = S8을 가져야 하고 상태 머신 1에 대한 전이 매트릭스를 가져야 한다는 것을 규정하는 의존성 #5를 부과하고, Vout[y]가 상태 = S8을 가져야 하고 상태 머신 2에 대한 전이 매트릭스를 가져야 한다는 것을 규정하는 의존성 #6을 부과한다. 이전 트랜잭션(3522)의 Vout[0]의 잠금용 스크립트는 유사한 방식으로 의존성 #7 및 #8을 부과한다. 몇몇 예에서, 상태 머신의 제약 대신, 그것은 어떤 다른 형태의 스마트 계약의 제약일 수도 있다. 두 개(또는 그 이상)의 이전 트랜잭션 출력이 두 개(또는 그 이상)의 잠금 해제용 트랜잭션 출력을 제한하기 때문에, 병렬 스마트 계약이 제공될 수 있다.
장벽은 병합과는 상이할 수도 있다. 장벽은, 현재 상태(반드시 고유한 상태는 아님)의 세트로부터의 전이가 동시에 발생하도록 제한되는 곳에 있을 수도 있다. 잠금 해제용 트랜잭션의 관점에서, 그것의 입력의 세트는 상호 의존적 잠금용 스크립트의 세트를 잠금 해제하고 있을 수도 있는데, 그 모두는 그들 각각의 제약을 출력의 세트에 적용하고 있을 수도 있다. 상호 의존적 잠금용 스크립트는 요건일 수도 있고 공유된 다음 상태의 세트는, 비록 가능하지만, 필요로 되지 않을 수도 있다. 소정의 전이가 이 상호 의존성을 필요로 하도록, 상호 의존적 잠금용 스크립트가 전이 매트릭스에 임베딩될 수 있다.
도 37은 장벽/병렬 스마트 계약에 대한 사용 사례에 대한 상태 다이어그램을 예시한다. Alice 및 Bob 춤추는 법을 학습하고 있고 댄싱 레슨에 간다는 것을 가정한다. 댄스 학생의 진척도를 유지하는 방법으로서, 그들의 진척도는 상태 머신의 사용을 통해 기록될 수도 있다. 첫째, 모든 댄스 타입의 그들의 전체적인 댄싱 능숙도와 관련하여 상태를 포함하는 등급 사이에 상태 머신이 있을 수도 있다. 이것은 상태 S1, S3, S5, 및 마지막으로 S6으로 표현된다. 이들 등급 상태는, 학생이 댄스 클럽에서 지원되는 최고 등급에 도달할 때까지, 순차적으로 진척된다. 다음 등급으로 진급하기 위해(예를 들면, S1에서 S3으로), 학생은 여러 가지 댄스 타입에 도달할 것을 요구받을 수도 있다. 각각의 댄스 타입은 더 작은 임베딩 상태 머신(예를 들면, S2 및 S4)을 사용하여 모니터링될 수도 있다. 이 사용 사례에서, 다음의 동작이 있을 수 있다:
1) 포크 또는 클론 - 이것은 포인트 S1 및 S5에서 사용될 수도 있는데, 새로운 등급의 시작을 시그널링하고, 그에 의해, 각각의 댄스 타입에 대해 하나씩의 다수의 상태 머신으로의 포크가 있을 수도 있다.
2) 작업자 스포닝 - 이것은 특정한 댄스 타입이 더 많은 레슨, 또는 제공되는 다른 댄스 타입에 대한 상이한 평가를 필요로 하는 어떤 포인트에서 사용될 수도 있다.
3) 병합 - 이 프로세스는 학생이 새로운 등급에 도달하는 경우 포인트 S3 및 S6에서 사용될 수도 있다. 새로운 등급에 대해, 각각의 학생은 임베딩된 댄스 상태 머신의 최종 상태인 S4에서 평가될 필요가 있다.
4) 병렬 트랜잭션/장벽 - 이것은 하나의 상태 머신에서의 상태 전이를 다른 것으로 제한하기 위해 사용될 수도 있다. 이 사용 사례의 경우, 단일의 레슨에서 단일의 댄스 타입을 수행할 수 없기 때문에, S2와 S4 사이의 전이가 함께 발생할 필요가 있다는 것을 가정할 수 있다.
따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 한다. 그러나, 청구범위에서 기술되는 바와 같은 본 발명의 범위를 벗어나지 않으면서 다양한 수정 및 변경이 이루어질 수도 있다는 것이 명백할 것이다. 마찬가지로, 다른 변형예도 본 개시의 범위 내에 있다. 따라서, 개시된 기술이 다양한 수정 및 대안적인 구성을 허용하지만, 그것의 소정의 예시된 실시형태가 도면에 도시되고 상기에서 상세하게 설명되었다. 그러나, 본 발명을 개시되는 특정한 형태 또는 형태들로 제한하려는 의도가 있는 것이 아니라, 반대로, 본 발명은, 첨부된 청구범위에서 정의되는 바와 같은 본 발명의 범위 내에 속하는 모든 수정예, 대안적인 구성예 및 등가예를 포괄할 것이다는 것이 이해되어야 한다.
개시된 실시형태를 설명하는 맥락에서(특히, 다음의 청구범위의 맥락에서) 용어 "a(한)" 및 "an(한)" 및 "the(그)" 및 유사한 지시어의 사용은, 달리 지시되지 않는 한 또는 문맥에 의해 명확하게 부정되지 않는 한, 단수 및 복수 둘 모두를 포괄하도록 해석되어야 한다. 용어 "포함하는(comprising)", "구비하는(having)", "포함하는(including)" 및 "함유하는(containing)"은, 달리 언급되지 않는 한, 확장 가능한(open-ended) 용어(즉, "~를 포함하지만, 그러나 ~로 제한되지 않는"을 의미함)로서 해석되어야 한다. 용어 "연결되는(connected)"은, 수식되지 않고 물리적인 연결을 지칭하는 경우, 개입하는 어떤 것이 있더라도, 부분적으로 또는 전체적으로 포함되는, 부착되는 또는 함께 결합되는 것으로 해석되어야 한다. 본 개시에서 값의 범위의 열거는, 달리 지시되지 않는 한, 그 범위 내에 속하는 각각의 별개의 값을 개별적으로 지칭하는 약기법(shorthand method)으로서 역할을 하도록 의도되는 것에 불과하며, 각각의 별개의 값은, 마치 그것이 개별적으로 열거되는 것처럼, 본 명세서에 통합된다. 달리 언급되거나 또는 문맥에 의해 부정되지 않는 한, 용어 "세트"(예를 들면, "아이템의 세트") 또는 "서브세트"의 사용은, 하나 이상의 멤버를 포함하는 비어 있지 않은 집합으로서 해석되어야 한다. 또한, 달리 언급되거나 또는 문맥에 의해 부정되지 않는 한, 대응하는 세트의 "서브세트"라는 용어는 대응하는 세트의 적절한 서브세트를 반드시 나타내는 것은 아니며, 서브세트 및 대응하는 세트는 동일할 수도 있다.
달리 명시적으로 언급되지 않는 한 또는 문맥에 의해 달리 명백하게 부정되지 않는 한, "A, B, 및 C 중 적어도 하나", 또는 "A, B 또는 C 중 적어도 하나"의 형태의 어구와 같은 접속 언어는, 아이템, 용어, 등등이 A 또는 B 또는 C일 수도 있거나, 또는 A 및 B 및 C의 세트의 임의의 비어 있지 않은 서브세트일 수도 있다는 것을 제시하기 위해 일반적으로 사용되는 바와 같은 맥락과 함께 달리 이해된다. 예를 들면, 세 개의 멤버를 갖는 세트의 예시적인 예에서, 접속 어구 "A, B, 및 C 중 적어도 하나" 및 "A, B 또는 C 중 적어도 하나"는 다음의 세트 중 임의의 것을 지칭한다: { A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. 따라서, 그러한 접속 언어는, 일반적으로, 소정의 실시형태가 A 중 적어도 하나, B 중 적어도 하나 및 C 중 적어도 하나 각각이 존재할 필요가 있음을 암시하도록 의도되지 않는다.
설명되는 프로세스의 동작은 달리 지시되지 않는 한 또는 문맥에 의해 달리 명확하게 부정되지 않는 한, 임의의 적절한 순서로 수행될 수 있다. 설명되는 프로세스(또는 그 변형 및/또는 조합)는, 실행 가능한 명령어를 가지고 구성되는 하나 이상의 컴퓨터 시스템의 제어 하에서 수행될 수도 있고, 하드웨어 또는 그 조합에 의해, 하나 이상의 프로세서 상에서 일괄적으로(collectively) 실행되는 코드(예를 들면, 실행 가능 명령어, 하나 이상의 컴퓨터 프로그램 또는 하나 이상의 애플리케이션)로서 구현될 수도 있다. 코드는, 예를 들면, 하나 이상의 프로세서에 의해 실행 가능한 복수의 명령어를 포함하는 컴퓨터 프로그램 형태로, 컴퓨터 판독 가능 저장 매체 상에 저장될 수도 있다. 컴퓨터 판독 가능 저장 매체는 비일시적일 수도 있다.
제공되는 예, 또는 예시적인 언어(예를 들면, "예컨대") 중 임의의 것 또는 모두의 사용은, 단지 본 발명의 실시형태를 더욱 잘 조명하도록 의도되는 것에 불과하며, 달리 청구되지 않는 한, 본 발명의 범위에 대해 제한을 부과하지는 않는다. 본 명세서에서의 어떤 언어도, 임의의 청구되지 않은 엘리먼트를 본 발명의 실시에 필수적인 것으로 나타내는 것으로 해석되지 않아야 한다.
본 발명을 수행하기 위한 본 발명자에게 알려진 최상의 모드를 포함하여, 본 개시의 실시형태가 설명된다. 그들 실시형태의 변형예는, 전술한 설명의 판독시, 기술 분야에서 통상의 지식을 가진 자에게 명백하게 될 수도 있다. 본 발명자는, 숙련된 기술자가, 그러한 변형예를 적절히 활용하기를 기대하고, 본 발명자는, 본 개시의 실시형태가 구체적으로 설명된 것과는 달리 실시되는 것을 의도한다. 따라서, 본 개시의 범위는, 적용 가능한 법률에 의해 허용되는 바와 같은 본원에 첨부되는 청구범위에서 열거되는 주제의 모든 수정예 및 등가예를 포함한다. 더욱이, 그 모든 가능한 변형예에서 상기 설명된 엘리먼트의 임의의 조합은, 달리 지시되지 않는 한 또는 문맥에 의해 달리 명백하게 부정되지 않는 한, 본 개시의 범위에 의해 포괄된다.
인용되는 출판물, 특허 출원, 및 특허를 비롯한, 모든 참고 문헌은, 마치 각각의 참고 문헌이 참조에 의해 통합되도록 개별적으로 그리고 구체적으로 나타내어지고 그 전체가 기술되는 것과 동일한 정도로 참조에 의해 본원에 통합된다.
상기 언급된 실시형태는 본 발명을 제한하기 보다는 예시하는 것이며, 기술 분야의 숙련된 자는, 첨부된 청구범위에 의해 정의된 바와 같은 본 발명의 범위를 벗어나지 않으면서, 많은 대안적인 실시형태를 설계할 수도 있을 것이다는 것을 유의해야 한다. 청구범위에서, 괄호 안에 놓이는 임의의 참조 부호는 청구범위를 제한하는 것으로 해석되지 않아야 한다. 단어 "포함하는(comprising)", "포함한다(comprises)", 및 등등은, 임의의 청구항 또는 명세서 전체에서 열거되는 것 이외의 엘리먼트 또는 단계의 존재를 배제하지는 않는다. 본 명세서에서, "포함한다(comprises)"는, "포함하거나 또는 구성된다(includes or consists of)"를 의미하고 "포함하는(comprising)"은 "포함하거나 또는 구성되는(including or consisting of)"을 의미한다. 엘리먼트의 단수의 참조는, 그러한 엘리먼트의 복수의 참조를 배제하지 않으며, 그 반대도 마찬가지이다. 본 발명은, 여러 가지 별개의 엘리먼트를 포함하는 하드웨어에 의해 그리고 적절히 프로그래밍된 컴퓨터에 의해 구현될 수도 있다. 여러 가지 수단을 열거하는 장치 청구항에서, 이들 수단 중 몇몇은 하드웨어의 하나의 그리고 동일한 아이템에 의해 구현될 수도 있다. 소정의 조치가 상이한 종속 청구항에서 인용된다는 단순한 사실은, 이들 조치의 조합이 유리하게 사용될 수 없다는 것을 나타내지는 않는다.

Claims (15)

  1. 컴퓨터로 구현된 방법으로서,
    블록체인 트랜잭션을 생성하는 단계 - 상기 블록체인 트랜잭션은,
    제1 상태에 있으며 허용 가능한 상태 전이의 세트를 갖는 상태 머신과,
    잠금 해제용 트랜잭션(unlocking transaction)으로 하여금,
    상기 허용 가능한 상태 전이의 세트에 따라 상기 상태 머신을 인코딩하게 하기 위해, 그리고
    상기 잠금 해제용 트랜잭션에 대한 입력에 대한 제한(restriction)을 준수하게 하기 위해 또는 상기 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 하기 위해
    실행될 스크립트 엘리먼트의 세트
    를 인코딩함 - 와,
    상기 블록체인 트랜잭션으로 하여금, 블록체인 네트워크 내의 노드에 의해 유효성이 확인되게 하는 단계를 포함하는
    컴퓨터로 구현된 방법.
  2. 제1항에 있어서,
    상기 허용 가능한 상태 전이의 세트는, 별개의 블록체인 트랜잭션에서 독립적으로 그리고 동시에 구현될 수 있는 상태 전이를 포함하는,
    컴퓨터로 구현된 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 스크립트 엘리먼트의 세트는 상기 잠금 해제용 트랜잭션으로 하여금 상기 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 하고,
    상기 출력에 대한 제한은,
    상기 잠금 해제용 트랜잭션의 제1 출력에게, 상기 허용 가능한 상태 전이의 세트에 따라 상기 제1 출력에 대응하는 상태를 나타낼 것을, 그리고
    상기 잠금 해제용 트랜잭션의 제2 출력에게, 상기 허용 가능한 상태 전이의 세트에 따라 상기 제2 출력에 대응하는 상태를 나타낼 것을
    요구하는,
    컴퓨터로 구현된 방법.
  4. 제3항에 있어서,
    상기 제1 출력에 대응하는 상태와 상기 제2 출력에 대응하는 상태는 동일한,
    컴퓨터로 구현된 방법.
  5. 제3항에 있어서,
    상기 제1 출력에 대응하는 상태와 상기 제2 출력에 대응하는 상태는 상이한 상태인,
    컴퓨터로 구현된 방법.
  6. 제1항 또는 제2항에 있어서,
    상기 스크립트 엘리먼트의 세트는 상기 잠금 해제용 트랜잭션으로 하여금 상기 잠금 해제용 트랜잭션의 입력에 대한 제한을 준수하게 하고,
    상기 입력에 대한 제한은, 다른 블록체인 트랜잭션에 인코딩되는 다른 상태 머신을 나타낼 것을, 상기 잠금 해제용 트랜잭션에 대한 입력에게 요구하는,
    컴퓨터로 구현된 방법.
  7. 제1항 또는 제2항에 있어서,
    상기 입력에 대한 제한은, 상기 입력에게, 상기 제1 상태에서 상기 상태 머신을 참조할 것을 그리고 상기 제1 상태와는 상이한 다른 상태에서 상기 다른 상태 머신을 참조할 것을 요구하는,
    컴퓨터로 구현된 방법.
  8. 제7항에 있어서,
    상기 제1 상태로부터 제2 상태로의 제1 전이는 상기 허용 가능한 상태 전이의 세트 내에 있고,
    상기 다른 상태로부터 상기 제2 상태로의 제2 전이는 상기 허용 가능한 상태 전이의 세트 내에 있는,
    컴퓨터로 구현된 방법.
  9. 제1항 또는 제2항에 있어서,
    상기 스크립트 엘리먼트의 세트는 상기 잠금 해제용 트랜잭션으로 하여금 상기 잠금 해제용 트랜잭션의 입력에 대한 제한을 준수하게 하고,
    상기 입력에 대한 제한은 상기 상태 머신을 진척시키기 위한 조건의 세트를 나타내고,
    상기 상태 머신을 진척시키기 위한 조건의 세트는 다른 상태 머신의 상태에 의존하는,
    컴퓨터로 구현된 방법.
  10. 제9항에 있어서,
    상기 다른 상태 머신은 다른 블록체인 트랜잭션에서 인코딩되고,
    상기 다른 블록체인 트랜잭션은 상기 다른 상태 머신을 진척시키기 위한 조건의 세트를 인코딩하고,
    상기 다른 상태 머신을 진척시키기 위한 다른 조건의 세트는 상기 상태 머신의 상태에 의존하는,
    컴퓨터로 구현된 방법.
  11. 제1항 또는 제2항에 있어서,
    상기 스크립트 엘리먼트의 세트는 상기 잠금 해제용 트랜잭션으로 하여금 상기 잠금 해제용 트랜잭션의 출력에 대한 제한을 준수하게 하고,
    상기 출력에 대한 제한은, 상기 잠금 해제용 트랜잭션에게, 스마트 계약(smart contract)의 요소의 세트를 상기 출력에 통합할 것을 요구하는,
    컴퓨터로 구현된 방법.
  12. 제11항에 있어서,
    상기 스마트 계약의 요소의 세트는 다른 블록체인 트랜잭션으로부터 획득되는,
    컴퓨터로 구현된 방법.
  13. 제1항 또는 제2항에 있어서,
    상기 스크립트 엘리먼트의 세트는, 상기 잠금 해제용 트랜잭션으로 하여금, 상기 잠금 해제용 트랜잭션의 입력에 대한 제한 및 상기 잠금 해제용 트랜잭션의 출력에 대한 제한 둘 모두를 준수하게 하는,
    컴퓨터로 구현된 방법.
  14. 시스템으로서,
    프로세서와,
    상기 프로세서에 의한 실행의 결과로서, 상기 시스템으로 하여금 제1항 또는 제2항에 기재된 컴퓨터로 구현된 방법을 수행하게 하는 실행 가능 명령어를 포함하는 메모리를 포함하는
    시스템.
  15. 컴퓨터 시스템의 프로세서에 의해 실행되는 것의 결과로서 상기 컴퓨터 시스템으로 하여금 제1항 또는 제2항에 기재된 컴퓨터로 구현된 방법을 적어도 수행하게 하는 실행 가능 명령어가 저장된
    비일시적 컴퓨터 판독 가능 저장 매체.
KR1020207006774A 2017-08-29 2018-08-24 블록체인을 사용한 동시적 상태 머신 프로세싱 KR102609711B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
GB1713794.4 2017-08-29
GB1713805.8 2017-08-29
GBGB1713790.2A GB201713790D0 (en) 2017-08-29 2017-08-29 Computer-implemented system and method
GBGB1713805.8A GB201713805D0 (en) 2017-08-29 2017-08-29 Computer-implemented system and method
GB1713790.2 2017-08-29
GBGB1713794.4A GB201713794D0 (en) 2017-08-29 2017-08-29 Computer-implemented system and method
PCT/IB2018/056430 WO2019043536A1 (en) 2017-08-29 2018-08-24 SIMULTANEOUS PROCESSING OF STATE MACHINES USING A BLOCK CHAIN

Publications (2)

Publication Number Publication Date
KR20200044014A KR20200044014A (ko) 2020-04-28
KR102609711B1 true KR102609711B1 (ko) 2023-12-06

Family

ID=63638178

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207006774A KR102609711B1 (ko) 2017-08-29 2018-08-24 블록체인을 사용한 동시적 상태 머신 프로세싱

Country Status (7)

Country Link
US (3) US20200202350A1 (ko)
EP (6) EP4283550A3 (ko)
JP (6) JP7250771B2 (ko)
KR (1) KR102609711B1 (ko)
CN (3) CN111033542A (ko)
SG (1) SG11202000806UA (ko)
WO (3) WO2019043538A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019209059A1 (en) * 2018-04-25 2019-10-31 Samsung Electronics Co., Ltd. Machine learning on a blockchain
US10929473B2 (en) * 2018-09-27 2021-02-23 Palo Alto Research Center Incorporated Integrated index blocks and searching in blockchain systems
WO2020081076A1 (en) * 2018-10-17 2020-04-23 Hewlett-Packard Development Company, L.P. Apparatus and method for dynamic sharding of concurrent blockchains
CN111131345B (zh) * 2018-10-30 2022-04-15 伊姆西Ip控股有限责任公司 多云计算环境中的分散式节点查找器
CN110770776B (zh) * 2019-03-04 2023-10-31 创新先进技术有限公司 向区块链系统提供交易数据以进行处理的方法和设备
EP3918750B1 (en) * 2019-03-06 2023-10-04 NEC Corporation Turing-complete smart contracts for cryptocurrencies
JP6827564B2 (ja) 2019-04-12 2021-02-10 アドバンスド ニュー テクノロジーズ カンパニー リミテッド 分散型台帳システムにおけるトランザクションのパラレル実行の実施
EP3619668B1 (en) 2019-04-12 2023-12-20 Advanced New Technologies Co., Ltd. Performing parallel execution of transactions in a distributed ledger system
US11416548B2 (en) * 2019-05-02 2022-08-16 International Business Machines Corporation Index management for a database
GB2587773A (en) * 2019-05-24 2021-04-14 Nchain Holdings Ltd Streaming portions of data over a side channel
GB201907347D0 (en) * 2019-05-24 2019-07-10 Nchain Holdings Ltd In-script functions within a blockchain transaction
GB2588072A (en) * 2019-05-24 2021-04-21 Nchain Holdings Ltd Malleability of transactions for inclusion in a blockchain
US11126593B2 (en) 2019-06-15 2021-09-21 Facebook, Inc. Scalable, secure, efficient, and adaptable distributed digital ledger transaction network
US11405204B2 (en) 2019-06-15 2022-08-02 Meta Platforms, Inc Scalable, secure, efficient, and adaptable distributed digital ledger transaction network
US11249947B2 (en) 2019-06-15 2022-02-15 Facebook, Inc. Distributed digital ledger transaction network for flexible, lazy deletion of data stored within an authenticated data structure
US11249985B2 (en) * 2019-06-15 2022-02-15 Facebook, Inc. Scalable, secure, efficient, and adaptable distributed digital ledger transaction network
US11288380B2 (en) * 2019-10-14 2022-03-29 Oracle International Corporation Securely sharing selected fields in a blockchain with runtime access determination
EP3907644B1 (en) 2020-05-07 2022-10-05 Cambridge Cryptographic Ltd Blockchain
CN112800438B (zh) * 2020-05-22 2024-01-16 陕西师范大学 在标准模型下计算安全的抗内存泄漏的多级秘密共享方法
US20210374843A1 (en) * 2020-05-26 2021-12-02 Mitsubishi Electric Research Laboratories, Inc. Debt Resource Management in a Distributed Ledger System
CA3091660A1 (en) * 2020-08-31 2021-11-03 Polymath Inc. Method, system, and medium for blockchain-enabled atomic settlement
CN112256476B (zh) * 2020-09-27 2024-04-16 陕西医链区块链集团有限公司 基于区块链的数据操作方法、装置、设备及介质
US11709819B2 (en) 2020-09-30 2023-07-25 International Business Machines Corporation Validating test results using a blockchain network
GB2599735A (en) 2020-10-12 2022-04-13 Cambridge Cryptographic Ltd Blockchain
GB2601125A (en) * 2020-11-18 2022-05-25 Nchain Holdings Ltd Node versioning
EP4256751A1 (en) 2020-12-02 2023-10-11 Trock, Stanislav Blockchain
GB2605776A (en) * 2021-04-07 2022-10-19 Nchain Licensing Ag Blockchain-implemented hash function
GB2614295A (en) * 2021-12-23 2023-07-05 Nchain Licensing Ag Methods and systems for recipient-facilitated blockchain transactions
CN116521642A (zh) * 2022-01-20 2023-08-01 戴尔产品有限公司 用于数据迁移的方法、装置、电子设备和介质
WO2023242820A1 (en) * 2022-06-17 2023-12-21 Kirobo, Ltd. Future conditional blockchain transaction techniques
GB2622241A (en) * 2022-09-08 2024-03-13 Nchain Licensing Ag Blockchain state machine
GB2622627A (en) * 2022-09-23 2024-03-27 Nchain Licensing Ag Atomic swap token trades

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130111430A1 (en) 2011-10-27 2013-05-02 Yin Wang Providing goods or services
US20170236123A1 (en) 2016-02-16 2017-08-17 Blockstack Inc. Decentralized processing of global naming systems

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0744345A (ja) * 1993-07-28 1995-02-14 Sony Corp 情報同期制御装置およびその方法
FR3018378A1 (fr) 2014-03-12 2015-09-11 Enrico Maim Systeme et procede transactionnels a architecture repartie fondees sur des transactions de transferts d'unites de compte entre adresses
EP3140979A4 (en) 2014-05-09 2017-12-27 Veritaseum Inc. Devices, systems, and methods for facilitating low trust and zero trust value transfers
US11159318B2 (en) 2015-01-30 2021-10-26 Enrico Maim Methods and systems implemented in a network architecture with nodes capable of performing message-based transactions
US20160283939A1 (en) 2015-03-25 2016-09-29 Qualcomm Incorporated System and method to prevent loss of bitcoins due to address errors
CA2981511C (en) * 2015-03-31 2018-08-28 Nasdaq, Inc. Systems and methods of blockchain transaction recordation
US10812274B2 (en) 2015-05-07 2020-10-20 Blockstream Corporation Transferring ledger assets between blockchains via pegged sidechains
EP3317775B1 (en) * 2015-07-02 2022-02-16 Nasdaq, Inc. Systems and methods of secure provenance for distributed transaction databases
US10848315B2 (en) * 2015-07-13 2020-11-24 Nippon Telegraph And Telephone Corporation Contract agreement method, agreement verification method, contract agreement system, agreement verification device, contract agreement device, contract agreement program and agreement verification program
US20170085545A1 (en) * 2015-07-14 2017-03-23 Fmr Llc Smart Rules and Social Aggregating, Fractionally Efficient Transfer Guidance, Conditional Triggered Transaction, Datastructures, Apparatuses, Methods and Systems
US20170228731A1 (en) 2016-02-09 2017-08-10 Fmr Llc Computationally Efficient Transfer Processing and Auditing Apparatuses, Methods and Systems
EP3125489B1 (en) * 2015-07-31 2017-08-09 BRITISH TELECOMMUNICATIONS public limited company Mitigating blockchain attack
WO2017027484A1 (en) 2015-08-09 2017-02-16 Ramasamy Celambarasan System and method for microshare based content funding and distribution
RU2015146675A (ru) 2015-10-29 2017-05-03 Дмитрий Сергеевич Ермолаев Способ учёта изобретений, товарных знаков, договорных отношений и иных данных, требующих удостоверения подписи и времени подписания и создания их в средах учёта вроде bitcoin
US20170132621A1 (en) * 2015-11-06 2017-05-11 SWFL, Inc., d/b/a "Filament" Systems and methods for autonomous device transacting
US20180253702A1 (en) * 2015-11-24 2018-09-06 Gartland & Mellina Group Blockchain solutions for financial services and other transactions-based industries
US10833843B1 (en) * 2015-12-03 2020-11-10 United Services Automobile Association (USAA0 Managing blockchain access
WO2017109140A1 (en) * 2015-12-22 2017-06-29 Bigchaindb Gmbh Decentralized, tamper-resistant, asset-oriented database system and method of recording a transaction
WO2017148527A1 (en) * 2016-03-03 2017-09-08 Nec Europe Ltd. Method for managing data in a network of nodes
CN107203368A (zh) 2016-03-16 2017-09-26 蓝树荣 一种建立智能合约模型的方法
CN105893042A (zh) 2016-03-31 2016-08-24 北京航空航天大学 一种基于区块链的智能合约的实现方法
CN109564599A (zh) * 2016-03-31 2019-04-02 克劳斯公司 用于创建和执行数据驱动法律合同的系统和方法
US10529042B2 (en) * 2016-04-18 2020-01-07 Rs Ltd. System and method for managing transactions in dynamic digital documents
US20170345011A1 (en) * 2016-05-26 2017-11-30 Hitfin, Inc. System and method executed on a blockchain network
US20210211468A1 (en) * 2016-05-27 2021-07-08 Wells Fargo Bank, N.A. Systems and methods for service compliance via blockchain
CN105976231A (zh) * 2016-06-24 2016-09-28 深圳前海微众银行股份有限公司 基于区块链智能合约的资产管理方法及节点
CN105976232B (zh) * 2016-06-24 2020-04-28 深圳前海微众银行股份有限公司 资产交易方法和装置
US10445698B2 (en) * 2016-06-30 2019-10-15 Clause, Inc. System and method for forming, storing, managing, and executing contracts
US11663609B2 (en) * 2016-10-04 2023-05-30 International Business Machines Corporation Method and apparatus to enforce smart contract execution hierarchy on blockchain
US20180123779A1 (en) * 2016-11-01 2018-05-03 Jiangang Zhang Flexible Blockchain Smart-Contract Deployment
CN106780025B (zh) * 2016-11-30 2021-03-02 中国银行股份有限公司 区块链中数字资产的转移方法、装置及系统
US20180165758A1 (en) 2016-12-09 2018-06-14 Cognitive Scale, Inc. Providing Financial-Related, Blockchain-Associated Cognitive Insights Using Blockchains
US10225076B2 (en) 2017-02-17 2019-03-05 Tianqing Leng Splitting digital promises recorded in a blockchain
CN106940854A (zh) 2017-03-06 2017-07-11 钱德君 一种utxo模型与合约之间的搭桥方法
CN107341702B (zh) 2017-03-08 2020-06-23 创新先进技术有限公司 一种业务处理的方法及装置
CN107093143A (zh) * 2017-03-24 2017-08-25 钱德君 一种量子链的区块链构件系统
US10102265B1 (en) 2017-04-12 2018-10-16 Vijay K. Madisetti Method and system for tuning blockchain scalability for fast and low-cost payment and transaction processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130111430A1 (en) 2011-10-27 2013-05-02 Yin Wang Providing goods or services
US20170236123A1 (en) 2016-02-16 2017-08-17 Blockstack Inc. Decentralized processing of global naming systems

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Malte Moser et al, "Bitcoin Covenants"(2016.08.31.)

Also Published As

Publication number Publication date
EP3676778B1 (en) 2023-12-27
JP7250771B2 (ja) 2023-04-03
WO2019043538A1 (en) 2019-03-07
SG11202000806UA (en) 2020-03-30
US20200202350A1 (en) 2020-06-25
KR20200044014A (ko) 2020-04-28
EP4075357A1 (en) 2022-10-19
EP4012636A1 (en) 2022-06-15
JP2020532220A (ja) 2020-11-05
JP2020532002A (ja) 2020-11-05
US11941624B2 (en) 2024-03-26
WO2019043536A1 (en) 2019-03-07
US20200204350A1 (en) 2020-06-25
JP2023062177A (ja) 2023-05-02
EP3676779A1 (en) 2020-07-08
JP2023078359A (ja) 2023-06-06
CN111052162A (zh) 2020-04-21
EP3676778A1 (en) 2020-07-08
EP4283550A3 (en) 2024-01-24
EP3676780A1 (en) 2020-07-08
US20200349565A1 (en) 2020-11-05
EP4283550A2 (en) 2023-11-29
CN111052165A (zh) 2020-04-21
CN111033542A (zh) 2020-04-17
WO2019043537A1 (en) 2019-03-07
JP2023040108A (ja) 2023-03-22
JP7203828B2 (ja) 2023-01-13
JP2020532217A (ja) 2020-11-05

Similar Documents

Publication Publication Date Title
KR102609711B1 (ko) 블록체인을 사용한 동시적 상태 머신 프로세싱
KR102625385B1 (ko) 동시적 바이트코드 해석을 위한 블록체인 구현 시스템 및 방법
CN109417465B (zh) 区块链执行的智能合约的注册和自动化管理方法
AU2017257448B2 (en) Implementing logic gate functionality using a blockchain
JP2024063167A (ja) アンロッキングトランザクションバイトコードの制約注入
TW201837805A (zh) 基於未判定資料保證區塊鏈交易的安全
TW201830271A (zh) 在區塊鏈上實現複雜功能性,同時保留對指令碼大小及作業碼極限的基於安全性之限制的電腦實施系統及方法
JP7493571B2 (ja) トラストレスな決定論的ステートマシン
Buterin et al. Notes on Scalable Blockchain Protocols (verson 0.3)

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right