KR20220122994A - 블록체인을 이용한 증명 가능하게 공정한 게임들 - Google Patents

블록체인을 이용한 증명 가능하게 공정한 게임들 Download PDF

Info

Publication number
KR20220122994A
KR20220122994A KR1020227021332A KR20227021332A KR20220122994A KR 20220122994 A KR20220122994 A KR 20220122994A KR 1020227021332 A KR1020227021332 A KR 1020227021332A KR 20227021332 A KR20227021332 A KR 20227021332A KR 20220122994 A KR20220122994 A KR 20220122994A
Authority
KR
South Korea
Prior art keywords
game
transaction
pseudo
output
computer
Prior art date
Application number
KR1020227021332A
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 KR20220122994A publication Critical patent/KR20220122994A/ko

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/79Game security or game management aspects involving player-related data, e.g. identities, accounts, preferences or play histories
    • A63F13/792Game security or game management aspects involving player-related data, e.g. identities, accounts, preferences or play histories for payment purposes, e.g. monthly subscriptions
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/71Game security or game management aspects using secure communication between game devices and game servers, e.g. by encrypting game data or authenticating players
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
    • A63F13/69Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor by enabling or updating specific game elements, e.g. unlocking hidden features, items, levels or versions
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/73Authorising game programs or game devices, e.g. checking authenticity
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/75Enforcing rules, e.g. detecting foul play or generating lists of cheating players
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G07CHECKING-DEVICES
    • G07FCOIN-FREED OR LIKE APPARATUS
    • G07F17/00Coin-freed apparatus for hiring articles; Coin-freed facilities or services
    • G07F17/32Coin-freed apparatus for hiring articles; Coin-freed facilities or services for games, toys, sports, or amusements
    • G07F17/3241Security aspects of a gaming system, e.g. detecting cheating, device integrity, surveillance
    • GPHYSICS
    • G07CHECKING-DEVICES
    • G07FCOIN-FREED OR LIKE APPARATUS
    • G07F17/00Coin-freed apparatus for hiring articles; Coin-freed facilities or services
    • G07F17/32Coin-freed apparatus for hiring articles; Coin-freed facilities or services for games, toys, sports, or amusements
    • G07F17/3286Type of games
    • G07F17/3293Card games, e.g. poker, canasta, black jack
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/123Applying verification of the received information received data contents, e.g. message integrity
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/126Applying verification of the received information the source of the received data
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • 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/3218Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using proof of knowledge, e.g. Fiat-Shamir, GQ, Schnorr, ornon-interactive zero-knowledge proofs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/582Pseudo-random number generators

Landscapes

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

Abstract

게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법이 개시된다. 오라클은 하나 이상의 사용자 시드 데이터 아이템들을 포함하는 시드 데이터 아이템들의 세트; 및 제1 공개 키들의 시퀀스를 포함하고, 각각의 제1 공개 키는 제1 게임 요소들의 세트의 개개의 게임 요소를 표현한다. 오라클은 출력 스크립트를 포함하는 게임 트랜잭션의 출력을 생성한다. 스크립트는 제1 공개 키들의 적어도 일부의 시퀀스를 포함하고, 출력 스크립트는, 실행될 때, 적어도 하나의 의사 난수를 생성하고 승리 키를 선택하도록 구성되고, 의사 난수는 시드 데이터 아이템들의 세트에 기초하고, 제1 승리 공개 키는 의사 난수에 대응하는 제1 공개 키들의 시퀀스 내 포지션의 공개 키이다.

Description

블록체인을 이용한 증명 가능하게 공정한 게임들
본 개시내용은 블록체인을 이용하여 증명 가능하게 공정한 게임들이 플레이되는 것을 가능하게 하기 위해 게임 요소들을 랜덤으로 생성하기 위한 방법들에 관한 것이다.
블록체인은 분산 데이터 구조의 형태를 지칭하며, 여기에서 블록체인의 복제본이 피어-투-피어(Peer-to-Peer; P2P) 네트워크의 복수의 노드들 각각에서 유지된다. 블록체인은 데이터의 블록들의 체인을 포함하며, 각각의 블록은 하나 이상의 트랜잭션들을 포함한다. 각각의 트랜잭션은 하나 이상 블록들에 걸쳐 있을 수 있는 시퀀스에서 선행 트랜잭션을 뒤로 가리킬 수 있다. 트랜잭션들은 "채굴"로 알려진 프로세스에 의해 생성되는 새로운 블록들에 포함되도록 네트워크에 제출될 수 있으며, 이는 복수의 채굴 노드들 각각이 "작업 증명(proof-of-work)", 즉 블록들에 포함되기를 기다리는 보류 중인 트랜잭션들의 풀에 기초하여 암호화 퍼즐의 해결을 수행하기 위해 경쟁하는 것을 수반한다.
종래에는, 블록체인의 트랜잭션들은 디지털 자산, 즉 가치 저장소로서 작용하는 데이터를 전달하는 데 사용된다. 그러나, 블록체인 위에 부가적인 기능성을 준비하기 위해 블록체인이 또한 활용될 수 있다. 예컨대, 블록체인 프로토콜들은 트랜잭션의 출력에의 부가적인 사용자 데이터의 저장을 허용할 수 있다. 현대의 블록체인들은 단일 트랜잭션 내에 저장될 수 있는 최대 데이터 용량을 증가시키고 있어, 보다 복잡한 데이터가 통합되는 것을 가능하게 한다. 예컨대, 이는 블록체인에 전자 문서를 저장하거나, 심지어 오디오 또는 비디오 데이터를 저장하는 데 사용될 수 있다.
네트워크의 각각의 노드는 3개의 역할들: 포워딩, 채굴 및 저장 중 임의의 하나, 둘 또는 모두를 가질 수 있다. 포워딩 노드들은 네트워크의 노드들 전반에 걸쳐 트랜잭션들을 전파시킨다. 채굴 노드들은 블록들 내로의 트랜잭션들의 채굴을 수행한다. 저장 노드들은 블록체인의 채굴된 블록들의 그 자체의 사본을 각각 저장한다. 트랜잭션을 블록체인에 기록하기 위해, 당사자는 트랜잭션을 전파될 네트워크의 노드들 중 하나로 전송한다. 트랜잭션을 수신한 채굴 노드들은 트랜잭션을 새로운 블록 내로 채굴하기 위해 경쟁할 수 있다. 각각의 노드는 트랜잭션이 유효하기 위한 하나 이상의 조건들을 포함하는 동일한 노드 프로토콜을 준수하도록 구성된다. 유효하지 않은 트랜잭션들은 블록들 내로 채굴되거나 전파되지 않을 것이다. 트랜잭션이 유효성 검증되고 그리하여 블록체인 상에서 수락된다고 가정하면, 부가적인 사용자 데이터는 이에 따라 변경 불가능한 공개 레코드로서 P2P 네트워크의 노드들 각각에 저장된 채로 유지된다.
확률 게임은 결과가 일부 랜덤화 디바이스에 의해 강하게 영향을 받고 참가자들이 돈 또는 금전적 가치가 있는 임의의 것을 걸기로 선택할 수 있는 게임이다. 게임의 결과에 영향을 미치는 데 사용되는 일반적인 디바이스들은 주사위, 플레잉 카드들, 룰렛 휠들, 컨테이너에서 드로우되는 번호가 매겨진 공 등을 포함한다. 이러한 게임들은 온라인으로 플레이되는 것이 일반적인데, 즉 게임의 참가자들 중 적어도 일부는 물리적으로 동일한 장소에 로케이팅되지 않는다. 예컨대, 참가자들은 인터넷을 통해 게임을 플레이할 수 있다. 게임들을 온라인으로 호스팅하기 위한 전용 사이트들은 종종 온라인 카지노들로서 지칭된다.
온라인 카지노들(또는 일반적으로, 온라인 게임들)이 갖는 문제는 랜덤화 디바이스의 투명성(및 이에 따른 신뢰)의 부족이다. 즉, 결과가 랜덤성의 정도에 적어도 어느 정도 의존하는 게임에서, 일반적으로 랜덤성의 정도가 어떻게 생성되는지를 참가자들이 아는 것은 가능하지 않다. 따라서 참가자들은 게임이 공정하게 플레이되고 있는지 알 수 없다. 이는 참가자들이 게임 결과에 대해 내기를 할 때(즉, 베팅할 때) 특히 문제가 된다. 예시적인 예로서, 참가자들이 온라인 카지노에서 룰렛을 플레이하는 경우, 참가자들은 카지노가 승리 포지션(즉, 번호)을 공정하게 생성하고 있다는 것을 신뢰해야 한다.
따라서 게임의 결과(들)의 랜덤 생성을 입증하기 위한 기술을 제공하는 것이 바람직할 것이다. 이 경우에, 랜덤 생성은 의사 랜덤 프로세스(통계적으로 랜덤 결과들을 제공하는 결정론적 프로세스)일 것이다.
본원에서 개시된 일 양상에 따르면, 게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법이 제공되며, 게임은 게임의 결과를 결정하는 데 사용되는 제1 게임 요소들의 세트를 포함하고, 게임은 현재 사용자에 의해 플레이되고, 방법은 오라클에 의해 수행되고, 시드 데이터 아이템들의 세트를 획득하는 단계 ― 시드 데이터 아이템들의 세트는 개개의 사용자에 의해 생성된 하나 이상의 사용자 시드 데이터 아이템들을 포함함 ― ; 제1 공개 키들의 시퀀스를 획득하는 단계 ― 각각의 제1 공개 키는 제1 게임 요소들의 세트의 개개의 게임 요소를 표현함 ― ; 게임 트랜잭션의 제1 출력을 생성하는 단계를 포함하고, 제1 출력은 제1 공개 키들 중 적어도 일부의 시퀀스를 포함하는 출력 스크립트를 포함하고, 출력 스크립트는, 실행될 때, 적어도 하나의 제1 의사 난수를 생성하고 적어도 하나의 제1 승리 키를 선택하도록 구성되고, 적어도 하나의 제1 의사 난수는 시드 데이터 아이템들의 세트에 기초하고, 적어도 하나의 제1 승리 공개 키는 적어도 하나의 제1 의사 난수에 대응하는 제1 공개 키들의 시퀀스 내 포지션의 공개 키이다.
여기서, 게임 요소는 게임의 결과를 결정하는 데 사용되는 게임의 임의의 구성요소를 지칭하는 데 사용된다. 예컨대, 게임이 결과를 결정하기 위해 플레잉 카드들의 사용을 수반하는 경우, 플레잉 카드들은 게임 요소들(또는 게임 요소들의 세트의 적어도 일부)이다. 게임이 주사위 또는 주사위들을 수반하는 경우, 주사위 또는 주사위들의 면들(즉, 숫자들)은 게임 요소들(또는 게임 요소들 중 적어도 일부)이다. 게임이 룰렛인 경우, 게임 요소들은 룰렛 휠 상의 숫자들일 수 있다.
오라클(즉, 게임 내로 랜덤성을 도입하는 것을 담당하는 당사자)은 현재 사용자(현재 게임 플레이어)로부터, 의사 난수를 생성하는 데 사용되는 사용자 시드 데이터 아이템을 획득하며, 이 의사 난수는 차례로, 게임의 결과를 결정하는 데 사용된다. 현재 사용자는 자체 시드를 제공하므로, 사용자는 의사 난수가 공정하게 생성되었으며 의사 난수에 기초하여 선택된 승리 게임 요소가 공정하게 선택되었음을 확신할 수 있다. 이제, 사용자가 의사 난수의 생성에 기여하는 것만으로는 충분하지 않다. 대신, 의사 난수의 생성은 그것이 임의의 동의된 규칙들에 따라 생성되었음을 사용자가 체크할 수 있도록 입증되어야 한다. 따라서 오라클은 의사 난수를 생성하고 가능한 모든 게임 요소들(이들은 공개 키들을 사용하여 스크립트에서 표현됨)의 목록으로부터 승리 게임 요소를 선택하기 위한 스크립트를 포함하는 게임 트랜잭션을 생성한다. 오라클은 게임 트랜잭션을 블록체인 및/또는 현재 사용자에게 공개할 수 있어서, 사용자가 승리 공개 키, 및 이에 따른 승리 게임 요소가 어떻게 선택되었는지를 확인할 수 있게 할 수 있다.
본 개시내용의 실시예들의 이해를 보조하기 위해 그리고 그러한 실시예들이 어떻게 실행될 수 있는지를 보여주기 위하여, 단지 예로서 첨부 도면들에 대한 참조가 이루어진다.
도 1은 블록체인을 구현하기 위한 시스템의 개략적인 블록도이다.
도 2는 블록체인에 기록될 수 있는 트랜잭션들의 일부 예들을 개략적으로 예시한다.
도 3은 블록체인을 구현하기 위한 다른 시스템의 개략적인 블록도이다.
도 4는 출력-기반 모델의 노드 프로토콜에 따라 트랜잭션들을 프로세싱하기 위한 노드 소프트웨어 조각의 개략적인 블록도이다.
도 5는 블록체인을 사용하여 증명 가능하게 공정한 게임을 구현하기 위한 시스템의 개략적인 블록도이다.
도 6은 난수 RN을 생성하기 위한 스크립트 <RN>의 예시적인 실행 흐름을 예시한다.
도 7은 승리 공개 키를 선택하기 위한 스크립트 <
Figure pct00001
>의 예시적인 실행 흐름을 예시한다.
예시적인 시스템 개요
도 1은 일반적으로 블록체인(150)을 구현하기 위한 예시적인 시스템(100)을 도시한다. 시스템(100)은 패킷-교환 네트워크(101), 통상적으로 인터넷과 같은 광역 인터네트워크를 포함한다. 패킷-교환 네트워크(101)는 패킷-교환 네트워크(101) 내에서 P2P(peer-to-peer) 오버레이 네트워크(106)를 형성하도록 배열된 복수의 노드들(104)을 포함한다. 각각의 노드(104)는 피어들의 컴퓨터 장비를 포함하며, 노드들(104) 중 상이한 노드들은 상이한 피어들에 속한다. 각각의 노드(104)는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU(central processing unit)들, 가속기 프로세서들, 애플리케이션 특정 프로세서 및/또는 FPGA(field programmable gate array)들을 포함하는 프로세싱 장치를 포함한다. 각각의 노드는 또한 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 포함한다. 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 드라이브(SSD), 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다.
블록체인(150)은 데이터의 블록들의 체인(151)을 포함하며, 블록체인(150)의 개개의 사본이 P2P 네트워크(160)의 복수의 노드들 각각에서 유지된다. 체인의 각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함하며, 여기서 이 맥락에서 트랜잭션은 일종의 데이터 구조를 지칭한다. 데이터 구조의 성질은 트랜잭션 모델 또는 체계(scheme)의 일부로서 사용되는 트랜잭션 프로토콜의 유형에 의존할 것이다. 주어진 블록체인은 통상적으로 전반에 걸쳐 하나의 특정 트랜잭션 프로토콜을 사용할 것이다. 하나의 공통 유형의 트랜잭션 프로토콜에서, 각각의 트랜잭션(152)의 데이터 구조는 적어도 하나의 입력 및 적어도 하나의 출력을 포함한다. 각각의 출력은, 출력이 암호학적으로 잠겨 있는 사용자(103)에 속한 디지털 자산의 양을 표현하는 금액을 지정한다(잠금 해제되고 그리하여 리딤(redeem) 또는 지출되기 위해 그 사용자의 서명을 요구함). 각각의 입력은 선행 트랜잭션(152)의 출력을 뒤로 가리키고, 그리하여 트랜잭션들을 링크한다.
노드들(104) 중 적어도 일부는 트랜잭션들(152)을 포워딩하고 그리하여 전파시키는 포워딩 노드들(104F)의 역할을 맡는다. 노드들(104) 중 적어도 일부는 블록들(151)을 채굴하는 채굴자들(104M)의 역할을 맡는다. 노드들(104) 중 적어도 일부는, 각각이 각자의 메모리에 동일한 블록체인(150)의 개개의 사본을 저장하는 저장 노드들(104S)(때로는 또한 "전체-사본(full-copy)" 노드들이라 칭함)의 역할을 맡는다. 각각의 채굴자 노드(104M)는 또한 블록(151) 내로 채굴되기를 기다리는 트랜잭션들(152)의 풀(154)을 유지한다. 주어진 노드(104)는 포워딩 노드(104), 채굴자(104M), 저장 노드(104S) 또는 이들 중 2개 또는 모두의 임의의 조합일 수 있다.
주어진 현재 트랜잭션(152j)에서, 그(또는 각각의) 입력은 그러한 출력이 현재 트랜잭션(152j)에서 "지출"되거나 리딤됨을 지정하도록 트랜잭션들의 시퀀스에서 선행 트랜잭션(152i)의 출력을 참조하는 포인터를 포함한다. 일반적으로, 선행 트랜잭션은 풀(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)일 수 있음) 사이에서 입력 금액을 분할하기 위해 다수의 출력들을 가질 수 있다. 일부 경우들에서, 트랜잭션은 또한 하나 이상의 선행 트랜잭션들의 다수의 출력들로부터 금액들을 수집하고 현재 트랜잭션의 하나 이상의 출력들에 재분배하기 위해 다수의 입력들을 가질 수 있다.
위의 내용은 "출력-기반" 트랜잭션 프로토콜로서 지칭될 수 있으며, 때로는 또한 미지출 트랜잭션 출력(unspent transaction output; UTXO) 유형 프로토콜(여기서 출력들은 UTXO들로서 지칭됨)로서 지칭된다. 사용자의 총 잔고는 블록체인에 저장된 임의의 하나의 숫자에서 정의되지 않으며, 대신 사용자는 블록체인(151)의 다수의 상이한 트랜잭션들(152) 전반에 걸쳐 흩어져 있는 그 사용자의 모든 UTXO들의 값들을 대조하기 위해 특별한 "지갑" 애플리케이션(105)을 필요로 한다.
트랜잭션 프로토콜의 대안적인 유형은 계정-기반 트랜잭션 모델의 일부로서 "계정-기반" 프로토콜로서 지칭될 수 있다. 계정-기반의 경우에, 각각의 트랜잭션은 과거 트랜잭션들의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하기 보다는, 절대 계정 잔액을 참조함으로써 전달될 금액을 정의한다. 모든 계정들의 현재 상태는 블록체인과 별개로 채굴자들에 의해 저장되며 지속적으로 업데이트된다. 이러한 시스템에서, 트랜잭션들은 (또한 "포지션"이라 불리는) 계정의 실행 중인 트랜잭션 총계를 사용하여 순서화된다. 이 값은 그의 암호화 서명의 일부로 발신인에 의해 서명되고 트랜잭션 참조 계산의 부분으로서 해시된다. 게다가, 선택적 데이터 필드가 또한 트랜잭션에 서명할 수 있다. 이 데이터 필드는 예컨대, 이전 트랜잭션 ID가 데이터 필드에 포함된 경우 이전 트랜잭션을 뒤로 가리킬 수 있다.
어느 유형의 트랜잭션 프로토콜이든, 사용자(103)가 새로운 트랜잭션(152j)을 시행(enact)하기를 원할 때, 그/그녀는 자신의 컴퓨터 단말(102)로부터 P2P 네트워크(106)의 노드들(104) 중 하나(이는 최근에는 통상적으로 서버들 또는 데이터 센터이지만, 원칙적으로 다른 사용자 단말들일 수 있음)로 새로운 트랜잭션을 전송한다. 이 노드(104)는 노드들(104) 각각에 적용되는 노드 프로토콜에 따라 트랜잭션이 유효한지를 체크한다. 노드 프로토콜의 세부사항들은 해당 블록체인(150)에서 사용되는 트랜잭션 프로토콜의 유형에 대응하며, 전체 트랜잭션 모델을 함께 형성한다. 노드 프로토콜은 통상적으로 노드(104)가 새로운 트랜잭션(152j)의 암호화 서명이 예상되는 서명과 매칭되는지를 체크하도록 요구하며, 이는 트랜잭션들(152)의 순서화된 시퀀스에서 이전 트랜잭션(152i)에 의존한다. 출력-기반의 경우에, 이는 새로운 트랜잭션(152j)의 입력에 포함된 사용자의 암호화 서명이 새로운 트랜잭션이 지출하는 선행 트랜잭션(152i)의 출력에 정의된 조건과 매칭되는지를 체크하는 것을 포함하며, 여기에서 이 조건은 통상적으로 적어도 새로운 트랜잭션(152j)의 입력의 암호화 서명이 새로운 트랜잭션의 입력이 가리키는 이전 트랜잭션(152i)의 출력을 잠금 해제한다는 것을 체크하는 것을 포함한다. 일부 트랜잭션 프로토콜들에서, 조건은 입력 및/또는 출력에 포함된 사용자 정의 스크립트(custom script)에 의해 적어도 부분적으로 정의될 수 있다. 대안적으로 이는 단순히 노드 프로토콜만으로 고정되거나, 이들의 조합으로 인한 것일 수 있다. 어느 쪽이든, 새로운 트랜잭션(152j)이 유효한 경우, 현재 노드는 이를 P2P 네트워크(106)의 노드들(104) 중 하나 이상의 다른 노드들에 포워딩한다. 이러한 노드(104) 중 적어도 일부는 또한 포워딩 노드(104F)로서 작용하여, 동일한 노드 프로토콜에 따른 동일한 테스트를 적용하고, 이에 따라 새로운 트랜잭션(152j)을 하나 이상의 추가 노드들(104)로 포워딩하는 식이다. 이러한 방식으로, 새로운 트랜잭션은 노드들(104)의 네트워크 전반에 걸쳐 전파된다.
출력-기반 모델에서, 주어진 출력(예컨대, UTXO)이 지출되는지 여부에 대한 정의는 그것이 노드 프로토콜에 따라 다른 전방 트랜잭션(152j)의 입력에 의해 유효하게 리딤되었는지의 여부이다. 트랜잭션이 유효하기 위한 다른 조건은 지출 또는 리딤을 시도하는 선행 트랜잭션(152i)의 출력이 다른 유효한 트랜잭션에 의해 이미 지출/리딤되지 않은 것이다. 재차, 유효하지 않은 경우, 트랜잭션(152j)은 블록체인에 기록되거나 전파되지 않을 것이다. 이는 지출자가 동일한 트랜잭션의 출력을 한번 초과로 지출하고자 시도하는 이중-지출을 경계한다. 반면, 계정-기반 모델은 계정 잔액을 유지함으로써 이중-지출을 경계한다. 재차, 트랜잭션들의 정의된 순서가 존재하기 때문에, 계정 잔액은 임의의 한 시간에 단일의 정의된 상태를 갖는다.
유효성 검증에 추가하여, 노드들(104M) 중 적어도 일부는 또한 채굴로서 알려진 프로세스에서 트랜잭션들의 블록들을 최초로 생성하기 위해 경쟁하며, 이는 "작업 증명"에 의해 뒷받침된다. 채굴 노드(104M)에서, 아직 블록에 나타나지 않은 유효한 트랜잭션들의 풀에 새로운 트랜잭션들이 추가된다. 그 후, 채굴자들은 암호화 퍼즐을 해결하도록 시도함으로써 트랜잭션들의 풀(154)로부터 트랜잭션들(152)의 새로운 유효한 블록(151)을 조립하기 위해 경쟁한다. 통상적으로 이는 "논스(nonce)"가 트랜잭션들(154)의 풀과 컨케티네이팅되고(concatenated) 해시될 때, 해시의 출력이 미리 결정된 조건을 충족시키도록 논스 값을 검색하는 것을 포함한다. 예컨대, 미리 결정된 조건은 해시의 출력이 미리 정의된 특정 수의 선행 0들을 갖는 것일 수 있다. 해시 함수의 특성은 해시 함수가 그의 입력에 대해 예측 불가능한 출력을 갖는다는 것이다. 따라서 이 검색은 무차별 대입(brute force)에 의해서만 수행될 수 있고, 이에 따라 퍼즐을 해결하고자 하는 각각의 노드(104M)에서 상당한 양의 프로세싱 자원을 소비한다.
퍼즐을 해결하고자 하는 제1 채굴자 노드(104M)는 이를 네트워크(106)에 발표하고, 그 해(solution)를 증명으로서 제공하며, 이는 그 후 네트워크의 다른 노드(104)들에 의해 쉽게 체크될 수 있다(해시에 대한 해가 주어지면, 그 해가 해시의 출력으로 하여금 조건을 충족시키게 한다는 것을 체크하는 것은 간단함). 승자가 퍼즐을 해결한 트랜잭션들의 풀(154)은 각각의 그러한 노드에서 승자의 발표된 해를 체크한 것에 기초하여, 저장 노드들(104S)로서 작용하는 노드들(104) 중 적어도 일부에 의해 블록체인(150)에 새로운 블록(151)으로서 기록된다. 블록 포인터(155)가 또한 체인에서 이전에 생성된 블록(151n-1)을 뒤로 가리키는 새로운 블록(151n)에 할당된다. 작업 증명은 새로운 블록(151)을 생성하는 데 대량의 노력이 필요하므로 이중 지출의 위험을 감소시키는데 도움이 되고, 이중 지출을 포함하는 임의의 블록은 다른 노드들(104)에 의해 거부될 가능성이 높기 때문에, 채굴 노드들(104M)은 이중 지출들이 그의 블록들에 포함되는 것을 허용하지 않도록 장려된다. 일단 생성되면, 블록(151)은 수정될 수 없는데, 그 이유는 그것이 동일한 프로토콜에 따라 P2P 네트워크(106)의 저장 노드들(104S) 각각에서 인식 및 유지되기 때문이다. 블록 포인터(155)는 또한 블록들(151)에 순차적인 순서를 부과한다. 트랜잭션들(152)은 P2P 네트워크(106)의 각각의 저장 노드(104S)에서 순서화된 블록들에 기록되기 때문에, 이는 이에 따라, 트랜잭션들의 변경 불가능한 공개 원장을 제공한다.
임의의 주어진 시간에 퍼즐을 해결하기 위해 경쟁하는 상이한 채굴자들(104M)은, 해의 검색을 시작한 시기에 의존하여, 임의의 주어진 시간에 채굴되지 않은 트랜잭션 풀(154)의 상이한 스냅샷들에 기초하여 퍼즐을 해결다는 것에 주의한다. 누구든 각자의 퍼즐을 먼저 해결하는 사람은 어느 트랜잭션들(152)이 다음의 새로운 블록(151n)에 포함되는지를 정의하고, 채굴되지 않은 트랜잭션들의 현재 풀(154)은 업데이트된다. 그 후 채굴자들(104M)은 새롭게 정의된 미해결 풀(154)로부터 블록을 생성하기 위해 계속 경쟁하며, 이와 같이 계속된다. 발생할 수 있는 임의의 "포크(fork)" ― 이는 2개의 채굴자들(104M)이 서로 매우 짧은 시간 내에 그의 퍼즐을 해결하여서, 블록체인에 대한 상충되는 뷰(view)가 전파되는 경우임 ― 를 해결하기 위한 프로토콜이 또한 존재한다. 요컨대, 가장 길게 성장하는 포크의 갈래가 확정적인 블록체인(150)이 된다.
대부분의 블록체인들에서, (한 사용자로부터 다른 사용자에게 디지털 자산의 금액을 전달하는 일반 트랜잭션들과 대조적으로) 승리한 채굴자(104M)는 새로운 수량의 디지털 자산을 어디에선지 모르게 생성하는 특별한 종류의 새로운 트랜잭션으로 자동으로 보상된다. 따라서 승리한 노드는 일정 수량의 디지털 자산을 "채굴"한 것으로 여겨진다. 이 특별한 유형의 트랜잭션은 때로는 "생성(generation)" 트랜잭션으로서 지칭된다. 이는 새로운 블록(151n)의 부분을 자동으로 형성한다. 이 보상은 채굴자들(104M)이 작업 증명 경쟁에 참여하도록 하는 인센티브를 제공한다. 종종 일반(비-생성) 트랜잭션(152)이 또한 그 트랜잭션이 포함된 블록(151n)을 생성한 승리한 채굴자(104M)를 추가로 보상하기 위해, 그의 출력들 중 하나에 부가적인 트랜잭션 수수료를 지정할 것이다.
채굴에 수반되는 계산 자원으로 인해, 통상적으로 적어도 채굴자 노드들(104M) 각각은 하나 이상의 물리적 서버 유닛들, 또는 심지어 전체 데이터 센터를 포함하는 서버의 형태를 취한다. 각각의 포워딩 노드(104M) 및/또는 저장 노드(104S)는 또한 서버 또는 데이터 센터의 형태를 취할 수 있다. 그러나 원칙적으로 임의의 주어진 노드(104)는 사용자 단말 또는 함께 네트워킹된 사용자 단말들의 그룹의 형태를 취할 수 있다.
각각의 노드(104)의 메모리는 노드 프로토콜에 따라 각자의 역할 또는 역할들을 수행하고 트랜잭션들(152)을 처리하기 위해 노드(104)의 프로세싱 장치 상에서 실행되도록 구성된 소프트웨어를 저장한다. 본원에서 노드(104)에 기인한 임의의 동작은 각자의 컴퓨터 장비의 프로세싱 장치 상에서 실행되는 소프트웨어에 의해 수행될 수 있다는 것이 이해될 것이다. 또한, 본원에서 사용하는 바와 같은 "블록체인"이라는 용어는 일반적으로 기술의 종류를 지칭하는 일반 용어이며, 임의의 특정 사유 블록체인, 프로토콜 또는 서비스로 제한하지 않는다.
또한 네트워크(101)에는 소비 사용자들의 역할을 하는 복수의 당사자들(103) 각각의 컴퓨터 장비(102)가 연결되어 있다. 이들은 트랜잭션들에서 지급인들 및 수취인들로서 작용하지만, 다른 당사자들을 대신하여 트랜잭션들을 채굴하거나 전파시키는 데 반드시 참여할 필요는 없다. 이들은 반드시 채굴 프로토콜을 실행할 필요는 없다. 제1 당사자(103a) 및 그/그녀의 개개의 컴퓨터 장비(102a) 및 제2 당사자(103b) 및 그/그녀의 개개의 컴퓨터 장비(102b)인 두 당사자들(103) 및 이들의 개개의 장비(102)가 예시 목적으로 도시된다. 훨씬 더 많은 이러한 당사자들(103) 및 이들의 개개의 컴퓨터 장비(102)가 존재하고 시스템에 참여할 수 있지만, 편의상 그것들은 예시되지 않는다는 것이 이해될 것이다. 각각의 당사자(103)는 개인 또는 조직일 수 있다. 순전히 예시로서, 제1 당사자(103a)는 본원에서 앨리스(Alice)로서 지칭되고 제2 당사자(103b)는 밥(Bob)으로서 지칭되지만, 이것이 제한적이지 않고 본원에서 앨리스 또는 밥에 대한 임의의 참조는 각각 "제1 당사자" 및 "제2 당사자"로 대체될 수 있다는 것이 인지될 것이다.
각각의 당사자(103)의 컴퓨터 장비(102)는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU들, GPU들, 다른 가속기 프로세서들, 애플리케이션 특정 프로세서들 및/또는 FPGA들을 포함하는 개개의 프로세싱 장치를 포함한다. 각각의 당사자(103)의 컴퓨터 장비(102)는 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다. 각각의 당사자(103)의 컴퓨터 장비(102) 상의 메모리는 프로세싱 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션(105)의 개개의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 당사자(103)에 기인한 임의의 동작은 개개의 컴퓨터 장비(102)의 프로세싱 장치 상에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것이 이해될 것이다. 각각의 당사자(103)의 컴퓨터 장비(102)는 적어도 하나 사용자 단말, 예컨대, 데스크 톱 또는 랩톱 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 디바이스를 포함한다. 주어진 당사자(103)의 컴퓨터 장비(102)는 또한 사용자 단말을 통해 액세스되는 클라우드 컴퓨팅 자원들과 같은 하나 이상의 다른 네트워킹된 자원들을 포함할 수 있다.
예컨대, 서버로부터 다운로드되거나, 또는 이동식 저장 디바이스 이를테면, 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, 광학 디스크 이를테면, CD 또는 DVD ROM 또는 이동식 광학 드라이브 등 상에서 제공되는 클라이언트 애플리케이션 또는 소프트웨어(105)는 적절한 컴퓨터-판독 가능 저장 매체 또는 매체들 상에서 임의의 주어진 당사자(103)의 컴퓨터 장비(102)에 초기에 제공될 수 있다.
클라이언트 애플리케이션(105)은 적어도 "지갑" 기능을 포함한다. 이는 2개의 메인 기능성들을 갖는다. 이들 중 하나는 개개의 사용자 당사자(103)가 노드들(104)의 네트워크 전반에 전파되고 그리하여 블록체인(150)에 포함될 트랜잭션들(152)을 생성, 서명 및 전송하는 것을 가능하게 하는 것이다. 남은 하나는 개개의 당사자에게 자신이 현재 소유하고 있는 디지털 자산의 금액을 다시 보고하는 것이다. 출력-기반 시스템에서, 이 제2 기능성은 블록체인(150) 전반에 걸쳐 흩어져 있는 해당 당사자에 속하는 다양한 트랜잭션들(152)의 출력들에서 정의된 금액들을 대조하는 것을 포함한다.
각각의 컴퓨터 장비(102) 상의 클라이언트 애플리케이션(105)의 인스턴스는 P2P 네트워크(106)의 포워딩 노드들(104F) 중 적어도 하나에 동작 가능하게 커플링된다. 이는 클라이언트(105)의 지갑 기능이 트랜잭션들(152)을 네트워크(106)로 전송하는 것을 가능하게 한다. 클라이언트(105)는 또한 개개의 당사자(103)가 수령인인 임의의 트랜잭션들에 대해 블록체인(150)에 질의하기 위해(또는 실시예들에서, 블록체인(150)은 그의 공개 가시성을 통해 부분적으로 트랜잭션들의 신뢰를 제공하는 공공 시설(public facility)이므로, 실제로 블록체인(150)에서 다른 당사자들의 트랜잭션을 검사하기 위해) 저장 노드들(104) 중 하나, 일부 또는 전부에 접촉할 수 있다. 각각의 컴퓨터 장비(102) 상의 지갑 기능은 트랜잭션 프로토콜에 따라 트랜잭션들(152)을 공식화(formulate) 하고 전송하도록 구성된다. 각각의 노드(104)는 노드 프로토콜에 따라 트랜잭션들(152)을 유효성 검증하도록, 그리고 포워딩 노드(104F)의 경우에는 네트워크(106) 전반에 걸쳐 트랜잭션들(152)을 포워딩하도록 구성된 소프트웨어를 실행한다. 트랜잭션 프로토콜 및 노드 프로토콜은 서로 대응하며, 주어진 트랜잭션 프로토콜은 주어진 트랜잭션 모델을 함께 구현하도록 주어진 노드 프로토콜을 따른다. 블록체인(150)의 모든 트랜잭션들(152)에 대해 동일한 트랜잭션 프로토콜이 사용된다(그러나 트랜잭션 프로토콜은 그 내부에서 상이한 하위유형들의 트랜잭션을 허용할 수 있음). 동일한 노드 프로토콜이 네트워크(106)의 모든 노드들(104)에 의해 사용된다(그러나 이는 해당 하위유형에 대해 정의된 규칙들에 따라 상이한 하위유형들의 트랜잭션을 상이하게 처리할 수 있으며, 또한 상이한 노드들은 상이한 역할들을 맡고 이에 따라 프로토콜의 상이한 대응하는 양상들을 구현할 수 있음).
언급된 바와 같이, 블록체인(150)은 블록들의 체인(151)을 포함하며, 여기서 각각의 블록(151)은 이전에 논의된 바와 같이 작업 증명 프로세스에 의해 생성된 하나 이상의 트랜잭션들(152)의 세트를 포함한다. 각각의 블록(151)은 또한 블록들(151)에 대한 순차적인 순서를 정의하기 위해 체인에서 이전에 생성된 블록(151)을 뒤로 가리키는 블록 포인터(155)를 포함한다. 블록체인(150)은 또한 작업 증명 프로세스에 의해 새로운 블록에 포함되기를 기다리는 유효 트랜잭션들의 풀(154)을 포함한다. (생성 트랜잭션 외의) 각각의 트랜잭션(152)은 트랜잭션들의 시퀀스들에 대한 순서를 정의하기 위해 이전 트랜잭션에 대한 역 포인터를 포함한다(트랜잭션들(152)의 시퀀스들은 분기가 허용됨을 주의함). 블록들의 체인(151)은 체인의 최초 블록이었던 제네시스(genesis) 블록(Gb)(153)까지 완전히 거슬러 올라간다. 체인(150) 초반의 하나 이상의 오리지널 트랜잭션들(152)은 선행 트랜잭션이 아닌 제네시스 블록(153)을 가리켰다.
주어진 당사자(103), 이를테면 앨리스가 블록체인(150)에 포함될 새로운 트랜잭션(152j)을 전송하기를 원할 때, 그녀는 (자신의 클라이언트 애플리케이션(105)의 지갑 기능을 사용하여) 관련 트랜잭션 프로토콜에 따라 새로운 트랜잭션을 공식화한다. 그 후, 그녀는 클라이언트 애플리케이션(105)으로부터 그녀가 연결되는 하나 이상의 포워딩 노드들(104F) 중 하나로 트랜잭션(152)을 전송한다. 예컨대, 이는 앨리스의 컴퓨터(102)에 가장 가깝거나 가장 잘 연결된 포워딩 노드(104F)일 수 있다. 임의의 주어진 노드(104)가 새로운 트랜잭션(152j)을 수신할 때, 주어진 노드는 노드 프로토콜 및 각자의 역할에 따라 이를 처리한다. 이는 새로 수신된 트랜잭션(152j)이 "유효"하기 위한 특정 조건을 충족시키는지를 먼저 체크하는 것을 포함하며, 그의 예들은 곧 보다 자세히 논의될 것이다. 일부 트랜잭션 프로토콜들에서, 유효성 검증을 위한 조건은 트랜잭션들(152)에 포함된 스크립트들에 의해 트랜잭션 단위로 구성 가능할 수 있다. 대안적으로, 조건은 단순히 노드 프로토콜의 내장 피처이거나, 스크립트 및 노드 프로토콜의 조합으로 정의될 수 있다.
새로 수신된 트랜잭션(152j)이 유효한 것으로 간주되기 때문에 테스트를 통과한다는 것을 조건으로(즉, 그것이 "유효성 검증"된다는 조건으로), 트랜잭션(152j)을 수신하는 임의의 저장 노드(104S)는 새로운 유효성 검증된 트랜잭션(152)을 그 노드(104S)에서 유지되는 블록체인(150)의 사본의 풀(154)에 추가할 것이다. 또한, 트랜잭션(152j)을 수신하는 임의의 포워딩 노드(104F)는 유효성 검증된 트랜잭션(152)을 P2P 네트워크(106)의 하나 이상의 다른 노드들(104)로 전방으로 전파시킬 것이다. 각각의 포워딩 노드(104F)가 동일한 프로토콜을 적용하기 때문에, 트랜잭션(152j)이 유효하다고 가정하면, 이는 그것이 곧 전체 P2P 네트워크(106)에 걸쳐 전파될 것임을 의미한다.
하나 이상의 저장 노드들(104)에서 유지되는 블록체인(150)의 사본의 풀(154)에 허여되면, 채굴자 노드들(104M)은 새로운 트랜잭션(152)을 포함하는 풀(154)의 최신 버전에서 작업 증명 퍼즐을 해결하기 위해 경쟁하기 시작할 것이다(다른 채굴자들(104M)은 풀(154)의 구 뷰(old view)에 기초하여 퍼즐을 해결하고자 여전히 시도할 수 있지만, 누구든 먼저 도달한 사람이 다음 새로운 블록(151)이 끝나고 새로운 풀(154)이 시작되는 곳을 정의할 것이며, 결국 누군가가 앨리스의 트랜잭션(152j)을 포함하는 풀(154)의 부분에 대한 퍼즐을 해결할 것임). 새로운 트랜잭션(152j)을 포함하는 풀(154)에 대한 작업 증명이 완료되면, 이는 변경 불가능하게 블록체인(150)의 블록들(151) 중 하나의 부분이 된다. 각각의 트랜잭션(152)은 이전 트랜잭션에 대한 역 포인터를 포함하여서, 트랜잭션들의 순서가 또한 변경 불가능하게 기록된다.
UTXO-기반 모델
도 2는 예시적인 트랜잭션 프로토콜을 예시한다. 이는 UTXO-기반 프로토콜의 예이다. 트랜잭션(152)(약칭 "Tx")은 블록체인(150)의 기본 데이터 구조이다(각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함함). 다음은 출력-기반 또는 "UTXO" 기반 프로토콜을 참조하여 설명될 것이다. 그러나 이것은 모든 가능한 실시예들로 제한되지 않는다.
UTXO-기반 모델에서, 각각의 트랜잭션("Tx")(152)은 하나 이상의 입력들(202) 및 하나 이상의 출력들(203)을 포함하는 데이터 구조를 포함한다. 각각의 출력(203)은 (UTXO가 아직 리딤되지 않은 경우) 다른 새로운 트랜잭션의 입력(202)에 대한 소스로서 사용될 수 있는 미지출 트랜잭션 출력(UTXO)을 포함할 수 있다. UTXO는 디지털 자산(가치의 저장소)의 금액을 지정한다. 이는 또한 다른 정보 중에서, 그것이 발생한 트랜잭션의 트랜잭션 ID를 포함할 수 있다. 트랜잭션 데이터 구조는 또한 입력 필드(들)(202) 및 출력 필드(들)(203)의 크기의 표시자를 포함할 수 있는 헤더(201)를 포함할 수 있다. 헤더(201)는 또한 트랜잭션의 ID를 포함할 수 있다. 실시예들에서, 트랜잭션 ID는 (트랜잭션 ID 자체는 제외한) 트랜잭션 데이터의 해시이고 채굴자들(104M)에게 제출된 원시 트랜잭션(152)의 헤더(201)에 저장된다.
도 2의 각각의 출력이 UTXO로서 도시되지만, 트랜잭션은 부가적으로 또는 대안적으로 하나 이상의 지출 불가능한 트랜잭션 출력들을 포함할 수 있다.
앨리스(103a)가 해당 디지털 자산의 금액을 밥(103b)에게 전달하는 트랜잭션(152j)을 생성하기를 원한다고 하자. 도 2에서 앨리스의 새로운 트랜잭션(152j)은 "Tx1"로서 라벨이 지정된다. 이는 시퀀스의 선행 트랜잭션(152i)의 출력(203)에서 앨리스에게 잠긴 디지털 자산의 금액을 취하고, 이 중 적어도 일부를 밥에게 전달한다. 선행 트랜잭션(152i)은 도 2에서 "Tx0"로 라벨이 지정된다. Tx0 및 Tx1은 임의의 라벨일 뿐이다. 이들은, Tx0이 블록체인(151)의 최초 트랜잭션이거나, Tx1이 풀(154)에서 바로 다음 트랜잭션이라는 것을 반드시 의미하지는 않는다. Tx1은 앨리스에게 잠긴 미지출 출력(203)을 여전히 갖는 임의의 선행(즉, 앞선) 트랜잭션을 뒤로 가리킬 수 있다.
선행 트랜잭션(Tx0)은 앨리스가 자신의 새로운 트랜잭션(Tx1)을 생성할 때, 또는 적어도 그녀가 그것을 네트워크(106)에 전송할 때까지 이미 유효성 검증되고 블록체인(150)에 포함되었을 수 있다. 이는 그 시간에 이미 블록들(151) 중 하나에 포함되었거나, 풀(154)에서 여전히 대기 중일 수 있으며, 이 경우에 곧 새로운 블록(151)에 포함될 것이다. 대안적으로 Tx0 및 Tx1이 생성되고 네트워크(102)에 함께 전송될 수 있거나, 또는 노드 프로토콜이 "고아(orphan)" 트랜잭션들을 버퍼링하도록 허용하는 경우 Tx0는 Tx1 이후에도 전송될 수 있다. 트랜잭션들의 시퀀스의 맥락에서 본원에서 사용된 바와 같은 "선행" 및 "후속"이라는 용어들은 (트랜잭션이 다른 트랜잭션을 뒤로 가리키고, 이와 같이 계속되는) 트랜잭션들에서 지정된 트랜잭션 포인터들에 의해 정의된 바와 같은 시퀀스에서의 트랜잭션들의 순서를 지칭한다. 이들은 "선행자(predecessor)" 및 "후행자(successor)", 또는 "앞선(antecedent)"과 "후위의(descendant)", "부모" 및 "자식" 등으로 동등하게 대체될 수 있다. 이는 그것들이 생성되고, 네트워크(106)로 전송되거나, 임의의 주어진 노드(104)에 도달하는 순서를 반드시 의미하지는 않는다. 그럼에도 불구하고, 선행 트랜잭션(앞선 트랜잭션 또는 "부모")을 가리키는 후속 트랜잭션(후위의 트랜잭션 또는 "자식")은 부모 트랜잭션이 유효성 검증될 때까지 그리고 유효성 검증되지 않는 한 유효성 검증되지 않을 것이다. 그의 부모 이전에 노드(104)에 도달하는 자식은 고아로 간주된다. 이는 노드 프로토콜 및/또는 채굴자 거동에 의존하여 부모를 기다리기 위해 특정 시간 동안 버퍼링되거나 폐기될 수 있다.
선행 트랜잭션(Tx0)의 하나 이상의 출력들(203) 중 하나는, 본원에서 UTXO0으로서 라벨이 지정되는 특정 UTXO를 포함한다. 각각의 UTXO는 UTXO에 의해 표현되는 디지털 자산의 금액을 지정하는 값 및 후속 트랜잭션이 유효성 검증되고 따라서 UTXO가 성공적으로 리딤되기 위하여 후속 트랜잭션의 입력(202)에서 잠금 해제 스크립트에 의해 만족되어야 하는 조건을 정의하는 잠금 스크립트를 포함한다. 통상적으로, 잠금 스크립트는 특정 당사자(그것이 포함된 트랜잭션의 수혜자)에게로 금액을 잠근다. 즉, 잠금 스크립트는, 통상적으로 후속 트랜잭션의 입력의 잠금 해제 스크립트가 선행 트랜잭션이 잠겨 있는 당사자의 암호화 서명을 포함하는 조건을 포함하는 잠금 해제 조건을 정의한다.
잠금 스크립트(일명 scriptPubKey)는 노드 프로토콜에 의해 인식되는 도메인 특정 언어로 작성된 코드 조각이다. 이러한 언어의 특정 예는 "스크립트(Script)"(대문자 S)라 불린다. 잠금 스크립트는 트랜잭션 출력(203)을 지출하는 데 어떤 정보가 필요한지, 예컨대, 앨리스의 서명 요건을 지정한다. 잠금 해제 스크립트들은 트랜잭션들의 출력에서 나타난다. 잠금 해제 스크립트(일명 scriptSig)는 잠금 스크립트 기준들을 충족시키는 데 필요한 정보를 제공하는 도메인 특정 언어로 작성된 코드 조각이다. 예컨대, 이는 밥의 서명을 포함할 수 있다. 잠금 해제 스크립트들은 트랜잭션들의 입력(202)에 나타난다.
따라서 예시된 예에서, Tx0의 출력(203)의 UTXO0은 UTXO0가 리딤되기 위해(엄밀히, UTXO0을 리딤하고자 시도하는 후속 트랜잭션이 유효하기 위해) 앨리스의 서명 Sig PA를 요구하는 잠금 스크립트 [Checksig PA]를 포함한다. [Checksig PA]는 앨리스의 공개-개인 키 쌍으로부터의 공개 키 PA를 포함한다. Tx1의 입력(202)은 (예컨대, 실시예에서, 전체 트랜잭션 Tx0의 해시인 그의 트랜잭션 ID인 TxID0에 의해) Tx1을 뒤로 가리키는 포인터를 포함한다. Tx1의 입력(202)은 Tx0 내에서 UTXO0을 식별하는 인덱스를 포함하여, Tx0의 임의의 다른 가능한 출력들 사이에서 그것을 식별한다. Tx1의 입력(202)은 앨리스의 암호화 서명을 포함하는 잠금 해제 스크립트 <Sig PA>를 더 포함하며, 이는 앨리스가 키 쌍으로부터 자신의 개인 키를 데이터의 미리 정의된 부분(때로는 암호화에서 "메시지"라 불림)에 적용함으로써 생성된다. 유효한 서명을 제공하기 위해 앨리스에 의해 서명될 필요가 있는 데이터(또는 "메시지")는 잠금 스크립트, 노드 프로토콜 또는 이들의 조합에 의해 정의될 수 있다.
새로운 트랜잭션 Tx1이 노드(104)에 도달할 때, 노드는 노드 프로토콜을 적용한다. 이는 잠금 해제 스크립트가 잠금 스크립트에 정의된 조건(이 조건은 하나 이상의 기준들을 포함할 수 있음)을 충족시키는지를 체크하기 위해 잠금 스크립트 및 잠금 해제 스크립트를 함께 실행하는 것을 포함한다. 실시예들에서, 이는 2개의 스크립트들을 컨케터네이팅(concatenating)하는 것을 수반한다.
Figure pct00002
여기에서 "||"는 컨케터네이션을 표현하고 "<...>"는 스택 상에 데이터를 배치하는 것을 의미하고, "[…]"는 잠금 해제 스크립트(이 예에서, 스택-기반 언어)에 의해 구성된 함수이다. 동등하게, 스크립트들을 컨케터네이팅하는 대신, 스크립트들은 공통 스택을 사용하여 차례로 실행될 수 있다. 어느 쪽이든, 함께 실행될 때, 스크립트들은 Tx0의 출력의 잠금 스크립트에 포함된 바와 같은 앨리스의 공개 키 PA를 사용하여, Tx1의 입력의 잠금 스크립트가 데이터의 예상되는 부분에 서명하는 앨리스의 서명을 포함한다는 것을 인증한다. 이 인증을 수행하기 위하여 데이터의 예상되는 부분 자체("메시지")가 또한 Tx0에 포함될 필요가 있다. 실시예들에서, 서명된 데이터는 Tx0 전체를 포함한다(이에 따라, 평문으로 데이터의 서명된 부분을 지정하는 별개의 요소가 포함될 필요가 있는데, 그 이유는 이것이 이미 본질적으로 존재하기 때문임).
공개-개인 암호화에 의한 인증의 세부사항들은 당업자에게 친숙할 것이다. 기본적으로, 앨리스가 자신의 개인 키로 메시지를 암호화함으로써 그 메시지에 서명한 경우, 앨리스의 공개 키 및 평문의 일반 메시지(암호화되지 않은 메시지)를 감안하여, 노드(104)와 같은 다른 엔티티는 암호화된 버전의 메시지가 앨리스에 의해 서명된 것임이 틀림없다는 것을 인증할 수 있다. 서명은 통상적으로 메시지를 해시하는 것, 해시에 서명하는 것, 그리고 이를 서명으로서 메시지의 평문 버전에 태깅하고, 이에 따라 공개 키의 임의의 보유자(holder)가 서명을 인증하는 것을 가능하게 하는 것을 포함한다.
Tx1의 잠금 해제 스크립트가 Tx0의 잠금 스크립트에 지정된 하나 이상의 조건들을 충족시키는 경우(이에 따라, 보여진 예에서, 앨리스의 서명이 Tx1에서 제공되고 인증된 경우), 노드(104)는 Tx1이 유효한 것으로 간주한다. 그것이 채굴 노드(104M)인 경우, 이는 그것이 작업 증명을 기다리는 트랜잭션들의 풀(154)에 추가될 것임을 의미한다. 그것이 포워딩 노드(104F)인 경우, 트랜잭션 Tx1을 네트워크(106)의 하나 이상의 다른 노드들(104)로 전달하여서, 그 트랜잭션이 네트워크에 걸쳐 전파될 것이다. Tx1이 유효성 검증되고 블록체인(150)에 포함되면, 이는 지출된 것으로 Tx0으로부터의 UTXO0를 정의한다. Tx1은 그것이 미지출 트랜잭션 출력(203)을 지출하는 경우에만 유효할 수 있다는 것에 주의한다. 다른 트랜잭션(152)에 의해 이미 지출된 출력을 지출하려고 시도하는 경우, 다른 모든 조건들이 충족되는 경우 조차도 Tx1은 유효하지 않을 것이다. 따라서 노드(104)는 또한 선행 트랜잭션 Tx0에서 참조된 UTXO가 이미 지출되었는지(다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지)를 체크할 필요가 있다. 이는 트랜잭션들(152) 상에 정의된 순서를 부과하는 것이 블록체인(150)에 대해 중요한 하나의 이유이다. 실제로 주어진 노드(104)는 트랜잭션들(152)이 지출된 UTXO들(203)을 마킹하는 별개의 데이터베이스를 유지할 수 있지만, 궁극적으로 UTXO가 지출되었는지를 정의하는 것은 블록체인(150)의 다른 유효한 트랜잭션에 대한 유효한 입력이 이미 형성되었는지의 여부이다.
UTXO-기반 트랜잭션 모델에서, 주어진 UTXO는 전체로서 지출될 필요가 있다는 것에 주의한다. 다른 프랙션(fraction)이 지출되면서, 지출된 것으로 UTXO에서 정의된 금액의 프랙션을 "남겨둘" 수는 없다. 그러나 UTXO로부터의 금액은 다음 트랜잭션의 다수의 출력들 사이에서 분할될 수 있다. 예컨대, Tx0의 UTXO0에 정의된 금액은 Tx1의 다수의 UTXO들 사이에서 분할될 수 있다. 따라서 앨리스가 UTXO0에 정의된 모든 금액을 밥에게 주기를 원하지 않는 경우, 앨리스는 Tx1의 제2 출력에서 자신에게 잔돈을 주거나, 다른 당사자에게 지불하는데 나머지를 사용할 수 있다.
실제로 앨리스는 또한 일반적으로 승리한 채굴자에 대한 수수료를 포함할 필요가 있을 것인데, 그 이유는 최근에는 생성 트랜잭션의 보상만으로는 일반적으로 채굴에 동기를 부여하는데 충분하지 않기 때문이다. 앨리스가 채굴자에 대한 수수료를 포함하지 않는 경우, Tx0은 채굴자 노드들(104M)에 의해 거부될 가능성이 높을 것이고, 이에 따라 기술적으로 유효하더라도, 그것은 여전히 전파되어 블록체인(150)에 포함되지 않을 것이다(채굴자 프로토콜은 채굴자들(104M)이 원하지 않는 경우 이들에게 트랜잭션들(152)을 수락하도록 강요하지 않음). 일부 프로토콜들에서, 채굴 수수료는 자체의 별개의 출력(203)을 요구하지 않는다(즉, 별개의 UTXO가 필요하지 않음). 대신, 주어진 트랜잭션(152)의 입력(들)(202)에 의해 가리켜지는 총 금액과 출력(들)(203)에 지정된 총 금액 사이의 임의의 차이가 승리한 채굴자(104)에게 자동으로 주어진다. 예컨대, UTXO0에 대한 포인터가 Tx1에 대한 유일한 입력이고 Tx1는 단 하나의 출력 UTXO1만을 갖는다고 하자. UTXO0에 지정된 디지털 자산의 금액이 UTXO1에 지정된 금액보다 큰 경우, 차이는 승리한 채굴자(104M)에게 자동으로 넘어간다. 그러나 대안적으로 또는 부가적으로, 채굴자 수수료가 트랜잭션(152)의 UTXO들(203) 중 자체 UTXO에서 명시적으로 지정될 수 있다는 것이 반드시 배제되는 것은 아니다.
또한, 주어진 트랜잭션(152)의 모든 출력들(203)에서 지정된 총 금액이 모든 그의 입력들(202)에 의해 가리켜지는 총 금액보다 큰 경우, 이는 대부분의 트랜잭션 모델들에서 무효에 대한 다른 근거란 것에 주의한다. 따라서, 이러한 트랜잭션들은 블록들(151) 내로 채굴되거나 전파되지 않을 것이다.
앨리스 및 밥의 디지털 자산들은 블록체인(150)의 임의의 위치의 임의의 트랜잭션들(152)에서 그들에게 잠겨 있는 미지출 UTXO로 구성된다. 따라서 통상적으로, 주어진 당사자(103)의 자산들은 블록체인(150) 전반에 걸친 다양한 트랜잭션들(152)의 UTXO들에 걸쳐 흩어져 있다. 블록체인(150)의 어떤 위치에도 주어진 당사자(103)의 총 잔고를 정의하는 숫자는 전혀 없다. 클라이언트 애플리케이션(105)에서 지갑 기능의 역할은, 개개의 당사자에게 잠겨 있으며 다른 전방 트랜잭션에서 아직 지출되지 않은 모든 다양한 UTXO들의 값들을 함께 대조하는 것이다. 이는 저장 노드들(104S) 중 임의의 것, 예컨대, 개개의 당사자의 컴퓨터 장비(102)에 가장 가깝거나 가장 잘 연결된 저장 노드(104S)에 저장된 바와 같은 블록체인(150)의 사본을 질의함으로써 가능할 수 있다.
스크립트 코드는 종종 도식적으로(즉, 정확한 언어가 아님) 표현된다는 것에 주의한다. 예컨대, [Checksig PA] = OP_DUP OP_HASH160 <H(Pa)> OP_EQUALVERIFY OP_CHECKSIG를 의미하도록 [Checksig PA]가 작성될 수 있다. "OP_..."는 스크립트 언어의 특정 작업코드를 지칭한다. OP_CHECKSIG(또한 "Checksig"라 불림)는 2개의 입력들(서명 및 공개 키)을 취하고 ECDSA(Elliptic Curve Digital Signature Algorithm)을 사용하여 서명의 유효함을 검증하는 스크립트 작업코드이다. 런타임 시에, 서명('sig')의 임의의 발생은 스크립트로부터 제거되지만, 해시 퍼즐과 같은 부가적인 요건들은 'sig' 입력에 의해 검증된 트랜잭션에서 유지된다. 다른 예로서, OP_RETURN은 트랜잭션 내에 메타데이터를 저장하고 그리하여 메타데이터를 블록체인(150)에 변경 불가능하게 기록할 수 있는 트랜잭션의 지출 불가능한 출력을 생성하기 위한 스크립트 언어의 작업코드이다. 예컨대, 메타데이터는 블록체인에 저장하고자 하는 문서를 포함할 수 있다.
서명 PA는 디지털 서명이다. 실시예들에서, 이는 타원 곡선 secp256k1을 사용하는 ECDSA에 기초한다. 디지털 서명은 특정 데이터 조각에 서명한다. 실시예들에서, 주어진 트랜잭션에 대해, 서명은 트랜잭션 입력의 일부, 및 트랜잭션 출력의 전부 또는 일부에 서명할 것이다. 서명되는 출력들의 특정 부분들은 SIGHASH 플래그에 의존한다. SIGHASH 플래그는 어느 출력들이 서명되는지를 선택하기 위해 서명의 끝에 포함된 4-바이트 코드이다(이에 따라, 서명 시에 고정됨).
잠금 스크립트는 때로는, 그것이 개개의 트랜잭션이 잠겨 있는 당사자의 공개 키를 포함한다는 사실을 지칭하는 "scriptPubKey"라 칭해진다. 잠금 해제 스크립트는 때로는 그것이 대응하는 서명을 제공한다는 사실을 지칭하는 "scriptSig"라 칭해진다. 그러나, 보다 일반적으로, UTXO가 리딤되기 위한 조건이 서명을 인증하는 것을 포함하는 것이 블록체인(150)의 모든 애플리케이션들에서 필수적인 것은 아니다. 보다 일반적으로 스크립팅 언어는 임의의 하나 이상의 조건들을 정의하는 데 사용될 수 있다. 따라서 보다 일반적인 용어들 "잠금 스크립트" 및 "잠금 해제 스크립트"가 선호될 수 있다.
선택적 사이드 채널
도 3은 블록체인(150)을 구현하기 위한 추가 시스템(100)을 도시한다. 시스템(100)은 부가적인 통신 기능성이 수반된다는 점을 제외하고는 도 1과 관련하여 설명된 것과 실질적으로 동일하다. 앨리스 및 밥의 컴퓨터 장비(102a, 120b) 각각 상의 클라이언트 애플리케이션은 각각 부가적인 통신 기능성을 포함한다. 즉, 이는 (어느 한 당사자 또는 제3자의 주도로) 앨리스(103a)가 밥(103b)과 별개의 사이드 채널(301)을 설정하는 것을 가능하게 한다. 사이드 채널(301)은 P2P 네트워크와 별개로 데이터 교환을 가능하게 한다. 이러한 통신을 때로는 "오프-체인(off-chain)"으로서 지칭된다. 예컨대, 이는 당사자들 중 하나가 네트워크(106)로 브로드캐스팅하기로 선택할 때까지, (아직) 트랜잭션이 네트워크 P2P(106) 상에 공개되거나 체인(150)으로 진행됨 없이 앨리스와 밥 사이에서 트랜잭션(152)을 교환하는 데 사용될 수 있다. 대안적으로 또는 부가적으로, 사이드 채널(301)은 키들, 협상된 금액들 또는 조건들(terms), 데이터 콘텐츠 등과 같은 임의의 다른 트랜잭션 관련 데이터를 교환하는 데 사용될 수 있다.
사이드 채널(301)은 P2P 오버레이 네트워크(106)와 동일한 패킷 교환 네트워크(101)를 통해 설정될 수 있다. 대안적으로 또는 부가적으로, 사이드 채널(301)은 상이한 네트워크 이를테면, 모바일 셀룰러 네트워크, 또는 로컬 영역 네트워크 이를테면, 로컬 무선 네트워크, 또는 심지어, 앨리스 및 밥의 디바이스들(1021, 102b) 사이의 직접 유선 또는 무선 링크를 통해 설정될 수 있다. 일반적으로, 본원의 임의의 위치에서 지칭되는 바와 같은 사이드 채널(301)은 "오프-체인", 즉 P2P 오버레이 네트워크(106)와 별개로 데이터를 교환하기 위한 하나 이상의 네트워킹 기술들 또는 통신 매체들을 통한 임의의 하나 이상의 링크들을 포함할 수 있다. 하나 초과의 링크가 사용되는 경우, 오프-체인 링크들의 번들(bundle) 또는 모음은 전체적으로 사이드 채널(301)로서 지칭될 수 있다. 따라서 앨리스 및 밥이 사이드 채널(301)을 통해 특정 정보 조각들 또는 데이터 등을 교환한다고 하면, 이는 이러한 모든 데이터 조각들이 정확히 동일한 링크 또는 심지어 동일한 유형의 네트워크를 통해 전송되어야 한다는 것을 반드시 의미하는 것은 아니란 것에 주의한다.
노드 소프트웨어
도 4는 UTXO-기반 또는 출력-기반 모델의 예에서 P2P 네트워크(106)의 각각의 노드(104) 상에서 실행되는 노드 소프트웨어(400)의 예를 예시한다. 노드 소프트웨어(400)는 프로토콜 엔진(401), 스크립트 엔진(402), 스택(403), 애플리케이션-레벨 판단 엔진(404), 및 일 세트의 하나 이상의 블록체인-관련 기능 모듈들(405)을 포함한다. 임의의 주어진 노드(104)에서, 이들은 채굴 모듈(405M), 포워딩 모듈(405F) 및 저장 모듈(405S) 중 (노드의 역할 또는 역할들에 의존하여) 임의의 하나, 둘 또는 3개 전부를 포함할 수 있다. 프로토콜 엔진(401)은 트랜잭션(152)의 상이한 필드들을 인식하고 이들을 노드 프로토콜에 따라 프로세싱하도록 구성된다. 다른 선행 트랜잭션(152m-1)(
Figure pct00003
)의 출력(예컨대, UTXO)을 가리키는 입력을 갖는 트랜잭션(152m)(
Figure pct00004
)이 수신될 때, 프로토콜 엔진(401)은
Figure pct00005
의 잠금 해제 스크립트를 식별하고 이를 스크립트 엔진(402)에 전달한다. 프로토콜 엔진(401)은 또한
Figure pct00006
의 입력의 포인터에 기초하여
Figure pct00007
를 식별 및 리트리브(retrieve)한다. 이는
Figure pct00008
가 아직 블록체인(150)에 있지 않은 경우 보류 중인 트랜잭션의 개개의 노드의 자체 풀(154)로부터, 또는
Figure pct00009
이 이미 블록체인(150) 상에 있는 경우 개개의 노드 또는 다른 노드(104)에 저장된 블록체인(150)의 블록(151)의 사본으로부터
Figure pct00010
를 리트리브할 수 있다. 어느 쪽이든, 스크립트 엔진(401)은
Figure pct00011
의 가리켜진 출력에서 잠금 스크립트를 식별하고 이를 스크립트 엔진(402)으로 전달한다.
따라서, 스크립트 엔진(402)은
Figure pct00012
의 대응하는 입력으로부터의 잠금 해제 스크립트 및
Figure pct00013
의 잠금 스크립트를 갖는다. 예컨대, Tx1 및 Tx2가 도 4에 예시되지만, Tx0 및 Tx1 등과 같은 트랜잭션들의 임의의 쌍에 동일하게 적용될 수 있다. 스크립트 엔진(402)은 이전에 논의된 바와 같이 2개의 스크립트들을 함께 실행하며, 이는 사용되고 있는 스택-기반 스크립팅 언어(예컨대, 스크립트(Script))에 따라 스택(403) 상에 데이터를 배치하고 스택(403)으로부터 데이터를 리트리브하는 것을 포함할 것이다.
스크립트들을 함께 실행함으로써, 스크립트 엔진(402)은 잠금 해제 스크립트가 잠금 스크립트에 정의된 하나 이상의 기준들을 충족시키는지 ― 즉, 잠금 스크립트가 포함되는 출력을 "잠금 해제"하는가? 를 결정한다. 스크립트 엔진(402)은 이 결정의 결과를 프로토콜 엔진(401)에 반환한다. 잠금 해제 스크립트가 대응하는 잠금 스크립트에 지정된 하나 이상의 기준들을 충족시키는 것으로 스크립트 엔진(402)이 결정하는 경우, 결과 "참"이 반환된다. 그렇지 않으면, 결과 "거짓"이 반환된다.
출력-기반 모델에서, 스크립트 엔진(402)으로부터의 결과 "참"은 트랜잭션의 유효함을 위한 조건들 중 하나이다. 통상적으로 또한 충족되어야 하는, 프로토콜 엔진(401)에 의해 평가되는 하나 이상의 추가의 프로토콜-레벨 조건들; 이를테면,
Figure pct00014
의 출력(들)에 지정된 디지털 자산의 총 금액이 입력(들)에 의해 가리켜지는 총 금액을 초과하지 않는 것, 그리고
Figure pct00015
의 가리켜진 출력이 다른 유효한 트랜잭션에 의해 이미 지출되지 않았을 것이 존재한다. 프로토콜 엔진(401)은 하나 이상의 프로토콜-레벨 조건들과 함께 스크립트 엔진(402)으로부터의 결과를 평가하고, 이들이 모두 참인 경우에만, 트랜잭션
Figure pct00016
을 유효성 검증한다. 프로토콜 엔진(401)은 트랜잭션이 유효한지에 관한 표시를 애플리케이션-레벨 판단 엔진(404)에 출력한다.
Figure pct00017
이 실제로 유효성 검증된다는 조건에서만, 판단 엔진(404)은
Figure pct00018
에 대해 각자의 블록체인-관련 기능을 수행하도록 채굴 모듈(405M) 및 포워딩 모듈(405F) 중 하나 또는 둘 모두를 제어하기로 선택할 수 있다. 이는 채굴 모듈(405M)이 블록(151)으로의 채굴을 위해 노드의 개개의 풀(154)에
Figure pct00019
을 추가하는 것 및/또는 포워딩 모듈(405F)이 P2P 네트워크(106)의 다른 노드(104)에
Figure pct00020
을 포워딩하는 것을 포함할 수 있다. 그러나 실시예들에서, 판단 엔진(404)이 무효 트랜잭션을 포워딩하거나 채굴하기로 선택하지 않을 것임에도 불구하고, 이는, 역으로 단순히 트랜잭션이 유효하기 때문에 이 유효한 트랜잭션의 채굴 또는 포워딩이 어쩔 수 없이 트리거(trigger)하게 되어야 한다는 것을 반드시 의미하지는 않는다는 것에 주의한다. 선택적으로, 실시예들에서, 판단 엔진(404)은 기능들 중 어느 하나 또는 둘 모두를 트리거하기 전에 하나 이상의 부가적인 조건들을 적용할 수 있다. 예컨대, 노드가 채굴 노드(104M)인 경우, 판단 엔진은 트랜잭션이 유효하고 채굴 수수료가 충분히 남아 있다는 것을 조건으로만 트랜잭션을 채굴하기로 선택할 수 있다.
또한, 본원에서 "참" 및 "거짓"이라는 용어들은 단지 단일 이진 숫자(비트)의 형태로 표현되는 결과를 반환하는 것으로 반드시 제한되지는 않지만, 이는 확실히 하나의 가능한 구현이라는 것에 주의한다. 보다 일반적으로, "참"은 성공 또는 긍정적인 결과를 표시하는 임의의 상태를 지칭할 수 있고 "거짓"은 실패 또는 비-긍정적인 결과를 표시하는 임의의 상태를 지칭할 수 있다. 예컨대, 계정-기반 모델(도 4에 예시되지 않음)에서, "참"의 결과는 노드(104)에 의한 서명의 암시적인 프로토콜 레벨의 유효성 검증 및 스마트 계약의 부가적인 긍정적인 출력의 조합에 의해 표시될 수 있다(개별 결과들 둘 모두가 참인 경우, 전체 결과가 참을 시그널링하는 것으로 간주됨).
난수 생성
해시 함수들은 난수들을 생성하는데 사용될 수 있다. 블록체인의 구조는 통상적으로 해시 함수들의 사용 및 그의 고유한 속성들에 기초한다. 여기에서 해시 함수 H는 임의의 데이터 구조 X를 취하고 고정된 수의 비트들 또는 심볼들 예컨대, 256-비트 숫자
Figure pct00021
를 갖는 숫자를 출력하는 단방향 결정론적 함수(one-way deterministic function)로서 정의된다.
Figure pct00022
SHA-256과 같은 해시 함수들은 단방향 랜덤 오라클들로서 거동한다. 즉, 사용자에게 알려지지 않은 사전-이미지 X로부터 해시 Y가 계산되는 경우, 사용자가 X를 찾는 것이 계산상(computationally) 어렵다.
해시 함수들의 속성은, 단일 비트의 값만이 상이한 2개의 고정-길이 출력 데이터 구조들(예컨대, 256-비트 데이터 구조들)의 해시들은 완전히 관련되지 않은 것으로 취급될 수 있다는 것이다. 즉, 사용자가 사전-이미지를 완전히 알지 못하는 한, 해시 값은 그 사용자에 대해 진정한 난수로서 거동한다.
이는, 해시 값 Y ― 또는 그의 일부 함수 ― 을 취함으로써, 어떠한 단일 당사자도 전체 입력 사전-이미지 X에 대한 제어를 갖지 못한다는 가정 하에 단일 난수 R로서 취급될 수 있다는 것을 의미한다.
미지의 X에 대해;
Figure pct00023
확장하여, 동일한 인수들을 사용하여 초기 난수 R0을 반복적으로 해싱함으로써 (k+1)개의 난수 값들의 난수 시퀀스 SR이 생성될 수 있다
Figure pct00024
해시 함수들은 결정론적이기 때문에, 임의의 당사자는 사용된 특정 해시 함수 및 초기 사전 이미지 X0만에 관한 지식으로 전체 시퀀스 SR을 재생할 수 있으며, 이 초기 사전 이미지는 이에 의해 시드로서 작용한다.
이 초기 사전-이미지가 랜덤 시퀀스가 생성되는 시간에 공개되는 경우, 임의의 노드는 시퀀스가 이 사전-이미지에 대응한다는 것을 독립적으로 검증할 수 있다.
난수(들)를 생성하는데 관여되는 어떠한 단일 당사자도 전체 초기 사전-이미지 X0을 조작할 수 없다면, 난수 시퀀스를 생성하는데 해시 함수들이 사용될 수 있다는 것은 자명하다.
일반적으로 '해시 함수'라는 용어는 고정된 크기 출력을 갖는 임의의 유형의 단방향 함수를 지칭하는 데 사용된다. 해시 함수들은 스크립트 언어의 기존 op_codes을 갖는다. 그러나, 본원에서 개시된 기술들은 스크립트에서의 구현으로 제한되지 않는다. 또한, 임의의 해시 함수 인스턴스 대신 대안적인 단방향 함수가 사용될 수 있다. 2개의 예들은 다음을 포함한다:
i) 타원 곡선(EC) 점 곱셈 ― 개인 키로부터 EC 공개 키를 생성하는 데 사용되는 함수
Figure pct00025
, 여기서 G는 타원 곡선 기점이고 '
Figure pct00026
'는 EC 점 곱셈 연산자이다. 이는
Figure pct00027
가 주어지면 E(x)를 계산하기 쉽지만
Figure pct00028
가 주어지면 x를 결정하기가 계산상 어렵기 때문에 단방향 함수이다.
ii) 라빈(Rabin) 함수 ― 함수
Figure pct00029
, 여기서 N=pq이고 p,q 둘 모두 소수이다. 제곱 R(x) 모듈로 N을 구하는 것은 쉬운 반면
Figure pct00030
이 주어지면 제곱근 ±x를 구하는 것은 p,q를 구하기 위해 N을 인수분해하는 것 ― 이는 계산상 곤란함 ― 만큼 어렵다.
이하, 블록체인을 사용하여 난수를 생성하기 위한 3개의 변동들이 설명된다. 각각의 방법은 난수를 생성하는데 가담하는 다수의 당사자들을 수반한다. 제1 방법은 안전한 난수를 생성하기 위해 해시 사전-이미지들의 조합을 사용하는 반면, 제2 방법은 여러 서명들로부터의 s-구성요소들의 조합을 사용한다. 제3 방법은 2개의 방법들의 하이브리드이다. 각각의 방법은 안전한 랜덤 정수
Figure pct00031
을 생성한다.
제1 방법: 해시 방법
각각이 자체 해시 값
Figure pct00032
을 공개하는 N명의 플레이어들을 고려하며, 여기서 각각의 플레이어는 자체 비밀 사전-이미지 Xi를 선택하는 것으로 규정된다. 해시 함수들의 속성들은 공개 해시 값에 대한 지식이 주어져도, 어떠한 플레이어도 다른 플레이어의 사전-이미지를 추측할 수 없다고 가정할 수 있게 한다.
그 후 플레이어들은 자신의 비밀 사전-이미지 Xi를 오라클(신뢰할 수 있는 제3자)에 전송한다. 이는 비밀 값 분배 기술을 통해 행해질 수 있지만, 보다 일반적으로 이 방법은 사전-이미지를 오라클에 통신하기 위한 임의의 보안 채널 또는 메커니즘을 사용할 필요가 있을 수 있다. 그 후 오라클은 다음 방법을 통해 난수 RN을 생성한다.
단계 1. 오라클은, 각각의 플레이어에 의해 제공되는 사전-이미지에 대해
Figure pct00033
임을 검증한다.
해시 값들은 사전-이미지들이 오라클에 전송되기 전에 이미 공개되어 있다. 이는, 각각의 플레이어에 의해 원래 제공된 바와 같은 올바른 사전-이미지들이 오라클에 공급되는 것을 보장한다. 블록체인 상에서, 이러한 공개 값들은 변경 불가능하고, 이에 따라 사전-이미지를 전송한 후 플레이어에 의해 변경될 수 없다. 이 검증 단계는, 모든 플레이어들이 자신의 선택된 비밀 사전-이미지들을 오라클에 제공할 때까지 그 오라클이 난수를 생성하는 것으로 진행되지 않을 것임을 보장한다.
단계 2. 오라클은 다음과 같이 RN을 계산한다.
Figure pct00034
RN은 어떠한 플레이어도 모든 N개의 오리지널 사전-이미지 값들 Xi을 알지 못하는 경우에만, 하나 하나 모든 플레이어에 대한 난수이다. 모든 사전-이미지들은 플레이어들에 의해 비밀로 유지되며 오라클에 안전하게 통신된다. 이는, 수반되는 모든 플레이어들이 제어되지 않는 한, 악의적인 당사자가 이러한 모든 입력들을 알 수 있는 방법이 없다는 것을 의미한다. 이 경우에, 적대자는 자신만이 사용할 난수를 사소하게 조작할 것이다.
최소 한 명의 진성(genuine) 플레이어가 있는 다른 모든 시나리오들에서, 해시 함수들의 설명된 속성들은 RN이 유리한 방식으로 조작될 수 없음을 의미한다. 이는 적대자가 N-1명의 모든 다른 플레이어들을 제어할 때조차도 마찬가지다. 간단히 말해서, 다른 당사자에 부정적인 영향을 줄 수 있는 임의의 당사자(들)가 이 방법에 의해 생성된 난수에 영향을 미칠 수 있는 방도가 없다.
사전-이미지들 Xi의 추가 '+' 합산은 이것이 스크립트에서 구현될 수 있으므로 사용될 수 있지만, 위의 합산과 유사한 시리즈의 상이한 연산자 이를테면, 컨케터네이션(concatenation)을 사용하는 것이 또한 가능하다는 것이 주의된다.
난수 RN은, (1) 프로세스에 수반되는 어떠한 당사자에게 예측 불가능하고 (2) 결정론적 프로세스를 통해 재현 가능한 방식으로 생성된다.
논의된 바와 같이, 확장은, 난수 시퀀스가 또한 RN의 반복된 해싱에 의해 오라클에 의해 생성될 수 있다는 것이다.
제2 방법: 서명 방법
자신의 개인 키 SA를 사용하여 메시지 해시 H(m)에 대한 디지털 서명을 생성하려는 플레이어 앨리스를 고려한다. 엘리스는 ECC에 따라 일반적인 방식으로 자신의 개인 키와 연관된 공개 키 PA를 가지며, 여기서 G는 차수 n의 타원 곡선 기점이다
Figure pct00035
생성될 필요가 있는 디지털 서명의 2개의 구성요소들은 r 및 s이다. 엘리스는 난수
Figure pct00036
로서 임시 키를 생성하고, 이를 사용하여 다음과 같이 서명의 부분 r을 도출한다
Figure pct00037
그 후, 서명의 부분 s는 다음과 같이 엘리스의 개인 키, 그녀의 해시된 메시지 및 임시 키와 함께 이로부터 도출된다
Figure pct00038
r 및 s를 컨케터네이팅(concatenating)함으로써, 메시지 해시의 ECDSA 디지털 서명으로서 알려진 데이터 구조가 생성된다.
Figure pct00039
.
값들 r과 s가 별개로 주어지면, 전체 서명이 스크립트에서 구성될 수 있다.
이제, 각각이 서명
Figure pct00040
뿐만 아니라, 제2 디지털 서명
Figure pct00041
― 그의
Figure pct00042
-구성요소는 비밀로 유지됨 ― 의 부분을 형성하는 랜덤 값
Figure pct00043
을 공개하는 N명의 플레이어들을 고려한다.
Figure pct00044
서명 둘 모두가 동일한 개인 키 Si를 사용하여 서명되어서, 서명 둘 모두가 공개 키 Pi의 동일한 소유자에 대응한다는 것이 검증될 수 있게 한다.
Figure pct00045
.
그 후, 플레이어들은 바람직하게는, 비밀 공유 기술을 통해 자신의 비밀
Figure pct00046
값들을 오라클에 전송한다. 그 후 오라클은 다음 방법을 통해 난수 RN을 생성한다.
단계 1. 오라클은
Figure pct00047
을 구성하고 각각의 플레이어에 대해 그것이
Figure pct00048
와 동일한 엔티티에 대응한다는 것을 검증한다.
이 제2 서명은 DER(distinguished encoding rules) 표준을 사용하여 공개
Figure pct00049
값을 비밀
Figure pct00050
값과 컨케터네이팅함으로써 구성된다. 오라클은 표준 ECDSA 서명 검증 알고리즘을 서명들 둘 모두에 적용하고 이들이 공개 키
Figure pct00051
의 소유자에 의해 공통적으로 서명되었음을 확인한다. 이는 다른 당사자가 주어진
Figure pct00052
값에 대한 자체 서명을 제공함으로써 난수에 영향을 미칠 수 없다는 것을 보장한다.
단계 2. 오라클은 다음과 같이 RN을 계산한다.
Figure pct00053
이는, ECC에서 개인 키로부터 공개 키를 생성하는 단방향 프로세스와 단방향 해시 함수의 유사성으로 인해, 해시 방법에 약술된 동일 속성들을 상속한다.
교체
Figure pct00054
Figure pct00055
는 제1 방법과 제2 방법 사이의 유사점을 제공한다.
해시 방법과 마찬가지로, 수반된 어떠한 당사자에게도 예측 불가능하고 검증 가능한 방식으로, 난수 RN이 생성된다. 서명 방법 및 해시 방법은 서로 직접적으로 유사하며 난수 생성을 위한 각자의 방법들의 핵심 속성들을 공유한다는 것이 분명해야한다. 특히, 방법 둘 모두는 각각의 사용자가, 각각 해시 및 서명 방법들에 대한 비밀 값;
Figure pct00056
Figure pct00057
을 생성하는 것을 담당하도록 요구한다. 여기서 서명 방법을 사용하는 것의 핵심 이점은, 비밀을 선택하는 행위가 ECDSA 절차 하에서 이미 표준화되어 있지만 임의의 해시 사전-이미지를 선택하는 것은 그렇지 않다는 것이다.
서명 방법에서, 또한, 오라클로 전송된 비밀 값
Figure pct00058
이 대응하는 공개 값
Figure pct00059
의 오리지널 제안자에 의해 제공되었다는 것이 ― 그것을 동반한 기본 서명
Figure pct00060
과의 비교에 의해 ― 직접 검증될 수 있다. 이 검증은 해시 방법에서의 암시적인 검증일 뿐이다.
양 체제들에서, 난수 RN은 예측 불가능하고 결정론적이어야 하는 둘 모두의 요건들을 충족시켰다. 난수가 또한 검증 가능하며, 이는 RN이 올바른 방식으로 생성되었음을 모든 네트워크 피어들이 독립적으로 검증하는 방식이 필요하다는 것을 의미한다. 이는 RN 자체가 트랜잭션의 잠금 스크립트에서 계산되고 사용되도록 요구함으로써 달성된다.
이러한 방식으로, 모든 이전-비밀
Figure pct00061
값들이 이 스크립트의 부분으로서 블록체인 상에 공개되며, 이는 해시 함수
Figure pct00062
의 입력 사전-이미지를 구성함으로써 누구라도 난수를 검증할 수 있다는 것을 의미한다.
다음 스크립트는 랜덤 정수
Figure pct00063
를 생성하는 데 사용될 수 있다.
Figure pct00064
여기서 연산자 'OP_ADD' 및 N개의 비밀 값들의 N-1번의 사용이 존재한다.
이 스크립트는 해시 사전-이미지들, 부분 서명들 및 이들의 조합들을 포함한 일반화된 비밀 값들을 위해 사용될 수 있다는 것에 주의한다.
트랜잭션에 대한 전체 리딤 스크립트(full redeem script)는 각각의 사전-이미지가 올바른 커밋된 해시에 대응한다는 것, 각각의 비밀 서명 구성요소가 공개 구성요소와 결합하여 예상된 서명을 형성한다는 것, 그리고 각각의 제공된 값이 올바른 플레이어로부터 비롯되었다는 검증들을 포함할 수 있다.
제3 방법: 결합된 방법
위에 제시된 방법들은 생성된 난수의 결과에 영향을 미치려는 악의적인 당사자들에 대해 견고하다. 그러나 생성된 난수(들)의 보안성 및 예측 불가능성을 개선하기 위해 해시 방법 및 서명 방법이 확장 및 결합될 수 있는 다수의 방식들이 있다.
2개의 방법들의 가장 간단한 조합은 각각의 플레이어가 해시 값 Yi뿐만 아니라 서명
Figure pct00065
, 랜덤 값
Figure pct00066
및 그의 공개 키 Pi를 공개하는 것일 것이다. 오라클은 그 후 다음과 같이 랜덤 값을 생성할 수 있다
Figure pct00067
여기서 각각의 플레이어는 또한 보조 서명
Figure pct00068
을 개인적으로(privately) 계산하였다. 여기서 덧셈 연산자 '+'는 다른 구현에서 컨케터네이션 또는 XOR과 같은 다른 연산자로 대체될 수 있다는 것에 주의한다.
도 27은 난수 RN을 생성하기 위한 스크립트 <RN>의 예시적인 실행 흐름을 예시한다.
2개의 방법들 중 하나를 개별적으로 확장하기 위해, 다수의 오라클들이 사용될 수 있고 플레이어들은 각각 다수의 해시 값들 Yi 또는 보조
Figure pct00069
값들을 제공할 수 있다. 예컨대, 해시 방법을 사용하는 2개의 오라클들이 있는 경우, 난수 RN은 다음과 같이 계산될 수 있다
Figure pct00070
여기서 제1 오라클은 사전-이미지들의 제1 세트의 합계
Figure pct00071
를 제2 오라클에 전송하며, 이 제2 오라클은 이를 사전-이미지들의 제2 세트의 합계
Figure pct00072
에 더하고 난수를 계산한다. 다수의 오라클들을 사용함으로써, 오라클이 악의적인 사용자에 의해 어떻게든 변질될 위험이 제거된다. 이것을 훨씬 다수의 오라클들로 확장하면, 더 큰 계산적 및 시간적 오버헤드의 비용으로 모든 오라클들이 변질될 위험을 감소시킨다. 난수가 안전하고 예측 불가능하게 생성되기 위해 단 하나의 오라클만이 진성일 것을 필요로 한다.
블록체인을 이용한 증명 가능하게 공정한 게임들
'증명 가능하게 공정한(provably fair)'이라는 용어는 게임 문헌에서 널리 사용되고 있지만 제대로 정의되지 않았다. 문헌에 공식적인 정의들이 없다는 점을 감안하여, 온-체인으로 증명 가능하게 공정한 게임의 구현을 논의할 때 다음 정의들이 본원에서 사용된다.
정의 1: 느슨하게 증명 가능한 공정성
시작 및 종료 상태들은 온-체인으로 존재하는 반면, 예컨대, 신뢰할 수 있는(감사 가능한) 오라클에 의해 구현되는, 중간 상태 트랜지션을 정의하는 로직은 오프-체인으로 존재할 수 있다. 단지 오프-체인 감사 로직을 적용함으로써 초기 상태가 종료 상태에 따라야 하는 경우, 게임은 증명 가능하게 공정하다.
정의 2: 엄격하게 증명 가능한 공정성
사실상 모든 게임 로직은 온-체인으로, 증명 가능하게 공정한 것으로 나타나고, 각각의 상태 트랜지션은 예컨대, 블록체인 스크립팅 언어를 사용하여 온-체인으로 구현되고, 입증되고 시행된다.
게임 요소들의 키-기반 표현
본원에서 사용되는 바와 같이, "게임 요소"라는 용어는, 적어도 부분적으로 게임의 결과를 결정하는 게임의 특징을 지칭하기 위해 사용된다. 예컨대, 카드들의 게임, 예컨대 포커, 블랙잭, 러미 등에서, 게임 요소들은 플레잉 카드들이다. 룰렛 게임에서, 게임 요소는 룰렛 휠을 구성하는 숫자들이다. 슬롯 머신에서, 게임 요소들은 슬롯 머신 릴(slot machine reel)의 심볼들이다. 숙련된 사람은 임의의 특정 게임의 어떤 특징들이 "게임 요소들"로 간주되는지를 인지할 것이다.
본 개시내용은 키들 예컨대, 암호화 개인-공개 키 쌍들로서 게임의 게임 요소들을 인코딩하기 위한 메커니즘을 제공한다. 다음 예들은 플레잉 카드들을 인코딩하기 위한 기술을 설명하지만, 동일한 기술이 다른 유형들의 게임 요소들에 적용될 수 있다는 것이 인지될 것이다.
대부분의 카드 게임들에서, 특정 게임의 결과는 각각의 플레이어에게 속한 '핸드(hand)' 또는 카드들의 세트에 의해 결정된다. 카드들의 핸드의 품질은 게임 종속적이고, 플레이어(들)에게 공개적으로 알려진 게임의 로직 또는 규칙들에 의해 결정될 것이다. 따라서 특정 게임의 승자(들)는 게임의 규칙들에 따라 최상의 카드 핸드를 보유한 플레이어(들)가 되는 경향이 있다.
플레잉 카드들의 표준 덱은, 다이아몬드(D), 클럽(C), 하트(H), 스페이드(S)의 4개의 별개의 수트(suit)들 ― 각각이 값들 2, 3, 4, …, 10, J, Q, K, A을 포함함 ― 로 형성되는 52개의 고유한 카드들의 세트를 포함한다. 따라서 카드들의 덱은 52개의 고유 요소들을 갖는 세트
Figure pct00073
로서 취급될 수 있다.
Figure pct00074
; 또는
Figure pct00075
문제의 게임에 의존하여, 플레이어의 핸드는 이러한 요소들 중 하나 이상의 조합을 포함할 것이며, 이는 단순히
Figure pct00076
의 서브세트이다. 일반적으로 주어진 핸드 내에서 카드들의 순서에 대한 개념이 없고, 이에 따라 순열(permutation)들보다는 카드들의 조합들만이 관련된다는 것에 주의한다. 이러한 핸드 h의 예는 다음과 같을 것이다:
Figure pct00077
이는 포커와 같은 게임에서 강한 핸드(즉, '풀 하우스')에 대응할 것이다.
'핸드'의 개념은 덱
Figure pct00078
내 각각의 카드에 랜덤 키 쌍들의 세트를 할당함으로써 다중 플레이어 카드 게임에서 활용할 수 있다. ECC 키 쌍들과 같은 비대칭 키 쌍들을 선택함으로써, 카드들의 덱을 표현하는 데이터 아이템들의 2개의 새로운 세트들: 개인 키들의 세트
Figure pct00079
및 대응하는 공개 키들의 세트
Figure pct00080
가 생성될 수 있다:
Figure pct00081
; 및
Figure pct00082
개인-공개 키 쌍들은 덱 내 각각의 카드가 고유한 키 쌍에 의해 표현되도록 생성된다.
플레잉 카드들의 세트에 매핑된 관련 개인 및 공개 데이터의 이들 세트들을 사용하여, 핸드들의 고유한 표현이 간결하고 효율적인 방식으로 구성될 수 있다. 예컨대, 위로부터의 핸드 h는
Figure pct00083
의 5-요소 서브-세트 보다는 단일 개인 키 또는 단일 공개 키 중 어느 하나를 사용하여 표현될 수 있다:
Figure pct00084
여기서 이항 연산자 '
Figure pct00085
'는 타원 곡선 점 덧셈을 표현하고, 연산자 '+'는 덧셈을 표현한다.
이러한 방식으로 카드들의 핸드들을 표현하는 것은 다수의 이점들을 갖는다. 첫째로, 고유한 표현은 공개 데이터(즉, 공개 키들), 개인 데이터(즉, 개인 키들) 또는 이 둘의 혼합에서 생성될 수 있다. 이는 카드 게임의 가시성을 보존하는 방식으로 승리한 핸드들이 생성될 수 있게 한다. 예컨대, 위의 핸드 Ph는 포커에서 핸드가 테이블 중앙의 3개의 페이스 업 카드들 및 플레이어에 속 2개의 페이스 다운 카드들의 조합으로서 생성되는 것과 동일한 방식으로, 3개의 '공개' 카드들 및 2개의 '개인' 카드들로부터 생성될 수 있다. 이 경우에, 3개의 페이스-업(공개적으로 가시적인) 카드들은 각각 카드들 AD, KD, KS를 표현하는
Figure pct00086
일 수 있는 반면, 페이스-다운(한 명의 플레이어에게 개인적으로 가시적임)은 각각 AC, KS를 표현하는
Figure pct00087
일 수 있다. 그 후, 핸드는 아래와 도시된 바와 같이 플레이어의 핸드 내 2개의 페이스 다운 카드들을 공개할 필요 없이, 단일 공개 키에 의해 공개적으로 표현될 수 있다:
Figure pct00088
둘째로, 개인-공개 키 쌍들의 준동형 추가 구조(homomorphic, additive structure)를 사용함으로써, 핸드들이 보다 간결하게 표현될 수 있다. 즉, n개의 카드들을 포함하는 핸드는 y개의 개인 키들(즉, y×256 비트의 데이터) 또는 z개의 공개 키들(즉, z×33 바이트의 데이터)를 포함하며 여기서 y + z = n일 반면, 단일 개인 키 sh 또는 단일 공개 키 Ph는 각각 256 비트 또는 33 바이트의 데이터만을 포함한다.
셋째로, 카드들의 전체 핸드를 표현하는 키들에 자금(fund)을 전송하는 잠금 스크립트들이 구성되고 이에 따라 스크립트는 승리한 핸드에 대한 지식을 완전히 증명할 것을 지출자에게 요구한다. 플레이어가 페이스 다운 카드들을 갖는 게임에 대해, 이러한 스크립트를 사용하여 잠긴 자금들은 그 자신의 카드들에 대응하는 키들을 알고 있는 합법적인 승자에 의해서만 리딤 가능할 것이다.
다른 비-카드 게임들에도 동일한 교시내용이 적용될 수 있다. 예컨대, 주사위의 면들은 개개의 개인-공개 키 쌍에 의해 각각 표현될 수 있다. 6면체 주사위는 다음의 세트들에 매핑될 수 있다:
Figure pct00089
; 및
Figure pct00090
.
주사위를 두 번 이상 굴린 결과에 의존하는 게임들 예컨대, 크랩스(craps)에서, 결합된 결과는 단일 키에 의해 표현될 수 있다. 예시적인 예로서, 크랩스 게임은 플레이어가 2개의 주사위들을 굴리는 것을 수반하며, 게임의 결과는 굴린 총 점수에 의존한다. 총 점수는 공개 키
Figure pct00091
에 매핑될 수 있다.
슬롯 머신의 심볼들에 대해서도 유사한 매핑이 구성될 수 있다. 슬롯 머신은 적어도 하나의 릴을 포함하지만, 보다 통상적으로, 3개 또는 5개의 릴들을 포함한다. 각각의 릴은 복수의 심볼들, 예컨대, 22개의 심볼들을 포함한다. 따라서 각각의 릴 상의 심볼들은 각각의 가능한 결과(즉, 각각의 릴로부터의 심볼들의 조합)가 단일 개인 키 또는 공개 키에 의해 표현될 수 있게 하도록, 공개-개인 키 쌍들의 세트에 의해 표현될 수 있다.
게임 요소들의 온-체인 선택
다수의 게임들, 특히 운에 맡기는 게임들(games of chance)은 게임 요소들의 랜덤 선택 또는 결과에 어느 정도 의존한다. 예컨대, 플레잉 카드들의 게임(예컨대, 포커)에서, 통상적으로, 덱을 셔플링함으로써 셔플링된 덱의 맨 위에서부터 드로우되는 개별 카드들은 개별 플레이어들에게 개인적으로 또는 모든 플레이어들에게 공개적으로 드로우되는 카드들에 랜덤성을 도입한다. 유사하게, 룰렛의 게이머의 결과는 룰렛 공과 룰렛 휠 사이의 랜덤 상호작용 ― 이는 공이 휠 상의 예측 불가능한 포지션(즉, 숫자)에 안착시킴 ― 에 의존한다. 주사위 게임들은 또한 주사위와 주사위가 굴려지는 표면 사이의 랜덤 상호작용에 의존한다.
본 개시내용은 증명 가능하게 공정한 게임을 가능하게 하기 위해 게임 요소가 온-체인으로 랜덤화될 수 있음을 인식한다. 각각의 게임 요소는 개개의 공개 키에 의해 표현된다. 플레이되는 게임의 특정 게임 요소를 표현하는 데 요구되는 공개 키들의 세트를 포함하는 잠금 스크립트가 구성되고, "난수 생성" 하에서 이전에 설명된 방법들 중 하나에 따라 생성되었을 수 있는 랜덤 시드는 승리한 공개 키로서 공개 키들 중 하나를 랜덤으로 선택하는데 사용된다.
<
Figure pct00092
>에 의해 표시되는 다음의 랜덤화 스크립트는 N개의 공개 키들 Pi의 세트로부터 공개 키를 랜덤으로 선택하는 데 사용될 수 있으며, 여기서 각각의 공개 키 Pi는 개개의 게임 요소를 표현한다. 랜덤화 스크립트는 난수 예컨대, 인-시추(in-situ)로 난수를 계산하는 이전에 제시된 스크립트 <RN>에 의해 시딩(seed)된다.
Figure pct00093
여기서 연산자 'OP_DROP' 및 N개의 공개 키들의 N-1번 사용이 존재한다.
작업코드(opcode) OP_ROLL은 작업코드 앞의 숫자와 동일한 스택 상의 포지션에 있는 아이템이 스택의 맨 위로 이동되게 한다. 예컨대, 작업코드 OP_ROLL이 숫자 3 다음에 오는 경우, 스택에서 세 번째로 뒤에 있는 아이템이 스택의 맨 위로 이동된다.
따라서 공개 키들의 세트는 서브-스크립트 <RN>에 의해 생성된 값에 따라 조작된다. 이 스크립트는 랜덤 공개 키 및 이에 따라 랜덤 게임 요소가 게임에서 사용을 위해 선택되는 것을 가능하게 한다. 예컨대, 랜덤으로 선택된 게임 요소는 룰렛 휠의 승리 결과일 수 있다.
도 7은 승리한 공개 키를 선택하기 위한 스크립트 <
Figure pct00094
>의 예시적인 실행 흐름을 예시한다. 이 경우에, (아래에서 설명되는) 게임 트랜잭션의 출력 스크립트는 리뎀션(redemption) 트랜잭션의 입력 스크립트와 함께 실행되며, 여기서 입력 스크립트는 승리한 공개 키에 대응하는 서명을 포함한다.
본 개시내용의 실시예들은 이제 도 5를 참조하여 설명될 것이다. 도 5는 게임을 플레이하기 위한 시스템을 예시한다. 일반적으로, 게임은 임의의 수(N)의 사용자들(501)(즉, 플레이어들)에 의해 플레이될 수 있으며, 각각의 사용자(501)는 개개의 컴퓨터 장비를 동작시키지만, 예시의 목적으로, 단일 사용자만이 도 5에서 도시된다. 게임은 게임 오라클(502), 즉 예컨대, 게임의 플레이어가 아닌 제3자에 의해 구현된다. 게임 오라클은 스마트 계약 또는 자율 에이전트일 수 있다. 예컨대, 게임 오라클은 게임 오라클에 기인한 액션을 구현하도록 구성된 컴퓨터 프로토콜일 수 있다. 게임 오라클(502)은 개개의 컴퓨터 장비를 동작시킬 수 있다. 도 5는 오라클(502)이 사용자(501)로부터 사용자 시드를 획득하고, 블록체인(150)에의 포함을 위해 블록체인 네트워크(106)에 커밋멘트 트랜잭션 및 게임 트랜잭션을 전송하는 것을 예시한다. 도 5는 또한 사용자(501)가 승리 리뎀션 트랜잭션을 블록체인 네트워크(106)에 전송하는 것을 예시한다. 이전에 언급된 트랜잭션들은 아래에서 설명될 것이다.
각각의 사용자(501) 및 게임 오라클(502)(만약 적용 가능한 경우)의 컴퓨터 장비는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU들, GPU들, 다른 가속기 프로세서들, 애플리케이션 특정 프로세서들 및/또는 FPGA들을 포함하는 개개의 프로세싱 장치를 포함한다. 각각의 사용자(501) 및 게임 오라클(502)의 컴퓨터 장비는 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다. 각각의 사용자(501) 및 게임 오라클(502)의 컴퓨터 장비 상의 메모리는 프로세싱 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션의 개개의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 사용자(501) 또는 게임 오라클(502)에 기인한 임의의 액션은 개개의 컴퓨터 장비의 프로세싱 장치 상에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것이 이해될 것이다. 각각의 사용자(501)의 컴퓨터 장비는 적어도 하나 사용자 단말, 예컨대, 데스크 톱 또는 랩톱 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 디바이스를 포함한다. 주어진 사용자(501) 또는 게임 오라클(502)의 컴퓨터 장비는 또한 사용자 단말을 통해 액세스되는 클라우드 컴퓨팅 자원들과 같은 하나 이상의 다른 네트워킹된 자원들을 포함할 수 있다. 클라이언트 애플리케이션 또는 소프트웨어는 적합한 컴퓨터-판독 가능 저장 매체 또는 매체들 상에서 임의의 주어진 사용자(501) 또는 게임 오라클(502)의 컴퓨터 장비에 초기에 제공되고, 예컨대, 서버로부터 다운로드되거나, 또는 이동식 저장 디바이스 이를테면, 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, 광학 디스크 이를테면, CD 또는 DVD ROM 또는 이동식 광학 드라이브 등 상에 제공될 수 있다.
여기서 별개로 설명되지만, 사용자들(501)은 도 1 내지 도 3에 설명된 것과 동일한 사용자들(103)일 수 있다는 것에 주의한다.
일부 예들에서, 사용자(즉, 사용자의 컴퓨터 장비)는 트랜잭션들을 생성하고 그리고/또는 블록체인(150)에 송신할 수 있을 수 있다. 또한, 사용자의 컴퓨터 장비는 블록체인(150)으로부터 트랜잭션들을 판독할 수 있을 수 있다. 일반적으로, 사용자(501)는 도 1 내지 도 3을 참조하여 설명된 바와 같이 앨리스(103a) 및/또는 밥(103b)에 기인한 액션들 중 임의의 것을 수행할 수 있다.
유사하게, 게임 오라클(502)의 컴퓨터 장비는 블록체인(150)으로부터 트랜잭션들을 판독하고 블록체인(150)에 트랜잭션들을 송신하도록 구성된다.
사용자(501)는 사용자 시드로서 지칭되는 개개의 데이터 아이템을 생성한다. 사용자 시드는 위에서 설명된 바와 같이 난수를 생성하기 위한 제1, 제2 또는 제3 방법들 중 임의의 방법에 따라 생성될 수 있다. 예컨대, 사용자 시드는 개개의 해시 또는 디지털 서명의 개개의 구성요소일 수 있다. 일부 예들에서, 게임 오라클(502)은 또한 아래에서 오라클 시드로서 지칭되는 시드 데이터 아이템을 생성한다.
게임 오라클(502)은 사용자 시드(또는 그의 해시)를 획득한다. 게임 오라클(502)은 예컨대, (보안) 통신 채널을 통해 사용자(501)로부터 직접 사용자 시드(또는 그의 해시)를 획득할 수 있다. 대안적으로, 사용자는 예컨대, 웹사이트 상에 또는 블록체인(150)에 자신의 사용자 시드(또는 그의 해시)를 공개할 수 있다. 즉, 사용자 시드(또는 그의 해시)는 사용자(501) 또는 게임 오라클(502)에 의해 블록체인(150)으로 송신되는 블록체인 트랜잭션에 포함될 수 있다. 예컨대, 사용자(501)는 입력(및 선택적으로 출력)을 트랜잭션(이하에서 커밋 트랜잭션으로서 지칭됨)에 추가할 수 있으며, 그의 사용자 시드(또는 그의 해시)는 그 사용자가 커밋 트랜잭션에 추가한 입력 및/또는 출력에 포함된다.
오라클이 또한 오라클 시드를 제공하는 예들에서, 오라클(502)은 오라클 시드(또는 그의 해시)를 포함하는 커밋멘트 트랜잭션을 생성하고, 그 후 사용자(501)에게 커밋멘트 트랜잭션을 송신할 수 있다. 사용자는 차례로, 자신의 사용자 시드(또는 그 해시)를 커밋멘트 트랜잭션에 추가하고 개개의 디지털 서명으로 그의 입력에 서명할 수 있다. 사용자가 자신의 입력을 추가하면, 오라클(502)은 전체적으로 커밋멘트 트랜잭션에 서명하고 커밋멘트 트랜잭션을 블록체인 네트워크(106)에 송신할 수 있다. 그런 의미에서, 오라클(502)은 부분 커밋멘트 트랜잭션을 생성할 수 있으며, 이는 그 후 사용자(501)에게 전송된다.
또한, 게임 오라클(502)은 공개 키들의 시퀀스를 획득한다. 각각의 공개 키는 개개의 게임 요소를 표현한다. 공개 키들로서 게임 요소들의 표현은 위에서 설명되었다. 게임 오라클(502)은 공개 키들의 시퀀스를 생성할 수 있다. 대안적으로, 사용자(501)는 하나 이상의 공개 키들을 생성할 수 있고, 게임 오라클(502)은 만약 있다면, 남아있는 공개 키들을 생성한다. 예컨대, 사용자(501)는 승리 게임 요소 ― 예컨대, 사용자(501)가 내기를 걸고 있는 게임 요소가 승리 게임 요소가 됨 ― 일 것으로 예측하는 게임 요소에 대응하는 공개 키를 제공할 수 있다.
일부 예들에서, 오라클(502)은 각각의 공개 키를 개개의 게임 요소에 매핑하고 매핑을 공개할 수 있다. 다른 예들에서, 오라클(502)은 매핑에 해시 함수를 적용하여 매핑 해시를 생성하고, 그 후 매핑 해시를 공개할 수 있다. 매핑 또는 매핑 해시를 공개하는 것은 매핑 또는 매핑 해시를 사용자(501)에게 전송하는 것을 포함할 수 있다. 다른 예로서, 오라클은 트랜잭션, 예컨대, 커밋멘트 트랜잭션에 매핑 또는 매핑 해시를 포함시킬 수 있다. 바람직하게는, 매핑 및 오라클 시드(또는 그의 해시들)는 사용자가 그의 사용자 시드를 제공하기 전에 사용자(502)에게 알려진다.
게임 오라클(502)이 시드 데이터 아이템들(또는 그의 해시들) 및 공개 키들의 시퀀스를 획득할 때, 게임 오라클(502)은 게임 트랜잭션을 생성한다. 게임 트랜잭션은 출력 스크립트를 포함하는 적어도 하나의 출력을 갖는다. 출력 스크립트는 공개 키들의 시퀀스 및 시드 데이터 아이템들의 세트(그의 해시들)에 기초하여 의사 난수를 생성하기 위한 스크립트의 일부를 포함한다. 일부 예들에서, 의사 난수는 게임 트랜잭션에 앞서 생성되고 출력 스크립트에 배치된다(이 경우에, 의사 난수를 생성하기 위한 스크립트의 부분은 단순히 의사 난수라는 것에 주의한다). 그러나 바람직하게는, 스크립트의 일부는 시드 데이터 아이템들의 세트(또는 해시들의 세트)를 포함하고 스크립트에서 의사 난수를 생성한다. 게임 트랜잭션은 커밋멘트 트랜잭션의 출력을 지출할 수 있다.
스크립트에서 의사 난수의 생성은 일반적으로 위에서 설명되었다. 출력 스크립트는 시드 데이터 아이템들(또는 해시들)의 세트를 결합(예컨대, 합산)하고 결합의 해시를 취할 수 있다. 그 후 결합의 해시(아래에서 해시 결과로서 지칭됨)가 의사 난수로서 사용을 위해 숫자에 매핑되며, 매핑은 공개 키들에 의해 표현되는 게임 요소들의 총 수, 즉 공개 키들의 시퀀스 내 공개 키들의 총 수에 기초한다. 매핑을 구현하는 하나의 방식은 해시 결과에 대해 모듈로 연산을 수행하는 것이며, 여기서 모듈로 연산을 수행하는 것은 해시 결과의 모듈러스(modulus)를 취하기 위해 공개 키들의 총 수를 사용한다.
유사하게, 공개 키들의 시퀀스로부터의 공개 키의 선택은 위에서 설명되었다. 출력 스크립트는 의사 난수를 사용하여, 공개 키들의 시퀀스 내 공개 키들 중 하나를 선택하고, 이에 따라 선택된 공개 키에 의해 표현되는 게임 요소가 의사랜덤으로 선택된다.
게임 트랜잭션의 출력은 선택된 공개 키(승리 공개 키)에 잠길 수 있다. 즉, 게임 트랜잭션의 출력을 잠금 해제하기 위해 승리 공개 키에 대응하는 개인 키에 대한 지식이 요구된다. 사용자가 승리 공개 키를 생성한 예들에서(즉, 사용자(501)가 특정 게임 요소를 표현하기 위한 공개 키를 제공하고 그 공개 키는 그 후 승리 공개 키로서 선택됨), 사용자(501)는 이미 개인 키에 대한 액세스를 갖고 이에 따라 게임 트랜잭션의 출력을 잠금 해제할 수 있다. 오라클이 승리 공개 키를 생성한 예들에서(즉, 오라클(502)이 공개 키를 생성하였으며, 이는 그 후 승리 공개 키로서 선택됨), 오라클(502)은 게임을 플레이하는 하나 이상의 사용자들(501)에게 개인 키를 송신할 수 있다.
일부 예들에서, 게임 트랜잭션의 출력은 승리 공개 키에 의존하여 공개 키들의 여러 세트들 중 하나에 잠길 수 있다. 즉, 제1 공개 키가 승리 공개 키로서 선택된 경우, 출력이 공개 키들의 제1 세트(이는 하나의 공개 키 또는 여러 공개 키들일 수 있음)에 잠길 수 있고, 상이한 제2 공개 키가 승리 공개 키로서 선택되는 경우, 출력은 공개 키들의 제2 세트(이는 하나의 공개 키 또는 여러 공개 키들일 수 있음)에 잠길 수 있다. 공개 키들의 제1 세트는 사용자 공개 키들의 세트, 즉 사용자가 대응하는 개인 키에 대한 액세스를 갖는 공개 키들일 수 있다. 공개 키들의 제2 세트는 오라클 공개 키들의 세트, 즉 오라클(502)이 대응하는 개인 키에 대한 액세스를 갖는 공개 키들일 수 있다.
일부 예들에서, 게임의 결과는 하나 초과의 게임 요소에 기초하여 결정될 수 있다. 예컨대, 슬롯 머신에서, 게임의 결과는 통상적으로 다수의 릴들 상의 개개의 심볼들에 의존한다. 임의의 이러한 게임에 대해, 오라클은 게임 요소들의 각각의 세트에 대한 공개 키들의 시퀀스를 획득할 수 있다. 공개 키들의 둘 이상의 시퀀스들은 동일한 게임 요소들을 표현할 수 있다(예컨대, 슬롯 머신 상의 2개의 릴들은 동일한 심볼로 구성될 수 있음). 대안적으로, 공개 키들의 각각의 시퀀스는 상이한 게임 요소들을 표현할 수 있다(예컨대, 하나의 시퀀스는 숫자들의 세트를 표현하고 하나의 시퀀스는 컬러들의 세트를 표현함). 게임 요소들의 세트들의 수에 관계없이, 공개 키들의 각각의 대응하는 시퀀스는 동일한 게임 요소를 표현하는 다수의 공개 키들을 포함할 수 있는데, 즉 주어진 게임 요소는 하나 초과의 공개 키(이는 동일한 공개 키일 수 있거나 아닐 수 있음)에 의해 표현될 수 있다.
오라클은 공개 키들의 각각의 시퀀스로부터 하나씩, 다수의 승리 공개 키들을 선택하도록 구성되게 게임 트랜잭션을 생성할 수 있다. 즉, 출력 스크립트는 시드 데이터 아이템들의 동일한 세트에 기초하여 각각 생성되는 다수의 의사 난수들을 생성하도록 구성된다. 각각의 의사 난수는 그 후 공개 키들의 각각의 시퀀스로부터 공개 키를 선택하는데 사용된다.
일부 예들에서, 오라클은 게임 트랜잭션을 생성하기 앞서 다수의 의사 난수들을 생성하고 게임 트랜잭션의 출력에 다수의 의사 난수들을 삽입한다. 그러나 바람직하게는, 의사 난수들은 스크립트에서 생성된다. 스크립트에서 하나의 의사 난수를 생성하는 데 사용된 동일한 기술이 한 번 이상 추가로 사용되어 하나 이상의 부가적인 의사 난수를 생성할 수 있다. 즉, 제1 난수를 생성하기 위해, 출력 스크립트는 시드 데이터 아이템들(또는 해시들)의 세트를 결합(예컨대, 합산)하고 제1 해시 함수를 결합에 적용할 수 있다. 그 후 조합의 해시(아래에서 제1 해시 결과로서 지칭됨)가 제1 의사 난수로서 사용을 위해 숫자에 매핑되며, 매핑은 공개 키들의 제1 시퀀스에 의해 표현되는 게임 요소들의 총 수, 즉 공개 키들의 제1 시퀀스 내 공개 키들의 총 수에 기초한다. 제2 의사 난수를 생성하기 위해, 출력 스크립트는 시드 데이터 아이템들(또는 해시들)의 세트를 결합(예컨대, 합산)하고 제2 해시 함수를 결합에 적용할 수 있다. 그 후 조합의 해시(아래에서 제2 해시 결과로서 지칭됨)가 제2 의사 난수로서 사용을 위해 숫자에 매핑되며, 매핑은 공개 키들의 제2 시퀀스에 의해 표현되는 게임 요소들의 총 수, 또는 즉 공개 키들의 제2 시퀀스 내 공개 키들의 총 수에 기초한다. 제1 및 제2 해시 함수들은 동일한 해시 함수 또는 상이한 해시 함수들일 수 있다. 여기서, 상이한 해시 함수는 동일한 해시 함수를 여러 번 적용할 수 있다.
제1 승리 공개 키를 선택하기 위한 동일한 기술이 하나 이상의 부가적인 승리 공개 키들을 선택하는 데 사용된다. 즉, 게임 트랜잭션은 공개 키들의 각각의 시퀀스 및 대응하는 의사 난수에 기초하여 각각의 시퀀스로부터 공개 키를 선택하는 데 사용되는 스크립트의 대응하는 부분을 포함한다. 즉, 승리 공개 키는 제1 의사 난수에 기초하여 공개 키들의 제1 시퀀스로부터 선택되고, 승리 공개 키는 제2 의사 난수에 기초하여 공개 키들의 제2 시퀀스로부터 선택되는 식이다.
게임 트랜잭션의 출력 스크립트는 선택된 승리 공개 키들에 기초하여 하나 이상의 공개 키들에 출력을 잠글 수 있다. 즉, 게임 트랜잭션의 출력은 승리 공개 키에 의존하여 공개 키들의 세트에 잠길 수 있다. 즉, 하나 이상의 예측된 공개 키들이 승리 공개 키들로서 선택되는 경우, 출력이 하나 이상의 사용자 공개 키들(사용자가 대응하는 개인 키를 갖거나 전송받은 공개 키들)에 잠길 수 있다. 출력 스크립트는, 리뎀션 트랜잭션의 입력이 하나 이상의 미리 결정된 공개 키들에 대응하는 개인 키들을 사용하여 생성된 서명들을 포함한다는 것을 체크할 수 있다. 출력 스크립트는 다중-서명 출력일 수 있는데, 즉 리뎀션 트랜잭션의 입력은 예측된 공개 키들에 대응하는 개개의 개인 키들에 의해 생성된 미리 결정된 수의 서명들을 포함해야 한다. 예측된 공개 키들은 사용자(501)에 의해 오라클(502)에 제공될 수 있고, 또는 사용자(501)는 오라클이 미리 결정된 공개 키들을 생성하도록 예측된 게임 요소들을 오라클에 제공할 수 있다.
반면에, 하나 이상의 예측된 공개 키들이 승리 공개 키들로서 선택되지 않은 경우, 출력은 하나 이상의 사용자 공개 키들에 대응하는 개인에 의해 잠금 해제되지 않을 수 있다. 예컨대, 출력은 상이한 공개 키들의 세트(예컨대, 오라클의 공개 키)에 잠길 수 있다.
예시적인 사용 사례들
사용 사례 1: 증명 가능하게 공정한 슬롯 머신들
다음은 블록체인 상에서 증명 가능하게 공정한 슬롯 머신들을 구현하는 단계별 프로세스를 설명한다. 잠금 스크립트는 단일 릴 슬롯 머신을 모델링하며, 두 개의 공개 키들(플레이어 및 하우스에 속함)만이 가상 릴 상에 나타난다. 이는 인-스크립트 슬롯들의 게임 로직을 예시하기 위한 단순화된 모델이라는 것에 주의한다. 실제 및 온라인 슬롯들은 다수의 심볼들 및 아래의 제1 예에서 예시된 50:50 보다 더 복잡한 승률(winning odds)을 갖고, 이에 따라 추후의 예에서 추가로 개발될 것이다.
프로세스:
1. 오라클은 부분적으로 완료된 커밋멘트 트랜잭션
Figure pct00095
에서 오라클 시드의 해시 다이제스트
Figure pct00096
를 커밋한다.
2. 사용자는 자신의 베팅 자금 x 및 사용자 시드의 해시 다이제스트
Figure pct00097
를 입력하여 트랜잭션
Figure pct00098
를 완성한다. 이는 순서화를 보장하는데: 사용자는 오라클의 해시 커밋을 봤다는 것을 확인응답(acknowledges)하고 그에 대해 서명함으로써 이 사실을 증명한다. 대안적으로, 사용자가 먼저 자신의 시드를 제공할 수 있다. 각각의 시드는 지출 불가능한 출력(예컨대, OP_RETURN)에서 제공된다.
3.
Figure pct00099
는 하우스 Sig P0 및 플레이어 Sig P1 둘 모두에 의해 서명되고 증명되면 블록체인 상에 채굴된다.
오라클에 대한 사용자의 커밋멘트 트랜잭션은 아래에서 도시된다. 이 예에서, 오라클로부터의 제1 입력은 SIGHASH | ANYONECANPAY 플래그를 사용하는 반면, 사용자로부터의 제2 입력은 SIGHASHALL 플래그를 사용하여 트랜잭션을 완료하고 브로드캐스트한다.
Figure pct00100
4. 사용자는 안전한 오프-체인 통신 채널을 통해 사용자 시드(사전 이미지 X1)를 오라클의 의사 난수 생성기(PRNG)에 전송한다.
5. 오라클은 위에서 설명된 해시 방법에 따라 오라클 및 사용자 시드들 둘 모두 H(X0+X1)를 사용하여 스크립트에서 난수 RN을 컴퓨팅한다. 일반화된 형태의 이러한 컴퓨테이션은 다음과 같이 주어진다:
Figure pct00101
여기서 i=0,1,…,N은 하우스(i=0) 및 각각의 플레이어(i=1,…,N)를 통해 순환하며, r은 슬롯의 각각의 릴 상의 포지션들(예컨대, 심볼들)의 수에 대응한다. 의사 난수를 생성하기 위한 대안적인 방법들(예컨대, 서명 방법 또는 결합된 방법)이 사용될 수 있다.
6. 슬롯 머신 스핀 트랜잭션
Figure pct00102
(게임 트랜잭션)은
Figure pct00103
부터 UTXO를 지출하는 오라클에 의해 셋업된다. 스핀 트랜잭션은 게임 요소들(이 단순화된 예에서, 단 2개)을 표현하는 공개 키들의 시퀀스를 포함한다.
7. 오라클의 자금들은
Figure pct00104
에 대한 보조 입력으로서 추가된다.
8.
Figure pct00105
의 잠금 스크립트는 r개의 공개 키들에 의해 표현되는 r개의 심볼들의 목록으로부터 승리 심볼(들)을 선택하는 게임 로직을 포함한다.
Figure pct00106
의 간단한 예는 아래 그림에서 도시된다. 사용자의 공개 키가 난수에 의해 선택되는 경우, 총 자금들이 그 키에 설정(encumbered)된다. 사용자의 성공적인 스핀에 따르는 상금-리뎀션 트랜잭션이 또한 아래에 도시된다.
Figure pct00107
Figure pct00108
3-릴 슬롯들:
전통적으로 슬롯 머신들은 3개 이상의 릴들을 포함한다. 이전 섹션의 간단한 예는 k > 1개의 릴들을 모델링하는 것으로 확장될 수 있으며, 여기서 총 k+1개의 난수들이 요구된다. 이는 통상적으로 온라인 슬롯 머신들이 스핀, 즉 슬롯 머신 상의 플레이어의 턴을 표현하는 난수 RN 외에, 릴 당 하나의 고유한 난수를 사용하기 때문이다. 오라클은 난수를 j번 해싱함으로써 j번째 릴에 대한 고유 난수
Figure pct00109
를 생성할 수 있다. 따라서 스핀을 포함하는 k-릴 슬롯들에 대한 일반적인 컴퓨테이션은 다음과 같이 작성될 수 있다:
Figure pct00110
아래 그림은 3-릴 슬롯 머신에 대한 스핀 트랜잭션
Figure pct00111
을 도시하며, 여기서 사용자의 승리 결과는 3개의 매칭되는 승리 공개 키들이 각각의 릴의 가상 스핀으로부터 선택되는 것에 기인한다. 이 예에서, 임의의 공개 키들의 세트
Figure pct00112
는 다음 스크립트를 사용하여 실행되는 각각의 릴 내 심볼들을 표현하는 데 사용된다:
Figure pct00113
상금-리뎀션 트랜잭션이 또한 아래에 도시된다.
Figure pct00114
Figure pct00115
승률들:
통상적인 가중화된 슬롯들은 각각의 릴 내 22개의 실제 포지션들을 갖는다. 각각의 포지션(잭팟은 배제함)은 종종 32, 64, 128, 256 또는 512개의 스톱(stop)들을 포함하는 가상 릴 상의 하나 초과의 포지션에 매핑된다. 릴들이 모두 동일한 방식으로 세팅된다고 가정하면, 64-스톱 가상 릴에 대해, 잭팟에 당첨될 확률은 실제로 643 또는 262,144 분의 1이다. 본 구현은 공개 키들을 사용하여 이러한 심볼들을 표현하기 때문에, 하우스가 스핀 전에 매핑들을 분배하지 않는 한, 플레이어는 동일한 심볼에 얼마나 많은 키들이 매핑되는지를 알 수 없을 것이다.
Figure pct00116
의 잠금 스크립트는 임의의 매칭되는 키들의 조합에 대해 플레이어에게 자금들을 릴리스하기 때문에, 오라클은 그의 선택된 매핑 또는 승리 확률을 드러냄 없이 스크립트에서 가상 릴의 확률들을 복제할 수 있다. 그러나 플레이어가 이 정보를 요청하면, 하우스는 커밋멘트 트랜잭션
Figure pct00117
의 널(null) 데이터 출력에서 매핑의 해시 다이제스트 <H(Mapping)>를 서버 및 클라이언트 시드들과 함께 증명할 수 있다.
사용자는 키 생성 프로세스에 기여할 수 있고, 이에 따라 r개의 키들의 목록과 연관된 개인 키들 중 하나 이상을 소유할 수 있다. 이 경우에, 사용자는 (예컨대, 단순화된 1-릴 슬롯 예에서 예시된 바와 같이) 간단히 리뎀션 트랜잭션에서 승리 개인-공개 키 쌍(들)으로부터 도출된 서명을 제공할 수 있다. 3-릴 슬롯 사용 사례에 대해, 이는 다음을 위해
Figure pct00118
잠금 스크립트의 제2 부분에 있는 조건문을 다음과 같이 변경할 것이다:
Figure pct00119
프로그레시브 잭팟들 :
슬롯 머신들은 일반적으로 오라클에 대한 사용자이다. 그러나 N-플레이어들은 카지노들 또는 슬롯들의 네트워크를 통해 단일 잭팟에 모두 링크된 상이한 슬롯 머신들 상에서 플레이중일 수 있다. 이 경우에, 어느 단일 사용자가 전체 잭팟을 주장할 수 있는지를 결정하기 위해 플레이의 순서가 중요하다. 설명된 증명 가능하게 공정한 방법들을 사용하여 이를 기록하기 위해, 각각의 사용자 시드는 모든 이전 사용자의 해시 다이제스트들
Figure pct00120
로 컨케터네이팅될 수 있어서, 각각의 플레이어의 입력은 항상 모든 각각의
Figure pct00121
내에서 블록체인에 순차적으로 증명되게 한다. 하우스가 각각의 스핀 시에 난수 생성에 기여하도록 항상 새로운 오라클 시드 X0가 생성되고 사용자의 입력에 추가되어야 한다는 것에 주의한다. 사용자가 잭팟에 도달하면, 해시 다이제스트가 새로고침(refresh)되어서 맨 처음부터 시작할 수 있다.
X-of-Y 보너스 슬롯들:
공개 키들의 목록으로부터 선택되는 X-of-Y 공개 키들에 대한 베팅의 커밋멘트가 m-of-n 다중서명(Multisig)을 사용하여 이루어질 수 있다. 이 예에서, 사용자는 자신이 선택한 심볼(들)이 할당된 공개 키들을 생성한다. 심볼들의 승리 조합이 선택되는 경우, 사용자는 m-of-n 다중서명을 사용하여 자금들을 잠금 해제할 수 있다. 사용자가 3-릴 슬롯 머신의 스핀에서 선택되는 2-of-3 Pa 심볼들에 베팅하는 예시적인 스핀 트랜잭션이 아래에서 도시된다.
Figure pct00122
Figure pct00123
다중서명 요건은 또한 조건부 IF 또는 ELSE 문(statement)들의 세트 내에 포함된 P2PKH(pay to public key hash) 스크립트들의 세트로부터 구성될 수 있다. 아래의 잠금 스크립트는 다음과 같이 마지막 릴 스핀 후에 실행될 것이다.
Figure pct00124
위의 잠금 스크립트에서 게임 로직의 단계별 설명은 다음과 같이 주어진다:
1. 제1 스택 아이템이 Pa와 동일한지를 체크한다.
a. 만약 그렇다면, 제2 스택 아이템이 Pa와 동일한지를 체크한다.
i. 만약 그렇다면, 자금들을 Pa에 잠근다.
ii. 만약 아니라면, 맨 위 스택 아이템을 제거하고 제3 스택 아이템이 Pa와 동일한지를 체크한다.
1. 만약 그렇다면, 자금들을 Pa에 잠근다.
2. 만약 아니라면, 자금을 하우스 P0에 잠근다.
b. 만약 아니라면, 맨 위 스택 아이템을 제거하고 제2 스택 아이템이 Pa와 동일한지를 체크한다.
i. 만약 그렇다면, 제3 스택 아이템이 Pa와 동일한지를 체크한다.
1. 만약 그렇다면, 자금들을 Pa에 잠근다.
2. 만약 아니라면, 자금을 하우스 P0에 잠근다.
사용 사례 2: 증명 가능하게 공정한 룰렛
이 예에서, 룰렛 휠 상의 37개의 포지션들(숫자 0 ― 36)은 37개의 공개 키들에 매핑된다. 이 매핑의 해시 다이제스트는 커밋멘트 트랜잭션
Figure pct00125
에서 온-체인으로 공개될 수 있다. 여기서 동일한 게임 로직이, 사용자가 하우스와 플레이하는 위에서 주어진 슬롯 머신 예들에 적용되고 가상 룰렛 휠의 스핀은 증명 가능하게 공정한 난수를 사용하여 선택된 승리 포지션을 결정한다.
게임 로직의 주요 차이는 룰렛 휠을 플레이하는 사용자는 특정 결과 예컨대, 숫자, 숫자들의 다양한 그룹화들, 숫자가 홀수인지 아니면 짝수인지 또는 높은지 아니면 낮은지 또는 승리 포지션의 컬러(흑색 또는 적색)에 베팅할 것이란 점이다. 승리 확률들은 이러한 그룹화들뿐만 아니라 플레이어의 배팅 사이즈에 의존한다. 따라서 스핀 트랜잭션에서 오라클로부터 제공받은(contribute) 자금들 y는 이러한 확률들을 반영하는 데 사용될 수 있다. 아래에는 플레이어가 숫자 7에 베팅하는 스핀 트랜잭션의 예가 도시된다.
Figure pct00126
P7이 실제로 승리 포지션인 경우, 자금들은 간단히 플레이어의 서명 <
Figure pct00127
> <
Figure pct00128
>으로 잠금해제될 수 있다. 그러나 플레이어가 P7에 대한 개인 키를 소유한 경우(그리고 오라클이 모든 나머지 키들에 대한 개인 키를 소유한 경우), 잠금 스크립트는 간단히 다음과 같이 작성될 수 있다.
Figure pct00129
숫자들의 그룹들 예컨대, 홀수들에 베팅하는 사용자는, 이들이 홀수 공개 키들과 연관된 18개의 개인 키들 중 하나를 소유한 경우 다중-서명 주소에 설정된 자금들을 리딤할 수 있다.
Figure pct00130
P11의 승리 포지션에 대해, 위의 스핀에 대한 상금-리뎀션 트랜잭션은 다음의 형식을 취할 것이다:
Figure pct00131
결론
위의 실시예들은 단지 예로서만 설명되었다는 것이 인지될 것이다. 보다 일반적으로, 다음 스테이트먼트들 중 임의의 하나 이상에 따른 방법, 장치 또는 프로그램이 제공될 수 있다.
스테이트먼트 1. 게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법으로서,
게임은 게임의 결과를 결정하는 데 사용되는 제1 게임 요소들의 세트를 포함하고, 게임은 현재 사용자에 의해 플레이되고, 방법은 오라클에 의해 수행되고,
시드 데이터 아이템들의 세트를 획득하는 단계 ― 시드 데이터 아이템들의 세트는 개개의 사용자에 의해 생성된 하나 이상의 사용자 시드 데이터 아이템들을 포함함 ― ;
제1 공개 키들의 시퀀스를 획득하는 단계 ― 각각의 제1 공개 키는 제1 게임 요소들의 세트의 개개의 게임 요소를 표현함 ― ;
게임 트랜잭션의 제1 출력을 생성하는 단계를 포함하고, 제1 출력은 제1 공개 키들 중 적어도 일부의 시퀀스를 포함하는 출력 스크립트를 포함하고, 출력 스크립트는, 실행될 때, 적어도 하나의 제1 의사 난수를 생성하고 적어도 하나의 제1 승리 키를 선택하도록 구성되고, 적어도 하나의 제1 의사 난수는 시드 데이터 아이템들의 세트에 기초하고, 적어도 하나의 제1 승리 공개 키는 적어도 하나의 제1 의사 난수에 대응하는 제1 공개 키들의 시퀀스 내 포지션의 공개 키인, 방법.
스테이트먼트 2. 스테이트먼트 1의 방법에 있어서,
시드 데이터 아이템들의 세트는 오라클에 의해 생성된 오라클 시드 데이터 아이템을 포함하는, 방법.
스테이트먼트 3. 스테이트먼트 1 또는 스테이트먼트 2의 방법에 있어서,
커밋멘트 트랜잭션을 생성하는 단계 ― 커밋멘트 트랜잭션은 오라클 시드 데이터 아이템을 포함하는 블록체인 트랜잭션임 ― ; 및
개개의 사용자들 중 현재 사용자에게 커밋멘트 트랜잭션을 송신하는 단계를 포함하는, 방법.
스테이트먼트 4. 스테이트먼트 1 또는 스테이트먼트 2의 방법에 있어서,
커밋멘트 트랜잭션을 획득하는 단계 ― 커밋멘트 트랜잭션은 현재 사용자에 의해 생성된 사용자 시드 데이터 아이템을 포함함 ― ; 및
블록체인에의 포함을 위해 블록체인 네트워크에 커밋멘트 트랜잭션을 송신하는 단계를 포함하는, 방법.
스테이트먼트 5. 스테이트먼트 3 또는 스테이트먼트 4의 방법에 있어서,
게임 트랜잭션은 커밋멘트 트랜잭션의 제1 출력을 잠금 해제하도록 구성된 제1 입력을 포함하는, 방법.
스테이트먼트 6. 스테이트먼트 1 내지 스테이트먼트 5 중 어느 하나의 방법에 있어서,
제1 의사 난수는,
제1 해시 결과를 생성하기 위해 시드 데이터 아이템들의 세트의 조합에 제1 해시 함수를 적용하고; 그리고
제1 게임 요소들의 세트 내 제1 게임 요소들의 제1 총 수에 기초한 숫자에 제1 해시 결과를 매핑함으로써 생성되는, 방법.
스테이트먼트 7. 스테이트먼트 6의 방법에 있어서,
상기 매핑은 제1 해시 결과의 제1 모듈러스를 취하는 단계를 포함하고, 상기 제1 총 수는 제1 모듈러스인, 방법.
스테이트먼트 8. 전술한 스테이트먼트 중 어느 한 스테이트먼트에 있어서,
공개 키들의 시퀀스 및 공개 키들에 의해 표현되는 개개의 제1 게임 요소들에 대한 매핑에 해시 함수를 적용함으로써 매핑 해시를 생성하는 단계; 및
매핑 해시를 적어도 현재 사용자에게 이용 가능하게 하는 단계를 포함하는, 방법.
스테이트먼트 9. 스테이트먼트 8의 방법에 있어서,
매핑 해시를 이용 가능하게 하는 상기 단계는 블록체인에의 포함을 위한 트랜잭션에 매핑 해시를 포함시키는 단계를 포함하는, 방법.
스테이트먼트 10. 전술한 스테이트먼트 중 어느 한 스테이트먼트에 있어서,
상기 시드 데이터 아이템들의 세트를 획득하는 단계는 개개의 사용자들로부터 개개의 사용자 시드 데이터 아이템들을 획득하는 단계를 포함하는, 방법.
스테이트먼트 11. 전술한 스테이트먼트 중 어느 한 스테이트먼트에 있어서,
제1 공개 키들의 시퀀스를 획득하는 상기 단계는 현재 사용자로부터 상기 제1 공개 키들 중 하나 이상을 획득하는 단계를 포함하는, 방법.
스테이트먼트 12. 전술한 스테이트먼트 중 어느 한 스테이트먼트에 있어서,
제1 출력 스크립트는, 실행될 때, 제1 출력을 제1 승리 공개 키에 잠그도록 구성되는, 방법.
스테이트먼트 13. 스테이트먼트 12의 방법에 있어서,
현재 사용자에게 제1 승리 공개 키에 대응하는 개인 키를 송신하는 단계를 포함하는, 방법.
스테이트먼트 14. 스테이트먼트 1 내지 스테이트먼트 11 중 어느 하나의 방법에 있어서,
제1 출력 스크립트는, 실행될 때, 제1 출력을 a) 현재 사용자와 연관된 하나 이상의 사용자 공개 키들, 또는 b) 오라클과 연관된 오라클 공개 키에 잠그도록 구성되고, 제1 출력은 제1 승리 공개 키에 기초하여, a) 하나 이상의 사용자 공개 키들, 또는 b) 오라클 공개 키 중 어느 하나에 잠기는, 방법.
스테이트먼트 15. 스테이트먼트 1 내지 스테이트먼트 11 중 어느 하나의 방법에 있어서,
게임은 게임의 결과를 결정하는데 사용되는 제2 게임 요소들의 세트를 포함하고, 방법은,
제2 공개 키들의 시퀀스를 획득하는 단계를 포함하고, 각각의 제2 공개 키는 제2 게임 요소들의 세트의 개개의 게임 요소를 표현하고; 그리고
출력 스크립트는, 실행될 때, 제2 의사 난수를 생성하고, 제2 승리 공개 키로서, 제2 의사 난수에 대응하는 제2 공개 키들의 시퀀스 내 포지션의 공개 키 선택하도록 구성되고, 제2 의사 난수는 시드 데이터 아이템들의 세트에 기초하는, 방법.
스테이트먼트 16. 스테이트먼트 15의 방법에 있어서,
제2 의사 난수는,
제2 해시 결과를 생성하기 위해 시드 데이터 아이템들의 세트의 조합에 제2 해시 함수를 적용하고; 그리고
제2 게임 요소들의 세트 내 제2 게임 요소들의 제2 총 수에 기초한 숫자에 제2 해시 결과를 매핑함으로써 생성되는, 방법.
스테이트먼트 17. 스테이트먼트 16의 방법에 있어서,
제2 해시 결과의 상기 매핑은 제2 해시 결과의 제2 모듈러스를 취하는 것을 포함하고, 상기 제2 총 수는 제2 모듈러스인, 방법.
스테이트먼트 18. 스테이트먼트 15 내지 스테이트먼트 17 중 어느 하나의 방법에 있어서,
제1 출력 스크립트는, 실행될 때, 제1 출력을 a) 현재 사용자와 연관된 하나 이상의 사용자 공개 키들, 또는 b) 오라클 공개 키에 잠그도록 구성되고, 제1 출력은, 적어도 제2 승리 공개 키에 대응하는 제1 승리 공개 키에 기초하여, a) 하나 이상의 사용자 공개 키들, 또는 b) 오라클 공개 키 중 어느 하나에 잠기는, 방법.
스테이트먼트 19. 스테이트먼트 18의 방법에 있어서,
제1 출력 스크립트는 제1 출력을 a) 하나 이상의 사용자 공개 키들에 잠그기 위한 다중-서명 스크립트를 포함하는, 방법.
스테이트먼트 20. 전술한 스테이트먼트 중 어느 한 스테이트먼트의 방법에 있어서,
하나 이상의 제1 공개 키들은 동일한 제1 게임 요소를 표현하고, 그리고/또는 하나 이상의 제2 공개 키들은 동일한 제2 게임 요소를 표현하는, 방법.
스테이트먼트 21. 전술한 스테이트먼트 중 어느 한 스테이트먼트의 방법에 있어서,
게임 트랜잭션을 블록체인 네트워크 및/또는 개개의 사용자들 중 하나 이상에 송신하는 단계를 포함하는, 방법.
스테이트먼트 22. 블록체인에의 포함을 위한 트랜잭션으로서,
출력을 포함하고, 출력은 공개 키들의 시퀀스를 포함하는 출력 스크립트를 포함하고, 각각의 공개 키는 게임 요소들의 세트의 개개의 게임 요소를 표현하고, 출력 스크립트는 적어도 하나의 제1 의사 난수를 생성하도록 구성되고, 적어도 하나의 제1 의사 난수는 시드 데이터 아이템들의 세트에 기초하고, 시드 데이터 아이템들의 세트는 개개의 사용자에 의해 생성된 하나 이상의 사용자 시드 데이터 아이템들을 포함하고, 출력 스크립트는 적어도 하나의 제1 승리 키를 선택하도록 구성되고, 적어도 하나의 제1 승리 공개 키는 적어도 하나의 제1 의사 난수에 대응하는 공개 키들의 시퀀스 내 포지션의 공개 키인, 블록체인에의 포함을 위한 트랜잭션.
스테이트먼트 23. 스테이트먼트 22의 트랜잭션이 저장되어 있는 컴퓨터-판독 가능 저장 매체.
스테이트먼트 24. 컴퓨터 장비로서,
하나 이상의 메모리 유닛들을 포함하는 메모리; 및
하나 이상의 프로세싱 유닛들을 포함하는 프로세싱 장치를 포함하고, 메모리는 프로세싱 장치 상에서 실행되도록 구성된 코드를 저장하고, 코드는 프로세싱 장치 상에 있을 때, 스테이트먼트 1 내지 스테이트먼트 21 중 어느 하나의 방법을 수행하도록 구성되는, 컴퓨터 장비.
스테이트먼트 25. 컴퓨터-판독 가능 저장소 상에서 구체화되고, 스테이트먼트 24의 컴퓨터 장비 상에서 실행될 때 스테이트먼트 1 내지 스테이트먼트 21 중 어느 한 스테이트먼트의 방법을 수행하도록 구성된 컴퓨터 프로그램.
본원에서 개시된 교시들의 다른 양상에 따르면, 오라클 및 사용자의 액션들을 포함하는 방법이 제공될 수 있다.
본원에서 개시된 교시들의 다른 양상에 따르면, 오라클 및 사용자의 컴퓨터 장비를 포함하는 시스템이 제공될 수 있다.
다른 변형들은 본원에서의 개시가 주어지면 당업자에게 명백해질 수 있다. 본 개시내용의 범위는 개시된 실시예에 의해 제한되는 것이 아니라 첨부된 청구들에 의해서만 제한된다.

Claims (25)

  1. 게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법으로서,
    상기 게임은 상기 게임의 결과를 결정하는 데 사용되는 제1 게임 요소들의 세트를 포함하고, 상기 게임은 하나 이상의 개개의 사용자들에 의해 플레이되고, 상기 방법은 오라클(oracle)에 의해 수행되고,
    시드 데이터 아이템들의 세트를 획득하는 단계 ― 상기 시드 데이터 아이템들의 세트는 개개의 사용자에 의해 생성된 하나 이상의 사용자 시드 데이터 아이템들을 포함함 ― ;
    제1 공개 키들의 시퀀스를 획득하는 단계 ― 각각의 제1 공개 키는 상기 제1 게임 요소들의 세트의 개개의 게임 요소를 표현함 ― ;
    게임 트랜잭션의 제1 출력을 생성하는 단계를 포함하고,
    상기 게임 트랜잭션은 블록체인 트랜잭션이고, 상기 제1 출력은 상기 제1 공개 키들 중 적어도 일부의 시퀀스를 포함하는 출력 스크립트를 포함하고, 상기 출력 스크립트는, 실행될 때, 적어도 하나의 제1 의사 난수를 생성하고 적어도 하나의 제1 승리 키를 선택하도록 구성되고, 상기 적어도 하나의 제1 의사 난수는 상기 시드 데이터 아이템들의 세트에 기초하고, 상기 적어도 하나의 제1 승리 공개 키는 상기 적어도 하나의 제1 의사 난수에 대응하는 상기 제1 공개 키들의 시퀀스 내 포지션의 공개 키인,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  2. 제1 항에 있어서,
    상기 게임 트랜잭션을 상기 블록체인 네트워크 및/또는 상기 개개의 사용자들 중 하나 이상에 송신하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  3. 제1 항 또는 제2 항에 있어서,
    상기 시드 데이터 아이템들의 세트는 상기 오라클에 의해 생성된 오라클 시드 데이터 아이템을 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  4. 전술한 청구항 중 어느 한 항에 있어서,
    커밋멘트 트랜잭션(commitment transaction)을 생성하는 단계 ― 상기 커밋멘트 트랜잭션은 상기 오라클 시드 데이터 아이템을 포함하는 블록체인 트랜잭션임 ― ; 및
    상기 개개의 사용자들 중 현재 사용자에게 상기 커밋멘트 트랜잭션을 송신하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  5. 제1 항 내지 제3 항 중 어느 한 항에 있어서,
    커밋멘트 트랜잭션을 획득하는 단계 ― 상기 커밋멘트 트랜잭션은 현재 사용자에 의해 생성된 상기 사용자 시드 데이터 아이템을 포함함 ― ; 및
    블록체인에의 포함을 위해 블록체인 네트워크에 상기 커밋멘트 트랜잭션을 송신하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  6. 제4 항 또는 제5 항에 있어서,
    상기 게임 트랜잭션은 상기 커밋멘트 트랜잭션의 제1 출력을 잠금 해제하도록 구성된 제1 입력을 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  7. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 제1 의사 난수는,
    제1 해시 결과를 생성하기 위해 상기 시드 데이터 아이템들의 세트의 조합에 제1 해시 함수를 적용하고; 그리고
    상기 제1 게임 요소들의 세트 내 제1 게임 요소들의 제1 총 수에 기초한 숫자에 상기 제1 해시 결과를 매핑함으로써 생성되는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  8. 제7 항에 있어서,
    상기 매핑은 상기 제1 해시 결과의 제1 모듈러스(modulus)를 취하는 단계를 포함하고, 상기 제1 총 수는 상기 제1 모듈러스인,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  9. 전술한 청구항 중 어느 한 항에 있어서,
    상기 공개 키들의 시퀀스 및 상기 공개 키들에 의해 표현되는 개개의 제1 게임 요소들에 대한 매핑에 해시 함수를 적용함으로써 매핑 해시를 생성하는 단계; 및
    상기 매핑 해시를 적어도 상기 현재 사용자에게 이용 가능하게 하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  10. 제9 항에 있어서,
    상기 매핑 해시를 이용 가능하게 하는 단계는 상기 블록체인에의 포함을 위한 트랜잭션에 상기 매핑 해시를 포함시키는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  11. 전술한 청구항 중 어느 한 항에 있어서,
    상기 시드 데이터 아이템들의 세트를 획득하는 상기 단계는 개개의 사용자들로부터 상기 개개의 사용자 시드 데이터 아이템들을 획득하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  12. 전술한 청구항 중 어느 한 항에 있어서,
    상기 제1 공개 키들의 시퀀스를 획득하는 상기 단계는 상기 현재 사용자로부터 상기 제1 공개 키들 중 하나 이상을 획득하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  13. 전술한 청구항 중 어느 한 항에 있어서,
    상기 제1 출력 스크립트는, 실행될 때, 상기 제1 출력을 상기 제1 승리 공개 키에 잠그도록 구성되는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  14. 제13 항에 있어서,
    상기 현재 사용자에게 상기 제1 승리 공개 키에 대응하는 개인 키를 송신하는 단계를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  15. 제1 항 내지 제12 항 중 어느 한 항에 있어서,
    상기 제1 출력 스크립트는, 실행될 때, 상기 제1 출력을 a) 상기 현재 사용자와 연관된 하나 이상의 사용자 공개 키들, 또는 b) 상기 오라클과 연관된 오라클 공개 키에 잠그도록 구성되고, 상기 제1 출력은 상기 제1 승리 공개 키에 기초하여, a) 상기 하나 이상의 사용자 공개 키들, 또는 b) 상기 오라클 공개 키 중 어느 하나에 잠기는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  16. 제1 항 내지 제12 항 중 어느 한 항에 있어서,
    상기 게임은 상기 게임의 결과를 결정하는데 사용되는 제2 게임 요소들의 세트를 포함하고, 방법은:
    제2 공개 키들의 시퀀스를 획득하는 단계를 포함하고, 각각의 제2 공개 키는 상기 제2 게임 요소들의 세트의 개개의 게임 요소를 표현하고; 그리고
    상기 출력 스크립트는, 실행될 때, 제2 의사 난수를 생성하고, 제2 승리 공개 키로서, 상기 제2 의사 난수에 대응하는 상기 제2 공개 키들의 시퀀스 내 포지션의 공개 키 선택하도록 구성되고, 상기 제2 의사 난수는 상기 시드 데이터 아이템들의 세트에 기초하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  17. 제16 항에 있어서,
    상기 제2 의사 난수는,
    제2 해시 결과를 생성하기 위해 상기 시드 데이터 아이템들의 세트의 조합에 제2 해시 함수를 적용하고; 그리고
    상기 제2 게임 요소들의 세트 내 제2 게임 요소들의 제2 총 수에 기초한 숫자에 상기 제2 해시 결과를 매핑함으로써 생성되는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  18. 제17 항에 있어서,
    상기 제2 해시 결과의 상기 매핑은 상기 제2 해시 결과의 제2 모듈러스를 취하는 것을 포함하고, 상기 제2 총 수는 상기 제2 모듈러스인,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  19. 제16 항 내지 제18 항 중 어느 한 항에 있어서,
    상기 제1 출력 스크립트는, 실행될 때, 상기 제1 출력을 a) 상기 현재 사용자와 연관된 하나 이상의 사용자 공개 키들, 또는 b) 오라클 공개 키에 잠그도록 구성되고, 상기 제1 출력은, 적어도 상기 제2 승리 공개 키에 대응하는 상기 제1 승리 공개 키에 기초하여, a) 상기 하나 이상의 사용자 공개 키들, 또는 b) 상기 오라클 공개 키 중 어느 하나에 잠기는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  20. 제19 항에 있어서,
    상기 제1 출력 스크립트는 상기 제1 출력을 a) 하나 이상의 사용자 공개 키들에 잠그기 위한 다중-서명 스크립트를 포함하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  21. 전술한 청구항 중 어느 한 항에 있어서,
    하나 이상의 제1 공개 키들은 동일한 제1 게임 요소를 표현하고, 그리고/또는 하나 이상의 제2 공개 키들은 동일한 제2 게임 요소를 표현하는,
    게임을 플레이하는 데 사용하기 위한 승리 게임 요소들을 의사-랜덤으로 생성하는 컴퓨터-구현 방법.
  22. 블록체인에의 포함을 위한 블록체인 트랜잭션으로서,
    출력을 포함하고, 상기 출력은 공개 키들의 시퀀스를 포함하는 출력 스크립트를 포함하고, 각각의 공개 키는 게임 요소들의 세트의 개개의 게임 요소를 표현하고, 상기 출력 스크립트는 적어도 하나의 제1 의사 난수를 생성하도록 구성되고, 상기 적어도 하나의 제1 의사 난수는 시드 데이터 아이템들의 세트에 기초하고, 상기 시드 데이터 아이템들의 세트는 개개의 사용자에 의해 생성된 하나 이상의 사용자 시드 데이터 아이템들을 포함하고, 상기 출력 스크립트는 적어도 하나의 제1 승리 키를 선택하도록 구성되고, 상기 적어도 하나의 제1 승리 공개 키는 상기 적어도 하나의 제1 의사 난수에 대응하는 상기 공개 키들의 시퀀스 내 포지션의 공개 키인,
    블록체인에의 포함을 위한 블록체인 트랜잭션.
  23. 제22 항의 트랜잭션이 저장되어 있는 컴퓨터-판독 가능 저장 매체.
  24. 컴퓨터 장비로서,
    하나 이상의 메모리 유닛들을 포함하는 메모리; 및
    하나 이상의 프로세싱 유닛들을 포함하는 프로세싱 장치를 포함하고, 상기 메모리는 상기 프로세싱 장치 상에서 실행되도록 구성된 코드를 저장하고, 상기 코드는 상기 프로세싱 장치 상에 있을 때, 제1 항 내지 제21 항 중 어느 한 항의 방법을 수행하도록 구성되는,
    컴퓨터 장비.
  25. 컴퓨터-판독 가능 저장소 상에서 구체화되고, 컴퓨터 장비 상에서 실행될 때 제1 항 내지 제21 항 중 어느 한 항의 방법을 수행하도록 구성된 컴퓨터 프로그램.
KR1020227021332A 2019-11-27 2020-11-03 블록체인을 이용한 증명 가능하게 공정한 게임들 KR20220122994A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1917287.3A GB2589349A (en) 2019-11-27 2019-11-27 Povably fair games using a blockchain
GB1917287.3 2019-11-27
PCT/IB2020/060296 WO2021105796A1 (en) 2019-11-27 2020-11-03 Provably fair games using a blockchain

Publications (1)

Publication Number Publication Date
KR20220122994A true KR20220122994A (ko) 2022-09-05

Family

ID=69137346

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227021332A KR20220122994A (ko) 2019-11-27 2020-11-03 블록체인을 이용한 증명 가능하게 공정한 게임들

Country Status (7)

Country Link
US (1) US20220410017A1 (ko)
EP (1) EP4045162A1 (ko)
JP (1) JP2023504067A (ko)
KR (1) KR20220122994A (ko)
CN (1) CN115485042A (ko)
GB (1) GB2589349A (ko)
WO (1) WO2021105796A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3794766A1 (en) 2018-05-14 2021-03-24 Nchain Holdings Limited Computer-implemented systems and methods for using a blockchain to perform an atomic swap
GB2589348A (en) * 2019-11-27 2021-06-02 Nchain Holdings Ltd Provably fair games using a blockchain
US11144978B1 (en) * 2021-02-25 2021-10-12 Mythical, Inc. Systems and methods to support custom bundling of virtual items within an online game
GB2618052A (en) * 2021-12-07 2023-11-01 Nchain Licensing Ag Blockchain script engine

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201620691D0 (en) * 2016-12-05 2017-01-18 Quanta Tech Ltd Random number generation

Also Published As

Publication number Publication date
US20220410017A1 (en) 2022-12-29
CN115485042A (zh) 2022-12-16
WO2021105796A1 (en) 2021-06-03
JP2023504067A (ja) 2023-02-01
GB201917287D0 (en) 2020-01-08
GB2589349A (en) 2021-06-02
EP4045162A1 (en) 2022-08-24

Similar Documents

Publication Publication Date Title
EP4046329B1 (en) Provably fair games using a blockchain
ES2836526T3 (es) Métodos y aparato para una base de datos distribuida dentro de una red
US20220410017A1 (en) Provably fair games using a blockchain
JP2019519137A (ja) 分散型トランザクション伝播および検証システム
US20220269810A1 (en) Using Blockchain Transactions to Provide Off-Chain Functionality
US20220261805A1 (en) Protocol for validating blockchain transactions
US20200152003A1 (en) Gambling systems and methods based on blockchain technology
US20230275770A1 (en) Pseudo-random selection on the blockchain
TW202231012A (zh) 敏感資料攔阻技術
Kushilevitz et al. Fair e-lotteries and e-casinos
WO2023180042A1 (en) Set shuffling
Yakira et al. Economically viable randomness
Andersen Implementation of a tournament based distributed lottery on Ethereum
WO2023180000A1 (en) Set shuffling
Montoto Monroy Bitcoin gambling using distributed oracles in the blockchain
van Oorschot et al. Bitcoin, Blockchains and Ethereum