CN116113921A - 区块链上的伪随机选择 - Google Patents
区块链上的伪随机选择 Download PDFInfo
- Publication number
- CN116113921A CN116113921A CN202180056334.9A CN202180056334A CN116113921A CN 116113921 A CN116113921 A CN 116113921A CN 202180056334 A CN202180056334 A CN 202180056334A CN 116113921 A CN116113921 A CN 116113921A
- Authority
- CN
- China
- Prior art keywords
- transaction
- blockchain
- data elements
- inputs
- seed
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
- 238000013515 script Methods 0.000 claims abstract description 153
- 238000000034 method Methods 0.000 claims abstract description 131
- 230000006870 function Effects 0.000 claims description 107
- 230000000977 initiatory effect Effects 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 22
- 239000002131 composite material Substances 0.000 claims description 13
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 16
- 230000008859 change Effects 0.000 description 13
- 238000009826 distribution Methods 0.000 description 13
- 150000001875 compounds Chemical class 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 10
- 238000012795 verification Methods 0.000 description 10
- 230000003287 optical effect Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000005094 computer simulation Methods 0.000 description 5
- 230000001902 propagating effect Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- AQHHHDLHHXJYJD-UHFFFAOYSA-N propranolol Chemical compound C1=CC=C2C(OCC(O)CNC(C)C)=CC=CC2=C1 AQHHHDLHHXJYJD-UHFFFAOYSA-N 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 238000012913 prioritisation Methods 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 238000009331 sowing Methods 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 229960003712 propranolol Drugs 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- KJLPSBMDOIVXSN-UHFFFAOYSA-N 4-[4-[2-[4-(3,4-dicarboxyphenoxy)phenyl]propan-2-yl]phenoxy]phthalic acid Chemical compound C=1C=C(OC=2C=C(C(C(O)=O)=CC=2)C(O)=O)C=CC=1C(C)(C)C(C=C1)=CC=C1OC1=CC=C(C(O)=O)C(C(O)=O)=C1 KJLPSBMDOIVXSN-UHFFFAOYSA-N 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013175 transesophageal echocardiography Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000009827 uniform distribution Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/582—Pseudo-random number generators
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3247—Cryptographic 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
- H04L9/3252—Cryptographic 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 using DSA or related signature schemes, e.g. elliptic based signatures, ElGamal or Schnorr schemes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/34—Betting or bookmaking, e.g. Internet betting
-
- G—PHYSICS
- G07—CHECKING-DEVICES
- G07C—TIME OR ATTENDANCE REGISTERS; REGISTERING OR INDICATING THE WORKING OF MACHINES; GENERATING RANDOM NUMBERS; VOTING OR LOTTERY APPARATUS; ARRANGEMENTS, SYSTEMS OR APPARATUS FOR CHECKING NOT PROVIDED FOR ELSEWHERE
- G07C15/00—Generating random numbers; Lottery apparatus
- G07C15/006—Generating random numbers; Lottery apparatus electronically
-
- G—PHYSICS
- G07—CHECKING-DEVICES
- G07F—COIN-FREED OR LIKE APPARATUS
- G07F17/00—Coin-freed apparatus for hiring articles; Coin-freed facilities or services
- G07F17/32—Coin-freed apparatus for hiring articles; Coin-freed facilities or services for games, toys, sports, or amusements
- G07F17/3241—Security aspects of a gaming system, e.g. detecting cheating, device integrity, surveillance
Landscapes
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种使用区块链事务伪随机选择数据元素的计算机实现的方法,其中所述方法由第一方执行并且包括:获得数据元素的有序列表和多个种子输入;生成第一事务;以及,使得所述第一事务能够提供给一个或更多个区块链节点以包括在区块链中,其中所述第一事务包括第一输出脚本,并且其中当与第二事务的输入脚本一起执行时,所述第一输出脚本被配置为:输出所述数据元素的重新排序列表;输出基于所述多个种子输入生成的伪随机数;以及输出位于所述数据元素的重新排序列表中与所述伪随机数对应的位置处的所述数据元素,作为所选数据元素。
Description
技术领域
本公开涉及一种使用区块链事务伪随机选择数据元素的方法。所选数据元素可以在区块链上使用(例如,作为锁定条件的一部分)或者被提取以供在链下使用。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。传递给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作量证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“矿工”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务插入到区块模板中,这些事务尝试为该区块模板标识有效的工作量证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作量证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作量证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
发明内容
伪随机数用于许多应用,包括:电子游戏、计算机模拟和密码学。此外,伪随机数可以用于进行伪随机选择,即,对数据元素的确定性但不可预测的选择。在区块链上执行此类选择是有利的,因为此类选择是可验证且不可变的。
区块链事务的输出脚本(也称为锁定脚本)可以被配置为从包括在所述输出脚本中的数据元素列表(或者甚至包括在花费事务的输入脚本中的数据元素列表)中伪随机选择数据元素。所述选择是基于伪随机数进行的,所述伪随机数包括在所述输出脚本中或者是在所述输出脚本的执行期间生成的。
然而,本发明的发明人已经认识到,所述数据元素列表的初始排序在一些情况下可以使所述选择产生偏差。这在任何数量的可能的应用中都可能是不可取的。例如,如果在游戏的上下文中使用所选数据元素,则这可能会打击玩家参与所述游戏的积极性。或者,如果在计算机模拟的上下文中使用所选数据元素,则所述模拟的结果的准确性可能会受到负面影响。作为另一示例,如果在密码学的上下文中使用所选数据元素,则加密系统的安全性可能会受到危害。
因此,需要消除由所述伪随机数操作的所述元素列表的所述初始排序引起的任何偏差。
根据本文公开的一个方面,提供了一种计算机实现的方法,用于伪随机地选择数据元素,所述方法使用区块链事务,其中所述方法由第一方执行并且包括:获得数据元素的有序列表和多个种子输入;生成第一事务;以及,使得所述第一事务能够提供给一个或更多个区块链节点以包括在区块链中,其中所述第一事务包括第一输出脚本,并且其中当与第二事务的输入脚本一起执行时,所述第一输出脚本被配置为:输出所述数据元素的重新排序列表;输出基于所述多个种子输入生成的伪随机数;且,输出位于所述数据元素的重新排序列表中与所述伪随机数对应的位置处的所述数据元素,作为所选择的数据元素。
所述第一方(例如,预言机、可信第三方或不同类型的实体)获得数据元素的有序列表。所述第一方可以自行生成所述有序列表(包括所述列表中元素的顺序),或者部分或全部所述元素可以由相应用户提供。在该情况下,所述顺序可以基于所述相应用户,例如,与每个用户相关联的索引或提供相应元素的时间,或者所述第一方可以再次生成所述顺序。所述第一方还获得用于生成所述伪随机数的一组种子输入。每个用户可以提供相应种子输入,并且可选地,所述第一方也可以提供种子输入。
所述第一事务包括锁定脚本,所述锁定脚本被配置为基于伪随机生成的数字(可以是预先生成的,也可以是在脚本执行期间生成的)来选择数据元素。所述伪随机数对应于所述数据元素列表中的位置。换句话说,列表中有最大数的所述数据元素,所述伪随机数是介于0(或1,具体取决于实施方案详细信息)与所述最大数之间的整数。
可以说所述数据元素的所述初始排序会影响选择过程。因此,在所述伪随机数用于选择数据元素之前重新排序所述列表会消除所述初始排序引入的任何偏差。前提是通过合并一种机制来确保不可能通过优先初始排序来有利地影响所述选择,从而减轻伪随机生成器输出分布的不均匀性。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3示出了用于实现本发明实施例的示例性系统的示意性框图;
图4示意性地示出了用于生成随机数的示例性脚本的执行;
图5示出了示例性发起事务;
图6和图7示出了示例性预言机事务;
图8示出了示例性奖励赎回事务;
图9示意性地示出了用于花费预言机事务所占用资金的脚本的执行;
图10示出了包括两个不同哈希函数H1,H2的复合哈希函数的图形表示;
图11示出了在随机选择输入下的f(x)的输出的分布;
图12示出了定义域为{0,1,…,k-1}的通用函数形式f(x)=x mod N的概率分布;以及
图13和图14分别示意性地示出了根据本发明的一些实施例的示例性发起事务和预言机事务。
具体实施方式
示例性系统概述
图1示出了一种用于实现区块链150的示例性系统100。系统100可以包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个区块链节点104,该多个区块链节点可以被设置成在分组交换网络101内形成对等(P2P)网络106。虽然未示出,但是区块链节点104可以被设置为近完全图。因此,每个区块链节点104高度连接到其它区块链节点104。
每个区块链节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个区块链节点104包括处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器、专用处理器和/或现场可编程门阵列(FPGA),以及其它设备,例如专用集成电路(ASIC)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。
区块链150包括一系列数据区块151,其中在分布式或区块链网络106中的多个区块链节点104中的每个节点处维护区块链150的相应副本。如上所述,维护区块链150的副本不一定意味着完全存储区块链150。相反,只要每个区块链节点150存储每个区块151的区块头(下面讨论),区块链150就可以进行数据修剪。区块链中的每个区块151均包括一个或多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定将数字资产的数量表示为财产的数额,其一个示例是输出被密码锁定到的用户103(需要该用户的签名或其它解进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。每个事务152(除coinbase事务之外)包括指向上一事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或多个原始事务152指向创始区块153,而非先前事务。
每个区块链节点104被配置为将事务152转发到其它区块链节点104,从而使得事务152在整个网络106中传播。每个区块链节点104被配置为创建区块151,并将相同区块链150的相应副本存储在其相应的存储器中。每个区块链节点104还维护等待并入到区块151中的事务152的有序集(或“池”)154。有序池154通常称为“内存池”。在本文中,该术语并不意在限制于任何特定的区块链、协议或模型。该术语是指节点104已接受为有效的有序事务集,并且对于该有序事务集,强制节点104不接受试图花费相同输出的任何其它事务。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,先前事务可以是有序集154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括输入授权,例如先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户或实体103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户或实体103b。在某些情况下,事务152可具有多个输出,以在多个用户或实体间分割输入数额(其中一个可以是原始用户或实体103a,以便进行变更)。在某些情况下,事务还可以具有多个输入,将一个或多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或多个输出。
根据基于输出的事务协议,例如比特币,当诸如个体用户或组织这类的一方103希望颁布新的事务152j时(由该方采用的自动程序或人为地),该颁布方将该新事务从其计算机终端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。通常情况下,这包括搜索“随机数”值,从而当随机数与未决事务有序池154的表示并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。注意,这仅仅是一种特定类型的工作量证明难题,并且不排除其它类型。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个区块链节点104处消耗大量的处理资源。
解决难题的第一区块链节点104在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其它区块链节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。第一区块链节点104将一个区块传播到接受该区块的其它节点达成阈值共识,从而执行协议规则。然后,有序事务集154被每个区块链节点104记录为区块链150中的新区块151。区块指针155还分配给指向该区块链中先前创建的区块151n-1的新区块151n。创建工作量证明解所需的大量工作(例如采用哈希的形式)发出信号通知第一节点104的意图以遵循区块链协议。这些规则包括如果它分配与先前核实有效的事务相同的输出,则不接受事务为有效,否则称之为重复花费。一旦创建,区块151就不能修改,因为它在区块链网络106中的每个区块链节点104处进行标识和维护。区块指针155还向区块151施加顺序。由于事务152记录在网络106中每个区块链节点104处的有序区块中,因此提供了事务的不可改变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同区块链节点104可以基于在任何给定时间尚未发布的事务的池154的不同快照来这样做,具体取决于它们何时开始搜索解或接收事务的顺序。解决相应难题的人员首先定义新区块151n中包括的事务152及其顺序,并且更新当前的未发布事务池154。然后,区块链节点104继续争相从新定义的未发布事务有序池154中创建区块,等等。此外,还存在解决可能出现的任何“分叉”的协议,其中两个区块链节点104彼此在很短的时间内解决难题,从而在节点104之间传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。应当注意的是,这不会影响网络的用户或代理,因为同一事务将出现在两个分叉中。
根据比特币区块链(和大多数其它区块链),成功构造新区块104的节点被授予在分配附加限定数量数字资产的新特殊类型事务中新分配附加的、接受的数额的数字资产的能力(与代理间或用户间事务相反,该事务将一定数量的数字资产从一个代理或用户转移到另一个代理或用户)。这种特殊类型的事务通常称为“coinbase事务”,但是也可以称为“产生事务”。它通常形成新区块151n的第一事务。工作量证明发出信号通知构造新区块的节点的意图以遵循协议规则,从而允许稍后赎回该特定事务。在可以赎回该特殊事务之前,区块链协议规则可能需要成熟期,例如100个区块。通常,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中发布该事务的区块151n的区块链节点104。该费用通常称为“事务费用”,并在下文中讨论。
由于事务核实和发布中涉及的资源,通常至少每个区块链节点104采用包括一个或多个物理服务器单元的服务器的形式,或者甚至整个数据中心。但是,原则上来说,任何给定区块链节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个区块链节点104的存储器均存储被配置为在区块链节点104的处理装置上运行的软件,以根据区块链节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于区块链节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层或诸如操作系统层或协议层的较低层或这些层任意组合的一个或多个应用中实现。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。这些用户可以与区块链网络106交互,但不参与核实事务或构造区块。其中一些用户或代理103可以充当事务中的发送者和接收者。其它用户可以与区块链150交互,而不必充当发送者或接收者。例如,一些当事方可以充当存储区块链150的副本(例如,已经从区块链节点104获得区块链的副本)的存储实体。
各方103中的一些或所有当事方可以作为不同网络的一部分连接,例如覆盖在区块链网络106之上的网络。区块链网络的用户(经常称为“客户端”)可以被称为是包含区块链网络106的系统的一部分;然而,这些用户不是区块链节点104,因为它们不执行区块链节点所需的角色。相反,每一方103可以与区块链网络106交互,从而通过连接到区块链节点106(即,与区块链节点106通信)来利用区块链150。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统100,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应方103能够创建、授权(例如签名)事务152并将其发送到一个或多个位比特币节点104,然后在区块链节点104的网络中传播,从而包括在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用程序105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用程序组成的套件中实现,例如经由API进行接口连接或一个应用程序作为另一个应用程序的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用程序105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到网络106的区块链节点104中的至少一个。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联系区块链节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其它方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。如上所述,每个区块链节点104运行软件,该软件被配置为根据区块链节点协议核实事务152并转发事务152以便在区块链网络106中传播。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。相同的事务协议用于区块链150中的所有事务152。网络106中的所有节点104使用相同的节点协议。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送到她所连接的一个或多个区块链节点104。例如,这可能是与爱丽丝的计算机102最佳连接的区块链节点104。当任何给定区块链节点104接收新事务152j时,其将根据区块链节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何区块链节点104将向在区块链节点104处维护的有序事务集154中添加新的核实有效事务152。进一步地,接收事务152j的任何区块链节点104随后将核实有效事务152传播至网络106中的一个或多个其它区块链节点104。由于每个区块链节点104应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个网络106中传播。
一旦进入在给定区块链节点104处维护的未决事务有序池154,该区块链节点104将开始争相解决其各自的包含新事务152的池154的最新版本上的工作量证明难题(请记住,其它区块链节点104可以尝试基于不同的事务池154来解决难题。但是,首先解决难题的人将定义包括在最新区块151中的事务集合。最终,区块链节点104将解决有序池154的一部分的难题,该有序集154包括爱丽丝的事务152j)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的区块链节点104可以首先接收给定事务的不同实例,并且因此在一个实例被发布到新区块151中之前具有关于哪个实例“有效”的冲突视图,此时所有区块链节点104同意所发布的实例是唯一的有效实例。如果区块链节点104将一个实例接受为有效实例,然后发现第二实例已记录在区块链150中,则区块链节点104必须接受这一点,并将丢弃(即,视为无效)其最初接受的实例(即,在区块151中尚未公布的实例)。
作为基于账户的事务模型的一部分,由一些区块链网络操作的另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由网络的节点单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含上一事务的ID,该数据字段可指向上一事务。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。应当注意的是,虽然参考比特币描述了示例性基于UTXO的协议,但是它同样可以在其它示例区块链网络上实现。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示分布式分类账上的一组通证。UTXO还可包含其来源事务的事务ID以及其它信息。事务数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在传递至节点104的原始事务152的标头201中。
比方说爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“Tx1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一事务且Tx1指池154中的下一事务。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
当爱丽丝创建其新事务Tx1时,或至少在她将该新事务发送至网络106时,先前事务Tx0可能已经有效并包括在区块链150的区块151中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在有序集154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络106;或者,如果节点协议允许缓冲“孤立”事务,Tx0甚至可以在Tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定区块链节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达区块链节点104的子事务被视为孤立事务。根据节点协议和/或节点行为,其可被丢弃或缓冲一段时间,以等待父事务。
先前事务Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回UTXO。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写),其可由区块链网络所使用。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
因此在示出的示例中,Tx0的输出203中的UTXO0包括锁定脚本[Checksig PA],该锁定脚本需要爱丽丝的签名Sig PA,以赎回UTXO0(严格来说,是为了使试图赎回UTXO0的后续事务有效)。[Checksig PA]包含爱丽丝的公私密钥对中的公钥PA的表示(即哈希)。Tx1的输入202包括指向Tx1的指针(例如,通过其事务ID(TxID0),其在实施例中是整个事务Tx0的哈希值)。Tx1的输入202包括在Tx0中标识UTXO0的索引,以在Tx0的任何其他可能输出中对其进行标识。Tx1的输入202进一步包括解锁脚本<Sig PA>,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
当新事务Tx1到达区块链节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个标准)。在实施例中,这涉及并置两个脚本:
<Sig PA><PA>||[Checksig PA]
其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由锁定脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的解锁脚本是否包含爱丽丝签名预期部分的数据时的签名。也需要包括预期的部分数据本身(“消息”),以便执行此认证。在实施例中,签名的数据包括整个Tx1(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息,诸如节点104等其它实体可验证消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希,签署哈希值和将此标记到消息作为签名,从而使公钥的任何持有者能够验证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行验证),则区块链节点104认为Tx1有效。这意味着区块链节点104会将Tx1添加到待定事务有序池154。区块链节点104还会将事务Tx1转发到网络106中的一个或多个其它区块链节点104,以便其会在整个网络106中传播。一旦Tx1有效并包括在区块链150中,这会将UTXO0从Tx0定义为已花费。应当注意的是,Tx1仅在花费未花费事务输出203时才有效。如果其试图花费另一事务152已经花费的输出,则即使满足所有其它条件,Tx1也将无效。因此,区块链节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(即,其是否已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定区块链节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务不会传播或包括在区块151中。
请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在下一事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
在实践中,爱丽丝通常还需要包括用于比特币节点104的费用,该比特币节点104在区块151中成功包含爱丽丝的事务104。如果爱丽丝未包括此类费用,则Tx0可能会被区块链节点104拒绝,并且因此尽管在技术上有效,但可能不会传播并且包括在区块链150中(如果区块链节点104不希望接受事务152,节点协议不强迫区块链节点104接受)。在一些协议中,事务费用不需要其自身的单独输出203(即不需要单独的UTXO)。相反,输入202指向的总数额与给定事务152的输出203指定的总数额之间的任何差额都将自动提供给发布事务的区块链节点104。例如,假设指向UTXO0的指针是Tx1的唯一输入,并且Tx1仅具有一个输出UTXO1。如果在UTXO0中指定的数字资产数额大于在UTXO1中指定的数额,则可以由赢得工作量证明竞赛以创建包含UTXO1的区块的节点104分配该差值。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定事务费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其它随后事务中尚未花费的各种UTXO值整理在一起。为实现这一点,其可以查询存储在任何一个位比特币节点104处的区块链150的副本。
应当注意的是,脚本代码通常用示意图表示(即使用非精确语言)。例如,可以使用操作码(opcode)来表示特定功能。“OP_...”是指脚本语言的特定操作码。举例来说,OP_RETURN是脚本语言操作码,当在锁定脚本的开始处在操作码前加上OP_FALSE时,操作码创建事务的不可花费输出,该输出可以在事务内存储数据,从而将数据不可改变地记录在区块链150中。例如,数据可包括需存储在区块链中的文件。
通常,事务的输入包含对应于公钥PA的数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及部分或全部事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志通常是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其通常包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其通常提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
侧信道
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
伪随机选择
图3示出了用于实现本发明的一些实施例的示例性系统300。如图所示,系统300包括预言机301和一个或多个用户302。在该示例中,该系统包括三个用户302a、302b、302c,但是通常,系统300可以包括任何数量的用户302。也不排除系统300不包含任何用户302。也就是说,本发明的一些实施例可以仅由预言机301执行。还应当注意的是,术语“预言机”仅用作系统300的实体(“第一方”)的标签,并不一定意味着预言机必须被配置为执行除了下文描述的动作之外的任何动作,同时也不排除这种情况。系统300还包括图3中由区块链150本身表示的一个或多个区块链节点104。
预言机301和每个用户302操作相应计算机设备(未示出)。相应计算机设备包括相应处理装置,该相应处理装置包括一个或多个处理器,例如,一个或多个CPU、GPU、其他加速器处理器、特定应用程序处理器和/或FPGA。相应计算机设备还包括存储器,即采用非瞬时性计算机可读介质形式的计算机可读存储器。该存储器可以包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等光学介质。相应计算机设备上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序的相应实例。应当理解的是,在本文中归因于预言机301或给定用户302的任何动作均可通过在预言机或用户的相应计算机设备的处理装置上运行的软件执行。相应计算机设备包括至少一个用户终端,例如台式电脑或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。相应计算机设备还可以包括一个或多个其他网络资源,诸如通过用户终端访问的云计算资源。
预言机301可以被配置为执行如上文结合图1和图2所述的由爱丽丝103a或鲍勃103b执行的任何操作。类似地,任何给定用户302可以被配置为执行如上文结合图1和图2所述的由爱丽丝103a或鲍勃103b执行的任何操作。
通常,预言机301被配置为获得数据元素的有序列表和多个种子输入。种子输入用于生成伪随机数,并且伪随机数用于选择数据元素。预言机301可以提供一个或多个种子输入,和/或每个用户302可以提供相应种子输入。部分或全部数据元素可以由预言机301提供。类似地,部分或全部数据元素可以由单一用户302提供,或者每个用户302可以提供一个数据元素。
数据元素被设置为有序列表。数据元素可以基于一个或多个预定条件按顺序放置。例如,数据元素可以按字母顺序设置(如果数据元素是字符串),也可以按大小递增或递减的顺序设置(如果数据元素是数字)。或者,数据元素可以根据哪个用户302提供了数据元素来按顺序放置。例如,每个用户可以与索引相关联,并且给定用户302提供的数据元素被放置在列表中对应于该索引的位置处。作为另一示例,用户302可以在不同的时间提供其数据元素,并且数据元素可以被相继放置在有序列表中。
预言机301生成第一事务(下文也称为预言机事务)。预言机事务包括输出脚本或锁定脚本。锁定脚本被配置为对数据元素的有序列表重新排序,并且基于伪随机生成的数字从数据元素的重新排序列表中选择数据元素。也就是说,锁定脚本被配置为对数据元素的有序列表进行操作,以生成数据元素的重新排序列表。伪随机数可以在锁定脚本的执行期间生成(如下所述),或者伪随机数可以预先计算并且包括在锁定脚本中。
对数据元素列表进行重新排序可以包括改变列表中数据元素的顺序的一次或多次连续迭代。也就是说,第一迭代可以改变至少两个数据元素在有序列表中的位置(也就是说,至少两个数据元素改变列表中的位置),以生成更新的有序列表。然后,第二迭代可以将至少两个数据元素在更新的有序列表中的位置改变为通常新更新的有序列表。该过程可以重复任何次数。例如,迭代的次数可以等于列表中元素的总数。在一些示例中,在每次迭代期间,至少三个元素改变在列表中的位置。应当注意的是,根据重新排序操作,一个或多个元素在重新排序列表中的位置可以与在有序列表中的位置相同。
数据元素列表可以基于一个或多个移位输入而重新排序。部分或全部移位输入可以由用户302提供。或者,部分或全部移位输入可以由预言机302提供。首先从单一移位输入的示例(称为“整体移位”)开始,预言机事务的锁定脚本可以被配置为基于整体移位来改变数据元素的顺序。整体移位包括在锁定脚本中,或者整体移位可以在锁定脚本的执行期间计算。锁定脚本可以被配置为例如在一次操作中或在连续的重新排序迭代中改变一个、部分或全部元素在有序列表中的位置。例如,两个或多个元素在第一迭代期间基于整体移位改变位置,然后,两个或多个元素在第二迭代期间基于整体移位改变位置,依次类推。根据整体移位的值(其为整数),一个或多个相同数据元素可以在连续迭代期间改变位置。
在一些示例中,整体移位可以通过组合(例如,求和或级联)单独的移位输入并且将该组合结果转换为小于或等于列表中元素的总数的整数来生成。或者,整体移位可以由预言机301(随机)选择。
在其他示例中,可以在连续重新排序迭代期间使用单独的移位输入。也就是说,在第一迭代期间使用第一移位输入,在第二迭代期间使用第二移位输入,依次类推。在这种情况下,移位输入的数量与列表中元素的总数相匹配。
如上所述,伪随机数是基于多个种子输入生成的,部分或全部种子输入可以由用户302提供(每个用户302一个)。伪随机数是通过对多个种子输入应用函数生成的。例如,该函数可以通过求和或级联等来组合多个种子输入。该函数还可以对组合结果应用复合哈希函数。复合哈希函数的示例是加密哈希函数,后跟取模函数。换句话说,首先将种子输入的组合输入到加密哈希函数(例如,SHA-256),然后将得到的哈希摘要输入到取模函数,以便生成小于或等于列表中元素的总数的数字。通常,种子输入可以采用任何形式。例如,种子输入可以是任意数据项,或者种子输入可以是相应用户生成的签名的分量(下文详细讨论)。锁定脚本可以在脚本执行期间生成伪随机数,在这种情况下,锁定脚本包括多个种子输入。
如果从相应用户302获得一个或多个移位输入(即,每个用户302一个),则移位输入可以被设置在有序列表中,其中该顺序基于用户302,例如,用户的相应索引。例如,第一用户302a发送到预言机301的移位输入可以被放置在列表中的第一位,第二用户302b发送到预言机301的移位输入可以被放置在列表中的第二位,依次类推。附加地或替代地,移位输入的顺序可以基于数据元素和/或种子输入的顺序来确定。例如,每个用户可以提供相应数据元素(例如,公钥)和/或相应种子输入,其中这些数据元素和/或种子输入被设置到相应有序列表中。如果用户的数据元素和/或种子输入被放置在相应有序列表中的第一位,则同一用户的移位输入可以被放置在移位输入的有序列表中的第一位。
所选数据元素可以被花费事务(即,包含引用预言机事务的输出的输入的事务)使用。例如,所选数据元素可以被用作花费事务的输入脚本或解锁脚本必须满足的锁定条件的一部分。作为特定示例,数据元素可以是公钥,并且预言机事务的锁定脚本可以要求花费事务的解锁脚本包括对应于所选公钥的签名。
附加地或替代地,所选数据元素可以在链下(即,不在区块链上下文中)使用。例如,所选数据元素可以作为计算机模拟的输入等提供给链下函数。
如上文结合图2所述,在锁定脚本的执行期间,将数据输出到堆栈。堆栈是存储器的一种形式。在预言机事务的锁定脚本的执行期间,可以将元素的重新排序列表、伪随机数和所选数据元素输出到堆栈。类似地,可以将元素的初始有序列表输出到堆栈。下面进一步提供了锁定脚本的示例性执行流程。
预言机事务包括一个或多个输入。在一些示例中,预言机事务可以包括引用发起事务的输出的输入。每个用户302在发起事务中包括其相应移位输入的相应移位提交(shift commitment)。例如,移位提交可以是相应移位输入的哈希。移位提交可以采用其他形式,例如,移位输入可以与椭圆曲线生成点混淆。发起事务还可以包括用户种子输入的种子提交(seed commitment)。同样,该种子提交可以是相应种子输入的哈希。在其他示例中,种子输入可以是数字签名(例如,ECDSA签名)的第一分量,并且种子提交可以是同一签名的第二分量。作为特定示例,每个用户302可以生成形式为[r,s]的相应签名,其中s是种子输入,r是种子提交。在一些示例中,每个用户可以提供提交(commit)移位输入和种子输入两者的单一提交。例如,移位输入和种子输入可以级联,然后进行哈希处理以形成单一提交。
移位提交和/或种子提交可以包括在发起事务的相应不可花费输出(例如,OP_FALSE OP_RETURN输出)中。也不排除这些提交可以包括在相应可花费输出中。根据用例,每个用户302可以(例如,通过签署发起事务的相应输入)分别向发起事务贡献其提交,或者单一用户302a可以将每个用户的提交添加到发起事务。
预言机事务可以引用多个发起事务,而不是引用单一发起事务,其中每个用户302生成相应发起事务。类似于单一发起事务,用户302生成的每个单独的发起事务可以包括由该用户302提供的移位输入和/或种子输入的提交。
下面提供了关于在区块链150上生成伪随机数的进一步细节。部分或全部以下特征可以由系统300的预言机301或用户302实现。应当注意的是,提供以下部分仅用于说明性目的,不旨在限制本发明的所有实施例。例如,本发明不仅限于比特币区块链,也不限于游戏应用程序的上下文。
示例性基于区块链的PRNG
用于将随机过程合并到区块链150中的新方法的概念在很大程度上是由允许基于运气的游戏算法进入比特币脚本的需求推动的。这意味着该方法必须确保要在脚本中生成和使用的随机数具有以下属性:
(1)不可预测性:在将资金投入到基于运气的事件之前,用于确定结果的随机数不应是可预测的。
(2)确定性:生成的随机数应在初始生成后始终可以从相同的输入中再现。
(3)可验证性:所有方(例如,用户302)都应该能够再现和验证所选的随机数,使得所有方都同意已生成的数字。
以下方法确保在区块链150上生成随机数时保持上述所有属性。
伪随机数生成器
通常,随机数分为两类:真随机数和伪随机数。区别在于真随机性很难实现,并且通常依赖于自然过程或电噪声。
或者,通过使用单一高熵种子值VSeed(真随机)以初始化用于生成伪随机数序列Nk的算法来实现伪随机性,其中k是随机数生成器的周期
VSeed→(N1,N2,…,Nk)。
对于大多数实际应用,如果伪随机数生成器的属性合适,则使用伪随机数生成器。在区块链150上合并随机性的情况下,用于伪随机数生成的机制应当优选地是加密安全的。
通常,加密安全的伪随机数生成器(CSPRNG)是确定性的,并且因此产生可由知道VSeed的任何人验证的数字序列。除了两个核心问题之外,此类生成器适用于本发明目的。
首先,需要将冗长算法从已知的CSPRNG合并到脚本语言中,这将增加计算开销,并限制算法生成随机数函数的机会。
此外,仍将存在一个问题,即能否提供种子值VSeed,该种子值的熵足以被归类为真随机。目前,既不存在用于在脚本中产生此类种子的机制,也不存在以满足生成的随机数具有(1)不可预测性的要求的方式使用外部种子作为赎回脚本的输入的机制。本发明提出使用哈希函数作为生成随机数的替代方案。
哈希函数
这里,哈希函数(例如,SHA-256)表现为单向随机预言机的事实应当得到理解。也就是说,如果哈希Y是从用户不知道的原像X计算出来的,则从计算角度而言用户很难求X。
哈希函数的属性在于,仅在单一位的值上不同的两个256位数据结构的哈希可以被视为完全不相关。换句话说,哈希值相对于用户表现为真随机数,只要该用户不知道整个原像。
这意味着可以简单地取哈希值Y(或其某个函数),并将其视为寻求产生的单一随机数R,前提是任何单一方都不可以控制整个输入原像XR:=Rand:=Y=H(X);对于未知的X。
通过扩展,可以通过使用相同参数对初始随机数R0进行重复哈希处理来生成(k+1)个随机值的随机数序列SR
R0=H(X0);R1=H(R0);Rk=H(Rk-1),
SR=(R0,R1,…,Rk)。
由于哈希函数是确定性的,因此任何一方都可以在只知道所使用的特定哈希函数和初始原像X0(在此充当种子)的情况下再现整个序列SR。
如果在生成随机序列时公开了该初始原像,则任何一方都可以独立验证该序列对应于该原像。很明显,可以使用哈希函数来生成要在脚本中使用的满足标准(1)和(2)的随机数序列,前提是参与生成随机数的任何单一方都不能操纵整个初始原像X0。
替代的单向函数
通常,本文中可以使用术语“哈希函数”来指代更广泛的函数类中的单向函数的特定类型,因为哈希函数在区块链脚本语言中具有现有的操作码。然而,可以想象的是,可以使用替代的单向函数来代替本文哈希函数的任何实例。两个示例包括:
1.椭圆曲线(EC)点乘–函数E(x)=x·G,其用于从私钥生成EC公钥,其中G是椭圆曲线基点,“·”是EC点乘运算符。这是单向函数,因为在给定x,G的情况下很容易计算E(x),但在给定E(x),G的情况下从计算角度而言很难确定x。
2.拉宾函数–函数R(x)=x2mod N,其中N=pq,p,q都是素数。求平方R(x)模数N很容易,而在给定R(x),N的情况下求平方根±x与分解N求p,q一样困难,这在计算上是困难的。
数字签名
下面概述了在ECDSA标准下数字签名是如何形成的及其基本结构包括的内容。应当注意的是,本文使用的对数字签名的任何引用不一定限于ECDSA签名。
考虑用户爱丽丝,她希望使用她的私钥SA为消息哈希H(m)创建数字签名。根据ECC,爱丽丝拥有通常与她的私钥相关联的公钥PA,其中G是n阶椭圆曲线基点,
PA=SA·G。
(Rx,Ry)=k·G,
r=Rx。
然后结合爱丽丝的私钥、她的哈希消息和临时密钥,由此导出签名的部分s,如下所示:
s=k-1(H(m)+SA*r)modn。
通过级联r和s,创建了称为消息哈希的ECDSA数字签名的数据结构,如下所示:
Sig PA=(r,s)。
分别给定值r和s,可以使用运算符OP_CAT在区块链脚本语言中构建完整签名。当重构签名时,签名必须采用在脚本中使用的标准DER格式。当使用下面描述的签名方法生成随机数时,这一点变得非常重要。
方法
用于使用区块链150生成随机数(即,在预言机301生成的预言机事务中使用的伪随机数)的一般方法有三种变型。每种方法都需要多个用户302的参与来创建随机数。
第一种方法使用哈希原像的组合来产生安全随机数,而第二种方法使用来自若干签名的s分量的组合。最后,第三种方法将前两种方法加以结合。在每种情况下,都旨在产生安全的随机整数RN∈{0,N-1}。
哈希方法
考虑N个用户302,每个用户都公开自身的哈希值Yii=H(Xi),其中规定每个用户302可选择自身的秘密原像Xi。哈希函数的属性允许假设在已知公共哈希值的情况下,用户302都不能够猜到另一用户的原像。
然后,用户302将其秘密原像Xi发送到预言机301。原像可以通过例如在WO2017145016A1中描述的秘密值分发技术来发送,但是可以使用用于将原像传输到预言机301的其他安全通道或机制。然后,预言机301通过以下方法产生随机数RN。
1.对于每个用户302提供的原像,预言机验证Yi=H(Xi)。
这里,原像Xi相当于上述种子输入,而Yi相当于种子提交。
请记住,在将原像发送到预言机301之前,哈希值已公开。这可确保预言机301得到每个用户302最初提供的正确原像。在区块链150上,这些公共值是不可变的,因此用户302在发送原像之后无法更改。
该验证步骤确保预言机301不会继续生成随机数,直到所有用户都向其提供用户选择的秘密原像。
2.预言机根据以下等式计算RN
RN是相对于每个用户302的随机数,前提是用户302都不知道所有N个原始原像值Xi。
所有原像都由用户302保密,并安全地传输到预言机301。这意味着恶意方不可能知道所有这些输入,除非他们控制了所有参与的用户302。在这种情况下,攻击者将很容易操纵仅供自己使用的随机数。
在所有其他场景中,至少有一个真正的用户302,哈希函数的描述属性意味着用户不能以有利的方式操纵RN。即使攻击者控制了所有N-1个其他玩家,也是如此。
简而言之,任何一方都无法影响通过该方法生成的随机数,从而可能对另一方产生不利影响。这里应当注意的是,使用原像Xi的加法“+”求和,因为这在脚本中很容易实现,但也可以使用类似于上述求和的不同运算符,例如级联。
∑Xi“求和”的级联版本是有利的,因为相对于第二原像攻击是安全的。也就是说,如果哈希的输入是x1+x2+x3+…,则很容易找到给出相同结果的不同xi组合,因为顺序并不重要。而在级联场景中,顺序很重要,并且不可能找到按顺序给出相同级联的不同值集xi。
随机数RN以下述方式生成:对参与该过程的任何一方都具有(1)不可预测性;以及可通过确定性过程(2)再现。上文阐述的最后一个要求(即,随机数具有(3)可验证性)将在下文得到满足。
如上所述,扩展指预言机也可以通过对RN进行重复哈希处理来生成随机数序列。
签名方法
现在考虑N个用户,每个用户都公开签名Sig Pi以及随机值r′i,该随机值构成第二签名Sig Pi′的一部分,该第二签名的s′分量是保密的,
Sig Pi=(ri,si),
Sig Pi′=(r′i,s′i)。
签名应使用相同的私钥Si进行签名,使得可以验证两个签名均对应于公钥Pi的同一所有者,
Pi=Si·G。
然后,用户302通过秘密共享方法或以其它方式等安全地向预言机301发送其秘密s′i值(即,种子输入)。然后,预言机301通过以下方法产生随机数RN。
1.预言机构建Sig Pi′并验证其对应于与每个用户302的Sig Pi相同的实体。
该第二签名是通过使公共ri′值(即,种子提交)与秘密s′i值(即,种子输入)级联构建的。
预言机对这两个签名应用标准ECDSA签名验证算法,并确认签名是由公钥Pi的所有者共同签名的。这确保另一用户302无法通过为给定的ri′值提供自己的签名来影响随机数。
2.预言机根据以下等式计算RN
由于单向哈希函数与ECC中从私钥生成公钥的单向过程类似,因此这继承了哈希方法中概述的相同属性。通过替换Yii→Pi和Xi→s′i,类似是很清楚的,并且哈希方法的步骤2中示出的参数在这里保存下来。严格来说,对于直接类似,将替换Xi→Si,但s′i仅仅是Si的函数。
与哈希方法一样,以对参与的任何一方既不可预测又可验证的、满足上面概述的标准(1)和(2)的方式生成了随机数RN。
应当明确的是,签名方法和哈希方法彼此直接类似,并且共享其用于随机数生成的相应方法的核心属性。具体地,这两种方法都要求每个用户负责分别为哈希方法和签名方法生成秘密值Xi和s′i。这里使用签名方法的主要优势在于,在ECDSA程序下,选择秘密的行为已经标准化,而选择任意哈希原像则没有标准化。
通过与附带的主签名Sig Pi=(ri,si)进行比较,签名方法还提供了一种直接验证发送到预言机301的秘密值s′i已经由对应公共值r′i的原始提议者提供的方式。该验证只是哈希方法中的隐式验证。
在脚本中计算RN
在这两种情况下,随机数RN都满足上述(1)不可预测性和(2)确定性的要求。下面示出了还能如何具有(3)可验证性。
这意味着需要有一种方式以便所有网络对等体独立验证RN以正确的方式生成。这是通过要求在事务的锁定脚本中计算和使用RN本身来实现的。
以这种方式,所有先前秘密的s′i值都作为该脚本的一部分发布在区块链上,这意味着任何人都可以通过构建哈希函数∑is′i的输入原像来验证随机数。
以下形式的示例性脚本可以用于生成所需的随机整数RN∈{0,N-1}
<RN>=<s′1><s′2>…<s′N>OP_ADD…OP_ADD OP_HASH256<N>OP_MOD,
其中使用运算符“OP_ADD”N-1次并且存在N个秘密值。
在下文呈现的本申请中,将使用<RN>来指代该脚本。应当注意的是,该脚本可以用于广义秘密值,包括哈希原像、部分签名和这些的组合。
图4示出了如何使用该脚本生成随机数。
事务(即,预言机事务)的完整锁定脚本可以包括验证每个原像对应于正确提交的哈希,验证每个秘密签名分量与公共分量组合以构成预期签名,以及验证每个所提供的值来自正确的用户302。
原像验证
以下脚本可以用于验证所提供的原像Xi中的每一个原像都对应于正确的预提交哈希值Yi,作为脚本中过程。
<Verify1>=<Y1><X1>OP_SHA256 OP_EQUAL…<PN><XN>OP_SHA256 OP_EQUAL
签名验证
以下脚本可以用于验证所提供的副签名Sig P′i和初始签名Sig Pi中的每一个都对应于公钥Pi,同样作为脚本中过程。
<Verify2>=<P1>OP_DUP<Sig P1>OP_SWAP<m>[Verify ECDSA]<s′1><r′1>OP_CATOP_SWAP<m>[Verify ECDSA]…<PN>OP_DUP<Sig PN>OP_SWAP<m>[Verify ECDSA]<s′N><r′N>OP_CAT OP_SWAP<m>[Verify ECDSA]
其中[Verify ECDSA]是被配置为在脚本中实现ECDSA签名验证的子脚本,并验证针对作为参数提供的任何消息<m>的签名。
组合方法
目前为止提出的方法对恶意方试图影响产生的随机数的结果具有鲁棒性。然而,为了改进生成的随机数的安全性和不可预测性,可以通过多种方式对哈希方法和签名方法进行扩展和组合。
这两种方法的最简单组合是让每个用户发布哈希值Yi以及签名Sig Pi、随机值r′i和其公钥Pi。然后预言机可以产生随机值,如下所示:
其中每个用户302还私下计算了副签名Sig Pi′=(r′i,s′i)。应当注意的是,这里的加法运算符“+”可以在另一实施方案中替换为另一运算符,例如级联或XOR。
还可以通过强制调用多个预言机并且用户302各自提供多个种子输入(例如,多个哈希值Yi或多个副r′i值)来单独扩展这两种方法中的任一种。
例如,如果使用哈希方法调用两个预言机,则可以通过以下等式计算随机数RN
其中第一预言机将一组原像Xi,1的总和发送到第二预言机,第二预言机将该总和与第二组原像Xi,2的总和相加,并计算随机数。
通过调用多个预言机,可以消除恶意用户以某种方式破坏预言机的风险。将此扩展到大量预言机可以降低所有预言机串通的风险,但代价是更大的计算和时间开销。
应当注意的是,这些方法确保只需要单一预言机是真实的,就可以安全且不可预测地生成随机数。
示例性应用
下面阐述了本发明的一些示例性用例。
第一应用是在涉及N个用户302的区块链彩票的上下文中,这是在有和没有一方(即,预言机)充当“主持”的场景下考虑的。第二应用是针对N面中本聪骰子游戏,用户302可以通过该游戏参与简单的有主持(预言机301)的运气游戏。
最后,考虑用于使用区块链150生成随机数的更一般用途。
彩票
彩票的结构包括以下三个事务:
(i)发起事务
(ii)预言机事务
(iii)奖励赎回事务
并将调用一个预言机301来安全地生成随机数,该随机数用于将中奖资金锁定到PW。
在此类彩票中,确保每个用户302都有均等的机会以1/N的概率赢得N×x,其中x是彩票的初始买入值。
还将单独考虑包括“主持”作为彩票的一部分的情况,如果中奖方没有领取奖励,则主持可以收回彩票资金。
在这种情况下,每个用户302都有机会以1/(N+1)的概率赢得r+(N×x),其中r是主持的买入贡献。
发起事务
1.每个用户向发起事务贡献公共值x作为对区块链彩票的买入。该事务将包括N个输入和1个输出,并表示所有参与者的区块链彩票的数字销售点。
2.除了买入之外,每个用户还包括公共值作为输入,该公共值位于输出(例如,OP_RETURN输出)中。该值将取决于要使用的随机数生成方法。
对于该实施方案,使用签名方法,因此所提供的值是随机值r′i,该随机值构成签名Sig Pi′=(r′i,s′i),签名的s′i分量是保密的。
3.最后,每个用户302都提供其公钥Pi和与其对应的签名Sig Pi=(ri,si)。所有用户都这样做,直到事务包含足够的输入以产生单一N×x输出。该输出将支付给与预言机PO对应的公钥。
图5中示出了发起事务的结构。
预言机事务
1.每个用户将其秘密s′i发送到预言机。
甚至在发起事务发生之前,就已经决定了预言机301。该预言机可以是可信第三方、专门构建的TEE或某个其他形式的预言机。
2.预言机301检查每个副签名Sig Pi′=(r′i,s′i)和每个主签名Sig Pi=(ri,si)是否对应于与公钥Pi相关联的同一密钥对。
3.预言机301构建预言机事务。该事务将发起事务的UTXO用作其唯一输入并将整个N×x资金锁定到单一中奖公钥。
中奖密钥PW是使用随机数RN随机选择的,该随机数是在该预言机事务的锁定脚本内生成的。
以下脚本(由<PW>表示)用于从N个参与密钥Pi集中随机选择中奖公钥。该脚本由较早的脚本<RN>播种,该脚本原位计算选择中奖密钥的随机数
<PW>=<P1><P2>…<PN><RN>OP_ROLL OP_TOALTSTACK OP_DROP…OP_DROP OP_FROMALTSTACK,
其中使用运算符“OP_DROP”N-1次并且存在N个公钥。
图6中示出示例性预言机事务的结构。
在锁定脚本的前两行中,根据子脚本<RN>产生的值来操纵参与公钥集。然后,脚本只需要签名Sig PW。
预言机事务的锁定脚本占用要由中奖公钥PW的所有者签署的中奖资金。
应当注意的是,公钥在该锁定脚本中出现的顺序与其在发起事务中出现的顺序一致,否则预言机可以通过对公钥重新排序来操纵结果。
有主持的彩票
在该应用中,已构建N用户彩票,其中没有一方充当“主持”。可能需要将该概念扩展到此类彩票,以确保资金不会简单地丢失和浪费。
例如,如果一方希望构建彩票和报价,通过承担所涉及的开销(例如,设置用户界面、实例化预言机或寻找参与者)来充当主持,则他们可能希望被激励这样做。
该激励可以采用超时机制的形式,该超时机制会将彩票的中奖资金发送到主持。实现该彩票会涉及N个用户贡献x,并且主持贡献r(参见图7)。
如果预言机事务被修改为采用以下形式,则在某个约定的超时时期ΔTE过去后,主持将能够收回整个彩票资金并支付给其公钥PH。
在图7的预言机事务中,锁定脚本已被修改为包括超时失效保险,如果中奖方未在约定时间之前领取奖励,则超时失效保险将允许作为主持的一方花费彩票资金。
在这种包括主持的区块链彩票中,每个用户都有机会以1/(N+1)的概率赢得r+(N×x),其中r是主持的买入贡献。
这种向彩票添加主持的概念可以通过包括对应于主持的公钥集来扩展到不一定有中奖者的彩票(例如,国家彩票)。如果这些密钥中有一个被选中,则彩票就会滚动。
奖励赎回
一旦预言机事务被记录在区块链150上,中奖公钥PW的所有者就可以花费中奖资金。图8中示出了这种类型的有效事务。该事务的解锁脚本包括与中奖公钥对应的签名SigPW。
当解锁预言机事务所占用的资金时,赎回事务的该输入(scriptSig)将与先前预言机构建的事务的锁定脚本(scriptPubKey)一起运行。
图9中示出了这两段脚本的组合,这表明中奖用户只需提供与中奖公钥PW对应的签名就可以花费N×x中奖资金。
播种其他生成器
上面的示例已经示出了如何使用区块链协议在脚本中安全地生成随机数。
在呈现的彩票应用中,已提议在事务中立即使用函数的这些随机数,而不是在其他地方使用这些随机数(即,用于某个链下目的)。
本发明的实施例能够通过安全、基于共识的透明协议生成随机数。例如,如果一方或组织希望产生随机数来为链下进程播种,则他们可以使用本发明来做到这一点。该方仅需通过构建与用于彩票应用的事务流程类似的事务流程来继续进行,但无需将大量资金与进程的全局输入和输出相关联。
以这种方式,该方可以使用区块链150来产生随机数RN或序列SR,使得机制、种子和结果都被透明地记录在区块链150上。
非优先排序
上面概述的基于区块链的PRNG方法采用N个用户302独立选择的N个输入X1,X2,…,XN来生成伪随机数序列。播种序列的随机数RN是从复合种子的哈希中生成的,该复合种子从所有用户种子输入(并且可选地,预言机种子X0)的组合中导出,例如
其中H是加密哈希函数。该确定RN的方法实际上采用复合哈希函数(即,由多个哈希函数组成的哈希函数),其中加密哈希函数g(x)=H(x)产生例如长度为256位的输出字符串,而函数f(x)=x mod N产生值域为[0,N-1]的数字空间中的输出。现在可以使用类似的数学表示法来写入限定RN的复合哈希函数。
图10示出了包括两个不同哈希函数H1,H2的复合哈希函数的图形表示。
生成的随机数用于对数据元素列表(例如,在区块链事务中由公钥表示)进行操作。数据元素可以对应于游戏中的玩家和/或符号。在第一实例中,算法的输出可以用于简单地从玩家密钥列表中挑选第RN个玩家。更高级的实施方案涉及使用生成的伪随机数序列在游戏符号列表中洗牌若干次。
元素列表的初始排序取决于游戏并且根据以下任一项设置:
1.每个玩家加入游戏的时间顺序;或者
2.发牌者,例如,只有纸牌游戏的发牌者知道一副牌中纸牌的初始排序。
在上述PRNG方法的应用中,伪随机种子RN用于对顺序固定的有序元素集进行操作。当要使用先前详述的复合哈希函数RN=f(g(x))来选择中奖元素时,使元素(在这种情况下是玩家的公钥)的顺序固定的必要性可能会带来问题。如果复合哈希函数的输出不是均匀分布的,则这将产生偏向元素列表中特定位置的偏差结果。考虑到玩家可能提前知道该偏差,这将创建一种场景,其中玩家可能仅在确定列表中对应于其中奖的元素将位于偏差的位置时才愿意参与。
在游戏上下文之外,所选数据元素的偏差可能对依赖于从数据集中进行随机选择的计算机模拟等产生负面影响。
在复合哈希函数的情况下,g(x)是加密哈希函数,例如,SHA-256,众所周知该加密哈希函数是均匀分布的。然而,对于参数f(x)=x mod N的所有选择和N的所有定义域,x不被认为是均匀分布的,并且对于这种情况,必须满足已知的条件。
考虑函数形式f(x)=x mod N,其定义域为{0,1,…,k-1}并且值域必然由{0,1,…,N-1}给出。
对于参数的选择N=10,k=16,使用定义域为f(x)=x mod 10并且值域为{0,1,…,15}的函数{0,1,…,9}。给定随机输入,输出f(x)=0的概率由下式给出:
给定随机输入,输出f(x)=6的概率由下式给出:
输出值 | 概率 |
f(x)=0 | 2/16 |
f(x)=1 | 2/16 |
f(x)=2 | 2/16 |
f(x)=3 | 2/16 |
f(x)=4 | 2/16 |
f(x)=5 | 2/16 |
f(x)=6 | 1/16 |
f(x)=7 | 1/16 |
f(x)=8 | 1/16 |
f(x)=9 | 1/16 |
上表列出了在其定义域中以随机输入进行评估时f(x)的每个输出的概率。可以看到,函数输出的分布总体上确实是不均匀的,但有趣的是,f的值域遵循一种分布,该分布分别包括子值域{0,1,…,5}和{6,7,8,9}内的两个均匀分布,这两个分布之间有阶跃变化。该分布在图11中可视化。
该示例性函数形式f(x)=x mod N证明了通常应用于该形式的函数的重要结果,即,输出的分布由阶跃函数给出,其中阶跃变化发生在(k-1)mod N处。在上面的示例中,可以看到在15mod10≡5处,确实发生了阶跃变化。
可以用该一般结果来检查定义域为f(x)=x mod N的一般函数形式{0,1,…,k-1}的概率分布。
当在随机选择输入的情况下评估σ≤(k-1)mod N时,给定输出f(x)的概率由下式给出:
类似地,当在随机选择输入的情况下评估σ>(k-1)mod N时,给定输出f(x)的概率由下式给出:
这些值定义了f(x)的输出概率分布的两个级别,如图12所示。值得注意的是,任何两个输出之间的最大概率差异仅由输出空间的大小k定义并且由1/k给出。
上面的一般结果和分布适用于在上述示例性PRNG方法中使用的复合哈希函数的类型,请记住,该类型采用复合形式f(x)=H(x)mod N。如果h是具有不受限定义域的加密哈希函数(例如,H(x)=SHA256(x)),则f(x)的行为与上面的示例完全相同,其中f(x)的定义域由{0,1,…,2256-1}给出,因为这是H的输出值域。
在这种情况下,输出值域Pα,Pβ和{0,1,…,(2256-1)mod N}的对应概率{(2256-1 modN)+1,(2256-1 mod N)+2,…,N-1}分别由下式给出:
这也意味着最大概率差异为1/2256。
该分析表明,存在产生复合哈希函数的不同输出的概率差异。这里应当注意的是,在WP0563中指定的复合哈希函数的情况下,差异的绝对值非常小,并且可以通过确保N的幂为2或者N的因子为k来简单地减小该差异。
然而,这可能不是在所有场景下都可能的(例如,在N被定义为游戏元素的数量的情况下,这是由游戏确定的),在其他情况下,如果复合哈希函数不包括加密哈希函数,则概率差异可能更为显著。此外,如果存在非零差异(即,f(x)的输出空间不是均匀分布的),则知道存在这种差异的玩家/参与者的心理影响可能会影响其愿意参与的可能性。
简而言之,f(x)不是普遍均匀分布的事实意味着定义RN的复合哈希函数可能会导致上面提及的问题在特定场景下出现。进而,这可能导致无法将一组玩家聚集在一起协作生成RN,在这种情况下,PRNG机制已经分解。
根据本发明的实施例,引入了对PRNG算法的扩展,考虑到玩家已知的元素列表的初始排序,该扩展减轻了游戏元素(或通常是数据元素)的任何此类优先排序的存在。
对于参与游戏的N个玩家中的每个玩家,引入了玩家的选择λi,称为“玩家微移player nudge”(即,移位输入)。这是对用作PRNG机制输入的单独的玩家种子输入的补充。然后,该组玩家微移可以用于基于游戏元素的初始顺序以确定性且不可预测的方式修改游戏元素列表的顺序。这可以涉及使用对应的玩家微移Pi或通过组合所有的玩家微移以产生表示为λi的、可以变换游戏元素的完整列表的“游戏微移”来变换单独元素的位置(例如,彩票中的λ)。
可以通过以下方式之一生成微移λ:
1.每个玩家向预言机提供第二个随机数λi,如下所示:
b.λ0,λ1,…,λN∈[0,n-1],针对游戏中的n个符号(例如,对于骰子,n=6;对于轮盘,n=37;对于一副牌,n=52)。
2.预言机等可信第三方(TTP)提交游戏微移λ。
可以单独或共同使用每个玩家微移以基于原始排序和玩家微移,通过以下方式为游戏元素集产生新的顺序:
1.通过对应玩家选择的微移使初始有序列表中每个游戏元素(例如,公钥)的位置移位,使得
2.通过复合玩家微移λ使游戏元素的整个初始有序列表的位置移位。
然后,随机数RN用于从重新排序列表中选择元素。
玩家可以通过以下方式之一提交其单独的选择:
1.在发起事务中包括玩家微移的哈希摘要,使得
其中Xi表示种子输入。
2.以哈希摘要的形式包括玩家微移和输入种子的级联,使得
其中Xi可以是最左侧32字节,并且λi可以是哈希原像的剩余字节(例如,4个字节)。应当注意的是,这些仅是说明性示例。
3.以哈希摘要的形式仅包括玩家微移和输入种子的级联,使得
应当注意的是,该选项假设预定至少Xi(并且可选地λi)的大小。
对于预言机生成并提交微移(即,整体移位)的情况,预言机只需要在游戏开始时使用上述两种方法中的任一种方法来提交该选择的值。
任何参与者都不可预测λ的事实可确保包括微移确实会减轻任何优先排序。从∑iXi的值被视为不可预测的伪随机的意义上说,λ的值可以被视为不可预测的随机性的安全来源。
请记住,上面的示例性PRNG方法中用于生成随机数RN的脚本由下式给出:
<RN>=<s′1><s′2>…<s′N>OP_ADD…OP_ADD OP_HASH256<N>OP_MOD
并且在N玩家彩票的示例中,用于从有序游戏元素集(即,公钥)中选择中奖元素Pw的脚本由下式给出:
<PW>=<P1><P2>…<PN><RN>OP_ROLL OP_TOALTSTACK OP_DROP…OP_DROP OP_FROMALTSTACK。
现在引入由[λ]表示的新的脚本部分,该新的脚本部分可以添加到<PW>,以便使用玩家移位/微移来改变脚本中公钥P1,…PN的排序。根据玩家微移λ1,…,λN在改变密钥集时的使用方式,脚本[λ]可以采用不同的形式。预言机事务的锁定脚本可以采用以下形式:
<PW>=<P1><P2>…<PN>[λ]<RN>OP_ROLL OP_TOALTSTACK OP_DROP…OP_DROP OP_FROMALTSTACK
图13示出了经修改的发起事务,其中每个玩家包括其相应种子输入r′1和其相应微移输入λ1。
图14示出了经修改的预言机事务,其被配置为重新排序元素列表。
下面提供了示例性脚本,其中一个复合微移λ用于使用单一数字变换列表:
[λ]=<λ>OP_DUP OP_TOALTSTACK<1>OP_ADD OP_ROLL OP_ROT OP_FROMALTSTACKOP_DUP OP_TOALTSTACK<2>OP_ADD OP_ROLL OP_ROT OP_FROMALTSTACK…OP_DUP OP_TOALTSTACK<N>OP_ADD OP_ROLL OP_ROT OP_FROMALTSTACK
该脚本的作用是将元素滚动到堆栈的顶部,并且旋转堆栈的前三项,共旋转N次。在该示例中,复合微移可以基于玩家微移来预先计算,或者预言机401可以提供复合微移。
应当注意的是,子脚本“OP_DUP OP_TOALTSTACK<1>OP_ADD OP_ROLL OP_ROT OP_FROMALTSTACK”重复N次,但是使添加到复合λ的值递增,以确保所有位置在某个时间点都滚到顶部。复合微移λ定义元素列表中滚动开始的位置,并且每次λ的值都会递增,以在列表中的所有N个位置之间循环。altstack用于存储两次使用之间的λ的值。
下面提供了另一示例性脚本,其中每个玩家的微移用于分别变换列表:
[λ]=<λ1><λ2>…<λN>OP_TOALTSTACK…OP_TOALTSTACK OP_FROMALTSTACK OP_ROLL OP_ROT…OP_FROMALTSTACK OP_ROLL OP_ROT
应当注意的是,操作码“OP_TOALTSTACK”重复N次,如子脚本“OP_FROMALTSTACKOP_ROLL OP_ROT”一样。该脚本使用与先前示例相同的机制来改变元素列表,每个单独的微移都是独立使用的情况除外。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种使用区块链事务伪随机选择数据元素的计算机实现的方法,其中所述方法由第一方执行并且包括:
获得数据元素的有序列表(ordered list)和多个种子输入;
生成第一事务;以及
使得所述第一事务能够提供给一个或更多个区块链节点以包括在区块链中,其中所述第一事务包括第一输出脚本,并且其中当与第二事务的输入脚本一起执行时,所述第一输出脚本被配置为:
输出所述数据元素的重新排序列表(re-ordered list);
输出基于所述多个种子输入生成的伪随机数;以及
输出位于所述数据元素的重新排序列表中与所述伪随机数对应的位置处的所述数据元素,作为所选数据元素。
使得第一事务能够提供给一个或多个区块链节点可以包括:将第一事务直接传输到那些节点。或者,第一方可以将第一事务传输到负责将第一事务转发给那些节点的中介。
在本发明的上下文中,输出数据可以包括将数据输出到(即,将数据推送到)堆栈(例如,主堆栈或替代堆栈)。数据可以临时推送到堆栈,然后移除或以其他方式进行操作。
输出所选数据元素可以包括将所选数据元素存储在存储器中,例如,用于链下使用。
语句2.根据语句1所述的方法,其中所述第一输出脚本被配置为通过以下方式输出所述数据元素的所述重新排序列表:
输出所述数据元素的所述有序列表;以及
执行一个或更多个重新排序操作,其中每个重新排序操作包括:改变所述数据元素列表中的两个或更多个所述数据元素的顺序。
语句3.根据语句2所述的方法,其中所述执行所述一个或更多个重新排序操作包括:执行总数与所述数据元素的有序列表中的数据元素总数对应的重新排序操作。
也就是说,重新排序操作(例如,旋转)的次数取决于元素的数量。
语句4.根据语句2或3所述的方法,其中所述第一输出脚本包括整体移位,并且其中执行每个相应操作包括:基于所述整体移位输入来重新排序所述两个或更多个数据元素。
语句5.根据语句4所述的方法,其中所述整体移位由所述第一方生成。
语句6.根据语句4或5所述的方法,其中所述整体移位是基于多个移位输入生成的,其中所述多个移位输入中的一个或更多个移位输入是从相应用户获得的。
例如,整体移位可以是多个移位输入的总和。或者,整体移位可以是多个移位输入的级联。替代函数可以应用于多个移位输入以生成整体移位。
在生成整体移位之前,可以将多个移位输入放置在有序列表中(例如,作为移位输入的有序列表的求和或级联的哈希)。
语句7.根据语句2或3所述的方法,其中所述第一输出脚本包括移位输入的有序列表,并且其中执行每个相应操作包括:基于所述移位输入的有序列表中的相应一个移位输入来重新排序所述两个或更多个数据元素。
语句8.根据语句7所述的方法,其中所述移位输入的有序列表中的一个或更多个移位输入是从相应用户获得的。
语句9.根据前述任一项语句所述的方法,其中所述数据元素的有序列表中的一个或更多个数据元素是从相应用户获得的。
语句10.根据语句8和9所述的方法,其中从同一相应用户获得的相应数据元素和相应移位输入分别位于所述数据元素的有序列表和所述移位输入的有序列表中的对应位置处。
语句11.根据前述任一项语句所述的方法,其中所述多个种子输入中的一个或更多个种子输入是从相应用户获得的。
语句12.根据语句8和11所述的方法,其中所述多个种子输入被设置在种子输入的有序列表中,并且其中从同一相应用户获得的相应数据元素和相应种子输入分别位于所述种子输入的有序列表和所述移位输入的有序列表中的对应位置处。
语句13.根据前述任一项语句所述的方法,其中所述第一输出脚本包括所述多个种子输入,并且其中所述第一输出脚本被配置为生成所述伪随机数。
语句14.根据前述任一项语句所述的方法,其中所述伪随机数是通过对所述多个种子输入应用复合哈希函数生成的。
复合哈希函数是由多个哈希函数组成的哈希函数。
语句15.根据语句14所述的方法,其中对所述多个种子输入应用所述复合哈希函数包括:
基于所述多个种子输入生成整体种子;
对所述整体种子应用第一哈希函数以生成第一哈希摘要;以及
对所述整体种子应用第二哈希函数以生成第二哈希摘要。
例如,整体种子可以是多个种子输入的总和。或者,整体种子可以是多个种子输入的级联。替代函数可以应用于多个种子输入以生成整体种子。
语句16.根据语句15所述的方法,其中所述第二哈希函数是取模函数。
第一哈希函数可以是加密哈希函数。
语句17.根据语句6或8或其任何从属语句所述的方法,其中所述第一事务包括一输入,该输入引用发起事务的输出,其中所述发起事务包括来自每个相应用户的相应提交(commitment),并且其中所述相应提交提交(commit)从所述相应用户获得的所述移位输入。
语句18.根据语句6或8或其任何从属语句所述的方法,其中所述第一事务包括多个输入,每个输入引用相应发起事务的输出,其中每个发起事务包括来自相应用户的相应提交,并且其中所述相应提交提交从所述相应用户获得的所述移位输入。
语句19.根据语句17或18所述的方法,其中每个相应提交是通过对至少所述相应移位输入应用哈希函数生成的。
语句20.根据语句19所述的方法,其中每个相应提交是通过对来自同一相应用户的至少所述相应移位输入和所述相应种子输入应用哈希函数生成的。
语句21.根据前述任一项语句所述的方法,所述方法包括:获得第二多个种子输入,其中所述第二多个种子输入中的一个或更多个种子输入是从相应用户获得的,并且其中所述伪随机数是基于所述多个种子输入和所述第二多个种子输入生成的。
语句22.根据前述任一项语句所述的方法,其中所述数据元素中的至少一个数据元素由所述第一方生成。
语句23.根据前述任一项语句所述的方法,其中所述数据元素是公钥。
语句24.根据语句23所述的方法,其中所述第一输出脚本被配置为将所述第一输出锁定到所选公钥。
语句25.根据前述任一项语句所述的方法,所述方法包括:向链下函数提供所选数据元素。
链下函数是不在区块链上或不在区块链的上下文中执行的函数。例如,链下函数可以是计算机模拟或加密密钥生成器。
语句26.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至25中任一项所述的方法。
语句27.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据语句1至25中任一项所述的方法。
根据本文公开的另一方面,可提供一种方法,所述方法包括所述第一方和所述相应用户的动作。
根据本文公开的另一方面,可提供一种系统,所述系统包括所述第一方和所述相应用户的所述计算机设备。
Claims (27)
1.一种使用区块链事务伪随机选择数据元素的计算机实现的方法,其中所述方法由第一方执行并且包括:
获得数据元素的有序列表和多个种子输入;
生成第一事务;以及
使得所述第一事务能够提供给一个或更多个区块链节点以包括在区块链中,其中所述第一事务包括第一输出脚本,并且其中当与第二事务的输入脚本一起执行时,所述第一输出脚本被配置为:
输出所述数据元素的重新排序列表;
输出基于所述多个种子输入生成的伪随机数;以及
输出位于所述数据元素的重新排序列表中与所述伪随机数对应的位置处的所述数据元素,作为所选数据元素。
2.根据权利要求1所述的方法,其中所述第一输出脚本被配置为通过以下方式输出所述数据元素的所述重新排序列表:
输出所述数据元素的所述有序列表;以及
执行一个或更多个重新排序操作,其中每个重新排序操作包括:改变所述数据元素列表中的两个或更多个所述数据元素的顺序。
3.根据权利要求2所述的方法,其中所述执行所述一个或更多个重新排序操作包括:执行总数与所述数据元素的有序列表中的数据元素总数对应的重新排序操作。
4.根据权利要求2或3所述的方法,其中所述第一输出脚本包括整体移位,并且其中执行每个相应操作包括:基于所述整体移位输入来重新排序所述两个或更多个数据元素。
5.根据权利要求4所述的方法,其中所述整体移位由所述第一方生成。
6.根据权利要求4或5所述的方法,其中所述整体移位是基于多个移位输入生成的,其中所述多个移位输入中的一个或更多个移位输入是从相应用户获得的。
7.根据权利要求2或3所述的方法,其中所述第一输出脚本包括移位输入的有序列表,并且其中执行每个相应操作包括:基于所述移位输入的有序列表中的相应一个移位输入来重新排序所述两个或更多个数据元素。
8.根据权利要求7所述的方法,其中所述移位输入的有序列表中的一个或更多个移位输入是从相应用户获得的。
9.根据前述任一项权利要求所述的方法,其中所述数据元素的有序列表中的一个或更多个数据元素是从相应用户获得的。
10.根据权利要求8和9所述的方法,其中从同一相应用户获得的相应数据元素和相应移位输入分别位于所述数据元素的有序列表和所述移位输入的有序列表中的对应位置处。
11.根据前述任一项权利要求所述的方法,其中所述多个种子输入中的一个或更多个种子输入是从相应用户获得的。
12.根据权利要求8和11所述的方法,其中所述多个种子输入被设置在种子输入的有序列表中,并且其中从同一相应用户获得的相应数据元素和相应种子输入分别位于所述种子输入的有序列表和所述移位输入的有序列表中的对应位置处。
13.根据前述任一项权利要求所述的方法,其中所述第一输出脚本包括所述多个种子输入,并且其中所述第一输出脚本被配置为生成所述伪随机数。
14.根据前述任一项权利要求所述的方法,其中所述伪随机数是通过对所述多个种子输入应用复合哈希函数生成的。
15.根据权利要求14所述的方法,其中对所述多个种子输入应用所述复合哈希函数包括:
基于所述多个种子输入生成整体种子;
对所述整体种子应用第一哈希函数以生成第一哈希摘要;以及
对所述整体种子应用第二哈希函数以生成第二哈希摘要。
16.根据权利要求15所述的方法,其中所述第二哈希函数是取模函数。
17.根据权利要求6或8或其任何从属权利要求所述的方法,其中所述第一事务包括引用发起事务的输出的输入,其中所述发起事务包括来自每个相应用户的相应提交,并且其中所述相应提交提交从所述相应用户获得的所述移位输入。
18.根据权利要求6或8或其任何从属权利要求所述的方法,其中所述第一事务包括多个输入,每个输入引用相应发起事务的输出,其中每个发起事务包括来自相应用户的相应提交,并且其中所述相应提交提交从所述相应用户获得的所述移位输入。
19.根据权利要求17或18所述的方法,其中每个相应提交是通过对至少所述相应移位输入应用哈希函数生成的。
20.根据权利要求19所述的方法,其中每个相应提交是通过对来自同一相应用户的至少所述相应移位输入和所述相应种子输入应用哈希函数生成的。
21.根据前述任一项权利要求所述的方法,所述方法包括:获得第二多个种子输入,其中所述第二多个种子输入中的一个或更多个种子输入是从相应用户获得的,并且其中所述伪随机数是基于所述多个种子输入和所述第二多个种子输入生成的。
22.根据前述任一项权利要求所述的方法,其中所述数据元素中的至少一个数据元素由所述第一方生成。
23.根据前述任一项权利要求所述的方法,其中所述数据元素是公钥。
24.根据权利要求23所述的方法,其中所述第一输出脚本被配置为将所述第一输出锁定到所选公钥。
25.根据前述任一项权利要求所述的方法,所述方法包括:向链下函数提供所选数据元素。
26.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至25中任一项所述的方法。
27.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或更多个处理器上运行时,执行根据权利要求1至25中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2012486.3 | 2020-08-11 | ||
GB2012486.3A GB2597955A (en) | 2020-08-11 | 2020-08-11 | Pseudo-ramdom selection on the blockchain |
PCT/EP2021/070107 WO2022033811A1 (en) | 2020-08-11 | 2021-07-19 | Pseudo-ramdom selection on the blockchain |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116113921A true CN116113921A (zh) | 2023-05-12 |
Family
ID=72519967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180056334.9A Pending CN116113921A (zh) | 2020-08-11 | 2021-07-19 | 区块链上的伪随机选择 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230275770A1 (zh) |
EP (1) | EP4168890A1 (zh) |
JP (1) | JP2023537121A (zh) |
CN (1) | CN116113921A (zh) |
GB (1) | GB2597955A (zh) |
WO (1) | WO2022033811A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116414569A (zh) * | 2023-06-12 | 2023-07-11 | 上海聪链信息科技有限公司 | 任务处理系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112636904B (zh) * | 2020-11-17 | 2023-08-22 | 中信银行股份有限公司 | 随机数生成与验证方法、装置、电子设备及可读存储介质 |
CN114362968B (zh) * | 2022-03-15 | 2022-06-17 | 北京百度网讯科技有限公司 | 区块链获取随机数的方法、装置、设备和介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581190A (zh) * | 2004-05-21 | 2005-02-16 | 威盛电子股份有限公司 | 名单产生系统、中奖名单产生方法及记录介质 |
SG11201805472RA (en) | 2016-02-23 | 2018-07-30 | Nchain Holdings Ltd | Determining a common secret for the secure exchange of information and hierarchical, deterministic cryptographic keys |
WO2019034983A1 (en) * | 2017-08-15 | 2019-02-21 | nChain Holdings Limited | GENERATION OF RANDOM NUMBERS IN A BLOCK CHAIN |
US10938557B2 (en) * | 2018-03-02 | 2021-03-02 | International Business Machines Corporation | Distributed ledger for generating and verifying random sequence |
CN109615370A (zh) * | 2018-10-25 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 对象选取方法及装置、电子设备 |
CA3126956A1 (en) * | 2019-01-18 | 2020-07-23 | Zeu Technologies, Inc. | A method for generating random numbers in blockchain smart contracts |
GB201901893D0 (en) * | 2019-02-11 | 2019-04-03 | Nchain Holdings Ltd | Computer implemented system and method |
GB201907345D0 (en) * | 2019-05-24 | 2019-07-10 | Nchain Holdings Ltd | Protocol for validating blockchain transactions |
-
2020
- 2020-08-11 GB GB2012486.3A patent/GB2597955A/en active Pending
-
2021
- 2021-07-19 CN CN202180056334.9A patent/CN116113921A/zh active Pending
- 2021-07-19 US US18/017,833 patent/US20230275770A1/en active Pending
- 2021-07-19 JP JP2023509635A patent/JP2023537121A/ja active Pending
- 2021-07-19 EP EP21746458.5A patent/EP4168890A1/en active Pending
- 2021-07-19 WO PCT/EP2021/070107 patent/WO2022033811A1/en unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116414569A (zh) * | 2023-06-12 | 2023-07-11 | 上海聪链信息科技有限公司 | 任务处理系统 |
CN116414569B (zh) * | 2023-06-12 | 2023-08-11 | 上海聪链信息科技有限公司 | 任务处理系统 |
Also Published As
Publication number | Publication date |
---|---|
EP4168890A1 (en) | 2023-04-26 |
GB202012486D0 (en) | 2020-09-23 |
US20230275770A1 (en) | 2023-08-31 |
WO2022033811A1 (en) | 2022-02-17 |
JP2023537121A (ja) | 2023-08-30 |
GB2597955A (en) | 2022-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116113921A (zh) | 区块链上的伪随机选择 | |
CN115918030A (zh) | 使用区块链的可证明公平的游戏 | |
US20220269810A1 (en) | Using Blockchain Transactions to Provide Off-Chain Functionality | |
US20220410017A1 (en) | Provably fair games using a blockchain | |
EP4209954A1 (en) | Protocol for validating blockchain transactions | |
TW202231012A (zh) | 敏感資料攔阻技術 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN113875185A (zh) | 知识证明 | |
CN118044151A (zh) | 传播锁定脚本 | |
CN117751550A (zh) | 分层共识 | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN116547945A (zh) | 默克尔证明实体 | |
WO2024041866A1 (en) | Blockchain transaction | |
CN117941317A (zh) | 生成区块链事务 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
TW202402009A (zh) | 所有權證明之技術 | |
WO2023208832A1 (en) | Blockchain transaction | |
WO2023180042A1 (en) | Set shuffling | |
TW202416296A (zh) | 所有權證明之技術 | |
CN117652124A (zh) | 区块链区块和存在证明 | |
CN117693926A (zh) | 区块链区块和存在证明 | |
CN117678193A (zh) | 区块链区块和存在证明 | |
WO2024099693A1 (en) | Blockchain transaction | |
WO2023180000A1 (en) | Set shuffling | |
WO2023160921A1 (en) | Data exchange attestation method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |