CN116830107A - 用于将流式模板同步到求解出的区块的方法和系统 - Google Patents
用于将流式模板同步到求解出的区块的方法和系统 Download PDFInfo
- Publication number
- CN116830107A CN116830107A CN202180093060.0A CN202180093060A CN116830107A CN 116830107 A CN116830107 A CN 116830107A CN 202180093060 A CN202180093060 A CN 202180093060A CN 116830107 A CN116830107 A CN 116830107A
- Authority
- CN
- China
- Prior art keywords
- block
- transaction
- transactions
- mining
- list
- 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
- 238000000034 method Methods 0.000 title claims description 79
- 238000005065 mining Methods 0.000 claims abstract description 200
- 230000001902 propagating effect Effects 0.000 claims description 11
- 230000001360 synchronised effect Effects 0.000 claims description 10
- 238000012545 processing Methods 0.000 abstract description 14
- 230000000644 propagated effect Effects 0.000 abstract description 5
- 230000008569 process Effects 0.000 description 28
- 230000006870 function Effects 0.000 description 21
- 238000009412 basement excavation Methods 0.000 description 15
- 230000011664 signaling Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 9
- 150000003839 salts Chemical class 0.000 description 6
- 238000003860 storage Methods 0.000 description 6
- 238000012795 verification Methods 0.000 description 6
- 238000009826 distribution Methods 0.000 description 5
- PDGXJDXVGMHUIR-UJURSFKZSA-N (2R,3R)-2,3-dihydroxy-3-methylpentanoic acid Chemical compound CC[C@@](C)(O)[C@@H](O)C(O)=O PDGXJDXVGMHUIR-UJURSFKZSA-N 0.000 description 4
- 101100274422 Arabidopsis thaliana CID8 gene Proteins 0.000 description 4
- 206010010099 Combined immunodeficiency Diseases 0.000 description 4
- 101100274405 Schizosaccharomyces pombe (strain 972 / ATCC 24843) cid16 gene Proteins 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000001360 collision-induced dissociation Methods 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 101100274418 Arabidopsis thaliana CID4 gene Proteins 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000010926 purge Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
Classifications
-
- 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/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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/3236—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 using cryptographic hash functions
- H04L9/3239—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 using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/56—Financial cryptography, e.g. electronic payment or e-cash
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
使用附加消息对候选区块数据进行预传播,使得每个矿工构建仅附加列表,该仅附加列表表示那些其他矿工正在处理的候选区块。仅附加列表最终可能与矿工处的挖矿单元正在处理的候选区块的早期版本不同步。可以接收区块最终消息,该区块最终消息为最终候选区块提供区块解并包括同步数据。同步数据详细说明了,附加到与获胜矿工相关联的仅附加列表的一个或多个交易不包括在为其找到区块解的最终候选区块中,使接收矿工能够从与获胜矿工相关联的仅附加列表中移除这些一个或多个交易,以产生最终的仅附加列表,并且根据最终的仅附加列表构建求解出的区块并验证求解出的区块。
Description
技术领域
本公开涉及区块链网络,并且具体地涉及提高区块在矿工节点间的传播速度和/或减少传播区块所需的带宽。
背景技术
在工作量证明区块链系统中,当发现有效区块时,矿工会试图快速将其成功传达给所有其他矿工。这涉及通过区块链网络将有关区块的信息传播到所有挖矿节点。在某些情况下,这可能涉及发送完整的区块数据。在某些情况下,这可能涉及发送区块头和交易列表信息。接收矿工通过对头进行哈希处理并确认其与成功的矿工提供的哈希值相匹配来验证新区块。
随着区块大小和交易数量的增加,区块传播的延迟会加剧临时分叉和孤区块的问题。这些情况对矿工和系统整体来说都是代价高昂的。
可能有利的是,在传播区块数据时设计用于减少区块数据所消耗的带宽并提高传播速度的方法和系统。
附图说明
现在将通过示例的方式参考附图,附图示出了本申请的示例实施例,并且其中:
图1示出了区块链网络的示例区块结构;
图2以图解的方式示出了流式区块模板网络的示例;
图3示出了交易的经压缩的标识符的示例构造;
图4示出了经压缩的交易标识符存储系统的一个示例;
图5以流程图的形式示出了用于生成经压缩的交易标识符的示例方法;
图6以流程图的形式示出了对存储在第一挖矿节点处的仅附加列表进行更新的示例方法;
图7以流程图的形式示出了用于生成经压缩的交易标识符的另一示例方法;
图8以框图的形式示出了包括两个使用IDX引用的挖矿节点的简化示例系统;
图9以框图的形式示出了包括三个使用EIDX引用的挖矿节点的另一个简化示例系统;
图10以框图的形式示出了示例挖矿节点;
图11示出了示例挖矿节点背景下的候选区块组装与分发;
图12以图的方式示出了挖矿节点的候选区块更新和流式区块模板通信的并行过程;
图13以流程图的形式示出了挖矿节点内交易处理器的操作的一种示例方法;
图14以流程图的形式示出了由挖矿节点对区块模板进行流式传输的一种示例方法;以及
图15以框图的形式示出了区块链节点的简化示例。
在附图中使用相同的附图标记来表示相同的元素和特征。
具体实施方式
在一个方面,可以提供一种在区块链网络中传播区块解的计算机实现的方法。该方法可以包括:在第一矿工处,基于从其他矿工接收到的附加消息,构建相应的交易有序集的仅附加列表并将相应的交易有序集的仅附加列表存储在正由这些其他矿工挖掘的相应区块候选中,该附加消息包含对于要附加到其他矿工的相应仅附加列表的交易的引用;从其他矿工中的一个矿工接收区块最终消息,该区块最终消息为最终候选区块提供区块解并包括同步数据;基于同步数据来确定附加到与其他矿工中的所述一个矿工相关联的仅附加列表的一个或多个交易不包括在为其找到区块解的最终候选区块中;从与其他矿工中的所述一个矿工相关联的仅附加列表中移除所述一个或多个交易,以产生最终的仅附加列表;根据最终的仅附加列表和区块解来构建求解出的区块;以及验证求解出的区块。
在一些实现方式中,来自其他矿工中的所述一个矿工的每个附加消息具有相应的关联序列号,并且其中,同步数据指示特定序列号,该特定序列号与包括在最终候选区块中的最终交易集相关联。在某些情况下,移除包括基于所述一个或多个交易在附加消息中被指定而移除所述一个或多个交易,该附加消息具有相对于特定序列号的在后的相应序列号。
在一些实现方式中,同步数据指定要移除的所述一个或多个交易。
在另一方面,本申请描述了一种在区块链网络中传播区块解的计算机实现的方法。该方法可以包括:构建候选区块,该候选区块包含交易的有序列表;将候选区块提供给挖矿单元以搜索工作量证明;生成附加消息,该附加消息指定交易的有序列表;将附加消息传输到其他挖矿节点;以及重复地进行以下操作直到接收到区块解的通知为止:将附加交易添加到候选区块中交易的有序列表以产生候选区块的新版本,将候选区块的新版本提供给至少一个挖矿单元,生成指定附加交易的另外的附加消息,每个另外的附加消息具有连续的序列号,以及将另外的附加消息传输到其他挖矿节点。
在一些实现方式中,从一个挖矿单元接收区块解的通知,其中,该通知指示候选区块的版本,并且其中,该方法还包括:确定同步数据并将同步数据和区块解发送到其他挖矿节点。在某些情况下,同步数据包括对应于候选区块的版本的附加消息序列号。在某些其他情况下,同步数据包括标识一个或多个交易标识符的一个或多个删除指令。该一个或多个删除指令可以标识包括在附加消息中的交易标识符,该附加消息与候选区块的、比通知中指定的候选版本更新的版本相关。
在一些实现方式中,发送同步数据包括发送最终消息,该最终消息包含区块解和同步数据。
在一些实现方式中,传输附加消息和传输另外的附加消息发生在挖矿节点之间经认证的连接上。
在一些实现方式中,附加消息包括另一个挖矿节点的交易标识符列表的至少一个索引。
在一些实现方式中,附加消息包括至少一些经压缩的交易标识符。
在另一方面,本申请描述了一种用于在区块链网络中传播区块解的计算装置。该计算装置可以包括:一个或多个处理器;存储器;以及存储在存储器中的处理器可执行指令,该处理器可执行指令在被该一个或多个处理器执行时,使处理器执行本文中描述的一种或多种方法。
在又一方面,本申请描述了一种计算机可读介质,其存储用于在区块链网络中传播区块解的处理器可执行指令,该处理器可执行指令包括:在由一个或多个处理器执行时,使处理器执行本文描述的一种或多种方法的指令。
通过结合附图审阅以下详细描述,本公开的其他示例实施例对于本领域普通技术人员而言将是显而易见的。
在本申请中,术语“和/或”旨在涵盖所列元素的所有可能的组合和子组合,包括单独列出的元素中的任何一个、任何子组合或所有元素,并且不是必须排除额外的元素。
在本申请中,短语“…或…中的至少一个”旨在涵盖所列元素中的任何一个或多个,包括单独列出的元素中的任何一个、任何子组合或所有元素,而不是必须排除任何额外的元素,也不是必须需要所有元素。
本申请将涉及哈希处理或哈希函数,其旨在包括多个加密哈希函数中的任何一个,这些加密哈希函数在应用于任意的数据或“消息”集时,确定性地产生唯一的、固定长度的字母数字字符串。哈希函数的结果可以称为哈希值、指纹、哈希结果或等价物。示例包括但不限于SHA-2、SHA-3和BLAKE2。下面对于矿工对区块或候选区块进行哈希的任何引用将被理解为意味着将加密哈希函数应用于候选区块的头部分。使用的哈希函数可以是任何合适的哈希函数,除非指定了特定的哈希函数。
在本文档中,术语“区块链”被理解为包括所有形式的电子的、基于计算机的分布式分类账(ledger)。这些包括基于共识的区块链和交易-链技术、许可的和未被许可的分类账、共享分类账及其变型。尽管已经提出并开发了其他区块链实现方式,但是区块链技术最广为人知的应用是比特币分类账。尽管为了方便和说明的目的在本文中可能提及比特币,如通过比特币SV协议进行示例说明,但是应当注意,本发明不限于与比特币区块链一起使用,并且替代的区块链实现方式和协议落入本发明的范围内。
区块链是一种点对点的电子分类账,其被实现为由区块组成的、基于计算机的、去中心化的分布式系统,而区块又由交易组成。每个交易是一种数据结构,该数据结构对区块链系统中的参与者之间的数字资产的控制权转移进行编码,并包括至少一个输入和至少一个输出。每个区块头都包含前一个区块的哈希,以使得区块被链接在一起,从而创建所有交易的永久、不可改变的记录,这些交易自其开始就已经被写入区块链。交易包含嵌入到其输入和输出中的、被称为脚本的小程序,这些小程序指定如何以及由谁可以访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言来编写的。
区块链是在节点的网络上实现的。每个节点都是具有网络连接性和执行软件的计算装置,该软件执行适用的区块链协议。节点证实交易并将它们传播到网络中的其他节点。专门的网络节点(称为“挖矿节点”或“矿工”)将未确认的交易(即,待定交易)的集合收集到区块中并尝试“挖掘”该区块。在这些示例中,挖掘是指在网络中的任何其他矿工成功求解出针对其相应区块的工作量证明(POW)之前求解出工作量证明。在比特币示例中,POW涉及对于包含随机数(nonce)的区块头进行哈希处理,直到结果小于由难度参数设定的阈值为止。将该随机数反复地递增并重复哈希处理,直到结果小于阈值为止,或者直到矿工接收到另一个矿工已经成功的通知为止。挖掘过程的变化对于本领域普通技术人员来说是熟悉的。
典型的区块包含两种数据结构:区块头和交易。图1以图解的方式示出了来自比特币协议的示例区块结构100。区块结构100包括区块头102和有效载荷104。该示例中的区块头102包括用于版本号106、先前区块哈希值108、默克尔(Merkle)根110、时间戳112、目标难度参数114和随机数116的字段。先前区块哈希值108将该区块链接到链中的前一个区块,从而产生通过加密哈希而将连续的区块链接在一起的“区块链”结构。默克尔根110指的是基于区块中包含的所有交易的默克尔树结构。随机数116为任意值,挖矿节点可以使该任意值反复递增或递减以改变区块头102的内容,以便在挖矿时产生不同的哈希结果。
有效载荷104包括交易计数值118和交易列表120。在一些实现方式中,交易列表120可以是交易ID号的列表。
当挖矿节点成功找到产生低于阈值的哈希结果的区块头时,它会使用更新后的库存消息通知其他节点,该更新后的库存消息包括成功的哈希结果值。然后其他节点请求新区块的副本并独立地验证其有效性。
区块链生态系统正在日趋成熟以通过大量增加交易量并因此增加区块大小来提供更高的可用性。随着区块变得更大,在某些情况下超过128MB,将成功挖掘出的新区块传播到整个网络的其他节点花费的时间增加。传播的延迟是有代价的。首先,如果新区块证明是有效的,则不知道已经产生成功挖掘出的区块的矿工将继续尝试徒劳无功地挖掘他们自己的候选区块。其次,传播和验证的延迟可能导致(临时)分叉和孤区块的可能性增大。
将理解,在许多区块链协议中,矿工不会发送区块的完整副本,而是在库存消息中发送哈希结果。接收挖矿节点确定他们没有看到该声称的新区块,并向成功的矿工发送GETBLOCK(得到区块)或GETDATA(得到数据)消息。成功的矿工不发送区块的完整副本,而是发送区块头、来自有效载荷的交易计数字段、以及包括在区块中的交易的有序列表。该有序列表可以包括交易的完整交易ID号(TxXID)的集合。在一些实施例中,TxID可以是交易的固定长度哈希。例如,TxID可以是通过使用SHA-256对交易进行哈希处理而获得的256位(32字节)的数字。通过借助标识出的交易的TxID从内存池中检索标识出的交易,接收节点可以重新组装完整的区块。
然而,随着现代区块大小增长到128MB以上,如果交易计数很大,则要传输的数据大小可能仍然很大。例如,包含50万个交易的区块将具有16MB的TxID的有序列表。
因此,如在PCT专利公开文本WO2020/208590和WO2020/208596中所描述的,已经提出的是,挖矿节点在对他们的候选区块进行哈希处理的同时,将关于他们的相应候选区块的信息提供给其他矿工。以这种方式,每个矿工利用发现成功区块之间的时间延迟(这在比特币的示例中约为十分钟)向其他矿工提供有关该矿工正在处理的候选区块的结构和内容的详细信息。通过提前提供这些信息,当发现成功的区块时,成功的矿工只需发送来自区块头的信息,并且在某些情况下,只需发送发送创币交易,以确保所有其他节点都可以组装和验证完整的新区块。该数据可能只有几百字节。这提高了成功的新区块在整个网络中传播的速度。PCT专利公开文本WO2020/208580和WO2020/208596的内容通过引用的方式并入本文。
候选区块数据在矿工间的解前传播(pre-solution propagation)可以称为流式区块模板(SBT)。每个矿工在其当前处理的候选区块中向其他矿工提供交易标识符的有序列表。在某些情况下,交易标识符可以作为截断的交易标识符发送以节省带宽。PCT专利公开文本WO2020/208596详述了在截断的交易标识符的情况下解决冲突的方法。
为了举例说明,现在将参考图2,其以图解的方式示出了用于在区块链系统中预分发区块数据的简化系统200。在该示例中,系统200包括四个挖矿节点202:矿工A 202a、矿工B 202b、矿工C 202c和矿工D 202d。挖矿节点202是区块链网络204中的节点,该区块链网络204可以包括其他节点(未示出)。其他节点可能包括全节点、SPV节点、挖矿节点或其他类型的区块链节点。
每个挖矿节点202可以在计算装置上实现,该计算装置可以包括一个或多个处理单元。如本领域技术人员将理解的,处理单元可以包括具有专用硬件的专用处理单元,该专用硬件被设计为以显著的速度和效率执行与区块链挖掘相关联的计算操作。然而,它还可以包括或替代地包括通用计算装置。计算装置包括处理器可执行软件,该处理器可执行软件包括处理器可读指令,该处理器可读指令在被执行时使一个或多个处理单元执行所描述的操作。计算装置包括存储器以及与关联的硬件和软件的网络连接,以根据适用的网络协议获得网络连接性以及发送和接收消息。
每个挖矿节点202从区块链网络204接收并验证交易,并且构建用于挖掘的候选区块。例如,矿工D 202d构建候选区块208,该候选区块208包含经验证的交易的有序集,然后候选区块208尝试为经验证的交易的有序集找到工作量证明。
同时,矿工D 202d向其他挖矿节点202发送区块模板,即,关于矿工D 202d的候选区块208中交易的有序列表的信息。矿工D 202d还从其他挖矿节点202中的每一个接收关于其他挖矿节点202正在挖掘的相应候选区块的信息。矿工D 202d将该信息存储在每个其他挖矿节点的仅附加列表(AOL)210中。也就是说,例如,矿工D 202d基于其从矿工A 202a接收到的、指定矿工A 202a的候选区块的有序内容的消息,为矿工A 202a构建仅附加列表210。同时,矿工D 202d可以构建并维护记录(例如,AOL-D),其记录矿工D 202d发送到其他节点的交易信息的有序列表。这可能有助于在找到POW解的情况下同步候选区块208和AOL-D数据,如将在下面进一步解释的。
将理解,预分发候选区块信息,使得每个挖矿节点202具有针对每个其他挖矿节点202的、反映相应候选区块的交易的相应有序列表(AOL),确保在找到POW之后只需要传播最少量的信息。这确保了挖矿节点202尽快具有他们验证新区块所需的信息,从而减少在另一个挖矿节点202已经成功的情况下搜索POW所浪费的时间。挖矿节点202有充分的动机尽快传播和验证新区块,以便可以继续搜索下一个区块。在连续区块之间大约十分钟的时段期间预分发交易的有序列表时,不太关心由于网络时延而引起的潜在延迟。
挖矿节点202中的一个在成功地找到其候选区块的POW时,向其他挖矿节点202发送消息,该消息包括这些其他挖矿节点202使用该挖矿节点202的AOL 210重建求解出的区块所需的至少一些区块头信息。例如,该消息可能包含随机数和时间戳,以及在对完整区块头进行哈希处理时获得的哈希值。
在一些实现方式中,与AOL 210相关的挖矿节点202之间的消息可以包括当前流式区块模板的模板标识符。这在本文中可以被称为SB模板标识符。SB模板标识符可以特定于挖矿节点202和区块级别,因此它指代特定的候选区块,即,交易的特定有序列表。来自挖矿节点202的、与其交易的有序列表(AOL)相关的任何消息传递都可以包括SB模板标识符,以确保接收挖矿节点202将改变与正确的交易的特定有序列表相关联。在一种实现方式中,SB模板标识符可以是矿工标识符(矿工ID)和区块头中的prev_block字段(即,前一个区块的哈希)的哈希:
TmID=H(前一个区块||矿工ID)
这将SB模板标识符与区块级别和特定矿工联系起来。
与有序列表相关的每个消息还可以包括序列号。序列号可以是无符号整数值,用于指示来自与特定模板相关联的一个矿工的消息的顺序。排序有助于消息接收方在未接收到某些消息或接收到乱序的某些消息的情况下唯一地确定特定矿工的TXID排序。因此,每个附加消息可以包括SB模板标识符和序列号两者。SB模板标识符对于区块可以保持不变,而序列号随着与该SB模板标识符相关的每个消息的发送而递增。
本文讨论的SB模板标识符不同于且有别于“模板标识符”(template_id)或“候选区块标识符”(cb_id),该“模板标识符”(template_id)或“候选区块标识符”(cb_id)可以由矿工内的交易处理器或区块组译器(assembler)用于表示候选区块在特定时间点处的内容,在该特定时间点期间,候选区块的版本被传递到挖矿单元。如稍后将在下面讨论的那样,候选区块的内容可能随着时间而改变,因为添加了交易,并且更新后的候选区块被传递到可用于在候选区块上工作的各个挖矿单元。在一些实现方式中可能采用形式<base>.<sequence_number>的template_id(或cb_id)随时间对该候选区块的状态进行跟踪,使得当挖矿单元返回解时,区块组译器或交易处理器知道挖矿单元正在处理的候选区块的版本。同时,流式区块模板过程与模板构建过程有些异步地执行,并且被发送以提醒其他矿工的、包括在当前矿工的候选区块中的交易的附加消息可能变得与候选区块的状态(特别是已找到解的候选区块的版本)脱钩。因此,如下文将进一步描述的,一旦发现POW解,矿工就可以参与同步过程。
如上所述,矿工ID可以是挖矿节点的IP地址或挖矿节点202的某个其他的唯一标识符。在一些实施例中,初始认证操作可以在矿工连接到网络时发生,这使得将唯一矿工ID关联到该挖矿节点202。认证操作可以包括握手操作,在握手操作中,每个挖矿节点202提供公钥和数字签名。认证与数字签名的验证有联系。在某些情况下,矿工ID可以基于公钥、数字签名或它们的某种组合。因此,挖矿节点202可以通过对等经认证的通道206互连。流式区块模板消息可以在这些经认证的通道206上进行交换。
经压缩的标识符
为了减少在与流式区块模板有关的挖矿节点之间传输的数据量,可以压缩SBT消息中指定的交易标识符。一种用于压缩的选项是截断交易标识符,使得仅传输标识符的一部分。这可能导致截断的标识符之间的冲突。在“制造的TxID”的情况下,冲突可能加剧;也就是说,存在某些情况,其中交易被构建以确保其TxID具有特定特性,例如,TxID中的特定模式(例如,前导零)。这种情况可能导致冲突增加,而且还打开攻击的可能性以导致冲突。因此,可能有利的是,除了仅截断TxID,还提供交易标识符压缩过程。
在某些情况下,可能有利的是,提供可扩展的、经压缩的标识符结构,以便使其响应于交易量或条件而逐渐抗冲突。在某些情况下,可能有利的是,压缩TxID以尽量保留尽可能多的、合理的随机性。编码方法应该在所有对等节点间是通用的,以便不必维护不同的编码过程来处理来自不同挖矿节点的消息。此外,将有利的是,具有在实施时能够在变化条件下工作的数据结构中进行快速存储和查找的过程。
在一个方面,本申请提供了用于压缩交易标识符以及用于从经压缩的标识符中标识完整交易标识符的方法和系统。
现在将参考图3,其以图解的方式示出了根据本申请的示例性经压缩的标识符的结构。以已知的方式,为交易300生成交易标识符302。在比特币的示例中,通过对交易300进行哈希处理来获得交易标识符302。特别地,比特币规定了交易300的双SHA256哈希以产生交易标识符302。
交易标识符302是长度固定的伪随机数。在SHA256的情况下,所得到的数字是32字节的数字。经压缩的交易标识符(CID)304可以分两部分生成:通过创建前缀306并将其与交易标识符302的截断部分308串接。前缀306是使用应用于完整交易标识符302的函数生成的长度固定的数字。在一些示例中,可以使用递归哈希函数生成前缀306以产生紧凑数(compact number)。在一些示例中,前缀306可以是2、3或4字节长。用于产生前缀306的哈希函数可以是非加密哈希。哈希函数可以基于计算实现方式的容易程度和其随机性来选择。理想情况下,哈希函数产生前缀值,该前缀值在其潜在值的整个范围内都是等概率的,即它具有等概率分布。该函数可以是murmer哈希函数或其变型的一个版本。
在一个示例中,函数涉及异或(XOR)和折叠操作。在某些情况下,函数还可以或可替代地涉及旋转操作。在某些情况下,函数还可以包括将交易标识符与盐币(salt)值进行异或运算,以改进任何非随机化的交易标识符(例如,制造的标识符)的随机化。盐币是所有挖矿节点都知道的值,并且在某些情况下可能是记录在区块链中的值。在一个示例中,盐币值可以是在前一个区块时间之前不可用的值。在一个示例中,盐币值可以是最近区块的默克尔根。
一个示例过程概述如下:
1.Salt(盐币)异或TxID=CID32
{随机化TxID中的任何非随机模式}
2.CID32[0:15]异或CID32[16:31]=CID16{将CID32折叠成16字节}
3.CID16[0:7]异或CID16[8:15]=CID8 {将CID16折叠成8字节}
4.CID8[0:3]异或CID8[4:7]=CID4 {将CID8折叠成4字节}
5.CID4[0:2]=CIDprefix {将CID4截断为前三个字节}
在某些情况下,可以在过程中的各个步骤处引入一个或多个轮换(rotation)。所得到的CIDprefix是具有统计上等概率分布的三字节的随机数。
在使用时,前缀306(例如,CIDprefix)与交易标识符的截断部分308串接。截断部分308可以是交易标识符的可变长度部分。可以基于规定的CID长度参数cid_len来设置截断部分308的长度,该规定的CID长度参数cid_len在某些情况下可以由各个挖矿节点来设置。cid_len值可以由挖矿节点在发送关于其构建新区块模板的初始化消息时指定。cid_len值可以被配置成使得它例如以字节(例如,范围从1到16)为单位指定截断部分308的长度。在许多示例中,CID的截断部分308的典型长度可以是1到6。在某些其他情况下,cid_len值可以指定总CID长度,包括三字节前缀306。实验和建模数据表明,在具有1000万到5亿个交易的区块的情况下,4字节的总CID长度可能是最优的,而在具有5亿到100亿个交易的区块的情况下,5字节可能是最优的。这些CID长度分别对应于1或2字节的截断部分308。
现在参考图4,其示出了经压缩的交易标识符存储系统400的一个示例。系统400用于在挖矿节点处基于CID存储并快速访问交易标识符。可以使用一个存储装置或多个存储装置来实现系统400。
系统400可以包括全局TxID数据结构402、TxID存储索引404和多个储存桶406。全局TxID数据结构402是经挖矿节点验证的并且可用于包括在区块中的交易标识符(即,待定未确认交易的标识符)的综合列表。该综合列表在本文中可以被称为全局交易标识符列表。交易标识符按到达顺序附加到全局TxID数据结构402。如以下所描述的,到达顺序可以是交易处理器将交易标识符传输到SBT模块的顺序,该SBT模块管理CID生成与解析过程,包括经压缩的交易标识符存储系统400的管理。
TxID存储索引404的大小取决于CID前缀的长度。在该示例中,假定前缀为三字节值。TxID存储索引404将指针408分配给为交易标识符生成的任何CID前缀。指针408指向该CID前缀的对应储存桶406的地点。TxID存储索引404可以包括足够的存储器来存储对应于每个CID前缀的相应储存桶406的每个地址的相应指针408。
每个储存桶406可以是大小灵活的数据结构,该数据结构被设计为包含一个或多个TxID索引410,该一个或多个TxID索引410指向全局TxID数据结构402中存储对应完整TxID的地点(即,索引位置)。
在使用中,挖矿节点在接收到新交易并验证通过该新交易时,生成TxID(如果未知)并将该TxID附加到全局TxID数据结构402,注意TxID在全局TxID数据结构402中所存储位置的索引。然后,通过使用对TxID的压缩过程(例如,上面描述的递归折叠方法)来生成CID前缀,挖矿节点生成了CID。一旦找到前缀,则就使用该前缀来使用TxID存储索引404对相应的储存桶地址进行标识。然后挖矿节点将TxID索引410附加到该储存桶406,指向TxID存储在全局TXID数据结构402中的地点(即,位置或索引位置)。
为了解析接收到的CID,挖矿节点基于接收到的CID的前缀部分而在TxID存储索引402中找到对应的储存桶地址。然后,挖矿节点读取该储存桶406内的一个或多个TxID索引410,并在全局TxID数据结构402中在该一个或多个TxID索引410所指示的地点处定位对应的TxID。这些TxID之一将与TxID的截断部分相匹配。
值得注意的是,该示例中的数据结构可以很好地扩展并实现高度并发访问。
现在将参考图5,其以流程图的形式提供了用于生成经压缩的交易标识符的示例方法500。在一些示例中,方法500可以由挖矿节点来实现。方法500可以通过存储在计算机可读介质上的处理器可执行指令来实现,这些指令在由一个或多个处理器执行时,使该一个或多个处理器执行所描述的功能。指令可以实现为应用程序或模块(例如,SBT模块)。SBT模块可以是独立的软件单元,或者并入作为更大的软件例程、指令、应用程序、模块等套件的一部分。
在操作502中,SBT模块接收交易标识符。交易标识符可以由挖矿节点内的交易处理器提供,该交易处理器被配置为验证新交易。交易本身可以经由对等区块链网络来接收,该对等区块链网络与交易通过网络的传播相关。交易本身可以经由商家API从连接到挖矿节点和/或区块链网络的商家装置来接收。交易标识符可能已经由交易处理器通过对交易进行哈希处理来确定,这可能是验证交易的一部分。
在该示例中,为了生成CID,在操作504中,SBT模块通过将TxID与盐币进行异或运算来随机化TxID。盐币可以是挖矿节点已知的任何固定数。在某些示例中,盐币可能是区块链上最近确认的区块的默克尔树根。由32字节的默克尔根对32字节TxID的异或运算产生32字节的、随机化的TxID值。
然后,在操作506和508中,SBT模块使用异或运算递归地折叠随机化的TxID值。递归折叠涉及对数字的前半部分与数字的后半部分进行异或运算。例如,通过将前16个字节与后16个字节进行异或运算来折叠32字节的值。在一些实现方式中,可以在异或运算之前旋转两半中的一个或两个。递归折叠一直持续,直到到达期望的长度为止。在该示例中,折叠一直发生,直到值为4个字节长为止。
操作510指示可选的轮换操作。在某些情况下,轮换可以应用于通过递归折叠获得的最终值。操作512指示可选的截断操作。在某些情况下,仅保留通过递归折叠获得的最终值的一部分。在该示例中,仅保留折叠后的值的前三个字节。然后在操作514中将结果输出为CID前缀。
在该示例方法500中,CID生成过程然后还包括截断交易标识符,如操作516所指示的那样,并且串接前缀和截断的TxID。TxID可以被截断为基于规定的CID长度所确定的长度,如cid_len参数所反映的那样。操作516导致CID的生成,该CID然后可用于向其他挖矿节点信令通知关联交易已被当前挖矿节点包括在候选区块中。
方法500还包括存储CID映射,如操作518至522所指示的那样。特别地,在操作518中,SBT模块将TxID存储在global_list中并记录存储TxID的地点(例如,索引)。在操作520中,SBT模块然后标识与为TxID生成的CID前缀相关联的储存桶。然后在操作522中将global_list的索引附加到该储存桶。
将理解,其他操作可以由SBT模块与新TxID的接收相关地执行,例如将TxID附加到当前挖矿节点的仅附加列表(AOL),反映当前挖矿节点构建的候选区块的内容,或将CID包括在被发送到其他挖矿节点的附加消息中。
现在参考图6,其示出了流程图,该流程图示出了对存储在第一挖矿节点处的AOL进行更新的示例方法600。在操作602中,第一挖矿节点从第二挖矿节点接收附加消息。附加消息包括CID的有序集。正如下面将进一步解释的,在某些情况下,如果发送挖矿节点确定更长的CID或完整的TxID将有利于避免冲突,则附加消息可以包括一个或多个扩展的CID或者甚至完整的TxID。
在操作604中,接收挖矿节点提取接收到的CID的前缀部分,并且该前缀用于标识TxID存储中对应的储存桶。在一个示例中,前缀部分是前三个字节。如上所述,储存桶包含一个或多个索引,该一个或多个索引指向全局TxID数据结构中存储对应于该前缀的TxID的地点。在操作606中,读取一个或多个索引指向的TxID以找到与CID的剩余部分匹配的TxID,即与截断部分匹配的TxID。也就是说,TxID的第一部分将与CID的其余部分匹配。如果没有找到匹配项,或者如果储存桶不包含任何索引,则在操作608中,接收挖矿节点可以向发送挖矿节点传递消息以解析缺失的交易数据。例如,该消息可能请求完整的TxID或对应于CID的完整交易。
如果在操作606中找到匹配项,则在操作610中可以验证附加消息中的校验和。在一些示例实现方式中,附加消息可以包括校验和,或另一种错误检测机制,其用于确定从附加消息中的CID获得的经解析的交易标识符集是否准确。如果失败,则可能指示需要解决的未检测到的冲突。因此,接收挖矿节点可以向发送挖矿节点传递关于失败的校验和并请求冲突解决的消息,如操作608所指示的那样。如果校验和通过验证,则在操作612中,接收挖矿节点将交易标识符附加到存储在发送挖矿节点的存储器中的AOL。在一个实现方式中,为附加消息中引用的所有交易标识符的有序列表提供单个校验和值。在另一个实现方式中,为附加消息中引用的每个交易标识符提供校验和值。在又一个实现方式中,按照附加消息中引用的顺序为每组X数量的顺序交易标识符提供校验和值。组的大小X可以由区块链协议设定,或者可以由挖矿节点在初始化期间配置。
如上所述,CID长度可以是固定值。固定值可以在网络协议中规定并且在某些情况下被硬编码。在某些情况下,固定值可以是挖矿网络在协商一致下选择的预定网络参数。在某些情况下,固定值可以是基于由挖矿节点在以下时候选择的长度:挖矿节点发送SBT初始化消息以信令通知它正在参与SBT网络,并且具有它将信令传输的候选区块。
平衡带宽使用与冲突概率的最佳长度可能随着交易量的变化而变化。可能有利的是,提供用于根据条件需要调整CID长度的优雅机制。在一个示例中,默认CID长度可以由CID长度参数cid_len设定,但是如果发送节点标识出冲突,则协议可以允许使用更长的CID来信令传输交易标识符。在一些实现方式中,可以对CID长度进行两次或更多次调整,以根据具体情况逐渐调整长度从而避免冲突。在某些情况下,可以在附加消息中发送完整的TxID或者甚至完整的交易。
为了信令通知正在发送的引用类型,可以针对不同类型的引用定义不同的操作码。例如,操作码OP_APPEND_CID可以被定义为用于信令传输长度为cid_len字节的压缩交易标识符。另外的操作码OP_APPEND_ECID可以用于信令通知将附加“扩展CID”,该“扩展CID”的长度为(cid_len+1)字节,即,“扩展CID”比CID长一个额外的字节。也就是说,ECID的截断部分比CID的截断部分长一个字节。
在一些情况下,对于ECID无法解决冲突的情况,可以定义另一个操作码OP_APPEND_XCID以便信令传输“进一步扩展的CID”。例如,XCID可以具有(cid_len+4)字节的长度,即,比ECID长3个字节,并且比CID长4个字节。在ECID无法解决冲突的极少数情况下,可能存在使用操作码OP_APPEND_ID发送完整的TxID的概率,该操作码OP_APPEND_ID指示后面的数据是完整的32字节TxID。
在某些情况(例如,矿工接收直接从商户API注入的交易,而不是通过对等区块链网络接收交易的情况)下,(除了在对等网络上传播交易)还可以选择在附加消息中完整发送该交易,期望的是接收挖矿节点可能尚未看到经由对等网络传播的消息。可以为这种情况定义操作码OP_APPEND_FULL,该操作码OP_APPEND_FULL的后面可以是指示后续交易数据的长度的值,然后是完整的交易数据。
现在参考图7,其示出了流程图,该流程图示出了生成经压缩的交易标识符的一种示例方法700。该方法700可以由适当编程的计算装置(例如,挖矿节点)来实现。可以假定,挖矿节点具有用于经验证的交易的TxID,并且挖矿节点已经生成了CID的前缀部分。前缀部分可以使用递归压缩方法(例如,诸如结合图5描述的递归折叠方法等)生成。
在操作702中,挖矿节点标识与为TxID生成的前缀相对应的储存桶。这可以包括标识指针,该指针指向与前缀相关联地存储在txid_store数据结构中的储存桶的地址。然后挖矿节点将TxID与储存桶中已经引用的TxID进行比较,如操作704所指示的那样。也就是说,储存桶可能已经包含一个或多个TxID索引,该一个或多个TxID索引指向全局TxID数据结构中存储具有相同前缀的TxID的地点。
在操作706中,挖矿节点评估储存桶所引用的TxID中的一个是否与当前TxID的至少前N个字节相匹配。N可以是由CID长度参数cid_len设定的值,例如,N=cid_len+1。也就是说,N可以匹配于XCID的规定长度减去前缀的三字节长度,即,N匹配XCID的截断部分的长度。如果现有存储的TxID与当前TxID的前N个字节匹配,则在操作708中,挖矿节点确定要发送完整ID。因此,OP_APPEND_ID操作码用于将完整的TxID添加到附加消息。
如果不存在这种匹配,则在操作710中,挖矿节点评估当前TxID的至少M个字节是否与储存桶中引用的TxID中的一个匹配,其中,M<N。在某些情况下,M对应于ECID的截断部分的长度,例如,cid_len-2。如果当前TxID的至少M个字节与储存桶中引用的TxID中的一个匹配,则在操作712中,挖矿节点确定应该发送例如总长度为cid_len+4(即,具有长度为cid_len+1字节的TxID的截断部分)的XCID。因此,XCID是由TxID的前cid_len+1个字节和前缀组装而成的,并且OP_APPEND_XCID操作码用于将XCID添加到附加消息。
如果不存在这种匹配,则在操作714中,挖矿节点评估当前TxID的至少P个字节是否与储存桶中引用的TxID中的一个匹配,其中,P<M<N。在某些情况下,P对应于CID的截断部分的长度,例如,cid_len-3。如果当前TxID的至少P个字节与储存桶中引用的TxID中的一个匹配,则在操作716中,挖矿节点确定应该发送例如总长度为cid_len+1的ECID,其中,截断部分的长度为cid_len-2。因此,ECID是由TxID的前cid_len-2个字节和前缀组装而成的,并且OP_APPEND_ECID操作码用于将ECID添加到附加消息。
如果在操作706、710或716中没有找到匹配项,或者如果储存桶中还没有引用TxID,则在操作718中,挖矿节点使用TxID的前cid_len-3个字节和前缀生成CID。然后挖矿节点使用OP_APPEND_CID操作码以将CID添加到附加消息。
将理解,虽然该示例过程使用三种可能的经压缩的ID长度(CID、ECID、XCID),但是其他实现方式可以具有更多可能的长度或更少可能的长度。此外,这些示例中CID、ECID和XCID值的长度是长度的一个示例集。在其他实现方式中可以使用不同的长度。上述过程逐渐调整经压缩的标识符的长度,以解决检测到的冲突并适应大交易量的情况。
上述方法和系统提供了用于在挖矿节点之间流式传输(streaming)区块模板数据以实现解前(pre-solution)区块模板传播的各种选项。使用经压缩的交易标识符使得能够减少带宽使用。所描述的用于生成经压缩的交易标识符的示例过程有助于通过经压缩的标识符的优雅的、适应性扩展而在冲突发生之前检测并解决冲突。具有前缀(该前缀被构建为具有一般等概率的分布)的经压缩的标识符的结构,以及用于存储数据以解压缩/解析CID的数据模型的结构,提供了对抗攻击向量的弹性,并实现了快速高并发存储器访问以解析CID。
将有利的是,进一步利用用于以带宽有效的方式信令传输交易标识符的选项。因此,在另一方面,本申请提供了用于信令传输交易标识符的方法和系统,其利用以下事实:参与SBT网络的挖矿节点正在构建其他挖矿节点的AOL的一般公共图片。大多数的这些AOL列表都是根据未确认交易的同一总集合而构建的。因此,在一个方面,挖矿节点可以使用指针来引用其自身AOL中的交易标识符,该指针指向另一挖矿节点的AOL中的相同交易标识符。
图8以图解的方式示出了简化的示例系统,其包括两个挖矿节点:矿工A和矿工B。矿工A具有AOL-A列表802和AOL-B列表804,该AOL-A列表802反映了添加到矿工A的当前候选区块的交易的有序列表,该AOL-B列表804反映了矿工B告诉矿工A的、包括在矿工B的候选区块中的交易的有序列表。矿工A基于附加消息来构建AOL-B列表,该附加消息通过矿工A与矿工B这两个矿工之间经认证的连接806而从矿工B来接收。
矿工B类似地维护其自己的AOL-B列表808和AOL-A列表810,该AOL-B列表808反映了矿工B的候选区块中的交易的有序列表,该AOL-A列表810反映了矿工A告诉矿工B的、包括在矿工A的候选区块中的交易的有序列表。
如上所述,矿工使用附加消息来彼此信令传输它们各自的AOL中的交易的有序列表,该附加消息可以使用操作码(例如,OP_APPEND_CID、OP_APPEND_ECID、OP_APPEND_XCID或OP_APPEND_ID)来信令传输有序列表中的交易标识符。然而,如果矿工A正在信令通知特定交易标识符812包括在其AOL-A列表802中,并且它已经基于来自矿工B的附加消息而将同一特定交易标识符812录入到AOL-B列表804中,则矿工A具有以下选项:通过指向矿工B的AOL-B列表804而向矿工B指定该特定交易标识符。具体而言,矿工A可以表示该特定交易在构成AOL-B列表804的交易有序集中的索引。在该示例中,索引可以是0x03。
因此,在构建要发送到矿工B的附加消息时,矿工A可以选择使用OP_APPEND_IDX0x03而不是引用经压缩的交易标识符的另一个操作码。在接收到附加消息后,当矿工B遇到OP_APPEND_IDX操作码时,它知道指定的索引是其自己的AOL-B列表808的索引。然后矿工B可以将该索引处的内容(即,TxID)从其AOL-B列表复制到AOL-A列表810中。在该示例中,AOL-B列表808的索引0x03处的TxID被附加到AOL-A列表810。
在信令传输AOL索引值比信令传输经压缩的交易标识符更有效的情况下,特别是在经压缩的交易标识符是扩展的或进一步扩展的或完整的交易标识符的情况下,这种信令传输交易标识符的方式可以导致节省带宽。
通过将索引信令传输到AOL来指定交易标识符的概念可以扩展到多矿工情况,在该情况中,一个矿工可以通过提供第三矿工的AOL的索引而将交易标识符信令传输到第二矿工。图9示出了涉及矿工A、矿工B和矿工C的这种情况。矿工A维护其自己的AOL-A列表902、矿工B的AOL-B列表904和矿工C的AOL-C列表906。AOL-C列表906由矿工A基于从矿工C接收到的附加消息来构建。类似地,矿工B存储其自己的AOL-B列表910、矿工A的AOL-A列表912和矿工C的AOL-C列表914。
如果矿工A打算向矿工B发送指定其AOL-A列表902中的TxID 920的附加消息,并且矿工A知道相同的TxID 920出现在矿工C的AOL-C列表906中,则矿工A可以发送指定AOL-C列表906并指定该列表的索引(例如,0x05)的附加消息。然后,在接收到附加消息并遇到该引用时,矿工B可以在其自己的AOL-C列表914的副本中指定的索引(例如,0x05)处定位TxID。然后矿工A复制该TxID并将该TxID附加到其AOL-A列表912。
可以定义第三方索引引用操作码OP_APPEND_EIDX以指定第三方AOL列表的索引。OP_APPEND_EIDX包括AOL列表和/或关联矿工的索引以及对AOL列表和/或关联矿工的引用。在这个意义上,由于包括额外的数据,所以OP_APPEND_EIDX不如OP_APPEND_IDX高效,但在某些情况下,仍然可以通过CID、ECID、XCID和/或ID信令而导致节省带宽。
在某些情况下,包括在附加消息中的、AOL列表的引用可能是对第三方矿工的引用(例如,矿工ID),尽管这不允许引用特定模板,但会被解释为对该第三方矿工当时的模板的引用。由于在开始新的候选区块的情况下可能重新初始化模板,因此即使在区块时间内,对模板本身进行引用可能是有利的。
模板各自都具有流式区块模板标识符sb_template_id,在发送初始化消息时使用该流式区块模板标识符sb_template_id。sb_template_id在当前模板中是唯一的,并与应用于每个附加消息的序列号相结合,允许接收节点正确地排序附加消息并应用附加消息来更新正确的模板。因此,OP_APPEND_EIDX操作可以引用sb_template_id编号以确保索引用于在正确的模板中定位TxID。
为了使OP_APPEND_EIDX高效,使用更紧凑形式的SB模板标识符可能是有利的。如果假设任何时候将只有几十到几百个模板,则可以通过将SB模板标识符截断为固定的缩短字节数(例如,2字节)来获得SB模板标识符的紧凑形式。缩短可以通过截断、截断哈希、murmer哈希或任何其他此类机制来进行。在一些实现方式中,初始化新模板并选择新的SB模板标识符的矿工首先测试SB模板标识符的紧凑形式与它知道的任何当前模板是否存在冲突,如果是,则它选择新的SB模板标识符并测试新的SB模板标识符的紧凑形式是否存在冲突。
在至少一个模型环境中利用包含大约十亿个交易的区块进行测试时,已经发现,IDX和CID可能产生相似的平均消息大小。CID可能更高效一些。如果有必要使用ECID或XCID,则可以选择IDX。ECID可能比EIDX更高效。相较于XCID或ID而言,选择EIDX(如果可用的话)可能是有利的。
如以上所指出,SBT过程可能涉及在SBT网络上发送或广播初始化消息,该初始化消息为发送挖矿节点指定SB模板标识符。该挖矿节点可以从其他挖矿节点接收初始化消息,这些初始化消息指示其他挖矿节点各自的SB模板标识符,并且在接收到这些消息时,挖矿节点准备为每个其他挖矿节点构建对应的AOL列表。初始化消息可以设置与该挖矿节点的AOL列表相关的某些参数。例如,初始化消息可以指定挖矿节点使用的CID长度(cid_len)、SB模板标识符和矿工ID。在某些情况下,初始化消息可能包括矿工公钥信息和矿工签名。在某些情况下,初始化消息可以指定校验和组大小,该校验和组大小是将对其执行校验和的组中的交易的数量并且在发送附加消息时提供。在一些实现方式中,该值也可以在单独的附加消息中指定。在某些情况下,初始化消息可能包括先前的区块哈希,以便接收方可以验证该消息与涉及当前挖矿窗口的候选区块相关。
初始化消息还可以指定当前挖矿节点已经从其接收到SB模板数据(比如初始化消息和附加消息)的其他挖矿节点。换句话说,初始化消息可以信令通知当前挖矿节点正在跟踪哪些AOL列表。这使得其他挖矿节点能够知道它们是否可以将EIDX信令与当前挖矿节点一起使用,该当前挖矿节点引用特定第三方挖矿节点的AOL列表。在某些情况下,挖矿节点更新其在后续附加消息中的AOL跟踪数据,以便信令通知它正在跟踪额外的挖矿节点的AOL信息。在一个示例中,通过在作为其正构建的第三方模板的其初始化和/或附加消息中列出特定的其他节点的SB模板标识符,挖矿节点信令通知了它正在跟踪这些特定的其他节点的AOL信息。
在发送初始化消息后,挖矿节点可以发送一个或多个附加消息,该一个或多个附加消息指定挖矿节点的当前候选区块中的交易的有序列表。挖矿节点发送的、与同一模板相关的每个连续的附加消息都包含模板标识符和序列号。以这种方式,不按顺序接收或处理附加消息的挖矿节点可以确保附加消息以正确的顺序进行处理,以便构建AOL列表和/或按照先后顺序标识任何缺失的附加消息。
附加消息可以各自包括模板标识符、序列号、指示消息中引用的数量的交易计数。在AOL数据块(即,对CID、IDX等的引用)之后,消息可以包括一个或多个校验和值。在某些情况下,消息可能包括校验和组大小参数,该校验和组大小参数指定的是为了执行和评估校验和的目的而将多少经解析的交易标识符分组在一起。在某些情况下,所有经解析的交易标识符可能只有一个校验和。在某些情况下,经解析的交易标识符可能会被分成更小的交易标识符组,其中每组都有校验和值。
如果找到POW解,即,挖矿节点求解出针对其候选区块版本的POW,则挖矿节点在SBT网络上发送最终消息sbt_finalize,通知其他挖矿节点它已找到解并提供解的细节。例如,sbt_finalize消息可以包括完整的区块头、创币(创世)交易等。sbt_finalize消息还可以包括使AOL列表能够同步到候选区块的数据,如将在下面进一步解释的那样。
为了理解同步问题,考虑示例挖矿节点的各个部分的操作可能是有利的。图10以框图的形式示出了挖矿节点1000的简化示例。该示例中的挖矿节点1000包括交易处理器1002,该交易处理器1002被配置为接收并验证新交易,并将新交易存储在交易数据存储1004中。交易数据存储1004可以是本地的,或者可以位于远程并通过一个或多个网络连接而连接到交易处理器1004。
挖矿节点1000还包括SBT模块1006,该SBT模块1006被配置为构建CID、ECID、XCID和各种消息,包括要通过SBT网络发送到其他挖矿节点的附加消息。SBT模块1006还被配置为从其他挖矿节点接收附加消息并构建存储在本地存储器中的对应AOL 1008。SBT模块1006还可以被配置为在使用IDX或EIDX引用将有利的特定情况下,确定是否用IDX或EIDX引用替换CID、ECID、XCID或ID。
SBT模块1006经由与其他挖矿节点的经认证的连接1010而在SBT网络上发送和接收通信。交易处理器1002可以通过与区块链网络的网络连接1012发送和接收与其他节点的对等消息。
挖矿节点1000可以从三个来源接收交易数据。可以根据由适用的区块链协议管理的交易传播而经由到区块链网络的网络连接1012来接收交易。这种交易由交易处理器1002验证,存储在交易数据存储1004中,并且如果适用的话,还经由网络连接1012传播到区块链网络上的其他节点。
可以经由SBT网络通过到另一个挖矿节点的经认证的连接1010中的一个来接收交易。可以从该另一个挖矿节点以完整的形式接收这种交易,特别是在其他挖矿节点知道该交易尚未在区块链网络上普遍传播的情况下。SBT模块1006将完整的交易数据传送到交易处理器1002,以用于验证并存储在交易数据存储1004中。
交易也可以由挖矿节点1000通过商家连接1014而经由商家API 1020接收。例如,商家API 1020可以与销售点装置或支付处理网关等相关联,并且可以能够将新生成的交易直接注入到挖矿节点1000以用于验证和传播。
交易处理器1002还可以包括日志区块组译器1030,该日志区块组译器1030被配置为构建候选区块。候选区块包括来自交易数据存储1004的经验证的交易的有序集。现在还参考图11,其以图解的方式示出了候选区块组装与分发。
挖矿节点1000可以包括多个挖矿单元1050,这些挖矿单元1050被配置为执行计算以搜索关于给定候选区块1040的POW。在某些情况下,这些挖矿单元1050在挖矿节点1000内。在某些情况下(例如,在挖矿节点1000充当挖矿池的池协调器的情况下),这些挖矿单元1050中的一些或全部可以在挖矿节点1000外部。
日志区块组译器1030可以被配置为在交易被交易处理器1002接收并验证时随着时间而将交易添加到候选区块1040。在一些实现方式中,这可能导致日志区块组译器1030周期性地创建新的或经更新的候选区块。在一些示例中,大约每1/10秒组装一个新的候选区块。
一旦挖矿单元1050未能找到其正在处理的候选区块的解,挖矿单元1050就可以请求新的候选区块。然后日志区块组译器1030可以通过向挖矿单元1050提供当前组装的候选区块1040来做出响应。因此,不同的挖矿单元1050可能正在处理候选区块1040的不同“版本”,这取决于挖矿单元1050何时从日志区块组译器1030获得候选区块1040。每个“版本”可以具有关联的candidate_block标识符。
同样,以某种异步方式,具体来说,交易处理器1002,并且在某些情况下日志区块组译器1030,可以向SBT模块1006提供经更新的候选区块信息。然后SBT模块1006构建适当的附加消息,以便关于挖矿节点1000正在测试的候选区块来更新其他挖矿节点。在某些情况下,SBT模块1006可以在自由运行的基础上从日志区块组译器1030接收关于所添加的交易的候选区块数据,并且可以基于该传入信息构建附加消息,直到传入信息被标记有新的candidate_block标识符的这种时间为止。一旦SBT模块1006检测到新的candidate_block标识符,它就关闭并发送草稿附加消息,并且使用与新的candidate_block标识符相关联的新交易数据来开始新的附加消息。这样,每个附加消息对应于candidate_block标识符,这将使后续的同步更容易。
当挖矿单元1050标识POW解时,它通知交易处理器1002,然后交易处理器1002通知SBT模块1006找到了POW解并提供关联的candidate_block标识符。将理解,因为挖矿单元1050不一定都以同步方式处理当前候选区块,所以SBT模块1006在生成和发送的附加消息方面可能已经领先于一些挖矿单元1050。因此,SBT模块1006标识哪个附加消息与已经解析出的candidate_block标识符相匹配。回想一下,附加消息各自具有模板标识符sb_template_id(在区块时间内是常量)和序列号。一旦SBT模块1006确定了哪个序列号与candidate_block标识符相关联,它就可以确定是否需要同步。如果需要同步,则SBT模块1006采取行动以指示其他挖矿节点更新它们的AOL列表,以供挖矿节点1000回滚一个或多个附加操作。
在一个示例中,可以通过向其他挖矿节点发送对应于最终消息中的candidate_block的序列号来实现同步回滚。然后其他挖矿节点可以展开(unwind)由于附加消息具有后续序列号而发生的任何附加,以便到达与求解出的候选区块匹配的AOL。
在另一个示例中,同步回滚可以通过将OP_DELETE操作插入到最终消息中来实现,该OP_DELETE操作指定删除在OP_DELETE消息中指示的特定索引之后附加的所有交易。
现在还将参考图12,其以图的方式示出了挖矿节点的SBT通信和候选区块更新的并行过程。在图的左侧,是由日志区块组译器形成的候选区块的第一版本。第一版本是随着组译器按顺序将经验证的交易添加到候选区块而形成的。这些交易,以及在某些情况下它们在候选区块中的索引(例如,地点/顺序),被中继到SBT模块。该交易数据到SBT模块的传递是在标有候选区块标识符(例如,candidate_block_id)的消息中进行的。在一个示例中,标识符被指定为cb_id以便于引用。在该简化示例中,cb_id最初被设定为零,使得第一版本中被中继到SBT模块的每个交易都在指定cb_id=0的消息中。
SBT模块随着交易数据被接收而将接收到的交易数据添加到草稿附加消息,从而构建用于传输的附加消息。将理解,附加消息可以包括CID、ECID或XCID,而不是完整的TxID。在某些情况下,附加消息可能包括IDX或EIDX引用;尽管在一些实现方式中,可能留给SBT模块稍后确定在将消息传输到特定矿工之前是否将CID、ECID、XCID或ID引用替换为IDX或EIDX引用。
在某个时候,日志区块组译器完成当前候选区块的组装。这可以周期性地(例如,每1/10秒)被触发,或者可以响应于来自挖矿单元的、针对新区块的请求而被触发。在某些情况下,在日志区块组译器使用当前可用交易完成候选区块的初始版本,并且然后随着交易通过交易过程被验证和存储而添加附加的经验证的交易后,立即组装并发送该候选区块的初始版本,并且在每次响应于来自挖矿单元的、针对要挖掘的候选区块的请求而将进化中的候选区块发送到该挖矿单元时,对候选区块的新‘版本’进行标记。
无论日志区块组译器如何确定候选区块版本何时改变,在每次改变时,中继到SBT模块的后续交易都会被标记有更新后的候选区块标识符。在所示示例中,当索引地点0x05处的交易被中继到SBT模块时,交易是在包括cb_id=1的消息中。因此,在接收到该消息后,SBT模块确定候选区块版本已经改变(从0x00到0x01)。因此,SBT模块完成草稿附加消息并传输它,而还没有添加新交易。然后SBT模块打开具有下一个序列号的、新的草稿附加消息,并将候选区块中在索引0x05处的交易添加到新的草稿附加消息。SBT模块还可以更新存储在该挖矿节点的存储器中的本地AOL,以跟踪候选区块的当前状态。
如图所示,该过程继续进行,其中当SBT模块每次从来自日志区块组译器的中继交易中发现候选区块标识符已递增时,它都会关闭并发送附加消息。如果挖矿单元中的一个找到了解,则该挖矿单元将解连同该挖矿单元找到针对其的解的候选区块的候选区块标识符一起返回给交易处理器。这不一定是当前的候选区块标识符,因为自从向挖矿单元提供其正在处理的候选区块版本以来,候选区块标识符可能已经更新了一次或多次。因此,利用候选区块标识符,日志区块组译器可以确定已经求解了哪个版本的候选区块。
该解及其关联的候选区块标识符也被中继到SBT模块。然后,SBT模块确定哪个附加消息与求解出的候选区块相关联,即,一旦该候选区块标识符递增,就发送哪个附加消息。例如,使用所示过程,如果求解出的区块的候选区块标识符是cb_id=1,则候选区块包含跨越索引0x00到0x10的交易有序集。然后SBT模块标识出序列号为0和1的附加消息与候选区块匹配,但是附加消息序列号2和草稿(但未发送)附加消息序列号3不是求解出的候选区块的一部分。
因此,SBT模块准备并发送SBT最终消息(例如,sbt_finalize),该SBT最终消息通知其他挖矿节点找到了解,提供解数据(例如,区块头数据、创币交易等),并提供同步数据。在一个示例中,同步数据可以是对应于求解出的候选区块的最后附加消息的序列号。然后,接收挖矿节点标识它们是否已利用具有较后序列号的附加消息更新了对应的AOL列表,并且接收挖矿节点展开这些附加以确保AOL列表与求解出的候选区块的内容匹配。然后,接收挖矿节点可以使用来自SBT最终消息的解数据组装完成的区块并验证区块解。
可替代地,同步数据可以是一个或多个明确的删除操作码,该一个或多个明确的删除操作码指定要从AOL列表中移除的交易,以便展开先前的附加操作。删除操作码可以是针对需要移除的最旧附加的单个操作码,理解为所有后续附加也必须移除,或者可以针对必须从AOL列表中移除的每个交易标识符都包括删除操作码。
再次参考上面的示例,如果SBT模块确定附加消息2和草稿附加消息三3要被移除,那么它简单地丢弃草稿附加消息3并在SBT最终消息中指定序列号1。然后,接收挖矿节点基于附加消息序列号2确定添加了哪些交易,并将这些交易标识符从AOL列表中移除。可替代地,SBT最终消息包括要应用以移除这些交易标识符的删除操作。
以这种方式,日志区块组译器独立于SBT模块运行,该日志区块组译器在单独的附加消息中限制(block)交易标识符方面与候选区块版本部分地同步,这然后能够在发现解时快速而优雅地同步远程挖矿节点处的AOL列表。
现在将参考图13,其以流程图的形式示出了挖矿节点内的交易处理器的操作的一种示例方法1300。将理解,并未在流程图中示出交易处理器的所有操作或功能。流程图中描述的一些操作可以由日志区块组译器执行。流程图中描述的一些操作可以由交易处理器中除去日志区块组译器以外的其他部分执行。在某些情况下,流程图中描述的一些操作可以由挖矿节点中处于交易处理器本身之外的组件执行。
在操作1302中,接收交易。可以经由对等区块链网络、商户API连接或其他方式接收交易。交易处理器验证交易并将交易存储在未确认交易的内存池中。在操作1304中,交易处理器确定交易将被包括在当前候选区块中。该确定的基础在不同的实现方式中可能不同。在这种情况下,做出确定并将交易附加到具有候选区块标识符i的当前候选区块。由其交易标识符表示的交易可以附加到候选区块中的交易的有序列表中索引n处的候选区块。在操作1306中,将候选区块内的交易标识符及其索引n连同关联的候选区块标识符i发送到SBT模块。
在操作1308中,交易处理器评估其任何挖矿单元是否已经找到解。来自挖矿单元中的一个的解的通知将附有与其求解的候选区块相关联的候选区块标识符以及解的详细信息(例如,随机数、默克尔根等)。如果已经找到这种解,则交易处理器可以开始验证该解,并且它关于该解及其关联的候选区块标识符来通知SBT模块,如操作1312所指示的那样,使得SBT模块可以开始通知其他矿工和同步他们的AOL列表的过程。如果没有找到这种解,则交易处理器还评估是否已经接收到外部矿工的解的通知,如操作1310所指示的那样。该通知可能来自对等区块链网络或SBT网络。将理解,交易处理器可以根据SBT模块维护的对应AOL列表来构建新发现的区块,并将进行验证新区块以确认其合法的工作。合法的区块也可能导致对已被确认的交易的内存池的刷新。
如果在外部或内部找到解,则在操作1314中重置区块标识符和索引,并在操作1316中由交易处理器初始化新的候选区块。然后过程返回到操作1302,以开始用未确认的交易填充新的候选区块。
如果没有找到解,则在操作1318中,交易处理器可以确定是否要递增候选区块标识符。如上所述,交易处理器可以被配置为在固定周期(例如,每1/10秒)的基础上更新候选区块版本和标识符。在某些情况下,交易处理器可以被配置为响应于来自一个或多个挖矿单元的候选区块请求来更新候选区块版本和标识符。如果没有到期的更新,则在操作1319中使索引n递增并且过程返回到操作1302,以继续将未确认的交易添加到当前候选区块。
如果要更新候选区块版本和索引,则在操作1320中,交易处理器可以将当时候选区块发送到一个或多个挖矿单元以进行挖掘,并且可以在返回到操作1302之前使候选区块标识符i递增,以继续将未确认的交易添加到当前候选区块。
图14中通过流程图的方式示出了挖矿节点内的SBT模块的操作的一种示例方法1400。将理解,并非SBT模块的所有操作或功能都必须在流程图中示出。例如,该流程图没有示出对传入的附加消息的处理和对应AOL列表的构建,或TxID经压缩的标识符生成或解析过程。流程图中描述的一些操作可以由SBT模块执行。流程图中描述的一些操作可以由挖矿节点中处于SBT模块本身之外的其他组件执行。
在操作1402中,SBT模块可以执行初始化,例如,清除数据结构、使索引归零、分配存储器等。操作1402还可以包括向其他挖矿节点发送初始化消息,该初始消息指示当前区块的挖矿节点正在使用的SB模板标识符,以及其他参数。在操作1404中,SBT模块开始针对当前候选区块的草稿附加消息。附加消息可以包括SB模板标识符sb_template_id或其经压缩的版本(如果有的话),该SB模板标识符sb_template_id可以被选择为不与从其他挖矿节点接收到的任何现有SB模板标识符发生冲突。附加消息还可以包括序列号,该序列号最初可以被设定为零。
在操作1404中,SBT模块从交易处理器接收交易数据,例如,交易标识符、指示交易附加到的候选区块版本的候选区块标识符(例如,cb_id)、以及指示交易在候选区块中的交易的有序列表中的地点的索引。
在操作1408中,SBT模块确定接收到的候选区块标识符自最近接收到的标识符以来是否已经递增。如果不是,则SBT模块知道接收到的交易标识符被添加到了当前的候选区块版本,并且它继续生成对应的CID、ECID、XCID等(如果适用的话),并将对交易的引用(例如,CID、ECID、XCID、ID、IDX、EIDX等)添加到草稿附加消息,如操作1410所指示的那样。
假设没有找到区块解,如操作1416所指示的那样,则方法1400返回到操作1406以处理从交易处理器接收到的下一交易数据。这可以继续,直到SBT模块在操作1408中确定从交易处理器接收到的交易标识符与递增后的候选区块标识符(例如,cb_id)相关联为止。在这种情况下,SBT模块则在不添加新的交易标识符的情况下关闭草稿附加消息,并将其发送到其他挖矿节点,如操作1412所指示的那样。然后,在操作1414中,SBT模块打开具有递增后的序列号的新的草稿附加消息,并且然后继续进行到操作1410,以将接收到的交易标识符(或其经压缩的形式)添加到新的草稿附加消息。
如果在操作1416中检测到区块解,并且区块解被外部挖矿节点找到,则SBT模块返回到初始化操作1402。AOL列表和数据结构被重新初始化,并且重新开始构建新的候选区块的过程。
如果SBT模块接收到交易处理器的解的通知(指示该挖矿节点已找到解),如操作1418所指示的那样,则SBT模块准备要发送到其他挖矿节点的SBT最终消息。特别地,来自交易处理器的、关于找到的解的通知包含有对于与该解相关联的候选区块标识符的引用。在操作1420中,SBT模块确定哪个附加消息对应于与候选区块标识符相关联的候选区块内的最后添加的交易组。然后,在操作1422中,SBT模块向其他挖矿节点发送SBT最终消息,该SBT最终消息包含区块解信息和同步数据。如上所述,在一些实现方式中,同步数据可以包括与求解出的候选区块相关联的最后一个有效附加消息的序列号。在一些实现方式中,同步数据可以包括删除指令,该删除指令标识要从关联的AOL列表中移除的交易标识符,以将关联的AOL列表同步到求解出的候选区块。
现在参考图15,其以框图形式示出了根据本申请示例的简化的挖矿节点1500。挖矿节点1500包括处理器1502,其可以包括一个或多个微处理器、专用集成电路(ASIC)、微控制器或类似的计算机处理装置。该挖矿节点1500还可以包括存储器1504和一个或多个网络接口1506,该存储器1504可以包括持久性和非持久性的存储器,以存储值、变量以及在某些情况下的处理器可执行的程序指令。
挖矿节点1500可以包括处理器可执行的区块链应用程序1508,其包含处理器可执行的指令,这些指令在被执行时使处理器1502执行本文所述的功能或操作中的一个或多个。
以上呈现的各种实施例仅是示例并且绝不意味着限制本申请的范围。本文描述的创新的变化对于本领域普通技术人员来说将是显而易见的,这样的变化在本申请的预期范围内。特别地,可以选择来自上述示例实施例中的一个或多个的特征以创建替代示例实施例,其包括可能未在上文明确描述的特征的子组合。此外,可以选择来自一个或多个上述示例实施例的特征并将其组合以创建替代示例实施例,其包括上面可能没有明确描述的特征的组合。对于本领域技术人员而言,在整体审阅本申请时,适合于这种组合和子组合的特征将是显而易见的。本文和引述的权利要求中描述的主题旨在涵盖和包含所有适合的技术变化。
Claims (15)
1.一种在区块链网络中传播区块解的计算机实现的方法,包括:
在第一矿工处,基于从其他矿工接收到的附加消息,构建相应的交易有序集的仅附加列表,并将相应的交易有序集的仅附加列表存储在正由所述其他矿工挖掘的相应区块候选中,所述附加消息包含对于要附加到所述其他矿工的相应仅附加列表的交易的引用;
从所述其他矿工中的一个矿工接收区块最终消息,所述区块最终消息为最终候选区块提供区块解并包括同步数据;
基于所述同步数据,确定附加到与所述其他矿工中的所述一个矿工相关联的仅附加列表的一个或多个交易不包括在为其找到区块解的所述最终候选区块中;
从与所述其他矿工中的所述一个矿工相关联的仅附加列表中移除所述一个或多个交易,以产生最终的仅附加列表;
根据所述最终的仅附加列表和所述区块解来构建求解出的区块;以及
验证所述求解出的区块。
2.根据权利要求1所述的方法,其中,来自所述其他矿工中的所述一个矿工的每个附加消息具有相应的关联序列号,并且其中,所述同步数据指示特定序列号,所述特定序列号与包括在所述最终候选区块中的最终交易集相关联。
3.根据权利要求2所述的方法,其中,移除包括:基于所述一个或多个交易在附加消息中的指定而移除所述一个或多个交易,所述附加消息具有相对于所述特定序列号的在后的相应序列号。
4.根据权利要求1所述的方法,其中,所述同步数据指定要移除的所述一个或多个交易。
5.一种在区块链网络中传播区块解的计算机实现的方法,包括:
构建候选区块,所述候选区块包含交易有序列表;
将所述候选区块提供给挖矿单元,以搜索工作量证明;
生成附加消息,所述附加消息指定所述交易有序列表;
将所述附加消息传输到其他挖矿节点;以及
重复地进行以下操作,直到接收到区块解的通知为止:
将附加交易添加到所述候选区块中的所述交易有序列表,以产生所述候选区块的新版本,
将所述候选区块的新版本提供给所述挖矿单元中的至少一个挖矿单元,
生成另外的附加消息,所述另外的附加消息指定所述附加交易,每个另外的附加消息具有连续的序列号,以及
将所述另外的附加消息传输到所述其他挖矿节点。
6.根据权利要求5所述的方法,其中,从所述挖矿单元中的一个挖矿单元接收所述区块解的通知,其中,所述通知指示所述候选区块的版本,并且其中,所述方法还包括:确定同步数据,并将所述同步数据和所述区块解发送到所述其他挖矿节点。
7.根据权利要求6所述的方法,其中,所述同步数据包括对应于所述候选区块的版本的附加消息序列号。
8.根据权利要求6所述的方法,其中,所述同步数据包括标识一个或多个交易标识符的一个或多个删除指令。
9.根据权利要求8所述的方法,其中,所述一个或多个删除指令标识包括在附加消息中的交易标识符,所述附加消息与所述候选区块的、比所述通知中指定的候选版本更新的版本相关。
10.根据权利要求6至9中任一项所述的方法,其中,发送所述同步数据包括:发送包含所述区块解和所述同步数据的最终消息。
11.根据权利要求5至10中任一项所述的方法,其中,传输所述附加消息和传输所述另外的附加消息发生在挖矿节点之间经认证的连接上。
12.根据权利要求1至11中任一项所述的方法,其中,所述附加消息包括至少一些经压缩的交易标识符。
13.根据权利要求1至12中任一项所述的方法,其中,所述附加消息包括另一个挖矿节点的交易标识符列表的至少一个索引。
14.一种用于在区块链网络中传播区块解的计算装置,所述计算装置包括:
一个或多个处理器;
存储器;以及
存储在所述存储器中的处理器可执行指令,所述处理器可执行指令在由所述一个或多个处理器执行时,使所述处理器执行根据权利要求1至13中任一项所述的方法。
15.一种计算机可读介质,存储有用于在区块链网络中传播区块解的处理器可执行指令,所述处理器可执行指令包括:在由一个或多个处理器执行时使所述处理器执行根据权利要求1至13中任一项所述的方法的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2019126.8A GB2601540A (en) | 2020-12-04 | 2020-12-04 | Methods and systems for synchronizing a streamed template to a solved block |
GB2019126.8 | 2020-12-04 | ||
PCT/EP2021/083131 WO2022117447A1 (en) | 2020-12-04 | 2021-11-26 | Methods and systems for synchronizing a streamed template to a solved block |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116830107A true CN116830107A (zh) | 2023-09-29 |
Family
ID=74175167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180093060.0A Pending CN116830107A (zh) | 2020-12-04 | 2021-11-26 | 用于将流式模板同步到求解出的区块的方法和系统 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20240031128A1 (zh) |
EP (1) | EP4256457A1 (zh) |
JP (1) | JP2023552775A (zh) |
KR (1) | KR20230117389A (zh) |
CN (1) | CN116830107A (zh) |
GB (1) | GB2601540A (zh) |
WO (1) | WO2022117447A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201711879D0 (en) * | 2017-07-24 | 2017-09-06 | Nchain Holdings Ltd | Computer-implemented system and method |
GB201802347D0 (en) * | 2018-02-13 | 2018-03-28 | Nchain Holdings Ltd | Computer-implemented system and method |
CN113286630B (zh) | 2019-04-11 | 2024-08-02 | 比特乐医疗方案股份有限公司 | 通过射频和磁能对生物结构进行美容治疗的方法和装置 |
GB2582978B (en) | 2019-04-12 | 2022-05-04 | Nchain Holdings Ltd | Methods and devices for propagating blocks in a blockchain network |
-
2020
- 2020-12-04 GB GB2019126.8A patent/GB2601540A/en active Pending
-
2021
- 2021-11-26 JP JP2023534143A patent/JP2023552775A/ja active Pending
- 2021-11-26 CN CN202180093060.0A patent/CN116830107A/zh active Pending
- 2021-11-26 WO PCT/EP2021/083131 patent/WO2022117447A1/en active Application Filing
- 2021-11-26 US US18/265,228 patent/US20240031128A1/en active Pending
- 2021-11-26 EP EP21820234.9A patent/EP4256457A1/en active Pending
- 2021-11-26 KR KR1020237022158A patent/KR20230117389A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
GB202019126D0 (en) | 2021-01-20 |
GB2601540A (en) | 2022-06-08 |
WO2022117447A1 (en) | 2022-06-09 |
EP4256457A1 (en) | 2023-10-11 |
JP2023552775A (ja) | 2023-12-19 |
US20240031128A1 (en) | 2024-01-25 |
KR20230117389A (ko) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3693886B1 (en) | Optimizations for verification of interactions system and method | |
CN110175840B (zh) | 联盟链中实现轻钱包机制的方法、客户端、联盟链及系统 | |
US20220156735A1 (en) | Methods and devices for propagating blocks in a blockchain network | |
WO2019032891A1 (en) | SYSTEM AND METHOD FOR VERIFYING INTERACTIONS | |
WO2021108258A1 (en) | Optimizations for verification of interactions system and method using probability density functions | |
Marsalek et al. | Tackling data inefficiency: Compressing the bitcoin blockchain | |
CN116918298A (zh) | 用于具有交叉引用的流式区块模板的方法和系统 | |
US20230162186A1 (en) | Block propagation with poisoned transactions in a blockchain network | |
CN116830107A (zh) | 用于将流式模板同步到求解出的区块的方法和系统 | |
CN116848529A (zh) | 用于压缩交易标识符的方法和系统 | |
US20240223386A1 (en) | Blockchain system with improved throughput by splitting blocks, and its computer program | |
Marsalek et al. | Compressing the Bitcoin blockchain using incremental snapshots | |
CN116723201A (zh) | 一种基于快照和数据转储的区块链优化方法 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40095102 Country of ref document: HK |