CN117716365A - 使用区块链形成对等连接 - Google Patents
使用区块链形成对等连接 Download PDFInfo
- Publication number
- CN117716365A CN117716365A CN202280052386.3A CN202280052386A CN117716365A CN 117716365 A CN117716365 A CN 117716365A CN 202280052386 A CN202280052386 A CN 202280052386A CN 117716365 A CN117716365 A CN 117716365A
- Authority
- CN
- China
- Prior art keywords
- node
- blockchain
- transaction
- network
- public key
- 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 claims abstract description 124
- 230000004044 response Effects 0.000 claims abstract description 17
- 230000006870 function Effects 0.000 claims description 33
- 238000012545 processing Methods 0.000 claims description 18
- 230000006854 communication Effects 0.000 claims description 16
- 238000004891 communication Methods 0.000 claims description 15
- 230000001419 dependent effect Effects 0.000 claims description 7
- 230000006399 behavior Effects 0.000 claims description 6
- 238000012417 linear regression Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 2
- 230000000977 initiatory effect Effects 0.000 claims description 2
- 238000013515 script Methods 0.000 description 77
- 230000009471 action Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 6
- 238000005065 mining Methods 0.000 description 5
- 230000001902 propagating effect Effects 0.000 description 5
- 238000003860 storage Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000000644 propagated effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000005304 joining Methods 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000005284 excitation Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- COCAUCFPFHUGAA-MGNBDDOMSA-N n-[3-[(1s,7s)-5-amino-4-thia-6-azabicyclo[5.1.0]oct-5-en-7-yl]-4-fluorophenyl]-5-chloropyridine-2-carboxamide Chemical compound C=1C=C(F)C([C@@]23N=C(SCC[C@@H]2C3)N)=CC=1NC(=O)C1=CC=C(Cl)C=N1 COCAUCFPFHUGAA-MGNBDDOMSA-N 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种使用区块链在P2P网络的P2P节点之间形成连接的计算机实现的方法,其中每个P2P节点与相应公钥相关联,并且其中所述方法包括:获取与所述P2P节点中的第二P2P节点相关联的相应公钥;生成第一区块链事务,所述第一区块链事务包括用与所述第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,锁定到所述第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址;以及使所述第一区块链事务提交给区块链网络以记录在所述区块链上,其中所述第二P2P节点被配置为响应于所述第一区块链事务记录在所述区块链上而与所述P2P网络上的所述第一P2P节点连接。
Description
技术领域
本公开涉及使用区块链在对等(peer-to-peer,P2P)网络的P2P节点之间形成连接的方法。该方法使得能够证明P2P节点之间的连接。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。提交给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的层级附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“矿工”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务插入到区块模板中,这些事务尝试为该区块模板标识有效的工作证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
对等(P2P)网络已成为互联网通信和信息共享发展的推动力之一。特别是自2009年以来,区块链网络已成为P2P网络服务的密码学突破口。BitTorrent网络、Kazaa或Gnutella等领先文件共享服务都是其他知名的P2P网络。
P2P网络节点(“P2P节点”)经常可能难以加入P2P网络,即,与P2P网络的其他P2P节点形成连接。例如,首次加入P2P网络的P2P节点可能难以形成连接,因为其他P2P节点不知道新加入的P2P节点。这意味着现有的P2P节点可能不会与新加入的P2P节点进行通信(例如,共享数据)。这可能导致效率低下,因为新加入的P2P节点可能会提供更高效的路径来向其他P2P节点传输数据。因此,希望使P2P节点能够向其他P2P节点标识自己,以便能够在P2P节点之间形成连接,类似地,使P2P节点能够标识网络的其他P2P节点。
根据本文公开的一个方面,提供了一种计算机实现的方法,用于使用区块链在对等(peer-to-peer,P2P)网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,并且其中所述方法由所述P2P节点中的第一P2P节点执行、并且包括:获取与所述多个P2P节点中的第二P2P节点相关联的相应公钥;生成第一区块链事务,其中所述第一区块链事务包括i)用与所述第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,ii)锁定到所述第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址;以及,使所述第一区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上,其中所述第二P2P节点被配置为响应于所述第一区块链事务记录在所述区块链上而与所述P2P网络上的所述第一P2P节点连接。
根据本文公开的另一方面,提供了一种计算机实现的方法,用于使用区块链在对等(P2P)网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,其中所述区块链包括第一区块链事务,其中所述第一区块链事务包括i)用与第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,ii)锁定到第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址,并且其中所述方法由所述P2P节点中的第二P2P节点执行、并且包括:确定所述区块链包括所述第一区块链事务;以及,响应于所述确定,与所述P2P网络上的所述第一P2P节点连接。
本公开利用区块链来使P2P节点能够向其他P2P节点标识自己,并发信号通知(signal)可以建立或已建立P2P节点之间的连接。每个P2P节点具有一个公钥(例如,认证公钥)。第一P2P节点(例如,首次加入P2P网络的节点)向第二P2P节点(例如,P2P网络的现有节点)发送区块链事务,或者更确切地说,例如使用支付到公钥哈希(pay-to-public-key-hash,P2PKH)输出将事务的输出锁定到第二节点的公钥。用与第一P2P节点的公钥相对应(即,可验证)的签名进行签名的事务包括P2P网络的网络地址。该事务提醒第二P2P节点,第一P2P节点可用作具有事务中包括的网络地址的P2P网络上的对等方(即,待要与其形成连接的)。然后,第二P2P节点可以在P2P网络上与第一P2P节点形成连接。在一些示例中,与节点形成连接可以包括将该节点添加到可用于与之进行通信(例如,将数据路由到该节点或通过该节点路由数据)的对等方列表中。
区块链的使用使第一P2P节点能够通过向公钥发送事务来连接到具有该公钥的任何其他P2P节点。随着P2P节点能够连接到更多的节点,P2P网络的连接性和可扩展性得到提高。如果要将数据从一个P2P节点传输到另一P2P节点,这一点特别有用,因为网络中的P2P节点越多,意味着节点之间的可用路径就越多。此外,P2P网络上的节点之间的连接由于记录在区块链上而公开可用,这意味着其他P2P节点可以确定哪些节点连接到哪些其他节点,从而使用特定路径将数据路由到端节点。换句话说,P2P网络的拓扑结构放置在区块链上,由P2P节点通过数字签名加以证明。
应当注意的是,本文使用的对“P2P网络”的任何引用应理解为指除区块链网络之外的P2P网络,例如通用P2P计算机网络。对P2P节点的任何引用应理解为指P2P网络的节点。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于处理事务的一些节点软件的示意性框图;
图5示意性地示出了P2P网络与区块链网络交互的示例;
图6示意性地示出了用于提醒第二节点与第一节点的连接可用的示例性事务;
图7示意性地示出了用于提醒第二节点与第一节点的连接可用并详细说明第一节点的专门性的示例性事务;
图8示意性地示出了用于提醒第二节点与第一节点的连接可用的另一示例性事务;
图9示意性地示出了用于提醒第二节点与第一节点的连接不可用的示例性事务;
图10示意性地示出了第二节点用于终止与第一节点的连接的示例性事务;
图11示意性地示出了用于更新第一节点的专门性的示例性事务;
图12示意性地示出了P2P网络与区块链网络交互的另一示例;
图13是示出逼近点集的线性回归模型的输出的曲线图;
图14是激励节点接受来自另一节点的连接的示例性历史事务;
图15是激励第二节点接受来自第一节点的连接的示例性事务。
具体实施方式
1.示例性系统概述
图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,该数据字段可指向先前事务。
2.基于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赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
3.侧信道
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
4.客户端软件
图3A示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(UI)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,通过侧信道301接收和/或发送事务和/或其他数据,和/或发送事务至一个或更多个节点104以通过区块链网络106传播。
该UI层402被配置为通过相应用户的计算机设备102的用户输入/输出(I/O)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或显示多个屏(触摸或非触摸屏)、提供音频输出的一个或更多个扬声器、和/或提供触觉输出的一个或更多个触觉输出设备等。用户输入方式可包括例如一个或更多个触摸屏的输入阵列(可与用于输出方式的那个/那些相同或不同);一个或更多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或更多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或更多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或更多个机械按钮、开关或控制杆等。
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或更多个不同应用程序组成的一套程序中实现,例如一个应用程序作为另一个应用程序的插件或经由API(应用程序编程接口)进行接口。比如,事务引擎401的功能可以在单独的应用程序中实现,而不是在UI层402中实现,或者诸如事务引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除部分或全部描述的功能可以在比如操作系统层实现。在本文任何位置引用单个或给定应用程序105或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
图3B给出了用户界面(UI)500的示例的模型,该UI可由客户端应用程序105a的UI层402在爱丽丝的设备102a上呈现。应当理解的是,类似的UI可以由客户端105b在鲍勃的设备102b或任何其他方的设备上呈现。
通过图示的方式,图3B从爱丽丝的角度示出了UI 500。该UI 500可包括一个或更多个UI元素501、502、503,该一个或更多个UI元素通过用户输出方式呈现为不同的UI元素。
例如,UI元素可包括一个或更多个用户可选择的元素501,这些元素可以是屏幕上的不同按钮、菜单中的不同选项或者诸如此类。用户输入方式被设置成使用户103(在这种情况下为爱丽丝103a)能够选择或以其它方式操作其中一个选项,诸如通过点击或触摸屏幕上的UI元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。
替代地或附加地,UI元素可包括一个或更多个数据输入字段502。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
替代地或附加地,UI元素可包括向用户输出信息的一个或更多个信息元素503。例如,这/这些可以在屏幕上呈现或可听见。
应当理解的是,呈现各种UI元素、选择选项和输入数据的特定方式并不重要。这些UI元素的功能稍后将进行更详细地讨论。还应当理解的是,图3中示出的UI 500只是一个图示模型,在实践中,它可包括一个或更多个进一步的UI元素,为了简洁起见,未对其进行说明。
5.节点软件
图4示出了在基于UTXO或基于输出的模型的示例中,在网络106的每个区块链节点104上运行的节点软件450的示例。应当注意的是,另一实体可以运行节点软件450,而不被分类为网络106上的节点104,即,不执行节点104所需的动作。节点软件450可以包含但不限于协议引擎451、脚本引擎452、堆栈453、应用级决策引擎454以及一个或多个区块链相关功能模块455的集合。每个节点104可以运行节点软件,该节点软件包含但不限于以下所有三个:共识模块455C(例如,工作证明)、传播模块455P和存储模块455S(例如,数据库)。协议引擎401通常被配置为识别事务152的不同字段,并根据节点协议处理此类字段。当接收到具有指向另一先前事务152i(Txm-1)的输出(例如,UTXO)的输入的事务152j(Txj)时,协议引擎451标识Txi中的解锁脚本并将其传递给脚本引擎452。协议引擎451还基于Txj的输入中的指针来标识和检索Txi。Txi可以在区块链150上发布,在这种情况下,协议引擎可以从存储在节点104处的区块链150的区块151的副本中检索Txi。或者,Txi还可以在区块链150上发布。在这种情况下,协议引擎451可以从节点104维护的未发布有序事务集154中检索Txi。无论采用哪种方式,脚本引擎451都会标识Txi的引用输出中的锁定脚本,并将其传递给脚本引擎452。
因此,脚本引擎452具有Txi的锁定脚本和来自Txi的相应输入的解锁脚本。例如,在图2中示出了事务标记的Tx0和Tx1,但是同样的事务也可以应用于任何事务对。如前所述,脚本引擎452一起运行两个脚本,这将包括根据所使用的基于堆栈的脚本语言(例如脚本)将数据放置到堆栈453上和从堆栈453检索数据。
通过同时运行脚本,脚本引擎452确定解锁脚本是否满足锁定脚本中定义的一个或多个标准,即解锁脚本是否对包括锁定脚本的输出进行解锁?脚本引擎452将该确定的结果返回给协议引擎451。如果脚本引擎452确定解锁脚本确实满足在相应的锁定脚本中指定的一个或多个标准,则返回结果“TRUE”。否则,返回结果“FALSE”。
在基于输出的模型中,来自脚本引擎452的结果“TRUE”是事务有效性的条件之一。通常,还必须满足由协议引擎451评估的一个或多个进一步协议级条件;例如,Txi的输入中所指定的数字资产的总数额不超过其输出中指向的总数额,并且Txi的指向输出尚未被另一有效事务花费。协议引擎451评估来自脚本引擎452的结果以及一个或多个协议级条件,并且只有当它们都为TRUE时,协议引擎才核实事务Txj有效。协议引擎451将事务是否有效的指示输出到应用级决策引擎454。只有在Txj确实有效的条件下,决策引擎454才可以选择同时控制共识模块455C和传播模块455P,以执行其就Txi.的相应区块链相关功能。这包括共识模块455C,向节点的相应有序事务集154添加Txj,用于并入区块151中;以及传播模块455P,将Txi转发到网络106中的另一个区块链节点104。可选地,在实施例中,应用级决策引擎454可以在触发这些函数中的一个或两个函数之前应用一个或多个附加条件。例如,决策引擎可以只选择在事务有效且预留足够事务费用的条件下发布事务。
此外,还应当注意的是,在本文中,术语“TRUE”和“FALSE”不一定限于返回仅以单个二进制数(位)形式表示的结果,尽管这确实是一种可能的实现方式。更通俗地说,“TRUE”可以指指示成功或肯定结果的任何状态,而“FALSE”可以指指示不成功或不肯定结果的任何状态。例如,在基于账户的模型中,可以对签名的隐式协议级核实和智能合约的附加肯定输出的组合来指示结果为“TRUE”(如果两个单独的结果均为TRUE,则认为总体结果为TRUE)。
6.P2P网络连接
图5示出了可以用于实现本发明的实施例的示例性系统。该系统包括对等(P2P)网络500和区块链网络106。P2P网络500包括多个节点,这些节点在本文中称为P2P节点。例如,P2P网络包括第一P2P节点501a、第二P2P节点501b,等等。虽然图5中仅示出了五个P2P节点501,但应当理解的是,P2P网络500通常可以具有任意数量的P2P节点501。应当注意的是,本文使用的“第一”、“第二”等仅用作任意标签,并不一定意味着顺序,除非上下文另有要求。技术人员将熟悉P2P网络的概念,即分布式网络,其中对等方在网络中是享有同等特权和同等能力的参与者,除了说明P2P网络具有网络地址之外,不再对P2P网络500本身进行详细描述。网络地址可以采用任何适当的形式。例如,网络地址可以是IP地址或域名。网络地址可以是整个P2P网络的地址(或标识符),或者每个P2P节点在网络上可以具有一个地址。P2P网络500可以具有一个或多个用途或应用。例如,P2P网络可以是内容或文件共享网络,或通信(例如,视频通话)网络、云计算网络、远程桌面网络等。
每个P2P节点501运行被配置为执行下文所述的由P2P节点501执行的动作的相应计算设备。在一些实施例中,每个P2P节点501可以被配置为执行结合图1至图3B描述的由爱丽丝103a和/或鲍勃103b执行的动作中的部分或全部动作。每个P2P节点501具有相应公钥,即,可以访问对应私钥。
如图5所示,若干P2P节点501具有现有的连接,这些连接由连接P2P节点501的实线示出。例如,图中示出第三P2P节点501c连接到第四P2P节点501d和第五P2P节点501e。第二P2P节点501b连接到第四P2P节点501d。图中还示出了更多连接。图中还示出了第一P2P节点想要形成的连接,这些连接由将第一P2P节点501a连接到其他P2P节点的虚线示出。例如,第一P2P节点501a想要连接到第二P2P节点501b和第三P2P节点501c,例如,因为这些节点最靠近第一P2P节点501a。此处的“最靠近”可以是地理术语或其他术语。
为了与第二P2P节点501b连接,第一P2P节点501a获取与第二P2P节点501b相关联的公钥。第一P2P节点501a可以从存储器、可公开访问资源(例如,网页或区块链)、可信机构或另一P2P节点501获取公钥。又如,第一P2P节点501a可以通过查询域名系统(Domain NameSystem,DNS)服务(例如,使用P2P网络地址)来获取第二P2P节点的公钥。
第一P2P节点501a被配置为生成区块链事务(称为第一事务)。第一事务包括锁定到第二节点公钥的第一输出。例如,输出可以是P2PKH输出。第一输出用于提醒第二P2P节点501b,P2P正在试图形成连接。例如,第二P2P节点501b可以运行钱包应用程序,该应用程序监控区块链,以获取锁定到第二P2P节点的公钥的输出。技术人员将熟悉标识发送到公钥的“付款”的其他方式。第一事务还包括P2P网络地址,该网络地址用于标识第一P2P节点501a想要连接到第二P2P节点501b的P2P网络。该网络地址可以作为第一事务的第一输出的一部分或第二输出包括在内。第二输出可以是不可花费输出和/或OP_RETURN输出。用可以使用第一P2P节点的公钥来验证的签名对第一事务进行签名。这使得第二P2P节点501b能够确定哪个P2P节点501正在试图形成连接。
第一P2P节点501a向区块链网络106提交第一事务,或替代地向中间节点提交第一事务,该中间节点随后向区块链网络106提交第一事务。
第二P2P节点501b被配置为确定第一区块链事务已提交给区块链150(或记录在其上)。如上所述,这可以由第二P2P节点501b运行的钱包应用程序来执行。或者,第二P2P节点501可以手动扫描区块链150以查找输出锁定到第二P2P节点的公钥的事务。又如,服务提供者可以代表第二P2P节点501b监控区块链150,并在标识第一事务时通知第二P2P节点501b。响应于检测到或以其他方式标识第一事务的存在,第二P2P节点501b被配置为与第一P2P节点501a连接。与第一P2P节点501a连接可能涉及第二P2P节点501b将第一P2P节点501a添加到第二P2P节点501b将在P2P网络500上与之进行通信的节点列表中。此处,与第一P2P节点501a进行通信是指接受来自第一P2P节点501b的传入数据并向其发送传出数据。附加地或替代地,与第一P2P节点501连接可能涉及主动与第一P2P节点501a进行通信,即向第一P2P节点501a发送数据。
第一事务不仅有利于第一P2P节点501a和第二P2P节点501b,而且也有利于整个P2P网络500。第一事务允许其他节点501确定第一P2P节点501a和第二P2P节点501b连接。换句话说,在看到记录在区块链150上的第一事务后,P2P网络500的其他节点知道它们可以分别经由第二P2P节点或第一P2P节点与第一P2P节点或第二P2P节点进行通信。这提高了P2P网络500的连接性,因为节点501知道到其他节点501的更多连接和更多路径。
图6示出了用于发信号通知第一P2P节点501a与第二P2P节点501b之间的连接的第一事务的示例。第一P2P节点501a的签名和公钥在事务的解锁脚本中示出。在该示例中,第一输出锁定到第二P2P节点501b的公钥,不同的第二输出包括P2P网络500的网络地址。如该示例所示,第一事务可以包括第一P2P节点501a的标识符。该标识符唯一地标识网络上的第一P2P节点501a,并且可以由认证机构(或P2P网络500信任的另一种形式的机构)认证。该标识符可以映射到第一P2P节点的公钥,从而使第二P2P节点501b能够确信它确实是生成第一事务的第一P2P节点501a。该映射可以是事先已知的,或者存储在可公开访问资源(例如,网页或区块链)中。该标识符用于建立对第一P2P节点的身份的信任。该标识符可以是包括第一P2P节点的公钥(可能还有关于其所有者的信息)的证书。优选地,该证书不包括第一P2P节点的IP地址,因为这可能使第一P2P节点的计算机受到攻击,因为IP地址将在区块链上公开。
如上所述,第二P2P节点的公钥可以从DNS服务中获取。响应于查询DNS服务,第一P2P节点501a可以接收第二P2P节点501b的公钥和互联网协议(internet protocol,IP)地址。第一P2P节点501a可以基于IP地址选择连接到第二P2P节点501b。应当注意的是,第二P2P节点的IP地址可以通过替代方式获取,例如,可以由已经与第一P2P节点501a和第二P2P节点501b建立连接的不同节点501提供。
在生成第一事务之前,第一P2P节点501a可以使用第二P2P节点501b的IP地址来执行与第一P2P节点501b的互联网握手(例如,TCP三次握手)。这使得第一P2P节点501a能够建立对第二P2P节点的身份的信任。第二P2P节点501b可以向第一P2P节点501a发送其用与第二P2P节点的公钥相对应的签名进行签名的IP地址。然后,第一P2P节点501a可以使用第二P2P节点的公钥来验证该签名。在这些示例中,当且仅当签名得到验证时,第一P2P节点501a才会向区块链网络106提交第一事务。
第一P2P节点501a可以使用第一事务向第二P2P节点501b发信号通知其专门性(例如,能力、功能、属性等)。也就是说,第一P2P节点501a可能能够在P2P网络500上执行并非所有节点都能够执行的某些动作,或者第一P2P节点501b可能能够执行某些比其他动作更好的动作,或者能够比其他节点更好地执行某些动作。专门性的示例包括网格计算、挖掘、DNS节点、可信机构节点、文件共享等能力。在一些示例中,专门性可以是良好带宽、连接性、互联网连接、存储等属性。此处,“良好”可以理解为优于网络节点501的平均水平。可能存在P2P节点501的一个或多个子集,每个子集具有至少一个共同的专门性。第一事务可以包括一个或多个标志,每个标志指示相应专门性。这提高了P2P网络500的效率,因为第二P2P节点501b知道是否基于第一P2P节点的专门性向第一P2P节点501a发送某些类型的数据或请求。
图7示出了包括专门性标志的第一事务的示例。该专门性标志可以包括在第一输出或第二输出中。
可选地,除了锁定到第二P2P节点的公钥的第一输出之外,第一事务还可以包括另一可花费输出,该输出包括至少两个替代锁定条件。该输出称为第三输出,但它不需要出现在输出列表的第三位。作为第一锁定条件,第三输出可以锁定到第一P2P节点501a的公钥。作为第二锁定条件,第三输出可以锁定到第二P2P节点501b的公钥。这些公钥可以与如上所述的公钥相同或不同。换句话说,第一P2P节点501a和/或第二P2P节点501b可以具有多个公钥。在这些示例中,第二P2P节点501b将未花费的第三输出解释为第一P2P节点501a与第二P2P节点501b之间的连接可用(即,未终止)。当第三输出花费时,连接被解释为连接终止,例如,因为第一节点501a已离线。在看到第三输出已花费后,第二P2P节点501b可以与第一P2P节点501a断开连接。
例如,在第一P2P节点501a无法再与第二P2P节点501b保持连接的情况下,第一P2P节点501a可以生成花费第三输出的第二事务。第二事务包括引用第一事务的第三输出的输入,并且包括与第三输出锁定到其上的第一P2P节点的公钥相对应的签名。图9示出了第二事务的示例。
替代地,例如,在第二P2P节点501b无法再与第一P2P节点501a保持连接,或第一P2P节点501a采取了恶意行为或违反了P2P网络的策略,或被黑客攻击等情况下,第二P2P节点501b可以生成花费第三输出的第二事务。至少从第二P2P节点501b的角度看,第一P2P节点501a处于离线状态,但在一些示例中可以与其他节点(例如,第三P2P节点501c)保持活动连接。第二事务的第三输出的花费向网络的其他节点发出信号,表明由于第一P2P节点501a没有正确遵循网络协议,因此不建议经由第二P2P节点501b与第一P2P节点501a进行通信,或者表明根本不建议与第一P2P节点501a进行通信。第二事务包括引用第一事务的第三输出的输入,并且包括与第三输出锁定到其上的第一P2P节点的公钥相对应的签名。
在一些示例中,如图8所示,第三输出的第二锁定条件(出现在图8的输出列表中的第二位)可以包括哈希值,为了解锁第三输出,花费第三输出的输入必须包括哈希值的原像。该原像可以是质询(challenge),其是第二P2P节点501b为了解锁第三输出而必须获取的。例如,该质询可以从可信机构获取。图10示出了第二P2P节点501b生成的包括质询数据的第二事务的示例。
图11示出了可以用于更新第一P2P节点的专门性,或者更确切地说,用于将更新后的专门性通知第二P2P节点的事务的示例。
虽然以上描述侧重于第一P2P节点501a与第二P2P节点501b之间的交互,但是第一P2P节点501a可以对一个或多个附加P2P节点501执行等效动作。例如,在图5中,第一P2P节点501a通过获取第三P2P节点的公钥并生成包括锁定到该公钥的输出的事务来与第三P2P节点501c连接。该事务还包括P2P网络地址。
第一P2P节点501a还被配置为基于记录在区块链150上的事务(例如,具有由第四P2P节点501d进行签名的输入以及锁定到第五P2P节点501e的公钥的输出的事务)来确定(即,标识)其他P2P节点(例如,第四P2P节点501d和第五P2P节点501e)之间的连接。第一P2P节点501a可以使用标识的连接将数据等路由到特定P2P节点501。例如,以图5为例,连接到第二P2P节点501b后,数据可以经由第二P2P节点501b和第四P2P节点501d路由到第五P2P节点501e。
在一些示例中,P2P节点可以使用第一类型的私钥(例如,RSA)来对P2P网络500上的消息进行签名,该第一类型的私钥不能用于对区块链网络106上的事务进行签名,而是需要第二类型的私钥(例如,ECDSA)。P2P节点501可以通过对第一类型的相应私钥进行哈希处理(使用可以相同或不同的一个或多个哈希函数,例如,双重SHA256)从第一类型的相应私钥转换为第二类型的相应私钥。
7.P2P覆盖模型
现在将提供所述实施例的具体示例。本节公开了P2P网络拓扑结构证明的激励机制。为了增加对P2P网络的激励,节点可以通过区块链网络上的相关事务付款来证明区块链上的数据。这些付款由参与通信过程的节点接收。本节中将详细介绍节点如何证明加入,如何在P2P网络上更新其规范,以及如何在区块链上保留其相邻节点的证明。
该解决方案为节点之间的所有类型的数据传输增加了经济激励。此外,该解决方案具有灵活性,因为P2P网络节点可以保留其原P2P协议通信,并在此基础上添加传输奖励的另一通信层。将根据具体情况用Ni来标记P2P网络的节点,其中i是正整数或索引集。
7.1网络设置
本节中将展示节点N1如何安全地加入P2P网络,并提供足够的激励以被接受。此外,每次节点N1想要连接到P2P网络中的任何其他节点时,都应遵循下面描述的相同程序。这确保了区块链将存储P2P网络的完整网络拓扑结构。
加入过程如下:假设新节点N1想要加入地址为NETADDR的网络。为了在网络上找到N1可以连接的可用对等节点,可以通过向以下形式的链接发送类似GET的请求来查询DNS服务:protocol://mesh.networks/chosen_network。
检索到的数据采用JSON格式,包含所列节点的互联网地址和椭圆曲线公钥(例如,以比特币格式编码)。条目示例如下:
{
address:“192.168.0.1”
pkey:
“0x02f54ba86dclccb5bed0224d23f01ed87e4a443c47fc690d7797a13d41d2340e1a”}
基于接收的可用对等节点列表,N1使用上述条目示例所示的互联网地址选择连接的对等节点N2。此时,两个节点N1和N2遵循如下所述的协议:
1.N1从JSON条目中获取N2的互联网地址。
2.N1开始与N2的互联网握手。此类握手依赖于网络。例如,两个节点可以选择如RFC793中所述的TCP三次握手。
3.N2发送其用JSON条目公钥进行签名的互联网地址。
4.N1通过使用JSON条目中的公钥并对照N2的互联网地址检查签名来核实N2的身份。
5.N1在区块链上创建事务,其两个输出如图6所示。第一输出是N2可赎回的P2PKH锁定脚本。第二输出是包括唯一标识符以及加入的网络地址NETADDR的锁定脚本。标识符/>由认证机构发布,其目的是以可信方式标识网络节点N1的身份。
6.一旦N2看到事务TxIDnet-add在区块链上得到确认,就会将N1添加到相邻对等节点列表中。
步骤3和步骤4通过执行欺骗攻击并使用N2的互联网地址来防止其他节点作弊。N1通过步骤2与使用N2的互联网地址的节点进行通信。可以确定该节点是N2,因为N2是唯一可以使用JSON条目中可用的公钥对其互联网地址进行签名的节点。因此,步骤3和步骤4启用公钥基础设施。
需要注意的一个问题是N2是否是不诚实节点,并且不将N1添加到其相邻节点列表中。展示了N1如何安全地加入网络,并确保其不会被N2欺骗。每个节点都有指定的身份证书CA,该证书反映了可信机构发布的节点身份。节点N1可以联系颁发证书的机构,证明自己被欺骗。此时,可信机构可以发布标志,让与节点N2协作的其他P2P节点知道该节点不是可信节点。
7.2网络公平性架构
除了为节点N1提供与可信机构进行交叉检查并在受到欺骗时报告节点N2的可能性之外,还可以达成共识,进一步保护P2P网络免受恶意行为者的侵害。这种共识依赖于大多数节点的诚实行为和不断的激励。
假设节点N2连接到节点N2,1,......,N2,n。使N2保持诚实,符合每个相邻节点的利益。详细介绍了两种此类场景,在这两种场景中,保持N2诚实,符合节点N2,1,......,N2,n的利益:
·如果N2不诚实并且没有向其连接添加新节点N1,则向N2传播请求的节点可能会因向不诚实节点发送请求而失去奖励。
·如果N2没有在节点N1离线时正确更新网络,则节点N2,1,……,N2,n可以在区块链上看到N2正在向节点N1传播请求。这意味着他们要为额外的节点支付N2。
在上述两种场景中的每种场景中,相邻节点可以通过在下一次请求传播中提供更低的奖励来惩罚N2,或者可以使N2完全离线。
我们注意到,这种共识减轻了N1检查N2是否诚实的过程,而且还为网络中的现有节点提供了激励,以确保其相邻节点的行为诚实。同时还强调,如果节点N1有责任对连接到N2的节点进行进一步检查,则节点N2可能会创建虚假身份,从而欺骗节点N1,实现女巫攻击(Sybil attack)。
7.3身份链接
就使用RSA密钥的P2P网络而言,确定其身份的一种方法是将其RSA私钥kRSA链接到将(在比特币网络上)用于对事务进行签名的ECDSA私钥kECDSA。这可以通过下式来实现:
kECDSA=H1(H0(kRSA))
其中,H1和H0是两个哈希函数,不一定不同。则ECDSA公钥定义为:
PECDSA=kECDSA·G
如果节点N1持有在网络中使用的若干RSA私钥,则密钥的索引可以包括在ECDSA私钥的生成中,如下所示:
kECDSA=H1(H0(kRSA||index))
为了证明其RSA密钥与ECDSA密钥之间的链接,P2P节点可以使用RSA数字签名密码系统用其RSA私钥对其ECDSA公钥进行签名。
7.4节点专门化
网络优化的一个方面是增加节点专门化(specialisation),其中每个节点可以专门执行特定功能。可以考虑若干此类专门化,例如:网格计算、挖掘、DNS节点、可信机构节点、文件共享等。当然,节点可以加入P2P网络并接受任何类型的请求,这将被归类为通用节点。如果专门化存在,就会产生如下进一步所示的将P2P网络模块化的网络结构。
图7示出了如何在网络设置阶段通过对网络设置步骤5中的事务TxIDnet-add进行简单修改来实现此类专门化。
专门化标志可以用标准格式表示,例如:
SPEC:={
“role”:[“data”,
“dns”]
}
使用上述SPEC条目的节点告诉网络其专门化是数据共享节点的专门化,并且可以是DNS服务提供节点的一部分。例如,此类专门化可以由现有DNS服务发布,该DNS服务最初帮助节点N1找到所需网络。
7.5网络更新
上一节中介绍了节点N1加入网络并提供激励的程序,从而确保一定程度的公平性。现在展示如何保持网络完整性,其中区块链事务应反映网络结构变化,例如节点离线或改变其专门化,同时保证经济激励。
本节构建了更新程序,节点可以通过该程序更新网络结构,以保持其完整性。实现该过程的一种方法是修改上一节中描述的网络设置协议,使得TxIDnet-add的第二事务输出可花费。如果输出正在花费,则将其解释为节点与P2P网络断开连接。为简洁起见,在这种情况下可以说节点离线。
因此,重点在于了解TxIDnet-add的第二输出如何花费。这一点很重要,因为我们不想给网络提供错误的激励,从而危及网络完整性。
为此,需要生成认证的数据。将该数据称为质询C(例如,随机整数)。C仅为节点N1和发布可信机构所知。在下图中,将哈希函数H固定为与通过操作码OP_SHA256计算的函数相对应。
对图6中给出并在上文详述的网络设置程序步骤5中使用的TxIDnet-add进行了修改。节点可以采用设置协议中图8所示的事务格式来实现本节中介绍的功能。
第二输出中给出的锁定脚本使N1能够向P2P网络发信号通知其离线。为此,N1执行以下步骤:
1.N1创建如图9中给出的事务,提供其签名并花费图8中给出的TxID′net-add的第二输出。
2.N1可以安全地与P2P网络断开连接。
如果N1不诚实并且不执行上述协议使其离线,则N2遵循以下协议:
1.N2从可信机构获取质询C。
2.N2广播图10中的事务,提供其签名并花费图8中给出的TxID′net-add的第二输出。
更新网络时可能出现的场景如下,强调了该方案的激励和安全性:
·N1是诚实节点,在离线时,通过其签名花费事务的第二输出,从而收回资金。这是主要场景,因为N1也有收回资金的经济激励。
·N1是不诚实节点,不会花费TxID′net-add的第二输出来向网络发信号通知其离线。在这种情况下,节点N2可以联系证明N1没有遵循更新共识的可信方。一旦发布的认证机构上线,N2就可以获取以此解锁TxID′net-add的第二输出的质询C,并且随后向网络发信号通知N1离线。
如果N1在离线时重复不更新网络的行为,则N2可以将N1标记为不可信并拒绝节点N1的进一步加入请求。此外,还可以将认证机构标志节点N1标记为不可信,并使发布的身份无效。例如,标记可以通过事务来完成。
最后,展示了N1如何改变其专门化SPEC。为此,N1只需创建如图11中给出的新事务,花费TxID′net-add的第二输出。
总之,我们提出的更新程序通过保持网络结构最新并提供所需经济激励来确保网络完整性。
图12示出了根据所述实施例的示例性P2P覆盖模型。如上所述,P2P网络可以通过节点专门化来实现若干服务。这导致了网络模块化,由此节点承担一定的角色,以使P2P网络通信更高效。
为了实现以下服务,加入P2P网络的每个节点N1需要定义自己的SPEC标志。图12提供了P2P模块化的可视化表示,其中节点提供以下服务:
·DNS服务:SPEC:={“role”:“dns”}
·认证机构服务:SPEC:={“role”:“CA”}
·多方计算(Multiparty computation,MPC)服务:SPEC:={“role”:“MPC”}
由于P2P网络在区块链上持有其结构的证明,因此DNS服务可以提供使网络可搜索的服务(也称为爬虫服务)。通过监控网络结构,爬虫可以掌握当前网络的图形,从而为搜索应用程序提供便利。
8.激励连接
如上所述,为了连接到P2P网络的节点,第一节点501a生成事务,该事务具有锁定到待要进行连接的P2P节点的公钥的输出。也就是说,第一节点501a生成第一事务,第一事务具有锁定到与第二节点501b相关联的公钥的第一输出。在一些实施例中,第一节点501a可以确定待要由第一输出锁定的数字资产数额,以激励第二节点501b形成连接。该数字资产数额可以基于先前的连接请求来确定。先前的连接请求可以是第一节点501a向P2P网络的其他节点发出的请求。附加地或替代地,先前的连接请求可以是不同节点501(即,除第一节点501a之外的节点)向P2P网络的其他节点(例如,第二节点501b)发出的请求。
第一节点501a可以收集记录在区块链150上的多个先前请求事务。这些事务是“请求”,因为一个节点请求另一节点在所述节点之间添加连接。第一节点501a可以通过查询区块链节点104等方式直接从区块链150获取一个或多个事务。附加地或替代地,第一节点501a可以从不同实体(例如,专门的服务提供者)获取一个或多个事务。
每个请求事务由相应P2P节点501提交给区块链,并且具有锁定到相应P2P节点501的相应公钥的输出。每个输出锁定区块链的一定数额的标的数字资产(例如,比特币)。每个请求事务包括P2P网络的网络地址。每个先前请求事务与相应时间戳相关联。时间戳可以采用任何适当的形式。时间戳指示事务提交给区块链网络106或记录在区块链上的时间。例如,时间戳可以是Unixtime。
获取多个先前请求事务后,第一节点501a基于相应输出锁定的相应数字资产数额和相应时间戳来计算回归模型。也就是说,从每个事务中提取包括相应数额和相应时间戳的数据对,并使用这些数据对计算回归模型。该模型可以是线性回归模型。图13示出了示例性模型。然后,对于给定时间戳(例如,与第一节点501a将向区块链网络106提交第一事务的时间相对应的时间戳),第一节点501a使用该回归模型来确定由第一事务的第一输出锁定的目标数额。
图14示出了锁定数额的上一个事务的示例。图15示出了其目标数额锁定到第二节点501的公钥的示例性第一事务。可以看出,图15所示的第一事务与图6所示的事务类似,除了第一输出锁定的目标数额pt′是根据回归模型确定的,而第一输出锁定的数额x可以任意确定。
8.1网络设置定价
本节描述了用于激励连接的所述实施例的具体实现方式。考虑参考图5描述的P2P网络设置。对于要加入网络的节点N1,节点通过以下步骤估算待要发送给节点N2的值:
1.节点N1在区块链事务中搜索节点Ni为网络设置支付的价格。此类事务可通过Txnet-add-Ni(图14)中的事务结构来标识。
2.节点N1构建节点Ni所支付的一组价格每个价格/>都与时间有关,其中,ti是挖掘节点Ni的网络设置事务Txnet-add-Ni的区块的时间戳。
3.给定该组价格后,节点N1会构建线性回归模型,如第2.1节所示(yt设置为pt)。
4.N1计算出当前时间t′的最佳价格pt′为:
pt′=b·t′+a。
5.节点N1使用价格pt′来创建和广播图15中的事务Txnet-add-N1。
应当注意的是,未来可能会提供一种可以代表节点处理该信息的服务,而不是节点N1对事务进行搜索。
9.结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种计算机实现的方法,用于使用区块链在对等(P2P)网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,并且其中所述方法由所述P2P节点中的第一P2P节点执行、并且包括:
获取与所述多个P2P节点中的第二P2P节点相关联的相应公钥;
生成第一区块链事务,其中所述第一区块链事务包括i)第一输入,所述第一输入被签署与所述第一P2P节点的所述相应公钥相对应的签名,ii)第一输出,所述第一输出锁定至所述第二P2P节点的所述相应公钥,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址;以及,
使所述第一区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上,其中所述第二P2P节点被配置为响应于所述第一区块链事务记录在所述区块链上而与所述P2P网络上的所述第一P2P节点连接。
语句2.根据语句1所述的方法,其中所述多个P2P节点中的每个P2P节点与相应标识符相关联,并且其中所述第一区块链事务包括所述第一P2P节点的所述相应标识符。
语句3.根据语句2所述的方法,其中与每个相应P2P节点相关联的所述相应标识符由认证机构(certificate authority)认证。
语句4.根据前述任一项语句所述的方法,其中所述的获取与所述第二P2P节点相关联的所述相应公钥包括:查询包括每个相应P2P节点的所述相应公钥的资源。
资源可以是可公开访问的数据库。
语句5.根据语句4所述的方法,其中所述资源包括域名系统(Domain NameSystem,DNS)服务。
语句6.根据语句4或5所述的方法,其中,对于每个相应P2P节点,所述资源包括与所述相应P2P节点相关联的相应互联网协议(Internet Protocol,IP)地址,并且其中所述的获取与所述第二P2P节点相关联的所述相应公钥包括:获取与所述第二P2P节点相关联的所述相应IP地址。
语句7.根据语句6所述的方法,其中所述方法包括:
使用所述第二P2P节点的所述相应IP地址发起与所述第二P2P节点的互联网握手;
从所述第二P2P节点,获取签署了数字签名的所述第二P2P节点的所述相应IP地址;
使用所述第二P2P节点的所述相应公钥来验证所述数字签名,其中所述的生成所述第一区块链事务以所述数字签名得到验证作为条件。
语句8.根据前述任一项语句所述的方法,其中所述第一P2P节点具有相应RSA密钥,并且其中用于生成与所述第一P2P节点的所述相应公钥相对应的所述签名的所述第一P2P节点的相应私钥是通过使用一个或多个哈希函数对至少所述第一P2P节点的所述相应RSA密钥进行哈希处理来生成的。
这些哈希函数可以不同的或相同的。
语句9.根据语句8所述的方法,其中所述第一P2P节点的所述相应私钥是通过使用至少两个哈希函数对至少所述第一P2P节点的所述相应RSA密钥进行哈希处理来生成的。
语句10.根据前述任一项语句所述的方法,其中所述第一区块链事务包括指示与所述第一P2P节点相关联的相应专门化的一个或多个相应专门化标志。
例如,专门化可以是与第一P2P节点相关联的能力、功能、属性等。
语句11.根据前述任一项语句所述的方法,其中所述第一区块链包括iii)第二输出,并且其中所述第二输出包括所述P2P网络的所述网络地址以及所述第一P2P节点的所述相应标识符。
语句12.根据语句10和11所述的方法,其中所述第一区块链事务的所述第二输出包括所述一个或多个相应专门化标志。
语句13.根据语句1至10中任一项所述的方法,其中所述第一区块链事务的所述第一输出包括所述P2P网络的所述网络地址以及所述第一P2P节点的所述相应标识符。
语句14.根据语句10和13所述的方法,其中所述第一区块链事务的所述第一输出包括所述一个或多个相应专门化标志。
语句15.根据前述任一项语句所述的方法,其中所述第一区块链包括iv)第三输出,其中当与一区块链事务的输入一起执行时,所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的相应签名,并且其中所述第二P2P节点被配置为:响应于成功花费所述第一区块链事务的所述第三输出,而与所述第一P2P节点断开连接。
语句16.根据语句15所述的方法,其中所述第三输出包括质询数据(challengedata)的哈希,并且其中所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的所述签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的所述相应签名,以及所述质询数据。
语句17.根据语句15或16所述的方法,所述方法包括:
生成第二区块链事务,其中所述第二区块链事务包括引用所述第一区块链事务的所述第三输出的输入、并且包括与所述第一P2P节点相关联的所述相应公钥相对应的所述签名;以及,
使所述第二区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上,其中所述第二区块链事务用于向所述第二P2P节点发信号通知(signal)与所述第一P2P节点断开连接。
语句18.根据前述任一项语句所述的方法,所述方法包括:
获取一个或多个相应公钥,每个公钥与所述P2P节点中不同的相应P2P节点相关联;
对于所述一个或多个相应公钥中的每个公钥,生成相应区块链事务,其中所述相应区块链事务包括i)用与所述第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,和ii)锁定到所述不同的相应P2P节点的所述相应公钥的第一输出,并且其中所述相应区块链事务包括所述P2P网络的所述网络地址;以及,
使所述相应区块链事务中的每个相应区块链事务提交给所述区块链网络的一个或多个区块链节点以记录在所述区块链上,其中每个不同的相应P2P节点被配置为响应于所述相应区块链事务记录在所述区块链上而与所述第一P2P节点连接。
语句19.根据前述任一项语句所述的方法,其中所述区块链包括第三区块链事务,所述第三区块链事务包括i)用与第三P2P节点的所述相应公钥相对应的签名进行签名的输入,和ii)锁定到第四P2P节点的所述相应公钥的第一输出,并且其中所述第三区块链事务包括所述P2P网络的所述网络地址,并且其中所述方法包括:
基于所述第三区块链事务确定所述第三P2P节点连接到所述第四P2P节点。
语句20.根据前述任一项语句所述的方法,所述方法包括:
获取多个相应请求事务,每个相应请求事务包括锁定到相应P2P节点的所述相应公钥的相应第一输出,其中所述相应第一输出锁定相应数额的数字资产,其中每个相应请求事务包括所述P2P网络的所述网络地址,并且其中每个相应请求事务与相应时间戳相关联;
基于每个相应请求事务的所述相应数额和相应时间戳来计算回归模型;
使用所述回归模型来确定给定目标时间戳的目标数额,其中所述第一事务的所述第一输出锁定所述数字资产的所述目标数额。
语句21.根据语句20所述的方法,其中所述获取包括从所述区块链获取所述多个相应请求事务中的至少一些相应请求事务。
语句22.根据语句20或21所述的方法,其中所述获取包括从服务提供者接收所述多个相应请求事务中的至少一些相应请求事务。
语句23.根据语句20至22中任一项所述的方法,其中所述回归模型是线性回归模型。
语句24.一种计算机实现的方法,用于使用区块链在对等(P2P)网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,其中所述区块链包括第一区块链事务,其中所述第一区块链事务包括i)签署了与第一P2P节点的所述相应公钥相对应的签名的第一输入,ii)锁定到第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址,并且其中所述方法由所述P2P节点中的第二P2P节点执行、并且包括:
确定所述区块链包括所述第一区块链事务;以及,
响应于所述确定,与所述P2P网络上的所述第一P2P节点连接。
语句25.根据语句24所述的方法,其中所述的与所述P2P网络上的所述第一P2P节点连接包括:将所述第一P2P节点添加到所述第二P2P能够在所述P2P网络上与之进行通信的P2P节点列表中。
语句26.根据语句24或25所述的方法,所述方法包括:
从所述第一P2P节点接收互联网握手;以及,
向所述第一P2P节点,发送签署了与所述第二P2P节点的所述相应公钥相对应的数字签名的所述第二P2P节点的相应IP地址。
语句27.根据语句26所述的方法,其中所述第二P2P节点具有相应RSA密钥,并且其中用于生成与所述第二P2P节点的所述相应公钥相对应的所述签名的所述第二P2P节点的相应私钥是通过使用一个或多个哈希函数对至少所述第二P2P节点的所述相应RSA密钥进行哈希处理来生成的。
语句28.根据语句24或其任何从属语句所述的方法,其中所述第一区块链事务包括一个或多个相应专门化标志,所述一个或多个相应专门化标志用于指示与所述第一P2P节点相关联的相应专门化,并且其中所述方法包括:
基于如所述一个或多个相应专门化标志所指示的与所述第一P2P节点相关联的所述相应专门化来与第一P2P节点进行通信。
语句29.根据语句24或其任何从属语句所述的方法,其中所述第一区块链包括第三输出,其中当与区块链事务的输入一起执行时,所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的相应签名,并且其中所述方法包括:
确定所述第三输出已被成功花费;以及,
响应于所述确定,与所述P2P网络上的所述第一P2P节点断开连接。
语句30.根据语句29所述的方法,其中所述的确定所述第三输出已被成功花费包括:
生成第二区块链事务,其中所述第二区块链事务包括引用所述第一区块链事务的所述第三输出的输入、并包括与所述第二P2P节点相关联的所述相应公钥相对应的所述签名;以及,
使所述第二区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上。
语句31.根据语句30所述的方法,其中所述第三输出包括质询数据的哈希,并且其中所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的所述签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的所述相应签名,以及所述质询数据,并且其中所述方法包括:
获取所述质询数据,其中所述第二区块链事务的所述输入包括所述质询数据。
语句32.根据语句31所述的方法,其中所述质询数据是从认证机构获取的。
语句33.根据语句30或其任何从属语句所述的方法,其中所述的生成所述第二区块链事务是响应于:确定所述第一P2P节点已在所述P2P网络上离线和/或有不诚实行为。
语句34.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至33中任一项所述的方法。
语句35.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至33中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括第一P2P节点和第二P2P节点的动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括第一P2P节点和第二P2P节点的计算机设备。
Claims (35)
1.一种计算机实现的方法,用于使用区块链在对等P2P网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,并且其中所述方法由所述P2P节点中的第一P2P节点执行、并且包括:
获取与所述多个P2P节点中的第二P2P节点相关联的相应公钥;
生成第一区块链事务,其中所述第一区块链事务包括i)用与所述第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,ii)锁定到所述第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址;以及
使所述第一区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上,其中所述第二P2P节点被配置为响应于所述第一区块链事务记录在所述区块链上而与所述P2P网络上的所述第一P2P节点连接。
2.根据权利要求1所述的方法,其中所述多个P2P节点中的每个P2P节点与相应标识符相关联,并且其中所述第一区块链事务包括所述第一P2P节点的所述相应标识符。
3.根据权利要求2所述的方法,其中与每个相应P2P节点相关联的所述相应标识符由认证机构认证。
4.根据前述任一项权利要求所述的方法,其中所述的获取与所述第二P2P节点相关联的所述相应公钥包括:查询包括每个相应P2P节点的所述相应公钥的资源。
5.根据权利要求4所述的方法,其中所述资源包括域名系统DNS服务。
6.根据权利要求4或5所述的方法,其中,对于每个相应P2P节点,所述资源包括与所述相应P2P节点相关联的相应互联网协议IP地址,并且其中所述的获取与所述第二P2P节点相关联的所述相应公钥包括:获取与所述第二P2P节点相关联的所述相应IP地址。
7.根据权利要求6所述的方法,其中所述方法包括:
使用所述第二P2P节点的所述相应IP地址发起与所述第二P2P节点的互联网握手;
从所述第二P2P节点,获取用数字签名进行签名的所述第二P2P节点的所述相应IP地址;
使用所述第二P2P节点的所述相应公钥来验证所述数字签名,其中所述的生成所述第一区块链事务取决于所述数字签名得到验证。
8.根据前述任一项权利要求所述的方法,其中所述第一P2P节点具有相应RSA密钥,并且其中用于生成与所述第一P2P节点的所述相应公钥相对应的所述签名的所述第一P2P节点的相应私钥是通过使用一个或多个哈希函数对至少所述第一P2P节点的所述相应RSA密钥进行哈希处理来生成的。
9.根据权利要求8所述的方法,其中所述第一P2P节点的所述相应私钥是通过使用至少两个哈希函数对至少所述第一P2P节点的所述相应RSA密钥进行哈希处理来生成的。
10.根据前述任一项权利要求所述的方法,其中所述第一区块链事务包括指示与所述第一P2P节点相关联的相应专门化的一个或多个相应专门化标志。
11.根据前述任一项权利要求所述的方法,其中所述第一区块链包括iii)第二输出,并且其中所述第二输出包括所述P2P网络的所述网络地址以及所述第一P2P节点的所述相应标识符。
12.根据权利要求10和11所述的方法,其中所述第一区块链事务的所述第二输出包括所述一个或多个相应专门化标志。
13.根据权利要求1至10中任一项所述的方法,其中所述第一区块链事务的所述第一输出包括所述P2P网络的所述网络地址以及所述第一P2P节点的所述相应标识符。
14.根据权利要求10和13所述的方法,其中所述第一区块链事务的所述第一输出包括所述一个或多个相应专门化标志。
15.根据前述任一项权利要求所述的方法,其中所述第一区块链包括iv)第三输出,其中当与一区块链事务的输入一起执行时,所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的相应签名,并且其中所述第二P2P节点被配置为响应于成功花费所述第一区块链事务的所述第三输出而与所述第一P2P节点断开连接。
16.根据权利要求15所述的方法,其中所述第三输出包括质询数据的哈希,并且其中所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的所述签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的所述相应签名,以及所述质询数据。
17.根据权利要求15或16所述的方法,所述方法包括:
生成第二区块链事务,其中所述第二区块链事务包括引用所述第一区块链事务的所述第三输出的输入、并且包括与所述第一P2P节点相关联的所述相应公钥相对应的所述签名;以及
使所述第二区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上,其中所述第二区块链事务用于向所述第二P2P节点发信号通知与所述第一P2P节点断开连接。
18.根据前述任一项权利要求所述的方法,所述方法包括:
获取一个或多个相应公钥,每个公钥与所述P2P节点中不同的相应P2P节点相关联;
对于所述一个或多个相应公钥中的每个公钥,生成相应区块链事务,其中所述相应区块链事务包括i)用与所述第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,和ii)锁定到所述不同的相应P2P节点的所述相应公钥的第一输出,并且其中所述相应区块链事务包括所述P2P网络的所述网络地址;以及
使所述相应区块链事务中的每个相应区块链事务提交给所述区块链网络的一个或多个区块链节点以记录在所述区块链上,其中每个不同的相应P2P节点被配置为响应于所述相应区块链事务记录在所述区块链上而与所述第一P2P节点连接。
19.根据前述任一项权利要求所述的方法,其中所述区块链包括第三区块链事务,所述第三区块链事务包括i)用与第三P2P节点的所述相应公钥相对应的签名进行签名的输入,和ii)锁定到第四P2P节点的所述相应公钥的第一输出,并且其中所述第三区块链事务包括所述P2P网络的所述网络地址,并且其中所述方法包括:
基于所述第三区块链事务确定所述第三P2P节点连接到所述第四P2P节点。
20.根据前述任一项权利要求所述的方法,所述方法包括:
获取多个相应请求事务,每个相应请求事务包括锁定到相应P2P节点的所述相应公钥的相应第一输出,其中所述相应第一输出锁定相应数额的数字资产,其中每个相应请求事务包括所述P2P网络的所述网络地址,并且其中每个相应请求事务与相应时间戳相关联;
基于每个相应请求事务的所述相应数额和相应时间戳来计算回归模型;
使用所述回归模型来确定给定目标时间戳的目标数额,其中所述第一事务的所述第一输出锁定所述数字资产的所述目标数额。
21.根据权利要求20所述的方法,其中所述获取包括从所述区块链获取所述多个相应请求事务中的至少一些相应请求事务。
22.根据权利要求20或21所述的方法,其中所述获取包括从服务提供者接收所述多个相应请求事务中的至少一些相应请求事务。
23.根据权利要求20至22中任一项所述的方法,其中所述回归模型是线性回归模型。
24.一种计算机实现的方法,用于使用区块链在对等P2P网络的P2P节点之间形成连接,其中所述P2P网络与网络地址相关联并且包括多个P2P节点,其中所述多个P2P节点中的每个P2P节点与相应公钥相关联,其中所述区块链包括第一区块链事务,其中所述第一区块链事务包括i)用与第一P2P节点的所述相应公钥相对应的签名进行签名的第一输入,ii)锁定到第二P2P节点的所述相应公钥的第一输出,并且其中所述第一区块链事务包括所述P2P网络的所述网络地址,并且其中所述方法由所述P2P节点中的第二P2P节点执行、并且包括:
确定所述区块链包括所述第一区块链事务;以及
响应于所述确定,与所述P2P网络上的所述第一P2P节点连接。
25.根据权利要求24所述的方法,其中所述的与所述P2P网络上的所述第一P2P节点连接包括:将所述第一P2P节点添加到所述第二P2P能够在所述P2P网络上与之进行通信的P2P节点列表中。
26.根据权利要求24或25所述的方法,所述方法包括:
从所述第一P2P节点接收互联网握手;以及
向所述第一P2P节点,发送用与所述第二P2P节点的所述相应公钥相对应的数字签名进行签名的所述第二P2P节点的相应IP地址。
27.根据权利要求26所述的方法,其中所述第二P2P节点具有相应RSA密钥,并且其中用于生成与所述第二P2P节点的所述相应公钥相对应的所述签名的所述第二P2P节点的相应私钥是通过使用一个或多个哈希函数对至少所述第二P2P节点的所述相应RSA密钥进行哈希处理来生成的。
28.根据权利要求24或其任何从属权利要求所述的方法,其中所述第一区块链事务包括指示与所述第一P2P节点相关联的相应专门化的一个或多个相应专门化标志,并且其中所述方法包括:
基于如所述一个或多个相应专门化标志所指示的与所述第一P2P节点相关联的所述相应专门化来与第一P2P节点进行通信。
29.根据权利要求24或其任何从属权利要求所述的方法,其中所述第一区块链包括第三输出,其中当与区块链事务的输入一起执行时,所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的相应签名,并且其中所述方法包括:
确定所述第三输出已被成功花费;以及
响应于所述确定,与所述P2P网络上的所述第一P2P节点断开连接。
30.根据权利要求29所述的方法,其中所述的确定所述第三输出已被成功花费包括:
生成第二区块链事务,其中所述第二区块链事务包括引用所述第一区块链事务的所述第三输出的输入、并包括与所述第二P2P节点相关联的所述相应公钥相对应的所述签名;以及
使所述第二区块链事务提交给区块链网络的一个或多个区块链节点以记录在所述区块链上。
31.根据权利要求30所述的方法,其中所述第三输出包括质询数据的哈希,并且其中所述第三输出被配置为要求所述区块链事务的所述输入包括a)与和所述第一P2P节点相关联的相应公钥相对应的所述签名,或b)与和所述第二P2P节点相关联的相应公钥相对应的所述相应签名,以及所述质询数据,并且其中所述方法包括:
获取所述质询数据,其中所述第二区块链事务的所述输入包括所述质询数据。
32.根据权利要求31所述的方法,其中所述质询数据是从认证机构获取的。
33.根据权利要求30或其任何从属权利要求所述的方法,其中所述的生成所述第二区块链事务是响应于:确定所述第一P2P节点已在所述P2P网络上离线和/或有不诚实行为。
34.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至33中任一项所述的方法。
35.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至33中任一项所述的方法。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2110888.1 | 2021-07-29 | ||
GBGB2207632.7A GB202207632D0 (en) | 2022-05-25 | 2022-05-25 | Forming peer-to-peer connections using blockchain |
GB2207632.7 | 2022-05-25 | ||
PCT/EP2022/070495 WO2023006573A1 (en) | 2021-07-29 | 2022-07-21 | Forming peer-to-peer connections using blockchain |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117716365A true CN117716365A (zh) | 2024-03-15 |
Family
ID=82220592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280052386.3A Pending CN117716365A (zh) | 2021-07-29 | 2022-07-21 | 使用区块链形成对等连接 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117716365A (zh) |
GB (1) | GB202207632D0 (zh) |
-
2022
- 2022-05-25 GB GBGB2207632.7A patent/GB202207632D0/en not_active Ceased
- 2022-07-21 CN CN202280052386.3A patent/CN117716365A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202207632D0 (en) | 2022-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115997369A (zh) | 用于在区块链网络中验证数据的方法和装置 | |
CN114008969A (zh) | 包含在区块链中的交易的延展性 | |
CN113994628A (zh) | 通过侧信道流式传输部分数据 | |
CN116157796A (zh) | 警报账户 | |
CN117836771A (zh) | 使用区块链协调对等数据传输 | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN118044151A (zh) | 传播锁定脚本 | |
CN116057920A (zh) | 连接到区块链网络 | |
CN116671061A (zh) | 节点版本控制 | |
CN116745794A (zh) | 区块链相关验证方法和系统 | |
CN115699676A (zh) | 自定义事务脚本 | |
CN117716365A (zh) | 使用区块链形成对等连接 | |
EP4097931A1 (en) | Adapting connections of a layered network | |
CN115136560A (zh) | 分层网络 | |
CN117836772A (zh) | 使用区块链协调对等数据传输 | |
EP4377828A1 (en) | Forming peer-to-peer connections using blockchain | |
GB2614221A (en) | Forming peer-to-peer connections using blockchain | |
CN117337436A (zh) | 多方区块链地址方案 | |
CN117280349A (zh) | 多方区块链地址方案 | |
WO2023227381A1 (en) | Coordinating peer-to-peer data transfer using blockchain | |
CN116249998A (zh) | Quic事务 | |
WO2023208832A1 (en) | Blockchain transaction | |
CN117693926A (zh) | 区块链区块和存在证明 | |
WO2024041862A1 (en) | Blockchain transaction | |
WO2023285045A1 (en) | Message exchange system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |