KR20240088974A - 잠금 스크립트의 전파 - Google Patents

잠금 스크립트의 전파 Download PDF

Info

Publication number
KR20240088974A
KR20240088974A KR1020247013193A KR20247013193A KR20240088974A KR 20240088974 A KR20240088974 A KR 20240088974A KR 1020247013193 A KR1020247013193 A KR 1020247013193A KR 20247013193 A KR20247013193 A KR 20247013193A KR 20240088974 A KR20240088974 A KR 20240088974A
Authority
KR
South Korea
Prior art keywords
transaction
script
primary
output
computer
Prior art date
Application number
KR1020247013193A
Other languages
English (en)
Inventor
미카엘라 페티트
스티븐 패트릭 코글란
Original Assignee
엔체인 라이센싱 아게
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔체인 라이센싱 아게 filed Critical 엔체인 라이센싱 아게
Publication of KR20240088974A publication Critical patent/KR20240088974A/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Abstract

잠금 스크립트가 블록체인 트랜잭션의 체인 전반에 걸쳐 전파되도록 시행하는 방법이 제공된다. 방법은 주요 잠금 스크립트를 포함하는 주요 트랜잭션을 생성하는 단계를 포함하고, 주요 잠금 스크립트는, 보조 트랜잭션의 잠금 해제 스크립트에 의해 실행될 때, 잠금 해제 스크립트가 보조 트랜잭션에 기초하여 생성된 메시지를 포함한다는 것을 검증하고, 그리고 제1 메시지에 기초하여, 보조 트랜잭션의 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다. 보조 잠금 스크립트는, 제2 주요 트랜잭션의 잠금 해제 스크립트가 제2 주요 트랜잭션에 기초하여 생성된 메시지를 포함한다는 것을 검증하고, 제2 주요 트랜잭션의 잠금 해제 스크립트가 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 데이터 항목을 포함한다는 것을 검증하고, 그리고 메시지 및 데이터 항목에 기초하여, 제2 주요 트랜잭션의 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다.

Description

잠금 스크립트의 전파
본 개시는 블록체인 트랜잭션의 체인 전반에 걸쳐 전파되도록 잠금 스크립트를 시행하는 방법, 및 잠금 스크립트가 블록체인 트랜잭션의 체인 전반에 걸쳐 시행되었다는 것을 검증하는 방법에 관한 것이다.
블록체인은 블록체인의 복제본이 분산 P2P(Peer-to-Peer) 네트워크(이하 "블록체인 네트워크"로서 지칭됨) 내 복수의 노드들 각각에서 유지되며 널리 공개되는 분산 데이터 구조의 형태를 지칭한다. 블록체인은 데이터의 블록들의 체인을 포함하며, 각각의 블록은 하나 이상의 트랜잭션들을 포함한다. 소위 "코인베이스 트랜잭션(coinbase transaction)들"이 아닌 각각의 트랜잭션은 시퀀스 내 이전 트랜잭션을 다시 가리키며, 이는 하나 이상의 블록들에 걸쳐 있어 하나 이상의 코인베이스 트랜잭션들로 되돌아갈 수 있다. 코인베이스 트랜잭션은 아래에서 추가로 논의된다. 블록체인 네트워크에 제출된 트랜잭션들은 새로운 블록들에 포함된다. 새로운 블록들은 복수의 노드들 각각이 "작업 증명"을 수행하기 위해 경쟁하는 것 즉, 블록체인의 새로운 블록에 포함되기를 기다리는, 순서화되고 유효성 검증된 보류중인 트랜잭션들의 정의된 세트의 표현에 기초하여 암호화 퍼즐을 해결하는 것을 수반하는 "채굴"로서 지칭되는 프로세스에 의해 생성된다. 블록체인은 일부 노드들에서 프루닝(prune)될 수 있으며 블록들의 공개는 단순 블록 헤더들의 공개를 통해 달성될 수 있다는 것이 주의되어야 한다.
블록체인의 트랜잭션들은 다음 목적들: 디지털 자산(예컨대, 다수의 디지털 토큰들)을 전달하는 것, 가상화된 원장 또는 레지스트리 내 엔트리들의 세트를 순서화하는 것, 타임스탬프 엔트리들을 수신 및 프로세싱하는 것, 그리고/또는 인덱스 포인터들을 시간-순서화하는 것 중 하나 이상을 위해 사용될 수 있다. 블록체인 위에 부가적인 기능성을 쌓기 위해 블록체인이 또한 활용될 수 있다. 예컨대, 블록체인 프로토콜들은 트랜잭션의 데이터에의 부가적인 사용자 데이터 또는 인덱스들의 저장을 허용할 수 있다. 단일 트랜잭션 내에 저장될 수 있는 최대 데이터 용량에 대해 미리 지정된 제한이 없고 이에 따라 점점 더 복잡한 데이터가 통합될 수 있다. 예컨대, 이는 블록체인에 전자 문서를 저장하거나, 오디오 또는 비디오 데이터를 저장하는 데 사용될 수 있다.
블록체인 네트워크의 노드들(종종 "채굴자들"로서 지칭됨)은 분산 트랜잭션 등록 및 검증 프로세스를 수행하며, 이는 나중에 보다 자세히 설명될 것이다. 요약하면, 이 프로세스 동안, 노드는 트랜잭션들을 유효성 검증하여 유효한 작업 증명 솔루션을 식별하려고 시도하는 블록 템플릿에 삽입한다. 유효한 솔루션이 발견되면, 새로운 블록이 네트워크의 다른 노드들로 전파되고, 이에 따라 각각의 노드가 블록체인 상에 새로운 블록을 레코딩하는 것을 가능하게 한다. 트랜잭션을 블록체인에 레코딩하기 위해, 사용자(예컨대, 블록체인 클라이언트 애플리케이션)는 트랜잭션을 전파될 네트워크의 노드들 중 하나로 전송한다. 트랜잭션을 수신하는 노드들은 유효성 검증된 트랜잭션을 새로운 블록에 통합하는 작업 증명 솔루션을 찾기 위해 경합할 수 있다. 각각의 노드는 트랜잭션이 유효하기 위한 하나 이상의 조건들을 포함하는 동일한 노드 프로토콜을 시행하도록 구성된다. 유효하지 않은 트랜잭션들은 블록들 내로 통합되거나 전파되지 않을 것이다. 트랜잭션이 유효성 검증되고 그리하여 블록체인 상에 수락된다고 가정하면, 트랜잭션(임의의 사용자 데이터 포함함)은 이에 따라 불변의 공개 레코드로서 블록체인 네트워크 내 노드들 각각에 등록되고 인덱싱된 상태로 유지된다.
최신 블록을 생성하기 위해 작업 증명 퍼즐을 성공적으로 해결한 노드는 통상적으로 디지털 자산의 금액, 즉 다수의 토큰들을 분배하는 "코인베이스 트랜잭션"이라 불리는 새로운 트랜잭션으로 보상을 받는다. 유효하지 않은 트랜잭션들의 검출 및 거절은 네트워크의 에이전트들로서 작용하는 경쟁 노드들의 액션에 의해 시행되며 불법 행위를 보고하고 차단하도록 장려된다. 광범위한 정보 공개는 사용자들이 노드들의 성능을 지속적으로 감사하도록 허용한다. 단순 블록 헤더들의 공개는 참가자들이 블록체인의 지속적인 무결성을 보장하도록 허용한다.
"출력 기반" 모델(때로는 UTXO 기반 모델로서 지칭됨)에서, 주어진 트랜잭션의 데이터 구조는 하나 이상의 입력들 및 하나 이상의 출력들을 포함한다. 임의의 지출 가능한 출력은 진행중인 트랜잭션 시퀀스로부터 도출 가능한 디지털 자산의 금액을 지정하는 요소를 포함한다. 지출 가능한 출력은 때로는 UTXO("미지출 트랜잭션 출력")로서 지칭된다. 출력은 출력의 향후 리딤션(redemption)을 위한 조건을 지정하는 잠금 스크립트를 더 포함할 수 있다. 잠금 스크립트는 디지털 토큰들 또는 자산들을 유효성 검증하고 이전하는 데 필요한 조건들을 정의하는 술어이다. (코인베이스 트랜잭션 이외의) 트랜잭션의 각각의 입력은 선행 트랜잭션의 이러한 출력에 대한 포인터(즉, 참조)를 포함하고, 가리켜진 출력의 잠금 스크립트를 잠금해제하기 위한 잠금해제 스크립트를 더 포함할 수 있다. 따라서 트랜잭션들의 쌍을 고려하고, 이들을 제1 및 제2 트랜잭션(또는 "타겟" 트랜잭션)이라고 한다. 제1 트랜잭션은 출력을 잠금해제하는 하나 이상의 조건들을 정의하는 잠금 스크립트를 포함하고 디지털 자산의 금액을 지정하는 적어도 하나의 출력을 포함한다. 제2의 타겟 트랜잭션은 제1 트랜잭션의 출력에 대한 포인터를 포함하는 적어도 하나의 입력, 및 제1 트랜잭션의 출력을 잠금해제하기 위한 잠금해제 스크립트를 포함한다.
이러한 모델에서, 제2의 타겟 트랜잭션이 블록체인 네트워크에 전송되어 블록체인에서 전파 및 레코딩될 때, 각각의 노드에 적용되는 유효성에 대한 기준들 중 하나는, 잠금해제 스크립트가 제1 트랜잭션의 잠금 스크립트에 정의된 하나 이상의 조건들 전부 충족하는 것일 것이다. 다른 하나는 제1 트랜잭션의 출력이 다른 더 앞선 유효한 트랜잭션에 의해 이미 리딤되지 않았다는 것일 것이다. 이러한 조건들 중 임의의 것에 따라 유효하지 않은 타겟 트랜잭션을 발견한 임의의 노드는 이를 전파하지 않거나(유효한 트랜잭션으로서 전파하지 않으나, 어쩌면, 유효하지 않은 트랜잭션을 등록하기 위해 전파함) 블록체인에 레코딩될 새로운 블록에 이를 포함시키지 않을 것이다.
대안적인 유형의 트랜잭션 모델은 계정 기반 모델이다. 이 경우에 각각의 트랜잭션은 과거 트랜잭션들의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하기 보다는, 절대 계정 잔액을 참조함으로써 전달될 금액을 정의한다. 모든 계정들의 현재 상태는 블록체인과 별개로 노드들에 의해 저장되며 지속적으로 업데이트된다.
일반적으로 지출 트랜잭션, 즉 이전의 트랜잭션의 출력을 지출(잠금 해제, 할당, 이전 등)하는 트랜잭션의 필드에 대해 조건이 시행될 수 있는 것은 알려져 있다. 예컨대, 이전의 트랜잭션은 지출 트랜잭션의 하나 이상의 출력에 대해 조건을 부과하는 잠금 스크립트를 포함할 수 있다. "지출 트랜잭션"이라는 용어는 적어도 하나의 이전의 트랜잭션의 적어도 하나의 출력을 잠금 해제하는 현재 트랜잭션을 의미하는 것으로 당분야에서 사용되고, 반드시 현재 트랜잭션이 금융 트랜잭션에 관련된다는 것을 의미하는 것은 아님을 유의한다.
지출 트랜잭션의 필드에 대해 조건을 시행하고자 하는 하나의 이유는, 지출 트랜잭션이 이전의 트랜잭션과 동일한 잠금 스크립트를 포함하는 출력을 갖는다는 것을 보장하는 것이다. 그러한 방식으로, 지출 트랜잭션이 다음 지출 트랜잭션에 대해 동일한 조건을 시행한다는 것이 보장될 수 있다. 즉, n-1번째 트랜잭션은 n번째 트랜잭션이 동일한 잠금 스크립트를 포함하도록 강제하는 잠금 스크립트를 포함하며, 따라서 이는 n+1번째 트랜잭션이 동일한 잠금 스크립트를 포함하도록 강제한다. 이러한 방식으로, 트랜잭션들의 체인이 생성되고, 이로써 각각의 트랜잭션은 동일한 잠금 스크립트를 포함한다. 이것은, 예컨대, 실세계 객체들, 또는 심지어 가상 세계의 객체들의 소유권을 나타내는 디지털 토큰들의 맥락에서 사용될 수 있다. 이는, 토큰의 각각의 이전이 동일한 규정에 적용을 받는다는 것을 의미하므로 유리하다.
트랜잭션의 체인이 동일한 잠금 스크립트를 포함하도록 강제하는 이전의 시도는 다음의 문제 중 적어도 하나를 겪는다. 먼저, 일부 시도는, 첫 번째 트랜잭션이 (예컨대, 토큰 발행자와 같은 특정 기관에 의해) 정확하게 생성되었다는 것 또는 가장 최근의 트랜잭션에 포함된 잠금 스크립트가 첫 번째 트랜잭션 및 체인의 모든 각각의 다른 트랜잭션에 포함된 잠금 스크립트와 동일하다는 것을 보장하기 위해 검증자가 체인의 첫 번째 트랜잭션(예컨대, "발행 트랜잭션")까지 다시 추적하도록 요구한다. 이는 체인의 최신 트랜잭션을 유효성 검증하는 데 있어서 (컴퓨테이셔널 자원, 시간 및 노력 둘 모두의 관점에서) 검증자의 자원을 소비한다. 둘째, 일부 시도는, 다음 트랜잭션이 올바르게 생성된 것을 보장하기 위해 제3 당사자가 체인에서 다음 트랜잭션의 생성 및/또는 유효성 검증(예컨대, 토큰의 이전)에 관여하는 것을 요구한다. 이는 제3 당사자에 의존함으로써 보안상의 취약점을 도입하며, 서로 상호작용해야 하는 당사자의 수를 증가시키고, 이는 효율성을 감소시킨다. 셋째, 트랜잭션의 체인이 동일한 잠금 스크립트를 포함하도록 강제하려는 일부 시도는 체인의 최신 트랜잭션이 체인에 각각의 이전의 트랜잭션을 포함하도록 요구하고, 따라서 트랜잭션 팽창 문제(transaction bloat problem)를 도입한다. 이는 트랜잭션의 이전 및 저장 둘 모두에서 문제가 된다. 넷째, 일부 시도는 아래에서 논의되는 리플레이 공격(replay attack)에 취약하다.
따라서, 식별된 문제들 중 하나, 일부 또는 전부를 해결하는, 트랜잭션들의 체인이 동일한 잠금 스크립트를 포함하도록 강제하는 메커니즘을 구현하는 것이 바람직할 것이다.
본원에서 개시된 일 양상에 따라, 잠금 스크립트가 블록체인 트랜잭션의 체인 전반에 걸쳐 전파되도록 시행하는 컴퓨터 구현 방법이 제공된다. 방법은 제1 당사자에 의해 수행되고 제1 출력을 포함하는 제1 주요 트랜잭션을 생성하는 단계를 포함하고, 제1 출력은 주요 잠금 스크립트를 포함하고, 주요 잠금 스크립트는, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 제1 메시지에 기초하여, 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성되고. 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지를 포함한다는 것을 검증하고, ii) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 제2 메시지 및 제1 데이터 항목에 기초하여, 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다.
본 명세서에서 "주요 트랜잭션"이라는 용어는, "주요 잠금 스크립트"로 지칭되는 동일한 잠금 스크립트를 포함하도록 강제되는 트랜잭션들의 체인 내의 트랜잭션을 지칭하는 데 사용된다. 예컨대, 주요 잠금 스크립트는 특성에 대한 증서(deed)와 같은 토큰과 관련된 데이터를 포함할 수 있다. "보조 트랜잭션"이라는 용어는 주요 트랜잭션에 대해 조건 즉, 주요 트랜잭션이 주요 잠금 스크립트를 포함해야 함을 시행하는 데 사용되는 트랜잭션을 지칭하는 데 사용된다. 이러한 조건들은, 적어도 부분적으로, 각각의 보조 트랜잭션에 포함된 "보조 잠금 스크립트"에 의해 시행된다.
보조 트랜잭션은 연속적인 주요 트랜잭션 사이의 가교 역할을 한다. 즉, 제1 보조 트랜잭션은 제1 주요 트랜잭션의 출력을 지출(즉, 잠금 해제)하고, 제2 주요 트랜잭션은 제1 보조 트랜잭션의 출력을 지출(즉, 잠금 해제)한다. 주요 잠금 스크립트는 다음 보조 트랜잭션에 대해 조건을 부과한다. 예컨대, 주요 잠금 스크립트는 다음 보조 트랜잭션이 보조 잠금 스크립트를 포함하도록 강제한다. 보조 잠금 스크립트는 다음 주요 트랜잭션에 대해 조건을 부과한다. 예컨대, 보조 잠금 스크립트는 다음 주요 트랜잭션이 주요 잠금 스크립트를 포함하도록 강제한다.
일부 예에서, 제1 주요 트랜잭션은 체인의 초기 주요 트랜잭션, 즉, 주요 잠금 스크립트를 포함하는 첫 번째 트랜잭션이다. 이것은, 예컨대, 토큰을 발행하는 토큰 발행자에 의해 생성될 수 있다. 다른 예에서, 제1 주요 트랜잭션은 초기 주요 트랜잭션이 아니며, 즉, 주요 잠금 스크립트를 포함하는 트랜잭션들의 체인 내의 적어도 하나의 다른 이전의 주요 트랜잭션이 존재한다. 예컨대, 이 예에서, 제1 주요 트랜잭션은 토큰의 전달자에 의해 생성될 수 있다.
본원에서 개시된 다른 양상에 따라, 블록체인 트랜잭션의 체인 전반에 걸쳐 잠금 스크립트가 시행되었다는 것을 검증하는 컴퓨터 구현 방법이 제공된다. 방법은 제2 당사자에 의해 수행되고, 제2 주요 트랜잭션을 획득하는 단계를 포함하고, 제2 주요 트랜잭션은 제1 입력 및 제1 출력을 포함하고, 제1 입력은 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지, 제1 주요 트랜잭션의 제1 출력을 잠금 해제하는 제1 입력을 포함하는 제1 보조 트랜잭션, 및 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함하고, 제1 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함하고, 제1 보조 트랜잭션의 제1 출력은 보조 잠금 스크립트를 포함하고, 제2 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함한다. 방법은 제1 주요 트랜잭션이 블록체인에 레코딩되었다는 것을 검증하는 단계, 및 제1 주요 트랜잭션의 주요 잠금 스크립트가, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 제1 메시지에 기초하여, 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하고, 보조 잠금 스크립트가, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제2 메시지를 포함한다는 것을 검증하고, ii) 제1 잠금 해제 스크립트가 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 제2 메시지 및 제1 데이터 항목에 기초하여, 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하고, 이로써, 주요 잠금 스크립트가 제1 주요 트랜잭션 및 제2 주요 트랜잭션 전체에 걸쳐 시행되었다는 것을 검증하도록 구성된다는 것을 검증하는 단계를 포함한다.
제2 당사자는 제2 트랜잭션을 획득(예컨대, 제1 당사자로부터 수신)한다. 제2 주요 트랜잭션은 트랜잭션의 체인에서 두 번째로 나타나는 주요 트랜잭션일 수 있거나, 또는 이는 나중의 트랜잭션일 수 있다. 즉, 제2 트랜잭션은 일반적으로 트랜잭션의 체인 내의 n번째 트랜잭션일 수 있다. 제2 주요 트랜잭션은 출력에 주요 잠금 스크립트를 포함한다. 제2 주요 트랜잭션은 제1 보조 트랜잭션의 출력을 지출하는 입력을 가지며, 따라서 보조 잠금 스크립트의 요건을 충족시킨다. 제1 보조 트랜잭션은 제1 주요 트랜잭션의 출력을 지출하고, 따라서 주요 잠금 스크립트의 요건을 충족시킨다. 따라서, 제1 보조 트랜잭션이 제1 주요 트랜잭션의 주요 잠금 스크립트를 성공적으로 잠금 해제하고 제2 주요 트랜잭션이 제1 보조 트랜잭션의 보조 잠금 스크립트를 성공적으로 잠금 해제하면, 제2 주요 트랜잭션은 주요 잠금 스크립트를 포함해야 한다. 이것은 정확한 주요 잠금 스크립트가 트랜잭션의 체인에 포함되는 것에 의존한다.
제2 당사자는 제1 주요 트랜잭션이 블록체인에 레코딩되었고 따라서 유효한 트랜잭션임을 검증한다. 또한 제2 당사자는, 주요 잠금 스크립트가 정확하다는 것을 검증하고, 예컨대, 보조 트랜잭션이 보조 잠금 스크립트를 포함하도록 강제하고, 이는 그런 다음 보조 트랜잭션이 동일한 주요 잠금 스크립트를 포함하도록 강제한다는 것을 검증한다. 예컨대, 이는, 주요 잠금 스크립트가 보조 잠금 스크립트의 해시에 기초한 해시 퍼즐을 포함한다는 것을 보장함으로써 달성될 수 있다. 이 경우, 해시 퍼즐은, 보조 트랜잭션이 보조 잠금 스크립트를 포함하는 경우에만 해결될 수 있다(그리고 따라서 주요 잠금 스크립트가 잠금 해제됨).
그런 다음 제2 당사자는 제2 보조 트랜잭션 및 제3 주요 트랜잭션을 생성할 수 있다. 제2 보조 트랜잭션은 제2 주요 트랜잭션의 주요 잠금 스크립트를 잠금 해제하기 위해 필요하다. 제2 보조 트랜잭션은 또한 제3 주요 트랜잭션이 주요 잠금 스크립트를 포함하도록 강제한다. 체인의 각각의 다음 트랜잭션은 동일한 방식으로 주요 잠금 스크립트를 포함하도록 강제된다.
실제로, 2개의 잠금 스크립트가 전파되어야 한다는 것이 유의된다. 주요 잠금 스크립트는 각각의 주요 트랜잭션의 출력에 포함되어야 하고, 보조 잠금 스크립트는 각각의 보조 트랜잭션의 출력에 포함되어야 한다.
본 개시의 실시예들의 이해를 보조하기 위해 그리고 그러한 실시예들이 어떻게 실행될 수 있는지를 보여주기 위하여, 단지 예로서 첨부 도면들에 대한 참조가 이루어진다.
도 1은 블록체인을 구현하기 위한 시스템의 개략적인 블록도이다.
도 2는 블록체인에 레코딩될 수 있는 트랜잭션들의 일부 예들을 개략적으로 도시한다.
도 3은 잠금 스크립트를 전파하기 위한 예시적인 시스템을 개략적으로 도시한다.
도 4는 예시적인 토큰 프로토콜의 트랜잭션 구조의 개략적인 표현이다.
도 5는 하나의 입력과 하나의 출력을 갖는 트랜잭션의 체인의 개략적인 표현이다.
도 6은 트랜잭션 팽창 문제를 개략적으로 도시한다.
도 7은 2개의 입력과 2개의 출력을 갖는 트랜잭션의 체인의 개략적인 표현이다.
도 8은 예시적인 토큰 프로토콜에 의해 트랜잭션 팽창이 방지되는 방법을 보여주는 개략적인 표현이다.
도 9는 예시적인 발행 트랜잭션을 개략적으로 도시한다.
도 10은 예시적인 보조 트랜잭션을 개략적으로 도시한다.
도 11은 앨리스로부터 밥에게 토큰을 이전하는 예시적인 주요 트랜잭션을 개략적으로 도시한다.
도 12는 다른 보조 트랜잭션의 예를 개략적으로 도시한다.
도 13은 밥으로부터 찰리에게 토큰을 이전하는 주요 트랜잭션의 예를 개략적으로 도시한다.
도 14는 n번째 주요 트랜잭션의 예시적인 포맷을 개략적으로 도시한다.
도 15는 n번째 보조 트랜잭션의 예시적인 포맷을 개략적으로 도시한다.
1. 예시적인 시스템 개요
도 1은 블록체인(150)을 구현하기 위한 예시적인 시스템(100)을 도시한다. 시스템(100)은 패킷-교환 네트워크(101), 통상적으로 인터넷과 같은 광역 인터네트워크를 포함할 수 있다. 패킷-교환 네트워크(101)는 패킷-교환 네트워크(101) 내에서 P2P(peer-to-peer) 네트워크(106)를 형성하도록 배열될 수 있는 복수의 블록체인 노드들(104)을 포함한다. 예시되지는 않았지만, 블록체인 노드들(104)은 거의 완전한 그래프로서 배열될 수 있다. 따라서, 각각의 블록체인 노드(104)는 다른 블록체인 노드들(104)에 고도로 연결된다.
각각의 블록체인 노드(104)는 피어들의 컴퓨터 장비를 포함하며, 노드들(104) 중 상이한 노드들은 상이한 피어에 속한다. 각각의 블록체인 노드(104)는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU(central processing unit)들, 가속기 프로세서들, 애플리케이션 특정 프로세서 및/또는 FPGA(field programmable gate array)들, 및 다른 장비 이를테면, ASIC(application specific integrated circuit)들을 포함하는 프로세싱 장치를 포함한다. 각각의 노드는 또한 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 포함한다. 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 드라이브(SSD), 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다.
블록체인(150)은 데이터의 블록들의 체인(151)을 포함하며, 여기서 블록체인(150)의 개개의 사본은 분산 또는 블록체인 네트워크(106) 내 복수의 블록체인 노드들(104) 각각에서 유지된다. 위에서 언급된 바와 같이, 블록체인(150)의 사본을 유지하는 것은 반드시 블록체인(150)을 전부 저장하는 것을 의미하지는 않는다. 대신, 블록체인(150)은 각각의 블록체인 노드(150)가 각각의 블록(151)의 블록 헤더(아래에서 논의됨)를 저장하는 한, 정리된 상태의 데이터일 수 있다. 체인의 각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함하며, 여기서 이 맥락에서 트랜잭션은 일종의 데이터 구조를 지칭한다. 데이터 구조의 성질은 트랜잭션 모델 또는 체계(scheme)의 일부로서 사용되는 트랜잭션 프로토콜의 유형에 의존할 것이다. 주어진 블록체인은 전반에 걸쳐 하나의 특정 트랜잭션 프로토콜을 사용할 것이다. 하나의 공통 유형의 트랜잭션 프로토콜에서, 각각의 트랜잭션(152)의 데이터 구조는 적어도 하나의 입력 및 적어도 하나의 출력을 포함한다. 각각의 출력은 재산으로서 디지털 자산의 양을 표현하는 금액을 지정하며, 그의 예는 출력이 암호학적으로 잠겨 있는 사용자(103)이다(이는 잠금해제되고 그리하여 리딤(redeem) 또는 지출되기 위해 그 사용자의 서명 또는 다른 솔루션을 요구함). 각각의 입력은 선행 트랜잭션(152)의 출력을 뒤로 가리키고, 그리하여 트랜잭션들을 링크한다.
각각의 블록(151)은 또한 블록들(151)에 대한 순차적인 순서를 정의하기 위해 체인에서 이전에 생성된 블록(151)을 뒤로 가리키는 블록 포인터(155)를 포함한다. (코인베이스 트랜잭션 외의) 각각의 트랜잭션(152)은 트랜잭션들의 시퀀스들에 대한 순서를 정의하기 위해 이전 트랜잭션에 대한 역 포인터를 포함한다(트랜잭션들(152)의 시퀀스들은 분기가 허용됨을 주의함). 블록들의 체인(151)은 체인의 최초 블록이었던 제네시스(genesis) 블록(Gb)(153)까지 완전히 거슬러 올라간다. 체인(150) 초반의 하나 이상의 오리지널 트랜잭션들(152)은 선행 트랜잭션이 아닌 제네시스 블록(153)을 가리켰다.
블록체인 노드들(104) 각각은 트랜잭션들(152)을 다른 블록체인 노드들(104)로 포워딩하고 그리하여 트랜잭션들(152)이 네트워크(106) 전체에 전파되게 하도록 구성된다. 각각의 블록체인 노드(104)는 블록들(151)을 생성하고 동일한 블록체인(150)의 개개의 사본을 그들 개개의 메모리에 저장하도록 구성된다. 각각의 블록체인 노드(104)는 또한 블록(151)에 통합되기를 기다리는 트랜잭션들(152)의 순서화된 세트(또는 "풀")(154)를 유지한다. 순서화된 풀(154)은 종종 "멤풀(mempool)"로서 지칭된다. 본원에서 이 용어는 임의의 특정 블록체인, 프로토콜 또는 모델에 제한되는 것으로 의도되지 않는다. 이는 노드(104)가 유효한 것으로 수락하고 노드(104)가 동일한 출력을 지출하려고 시도하는 임의의 다른 트랜잭션들을 수락하지 않을 의무가 있는 트랜잭션들의 순서화된 세트를 지칭한다.
주어진 현재 트랜잭션(152j)에서, 그(또는 각각의) 입력은 트랜잭션들의 시퀀스에서 선행 트랜잭션(152i)의 출력을 참조하는 포인터를 포함하여, 그러한 출력이 현재 트랜잭션(152j)에서 "지출"되거나 리딤됨을 지정한다. 지출 또는 리딤은 반드시 금융 자산의 이전을 의미하는 것은 아니지만, 그것은 분명 하나의 일반적인 적용예이다. 보다 일반적으로, 지출은 출력을 소비하거나 또는 다른 향후 트랜잭션에서 하나 이상의 출력에 이를 할당하는 것으로 설명될 수 있다. 일반적으로, 선행 트랜잭션은 순서화된 세트(154) 또는 임의의 블록(151)의 임의의 트랜잭션일 수 있다. 선행 트랜잭션(152i)은 현재 트랜잭션(152j)이 생성되거나 심지어 네트워크(106)로 전송될 때 반드시 존재할 필요는 없지만, 선행 트랜잭션(152i)은 현재 트랜잭션이 유효하기 위해 존재하고 유효성 검증될 필요가 있을 것이다. 따라서 본원에서 "선행(preceding)"이라 함은 포인터들에 의해 링크된 논리적 시퀀스의 선행자를 지칭하며, 반드시 시간적 시퀀스의 전송 또는 생성 시간은 아니고, 따라서 트랜잭션들(152i, 152j)은 순서와 다르게(out-of-order)(고아 트랜잭션들에 대한 아래 논의 참조) 전송되거나 생성되는 것을 반드시 배제하지 않는다. 선행 트랜잭션(152i)은 앞선(antecedent) 트랜잭션 또는 선행자(predecessor) 트랜잭션으로 동등하게 칭해질 수 있다.
현재 트랜잭션(152j)의 입력은 또한 입력 인가, 예컨대, 선행 트랜잭션(152i)의 출력이 잠겨 있는 사용자(103a)의 서명을 포함한다. 차례로, 현재 트랜잭션(152j)의 출력은 새로운 사용자 또는 엔티티(103b)에 암호학적으로 잠길 수 있다. 따라서 현재 트랜잭션(152j)은 선행 트랜잭션(152i)의 입력에서 정의된 금액을 현재 트랜잭션(152j)의 출력에서 정의된 바와 같은 새로운 사용자 또는 엔티티(103b)에 전달할 수 있다. 일부 경우들에서 트랜잭션(152)은 다수의 사용자들 또는 엔티티들(이들 중 하나는 잔돈(change)을 주기 위해 오리지널 사용자 또는 엔티티들(103a)일 수 있음) 사이에서 입력 금액을 분할하기 위해 다수의 출력들을 가질 수 있다. 일부 경우에서 트랜잭션은 또한 하나 이상의 선행 트랜잭션들의 다수의 출력들로부터 금액들을 수집하고 현재 트랜잭션의 하나 이상의 출력들에 재분배하기 위해 다수의 입력들을 가질 수 있다.
비트코인과 같은 출력-기반 트랜잭션 프로토콜에 따르면, 개별 사용자 또는 조직과 같은 당사자(103)가 새로운 트랜잭션(152j)을 제정(enact)하기를 원할 때(수동으로 또는 당사자에 의해 사용되는 자동화된 프로세스에 의해) 제정 당사자는 자신의 컴퓨터 단말(102)로부터 수령인에게 새로운 트랜잭션을 전송한다. 제정 당사자 또는 수령인은 결국, 이 트랜잭션을 네트워크(106)의 블록체인 노드들(104) 중 하나 이상(이는 요즘에는, 통상적으로 서버들 또는 데이터 센터들이지만, 원칙적으로는 다른 사용자 단말들일 수 있음)에 전송할 것이다. 그것은 또한 새로운 트랜잭션(152j)을 제정하는 당사자(103)가 일부 예들에서는 수령인이 아니라, 블록체인 노드들(104) 중 하나 이상에 직접 트랜잭션을 전송할 수 있는 것이 배제되지 않는다. 트랜잭션을 수신한 블록체인 노드(104)는 블록체인 노드들(104) 각각에 적용되는 블록체인 노드 프로토콜에 따라 트랜잭션이 유효한지를 체크한다. 블록체인 노드 프로토콜은 통상적으로 블록체인 노드(104)가 새로운 트랜잭션(152j)의 암호화 서명이 예상되는 서명과 매칭되는지를 체크하도록 요구하며, 이는 트랜잭션들(152)의 순서화된 시퀀스에서 이전 트랜잭션(152i)에 의존한다. 이러한 출력-기반 블록체인 프로토콜에서, 이는 새로운 트랜잭션(152j)의 입력에 포함된 당사자(103)의 암호화 서명 또는 다른 인가가 새로운 트랜잭션이 지출(또는 "할당")하는 선행 트랜잭션(152i)의 출력에 정의된 조건과 매칭되는지를 체크하는 것을 포함하며, 여기에서 이 조건은 통상적으로 적어도 새로운 트랜잭션(152j)의 입력의 암호화 서명 또는 다른 인가가 새로운 트랜잭션의 입력이 링크되는 이전 트랜잭션(152i)의 출력을 잠금해제한다는 것을 체크하는 것을 포함한다. 조건은 선행 트랜잭션(152i)의 출력에 포함된 스크립트에 의해 적어도 부분적으로 정의될 수 있다. 대안적으로 이는 단순히 블록체인 노드 프로토콜만으로 고정되거나, 이들의 조합으로 인한 것일 수 있다. 어느 쪽이든, 새로운 트랜잭션(152j)이 유효한 경우, 블록체인 노드(104)는 이를 블록체인 네트워크(106) 내 하나 이상의 다른 블록체인 노드들(104)에 포워딩한다. 이러한 다른 블록체인 노드들(104)은 동일한 블록체인 노드 프로토콜에 따라 동일한 테스트를 적용하고, 이에 따라 새로운 트랜잭션(152j)을 하나 이상의 추가 노드들(104)로 포워딩하는 식이다. 이러한 방식으로, 새로운 트랜잭션은 블록체인 노드들(104)의 네트워크 전반에 걸쳐 전파된다.
출력-기반 모델에서, 주어진 출력(예컨대, UTXO)이 할당(또는 "지출")되는지 여부에 대한 정의는 그것이 블록체인 노드 프로토콜에 따라 다른 전방 트랜잭션(152j)의 입력에 의해 유효하게 리딤되었는지의 여부이다. 트랜잭션이 유효하기 위한 다른 조건은 리딤을 시도하는 선행 트랜잭션(152i)의 출력이 다른 트랜잭션에 의해 이미 리딤되지 않은 것이다. 재차, 유효하지 않은 경우, (무효로서 플래깅되고 경고를 위해 전파되지 않는 한) 트랜잭션(152j)은 블록체인(150)에 레코딩되거나 전파되지 않을 것이다. 이는 트랜잭터가 동일한 트랜잭션의 출력을 한번 초과로 할당하고자 시도하는 이중-지출을 경계한다. 반면, 계정-기반 모델은 계정 잔액을 유지함으로써 이중-지출을 경계한다. 재차, 트랜잭션들의 정의된 순서가 존재하기 때문에, 계정 잔액은 임의의 한 시간에 단일의 정의된 상태를 갖는다.
트랜잭션들을 유효성 검증하는 것 외에도, 블록체인 노드들(104)은 또한 일반적으로 "작업 증명"에 의해 지원되는 채굴로서 지칭되는 프로세스에서 트랜잭션들의 블록들을 생성하는 첫 번째가 되기 위해 경쟁한다. 블록체인 노드(104)에서, 새로운 트랜잭션들은 블록체인(150) 상에 레코딩된 블록(151)에 아직 나타나지 않은 유효한 트랜잭션들의 순서화된 풀(154)에 추가된다. 그 후, 블록체인 노드들은 암호화 퍼즐을 해결하도록 시도함으로써 트랜잭션들의 순서화된 세트(154)로부터 트랜잭션들(152)의 새로운 유효한 블록(151)을 조립하기 위해 경쟁한다. 통상적으로 이는 "논스(nonce)"가 계류중인 트랜잭션들(154)의 순서화된 풀의 표현과 컨케터네이팅되고(concatenated) 해시될 때, 해시의 출력이 미리 결정된 조건을 충족시키도록 논스 값을 검색하는 것을 포함한다. 예컨대, 미리 결정된 조건은 해시의 출력이 미리 정의된 특정 수의 선행 0들을 갖는 것일 수 있다. 이는 작업 증명 퍼즐의 단 하나의 특정 유형일 뿐이며 다른 유형들도 배제되지 않는다는 것에 주의한다. 해시 함수의 속성은 해시 함수가 그의 입력에 대해 예측 불가능한 출력을 갖는다는 것이다. 따라서 이 검색은 무차별 대입(brute force)에 의해서만 수행될 수 있고, 이에 따라 퍼즐을 해결하고자 하는 각각의 블록체인 노드(104)에서 상당한 양의 프로세싱 자원을 소비한다.
퍼즐을 해결하고자 하는 제1 블록체인 노드(104)는 이를 네트워크(106)에 발표하고, 그 솔루션을 증명으로서 제공하며, 이는 그 후 네트워크의 다른 블록체인 노드(104)들에 의해 쉽게 체크될 수 있다(해시에 대한 해가 주어지면, 그 해가 해시의 출력으로 하여금 조건을 충족시키게 한다는 것을 체크하는 것은 간단함). 제1 블록체인 노드(104)는 블록을 수락하고 이에 따라 프로토콜 규칙들을 시행하는 다른 노드들의 임계 합의에 블록을 전파한다. 트랜잭션들의 순서화된 세트(154)는 그 후 블록체인 노드들(104) 각각에 의해 블록체인(150)에 새로운 블록(151)으로서 레코딩된다. 블록 포인터(155)가 또한 체인에서 이전에 생성된 블록(151n-1)을 뒤로 가리키는 새로운 블록(151n)에 할당된다. 예컨대, 작업 증명 솔루션을 생성하는 데 요구되는 해시 형태의 상당량의 노력은 블록체인 프로토콜의 규칙들에 따르려는 제1 노드(104)의 의도를 시그널링한다. 이러한 규칙들은 트랜잭션이 이전에 유효성 검증된 트랜잭션과 동일한 출력을 할당 ― 이는 이중 지출로서 달리 알려짐 ― 하는 경우 트랜잭션을 유효한 것으로 수락하지 않는 것을 포함한다. 일단 생성되면, 블록(151)은 블록체인 네트워크(106) 내 블록체인 노드들(104) 각각에서 인식 및 유지되기 때문에 수정될 수 없다. 블록 포인터(155)는 또한 블록들(151)에 순차적인 순서를 부과한다. 트랜잭션들(152)은 네트워크(106)의 각각의 블록체인 노드(104)에서 순서화된 블록들에 레코딩되기 때문에, 이는 이에 따라, 트랜잭션들의 변경 불가능한 공개 원장을 제공한다.
임의의 주어진 시간에 퍼즐을 해결하기 위해 경쟁하는 상이한 블록체인 노드들(104)은 솔루션을 검색하기 시작한 시기 또는 트랜잭션이 수신된 순서에 의존하여, 임의의 주어진 시간에 아직 공개되지 않은 트랜잭션들 풀(154)의 상이한 스냅샷들에 기초하여 퍼즐을 해결할 수 있다는 것에 주의한다. 누구든 각자의 퍼즐을 먼저 해결하는 사람은 어느 트랜잭션들(152)이 어떤 순서로 다음의 새로운 블록(151n)에 포함되는지를 정의하고, 공개되지 않은 트랜잭션들의 현재 풀(154)은 업데이트된다. 그 후 블록체인 노드들(104)은 공개되지 않은 트랜잭션들(154)의 새롭게 정의된 순서화된 풀로부터 블록을 생성하기 위해 계속 경쟁한다. 발생할 수 있는 임의의 "포크(fork)" ― 이는 2개의 블록체인 노드들(104)이 서로 매우 짧은 시간 내에 그의 퍼즐을 해결하여서, 블록체인에 대한 상충되는 뷰(view)가 노드들 사이에 전파되는 경우임 ― 를 해결하기 위한 프로토콜이 또한 존재한다. 요컨대, 가장 길게 성장하는 포크의 갈래가 확정적인 블록체인(150)이 된다. 동일한 트랜잭션들이 포크들 둘 모두에 나타날 것이므로, 이는 네트워크의 사용자들 또는 에이전트들에게 영향을 미치지 않아야 한다.
비트코인 블록체인(및 대부분의 다른 블록체인들)에 따르면, 새로운 블록(104)을 성공적으로 구성하는 노드에는 (하나의 에이전트 또는 사용자로부터 다른 에이전트 또는 사용자로 디지털 자산의 금액을 이전하는 에이전트-간 또는 사용자-간 트랜잭션과 대조적으로) 디지털 자산의 부가적인 정의된 양을 분배하는 새로운 특별한 종류의 트랜잭션들에서 디지털 자산의 부가적인 수락된 금액을 새롭게 할당하는 능력이 승인된다. 이 특별한 유형의 트랜잭션은 일반적으로 "코인베이스 트랜잭션"으로서 지칭되지만, "초기 트랜잭션" 또는 "생성 트랜잭션"이라고도 칭해질 수 있다. 그것은 통상적으로 새로운 블록(151n)의 제1 트랜잭션을 형성한다. 작업 증명은 나중에 이 특별한 트랜잭션이 리딤되도록 허용하는 프로토콜 규칙들을 따르도록 새로운 블록을 구성하는 노드의 의도를 시그널링한다. 블록체인 프로토콜 규칙은 이 특별한 트랜잭션이 리딤되기 전에 만기 기간 예컨대, 100개의 블록들을 요구할 수 있다. 종종 일반(비-생성) 트랜잭션(152)이 또한 그 트랜잭션이 공개된 블록(151n)을 생성한 블록체인 노드(104M)를 추가로 보상하기 위해, 그의 출력들 중 하나에 부가적인 트랜잭션 수수료를 지정할 것이다. 이 수수료는 일반적으로 "트랜잭션 수수료"로서 지칭되고 아래에서 논의된다.
트랜잭션 유효성 검증 및 공개와 관련된 자원들로 인해, 통상적으로 적어도 블록체인 노드들(104) 각각은 하나 이상의 물리적 서버 유닛들, 또는 심지어 전체 데이터 센터를 포함하는 서버의 형태를 취한다. 그러나 원칙적으로 임의의 주어진 블록체인 노드(104)는 사용자 단말 또는 함께 네트워킹된 사용자 단말들의 그룹의 형태를 취할 수 있다.
각각의 블록체인 노드(104)의 메모리는 블록체인 노드 프로토콜에 따라 각자의 역할 또는 역할들을 수행하고 트랜잭션들(152)을 처리하기 위해 블록체인 노드(104)의 프로세싱 장치 상에서 실행되도록 구성된 소프트웨어를 저장한다. 본원에서 블록체인과 노드(104)에 기인한 임의의 액션은 각자의 컴퓨터 장비의 프로세싱 장치 상에서 실행되는 소프트웨어에 의해 수행될 수 있다는 것이 이해될 것이다. 노드 소프트웨어는 애플리케이션 계층, 또는 운영 체제 계층이나 프로토콜 계층과 같은 하위 계층 또는 이들의 임의의 조합에서 하나 이상의 애플리케이션들로 구현될 수 있다.
또한 네트워크(101)에는 소비 사용자들의 역할을 하는 복수의 당사자들(103) 각각의 컴퓨터 장비(102)가 연결되어 있다. 이러한 사용자들은 블록체인 네트워크(106)와 상호작용할 수 있지만 트랜잭션들을 유효성 검증하거나 블록들을 구성하는 데 참여하지 않는다. 이러한 사용자들 또는 에이전트들(103) 중 일부는 트랜잭션들에서 전송자들 및 수령인들로서 작용할 수 있다. 다른 사용자들은 반드시 전송자들 또는 수령인들로서 작용할 필요 없이 블록체인(150)과 상호작용할 수 있다. 예컨대, 일부 당사자들은 블록체인(150)의 사본을 저장하는 저장 엔티티들로서 작용할 수 있다(예컨대, 블록체인 노드(104)로부터 블록체인의 사본을 획득함).
당사자들(103) 중 일부 또는 전부는 상이한 네트워크, 예컨대, 블록체인 네트워크(106) 위에 오버레이된 네트워크의 부분으로서 연결될 수 있다. 블록체인 네트워크의 사용자들(종종 "클라이언트"로서 지칭됨)은 블록체인 네트워크(106)를 포함하는 시스템의 일부로서 언급될 수 있지만; 이러한 사용자들은 블록체인 노드들에서 요구되는 역할을 수행하지 않기 때문에 블록체인 노드들(104)이 아니다. 대신에, 각각의 당사자(103)는 블록체인 네트워크(106)와 상호작용할 수 있고 그리하여 블록체인 노드(106)에 연결(즉, 통신)함으로써 블록체인(150)을 활용할 수 있다. 제1 당사자(103a) 및 그/그녀의 개개의 컴퓨터 장비(102a) 및 제2 당사자(103b) 및 그/그녀의 개개의 컴퓨터 장비(102b)인 두 당사자들(103) 및 이들의 개개의 장비(102)가 예시 목적으로 도시된다. 훨씬 더 많은 이러한 당사자들(103) 및 이들의 개개의 컴퓨터 장비(102)가 존재하고 시스템(100)에 참여할 수 있지만, 편의상 그것들은 예시되지 않는다는 것이 이해될 것이다. 각각의 당사자(103)는 개인 또는 조직일 수 있다. 순전히 예시로서, 제1 당사자(103a)는 본원에서 앨리스(Alice)로서 지칭되고 제2 당사자(103b)는 밥(Bob)으로서 지칭되지만, 이것이 제한적이지 않고 본원에서 앨리스 또는 밥에 대한 임의의 참조는 각각 "제1 당사자" 및 "제2 당사자"로 대체될 수 있다는 것이 인지될 것이다.
각각의 당사자(103)의 컴퓨터 장비(102)는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU들, GPU들, 다른 가속기 프로세서들, 애플리케이션 특정 프로세서들 및/또는 FPGA들을 포함하는 개개의 프로세싱 장치를 포함한다. 각각의 당사자(103)의 컴퓨터 장비(102)는 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다. 각각의 당사자(103)의 컴퓨터 장비(102) 상의 메모리는 프로세싱 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션(105)의 개개의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 당사자(103)에 기인한 임의의 액션은 개개의 컴퓨터 장비(102)의 프로세싱 장치 상에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것이 이해될 것이다. 각각의 당사자(103)의 컴퓨터 장비(102)는 적어도 하나 사용자 단말, 예컨대, 데스크 톱 또는 랩톱 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 디바이스를 포함한다. 주어진 당사자(103)의 컴퓨터 장비(102)는 또한 사용자 단말을 통해 액세스되는 클라우드 컴퓨팅 자원들과 같은 하나 이상의 다른 네트워킹된 자원들을 포함할 수 있다.
예컨대, 서버로부터 다운로드되거나, 또는 이동식 저장 디바이스 이를테면, 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, 광학 디스크 이를테면, CD 또는 DVD ROM 또는 이동식 광학 드라이브 등 상에서 제공되는 클라이언트 애플리케이션(105)은 적절한 컴퓨터-판독 가능 저장 매체 또는 매체들 상에서 임의의 주어진 당사자(103)의 컴퓨터 장비(102)에 초기에 제공될 수 있다.
클라이언트 애플리케이션(105)은 적어도 "지갑" 기능을 포함한다. 이는 2개의 메인 기능성들을 갖는다. 이들 중 하나는 개개의 당사자(103)가 트랜잭션들(152)을 생성하고 인가(예컨대, 서명)하여 하나 이상의 비트코인 노드들(104)에 전송하여, 이어서 블록체인 노드들(104)의 네트워크 전반에 걸쳐 전파되고 그리하여 블록체인(150)에 포함되는 것을 가능하게 하는 것이다. 남은 하나는 개개의 당사자에게 자신이 현재 소유하고 있는 디지털 자산의 금액을 다시 보고하는 것이다. 출력-기반 시스템에서, 이 제2 기능성은 블록체인(150) 전반에 걸쳐 흩어져 있는 해당 당사자에 속하는 다양한 트랜잭션들(152)의 출력들에서 정의된 금액들을 대조하는 것을 포함한다.
참고: 다양한 클라이언트 기능성이 주어진 클라이언트 애플리케이션(105)에 통합되는 것으로서 설명될 수 있지만, 이는 반드시 제한적인 것은 아니며, 대신 본원에서 설명된 클라이언트 기능성은 API를 통해 인터페이싱하거나 하나가 남은 하나에 플러그인하는 두 개 이상의 개별 애플리케이션들의 세트에서 구현될 수 있다. 보다 일반적으로, 클라이언트 기능성은 애플리케이션 계층 또는 운영 체제와 같은 하위 계층 또는 이들의 임의의 조합에서 구현될 수 있다. 다음은 클라이언트 애플리케이션(105)과 관련하여 설명될 것이지만, 이것이 제한적이지 않다는 것이 인지될 것이다.
각각의 컴퓨터 장비(102) 상의 클라이언트 애플리케이션 또는 소프트웨어(105)의 인스턴스는 네트워크(106)의 블록체인 노드들(104) 중 적어도 하나에 동작 가능하게 커플링된다. 이는 클라이언트(105)의 지갑 기능이 트랜잭션들(152)을 네트워크(106)로 전송하는 것을 가능하게 한다. 클라이언트(105)는 또한 개개의 당사자(103)가 수령인인 임의의 트랜잭션들에 대해 블록체인(150)에 질의하기 위해(또는 실시예들에서, 블록체인(150)은 그의 공개 가시성을 통해 부분적으로 트랜잭션들의 신뢰를 제공하는 공공 시설(public facility)이므로, 실제로 블록체인(150)에서 다른 당사자들의 트랜잭션을 검사하기 위해) 블록체인 노드들(104)에 접촉할 수 있다. 각각의 컴퓨터 장비(102) 상의 지갑 기능은 트랜잭션 프로토콜에 따라 트랜잭션들(152)을 공식화(formulate) 하고 전송하도록 구성된다. 위에서 제시된 바와 같이, 각각의 블록체인 노드(104)는 블록체인 노드 프로토콜에 따라 트랜잭션들(152)을 유효성 검증하고 트랜잭션들(152)을 포워딩하여 이들을 블록체인 네트워크(106) 전체에 전파하도록 구성된 소프트웨어를 실행한다. 트랜잭션 프로토콜 및 노드 프로토콜은 서로 대응하며, 주어진 트랜잭션 프로토콜은 주어진 트랜잭션 모델을 함께 구현하도록 주어진 노드 프로토콜을 따른다. 동일한 트랜잭션 프로토콜이 블록체인(150) 내 모든 트랜잭션들(152)에 사용된다. 동일한 노드 프로토콜이 네트워크(106) 내 모든 노드들(104)에 의해 사용된다.
주어진 당사자(103), 이를테면 앨리스가 블록체인(150)에 포함될 새로운 트랜잭션(152j)을 전송하기를 원할 때, 그녀는 (자신의 클라이언트 애플리케이션(105)의 지갑 기능을 사용하여) 관련 트랜잭션 프로토콜에 따라 새로운 트랜잭션을 공식화한다. 그 후, 그녀는 클라이언트 애플리케이션(105)으로부터 그녀가 연결되는 하나 이상의 블록체인 노드들(104)에 트랜잭션(152)을 전송한다. 예컨대, 이는 앨리스의 컴퓨터(102)에 가장 잘 연결된 블록체인과 노드(104)일 수 있다. 임의의 주어진 블록체인 노드(104)가 새로운 트랜잭션(152j)을 수신할 때, 주어진 노드는 블록체인 노드 프로토콜 및 각자의 역할에 따라 이를 처리한다. 이는 새롭게 수신된 트랜잭션(152j)이 "유효"하기 위한 특정 조건을 충족시키는지를 먼저 체크하는 것을 포함하며, 그의 예들은 곧 보다 자세히 논의될 것이다. 일부 트랜잭션 프로토콜들에서, 유효성 검증을 위한 조건은 트랜잭션들(152)에 포함된 스크립트들에 의해 트랜잭션 단위로 구성 가능할 수 있다. 대안적으로, 조건은 단순히 노드 프로토콜의 내장 피처이거나, 스크립트 및 노드 프로토콜의 조합으로 정의될 수 있다.
새롭게 수신된 트랜잭션(152j)이 유효한 것으로 간주되기 때문에 테스트를 통과한다는 것을 조건으로(즉, 그것이 "유효성 검증"된다는 조건으로), 트랜잭션(152j)을 수신하는 임의의 블록체인 노드(104)는 새로운 유효성 검증된 트랜잭션(152)을 그 블록체인 노드(104)에서 유지되는 블록체인들(154)의 순서화된 세트(154)에 추가할 것이다. 또한, 트랜잭션(152j)을 수신하는 임의의 블록체인 노드(104)는 유효성 검증된 트랜잭션(152)을 네트워크(106)의 하나 이상의 다른 블록체인 노드들(104)로 계속해서 전파시킬 것이다. 각각의 블록체인 노드(104)가 동일한 프로토콜을 적용하기 때문에, 트랜잭션(152j)이 유효하다고 가정하면, 이는 그것이 곧 전체 네트워크(106)에 걸쳐 전파될 것임을 의미한다.
일단 주어진 블록체인 노드(104)에서 유지되는 계류중인 트랜잭션(154)의 순서화된 풀에 허용되면, 블록체인 노드(104)는 새로운 트랜잭션(152)을 포함하여 154의 각자의 풀의 최신 버전 상에서 작업 증명 퍼즐을 해결하기 위해 경쟁하기 시작할 것이다(다른 블록체인 노드들(104)은 트랜잭션들의 상이한 풀(154)에 기초하여 퍼즐을 해결하려고 시도할 수 있지만 누구든 먼저 해결하는 사람은 최신 블록(151)에 포함된 트랜잭션들의 세트를 정의할 것임을 상기한다). 결국 블록체인 노드(104)는 앨리스의 트랜잭션(152j)을 포함하는 순서화된 풀(154)의 일부에 대한 퍼즐을 해결할 것이다. 새로운 트랜잭션(152j)을 포함하는 풀(154)에 대한 작업 증명이 완료되면, 이는 변경 불가능하게 블록체인(150)의 블록들(151) 중 하나의 부분이 된다. 각각의 트랜잭션(152)은 이전 트랜잭션에 대한 역 포인터를 포함하여서, 트랜잭션들의 순서가 또한 변경 불가능하게 레코딩된다.
상이한 블록체인 노드들(104)은 주어진 트랜잭션의 상이한 인스턴스들을 먼저 수신하고 이에 따라 하나의 인스턴스가 새로운 블록(151)에 공개되기 전에 어떤 인스턴스가 '유효'한지에 관한 상충되는 뷰들을 가질 수 있으며, 이 때 모든 블록체인 노드들(104)은 공개된 인스턴스가 유일한 유효 인스턴스라는 것에 동의한다. 블록체인 노드(104)가 하나의 인스턴스를 유효한 것으로 수락하고 그 후 제2 인스턴스가 블록체인(150)에 레코딩되었음을 발견하는 경우, 해당 블록체인 노드(104)는 이를 수락해야 하며 초기에 수락된 인스턴스(즉, 블록(151)에서 공개되지 않은 인스턴스)를 폐기(즉, 유효하지 않은 것으로 취급)할 것이다.
일부 블록체인 네트워크들에 의해 동작되는 트랜잭션 프로토콜의 대안적인 유형은 계정-기반 트랜잭션 모델의 일부로서 "계정-기반" 프로토콜로서 지칭될 수 있다. 계정-기반의 경우에, 각각의 트랜잭션은 과거 트랜잭션들의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하기 보다는, 절대 계정 잔액을 참조함으로써 전달될 금액을 정의한다. 모든 계정들의 현재 상태는 블록체인과 별개로 해당 네트워크의 노드들에 의해 저장되며 지속적으로 업데이트된다. 이러한 시스템에서, 트랜잭션들은 계정의 실행 중인 트랜잭션 집계(또한 "포지션"이라 불림)를 사용하여 순서화된다. 이 값은 그의 암호화 서명의 일부로 발신인에 의해 서명되고 트랜잭션 참조 계산의 부분으로서 해시된다. 게다가, 선택적 데이터 필드가 또한 트랜잭션에 서명할 수 있다. 이 데이터 필드는 예컨대, 이전 트랜잭션 ID가 데이터 필드에 포함된 경우 이전 트랜잭션을 뒤로 가리킬 수 있다.
2. UTXO-기반 모델
도 2는 예시적인 트랜잭션 프로토콜을 예시한다. 이는 UTXO-기반 프로토콜의 예이다. 트랜잭션(152)(약칭 "Tx")은 블록체인(150)의 기본 데이터 구조이다(각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함함). 다음은 출력-기반 또는 "UTXO" 기반 프로토콜을 참조하여 설명될 것이다. 그러나 이것은 모든 가능한 실시예들로 제한되지 않는다. 예시적인 UTXO-기반 프로토콜이 비트코인을 참조하여 설명되지만, 다른 예시적인 블록체인 네트워크들 상에서 동일하게 구현될 수 있다는 것에 주의한다.
UTXO-기반 모델에서, 각각의 트랜잭션("Tx")(152)은 하나 이상의 입력들(202) 및 하나 이상의 출력들(203)을 포함하는 데이터 구조를 포함한다. 각각의 출력(203)은 (UTXO가 아직 리딤되지 않은 경우) 다른 새로운 트랜잭션의 입력(202)에 대한 소스로서 사용될 수 있는 미지출 트랜잭션 출력(unspent transaction output; UTXO)을 포함할 수 있다. UTXO는 디지털 자산의 금액을 지정하는 값을 포함한다. 이는 분산 원장 상의 세팅된 수의 토큰들을 표현한다. UTXO는 또한 다른 정보 중에서도, 그것이 발생한 트랜잭션의 트랜잭션 ID를 포함할 수 있다. 트랜잭션 데이터 구조는 또한 입력 필드(들)(202) 및 출력 필드(들)(203)의 크기의 표시자를 포함할 수 있는 헤더(201)를 포함할 수 있다. 헤더(201)는 또한 트랜잭션의 ID를 포함할 수 있다. 실시예들에서, 트랜잭션 ID는 (트랜잭션 ID 자체는 제외한) 트랜잭션 데이터의 해시이고 노드들(104)에게 제출된 원시 트랜잭션(152)의 헤더(201)에 저장된다.
앨리스(103a)가 해당 디지털 자산의 금액을 밥(103b)에게 전달하는 트랜잭션(152j)을 생성하기를 원한다고 하자. 도 2에서 앨리스의 새로운 트랜잭션(152j)은 "Tx1"로서 라벨이 지정된다. 이는 시퀀스의 선행 트랜잭션(152i)의 출력(203)에서 앨리스에게 잠긴 디지털 자산의 금액을 취하고, 이 중 적어도 일부를 밥에게 전달한다. 선행 트랜잭션(152i)은 도 2에서 "Tx0"로 라벨이 지정된다. Tx0 및 Tx1은 임의의 라벨일 뿐이다. 이들은, Tx0이 블록체인(151)의 최초 트랜잭션이거나, Tx1이 풀(154)에서 바로 다음 트랜잭션이라는 것을 반드시 의미하지는 않는다. Tx1은 앨리스에게 잠긴 미지출 출력(203)을 여전히 갖는 임의의 선행(즉, 앞선) 트랜잭션을 뒤로 가리킬 수 있다.
선행 트랜잭션(Tx0)은 앨리스가 자신의 새로운 트랜잭션(Tx1)을 생성할 때, 또는 적어도 그녀가 그것을 네트워크(106)에 전송할 때까지 이미 유효성 검증되고 블록체인(150)의 블록(151)에 포함되었을 수 있다. 이는 그 시간에 이미 블록들(151) 중 하나에 포함되었거나, 순서화된 세트(154)에서 여전히 대기 중일 수 있으며, 이 경우에 곧 새로운 블록(151)에 포함될 것이다. 대안적으로 Tx0 및 Tx1이 생성되고 네트워크(106)에 함께 전송될 수 있거나 또는 노드 프로토콜이 "고아" 트랜잭션들을 버퍼링하도록 허용하는 경우 Tx0는 Tx1 이후에도 전송될 수 있다. 트랜잭션들의 시퀀스의 맥락에서 본원에서 사용된 바와 같은 "선행" 및 "후속"이라는 용어들은 (트랜잭션이 다른 트랜잭션을 뒤로 가리키고, 이와 같이 계속되는) 트랜잭션들에서 지정된 트랜잭션 포인터들에 의해 정의된 바와 같은 시퀀스에서의 트랜잭션들의 순서를 지칭한다. 이들은 "선행자(predecessor)" 및 "후행자(successor)", 또는 "앞선(antecedent)"과 "후위의(descendant)", "부모" 및 "자식" 등으로 동등하게 대체될 수 있다. 이는 그것들이 생성되고, 네트워크(106)로 전송되거나, 임의의 주어진 블록체인 노드(104)에 도달하는 순서를 반드시 의미하지는 않는다. 그럼에도 불구하고, 선행 트랜잭션(앞선 트랜잭션 또는 "부모")을 가리키는 후속 트랜잭션(후위의 트랜잭션 또는 "자식")은 부모 트랜잭션이 유효성 검증될 때까지 그리고 유효성 검증되지 않는 한 유효성 검증되지 않을 것이다. 그의 부모 이전에 블록체인과 노드(104)에 도달하는 자식은 고아로 간주된다. 이는 노드 프로토콜 및/또는 노드 거동에 의존하여 부모를 기다리기 위해 특정 시간 동안 버퍼링되거나 폐기될 수 있다.
선행 트랜잭션(Tx0)의 하나 이상의 출력들(203) 중 하나는, 본원에서 UTXO0으로서 라벨이 지정되는 특정 UTXO를 포함한다. 각각의 UTXO는 UTXO에 의해 표현되는 디지털 자산의 금액을 지정하는 값 및 후속 트랜잭션이 유효성 검증되고 따라서 UTXO가 성공적으로 리딤되기 위하여 후속 트랜잭션의 입력(202)에서 잠금해제 스크립트에 의해 만족되어야 하는 조건을 정의하는 잠금 스크립트를 포함한다. 통상적으로, 잠금 스크립트는 특정 당사자(그것이 포함된 트랜잭션의 수혜자)에게로 금액을 잠근다. 즉, 잠금 스크립트는, 통상적으로 후속 트랜잭션의 입력의 잠금해제 스크립트가 선행 트랜잭션이 잠겨 있는 당사자의 암호화 서명을 포함하는 조건을 포함하는 잠금해제 조건을 정의한다.
잠금 스크립트(일명 scriptPubKey)는 노드 프로토콜에 의해 인식되는 도메인 특정 언어로 작성된 코드 조각이다. 이러한 언어의 특정 예는 블록체인 네트워크에 의해 사용되는 "스크립트(Script)"(대문자 S)라 불린다. 잠금 스크립트는 트랜잭션 출력(203)을 지출하는 데 어떤 정보가 필요한지, 예컨대, 앨리스의 서명 요건을 지정한다. 잠금해제 스크립트들은 트랜잭션들의 출력에서 나타난다. 잠금해제 스크립트(일명 scriptSig)는 잠금 스크립트 기준들을 충족시키는 데 필요한 정보를 제공하는 도메인 특정 언어로 작성된 코드 조각이다. 예컨대, 이는 밥의 서명을 포함할 수 있다. 잠금해제 스크립트들은 트랜잭션들의 입력(202)에 나타난다.
따라서 예시된 예에서, Tx0의 출력(203)의 UTXO0은 UTXO0가 리딤되기 위해(엄밀히, UTXO0을 리딤하고자 시도하는 후속 트랜잭션이 유효하기 위해) 앨리스의 서명 Sig PA를 요구하는 잠금 스크립트 [Checksig PA]를 포함한다. [Checksig PA]는 앨리스의 공개-개인 키 쌍으로부터의 공개 키 PA의 표현(예컨대, 해시)을 포함한다. Tx1의 입력(202)은 (예컨대, 실시예에서, 전체 트랜잭션 Tx0의 해시인 그의 트랜잭션 Id인 TxID0에 의해) Tx1을 뒤로 가리키는 포인터를 포함한다. Tx1의 입력(202)은 Tx0 내에서 UTXO0을 식별하는 인덱스를 포함하여, Tx0의 임의의 다른 가능한 출력들 사이에서 그것을 식별한다. Tx1의 입력(202)은 앨리스의 암호화 서명을 포함하는 잠금해제 스크립트 <Sig PA>를 더 포함하며, 이는 앨리스가 키 쌍으로부터 자신의 개인 키를 데이터의 미리 정의된 부분(때로는 암호화에서 "메시지"라 불림)에 적용함으로써 생성된다. 유효한 서명을 제공하기 위해 앨리스에 의해 서명될 필요가 있는 데이터(또는 "메시지")는 잠금 스크립트, 노드 프로토콜 또는 이들의 조합에 의해 정의될 수 있다.
새로운 트랜잭션 Tx1이 블록체인 노드(104)에 도달할 때, 노드는 노드 프로토콜을 적용한다. 이는 잠금해제 스크립트가 잠금 스크립트에 정의된 조건(이 조건은 하나 이상의 기준들을 포함할 수 있음)을 충족시키는지를 체크하기 위해 잠금 스크립트 및 잠금해제 스크립트를 함께 실행하는 것을 포함한다. 실시예들에서, 이는 2개의 스크립트들을 컨케터네이팅(concatenating)하는 것을 수반한다.
<Sig PA> <PA> || [Checksig PA]
여기에서 "||"는 컨케터네이션을 표현하고 "<...>"는 스택 상에 데이터를 배치하는 것을 의미하고, "[…]"는 잠금 스크립트(이 예에서, 스택-기반 언어)에 의해 구성된 함수이다. 동등하게, 스크립트들을 컨케터네이팅하는 대신, 스크립트들은 공통 스택을 사용하여 번갈아 실행될 수 있다. 어느 쪽이든, 함께 실행될 때, 스크립트들은 Tx0의 출력의 잠금 스크립트에 포함된 바와 같은 앨리스의 공개 키 PA를 사용하여, Tx1의 입력의 잠금해제 스크립트가 데이터의 예상되는 부분에 서명하는 앨리스의 서명을 포함한다는 것을 인증한다. 이 인증을 수행하기 위하여 데이터의 예상되는 부분 자체("메시지")가 또한 포함될 필요가 있다. 실시예들에서, 서명된 데이터는 Tx1 전체를 포함한다(이에 따라, 평문으로 데이터의 서명된 부분을 지정하는 별개의 요소가 포함될 필요가 없는데, 그 이유는 그것이 이미 본질적으로 존재하기 때문임).
공개-개인 암호화에 의한 인증의 세부사항들은 당업자에게 친숙할 것이다. 기본적으로, 앨리스가 자신의 개인 키를 사용하여 메시지에 서명한 경우, 앨리스의 공개 키 및 평문의 메시지를 감안하여, 노드(104)와 같은 다른 엔티티는 메시지가 앨리스에 의해 서명된 것임이 틀림없다는 것을 인증할 수 있다. 서명은 통상적으로 메시지를 해시하는 것, 해시에 서명하는 것, 그리고 이를 서명으로서 메시지에 태깅하고, 이에 따라 공개 키의 임의의 보유자(holder)가 서명을 인증하는 것을 가능하게 하는 것을 포함한다. 따라서 여기에서 특정 데이터 조각 또는 트랜잭션의 일부 등에 서명하는 것에 대한 임의의 참조는 실시예들에서 해당 데이터 조각 또는 트랜잭션 일부의 해시에 서명하는 것을 의미할 수 있다는 것에 주의한다.
Tx1의 잠금해제 스크립트가 Tx0의 잠금 스크립트에 지정된 하나 이상의 조건들을 충족시키는 경우(이에 따라, 보여진 예에서, 앨리스의 서명이 Tx1에서 제공되고 인증된 경우), 블록체인과 노드(104)는 Tx1이 유효한 것으로 간주한다. 이는 블록체인 노드(104)가 계류중인 트랜잭션들(154)의 순서화된 풀에 Tx1을 추가할 것임을 의미한다. 블록체인 노드(104F)는 또한 트랜잭션 Tx1을 네트워크(106) 내 하나 이상의 다른 블록체인 노드들(104)로 포워딩할 것이어서, 그 트랜잭션이 네트워크(106) 전반에 걸쳐 전파될 것이다. Tx1이 유효성 검증되고 블록체인(150)에 포함되면, 이는 지출된 것으로 Tx0으로부터의 UTXO0를 정의한다. Tx1은 그것이 미지출 트랜잭션 출력(203)을 지출하는 경우에만 유효할 수 있다는 것에 주의한다. 다른 트랜잭션(152)에 의해 이미 지출된 출력을 지출하려고 시도하는 경우, 다른 모든 조건들이 충족되는 경우조차도 Tx1은 유효하지 않을 것이다. 따라서 블록체인과 노드(104)는 또한 선행 트랜잭션 Tx0에서 참조된 UTXO가 이미 지출되었는지(즉, 다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지)를 체크할 필요가 있다. 이는 트랜잭션들(152) 상에 정의된 순서를 부과하는 것이 블록체인(150)에 대해 중요한 하나의 이유이다. 실제로, 주어진 블록체인 노드(104)는 트랜잭션들(152)이 지출된 UTXO들(203)을 마킹하는 별개의 데이터베이스를 유지할 수 있지만, 궁극적으로 UTXO가 지출되었는지를 정의하는 것은 블록체인(150)의 다른 유효한 트랜잭션에 대한 유효한 입력이 이미 형성되었는지의 여부이다.
주어진 트랜잭션(152)의 모든 출력들(203)에서 지정된 총 금액이 모든 그의 입력들(202)에 의해 가리켜지는 총 금액보다 큰 경우, 이는 대부분의 트랜잭션 모델들에서 무효에 대한 다른 근거이다. 따라서 이러한 트랜잭션들은 전파되지도 않고 블록(151)에 포함되지 않을 것이다.
UTXO-기반 트랜잭션 모델에서, 주어진 UTXO는 전체로서 지출될 필요가 있다는 것에 주의한다. 다른 프랙션(fraction)이 지출되면서, 지출된 것으로 UTXO에서 정의된 금액의 프랙션을 "남겨둘" 수는 없다. 그러나 UTXO로부터의 금액은 다음 트랜잭션의 다수의 출력들 사이에서 분할될 수 있다. 예컨대, Tx0의 UTXO0에 정의된 금액은 Tx1의 다수의 UTXO들 사이에서 분할될 수 있다. 따라서 앨리스가 UTXO0에 정의된 모든 금액을 밥에게 주기를 원하지 않는 경우, 앨리스는 Tx1의 제2 출력에서 자신에게 잔돈을 주거나, 다른 당사자에게 지불하는데 나머지를 사용할 수 있다.
실제로, 앨리스는 또한 일반적으로 블록(151)에 그녀의 트랜잭션(104)을 성공적으로 포함시키는 비트코인 노드(104)에 대한 수수료를 포함할 필요가 있을 것이다. 앨리스가 그러한 수수료를 포함시키지 않는 경우, Tx0은 블록체인 노드들(104M)에 의해 거부될 수 있고, 이에 따라 기술적으로 유효하더라도, 전파되어 블록체인(150)에 포함되지 않을 수 있다(노드 프로토콜은 블록체인 노드들(104)이 원하지 않는 경우 이들에게 트랜잭션들(152)을 수락하도록 강요하지 않음). 일부 프로토콜들에서, 트랜잭션 수수료는 자체의 별개의 출력(203)을 요구하지 않는다(즉, 별개의 UTXO가 필요하지 않음). 대신, 주어진 트랜잭션(152)의 입력(들)(202)에 의해 가리켜지는 총 금액과 출력(들)(203)에 지정된 총 금액 사이의 임의의 차이는 트랜잭션을 공개한 블록체인 노드(104)에게 자동으로 주어진다. 예컨대, UTXO0에 대한 포인터가 Tx1에 대한 유일한 입력이고 Tx1는 단 하나의 출력 UTXO1만을 갖는다고 하자. UTXO0에 지정된 디지털 자산의 금액이 UTXO1에 지정된 금액보다 큰 경우, 차이는 UTXO1을 포함하는 블록을 생성하기 위한 작업 증명 경쟁에서 승리한 노드(104)에 의해 할당(또는 지출)될 수 있다. 그러나 대안적으로 또는 부가적으로, 트랜잭션 수수료가 트랜잭션(152)의 UTXO들(203) 중 자체 UTXO에서 명시적으로 지정될 수 있다는 것이 반드시 배제되는 것은 아니다.
앨리스 및 밥의 디지털 자산들은 블록체인(150)의 임의의 위치의 임의의 트랜잭션들(152)에서 그들에게 잠겨 있는 UTXO로 구성된다. 따라서 통상적으로, 주어진 당사자(103)의 자산들은 블록체인(150) 전반에 걸친 다양한 트랜잭션들(152)의 UTXO들에 걸쳐 흩어져 있다. 블록체인(150)의 어떤 위치에도 주어진 당사자(103)의 총 잔액을 정의하는 숫자는 전혀 없다. 클라이언트 애플리케이션(105)에서 지갑 기능의 역할은, 개개의 당사자에게 잠겨 있으며 다른 전방 트랜잭션에서 아직 지출되지 않은 모든 다양한 UTXO들의 값들을 함께 대조하는 것이다. 비트코인 노드들(104) 중 임의의 것에 저장된 블록체인(150)의 사본을 질의함으로써 이것이 수행될 수 있다.
스크립트 코드는 종종 도식적으로(즉, 정확한 언어를 사용하지 않음) 표현된다는 것에 주의한다. 예컨대, 특정 기능을 표현하기 위해 작업 코드(opcode)들이 사용될 수 있다. "OP_..."는 스크립트 언어의 특정 작업코드(opcode)를 지칭한다. 예로서, OP_RETURN은 잠금 스크립트의 선두에서 OP_FALSE가 앞에 있을 때 트랜잭션 내에 데이터를 저장하고 그리하여 데이터를 블록체인(150)에 변경 불가능하게 레코딩할 수 있는 트랜잭션의 지출 불가능한 출력을 생성하는 스크립트 언어의 작업코드이다. 예컨대, 데이터는 블록체인에 저장하고자 하는 문서를 포함할 수 있다.
통상적으로, 트랜잭션의 입력은 공개 키 PA에 대응하는 디지털 서명을 포함한다. 실시예들에서, 이는 타원 곡선 secp256k1을 사용하는 ECDSA에 기초한다. 디지털 서명은 특정 데이터 조각에 서명한다. 일부 실시예들에서, 주어진 트랜잭션에 대해, 서명은 트랜잭션 입력의 일부, 및 트랜잭션 출력들의 전부 또는 일부에 서명할 것이다. 서명되는 출력들의 특정 부분들은 SIGHASH 플래그에 의존한다. SIGHASH 플래그는 일반적으로 어느 출력들이 서명되는지를 선택하기 위해 서명의 끝에 포함된 4-바이트 코드이다(이에 따라, 서명 시에 고정됨).
잠금 스크립트는 때로는, 그것이 통상적으로 개개의 트랜잭션이 잠겨 있는 당사자의 공개 키를 포함한다는 사실을 지칭하는 "scriptPubKey"라 칭해진다. 잠금해제 스크립트는 때로는 그것이 통상적으로 대응하는 서명을 제공한다는 사실을 지칭하는 "scriptSig"라 칭해진다. 그러나, 보다 일반적으로, UTXO가 리딤되기 위한 조건이 서명을 인증하는 것을 포함하는 것이 블록체인(150)의 모든 애플리케이션들에서 필수적인 것은 아니다. 보다 일반적으로 스크립팅 언어는 임의의 하나 이상의 조건들을 정의하는 데 사용될 수 있다. 따라서 보다 일반적인 용어들 "잠금 스크립트" 및 "잠금해제 스크립트"가 선호될 수 있다.
3. 사이드 채널
도 1에 도시된 바와 같이, 앨리스 및 밥의 컴퓨터 장비(102a, 120b) 각각 상의 클라이언트 애플리케이션은 각각 부가적인 통신 기능성을 포함할 수 있다. 즉, 부가적인 기능성은 (어느 한 당사자 또는 제3자의 주도로) 앨리스(103a)가 밥(103b)과 별개의 사이드 채널(107)을 설정하는 것을 가능하게 한다. 사이드 채널(107)은 블록체인 네트워크와 별개로 데이터 교환을 가능하게 한다. 이러한 통신을 때로는 "오프-체인(off-chain)" 통신으로서 지칭된다. 예컨대, 이는 당사자들 중 하나가 네트워크(106)로 브로드캐스팅하기로 선택할 때까지, (아직) 트랜잭션이 블록체인 네트워크(106) 상에 등록되거나 체인(150)으로 진행됨 없이 앨리스와 밥 사이에서 트랜잭션(152)을 교환하는 데 사용될 수 있다. 이러한 방식으로 트랜잭션을 공유하는 것은 때로는 "트랜잭션 템플릿" 공유하는 것으로서 지칭된다. 트랜잭션 템플릿은 완전한 트랜잭션을 형성하기 위해 요구되는 하나 이상의 입력들 및/또는 출력들이 없을 수 있다. 대안적으로 또는 부가적으로, 사이드 채널(107)은 키들, 협상된 금액들 또는 조건들, 데이터 콘텐츠 등과 같은 임의의 다른 트랜잭션 관련 데이터를 교환하는 데 사용될 수 있다.
사이드 채널(107)은 블록체인 네트워크(106)와 동일한 패킷 교환 네트워크(101)를 통해 설정될 수 있다. 대안적으로 또는 부가적으로, 사이드 채널(301)은 상이한 네트워크 이를테면, 모바일 셀룰러 네트워크, 또는 로컬 영역 네트워크 이를테면, 로컬 무선 네트워크, 또는 심지어, 앨리스 및 밥의 디바이스들(102a, 102b) 사이의 직접 유선 또는 무선 링크를 통해 설정될 수 있다. 일반적으로, 본원의 임의의 위치에서 지칭되는 바와 같은 사이드 채널(107)은 "오프-체인", 즉 블록체인 네트워크(106)와 별개로 데이터를 교환하기 위한 하나 이상의 네트워킹 기술들 또는 통신 매체들을 통한 임의의 하나 이상의 링크들을 포함할 수 있다. 하나 초과의 링크가 사용되는 경우, 오프-체인 링크들의 번들(bundle) 또는 모음은 전체적으로 사이드 채널(107)로서 지칭될 수 있다. 따라서 앨리스 및 밥이 사이드 채널(107)을 통해 특정 정보 조각들 또는 데이터 등을 교환한다고 하면, 이는 이러한 모든 데이터 조각들이 정확히 동일한 링크 또는 심지어 동일한 유형의 네트워크를 통해 전송되어야 한다는 것을 반드시 의미하는 것은 아니란 것에 주의한다.
4. 잠금 스크립트 전파의 시행
도 3은 잠금 스크립트의 전파를 시행하기 위한, 즉 트랜잭션들의 체인 내의 각각의 트랜잭션이 동일한 잠금 스크립트를 포함하도록 강제하기 위한 예시적인 시스템(300)을 도시한다. 시스템(300)은 제1 당사자(예컨대, 앨리스(103a)) 및 제2 당사자(예컨대, 밥(103b))를 포함한다. 시스템(300)은 또한 하나 이상의 추가적인 당사자들, 예컨대, 찰리(103c)를 포함할 수 있다. 시스템(300)은 또한 블록체인 네트워크(106)의 하나 이상의 블록체인 노드(104)를 포함한다. 이하의 설명 전반에 걸쳐 제1 당사자 및 제2 당사자가 앨리스(103a) 및 밥(103b)으로 지칭되지만, 이는 단지 편의를 위한 것임에 유의해야 한다. 즉, 제1 당사자 및 제2 당사자는, 물론 옵션이지만, 도 1 및 도 2를 참조하여 앨리스(103a) 및 밥(103b)에 의해 수행되는 것으로 위에서 설명된 동작들 중 일부 또는 전부를 수행하도록 반드시 구성될 필요는 없다. 보다 일반적으로, 제1 당사자 및 제2 당사자 둘 모두는, 도 1 및 도 2를 참조하여 앨리스(103a) 및/또는 밥(103b)에 의해 수행되는 것으로 위에서 설명된 동작들 중 일부 또는 전부를 수행하도록 구성될 수 있다. 앨리스(103a), 밥(103b), 또는 찰리(103c)에 의해 수행되는 것으로 설명된 임의의 동작이 그들 개개의 컴퓨팅 장비에 의해 수행된다는 것이 인지될 것이다.
본 발명의 실시예들은, 잠금 스크립트가 블록체인 트랜잭션들의 체인 전반에 걸쳐 전파되는 것을 보장하는 데 사용될 수 있다. 일반적으로, 프로토콜은 2개의 유형의 트랜잭션: 주요 트랜잭션 및 보조 트랜잭션에 의존한다. 주요 트랜잭션들 각각은, 개개의 주요 잠금 스크립트를 잠금 해제하려고 시도하는 개개의 보조 트랜잭션에 대해 조건들을 시행하는 개개의 주요 잠금 스크립트를 포함한다. 각각의 주요 잠금 스크립트는 동일하고, 즉, 이는 동일한 포맷을 취하고 동일한 데이터를 포함하며 동일한 기능을 구현한다. 보조 트랜잭션들 각각은, 개개의 보조 잠금 스크립트를 잠금 해제하려고 시도하는 개개의 주요 트랜잭션에 대해 조건들을 시행하는 개개의 보조 잠금 스크립트를 포함한다. 각각의 보조 잠금 스크립트는 동일하다.
제1 당사자인 앨리스(103a)는 발행 트랜잭션을 생성하는 것을 담당할 수 있다. 발행 트랜잭션은 트랜잭션의 체인 내의 초기의 주요 트랜잭션이다. 발행 트랜잭션은 또한 첫 번째 주요 트랜잭션으로 지칭될 수 있다. 주요 트랜잭션이 토큰 관련 데이터를 포함하는 예에서, 앨리스(103a)는 토큰의 발행자일 수 있다. 다른 예에서, 상이한 당사자가 토큰 체인을 개시할 수 있다.
첫 번째 주요 트랜잭션은 하나 이상의 입력 및 하나 이상의 출력을 포함한다. 예컨대, 주요 트랜잭션의 입력은 앨리스의 이전의 트랜잭션들 중 하나의 출력을 잠금 해제하는 데 사용될 수 있고, 따라서, 이를 위해 요구되는 데이터, 예컨대, 앨리스의 서명 및 공개 키를 포함할 수 있다. 첫 번째 주요 트랜잭션의 출력(예컨대, 제1 출력)은 주요 잠금 스크립트, 즉, 향후 트랜잭션들 전반에 걸쳐 전파될 동일한 주요 잠금 스크립트의 인스턴스를 포함한다. 첫 번째 주요 트랜잭션의 다른 출력(예컨대, 제2 출력)은 지출 조건을 특정할 수 있는데, 예컨대, 그것은 앨리스(103a) 또는 다른 당사자에 의해 소유된 공개 키에 잠길 수 있다. 예컨대, 제2 출력은 P2PKH(pay-to-public-key-hash) 출력을 포함할 수 있다.
주요 잠금 스크립트는, 주요 잠금 스크립트의 잠금 해제하려고 시도하는 트랜잭션 ― 이는 이 경우 제1 보조 트랜잭션임 ― 에 대해 몇몇의 조건을 시행하도록 구성된다. 보조 트랜잭션에 대해 시행되는 조건들 중 하나는, 제1 보조 트랜잭션의 잠금 해제 스크립트가 제1 보조 트랜잭션 자체에 기초하는 제1 메시지를 포함해야 한다는 것이다. 즉, 제1 메시지는 제1 보조 트랜잭션의 필드들 중 하나, 일부 또는 전부에 기초한다. 필드들 중 일부는 자신들의 원시 형태일 수 있고, 일부는 난독화, 예컨대, 해싱될 수 있다. 잠금 해제 스크립트가 이러한 메시지를 포함하도록 강제하는 하나의 기법은 당분야에서 PUSHTX로 알려져 있고, 이는 의사-작업코드, 즉, 특정 기능을 수행하도록 구성된 작업코드들의 결합이다. PUSHTX는 여기: https://xiaohuiliu.medium.com/op-push-tx-3d3d279174c1에서 설명된다. 또 다른 예는 영국 특허 출원 GB2112930.9에 설명되어 있다. 잠금 해제 스크립트가 제1 메시지를 포함하도록 강제하는 것은 제1 보조 트랜잭션에 대해 특정 체크가 이루어지는 것을 허용한다. 이 메시지는, 블록체인 서명 프로토콜의 일부로서 서명하기 전에 해싱되는 프리이미지이기 때문에, 때때로 시그해시 프리이미지(sighash preimage)로 지칭된다. 달리 말하면, 잠금 해제 스크립트가 제1 메시지를 포함하도록 강제하는 것은 제1 보조 트랜잭션에 대해 특정 조건이 시행되는 것을 허용한다. 시행되는 하나의 조건은, 제1 보조 트랜잭션의 출력(예컨대, 제1 출력)이 보조 잠금 스크립트(아래에서 설명됨)를 포함하는 것이다.
이 조건을 시행하는 방법의 예로서, 주요 잠금 스크립트는 보조 잠금 스크립트의 해시에 기초하여 해시 퍼즐을 구현하도록 구성된 서브-스크립트를 포함할 수 있다. 즉, 해시 퍼즐은 보조 잠금 스크립트의 해시를 포함하고, 해시에 대한 프리이미지가 제공되는 경우에만, 해시 퍼즐이 해결될 수 있고 따라서 서브-스크립트가 잠금 해제되도록 구성되고, 이로써 프리이미지는 보조 잠금 스크립트이다. 따라서, 주요 잠금 스크립트는 제1 메시지로부터 잠금 스크립트(예컨대, 제1 잠금 스크립트)를 추출하고, 추출된 잠금 스크립트를 해싱하고, 그것이 주요 잠금 스크립트의 일부로서 포함된 보조 잠금 스크립트의 해시에 대해 해싱한다는 것을 검증하도록 구성될 수 있다.
앨리스(103a)는 제1 보조 트랜잭션을 생성할 수 있거나, 이는 상이한 당사자에 의해 생성될 수 있다. 제1 보조 트랜잭션은, 위에서 언급된 바와 같이, 제1 메시지를 포함하는 입력 및 보조 잠금 스크립트를 포함하는 출력을 포함한다. 보조 잠금 스크립트는 보조 잠금 스크립트를 잠금 해제하려고 시도하는 트랜잭션 ― 이는 이 경우 제2 주요 트랜잭션임 ― 에 대해 몇몇의 조건을 시행하도록 구성된다. 제2 주요 트랜잭션에 대해 시행되는 조건 중 하나는, 제2 주요 트랜잭션의 잠금 해제 스크립트(예컨대, 제1 잠금 해제 스크립트)가 제2 주요 트랜잭션에 기초하는 제2 메시지를 포함해야 한다는 것이다. 즉, 제2 메시지는 제2 주요 트랜잭션의 필드들 중 하나, 일부 또는 전부에 기초한다. 필드들 중 일부는 자신들의 원시 형태일 수 있고, 일부는 난독화, 예컨대, 해싱될 수 있다. 제2 주요 트랜잭션에 대해 시행되는 또 다른 조건은, 잠금 해제 스크립트가 또한 제1 주요 트랜잭션의 하나, 일부 또는 각각의 잠금 스크립트를 포함하는 데이터 항목을 포함해야 하며, 따라서 제1 데이터 항목이 주요 잠금 스크립트를 포함해야 한다는 것이다. 즉, 제1 데이터 항목은 적어도 주요 잠금 스크립트를 포함해야 한다. 일부 예에서, 제1 데이터 항목은 또한 이하에서 논의되는 제1 주요 트랜잭션의 제2 잠금 스크립트를 포함해야 한다. 보조 잠금 스크립트는, 제2 메시지 및 제1 데이터 항목을 사용하여, 제2 주요 트랜잭션이 주요 잠금 스크립트를 출력(예컨대, 제1 출력)에 포함하도록 강제한다. 따라서, 주요 잠금 스크립트가 주요 트랜잭션 간에 전파된다. 주요 잠금 스크립트는 보조 트랜잭션에 보조 잠금 스크립트를 포함하도록 강제하기 때문에, 보조 잠금 스크립트가 또한 보조 트랜잭션 간에 전파된다. 따라서, 주요 잠금 스크립트 또는 보조 잠금 스크립트의 일부로서 포함된 모든 데이터(예컨대, 토큰 관련 데이터)는 주요 트랜잭션 또는 보조 트랜잭션 간에서 각각 전파된다.
위에서 언급된 바와 같이, 제1 주요 트랜잭션은 제2 출력을 포함할 수 있다. 보조 잠금 스크립트는 제1 주요 트랜잭션의 제2 출력이 제2 주요 트랜잭션의 입력에 의해 지출되도록 강제하도록 구성될 수 있다. 즉, 이들 예에서, 제1 주요 잠금 스크립트의 제2 출력 및 제1 보조 트랜잭션의 제1 출력은 별개의 트랜잭션에 의해서가 아니라 제2 주요 트랜잭션의 개개의 입력에 의해 지출되어야 한다.
이 조건을 시행하기 위한 하나의 옵션은, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제1 보조 트랜잭션을 포함하도록 강제하는 것이다. 즉, 제2 데이터 항목은 제2 주요 트랜잭션의 잠금 해제 스크립트에 포함되고, 여기서 제2 데이터 항목은, 예컨대, 직렬화된 형태로 제1 보조 트랜잭션을 포함한다. 보조 잠금 스크립트는, 제2 메시지로부터, 제2 주요 트랜잭션의 제1 입력에 의해 지출되는 출력의 개개의 트랜잭션 식별자를 추출하도록 구성된다. 유사하게, 보조 잠금 스크립트는, 제2 데이터 항목으로부터, 제1 보조 트랜잭션의 제1 입력에 의해 지출되는 출력의 개개의 트랜잭션 식별자를 추출하도록 구성된다. 보조 트랜잭션은 추출된 트랜잭션 식별자들이 동일하도록 강제하도록 구성된다.
이러한 예에서, 제2 주요 트랜잭션은 제1 주요 트랜잭션의 제2 출력을 잠금 해제하고 따라서 트랜잭션들의 링크된 체인을 생성하도록 구성된 제2 입력을 포함한다. 트랜잭션들은, 제1 주요 트랜잭션의 출력 및 제1 보조 트랜잭션의 출력이 동일한 제2 주요 트랜잭션에 의해 지출되도록 하는 위에서 설명된 시행 없이도, 이러한 방식으로 링크될 수 있다는 점에 유의한다. 그러나, 이러한 조건이 인-스크립트로 시행되게 하는 것의 이점이 있다(아래에서 논의됨).
일부 예에서, 제1 데이터 항목(즉, 제1 주요 트랜잭션의 잠금 스크립트들을 포함하는 데이터 항목)이 정확하다는 것을 검증하기 위해 추가적인 검증이 보조 잠금 스크립트에 의해 수행될 수 있다. 제1 주요 트랜잭션은, 트랜잭션을 해시 함수, 예컨대, SHA256 또는 SHA512로 해싱함으로써 생성되는 트랜잭션 식별자를 갖거나 적어도 이와 연관된다. 임의의 적절한 해시 함수가 사용될 수 있다. 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는, 해시 함수를 제1 주요 트랜잭션에 적용하는 것의 미드스테이트(midstate)를 포함하는 제3 데이터 항목을 포함할 수 있다. 당업자는 미드스테이트 그 자체에 익숙할 것이다. 일반적으로, 데이터가 (예컨대, SHA 기반 해시 함수를 사용하여) 해싱될 때, 데이터는 블록으로 분할된다. 일련의 컴퓨테이션들은 제1 미드스테이트를 생성하기 위해 블록들의 제1 세트를 사용하여 수행된다. 일련의 컴퓨테이션은 제2 미드스테이트를 생성하기 위해 블록들의 제2 세트 및 제1 미드스테이트를 사용하여 수행되고 이러한 식이고, 모든 블록들이 해시 다이제스트를 제공하기 위해 동작될 때까지 계속된다. 다시 말해서, 해시 함수는 단일 연산을 수반하지 않는다. 오히려, 해시 함수에 대한 입력은 블록(예컨대, SHA256에 대해 64 바이트)으로 분할되고, 블록들은 순서대로 프로세싱된다. 미드스테이트는 블록 중 하나 이상을 프로세싱한 후의 내부 상태이다. 각각의 블록이 프로세싱된 후 미드스테이트가 생성된다. n번째 블록을 프로세싱한 후 컴퓨팅된 미드스테이트는 모든 이전 블록에 종속되지만 후속 블록에는 종속되지 않는다. SHA256 해시 함수의 내부 작동의 예는 https://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/에서 찾을 수 있다.
본 개시는, 잠금 스크립트들을 포함하지 않는 제1 주요 트랜잭션의 제1 부분에 해시 함수를 적용함으로써 생성된 미드스테이트를 제공함으로써, 제1 주요 트랜잭션의 후보 트랜잭션 식별자를 생성하기 위한 컴퓨테이션이 제1 데이터 항목(즉, 잠금 스크립트들)을 사용하여 인-스크립트로 계속될 수 있음을 인지한다. 후보 트랜잭션 식별자가 제1 주요 트랜잭션의 실제 트랜잭션 식별자와 매칭하는 경우, 제1 데이터 항목은 제1 주요 트랜잭션의 실제 잠금 스크립트(및 따라서 주요 잠금 스크립트)를 포함해야 한다.
보조 잠금 스크립트는 또한 제2 주요 트랜잭션이 체인 내의 초기 주요 트랜잭션의 트랜잭션 식별자를 포함하도록 강제하도록 구성될 수 있다. 예컨대, 제2 주요 트랜잭션은 제2 출력에 트랜잭션 식별자를 포함하도록 요구될 수 있다. 제1 주요 트랜잭션이 체인의 초기 트랜잭션인 경우, 제2 주요 트랜잭션을 포함하여 각각의 후속 트랜잭션은 제1 주요 트랜잭션의 트랜잭션 식별자를 포함하도록 강제된다. 이러한 예에서, 초기 주요 트랜잭션(예컨대, 제1 주요 트랜잭션)은, 초기 주요 트랜잭션 전체에 기초하기 때문에 그 자신의 트랜잭션 식별자를 포함하지 않을 것이다. 각각의 후속 주요 트랜잭션은 초기 주요 트랜잭션의 트랜잭션 식별자를 포함하도록 강제될 수 있다.
제2 주요 트랜잭션은 앨리스(103a) 또는 다른 당사자에 의해 생성될 수 있다. 위에서 논의된 바와 같이, 제2 주요 트랜잭션은 제1 보조 트랜잭션의 제1 출력을 지출하는 제1 입력을 포함하고, 제1 주요 트랜잭션의 제2 출력을 지출하는 제2 입력을 포함할 수 있다. 제2 주요 트랜잭션은 또한 주요 잠금 스크립트를 포함하는 제1 입력을 포함한다. 제2 주요 트랜잭션은, 예컨대, 다음 주요 트랜잭션의 제2 출력에 의해 잠금 해제될 제2 출력을 포함할 수 있다. 제2 출력은 제2 당사자, 밥(103b)의 공개 키에 잠금될 수 있다. 제2 출력은 초기 주요 트랜잭션의 트랜잭션 식별자를 포함할 수 있다.
앨리스(103a)는 제1 주요 트랜잭션이 하나 이상의 블록체인 노드(104)에 제출되게 하도록 구성된다. 예컨대, 앨리스(103a) 자신이 제1 주요 트랜잭션을 블록체인 네트워크(106)에 전송할 수 있거나, 또는 그녀는 중개자, 예컨대 밥(103b)을 통해 제1 주요 트랜잭션을 블록체인 네트워크에 전송할 수 있다. 유사하게, 앨리스(103a)는 제1 보조 트랜잭션 및/또는 제2 주요 트랜잭션이 하나 이상의 블록체인 노드들(104)에 제출되게 하도록 구성될 수 있다.
일부 예에서, 앨리스(103a)는 제2 주요 트랜잭션을 밥(103b)에 전송할 수 있다. 앨리스(130a)는 또한 머클 증명을 밥(103b)에 전송할 수 있으며, 여기서 머클 증명은 제1 주요 트랜잭션이 블록체인(150) 상에 레코딩되었다는 것을 검증하는데 사용될 수 있다.
지금까지, 제1 주요 트랜잭션이 주로 초기 주요 트랜잭션으로 설명되었다. 그러나, 제1 주요 트랜잭션은 일반적으로 n번째 주요 트랜잭션일 수 있고, 이 경우, 위에서 설명된 제2 주요 트랜잭션은 n+1번째 주요 트랜잭션일 것이다. 유사하게, 이 예에서는 n-1번째 주요 트랜잭션이 존재한다. 이 경우, 앨리스(130a)는 발행 트랜잭션을 생성하는 것을 담당할 수 있거나 담당하지 않을 수 있다.
이 예를 계속하면, 제1 주요 트랜잭션은 이전의 보조 트랜잭션의 제1 출력을 참조하는 제1 입력을 포함할 수 있다. 제1 보조 트랜잭션과 마찬가지로, 이전의 보조 트랜잭션의 제1 출력은 보조 잠금 스크립트(즉, 동일한 정확한 보조 스크립트의 인스턴스)를 포함한다. 이전의 보조 트랜잭션은 이전의 주요 트랜잭션의 제1 출력을 참조하는 입력을 또한 갖는다. 이전의 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함한다. 이 예에서, 이전의 주요 트랜잭션은 초기 주요 트랜잭션, 또는 주요 트랜잭션의 체인 내의 상이한 주요 트랜잭션일 수 있다.
이전의 보조 트랜잭션의 보조 잠금 스크립트는, 제1 보조 트랜잭션의 보조 잠금 스크립트가 제2 주요 트랜잭션에 대해 행하는 것과 같이 제1 주요 트랜잭션에 대해 위에서 설명된 체크를 수행(즉, 동일한 조건을 시행)하도록 구성된다. 예컨대, 제1 주요 트랜잭션이 주요 잠금 스크립트를 포함하도록 강제한다.
이들 예에서, 제2 주요 트랜잭션이 부모 주요 트랜잭션(즉, 제1 주요 트랜잭션) 및 조부모 주요 트랜잭션(즉, 이전의 주요 트랜잭션)을 가질 때, 제1 주요 트랜잭션의 보조 잠금 스크립트는 제2 주요 트랜잭션의 잠금 해제 스크립트가 이전의 주요 트랜잭션의 하나, 일부, 또는 각각의 잠금 스크립트를 포함하는 제4 데이터 항목을 포함하도록 강제하도록 구성된다. 이것은 주요 잠금 스크립트를 포함할 것이다. 보조 잠금 스크립트는, 제2 주요 트랜잭션의 잠금 해제 스크립트에 포함된 제2 메시지(즉, 제2 주요 트랜잭션에 기초하여 생성된 메시지) 및 제4 데이터 항목을 사용하여, 제2 주요 트랜잭션의 제1 출력에 포함된 주요 잠금 스크립트가 이전의 주요 트랜잭션에 포함된 주요 잠금 스크립트와 동일하다는 것을 검증한다. 이것은, 동일한 주요 잠금 스크립트가 하나의 주요 트랜잭션으로부터 다음 주요 트랜잭션으로, 그리고 다음 주요 트랜잭션으로 전달된다는 것을 검증한다. 다시 말해서, 이것은, 이전의 주요 트랜잭션의 주요 잠금 스크립트가 실행되었다는 것을 증명한다.
해시 함수(예컨대, SHA256)를 이전의 주요 트랜잭션에 적용함으로써 생성된 미드스테이트는 제4 데이터 항목이 정확하다는 것을 검증하는 데 사용될 수 있다. 즉, 제4 데이터 항목(즉, 이전의 주요 트랜잭션의 잠금 스크립트들을 포함하는 데이터 항목)이 정확하다는 것을 검증하기 위한 추가적인 검증이 보조 잠금 스크립트에 의해 수행될 수 있다. 이전의 주요 트랜잭션은, 트랜잭션을 해시 함수, 예컨대, SHA256으로 해싱함으로써 생성되는 트랜잭션 식별자를 갖거나 적어도 이와 연관된다. 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는 이전의 주요 트랜잭션에 해시 함수를 적용한 것의 미드스테이트를 포함하는 제5 데이터 항목을 포함할 수 있다. 보조 잠금 스크립트는 제4 데이터 항목 및 제5 데이터 항목을 이용하여 이전의 주요 트랜잭션의 후보 트랜잭션 식별자를 생성할 수 있다. 후보 트랜잭션 식별자가 이전의 주요 트랜잭션의 실제 트랜잭션 식별자와 매칭하는 경우, 제4 데이터 항목은 이전의 주요 트랜잭션의 실제 잠금 스크립트(및 따라서 주요 잠금 스크립트)를 포함해야 한다.
제1 주요 트랜잭션은 이전의 주요 트랜잭션의 제2 출력을 지출하는 제2 입력을 포함할 수 있다. 조건은 이전의 보조 잠금 스크립트에 포함된 보조 잠금 스크립트에 의해 시행될 수 있다.
이전의 주요 트랜잭션 및/또는 이전의 보조 트랜잭션은 앨리스(103a), 또는 상이한 당사자, 예컨대, 밥(103b) 또는 찰리(103c)에 의해 생성될 수 있다. 유사하게, 위의 설명이 앨리스(103a)가 제1 주요 트랜잭션, 제1 보조 트랜잭션 및 제2 주요 트랜잭션을 생성한다는 관점에서 일반적으로 설명되었지만, 이들 트랜잭션들 중 임의의 하나 이상은 그 대신에 밥(103b) 또는 찰리(103c)에 의해 생성될 수 있다.
당사자, 예컨대, 밥(103b)은 주요 트랜잭션이 정확하게 생성되었다는 것을 검증할 의도로 주요 트랜잭션을 획득할 수 있다. 예컨대, 밥(103b)은 앨리스(103a)로부터 제2 주요 트랜잭션을 획득할 수 있다. 제2 주요 트랜잭션은 위에서 설명되었다. 간략한 요약으로서, 제2 주요 트랜잭션은 주요 잠금 스크립트를 포함하는 제1 출력, 및 적어도 제2 메시지(제2 주요 트랜잭션에 기초하여 생성됨)를 포함하는 제1 입력(즉, 제1 입력의 잠금 해제 스크립트), 및 제1 주요 트랜잭션의 하나, 일부, 또는 각각의 잠금 스크립트를 포함하는 제1 데이터 항목을 갖는다. 잠금 스크립트 중 하나는 주요 잠금 스크립트를 포함한다. 다음의 예에서, 제2 주요 트랜잭션의 제1 입력은 또한 제1 보조 트랜잭션을 포함한다.
밥(103b)은 제1 주요 트랜잭션이 블록체인(150) 상에 레코딩되었고, 따라서 유효한 트랜잭션임을 검증한다. 이를 행하기 위한 하나의 옵션은, 후보 블록 헤더를 컴퓨팅하기 위해 제1 주요 트랜잭션의 트랜잭션 식별자와 함께 사용될 수 있는 머클 증명(Merkle proof)(즉, 해시들의 세트)을 획득하는 것이다. 후보 블록 헤더가 블록체인 블록(151)의 블록 헤더와 매칭하면, 밥(103b)은 블록이 제1 주요 트랜잭션을 포함한다는 것을 확신할 수 있다. 다른 옵션은 블록체인 노드(104)로부터 확인을 요청하는 것이다.
위에서 논의된 바와 같이, 제2 주요 트랜잭션의 잠금 해제 스크립트는 제3 데이터 항목(제1 주요 트랜잭션의 일부에 적용된 해시 함수의 미드스테이트)을 포함할 수 있다. 밥(103b)은 제1 데이터 항목 및 제3 데이터 항목을 사용하여 제1 주요 트랜잭션의 후보 트랜잭션 식별자를 생성하고, 후보 트랜잭션 식별자를 사용하여 머클 증명을 수행할 수 있다.
밥(103b)은 또한, 제1 보조 트랜잭션이 보조 잠금 스크립트를 포함할 것을 요구하도록 주요 잠금 스크립트가 구성된다는 의미에서, 제1 주요 트랜잭션에 포함된 주요 잠금 스크립트가 정확하다는 것을 검증한다. 밥(103b)은 주요 잠금 스크립트를 명시적으로 검증할 수 있고, 즉, 그것이 정확한 함수들 등을 포함한다는 것을 체크할 수 있다. 보다 효율적인 옵션으로서, 위에서 논의된 바와 같이, 주요 잠금 스크립트는 해시 퍼즐의 일부로서 보조 잠금 스크립트의 해시를 포함할 수 있다. 따라서, 해시 퍼즐이 해결되기 위해서는, 보조 트랜잭션이 보조 잠금 스크립트를 포함해야 한다. 따라서, 밥(103b)은 주요 잠금 스크립트가 보조 잠금 스크립트의 해시를 포함한다는 것을 검증할 수 있다. 예컨대, 해시는 밥(103b)에 미리 알려질 수 있고, 예컨대, 앨리스(103a) 또는 초기 주요 트랜잭션을 생성한 당사자에 의해 전송될 수 있다.
옵션 체크로서, 밥(103a)은 제2 주요 트랜잭션이 제1 주요 트랜잭션일 수 있는 주요 트랜잭션들의 체인 내의 초기 트랜잭션의 트랜잭션 식별자를 (예컨대, 제2 출력에) 포함한다는 것을 검증할 수 있다.
검증들을 수행하였다면, 밥(103b)은 제2 보조 트랜잭션 및 제3 주요 트랜잭션을 생성할 수 있다. 예컨대, 이것은 토큰을 찰리(103c)에 이전하는 데 사용될 수 있다. 제2 보조 트랜잭션은 제1 보조 트랜잭션과 동일한 포맷을 취한다. 제2 보조 트랜잭션은 제2 주요 트랜잭션의 제1 출력, 즉 주요 잠금 스크립트를 포함하는 출력을 지출하는 제1 입력을 갖는다. 이를 행하기 위해, 그것은 제2 보조 트랜잭션의 일부 또는 모든 필드에 기초하여 생성된 제3 메시지를 포함한다. 제2 보조 트랜잭션은 보조 잠금 스크립트를 포함하는 제1 입력을 갖는다. 밥(103b)은 직접 또는 다른 당사자를 통해 블록체인 네트워크(106)에 제2 보조 트랜잭션을 전송한다.
밥(103b)은 또한 제3 주요 트랜잭션을 생성한다. 제3 주요 트랜잭션은 제2 주요 트랜잭션과 유사하다. 그것은 제2 주요 트랜잭션의 제1 출력을 지출하는 제1 입력을 포함한다. 제3 주요 트랜잭션의 제1 입력은 제3 주요 트랜잭션의 일부 또는 모든 필드에 기초하여 생성된 제3 메시지를 포함한다. 이 예에서, 제1 입력은 제2 보조 트랜잭션, 제1 데이터 항목(즉, 제1 주요 트랜잭션의 각각의 잠금 스크립트)을 포함하고, 제6 데이터 항목은 제2 주요 트랜잭션의 하나, 일부 또는 각각의 잠금 스크립트를 포함한다. 제3 주요 트랜잭션은 찰리(103c)의 공개 키에 잠긴 제2 출력을 포함할 수 있다. 제3 주요 트랜잭션은 제2 주요 트랜잭션의 제2 출력을 지출하는 제2 입력을 포함할 수 있다. 밥(103b)은 직접 또는 다른 당사자를 통해 블록체인 네트워크(106)에 제2 주요 트랜잭션을 전송한다.
5. 블록체인 노드 유효성 검증된 토큰
본 섹션은 위에서 설명된 실시예들의 구체적인 예를 설명하였다. 본 섹션에 제시된 특징들 중 일부는 선택적이라는 것을 인식해야 한다. 이 예는 트랜잭션이 토큰 트랜잭션이고, 즉 트랜잭션이 토큰 관련 데이터를 포함하는 사용 사례에 초점을 둔다. 이는 단지 예시적인 사용 사례이며 일반적으로 이는 발행까지 모든 트랜잭션을 다시 검증할 필요 없이 증명 가능한 트랜잭션의 체인을 필요로 하는 다른 애플리케이션에 사용될 수 있다.
본 섹션은 4개의 요건을 충족시키는 토큰 프로토콜에 대해 설명한다.
1. 토큰 트랜잭션의 검증자는 토큰의 발행 트랜잭션까지 완전히 다시 추적할 필요가 없으며, 따라서 효율성을 개선한다.
2. 토큰이 발행된 후에, 2명의 사용자 간에 토큰의 이전에 있어서 신뢰할 수 없는 어떠한 제3 당사자도 수반되지 않고, 따라서 보안성 및 유용성이 향상된다.
3. 토큰 트랜잭션의 크기는 일정하다. 이는 과거 트랜잭션의 수와 독립적이고 따라서 저장성이 향상된다.
4. 이 솔루션은 리플레이 공격에 취약하지 않고, 즉, 토큰을 복제할 수 없고, 따라서 보안이 향상된다.
검증자 또는 제3 당사자가 어떠한 토큰 규칙을 실행할 필요 없이 인-스크립트로 시행되는 토큰은 '채굴자 유효성 검증된' 토큰 또는 '블록체인 노드 유효성 검증된' 토큰으로 알려져 있다. 본 출원은, 본 출원인이 아는 바로는, 블록체인(150)에 대한 제1 채굴자 검증된 토큰 프로토콜을 개시한다.
프로토콜은 다음 구축 블록을 사용한다:
● 트랜잭션의 체인 내의 조부모의 2개의 잠금 스크립트 각각에서 동일한 작업코드가 나타났고 이러한 잠금 스크립트가 실행되었음을 검증하는 스크립트 스니펫(script snippet),
● 트랜잭션의 체인의 다음 자식 잠금 스크립트 둘 모두가 동일한 작업코드를 포함한다는 것을 시행하는 스크립트 스니펫,
● 부분 SHA256을 구현하는 스크립트 스니펫,
● (자기-참조(self-reference)를 회피하기 위해) 하나의 토큰 트랜잭션으로부터 자신의 지출 트랜잭션으로 검증 데이터를 전달하는 보조 트랜잭션, 및
● 리플레이할 수 없는 고유한 토큰 ID(UTID). 간략화를 위해, 이것이 발행 트랜잭션 ID라고 가정한다.
프로토콜은 솔루션의 일부분을 한 번에 설명하면서 아래에 단계별로 제시된다. 솔루션의 각각의 반복은 솔루션의 다음 반복에 의해 해결될 문제를 생성하고, 최종적으로 완전한 솔루션으로 끝난다. 우리는 지출 트랜잭션 를 관점으로 취하고 발행 트랜잭션까지 완전히 다시 추적하지 않고서 을 유효한 토큰 트랜잭션으로서 결정하는 방법을 설명한다. 우리는 다음 용어를 사용하여 과 관련된 트랜잭션을 지칭한다:
● 부모 트랜잭션 : 의 제2 입력에 의해 참조된 트랜잭션,
● 조부모 트랜잭션 : 의 제2 입력에 의해 참조된 트랜잭션, 및
● 보조 트랜잭션 : 해당 입력에서 의 제1 출력을 참조하고 의 제1 입력에 의해 참조되는 트랜잭션.
이러한 트랜잭션 및 그들의 관계가 도 4에 도시된다. 우리는 조부모, 부모, 및 보조 트랜잭션이 모두 채굴자에게 수락되었다고 가정한다. 지출 트랜잭션 는 마지막으로 본 트랜잭션이다.
5.1 트랜잭션 구조
프로토콜은 토큰 체인에 있는 최신의 3개의 트랜잭션을 고려한다. 각각의 트랜잭션에 대해 보조 트랜잭션이 존재한다. 보조 트랜잭션은 트랜잭션 팽창 및 자기 참조를 피하기 위해 필요하다. 트랜잭션 구조의 개략적 표현이 도 4에 제공되며, 트랜잭션의 체인은 제2 입력 및 출력의 체인으로서 정의된다. 이는 아래에서 더 자세히 설명된다.
트랜잭션의 직렬화에서는, 모든 입력이 먼저 나타나고 그런 다음 모든 출력이 나타난다. 입력 및 출력은 자신의 인덱스의 순서로 나타난다. 다음 논의는 잠금 해제 및 잠금 스크립트에만 중점을 두고 트랜잭션 인코딩으로부터 추출된다. 잠금 해제 스크립트를 참조할 때, 우리는 또한 해당 잠금 해제 스크립트에 대응하여 참조되는 아웃포인트를 참조할 수 있다는 것에 유의한다. 이는 함수에 대한 '입력'과의 혼동을 방지하기 위함이다.
우리는 NFT(non-fungible token)의 표현과 같은 트랜잭션의 단일 체인을 고려한다. 우리는 어떠한 토큰의 분할 및 결합도 존재하지 않고, 트랜잭션 DAG(directed acyclic graph)를 생성한다고 가정한다. 우리는 또한 추가될 수 있는 어떠한 다른 입력과 출력도 없다고 가정한다.
5.2 표기법
우리는 OP 프리픽스를 갖는 미리 정의된 작업코드 OP_CODE 및 프리픽스가 없는 미리 정의된 작업코드의 결합 CODE를 나타낸다. 공개 키와 같이 변수에 의존하는 작업코드 또는 작업코드의 결합은 괄호를 이용하여 CODE(PK)로 표시될 것이다. 우리는 작업코드의 결합의 구성을 CODE1 + CODE2로 나타낸다.
5.3 트랜잭션 및 그의 파생물의 푸시
의 잠금 스크립트에서 PUSHTX로 라벨링된 작업코드들의 결합은, 입력으로서 트랜잭션 의 시그해시 프리이미지 이 주어지면 참(TRUE)으로 평가된다. 내부를 들여다 보면(under the hood), 작업코드는 시그해시 프리이미지 에 대한 서명을 구성 및 검증한다. 최종 작업코드 OP_CHECKSIG는, 대응하는 공개 키를 갖는 서명이 입력되면 참으로 평가되며, 여기서 서명은 트랜잭션 자체로부터 추출된 트랜잭션 메시지 위에 있다.
트랜잭션 메시지 의 다양한 필드로부터 구성된다. 특히, 우리가 관심을 가질 필드는 다음과 같다:
1. 의 잠금 스크립트,
2. 아웃포인트 , ; 및,
3. 의 잠금 스크립트.
위첨자 A는 트랜잭션이 보조 트랜잭션임을 나타낸다.
PUSHTX를 포함한다는 것의 암시는, 현재 트랜잭션 시그해시 프리이미지가 증명 가능하게 스택 상에 있다는 것이다. 이것은, 이러한 필드 중 임의의 필드가 작업코드의 특정 결합 또는 일련 번호를 포함하는 것과 같이 필드에 대해 시행되는 조건을 가질 수 있다는 것을 의미한다. 이러한 조건이 충족되지 않으면, 지출 트랜잭션은 유효하지 않다.
인 경우, 의 잠금 스크립트에서 작업코드 PUSHTXPARENT의 결합은, 입력으로서 (로부터 취해짐)이 주어지면 참으로 평가되며, 여기서 dSHA256은 이중 SHA256 해시 함수이다. 내부를 들여다 보면, 작업코드들은 직렬화된 트랜잭션 의 해시를 컴퓨팅하고, 그 결과를 과 비교하며, 여기서 트랜잭션 ID는 PUSHTX에 입력된 시그해시 프리이미지의 아웃포인트로부터 추출되었다. 이것은, 2개의 값이 동일하면 참으로 평가된다. 그것이 실제로 스택에 푸시되는 현재 트랜잭션의 부모 트랜잭션이라는 것을 보장하기 위해, PUSHTXPARENT는 PUSHTX를 포함하여 이로부터 아웃포인트를 추출한다. PUSHTX가 모든 아웃포인트를 포함하기 때문에, 임의의 부모 트랜잭션이 자신이 나타나는 입력의 아웃포인트에 대응하지 않을지라도, 임의의 부모 트랜잭션이 푸시될 수 있다.
직렬화된 트랜잭션 메시지 은 다양한 필드로부터 구성된다. 우리가 특히 관심을 가질 필드는 다음과 같다:
1. 의 잠금 스크립트(들); 및
2. 아웃포인트 .
PUSHTX와 결합하여 PUSHTXPARENT를 포함한다는 것의 암시는, 직렬화된 부모 트랜잭션의 임의의 필드가 위와 같이 자신에게 시행되는 조건을 가질 수 있다는 것이다. 유사하게, 인 경우, 의 잠금 스크립트에서 작업코드 PUSHTXGRANDPARENT의 결합은, 입력으로서 (으로부터의) 이 주어지면 참으로 평가된다. PUSHTXPARENT 및 PUSHTX에서와 같이, 은, 이것이 실제로 조부모 트랜잭션임을 보장하기 위해 PUSHTXPARENT에 제공되는 입력이다. 링크가 PUSHTXPARENT, PUSHTXGRANDPARENT 등을 통해 반복적으로 이루어진다면, 이것은 임의의 조상(ancestor) 트랜잭션을 푸시하기 위해 반복될 수 있다.
5.4 SHA256 해시 함수
해시 함수는 임의적인 크기 m의 데이터를 고정된 크기의 데이터에 매핑한다. 입력 데이터가 447 비트보다 긴 경우, SHA256 해시 함수의 실행은 구성을 사용하여 압축 함수 에 의해 데이터를 반복해서 프로세싱한다. 압축 함수는 다음의 방식으로 SHA256(m)을 컴퓨팅하는 데 사용된다.
1. 패딩된 프리이미지 를 컴퓨팅한다, 여기서 는 길이가 512 비트의 배수임을 보장하는 메시지에 대한 패딩이다.
2. 에 대해, PI를 크기 512 비트의 개의 블록으로 분할한다.
3. 를 컴퓨팅한다, 여기서 IV는 미리 정의된 초기화 벡터이다.
4. 를 컴퓨팅한다.
5. 전체 프리이미지가 프로세싱될 때까지, 512 비트의 각각의 j번째 블록 으로 계속한다.
6. 를 출력한다.
위의 단계들의 컴퓨테이션은 j번째 반복까지 실행되고 중단될 수 있다. 나머지 프리이미지 및 미드스테이트 가 저장될 수 있고, 컴퓨테이션은 나중에 계속된다. 추가적인 '부분 SHA' 컴퓨테이션은 SHA256(m)과 동일한 것을 출력하는 로 표기될 것이다.
5.5 작업코드의 부분 SHA256
처음 j번째 반복의 컴퓨테이션은 오프 체인(off chain)에서 실행될 것이다. 최종 개의 반복은 스크립트로 실행되어, 작업코드에서 컴퓨테이션의 구현을 요구할 것이다. 이러한 작업코드 PARTIALSHA256은, 인 경우, 입력으로 h 및 나머지 프리이미지 PPI 및 미드스테이트 mid가 주어지면 참을 리턴할 것이다. 내부를 들여다 보면, 작업코드들은 입력으로서 PPI 및 mid가 주어지면 SHA256 해시 함수의 나머지 반복들을 컴퓨팅한다. 이것의 결과는 h와 비교된다. 그들이 동일하면, 이러한 작업코드의 세트는 참을 리턴한다.
본 경우에, 우리는, 해싱되고 주어진 TxID와 비교되는 직렬화된 트랜잭션의 부분 SHA256을 컴퓨팅할 것이다. 언급된 바와 같이, 입력들은 직렬화된 트랜잭션에서 먼저 나타난다. 이것은, 우리가 PUSHTXPARENT 또는 PUSHTXGRANDPARENT에 대한 입력으로서 요구되는 잠금 해제 스크립트에서 직렬화된 트랜잭션의 제1 입력을 수정(redact)하기 위해 부분 SHA256 컴퓨테이션을 사용할 수 있다는 것을 의미한다.
우리는 부분 SHA256을 사용하여 직렬화된 트랜잭션의 제1 잠금 해제 스크립트를 수정한다. 우리는 제1 입력의 끝까지 위의 표기법 ― SHA256 해시 함수의 처음 j번째 반복의 컴퓨테이션을 의미하기 위해 를 작성함 ― 을 이용할 것이다. 다시 말해서, 이러한 방식으로 이를 작성하는 것은 이 단지 512 비트(및 SHA256 해시 컴퓨테이션의 첫 번째 반복)라는 것을 의미하지 않는다. 이는 더 길어질 가능성이 가장 높을 것이다.
5.6. 문제 1: 실행 및 전파의 증명
우리가 고려하는 첫 번째 문제는 소위 '백-투-제네시스(back-to-genesis)' 문제이다. 이것은, 토큰의 유효성 검증자가 자신이 수신한 토큰 트랜잭션이 발행 트랜잭션으로 다시 이어지는 트랜잭션의 체인의 일부라는 증명을 원할 때 발생한다.
PUSHTX를 자체적으로 사용하는 것은 발행자가 자신의 자식, 손자 등 중 임의의 것을 포함하여 임의의 자식 트랜잭션이 특정 포맷이 되도록 시행하는 것을 가능하게 한다. 예컨대, 그들의 각각의 향후 트랜잭션에 일련 번호가 포함되는 것을 요구할 수 있다. 그러나, 유효성 검증자는 발행 트랜잭션까지 다시 모든 각각의 트랜잭션을 여전히 명시적으로 유효성 검증해야 한다. 이것은 각각의 이전에서 증명 길이와 유효성 검증 시간을 증가시킨다.
다시 제네시스까지 각각의 트랜잭션을 유효성 검증할 필요를 피하기 위해, 신뢰할 수 있는 토큰 프로세서가 각각의 이전을 입증(witness)하는 것이 가능하다. 이것은 백-투-제네시스 문제를 해결할 수 있지만, 성능 면에서 병목 현상 및 보안 위험을 도입하여 유용성을 감소시킨다. 이는 또한 통신 및 인프라구조 비용을 도입한다. 추가적으로, 이것은 채굴자 유효성 검증된 토큰을 목표로 하는 목적을 무산시킨다. 신뢰할 수 있는 토큰 프로세서는 물론 전체 이전을 프로세싱하여, 스크립트 복잡성 및 PUSHTX의 비용을 제거할 수 있다.
도 5에 도시된 바와 같이, 하나의 입력과 하나의 출력을 포함하는 간단한 트랜잭션의 체인이 고려된다.
우리는, 의 모든(이 경우에 하나의) 잠금 스크립트가 동일한 경우, 즉, 의 제1 잠금 스크립트가 의 제1 잠금 스크립트와 동일한 경우, 입력으로서 시그해시 프리이미지 이 주어지면 참으로 평가되는 PROOFOFEXECUTION을 정의한다. 우리는, 작업코드에서 동일한 함수가 에서 실행되는 것을 보장하기 위해 우리가 스크립트 스니펫을 원할 때 이러한 실행 증명을 라벨링한다. 잠금 스크립트가 공개 키와 같은 변수를 포함하면, 이는 동일하게 유지되리라 예상되지 않고 무시된다. 작업코드 PROOFOFEXECUTION는 다음을 포함한다:
1. 입력으로서 을 취하고 이 트랜잭션 의 시그해시 프리이미지인 경우 참을 출력하는 PUSHTX.
2. 으로부터 아웃포인트 을 취하고, 의 해시 프리이미지인 경우 참을 출력하는 PUSHTXPARENT.
3. 으로부터 을 취하고, 의 해시 프리이미지인 경우 참을 출력하는 PUSHTXGRANDPARENT.
4. 로부터의 의 작업코드와 으로부터의 의 작업코드를 비교하고, 의 잠금 스크립트가 동일한 작업코드를 포함하는 경우 참을 출력하는 작업코드.
5. 부모 및 조부모 트랜잭션에 하나의 입력과 하나의 출력만이 존재하는 것을 보장하는 작업코드.
따라서, PROOFOFEXECUTION을 포함하는 스크립트는 에 의해 잠금 해제된다. 우리는, 의 모든(이 경우에 하나의) 잠금 스크립트가 동일한 경우, 즉, 의 제1 잠금 스크립트가 의 제1 잠금 스크립트와 동일한 경우, 입력으로서 시그해시 프리이미지 이 주어지면 참으로 평가되는 PROOFOFPROPAGATION을 정의하고, 이러한 식이다. 우리는, 작업코드에서 동일한 함수가 에서 실행되고 에서 실행될 것이라는 것을 보장하기 위해 우리가 스크립트 스니펫을 원할 때 이러한 전파 증명을 라벨링한다. PROOFOFEXECUTION에서와 같이, 잠금 스크립트에 공개 키와 같은 변수를 포함하면, 이는 무시될 것이다. 작업코드 PROOFOFPROPAGATION는 다음을 포함한다:
1. 입력으로서 을 취하고 이 트랜잭션 의 시그해시 프리이미지인 경우 참을 출력하는 PUSHTX.
2. 으로부터 아웃포인트 을 취하고, 의 해시 프리이미지인 경우 참을 출력하는 PUSHTXPARENT.
3. 으로부터의 의 작업코드와 로부터의 의 작업코드를 비교하고, 제1 잠금 스크립트의 작업코드가 동일한 경우 참을 출력하는 작업코드.
4. 자식 트랜잭션에 하나의 입력과 하나의 출력만이 존재하는 것을 보장하는 작업코드.
따라서, PROOFOFPROPAGATION을 포함하는 스크립트는 에 의해 잠금 해제된다.
우리는 작업코드의 세트 을 다음과 같이 정의하고,
여기서 PROOFOFEXECUTION은 n≥3인 경우 실행된다. 우리는 이 사례가 나중에 어떻게 포착되는지를 정확히 상세히 설명한다.
모든 n≥3에 대해 의 잠금 스크립트 이면, 잠금 해제 스크립트는 이고, 여기서:
= 의 시그해시 프리이미지,
= 직렬화된 부모 트랜잭션; 및
= 직렬화 조부모 트랜잭션.
n=2인 경우, 잠금 해제 스크립트는 이다. 이 발행이므로, Tx0에는 어떠한 관련 잠금 스크립트도 없다. 은 이 잠금 스크립트가 나타나는 첫 번째 트랜잭션이다. 의 작업코드 의 결합은 잠금 스크립트 의 작업코드 이 또한 에 포함된다는 것을 증명한다는 것이 유의된다.
PROOFOFEXECUTION 및 PROOFOFPROPAGATION 둘 모두는 의 존재를 확인하고, 이는 또한 자신을 포함한다. 다시 말해서, 이러한 작업코드의 세트 둘 모두 포함하는 잠금 스크립트는 작업코드의 세트 둘 모두에 대한 입력의 일부이다.
우리는, 이 위의 작업코드를 포함한다면 발행 트랜잭션 에 링크되어야 한다는 것을 귀납법(induction)에 의해 증명한다.
명제(proposition):
각각 적어도 하나의 입력과 하나의 출력을 갖는 로부터 까지의 트랜잭션들의 세트가 고려된다. 다음 조건을 충족시키는 이 제공된다:
의 입력들 중 하나는 위에서 정의된 바와 같이 잠금 스크립트 을 포함하는 로부터의 출력을 지출하고, 그리고
은 채굴자에게 수락되고,
그런 다음 이 발행 트랜잭션 에 링크된다.
증명:
우리는 귀납법에 의해 그 주장을 증명한다. n=2일 때, 이 채굴자에 의해 수락되면, 의 아웃포인트에 의해 에 링크된다는 것이 명백하다.
기본 사례 n=3:
는 잠금 스크립트 을 포함하고, 그런 다음 잠금 해제 스크립트 에 있다. 이 채굴자에 의해 수락되면, 이는 의 지출 조건에 의해 의 손자여야 한다. 따라서, 이는 발행 트랜잭션에 링크된다.
n번째 사례:
n번째 사례가 참이라고 가정된다.
n+1번째 케이스:
잠금 스크립트 을 포함하는 출력을 갖는 트랜잭션 이 주어지면, 우리는, 이 채굴자에 의해 수락되는 경우, 으로 출력을 지출하는 트랜잭션 이 트랜잭션의 체인을 통해 발행 트랜잭션 에 링크된다는 것을 증명한다.
우리가 3개의 조건을 갖는 경우:
,
의 출력을 지출하고, 그리고
은 채굴자에 의해 수락되면,
그러면, 출력을 잠금 해제하기 위해 이어야 한다. 이므로, PROOFOFEXECUTION으로 인해 이고, PROOFPROPOGATION으로 인해 이어야 한다. 따라서 는:
● 잠금 스크립트 을 포함하고,
에 의해 지출되고(링크는 을 지출하는 데 요구됨); 그리고
이 채굴자에 의해 수락됨(이 수락되는 경우).
따라서, 에 링크된다. 우리는 또한 의 자식이고 따라서 에 링크된다는 것을 허용한다. 따라서, 에 링크된다.
우리는, 체인 내의 각각의 트랜잭션이, 도 6에 도시된 바와 같이, 이전의 모든 트랜잭션을 포함하여, 트랜잭션 팽창 문제를 발생시킨다는 것을 증명한다.
명제:
위의 주장을 충족시키는 트랜잭션들의 세트 내지 이 고려된다. n번째 트랜잭션 은 다시 발행 까지의 모든 트랜잭션을 포함한다.
증명:
트랜잭션 의 잠금 해제 스크립트는, 의 잠금 스크립트에서 작업코드 에 의해 요구되는 바와 같이, 자신의 부모 및 조부모 트랜잭션을 포함한다. 모든 n≥3에 대해, 이것은 참이다. 따라서, 주어진 에 대해, 자신의 부모 및 조부모는 또한 그들 개개의 부모 및 조부모를 포함한다. 이것은 이러한 트랜잭션 각각에 대해 참이며, 따라서 은 다시 발행까지의 모든 트랜잭션을 포함한다.
5.7. 문제 2: 부분 SHA256 해시 함수
문제 1을 해결함에 있어서, 우리는 PROOFOFPROPAGATION 및 PROOFOFEXECUTION을 실행하기 위해 부모 및 조부모 트랜잭션으로부터 에 대한 입력에서 , 의 아웃포인트의 트랜잭션 ID 만이 필요하다. 부모 및 조부모 트랜잭션의 어떠한 잠금 해제 스크립트도 필요하지 않다. 우리는 트랜잭션의 이러한 부분을 어떻게 수정할 것인지를 고려한다.
도 7에 도시된 바와 같이, 2개의 입력과 2개의 출력을 갖는 트랜잭션의 체인이 고려된다. 추가적인 입력 및 출력은 P2PKH(PK) 스크립트에 대응한다. 우리는 제1 잠금 해제 스크립트가 수정되고 PROOFOFEXECUTION이 제2 아웃포인트를 사용하는 조부모 트랜잭션을 계속 활용할 수 있도록 하기 위해 제2 입력과 출력을 도입한다. 다음 솔루션을 설명한 후에, 우리는 n번째 트랜잭션이 다시 발행까지의 모든 트랜잭션을 더 이상 포함하지 않는 이유를 명시적으로 보여줄 것이다. 상위 레벨에서, 이것은, 이전의 트랜잭션에 관한 정보를 전달하는 트랜잭션의 일부인 잠금 해제 스크립트 데이터가 전파되지 않기 때문이다. 우리는, (TxID와 비교하기 위해) 트랜잭션의 해시를 오프-체인으로 컴퓨팅함으로써 데이터가 전파되는 것을 방지한다.
우리는, 입력으로서 의 제2 아웃포인트로부터의 , 및 이 주어지면 인 경우, 참으로 평가되는 PUSHTXPARTIALPARENT를 정의한다.
우리는, 입력으로서 제2 아웃포인트 로부터의 , , 이 주어지면, 인 경우, 참으로 평가되는 PUSHTXPARTIALGRANDPARENT를 정의한다.
위에서 설명된 바와 같이, 부분 SHA256 컴퓨테이션은 이들 2개의 작업코드에서 부모 및 조부모 트랜잭션의 제1 입력의 수정을 각각 가능하게 한다. 따라서, 입력 에 나타나지 않는다. 그러면 은 제2 잠금 해제 스크립트 및 부모 트랜잭션의 양자의 잠금 스크립트를 포함한다. 는 조부모 트랜잭션의 2개의 잠금 스크립트를 포함한다. 부모 트랜잭션의 제2 잠금 해제 스크립트는 조부모 트랜잭션 ID의 추출을 가능하게 한다. 잠금 스크립트는 PROOFOFPROPAGATION 및 PROOFOFEXECUTION의 실행에 대한 입력으로서 추출될 것이다.
우리는, 각각 PUSHTXPARENT 및 PUSHTXGRANDPARENT 대신에 PUSHTXPARTIALPARENT 및 PUSHTXPARTIALGRANDPARENT를 포함하기 위해 PROOFOFPROPAGATION 및 PROOFOFEXECUTION을 재정의한다. 재정의는, 스크립트가 이제 이전과 같이 대신에 또는 로부터 필요한 잠금 스크립트의 작업코드를 추출한다는 것을 의미한다. 따라서 PROOFOFEXECUTION을 포함하는 스크립트는 에 의해 잠금 해제되고, PROOFOFPROPAGATION을 포함하는 스크립트는 에 의해 잠금 해제된다.
추가적으로, PROOFOFPROPAGATION 및 PROOFOFEXECUTION은, 잠금 스크립트의 단 하나의 세트가 아닌 잠금 스크립트의 다수의 세트의 작업코드를 비교하는 작업코드를 포함하도록 재정의된다. 이전과 같이, 이는 에서의 제1 잠금 스크립트의 작업코드들과 또는 에서의 제1 잠금 스크립트의 작업코드들을 각각 비교한다. 이는 이제 또한 이러한 트랜잭션의 제2 잠금 스크립트의 세트를 비교한다. 잠금 스크립트의 제2 세트가 동일한 작업코드를 포함하고 잠금 스크립트의 제1 세트가 동일한 작업코드를 포함하면, 이 작업코드는 참을 리턴한다. 이것은 또한, 각각의 트랜잭션에서 하나의 입력과 출력을 체크하기보다는, 그들이 이제 각각의 트랜잭션에서 2개의 입력과 출력만을 있음을 보증한다는 것을 암시한다. 이러한 작업코드에 대한 임의의 추가 참조는 이러한 새로운 정의를 참조한다.
재정의된 작업코드를 사용한 작업코드의 세트를 인 것으로 정의한다.
우리는 모든 n에 대해 로 잠금 해제될 잠금 스크립트 를 정의하며, 여기서
= 의 시그해시 프리이미지,
,
,
,
.
각각의 잠금 해제 스크립트는 고정 길이를 갖는 것으로 증명될 이러한 5개의 구성요소만을 포함한다. 팽창으로 이어질 잠금 해제 스크립트 은 부분 SHA256 컴퓨테이션으로 수정되었다.
명제:
이 2개의 입력 및 2개의 출력을 갖는 위에서 정의된 트랜잭션 체인으로부터의 트랜잭션이라고 하면, 의 크기는 모든 n에 대해 상수 미만, 즉, 이다.
증명:
우리는 간단히 이 n에 의존하지 않는다는 것을 보여주었다. 직렬화된 트랜잭션 및 시그해시 프리이미지에서, 대부분의 필드는 자신의 크기에 대한 잘 정의된 경계를 갖는다.
시그해시 프리이미지:
잠금 및 잠금 해제 스크립트를 제외하고, 우리는 다음의 상한을 갖는다.
바이트
우리가 솔루션에서 잠금 스크립트를 검사해야 하기 때문에, 최종 32 바이트(이는 해시 함수의 출력임)는 자신의 프리이미지로 대체될 필요가 있을 것이라는 것이 유의된다. 이것은 잠금 스크립트를 제외하고 상한이 다음과 같다는 것을 의미한다.
바이트
여기서 vout은 우리의 사례에서 값 2를 갖는다. 9는 VarInt이고 그래서 1 바이트 내지 9 바이트 사이 어딘가에 있을 수 있다. 우리는 현재 트랜잭션 에서 지출되는 잠금 스크립트(부모 잠금 스크립트 ) 및 잠금 스크립트를 제외했다.
명시적으로 잠금 해제 및 잠금 스크립트의 크기는 아래 표에 제공된다.
잠금 및 잠금 해제 스크립트를 제외하고, 직렬화된 트랜잭션에서, 우리는 바이트의 상한을 갖고,
여기서, vin 및 vout은 각각 값 2를 갖는 입력 및 출력의 수이다. 9 바이트 각각이 VarInt 필드를 나타낸다는 것이 유의된다. 이들은 1 내지 9 바이트 사이의 어딘가에 있을 수 있고, 각각의 입력 또는 출력에 대해 상이할 수 있다.
잠금 및 잠금 해제 스크립트를 포함하여, 위의 표를 사용하여, 우리는 직렬화된 트랜잭션의 크기가 바이트임을 허용한다.
트랜잭션 의 모든 필드는 스크립트 의 길이 및 부모 및 조부모 트랜잭션의 미드스테이트의 길이에 의존하며, 이들 둘 모두는 길이가 일정하다. 따라서, 우리는 n과 독립적인 트랜잭션 크기에 대한 상한을 갖는다.
주의: 잠금 해제 스크립트에서 가 4번 나타나는 일부 복제가 있다. 이것은 한 번 이를 입력으로서 취하고 데이터를 복제함으로써 감소될 수 있다. 이것은 크기 바이트를 갖는 직렬화된 트랜잭션을 발생시킬 것이다. 현재 트랜잭션으로부터 부모 및 조부모 트랜잭션들의 첫 번째 잠금 해제 스크립트를 수정함으로써, n번째 트랜잭션 은 더 이상 다시 발행 까지의 모든 트랜잭션들을 포함하지는 않는다. 제1 입력은, 도 8에 도시된 바와 같이, 제2 잠금 해제 스크립트 및 2개의 이전의 트랜잭션의 2개의 출력만을 포함하고, 이는 이전의 트랜잭션에 관한 어떠한 정보도 포함하지 않는다.
우리는, 에 대응하는 아웃포인트가 스왑(swap)될 수 없는데, 왜냐하면 이것이 트랜잭션 팽창 문제를 재도입하기 때문이라는 것에 주목한다. 이전의 트랜잭션을 포함한 잠금 해제 스크립트 에서 수정되기 위해 먼저 나타나야 한다.
우리가 팽창 문제를 해결하였지만, 우리는 다음의 자기 참조 문제를 도입하였다. 압축 함수의 각각의 라운드는 64 바이트를 프로세싱하고, 작업코드에 작성되어야 한다. 함수 CF()는 기존의 작업코드에 기초하여 64보다 많은 바이트를 요구한다.
잠금 스크립트 은 partialSHA256()로 정의된 다수의 압축 함수 라운드를 포함하며, 이는 을 입력으로서 취한다. 이것은, 작업코드의 partialSHA256()이 (작업코드에서) 자신을 포함하는 을 프로세싱해야 한다는 것을 의미한다. 자기 참조 문제를 설명하기 위해 그것이 65 바이트로 구현될 수 있는 최상의 시나리오가 고려된다. 은 초기에 SHA256()의 하나의 라운드만을 포함하여, 그가 65 바이트의 길이를 갖는다고 가정된다.
의 65 바이트를 프로세싱하기 위해서는, 의 작업코드에 SHA256()의 2개의 라운드가 있어야 한다. 따라서, 의 길이는 130 바이트로 증가한다. 이제 을 프로세싱하기 위해 작업코드에 SHA256()의 3개의 라운드가 있어야 하는데, 이는 이 실제로 195 바이트임을 의미한다. 우리는 재빨리 자기 참조 문제가 있다는 것을 알게 된다.
이것은, PUSHTXPARENT의 길이가 프리이미지 길이에 의존하여 변하지 않으므로, PUSHTXPARENT의 문제가 아니다. 작업코드 OP_HASH256은 임의의 길이 프리이미지를 프로세싱하고, 여전히 단일 작업코드를 사용하여 컴퓨팅될 수 있다.
5.8. 솔루션: 보조 트랜잭션
우리는, 도 4에 도시된 바와 같이, 의 제1 출력을 지출하고 그런 다음 의 제1 입력에 의해 참조되는 보조 트랜잭션을 도입한다. 보조 트랜잭션의 잠금 스크립트는 대신에 작업코드에 부분 SHA256 해시 함수를 포함한다. 이러한 트랜잭션을 포함시킨 결과는, 부분 SHA256 해시 함수가 그 자체에 대한 입력으로 결코 사용되지 않는다는 것이다.
작업코드 PUSHTXAUXAUXILIARY의 세트는, 입력으로서 가 주어지면, 인 경우, 참으로 평가되고, 여기서 의 제1 아웃포인트로부터 추출된다.
작업코드 PUSHTXAUXILIARY는 다음을 포함한다:
1. 입력으로서 을 취하고 이 트랜잭션 의 시그해시 프리이미지인 경우 참을 출력하는 PUSHTX,
2. 로부터 를 취하고 의 해시 프리이미지인 경우, 참을 출력하는 PUSHTXPARENT.
따라서 PUSHTXAUXILIARY를 포함하는 스크립트는 에 의해 잠금 해제된다.
스크립트 을 다음과 같이 정의한다
도 1에 도시된 바와 같이, 을 갖는 잠금 스크립트는 에 의해 잠금 해제되고, 여기서
= 의 시그해시 프리이미지,
= 직렬화된 보조 트랜잭션,
,
; 및
.
우리는 또한, 입력으로서 가 주어지면, 인 경우 참으로 평가되는 작업코드 HASHPUZZLE의 세트를 정의하고, 여기서 는 HASHPUZZLE에서 고정된 상수이다.
스크립트 를 다음과 같이 정의한다:
모든 n에 대해 잠금 스크립트 가 되도록 재정의하고, 그러면 잠금 해제 스크립트는 이고, 여기서 의 시그해시 프리이미지이다.
이 잠금 스크립트는 이 위에서 정의된 바와 같이 작업코드를 포함하도록 시행한다. 의 해시 퍼즐을 잠금 해제하도록 시행함으로써, PROOFOFEXECUTION 및 PROOFOFPROPAGATION의 정의는 변경될 필요가 없고, 보조 트랜잭션은 명시적으로 체크하지 않고서도 각각의 이전에서 정확한 포맷을 갖는다. 모든 보조 트랜잭션은 자동으로 시행된다.
마지막으로, 잠금 스크립트 은 이전과 같이 P2PKH이다.
부분 SHA256 해시 함수는 부분 프리이미지 PPI에 결코 존재하지 않는다. 이는 OP_HASH256에 입력되는 에 포함된다. 우리는 어떠한 새로운 문제가 발생시키지 않고서 자기 참조 문제를 해결했다.
5.9. 프로토콜의 개시
발행 트랜잭션은 조부모 트랜잭션을 갖지 않는다. 이것은 에 대한 수정을 요구하는 특수한 경우를 도입한다. 발행 트랜잭션은 적어도 2개의 방식으로 식별될 수 있다:
1. 발행자가 소유한 공개 키로부터 트랜잭션에 대한 서명을 유효성 검증한다.
2. 각각의 토큰에 고유한 토큰 ID(UTID)를 부여한다.
특정 발행자의 도입을 피하기 위해, 우리는 UTID가 발행 트랜잭션 의 TxID로 정의되는 제2 방법을 선택한다. 입력으로서 이 주어지면 의 UTID가 에 존재할 때, 참으로 평가될 작업코드 UTIDPRESENT를 정의한다. 또한, 입력으로서 이 주어지면 제2 아웃포인트로부터 까지의 의 UTID가 동등할 때, 참으로 평가될 작업코드 DEFINEUTID를 정의한다. 이것은 UTID=TxID1이므로 n=2인 경우에만 해당된다는 것이 유의된다. 이것은 UTID가 에 존재하지 않는다는 것을 의미한다. 이는 대신에 모든 n≥2에 대해 의 잠금 스크립트에 존재하도록 시행된다. 또한, 에 대한 아웃포인트와 에 대한 아웃포인트가 주어지면, 이들이 동일한 TxID를 포함하는 경우, 참으로 평가될 SAMEOUTPOINT를 정의한다.
스크립트 를 다음과 같이 정의한다
UTIDPRESENT가 실행되고 1을 출력하면(즉, n>2일 때), PROOFOFPROPAGATION을 포함하는 'if' 스테이트먼트가 실행된다. UTIDPRESENT가 실행되고 0을 출력하면(즉, n=2일 때), DEFINEUTID를 포함하는 'else' 스테이트먼트가 실행된다. 잠금 해제 스크립트 = 에 의해 잠금 해제된, 도 1에 도시된 바와 같이, 로 잠금 스크립트를 정제(refine)한다. 이것은 다른 잠금 해제 스크립트와 함께 이전 잠금 해제 스크립트로부터 변하지 않고 유지된다. 잠금 스크립트에 대한 유일한 변화는 다음과 같다:
은 이제 해시 퍼즐에서 고정 데이터로서 대신에 를 포함하고; 그리고
는 끝에서 OP_RETURN <UTID>를 추가적으로 포함한다.
우리는, 작업코드의 각각의 세트에 포함된 작업코드에서 일부 중첩이 존재하고, 이를테면, PUSHTX 및 PUSHTXPARTIALPARENT가 PROOFOFPROPAGATION 및 PROOFOFEXECUTION 둘 모두에 존재한다는 것을 주목한다. 이들은 동일한 함수를 활용할 수 있고, 효율성을 향상시키기 위해 임의의 필요한 정보를 복제할 수 있다.
우리는 부모 트랜잭션의 2개의 출력 , 이 보조 트랜잭션 및 현재 트랜잭션에서 각각 지출되는 것을 시행한다. 이러한 방식으로 출력이 지출되도록 시행되지 않으면, 트랜잭션의 체인을 포크(fork)하고, 프로토콜이 올바르게 준수되는 것처럼 여전히 나타나는 것이 가능할 것이다. 이것은, 공격자가 제2 출력 없이 제1 출력을 쉽게 지출할 수 있는 공격 벡터를 도입할 수 있다.
현재 상태 그대로, 이것이 의 제2 출력과 함께 지출되어야 하는 의 출력을 잠글 것이기 때문에, 제1 출력 없이 제2 출력을 지출함으로써 토큰을 버닝(burn)하는 것이 가능하다. 이것은, 보조 트랜잭션(이는 작업코드에 부분 SHA256 해시 함수를 포함함)이 제2 잠금 해제 스크립트의 일부가 될 것이기 때문에 자기 참조 문제를 재도입하지 않고서는 스크립트에서 방지될 수 없다. 따라서, 부분 SHA256 해시 함수는 작업코드에서 자신을 프로세싱해야 할 것이고, 이는 자기 참조 문제가 된다. 의 제2 출력을 지출하기 위해 서명이 필요하기 때문에, 토큰이 이러한 방식으로 버닝되면, 서명이 이를 입증할 것이다.
또한, 그가 트랜잭션 크기 확대 및 부분 SHA256의 자기 참조 문제를 재도입하므로, 제2 출력에서 보조 트랜잭션을 지출함으로써 토큰을 버닝하는 것이 가능할 것이다. 그러나, 우리의 솔루션은, PROOFOFEXECUTION이 단지 에서의 제2 아웃포인트로부터 아웃포인트를 추출하도록 요구함으로써 제2 아웃포인트가 보조 트랜잭션이 아닌 경우에만, 트랜잭션이 유효하게 하여 이를 방지한다. 앞서 언급한 바와 같이, PROOFOFEXECUTION이 의 제2 아웃포인트로부터 아웃포인트를 추출하도록 요구함으로써, 이는 의 아웃포인트가 의 제2 아웃포인트와 함께 지출되도록 시행한다. 이것은, 의 잠금 스크립트가 동일한 작업코드의 세트 및 동일한 UTID ― 이는 발행 트랜잭션의 TxID로서 정의되었음 ― 를 포함되는 경우에만, 의 잠금 스크립트의 작업코드가 참을 리턴하기 때문이다. 이것은 제2 아웃포인트가 의 제2 출력인 경우에만 해당될 것이고, 임의의 다른 아웃포인트는 동일한 작업코드 및 UTID를 포함하지 않을 것이다. 따라서 의 출력은 의 제2 출력과 함께 지출되어야 하거나, 그렇지 않으면 이것은 유효하지 않을 것이다.
스크립트 는 위에서 설명된 보조 잠금 스크립트의 예이다. 스크립트 는 위에서 설명된 주요 잠금 스크립트의 예이다. 서브-스크립트 A는 주요 잠금 스크립트가 보조 트랜잭션에 대해 조건을 시행한다는 것을 의미한다.
5.10. 토큰 이전 프로토콜
발행자 I에 의해 앨리스(103a)에 토큰이 발행되고, 그런 다음 먼저 밥(103b)에 이전되고 찰리(103c)에 이전되는 토큰의 2개의 이전이 고려된다.
1. 발행자는 앨리스의 공개 키에 대해 토큰을 지불하여 을 생성하고, 여기서 는 섹션 3.3에서 정의된다.
2. 앨리스는 섹션 3.4에 정의된 바와 같이 보조 트랜잭션 및 섹션 3.3에 정의된 바와 같이 를 생성하고, 이들을 밥에 전송한다.
3. 밥은 아래 단계를 사용하여 트랜잭션을 유효성 검증한다.
4. 밥은 을 생성하고, 찰리에게 전송한다.
5. 찰리는 아래의 단계를 사용하여 트랜잭션을 유효성 검증한다.
추가의 이전은 찰리로의 이전과 동일한 방식으로 실행될 것이다.
5.11. n번째 이전에 대한 유효성 검증자 단계
1. 트랜잭션 의 머클 증명을 수신한다. 의 데이터를 사용하여 을 컴퓨팅하고, 머클 증명이 유효하다는 것을 확인한다.
2. 의 해시 퍼즐에서 보조 잠금 스크립트의 해시를 추출하고, 추출된 해지가 이의 잘 알려진 해시에 대응한다는 것을 검증한다.
3. UTID를 추출하고, 발행자로부터의 유효한 UTID의 목록을 사용하여 또는 발행 트랜잭션에 대한 서명을 사용하여 그것이 서명되었다는 것을 확인한다.
유효성 검증자가 실행하는 일부 단계가 있지만, 내부를 들여다 보면, 지폐가 정확한 마킹을 갖는 경우에만 지폐를 수용하거나 블록체인 트랜잭션이 정확한 공개 키에 대한 P2PKH를 포함한 경우에만 블록체인 트랜잭션을 수락하는 것과 같이, 이것은 현금의 임의의 교환과 유사하다는 것이 유의된다. 올바르게 발행된 트랜잭션이 주어지면, 임의의 이전은 유효성 검사자의 어떠한 노력 없이도 항상 다른 유효한 토큰을 생성해야 하기 때문에, 이것은 채굴자 유효성 검증된 토큰이다.
5.12. 상세한 예시적인 프로토콜
발행자 I에 의해 앨리스(103a)에 토큰이 발행되고, 그런 다음 먼저 밥(103b)에 이전되고 찰리(103c)에 이전되는 토큰의 2개의 이전이 고려된다. 추가의 이전은 찰리(103c)로의 이전과 동일한 방식으로 실행될 것이다.
발행
1. 발행자는, 도 9에서와 같이 토큰을 나타내는, 자신의 서명이 필요한 임의의 출력을 지출하는 트랜잭션을 생성하고, 이를 앨리스에게 전송한다. 이 토큰의 UTID는 이다. 이 트랜잭션은 앨리스(103a)가 출력을 잠금 해제할 것을 요구하는 P2PKH 출력을 포함한다. 다른 출력은 보조 트랜잭션이 출력에 올바른 함수를 포함하는 것을 시행한다.
토큰 이전
2. 앨리스(103a)는 도 10에 도시된 바와 같이 의 제1 출력을 지출하는 보조 트랜잭션을 생성한다. 이 트랜잭션은, 및 UTID가 다음 트랜잭션에 존재하고 그것이 로부터 출력된 P2PKH와 동일한 트랜잭션에서만 지출되는 것을 시행할 것이다.
3. 이 토큰을 밥(103b)에 이전하기 위해, 앨리스(103a)는 도 11에 주어진 트랜잭션을 생성하고 전송한다. 밥(103b)은 그것이 검증을 통과하면 이를 수락한다(위에 자세히 설명됨).
4. 밥은 도 12에 주어진 바와 같이 의 제2 출력을 지출하는 보조 트랜잭션을 생성한다.
5. 이 토큰을 찰리(103c)에 이전하기 위해, 밥(103b)은 도 13에 주어진 트랜잭션을 생성하여 찰리(103c)에 전송한다. 찰리(103c)는 그것이 검증을 통과하면 이를 수락한다(위에서 자세히 설명됨).
추가 이전은 도 12 및 13의 트랜잭션과 동일한 포맷으로 동일한 방식으로 실행된다.
n번째 토큰 이전의 일반적인 포맷이 도 14에 제공된다. 보조 트랜잭션 가 도 15에 제공된다.
6. 추가 언급
개시된 기술들의 다른 변형들 또는 사용 사례들은 본원에서의 개시가 주어지면 당업자에게 명백해질 수 있다. 본 개시의 범위는 설명된 실시예들에 의해 제한되는 것이 아니라 첨부된 청구항들에 의해서만 제한된다.
예컨대, 위의 일부 실시예들은 비트코인 네트워크(106), 비트코인 블록체인(150) 및 비트코인 노드(104)의 관점에서 설명되었다. 그러나 비트코인 블록체인은 블록체인(150)의 하나의 특정 예이며 위의 설명은 모든 블록체인에 일반적으로 적용될 수 있다는 것이 인지될 것이다. 즉, 본 발명은 결코 비트코인 블록체인으로 제한되지 않는다. 보다 일반적으로, 비트코인 네트워크(106), 비트코인 블록체인(150) 및 비트코인 노드(104)에 대한 위의 임의의 참조는 각각 블록체인 네트워크(106), 블록체인(150) 및 블록체인 노드(104)에 대한 참조로 대체될 수 있다. 블록체인, 블록체인 네트워크 및/또는 블록체인 노드는 위에서 설명된 바와 같이 비트코인 블록체인(150), 비트코인 네트워크(106) 및 비트코인 노드(104)의 설명된 성질들 중 일부 또는 전부를 공유할 수 있다.
본 발명의 바람직한 실시예들에서, 블록체인 네트워크(106)는 비트코인 네트워크이고 비트코인 노드들(104)은 블록체인(150)의 블록들(151)을 생성, 공개, 전파 및 저장하는 설명된 기능들 모두를 적어도 수행한다. 이러한 기능들의 전부는 아니지만 하나 또는 일부만을 수행하는 다른 네트워크 엔티티들(또는 네트워크 요소들)이 있을 수 있음을 배제되지 않는다. 즉, 네트워크 엔티티는 블록들을 생성 및 공개하지 않고 블록들을 전파 및/또는 저장하는 기능을 수행할 수 있다(이러한 엔티티들은 바람직한 비트코인 네트워크(106)의 노드들로 간주되지 않음을 상기한다).
본 발명의 다른 실시예들에서, 블록체인 네트워크(106)는 비트코인 네트워크가 아닐 수 있다. 이러한 실시예들에서, 노드가 블록체인(150)의 블록들(151)을 생성, 발행, 전파 및 저장하는 기능들 전부는 아니지만 적어도 하나 또는 일부를 수행할 수 있다는 것이 배제되지 않는다. 예컨대, 이러한 다른 블록체인 네트워크들에서, "노드"는 블록들(151)을 생성 및 공개하지만 해당 블록들(151)을 저장하고 그리고/또는 다른 노드에 전파하진 않도록 구성된 네트워크 엔티티를 지칭하는 데 사용될 수 있다.
보다 더 일반적으로, 위의 "비트코인 노드"(104)라는 용어에 대한 임의의 참조는 "네트워크 엔티티" 또는 "네트워크 요소"라는 용어로 대체될 수 있으며, 이러한 엔티티/요소는 블록들을 생성, 공개, 전파 및 저장하는 역할들의 일부 또는 전부를 수행하도록 구성된다. 이러한 네트워크 엔티티/요소의 기능들은 블록체인 노드(104)를 참조하여 위에서 설명된 동일 방식으로 하드웨어로 구현될 수 있다.
위의 실시예들은 단지 예로서만 설명되었다는 것이 인지될 것이다. 보다 일반적으로, 다음 스테이트먼트들 중 임의의 하나 이상에 따른 방법, 장치 또는 프로그램이 제공될 수 있다.
스테이트먼트 1. 잠금 스크립트가 블록체인 트랜잭션의 체인 전체에 걸쳐 전파되도록 시행하는 컴퓨터-구현 방법으로서, 방법은 제1 당사자에 의해 수행되고, 방법은:
제1 출력을 포함하는 제1 주요 트랜잭션을 생성하는 단계를 포함하고, 제1 출력은 주요 잠금 스크립트를 포함하고, 주요 잠금 스크립트는, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 제1 메시지에 기초하여, 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성되고. 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지를 포함한다는 것을 검증하고, ii) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 제2 메시지 및 제1 데이터 항목에 기초하여, 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다.
스테이트먼트 2. 스테이트먼트 1의 방법에 있어서,
제1 보조 트랜잭션을 생성하는 단계를 포함하고, 제1 보조 트랜잭션은 제1 주요 트랜잭션의 제1 출력을 참조하고 제1 메시지를 포함하는 제1 입력, 및 보조 잠금 스크립트를 포함하는 제1 출력을 포함한다.
스테이트먼트 3. 스테이트먼트 1 또는 스테이트먼트 2의 방법에 있어서, 주요 잠금 스크립트는 보조 잠금 스크립트의 해시를 포함하고, 제1 메시지는 후보 보조 잠금 스크립트를 포함하고, 상기 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하는 단계는, 주요 잠금 스크립트가 후보 보조 잠금 스크립트를 해싱하고, 후보 보조 잠금 스크립트의 해시가 보조 잠금 스크립트의 해시와 매칭한다는 것을 검증하는 단계를 포함한다.
스테이트먼트 4. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 주요 트랜잭션은 제2 출력을 포함하고, 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, iii) 제1 주요 트랜잭션의 제2 출력이 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된다는 것을 검증하도록 구성된다.
스테이트먼트 5. 스테이트먼트 4의 방법에 있어서, 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, iv) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제1 보조 트랜잭션을 포함하는 제2 데이터 항목을 포함한다는 것을 검증하도록 구성되고, 그리고 상기 제2 출력이 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된다는 것을 검증하는 단계는, a) 제2 메시지로부터, 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된 제2 출력의 개개의 트랜잭션 식별자를 추출하는 단계, b) 제2 데이터 항목으로부터, 제1 보조 트랜잭션의 제1 입력에 의해 잠금 해제된 제1 출력의 개개의 트랜잭션 식별자를 추출하는 단계, 및 c) a) 단계 동안 추출된 개개의 트랜잭션 식별자가 b) 단계 동안 추출된 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하는 단계를 포함한다.
스테이트먼트 6. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 주요 트랜잭션은 제1 주요 트랜잭션에 해시 함수를 적용함으로써 생성된 개개의 트랜잭션 식별자를 갖고, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는 제3 데이터 항목을 포함하고, 제3 데이터 항목은 제1 주요 트랜잭션에 적용된 해시 함수의 미드스테이트를 포함하고, 그리고 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, iv) 제1 데이터 항목 및 제3 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하고, 그리고 후보 트랜잭션 식별자가 제1 주요 트랜잭션 식별자의 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하도록 구성된다.
스테이트먼트 7. 임의의 선행 스테이트먼트의 방법에 있어서, 보조 잠금 스크립트는 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, v) 제2 주요 트랜잭션이 특정 트랜잭션 식별자를 포함한다는 것을 검증하도록 구성된다.
스테이트먼트 8. 임의의 선행 스테이트먼트의 방법에 있어서,
제2 주요 트랜잭션을 생성하는 단계를 포함하고, 제2 주요 트랜잭션은 제1 보조 트랜잭션의 제1 출력을 참조하고 제2 메시지 및 제1 데이터 항목을 포함하는 제1 입력을 포함하고, 그리고 제2 주요 트랜잭션은 주요 잠금 스크립트를 포함하는 제1 출력을 포함한다.
스테이트먼트 9. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 보조 트랜잭션 및 제2 주요 트랜잭션을 제2 당사자에게 전송하는 단계를 포함한다.
스테이트먼트 10. 스테이트먼트 9의 방법에 있어서, 제1 주요 트랜잭션이 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 제2 당사자에게 전송하는 단계를 포함한다.
스테이트먼트 11. 임의의 선행 스테이트먼트의 방법에 있어서, 주요 잠금 스크립트 및/또는 보조 잠금 스크립트는 토큰의 소유권에 관한 데이터를 포함한다.
스테이트먼트 12. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 주요 트랜잭션은 블록체인 트랜잭션들의 체인 내의 초기 주요 트랜잭션이다.
스테이트먼트 13. 스테이트먼트 11 및 스테이트먼트 12의 방법에 있어서, 제1 당사자는 토큰의 발행자이다.
스테이트먼트 14. 스테이트먼트 7에 종속할 때 스테이트먼트 12 또는 스테이트먼트 13의 방법에 있어서, 특정 트랜잭션 식별자는 제1 주요 트랜잭션의 개개의 트랜잭션 식별자이다.
스테이트먼트 15. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 주요 트랜잭션은 제1 카운터 값을 포함하고, 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, 제2 주요 트랜잭션이 제2 카운터 값을 포함한다는 것을 검증하도록 구성되고, 제2 카운터 값은 카운터 값의 반복이다.
스테이트먼트 16. 스테이트먼트 1 내지 스테이트먼트 11 중 어느 하나의 방법에 있어서, 제1 주요 트랜잭션은 블록체인 트랜잭션들 체인 내의 초기 트랜잭션이 아니고, 제1 주요 트랜잭션은 보조 잠금 스크립트를 포함하는 이전의 보조 트랜잭션의 제1 출력을 참조하는 제1 입력을 포함하고, 이전의 보조 트랜잭션은 주요 잠금 스크립트를 포함하는 이전의 주요 트랜잭션의 제1 출력을 참조하는 제1 입력을 포함하고, 그리고 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, vi) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 이전의 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제4 데이터 항목을 포함한다는 것을 검증하고, 그리고 vii) 제2 메시지 및 제4 데이터 항목에 기초하여, 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다.
스테이트먼트 17. 스테이트먼트 16의 방법에 있어서, 이전의 주요 트랜잭션은 이전의 주요 트랜잭션에 해시 함수를 적용함으로써 생성된 개개의 트랜잭션 식별자를 갖고, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는 제5 데이터 항목을 포함하고, 제5 데이터 항목은 이전의 주요 트랜잭션에 적용된 해시 함수의 미드스테이트를 포함하고, 그리고 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, viii) 제4 데이터 항목 및 제5 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하고, 그리고 후보 트랜잭션 식별자가 이전의 주요 트랜잭션 식별자의 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하도록 구성된다.
스테이트먼트 18. 스테이트먼트 16 또는 스테이트먼트 17의 방법에 있어서, 이전의 주요 트랜잭션은 블록체인 트랜잭션의 체인 내의 초기 주요 트랜잭션이고, 방법은 초기 주요 트랜잭션이 미리 결정된 공개 키에 대응하는 서명으로 서명되었다는 것을 검증하는 단계를 포함한다.
스테이트먼트 19. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 주요 트랜잭션을 블록체인 네트워크에 제출하는 단계를 포함한다.
스테이트먼트 20. 임의의 선행 스테이트먼트의 방법에 있어서, 제1 보조 트랜잭션 및/또는 제2 주요 트랜잭션을 블록체인 네트워크에 제출하는 단계를 포함한다.
스테이트먼트 21. 블록체인 트랜잭션의 체인 전체에 걸쳐 잠금 스크립트가 시행되었다는 것을 검증하는 컴퓨터-구현 방법으로서, 방법은 제2 당사자에 의해 수행되고, 방법은:
제2 주요 트랜잭션을 획득하는 단계 ― 제2 주요 트랜잭션은 제1 입력 및 제1 출력을 포함하고, 제1 입력은 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지, 제1 주요 트랜잭션의 제1 출력을 잠금 해제하는 제1 입력을 포함하는 제1 보조 트랜잭션, 및 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함하고, 제1 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함하고, 제1 보조 트랜잭션의 제1 출력은 보조 잠금 스크립트를 포함하고, 제2 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함함 ― ;
제1 주요 트랜잭션이 블록체인에 레코딩되었다는 것을 검증하는 단계; 및
제1 주요 트랜잭션의 주요 잠금 스크립트가, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 제1 메시지에 기초하여, 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하고, 보조 잠금 스크립트가, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 제1 잠금 해제 스크립트가 제2 메시지를 포함한다는 것을 검증하고, ii) 제1 잠금 해제 스크립트가 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 제2 메시지 및 제1 데이터 항목에 기초하여, 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하고, 이로써, 주요 잠금 스크립트가 제1 주요 트랜잭션 및 제2 주요 트랜잭션 전체에 걸쳐 시행되었다는 것을 검증하도록 구성된다는 것을 검증하는 단계를 포함한다.
스테이트먼트 22. 스테이트먼트 21의 방법에 있어서, 주요 잠금 스크립트는 보조 잠금 스크립트의 해시를 포함하고, 제1 메시지는 후보 보조 잠금 스크립트를 포함하고, 그리고 주요 잠금 스크립트는, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, 후보 보조 잠금 스크립트를 해싱하고 후보 보조 잠금 스크립트의 해시가 보조 잠금 스크립트의 해시와 매칭한다는 것을 검증함으로써 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성되고, 그리고 상기 주요 잠금 스크립트가 i) 단계 및 ii) 단계를 수행하도록 구성된다는 것을 검증하는 단계는, 주요 잠금 스크립트가 해시 퍼즐의 일부로서 보조 잠금 스크립트의 해시를 포함한다는 것을 검증하는 단계를 포함한다.
스테이트먼트 23. 스테이트먼트 21 또는 스테이트먼트 22의 방법에 있어서, 상기 제1 주요 트랜잭션이 블록체인 상에 레코딩되었다는 것을 검증하는 단계는, 제1 주요 트랜잭션이 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 획득하는 단계를 포함한다.
스테이트먼트 24. 스테이트먼트 23의 방법에 있어서, 제1 주요 트랜잭션은 제1 주요 트랜잭션에 해시 함수를 적용함으로써 생성되는 개개의 트랜잭션 식별자를 갖고, 제2 주요 트랜잭션의 제1 입력은 제3 데이터 항목을 포함하고, 제3 데이터 항목은 제1 주요 트랜잭션에 적용된 해시 함수의 미드스테이트를 포함하고, 그리고 상기 제1 주요 트랜잭션이 블록체인 상에 레코딩되었다는 것을 검증하는 단계는, 제1 데이터 항목 및 제3 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하는 단계, 및 머클 증명이 후보 트랜잭션 식별자에 대해 유효하다는 것을 검증하는 단계를 포함한다.
스테이트먼트 25. 스테이트먼트 23 또는 스테이트먼트 24의 방법에 있어서, 제1 주요 트랜잭션을 획득하는 단계를 포함하고, 상기 제1 주요 트랜잭션이 블록체인 상에 레코딩되었다는 것을 검증하는 단계는 획득된 머클 증명 및 획득된 제1 주요 트랜잭션에 기초한다.
스테이트먼트 26. 스테이트먼트 19 또는 스테이트먼트 19의 임의의 종속 스테이트먼트의 방법에 있어서, 제2 주요 트랜잭션이 초기 주요 트랜잭션의 개개의 트랜잭션 식별자를 포함한다는 것을 검증하는 단계를 포함한다.
스테이트먼트 27. 스테이트먼트 19 또는 스테이트먼트 19의 임의의 종속 스테이트먼트의 방법에 있어서,
제2 보조 트랜잭션을 생성하는 단계 ― 제2 보조 트랜잭션은, 제2 주요 트랜잭션의 제1 출력을 참조하고 제2 보조 트랜잭션에 기초하여 생성된 제3 메시지를 포함하는 제1 입력, 및 보조 잠금 스크립트를 포함하는 제1 출력을 포함함 ― ;
제3 주요 트랜잭션을 생성하는 단계 ― 제3 주요 트랜잭션은 제2 보조 트랜잭션의 제1 출력을 참조하고 제3 주요 트랜잭션에 기초하여 생성된 제4 메시지, 제1 데이터 항목, 제2 보조 트랜잭션을 포함하는 제1 입력을 포함하고, 제6 데이터 항목은 제2 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하고, 제3 주요 트랜잭션은 주요 잠금 스크립트를 포함하는 제1 출력을 포함함 ― 를 포함한다.
스테이트먼트 28. 스테이트먼트 27의 방법에 있어서, 보조 잠금 스크립트는, 제3 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, vi) 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 제3 데이터 항목을 포함한다는 것을 검증하고, 그리고 vii) 제3 메시지 및 제6 데이터 항목에 기초하여, 제3 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성된다.
스테이트먼트 29. 스테이트먼트 27 또는 스테이트먼트 28의 방법에 있어서, 제2 보조 트랜잭션 및 제3 주요 트랜잭션을 제3 당사자에게 전송하는 단계를 포함한다.
스테이트먼트 30. 스테이트먼트 29의 방법에 있어서, 제2 주요 트랜잭션이 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 제3 당사자에게 전송하는 단계를 포함한다.
스테이트먼트 31. 스테이트먼트 21 또는 스테이트먼트 21의 임의의 종속 스테이트먼트의 방법에 있어서, 주요 잠금 스크립트 및/또는 보조 잠금 스크립트는 토큰의 소유권에 관한 데이터를 포함하고, 그리고 제1 주요 트랜잭션 및/또는 제1 보조 잠금 스크립트는 토큰 발행자에 의해 생성된다.
스테이트먼트 32. 스테이트먼트 27 또는 스테이트먼트 27의 임의의 종속 스테이트먼트의 방법에 있어서, 제2 보조 트랜잭션 및 제3 주요 트랜잭션을 블록체인에 제출하는 단계를 포함한다.
스테이트먼트 33. 컴퓨터 장비로서,
하나 이상의 메모리 유닛을 포함하는 메모리; 및
하나 이상의 프로세싱 유닛을 포함하는 프로세싱 장치를 포함하고, 메모리는 프로세싱 장치에서 실행되도록 배열된 코드를 저장하고, 코드는 프로세싱 장치 상에 있을 때 스테이트먼트 1 내지 스테이트먼트 29 중 어느 하나의 방법을 수행하도록 구성된다.
스테이트먼트 34. 컴퓨터 판독 가능 저장소 상에서 구현되고, 하나 이상의 프로세서들 상에서 실행될 때, 스테이트먼트 1 내지 스테이트먼트 32 중 어느 하나의 방법을 수행하도록 구성된 컴퓨터 프로그램.
본원에서 개시된 다른 양상에 따라, 제1 당사자 및 제2 당사자의 액션을 포함하는 방법이 제공될 수 있다. 본원에서 개시된 다른 양상에 따라, 적어도 첫 번째 주요 트랜잭션 및 첫 번째 보조 트랜잭션을 프로세싱하도록 구성된 블록체인 노드의 액션을 포함하는 방법이 제공될 수 있다.
본원에서 개시된 다른 양상에 따라, 제1 당사자 및 제2 당사자의 컴퓨터 장비를 포함하는 시스템이 제공될 수 있다. 본원에서 개시된 다른 양상에 따라, 적어도 첫 번째 주요 트랜잭션 및 첫 번째 보조 트랜잭션을 프로세싱하도록 구성된 블록체인 노드가 제공될 수 있다.

Claims (34)

  1. 잠금 스크립트가 블록체인 트랜잭션의 체인 전체에 걸쳐 전파되도록 시행하는 컴퓨터-구현 방법으로서, 상기 방법은 제1 당사자에 의해 수행되고, 상기 방법은:
    제1 출력을 포함하는 제1 주요 트랜잭션을 생성하는 단계를 포함하고, 상기 제1 출력은 주요 잠금 스크립트를 포함하고, 상기 주요 잠금 스크립트는, 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 상기 제1 잠금 해제 스크립트가 상기 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 상기 제1 메시지에 기초하여, 상기 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성되고. 상기 보조 잠금 스크립트는, 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 상기 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지를 포함한다는 것을 검증하고, ii) 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 상기 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 상기 제2 메시지 및 상기 제1 데이터 항목에 기초하여, 상기 제2 주요 트랜잭션의 제1 출력이 상기 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  2. 제1항에 있어서,
    상기 제1 보조 트랜잭션을 생성하는 단계를 포함하고, 상기 제1 보조 트랜잭션은 상기 제1 주요 트랜잭션의 제1 출력을 참조하고 상기 제1 메시지를 포함하는 제1 입력, 및 상기 보조 잠금 스크립트를 포함하는 제1 출력을 포함하는,
    컴퓨터-구현 방법.
  3. 제1항 또는 제2항에 있어서, 상기 주요 잠금 스크립트는 상기 보조 잠금 스크립트의 해시를 포함하고, 상기 제1 메시지는 후보 보조 잠금 스크립트를 포함하고, 상기 제1 보조 트랜잭션의 제1 출력이 상기 보조 잠금 스크립트를 포함한다는 것을 검증하는 단계는, 상기 주요 잠금 스크립트가 상기 후보 보조 잠금 스크립트를 해싱하고, 상기 후보 보조 잠금 스크립트의 해시가 상기 보조 잠금 스크립트의 해시와 매칭한다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션은 제2 출력을 포함하고, 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 상기 제1 잠금 해제 스크립트에 의해 실행될 때, iii) 상기 제1 주요 트랜잭션의 제2 출력이 상기 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  5. 제4항에 있어서, 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, iv) 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 상기 제1 보조 트랜잭션을 포함하는 제2 데이터 항목을 포함한다는 것을 검증하도록 구성되고, 그리고 상기 제2 출력이 상기 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된다는 것을 검증하는 단계는, a) 상기 제2 메시지로부터, 상기 제2 주요 트랜잭션의 제2 입력에 의해 잠금 해제된 상기 제2 출력의 개개의 트랜잭션 식별자를 추출하는 단계, b) 상기 제2 데이터 항목으로부터, 상기 제1 보조 트랜잭션의 제1 입력에 의해 잠금 해제된 상기 제1 출력의 개개의 트랜잭션 식별자를 추출하는 단계, 및 c) a) 단계 동안 추출된 개개의 트랜잭션 식별자가 b) 단계 동안 추출된 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션은 상기 제1 주요 트랜잭션에 해시 함수를 적용함으로써 생성된 개개의 트랜잭션 식별자를 갖고, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는 제3 데이터 항목을 포함하고, 상기 제3 데이터 항목은 상기 제1 주요 트랜잭션에 적용된 상기 해시 함수의 미드스테이트를 포함하고, 그리고 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, iv) 상기 제1 데이터 항목 및 상기 제3 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하고, 그리고 상기 후보 트랜잭션 식별자가 상기 제1 주요 트랜잭션 식별자의 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 보조 잠금 스크립트는 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, v) 상기 제2 주요 트랜잭션이 특정 트랜잭션 식별자를 포함한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 제2 주요 트랜잭션을 생성하는 단계를 포함하고, 상기 제2 주요 트랜잭션은 상기 제1 보조 트랜잭션의 제1 출력을 참조하고 상기 제2 메시지 및 상기 제1 데이터 항목을 포함하는 제1 입력을 포함하고, 그리고 상기 제2 주요 트랜잭션은 상기 주요 잠금 스크립트를 포함하는 제1 출력을 포함하는,
    컴퓨터-구현 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 제1 보조 트랜잭션 및 상기 제2 주요 트랜잭션을 제2 당사자에게 전송하는 단계를 포함하는,
    컴퓨터-구현 방법.
  10. 제9항에 있어서, 상기 제1 주요 트랜잭션이 상기 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 상기 제2 당사자에게 전송하는 단계를 포함하는,
    컴퓨터-구현 방법.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 주요 잠금 스크립트 및/또는 보조 잠금 스크립트는 토큰의 소유권에 관한 데이터를 포함하는,
    컴퓨터-구현 방법.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션은 상기 블록체인 트랜잭션의 체인 내의 초기 주요 트랜잭션인,
    컴퓨터-구현 방법.
  13. 제11항 또는 제12항에 있어서, 상기 제1 당사자는 상기 토큰의 발행자인,
    컴퓨터-구현 방법.
  14. 제7항에 종속할 때 제12항 또는 제13항에 있어서, 상기 특정 트랜잭션 식별자는 상기 제1 주요 트랜잭션의 개개의 트랜잭션 식별자인,
    컴퓨터-구현 방법.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션은 제1 카운터 값을 포함하고, 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, 상기 제2 주요 트랜잭션이 제2 카운터 값을 포함한다는 것을 검증하도록 구성되고, 상기 제2 카운터 값은 상기 카운터 값의 반복인,
    컴퓨터-구현 방법.
  16. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션은 상기 블록체인 트랜잭션들 체인 내의 초기 트랜잭션이 아니고, 상기 제1 주요 트랜잭션은 상기 보조 잠금 스크립트를 포함하는 이전의 보조 트랜잭션의 제1 출력을 참조하는 제1 입력을 포함하고, 상기 이전의 보조 트랜잭션은 상기 주요 잠금 스크립트를 포함하는 이전의 주요 트랜잭션의 제1 출력을 참조하는 제1 입력을 포함하고, 그리고 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, vi) 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트가 상기 이전의 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제4 데이터 항목을 포함한다는 것을 검증하고, 그리고 vii) 상기 제2 메시지 및 상기 제4 데이터 항목에 기초하여, 상기 제2 주요 트랜잭션의 제1 출력이 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  17. 제16항에 있어서, 상기 이전의 주요 트랜잭션은 상기 이전의 주요 트랜잭션에 해시 함수를 적용함으로써 생성된 개개의 트랜잭션 식별자를 갖고, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트는 제5 데이터 항목을 포함하고, 상기 제5 데이터 항목은 상기 이전의 주요 트랜잭션에 적용된 상기 해시 함수의 미드스테이트를 포함하고, 그리고 상기 보조 잠금 스크립트는, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, viii) 상기 제4 데이터 항목 및 상기 제5 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하고, 그리고 상기 후보 트랜잭션 식별자가 상기 이전의 주요 트랜잭션 식별자의 개개의 트랜잭션 식별자와 매칭한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  18. 제16항 또는 제17항에 있어서, 상기 이전의 주요 트랜잭션은 상기 블록체인 트랜잭션의 체인 내의 초기 주요 트랜잭션이고, 상기 방법은 상기 초기 주요 트랜잭션이 미리 결정된 공개 키에 대응하는 서명으로 서명되었다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  19. 제1항 내지 제18항 중 어느 한 항에 있어서, 상기 제1 주요 트랜잭션을 상기 블록체인 네트워크에 제출하는 단계를 포함하는,
    컴퓨터-구현 방법.
  20. 제1항 내지 제19항 중 어느 한 항에 있어서, 상기 제1 보조 트랜잭션 및/또는 상기 제2 주요 트랜잭션을 상기 블록체인 네트워크에 제출하는 단계를 포함하는,
    컴퓨터-구현 방법.
  21. 블록체인 트랜잭션의 체인 전체에 걸쳐 잠금 스크립트가 시행되었다는 것을 검증하는 컴퓨터-구현 방법으로서, 상기 방법은 제2 당사자에 의해 수행되고, 상기 방법은:
    제2 주요 트랜잭션을 획득하는 단계 ― 상기 제2 주요 트랜잭션은 제1 입력 및 제1 출력을 포함하고, 상기 제1 입력은 상기 제2 주요 트랜잭션에 기초하여 생성된 제2 메시지, 제1 주요 트랜잭션의 제1 출력을 잠금 해제하는 제1 입력을 포함하는 제1 보조 트랜잭션, 및 상기 제1 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하는 제1 데이터 항목을 포함하고, 상기 제1 주요 트랜잭션의 제1 출력은 주요 잠금 스크립트를 포함하고, 상기 제1 보조 트랜잭션의 제1 출력은 보조 잠금 스크립트를 포함하고, 상기 제2 주요 트랜잭션의 제1 출력은 상기 주요 잠금 스크립트를 포함함 ― ;
    제1 주요 트랜잭션이 상기 블록체인에 레코딩되었다는 것을 검증하는 단계; 및
    상기 제1 주요 트랜잭션의 주요 잠금 스크립트가, 상기 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 상기 제1 잠금 해제 스크립트가 상기 제1 보조 트랜잭션에 기초하여 생성된 제1 메시지를 포함한다는 것을 검증하고, 그리고 ii) 상기 제1 메시지에 기초하여, 상기 제1 보조 트랜잭션의 제1 출력이 보조 잠금 스크립트를 포함한다는 것을 검증하고, 상기 보조 잠금 스크립트가, 상기 제2 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, i) 상기 제1 잠금 해제 스크립트가 제2 메시지를 포함한다는 것을 검증하고, ii) 상기 제1 잠금 해제 스크립트가 상기 제1 데이터 항목을 포함한다는 것을 검증하고, 그리고 iii) 상기 제2 메시지 및 상기 제1 데이터 항목에 기초하여, 상기 제2 주요 트랜잭션의 제1 출력이 상기 주요 잠금 스크립트를 포함한다는 것을 검증하고, 이로써, 상기 주요 잠금 스크립트가 상기 제1 주요 트랜잭션 및 상기 제2 주요 트랜잭션 전체에 걸쳐 시행되었다는 것을 검증하도록 구성된다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  22. 제21항에 있어서, 상기 주요 잠금 스크립트는 상기 보조 잠금 스크립트의 해시를 포함하고, 상기 제1 메시지는 후보 보조 잠금 스크립트를 포함하고, 그리고 상기 주요 잠금 스크립트는, 상기 제1 보조 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, 상기 후보 보조 잠금 스크립트를 해싱하고 상기 후보 보조 잠금 스크립트의 해시가 상기 보조 잠금 스크립트의 해시와 매칭한다는 것을 검증함으로써 상기 제1 보조 트랜잭션의 제1 출력이 상기 보조 잠금 스크립트를 포함한다는 것을 검증하도록 구성되고, 그리고 상기 주요 잠금 스크립트가 i) 단계 및 ii) 단계를 수행하도록 구성된다는 것을 검증하는 단계는, 상기 주요 잠금 스크립트가 해시 퍼즐의 일부로서 상기 보조 잠금 스크립트의 해시를 포함한다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  23. 제21항 또는 제22항에 있어서, 상기 제1 주요 트랜잭션이 상기 블록체인 상에 레코딩되었다는 것을 검증하는 단계는, 상기 제1 주요 트랜잭션이 상기 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 획득하는 단계를 포함하는,
    컴퓨터-구현 방법.
  24. 제23항에 있어서, 상기 제1 주요 트랜잭션은 상기 제1 주요 트랜잭션에 해시 함수를 적용함으로써 생성되는 개개의 트랜잭션 식별자를 갖고, 상기 제2 주요 트랜잭션의 제1 입력은 제3 데이터 항목을 포함하고, 상기 제3 데이터 항목은 상기 제1 주요 트랜잭션에 적용된 상기 해시 함수의 미드스테이트를 포함하고, 상기 제1 주요 트랜잭션이 상기 블록체인 상에 레코딩되었다는 것을 검증하는 단계는, 상기 제1 데이터 항목 및 상기 제3 데이터 항목에 기초하여 후보 트랜잭션 식별자를 생성하는 단계, 및 상기 머클 증명이 상기 후보 트랜잭션 식별자에 대해 유효하다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  25. 제23항 또는 제24항에 있어서, 상기 제1 주요 트랜잭션을 획득하는 단계를 포함하고, 상기 제1 주요 트랜잭션이 상기 블록체인 상에 레코딩되었다는 것을 검증하는 단계는 상기 획득된 머클 증명 및 상기 획득된 제1 주요 트랜잭션에 기초하는,
    컴퓨터-구현 방법.
  26. 제19항 또는 제19항의 임의의 종속항에 있어서, 상기 제2 주요 트랜잭션이 초기 주요 트랜잭션의 개개의 트랜잭션 식별자를 포함한다는 것을 검증하는 단계를 포함하는,
    컴퓨터-구현 방법.
  27. 제19항 또는 제19항의 임의의 종속항에 있어서,
    제2 보조 트랜잭션을 생성하는 단계 ― 상기 제2 보조 트랜잭션은, 상기 제2 주요 트랜잭션의 제1 출력을 참조하고 상기 제2 보조 트랜잭션에 기초하여 생성된 제3 메시지를 포함하는 제1 입력, 및 상기 보조 잠금 스크립트를 포함하는 제1 출력을 포함함 ― ; 및
    제3 주요 트랜잭션을 생성하는 단계 ― 상기 제3 주요 트랜잭션은 상기 제2 보조 트랜잭션의 제1 출력을 참조하고 상기 제3 주요 트랜잭션에 기초하여 생성된 제4 메시지, 상기 제1 데이터 항목, 상기 제2 보조 트랜잭션을 포함하는 제1 입력을 포함하고, 제6 데이터 항목은 상기 제2 주요 트랜잭션의 하나 이상의 잠금 스크립트를 포함하고, 상기 제3 주요 트랜잭션은 상기 주요 잠금 스크립트를 포함하는 제1 출력을 포함함 ― 를 포함하는,
    컴퓨터-구현 방법.
  28. 제27항에 있어서, 상기 보조 잠금 스크립트는, 상기 제3 주요 트랜잭션의 제1 잠금 해제 스크립트에 의해 실행될 때, vi) 상기 제2 주요 트랜잭션의 상기 제1 잠금 해제 스크립트가 상기 제3 데이터 항목을 포함한다는 것을 검증하고, 그리고 vii) 상기 제3 메시지 및 상기 제6 데이터 항목에 기초하여, 상기 제3 주요 트랜잭션의 제1 출력이 상기 주요 잠금 스크립트를 포함한다는 것을 검증하도록 구성되는,
    컴퓨터-구현 방법.
  29. 제27항 또는 제28항에 있어서, 상기 제2 보조 트랜잭션 및 상기 제3 주요 트랜잭션을 제3 당사자에게 전송하는 단계를 포함하는,
    컴퓨터-구현 방법.
  30. 제29항에 있어서, 상기 제2 주요 트랜잭션이 상기 블록체인의 블록에 레코딩되었다는 것을 증명하기 위한 머클 증명을 상기 제3 당사자에게 전송하는 단계를 포함하는,
    컴퓨터-구현 방법.
  31. 제21항 또는 제21항의 임의의 종속항에 있어서, 상기 주요 잠금 스크립트 및/또는 보조 잠금 스크립트는 토큰의 소유권에 관한 데이터를 포함하고, 그리고 상기 제1 주요 트랜잭션 및/또는 상기 제1 보조 잠금 스크립트는 토큰 발행자에 의해 생성된,
    컴퓨터-구현 방법.
  32. 제27항 또는 제27항의 임의의 종속항에 있어서, 상기 제2 보조 트랜잭션 및 상기 제3 주요 트랜잭션을 상기 블록체인에 제출하는 단계를 포함하는,
    컴퓨터-구현 방법.
  33. 컴퓨터 장비로서,
    하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 프로세싱 유닛을 포함하는 프로세싱 장치를 포함하고, 상기 메모리는 상기 프로세싱 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 프로세싱 장치 상에 있을 때 제1항 내지 제32항 중 어느 한 항의 방법을 수행하도록 구성되는,
    컴퓨터 장비.
  34. 컴퓨터 판독 가능 저장소 상에서 구현되고, 하나 이상의 프로세서들 상에서 실행될 때, 제1항 내지 제32항 중 어느 한 항의 방법을 수행하도록 구성된 컴퓨터 프로그램.
KR1020247013193A 2021-09-30 2022-08-30 잠금 스크립트의 전파 KR20240088974A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB2113977.9 2021-09-30

Publications (1)

Publication Number Publication Date
KR20240088974A true KR20240088974A (ko) 2024-06-20

Family

ID=

Similar Documents

Publication Publication Date Title
US20230308292A1 (en) Digital signatures
WO2023052019A1 (en) Propagating locking scripts
US20240062200A1 (en) Blockchain related verification method and system
US20230230078A1 (en) Custom transaction scripts
KR20240088974A (ko) 잠금 스크립트의 전파
JP7508473B2 (ja) ブロックチェーンの使用方法
KR20240012503A (ko) 부분적 sha 기반 해시 함수
WO2024041866A1 (en) Blockchain transaction
GB2614077A (en) Signature-based atomic swap
KR20240034793A (ko) 블록체인 트랜잭션들에 대한 조건들의 시행
KR20240037243A (ko) 블록체인 트랜잭션들에 대한 조건들의 시행
WO2024061617A1 (en) Atomic swap token trades
WO2024061546A1 (en) Enforcing constraints on blockchain transactions
WO2023160921A1 (en) Data exchange attestation method
WO2024041862A1 (en) Blockchain transaction
WO2024052065A1 (en) Determining shared secrets using a blockchain
WO2023057151A1 (en) Implementing a layer 2 token protocol using a layer 1 blockchain
KR20240093494A (ko) 샤딩된 머클 트리
JP2024525888A (ja) ブロックチェーントランザクションに対する条件の強制
WO2023194187A1 (en) Statement proof and verification
WO2024126027A1 (en) Computer-implemented methods and systems
WO2024017786A1 (en) Proving and verifying input data
JP2022524996A (ja) ブロックチェーンの使用方法
WO2023227529A1 (en) Hash masks