CN117836771A - 使用区块链协调对等数据传输 - Google Patents

使用区块链协调对等数据传输 Download PDF

Info

Publication number
CN117836771A
CN117836771A CN202280056028.XA CN202280056028A CN117836771A CN 117836771 A CN117836771 A CN 117836771A CN 202280056028 A CN202280056028 A CN 202280056028A CN 117836771 A CN117836771 A CN 117836771A
Authority
CN
China
Prior art keywords
node
transaction
blockchain
network
hash value
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
Application number
CN202280056028.XA
Other languages
English (en)
Inventor
亚历山德鲁·帕努乌
克雷格·史蒂文·赖特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Blockchain Licensing Jsc
Original Assignee
Blockchain Licensing Jsc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Blockchain Licensing Jsc filed Critical Blockchain Licensing Jsc
Publication of CN117836771A publication Critical patent/CN117836771A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/14Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1074Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
    • H04L67/1078Resource delivery mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial 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)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

一种使用区块链来协调通过P2P网络进行的数据传输的计算机实现的方法。获取第二哈希值,该第二哈希值是通过用第一哈希函数和第二哈希函数对与数据项相关联的数据请求进行哈希处理而生成的。第二哈希值和请求节点的公钥被发送到连接到请求节点的P2P节点,其中请求节点和目标节点之间形成链。目标节点将数据拆分成数据包,使用请求节点的公钥与第一哈希值一起对这些数据包中的每个数据包进行加密以生成第一加密消息,并通过用该链中的节点的公钥对第一加密消息进行加密来生成最终加密消息。获取加密消息并对其进行解密以构建数据项,并向区块链提交证明事务。

Description

使用区块链协调对等数据传输
技术领域
本公开涉及使用区块链来协调对等(peer-to-peer,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节点(requesting P2P node)执行并且包括:获取第二哈希值,其中所述第二哈希值是通过以下方式生成的:用第一哈希函数对至少一个数据请求进行哈希处理以生成第一哈希值,然后用第二哈希函数对至少所述第一哈希值进行哈希处理以生成所述第二哈希值,其中所述数据请求与所述目标数据项相关联;将所述第二哈希值和所述请求P2P节点的公钥发送到连接到所述请求P2P节点的一个或多个P2P节点,其中所述请求P2P节点和所述目标P2P节点之间形成P2P节点链,所述链中的每个P2P节点连接到所述链中的上一个P2P节点和/或所述链中的下一个P2P节点,并且其中所述链中的每个P2P节点被配置为将所述第二哈希值以及与所述链中的每个相应上一个P2P节点相关联的所述相应公钥发送到所述链中的所述下一个P2P节点,使得所述目标P2P节点接收所述第二哈希值以及一个或多个相应公钥;其中所述目标P2P节点被配置为将所述目标数据项拆分成一个或多个相应数据包,使用所述请求P2P节点的公钥对所述一个或多个相应数据包中的每个相应数据包与所述第一哈希值一起进行加密,以生成一个或多个相应第一加密消息,并且通过用所述接收的一个或多个相应公钥中的每个相应公钥对所述一个或多个相应第一加密消息进行加密来生成一个或多个相应最终加密消息,并且其中所述方法包括:从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取所述一个或多个第一加密消息,其中所述链中除了所述请求P2P节点之外的每个相应P2P节点从所述链中的所述下一个相应P2P节点获取一个或多个加密消息,使用与所述相应P2P节点相关联的所述相应公钥对所述一个或多个加密消息进行解密,并且将所述一个或多个加密消息发送到所述链中的所述上一个相应P2P节点,使得所述一个或多个最终加密消息在沿所述链从所述目标P2P节点发送到所述请求P2P节点时被依次解密;
对所述一个或多个相应第一加密消息进行解密以获取所述一个或多个相应数据包,并据此构建所述目标数据项;以及,
向所述区块链网络提交一个或多个相应证明事务,以证明从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取了所述一个或多个第一加密消息。
根据本文公开的另一方面,提供了一种计算机实现的方法,用于使用区块链来协调通过对等P2P网络进行的数据传输,其中所述P2P网络包括多个P2P节点,其中每个P2P节点连接到至少一个其他P2P节点并且与相应公钥相关联,其中所述P2P节点中的目标P2P节点能够访问请求P2P节点所请求的目标数据项,其中所述方法由所述目标P2P节点(targetP2P node)执行并且包括:获取第二哈希值以及一个或多个公钥,每个公钥与相应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示意性地示出了具有七个节点的示例性P2P网络,其中边表示直接网络连接;
图15示意性地示出了根据Gnutella协议的协议消息和数据传输的示例性流程;
图16是示出具有三个节点的洋葱路由协议的示例的流程图;
图17示意性地示出了P2P节点接收数据传输并向区块链网络广播证明事务;
图18示意性地示出了从请求节点转发数据请求的请求事务的示例性流程;
图19示意性地示出了P2P节点接收转发数据请求的奖励以及目标节点向请求节点传输数据;
图20示意性地示出了示例性初级请求事务;
图21示意性地示出了示例性二级请求事务;
图22示意性地示出了示例性响应事务;
图23示意性地示出了从请求节点开始的数据请求和公钥的示例性流程;
图24示意性地示出了用于向请求节点传输数据的示例性路由协议。
具体实施方式
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标识Txj中的解锁脚本并将其传递给脚本引擎452。协议引擎451还基于Txj的输入中的指针来标识和检索Txi。Txi可以在区块链150上发布,在这种情况下,协议引擎可以从存储在节点104处的区块链150的区块151的副本中检索Txi。或者,Txi还可以在区块链150上发布。在这种情况下,协议引擎451可以从节点104维护的未发布有序事务集154中检索Txi。无论采用哪种方式,脚本引擎451都会标识Txi的引用输出中的锁定脚本,并将其传递给脚本引擎452。
因此,脚本引擎452具有Txi的锁定脚本和来自Txj的相应输入的解锁脚本。例如,在图2中示出了事务标记的Tx0和Txi1,但是同样的事务也可以应用于任何事务对。如前所述,脚本引擎452一起运行两个脚本,这将包括根据所使用的基于堆栈的脚本语言(例如脚本)将数据放置到堆栈453上和从堆栈453检索数据。
通过同时运行脚本,脚本引擎452确定解锁脚本是否满足锁定脚本中定义的一个或多个标准,即解锁脚本是否对包括锁定脚本的输出进行解锁?脚本引擎452将该确定的结果返回给协议引擎451。如果脚本引擎452确定解锁脚本确实满足在相应的锁定脚本中指定的一个或多个标准,则返回结果“TRUE”。否则,返回结果“FALSE”。
在基于输出的模型中,来自脚本引擎452的结果“TRUE”是事务有效性的条件之一。通常,还必须满足由协议引擎451评估的一个或多个进一步协议级条件;例如,Txj的输入中所指定的数字资产的总数额不超过其输出中指向的总数额,并且Txi的指向输出尚未被另一有效事务花费。协议引擎451评估来自脚本引擎452的结果以及一个或多个协议级条件,并且只有当它们都为TRUE时,协议引擎才核实事务Txj有效。协议引擎451将事务是否有效的指示输出到应用级决策引擎454。只有在Txj确实有效的条件下,决策引擎454才可以选择同时控制共识模块455C和传播模块455P,以执行其就Txj.的相应区块链相关功能。这包括共识模块455C,向节点的相应有序事务集154添加Txj,用于并入区块151中;以及传播模块455P,将Txj转发到网络106中的另一个区块链节点104。可选地,在实施例中,应用级决策引擎454可以在触发这些函数中的一个或两个函数之前应用一个或多个附加条件。例如,决策引擎可以只选择在事务有效且预留足够事务费用的条件下发布事务。
此外,还应当注意的是,在本文中,术语“TRUE”和“FALSE”不一定限于返回仅以单个二进制数(位)形式表示的结果,尽管这确实是一种可能的实现方式。更通俗地说,“TRUE”可以指指示成功或肯定结果的任何状态,而“FALSE”可以指指示不成功或不肯定结果的任何状态。例如,在基于账户的模型中,可以对签名的隐式协议级核实和智能合约的附加肯定输出的组合来指示结果为“TRUE”(如果两个单独的结果均为TRUE,则认为总体结果为TRUE)。
6.P2P网络连接
图5示出了可以用于形成P2P节点间的连接的示例性系统。该系统包括对等(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网络上的第一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节点、作为可信机构节点、文件共享等能力。在一些示例中,专门性可以是良好带宽、连接性、互联网连接、存储等属性。此处,“良好”可以理解为优于P2P网络节点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格式,包含所列节点的互联网地址和椭圆曲线公钥(例如,以比特币格式编码)。条目示例如下:
基于接收的可用对等节点列表,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条目的节点告诉网络其专门化是数据共享节点的专门化,并且可以是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的第二输出的质询X,并且随后向网络发信号通知N1离线。
如果N1在离线时重复不更新网络的行为,则N2可以将N1标记为不可信并拒绝节点N1的进一步加入请求。此外,还可以将认证机构标志节点N1标记为不可信,并使发布的身份无效。例如,标记可以通过事务来完成。
最后,展示了N1如何改变其专门化SPEC。为此,N1只需创建如图11中给出的新事务,花费TxID′net-add的第二输出。
总之,我们提出的更新程序通过保持网络结构最新并提供所需经济激励来确保网络完整性。
图12示出了根据所述实施例的示例性P2P覆盖模型。如上所述,P2P网络可以通过节点专门化来实现若干服务。这导致了网络模块化,由此节点承担一定的角色,以使P2P网络通信更高效。
为了实现以下服务,加入P2P网络的每个节点K1需要定义自己的SPEC标志。图12提供了P2P模块化的可视化表示,其中节点提供以下服务:
·DNS服务:SPEC:={“role”:“dns”}
·认证机构服务:SPEC:={“role”:“CA”}
·多方计算(Multiparty computation,MPC)服务:SPEC:={“role”:“MPC”}
由于P2P网络在区块链上持有其结构的证明,因此DNS服务可以提供使网络可搜索的服务(也称为爬虫服务)。通过监控网络结构,爬虫可以掌握当前网络的图形,从而为搜索应用程序提供便利。
8.协调数据传输
8.1图论
由于任何P2P网络中每个节点之间的连接都形成一个图,因此我们要回顾图论中的一些基本概念。图是对象(节点)的集合,其中一些对象对是相关的(表示为边)。图13示出了示例图,其中用Ni来标记图中的节点,其中i是正整数或索引集,这取决于上下文。有向图是一种特殊的图,其中节点之间的边有方向,也称为有向边。
在下文中,将管理从节点N1到Nk的图信息流。如果N1是信息请求节点,则称N1为源节点或请求节点。此外,当Nk是信息流的端节点时,称Nk为宿节点或目标节点。
应当注意的是,在现实实现方式中,P2P网络不是固定的,节点可以任意地与对等节点连接或断开连接。
8.2Gnutella
作为示例性应用环境,Gnutella是去中心化P2P网络文件共享服务的一个示例。为了展示该协议的工作原理,假设网络结构如图14所示。节点N1通过网络请求数据D,Gnutella协议允许N1查找持有数据的节点N1,1,2。一旦请求到达N1,1,2,该节点直接将数据传输到P2P网络结构外部的N1,也称为离线传输。图15示出了该协议的可视化效果。
数据传输协议的步骤如下:
1.节点N1通过将对数据D的查询消息Query发送到其相邻对等节点N1,1和N1,2来请求文件。
2.每个节点N1,i将消息Query转发到其相邻对等节点N1,i,j
3.N1,1,2接收消息Query并将包含其身份的回复消息QueryHit发送到N1,1
4.N1,1将消息QueryHit转发到N1
5.N1联系N1,1,2并从其接收数据D。
8.3洋葱路由
作为一种示例性实现方式,洋葱路由协议是确保网络中的节点之间的通信隐私的示例性路由协议,例如,该协议用作Tor网络的一部分。为了举例说明路由协议,假设节点N1连接到N2,后者又连接到节点N3。该协议使节点N1能够将数据D发送到N3,如图16所示,其中用表示节点Ni的公钥。
该协议的步骤如下:
1.N1将其公钥发送到N2,并请求通过Diffie-Hellman密钥交换创建共享密钥S2
2.N2用其公钥进行回复,告知N1它创建了共享密钥S2。N1还私下计算了密钥S2
3.N1向N2请求N3的公钥。N1将其公钥附加到该请求。N1不知道N3的IP地址。
4.N2将请求转发到N3,请求创建共享密钥S3
5.N3将其公钥发送到N2,并确认创建密钥S3,S3由N1和N3共享。
6.N2进一步将公钥连同密钥S3的创建确认中继到N1。N1私下计算了密钥S3
7.N1先用密钥S3对数据D进行加密,然后用密钥S2:对该数据进行加密。N1将加密数据发送到N2
8.N2使用S2对加密数据进行解密并获取N2将加密数据/>发送到N3
9.N3进行解密并接收数据D。
8.4数据传输
本发明的实施例使区块链网络能够充当P2P网络的P2P节点之间数据传输的协调者。图17示出了用于实现所述实施例的示例性系统。该系统包括P2P网络,该P2P网络包括多个P2P节点和区块链网络106。该系统包括图5所示P2P网络的P2P节点501。在一些实施例中,P2P节点可能经历结合图5至图12所述的形成连接的过程。
该P2P网络包括可以访问目标数据的目标节点以及请求目标数据的请求节点。目标数据可以包括媒体数据,例如一个或多个图像、一个或多个视频、一个或多个音频文件等。目标数据可以包括一个或多个文档。通常,目标数据可以采用任何形式。该P2P网络还包括多个中间节点。请求节点和目标节点通过中间节点连接。也就是说,请求节点连接到一个或多个中间节点,这些中间节点中的一个或多个中间节点连接到另一个或多个中间节点,依此类推,直到中间节点连接到目标节点。例如,如图17所示,请求节点K1连接到节点N1,1和N1,2,节点N1,1连接到目标节点Nk。应当理解的是,图17只是一个示例,实际上可以有更多的中间节点将请求节点连接到目标节点。该P2P网络的每个节点都与相应公钥相关联。
请求节点获取基于目标数据请求的哈希值。更具体地,用第一哈希函数对目标数据请求(“目标请求”)进行哈希处理以获取第一哈希值,并用第二哈希函数对结果进行哈希处理以获取第二哈希值。第一哈希函数和第二哈希函数可以相同,也可以不同。第一哈希函数和/或第二哈希函数可以是加密函数(例如,SHA256等来自SHA哈希函数家族的函数)。替代地,可以使用非加密哈希函数。在一些示例中,请求节点生成第一哈希值和第二哈希值。在其他示例中,请求节点可以从不同节点或从可信第三方(例如,将请求映射到数据的集中式服务)接收第一哈希值和/或第二哈希值。
目标请求可以基于目标数据或其标识符,例如,目标请求可以是目标数据的哈希。目标请求可以映射到目标数据(例如,通过可选的集中式服务),使得目标节点可以确定正在请求哪些数据。例如,目标节点可以存储映射到目标数据的数据请求的数据库。目标节点可以将这些映射告知集中式服务。例如,目标节点可以告知集中式服务有媒体文件A映射到请求号123。在一些示例中,此类集中式服务可以由网络节点集提供。请求节点可以联系集中式服务并告知该服务它想要获取媒体文件A。作为响应,集中式服务可以向请求节点提供请求号123。请求节点获取目标请求的方式对于实现所述实施例并不重要。
在一些示例中,可以通过对目标请求和附加数据(例如,时间戳或请求节点和目标节点已知的秘密值)进行哈希处理来获取第一哈希值。例如,作为一种选项,集中式服务可以将秘密值发送到请求节点和/或目标节点。
应当注意的是,对集中式服务的任何引用都是可选的,并且可以设想,在至少一些实施例中不存在此类集中式服务。
8.4.1洪泛请求
本文所述的一些实施例涉及P2P网络洪泛(flooding)目标数据请求。
请求节点生成初级请求事务,初级请求事务是区块链事务。初级请求事务包括第二哈希值和一个或多个输出。每个输出都被锁定到请求节点在P2P网络中所连接的中间节点中的相应节点的相应公钥。例如,如果请求节点连接到两个节点(如图17所示),则初级请求事务包括锁定到两个节点中的第一节点的输出以及锁定到两个节点中的第二节点的单独输出。第二哈希值可以包括在锁定到相应节点的相应公钥的输出中。例如,每个输出可以包括被配置为实现哈希难题的锁定脚本,其中哈希难题包括第二哈希值。哈希难题可能需要花费事务(即,试图解锁包含哈希难题的锁定脚本的事务)的解锁脚本,以包括第一哈希值或目标请求。附加地或替代地,在一些示例中,第二哈希值可以包括在OP_RETURN输出中。初级请求事务还可以包括请求节点的网络标识符(例如,请求节点的IP地址)和/或请求节点的认证标识符(例如,由证明请求节点身份的认证机构认证的标识符)。请求节点向区块链网络106提交初级请求事务。请求节点也可以将初级请求事务直接发送到相关的中间节点(即,事务的输出锁定到其公钥的节点)。这对于中间节点是有益的,因为节点监听区块链以查找新的请求事务的成本高昂。图20示出了初级请求事务的示例,其中两个输出被锁定到连接到请求节点的中间节点的相应公钥。在该示例中,事务还包括请求节点的网络地址和标识符。
如图20所示,初级请求事务可以包括锁定时间。锁定时间指定了初级请求事务可以包括在区块中(即,记录在区块链上)的最早时间。可以使用UNIX时间或区块高度来指定锁定时间。锁定时间激励中间节点在指定时间内响应请求。
然后,接收初级请求的中间节点中的每个中间节点生成相应二级请求事务。此处,“接收”事务意味着确定事务包括锁定到相应节点的相应公钥的输出。相应中间节点生成的每个二级请求事务与初级请求事务的相似之处在于包括第二哈希值和一个或多个输出,其中每个输出被锁定到相应中间节点所连接的相应节点的相应公钥。例如,中间节点中的第一中间节点可以连接到三个其他中间节点,因此,该节点生成的二级请求事务将包含锁定到这三个其他中间节点的相应公钥(每个输出一个密钥)的三个输出。与初级请求事务一样,第二哈希值可以包括在哈希难题中。二级请求事务提交到区块链网络106。图21示出了二级请求事务的示例。
与初级请求事务一样,每个二级请求事务也可以包括锁定时间,该锁定时间指定了相应二级请求事务可以包括在区块中(即,记录在区块链上)的最早时间。
在一些示例中,第一组中间节点(即,直接连接到请求节点的那些节点)提交的二级请求事务中的一个二级请求事务将被锁定到目标节点的公钥。在其他示例中,第一组中间节点将分别生成相应请求事务,该请求事务包括锁定到第二组中间节点的相应公钥的一个或多个输出。该过程一直持续到目标节点接收第二请求事务。这样,就形成了一条从请求节点经由一个或多个中间节点到目标节点的节点路径。除目标节点外,该路径中的每个节点都通过将请求事务(在请求节点的情况下是初级请求事务,在中间节点的情况下是二级请求事务)发送到下一个节点的公钥来连接到该下一个节点。例如,在图17中,形成了一条从请求节点N1经由一个中间节点N1,1到目标节点Nk的路径。图18示出了分别从请求节点和中间节点发送初级事务和二级事务。
因此,目标节点会收到目标数据请求的提醒,目标数据会被传输到请求节点。有几个选项用于将目标数据传输到请求节点,下面将对此进行讨论。响应于接收二级事务,目标节点可以向区块链提交响应(或应答)事务,该事务花费锁定到目标节点的公钥的二级事务的输出,以便发信号通知目标节点具有所请求的数据并且请求已被接收。在二级事务包括基于第二哈希值的哈希难题的示例中,响应事务的输入包括第一哈希值。这继而使得中间节点能够提交相应响应事务,这些响应事务花费锁定到相应公钥的相应请求事务的相应输出。应当注意的是,“花费输出”是指“将输出锁定的数字货币分配给事务的输出,而不是解锁该输出”。图19示出了使用响应(或应答)事务的请求事务的花费,图22示出了目标节点提交的响应事务的示例。
在一些示例中,目标节点可以通过标识请求事务中包括的第二哈希值来确定其具有目标数据。也就是说,目标节点可以识别出第二哈希值与目标数据项(或目标请求)相关联,例如,第二哈希值可以包括在映射到请求的数据库中。在其他示例中,目标节点可以访问第一哈希值(例如,存储在映射到目标请求的数据库中),从请求事务中标识第二哈希值,并验证第一哈希值是否被哈希处理为第二哈希值。如果第一哈希值被哈希处理为第二哈希值,则目标节点具有对应目标请求。在一些示例中,第二哈希值可以通过用时间戳对第一哈希值进行哈希处理来获取。在这些示例中,目标节点可以试图用一系列不同的时间戳来对第一值进行哈希处理,以验证第二哈希是否基于已知的第一哈希值。
作为传输目标数据的一种选项,目标节点可以将数据直接传输到请求节点,如图19所示。目标数据可以在链下发送,例如通过目标节点和请求节点之间的(安全)通信通道发送。在这些示例中,目标数据的传输可以在区块链上得到证明。例如,目标数据的哈希可以作为证明事务的一部分记录在区块链上。该证明事务可以由请求节点和/或目标节点生成。替代地,目标数据可以在链上发送,即包括在目标节点提交给区块链网络106的区块链事务中。在一些示例中,目标数据的传输仅在请求节点例如通过证明事务向目标节点支付一定数额的标的数字资产后才可能进行(或至少取决于此)。
目标节点可能已经可以访问请求节点的公钥以在链上发送数据和/或请求节点的网络地址(例如,IP地址)以在链下发送数据。在一些示例中,请求节点可以将公钥和/或网络地址发送到目标节点。例如,响应于接收第二请求事务,目标节点可以发布包含目标节点的网络标识符(例如,IP地址)和第一哈希值的消息。发布消息可以包括向P2P网络广播消息。通过包括第一哈希值,请求节点可以确定目标节点已接收请求。然后,请求节点可以使用目标节点的网络标识符来与目标节点连接,目标节点可以将目标数据发送到请求节点。在一些示例中,在连接到目标节点之前,请求节点可以验证消息中包括的第一哈希值是否正确。
作为将目标数据发送到请求节点的替代选项,目标节点可以通过形成将请求节点连接到目标节点的路径的中间节点将目标数据传输到请求节点。目标节点可以获取该路径中其他节点(即,请求节点和一个或多个中间节点)的相应公钥。目标节点可能已经可以访问公钥(例如,存储在存储器中的公钥),或者可以从区块链获取公钥(例如,从请求事务中获取或从集中式服务中获取)。目标节点使用获取的公钥对目标数据进行加密。也就是说,用公钥中的每个公钥对目标数据进行加密,首先用请求节点的公钥,然后用路径中第一中间节点的公钥,再用路径中第二中间节点的公钥,依此类推,直到用每个公钥对目标数据进行加密。在一些示例中,目标数据可以首先拆分成一个或多个数据包,每个数据包可以用一组公钥进行加密。
用一组公钥进行加密的数据包称为“最终加密消息”。仅用请求节点的公钥进行加密的数据包称为“第一加密消息”。也就是说,每个数据包都用请求节点公钥进行加密以获取第一加密消息,每个第一加密消息都用剩余公钥进行加密以获取最终加密消息。
目标节点将最终加密消息发送到路径中的最终中间节点(即,提交了具有锁定到目标节点的公钥的输出的二级请求事务的中间节点)。最终中间节点使用与该节点的公钥相对应的私钥对最终加密消息进行解密,以获取一组加密消息。该组加密消息用其他中间节点和请求节点的公钥进行加密。最终中间节点将该组加密消息发送到路径中的下一个中间节点(沿请求节点的方向),或者如果路径中只有一个中间节点,则发送到请求节点。接收一组加密消息的每个中间节点用其相应私钥对消息进行解密,并将得到的一组加密消息发送到路径中的下一个节点。最终,请求节点接收一个或多个第一加密消息。然后,请求节点可以用其私钥对一个或多个第一加密消息进行解密,以获取一个或多个数据包。然后,通过组合数据包来获取目标数据。
在一些示例中,加密消息从一个节点成批提交到另一节点。在其他示例中,加密消息从一个节点一次一条地提交到另一节点。
加密消息可以通过链下通道从一个节点发送到另一节点。替代地,加密消息可以通过区块链发送。例如,每个节点可以将一个或多个数据事务发送到区块链,其中每个数据事务包括一个或多个加密消息。
可选地,请求节点可以向区块链提交证明事务,以证明获取了数据包。例如,证明事务可以包括目标数据的哈希。请求节点可以向区块链提交单个证明事务,或者可以针对每个数据包提交相应证明事务,例如,每个事务可以包括相应数据包的哈希。类似地,每个中间节点可以向区块链提交一个或多个相应证明事务,以证明从路径中的上一个节点接收了一个或多个加密消息。在一些示例中,每个加密数据包的传输仅在接收加密数据包的节点例如通过证明事务向发送加密数据包的节点支付一定数额的标的数字资产后才可能进行(或至少取决于此)。
8.4.2链式请求
本文所述的一些实施例涉及通过中间节点链将目标数据请求发送到目标节点。
请求节点将第二哈希值(基于目标数据请求)发送到连接到请求节点的一个或多个中间节点。请求节点还会发送其公钥。例如,如图23所示,请求节点N1将第二哈希值H1(H0(R))及其公钥PKN1发送到其所连接的每个节点,在该示例中,节点是中间节点N1,1和中间节点N1,2。接收第二哈希值的每个中间节点将第二哈希值和请求节点的公钥PKN1转发到连接到该中间节点的一个或多个中间节点。中间节点的公钥也与第二哈希值和请求节点的公钥PKN1一起发送。例如,中间节点N1,2将第二哈希值、请求节点的公钥PKN1及其自己的公钥PKN1,2发送到中间节点N1,2,1和中间节点N1,2,2。该过程一直持续到第二哈希值到达目标节点。例如,如图23所示,中间节点N1,1将第二哈希值、请求节点的公钥PKN1及其自己的公钥PKN1,1转发到中间节点N1,1,1和目标节点Nk。应当理解的是,实际上P2P网络中可能有更多的节点,并且可能有更多轮的中间节点将第二哈希值、接收的公钥及其自己的公钥转发到其他中间节点,直到最终目标节点接收第二哈希值。
从请求节点到目标节点形成节点链。该链是通过将第二哈希值和公钥从请求节点转发到目标节点而形成的。该链可以由目标节点接收的公钥来表示。例如,在图23中,该链由请求节点N1、中间节点N1,1和目标节点Nk形成,并由公钥PKN1和PKN1,1表示。请求节点始终位于该链的一端,目标节点位于另一端。
请求节点可以通过链下通道将第二哈希值及其公钥发送到中间节点,例如作为P2P网络协议的一部分。在其他示例中,请求节点可以将第二哈希值及其公钥发送到链上的中间节点。也就是说,请求节点可以向区块链提交请求事务,其中该请求事务包括第二哈希值和请求节点的公钥。请求节点还可以通过链下通道将请求事务直接发送到中间节点。由于节点不必监控区块链,因此这提高了性能。请求事务可以包括一个或多个输出,其中每个输出被锁定到请求节点所连接的相应中间节点的相应公钥。例如,如果请求节点连接到三个中间节点,则请求事务可以包括三个输出,每个输出锁定到相应中间节点的公钥。
类似地,中间节点可以通过向区块链提交请求事务通过链下通道转发第二哈希值和公钥。根据中间节点发送第二哈希值和公钥的方式,目标节点直接从中间节点(通过链下通道)或从区块链获取第二哈希值和公钥。
在一些示例中,目标节点可以识别出第二哈希值与目标数据项(或目标请求)相关联,例如,第二哈希值可以包括在映射到请求的数据库中。在其他示例中,目标节点可以访问第一哈希值(例如,存储在映射到目标请求的数据库中),从中间节点接收第二哈希值,并验证第一哈希值是否被哈希处理为第二哈希值。如果第一哈希值被哈希处理为第二哈希值,则目标节点具有对应目标请求。在一些示例中,第二哈希值可以通过用时间戳对第一哈希值进行哈希处理来获取。在这些示例中,目标节点可以试图用一系列不同的时间戳来对第一值进行哈希处理,以验证第二哈希是否基于已知的第一哈希值。
目标节点使用获取的公钥(即,请求节点的公钥以及链中每个其他节点的相应公钥)对目标数据进行加密。也就是说,用公钥中的每个公钥对目标数据进行加密,首先用请求节点的公钥,然后用路径中第一中间节点的公钥,再用路径中第二中间节点的公钥,依此类推,直到用每个公钥对目标数据进行加密。在一些示例中,目标数据可以首先拆分成一个或多个数据包,每个数据包可以用一组公钥进行加密。
用一组公钥进行加密的数据包称为“最终加密消息”。仅用请求节点的公钥进行加密的数据包称为“第一加密消息”。也就是说,每个数据包都用请求节点公钥进行加密以获取第一加密消息,每个第一加密消息都用剩余公钥进行加密以获取最终加密消息。
目标节点将最终加密消息发送到路径中的最终中间节点(即,提交了具有锁定到目标节点的公钥的输出的二级请求事务的中间节点)。最终中间节点使用与该节点的公钥相对应的私钥对最终加密消息进行解密,以获取一组加密消息。该组加密消息中的每个加密消息都用其他中间节点和请求节点的公钥进行加密。最终中间节点将该组加密消息发送到路径中的下一个中间节点(沿请求节点的方向),或者如果路径中只有一个中间节点,则发送到请求节点。接收一组加密消息的每个中间节点用其相应私钥对消息进行解密,并将得到的一组加密消息发送到路径中的下一个节点。最终,请求节点接收一个或多个第一加密消息。然后,请求节点可以用其私钥对一个或多个第一加密消息进行解密,以获取显示一个或多个数据包。然后,通过组合数据包来获取目标数据。
在一些示例中,加密消息从一个节点成批提交到另一节点。在其他示例中,加密消息从一个节点一次一条地提交到另一节点。
加密消息可以通过链下通道从一个节点发送到另一节点。替代地,加密消息可以通过区块链发送。例如,每个节点可以将一个或多个数据事务发送到区块链,其中每个数据事务包括一个或多个加密消息。
请求节点向区块链提交一个或多个证明事务,以证明获取了数据包。例如,证明事务可以包括目标数据的哈希。证明事务可以包括锁定到链中将第一加密消息发送到请求节点的节点的公钥的输出。请求节点可以向区块链提交单个证明事务,或者可以针对每个数据包提交相应证明事务,例如,每个事务可以包括相应数据包的哈希。类似地,每个中间节点可以向区块链提交一个或多个相应证明事务,以证明从路径中的上一个节点接收了一个或多个加密消息。附加地或替代地,目标节点可以向区块链提交一个或多个证明事务,以证明向链中连接到目标节点的节点发送了最终加密消息。
图24示出了通过中间节点将加密消息发送到请求节点的过程。如图所示,目标节点对多个数据包进行加密,以获取多个加密消息。加密消息一次一条地发送到中间节点。中间节点向区块链网络提交证明事务,以换取或接收加密消息。使用中间节点的公钥对加密消息进行解密,以显示第一加密消息。然后,将第一加密消息发送到请求节点,该请求节点证明接收了第一加密消息。对第一加密消息进行解密,以显示目标数据。
在一些示例中,目标节点可以将目标数据(或目标数据的相应数据块)与第一哈希值一起进行加密,以生成第一加密消息。也就是说,每个数据包(无论是整个目标数据还是其中的数据块)在用请求节点的公钥进行加密之前都要与第一哈希值组合。在对第一加密消息进行解密时,请求节点可以验证解密第一哈希值是否是第二哈希值所依据的正确第一哈希值。这样,由于目标节点可以例如通过对数据请求进行哈希处理访问第一哈希值,因此请求节点可以确定目标节点已提供数据包。
9.示例性实现方式
下面提供了洪泛请求实施例和链请求实施例的示例性实现方式。
为了增加P2P数据传输激励,节点可以使用事务来证明区块链上的每次传输,这些事务随后由传输过程中所涉及的节点接收。通过使用区块链网络,可以创建可审计通信追踪,从而可以追究作弊节点的责任。图17提供了节点N1和N1,1之间的传输的可视化效果。考虑源节点N1从P2P网络请求数据D,并假设宿节点Nk=N1,1,2拥有该数据。例如,请求的数据可以是文件、网络查询或身份证明。要将其从Nk传输到N1,实现方式有两层:
·激励P2P网络洪泛数据请求。
·激励向请求节点分发数据。
根据网络情况,节点可以将这两层结合成同时激励请求洪泛和数据分发的协议。假设每个节点都具有相关联的公钥,通过该公钥可在P2P网络中唯一地标识该节点。
9.1洪泛奖励
N1在P2P网络中发送对数据D的请求R,并附上转发该请求的支付奖励。一旦请求到达Nk,该节点就会直接将数据D传输到N1以获取支付奖励。协议拆分成查找Nk的对等节点发现阶段(图18)以及支付和数据传输的结算阶段(图19)。该协议如下。
9.1.1对等节点发现阶段
1.N1对其请求R,H1(H0(R))进行哈希处理,其中H1和H0是哈希函数,不一定不同。
2.N1将包含哈希请求H1(H0(R))的带锁定时间T1的事务(图20)发送到其相邻节点N1,1,N1,2。N1花费UTXO
如果N1在锁定时间T1之前没有接收对其请求的响应,该节点将广播不带锁定时间的事务,将资金返还给自己。
3.每个节点N1,i通过创建带有锁定时间T2,i的事务在网络中转发请求(图21)。N1,i花费UTXO
如果N1,i在锁定时间T2,i之前没有接收对其请求的响应,该节点将广播不带锁定时间的事务,将资金返还给自己。
4.宿节点Nk接收H1(H0(R))并识别请求R(例如,来自本地存储的数据库)。Nk向P2P网络广播包含其身份和H0(R)的消息。
9.1.2结算阶段
5.当所有节点接收到包含H0(R)的广播消息时,节点N1,i会花费图20中事务的第i个输出,节点N1,i,j会花费图21中事务的第j个输出。例如,Nk广播如图22中给出的事务TxIDans-Nk,至比特币网络。
6.节点N1接收H0(R)以及步骤4所显示的Nk的身份。N1联系Nk
7.Nk例如使用支付通道协议将数据D发送到N1,并接收yBSV的支付。
脚本[Hash-puzzle<H1(H0(R))>]定义为:
OP_SHA256<H1(H0(R))>OP_EQUALVERIFY
并将H1固定为与操作码OP_SHA256相对应的哈希函数。哈希难题可以用脚本<H0(R)>进行解锁。
节点N1为向其相邻节点N1,1和N1,2中的每个节点支付2xBSV的事务请求提供资金。在网络结构中,认为到达Nk的跳数为一,但应根据请求应答速度和预期跳数来选择2x BSV的数额。除非N1,1和N1,2知道H0(R),否则无法接收支付,因此,它们被激励将H1(H0(R))转发到相邻对等节点以获取x BSV的奖励。
Nk被激励公开H0(R)并在P2P网络中对其进行广播,因为这样它就能使N1知道其身份并接收数据传输支付。Nk通过广播TxIDans-Nk总共接收了yBSV的数据传输支付和x-∈BSV的支付。然后,每个节点N1,1和N1,2获利
2x-x-∈=x-∈BSV
类似地,N1,1,1、N1,2,1、N1,2,2通过步骤5获利x-∈BSV。下表总结了各种激励:
可能存在N1,2作弊的设置,等待Nk广播H0(R),接收2x BSV而不转发请求。N1应避免这种场景,因为不遵循协议N1,2减少了找到数据D的机会。因此,N1被激励定期在区块链上检查其相邻对等节点是否通过中继事务转发请求。如果相邻对等节点中的任何对等节点没有转发请求,则N1可以降低对不诚实对等节点的奖励,或通过联系认证机构迫使它们与网络断开连接,如上文第6节和第7节所述。
类似地,N1,2对其对等节点的支付可能低于x BSV,从而降低了转发请求的激励。与上述情况一样,N1可以定期在区块链上检查N1,2的支付,并降低未来的奖励或使其与网络断开连接。
另一个讨论点与请求R有关。如果节点想作弊,不等找到Nk就取回请求奖励,就必须暴力破解H1(H0(R))才能查找H0(R)。如果R很长,那么这种方法成本可能太高。
眼尖的读者也会注意到,正如目前所写的那样,该协议存在漏洞。请求R可以通过网络多次发送,不一定由同一个源节点N1发送。在这种情况下,节点的行为可能不诚实:从第一请求中知道H0(R)后,节点就可以在步骤2中花费事务。该问题的缓解措施是N1将Unix时间值unixtime等时间变量附加到H0(R):
H0(R)||unixtime
并使用哈希H1(H0(R)||unixtime)创建事务。Nk在接收请求时应检查接近当前Unix时间的值,以便与请求匹配。这增加了Nk在其数据库中查找正确Unix时间值和请求R的负担。
9.2链奖励
在洪泛奖励章节,N1直接联系Nk接收数据。然而,在本节中,数据D通过将Nk连接到N1的网络路径进行传播,此类路径称为获胜链。只有获胜链上的节点才会获得奖励,为了安全地通过链将数据D从Nk传输到N1,需要对其进行加密。图23和图24提供了通信的可视化效果。
9.2.1对等节点发现阶段
1.N1将H1(H0(R))及其公钥发送到每个相邻节点N1,i
2.接收H1(H0(R))和后,N1,i进一步将H1(H0(R))与/>和/>一起发送到每个相邻节点/>
3.N1,i,j接收H1(H0(R))和
通过执行对等节点发现步骤1-3,Nk接收H1(H0(R))以及公钥N1和N1,1,从而形成获胜链Nk,N1,1,N1。链的支付结算协议如下。
9.2.2结算阶段
4.Nk将数据D拆分成m个数据包Di(1≤i≤m)。例如,如果数据D大小为128kb,Nk可以将其拆分成m=4个数据包Di,每个数据包大小为32kb。
对于每个数据包Di,执行以下操作:
5.Nk对数据包Di进行加密:
6.Nk将Ei发送到N1,1,(通过比特币事务,)N1,1向Nk支付xBSV的奖励。
7.N1,1一旦从Nk接收Ei,就会使用与相关联的私钥对加密数据Ei进行解密以获取
N1,1通过对H0(R):H1(H0(R))进行哈希处理来检查其有效性,从而验证请求。如果验证失败,该过程停止。
8.N1,1提取发送到N1的加密数据:
9.N1,1将E′i发送到N1,(通过比特币事务,)N1向N1,1支付x+yBSV的奖励。
10.N1使用与相关联的私钥对E′i进行解密以获取
H0(R)||Di
N1通过对H0(R):H1(H0(R))进行哈希处理来检查有效性,从而验证请求。如果验证失败,该过程停止。
11.返回步骤5并检索下一个数据包。
下表总结了每个节点的激励:
节点 每个数据包的激励
Nk xBSV
N1,1 yBSV
N1 接收数据包Di
N1,1的激励理由如下:N1,1在步骤6中向Nk支付xBSV,N1,1在步骤9中从N1接收y+xBSV。因此,对于每个数据包,N1,1的利润率为yBSV。
下面解释了加密格式如何防止作弊:
·前置哈希:如果N1在P2P网络中发出多个数据请求,每个加密数据Ei和E′i都包含H0(R)。这样,N1,1和N1就知道加密数据与哪个请求相关联。
·加密层:由于Nk在步骤5中同时用和/>对每个数据包Di进行加密,因此可以防止N1对N1,1进行如下作弊。如果Nk仅用/>对数据包Di进行加密:
则N1可以通过窃听Nk和N1,1之间的连接来获取发往N1,1的数据并对该数据进行解密。在这种情况下,N1,1会为加密数据包支付,但在将其发送到N1时,N1会拒绝支付,因为它已经获取了数据包Di
如果Nk同时用和/>对每个数据包Di进行加密,则N1在进行窃听时无法从加密数据/>中获取任何信息。
检查数据质量并使N1所要求的质量与从Nk接收的质量相匹配是个难题[7]。我们的系统实现了对N1,1和N1的一些保护,如果Nk行为不诚实且数据质量不合适,它可以欺骗N1,1和N1为最多一个无效数据包Di支付,并拒绝向Nk发送后续数据包和支付。
在数据质量不匹配的情况下,N1,1作为Nk的相邻对等节点,可以在区块链上公开证明Nk作弊的情况下降低后续支付。如果作弊继续,则N1,1可以向认证机构报告Nk并使其与网络断开连接。
如果某个节点在整个网络中使用多个IP地址和相关联的身份证书,从而表现为不同的实体,则称该节点复制自己的身份。通过Sybil攻击,节点可以复制自己的身份,以试图获取更多奖励。此类攻击对链奖励协议的影响在于,作弊节点可以通过将数据发送到其虚假身份来增加费用。可以通过要求认证机构在网络设置阶段不向同一节点发布不同身份来防止这种情况。
诚实节点不会被激励接受来自无证书节点的连接,因为这可能导致其支付的奖励增加。作弊节点只能通过将副本附加到自身来复制其在网络中的存在。假设在我们的P2P网络中,N1,1作弊导致获胜链:Nk,N1,1,N1,1,N1。通过执行该攻击,N1,1使N1相信获胜链更长,从而增加从其接收的奖励。
由于所有事务都记录在区块链上,因此N1可以检查N1,1是否在获胜链上复制自己并拒绝支付。此外,节点Nk很容易检查其在步骤3中接收的重复公钥。如果宿节点不检查重复身份,从而参与不诚实的方案,则宿节点可能会对不诚实行为负责。
9.3洪泛奖励和链奖励
第9.1节和第9.2节的协议可以组合成P2P网络中请求和数据传播的激励机制:
·对等节点发现:从N1开始,执行第9.1节中给出的步骤1-4
·结算:一旦请求到达Nk,执行第错误!未找到引用源。节中给出的步骤4-11
该协议对第9.1节和第9.2节中的协议作了如下改进:
·由于在第9.1节中,数据D从Nk传输到P2P网络结构外部的N1,因此Nk和N1必须使用不同的基础设施,在该基础设施上可能存在数据传输延迟。然而,在现有的P2P网络结构中,N1可以通过在其请求事务上添加锁定时间来估计延迟。因此,通过使用第9.2节的协议的结算阶段来传输数据,增加了对传输延迟的控制。
·在第9.2节的协议中,节点N1,2不是获胜链的一部分,并且该节点可以停止转发未来的请求。由于请求没有向区块链证明,因此N1无法证明N1,2未遵循协议。因此,通过提供洪泛奖励,激励N1,2转发请求。
10.进一步评论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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节点的一个或多个P2P节点,其中所述请求P2P节点和所述目标P2P节点之间形成P2P节点链,所述链中的每个P2P节点连接到所述链中的上一个P2P节点和/或所述链中的下一个P2P节点,并且其中所述链中的每个P2P节点被配置为将所述第二哈希值以及与所述链中的每个相应上一个P2P节点相关联的所述相应公钥发送到所述链中的所述下一个P2P节点,使得所述目标P2P节点接收所述第二哈希值以及一个或多个相应公钥;
其中所述目标P2P节点被配置为将所述目标数据项拆分成一个或多个相应数据包,使用所述请求P2P节点的公钥对所述一个或多个相应数据包中的每个相应数据包与所述第一哈希值一起进行加密,以生成一个或多个相应第一加密消息,并且通过用所述接收的一个或多个相应公钥中的每个相应公钥对所述一个或多个相应第一加密消息进行加密来生成一个或多个相应最终加密消息,并且其中所述方法包括:
从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取所述一个或多个第一加密消息,其中所述链中除了所述请求P2P节点之外的每个相应P2P节点从所述链中的所述下一个相应P2P节点获取一个或多个加密消息,使用与所述相应P2P节点相关联的所述相应公钥对所述一个或多个加密消息进行解密,并且将所述一个或多个加密消息发送到所述链中的所述上一个相应P2P节点,使得所述一个或多个最终加密消息在沿所述链从所述目标P2P节点发送到所述请求P2P节点时被依次解密;
对所述一个或多个相应第一加密消息进行解密,以获取所述一个或多个相应数据包,并据此构建所述目标数据项;以及
向所述区块链网络提交一个或多个相应证明事务,以证明从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取了所述一个或多个第一加密消息。
语句2.根据语句1所述的方法,其中所述链中从所述链中的所述下一个相应P2P节点获取一个或多个加密消息的每个P2P节点被配置为向所述区块链网络提交一个或多个相应证明事务,以证明从所述链中的所述相应下一个P2P节点获取了所述一个或多个加密消息。
语句3.根据语句1或2所述的方法,其中对每个相应第一加密消息进行解密将显示候选第一哈希值和所述相应数据包,并且其中所述方法包括:
用所述第二哈希函数对所述候选第一哈希值进行哈希处理以生成候选第二哈希值;以及
验证所述候选第二哈希值与所述第二哈希值匹配。
语句4.根据前述任一项语句所述的方法,其中所述的将所述第二哈希值发送到连接到所述请求P2P节点的所述一个或多个P2P节点包括:将所述第二哈希值直接发送到所述一个或多个P2P节点。
语句5.根据语句1至4中任一项所述的方法,其中所述的将所述第二哈希值发送到连接到所述请求P2P节点的所述一个或多个P2P节点包括:向所述区块链网络提交请求事务,其中所述请求事务包括所述第二哈希值和一个或多个相应输出,每个相应输出锁定到所述P2P节点中的相应P2P节点的相应公钥。
语句6.根据前述任一项语句所述的方法,其中所述目标数据项被拆分成多个数据包。
语句7.根据前述任一项语句所述的方法,其中所述的从所述相应P2P节点获取所述一个或多个第一加密消息包括:直接从所述相应P2P节点获取所述一个或多个第一加密消息。
语句8.根据前述任一项语句所述的方法,其中所述区块链包括一个或多个相应数据事务,每个相应数据事务包括相应第一加密消息,并且其中所述的从所述相应P2P节点获取所述一个或多个第一加密消息包括:从所述区块链获取所述一个或多个第一加密消息。
语句9.根据前述任一项语句所述的方法,其中所述的获取所述第二哈希值包括:生成所述第二哈希值。
替代地,第二哈希函数可以从不同的P2P节点或可信第三方获取。
语句10.根据前述任一项语句所述的方法,其中所述第一哈希函数和所述第二哈希函数是相同的哈希函数。
语句11.根据语句1至9中任一项所述的方法,其中所述第一哈希函数和所述第二哈希函数是不同的哈希函数。
语句12.根据前述任一项语句所述的方法,其中所述第一哈希函数是加密哈希函数和/或所述第二哈希函数是加密哈希函数。
语句13.根据前述任一项语句所述的方法,其中所述数据请求基于所述目标数据项的哈希。
语句14.一种计算机实现的方法,用于使用区块链来协调通过对等(P2P)网络进行的数据传输,其中所述P2P网络包括多个P2P节点,其中每个P2P节点连接到至少一个其他P2P节点并且与相应公钥相关联,其中所述P2P节点中的目标P2P节点能够访问请求P2P节点所请求的目标数据项,其中所述方法由所述目标P2P节点执行并且包括:
获取第二哈希值以及一个或多个公钥,每个公钥与相应P2P节点相关联,其中所述一个或多个公钥中的一个公钥是所述请求P2P节点的公钥,并且其中所述一个或多个公钥中的每个其他公钥与属于所述请求P2P节点和所述目标P2P节点之间的P2P节点的链的相应P2P节点相关联,所述链中的每个P2P节点连接到所述链中的上一个P2P节点和/或所述链中的下一个P2P节点;
确定所述第二哈希值基于第一哈希值,其中所述第一哈希值基于与所述目标数据项相关联的数据请求;
将所述目标数据项拆分成一个或多个相应数据包;
使用所述请求P2P节点的公钥对所述一个或多个相应数据包中的每个相应数据包以及所述第一哈希值进行加密,以生成一个或多个相应第一加密消息;
用与所述链中的所述相应P2P节点相关联的所述相应公钥中的每个相应公钥对所述一个或多个相应第一加密消息进行加密,以生成一个或多个相应最终加密消息;以及
将所述一个或多个相应最终加密消息发送到所述链中的连接到所述目标P2P节点的P2P节点,并且其中向所述区块链网络提交一个或多个相应证明事务以证明发送了所述一个或多个相应最终加密消息。
语句15.根据语句14所述的方法,其中被提交给所述区块链网络的所述一个或多个相应证明事务由所述目标P2P节点提交给所述区块链网络。
语句16.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至15中任一项所述的方法。
语句17.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至15中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括请求P2P节点和目标P2P节点的动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括请求P2P节点和目标P2P节点的计算机设备。

Claims (17)

1.一种计算机实现的方法,用于使用区块链来协调通过对等P2P网络进行的数据传输,其中所述P2P网络包括多个P2P节点,其中每个P2P节点连接到至少一个其他P2P节点并且与相应公钥相关联,其中所述P2P节点中的目标P2P节点能够访问目标数据项,并且其中所述方法由请求P2P节点执行并且包括:
获取第二哈希值,其中所述第二哈希值是通过以下方式生成的:用第一哈希函数对至少一个数据请求进行哈希处理以生成第一哈希值,然后用第二哈希函数对至少所述第一哈希值进行哈希处理以生成所述第二哈希值,其中所述数据请求与所述目标数据项相关联;
将所述第二哈希值和所述请求P2P节点的公钥发送到连接到所述请求P2P节点的一个或多个P2P节点,其中所述请求P2P节点和所述目标P2P节点之间形成P2P节点链,所述链中的每个P2P节点连接到所述链中的上一个P2P节点和/或所述链中的下一个P2P节点,并且其中所述链中的每个P2P节点被配置为将所述第二哈希值以及与所述链中的每个相应上一个P2P节点相关联的所述相应公钥发送到所述链中的所述下一个P2P节点,使得所述目标P2P节点接收所述第二哈希值以及一个或多个相应公钥;
其中所述目标P2P节点被配置为将所述目标数据项拆分成一个或多个相应数据包,使用所述请求P2P节点的公钥对所述一个或多个相应数据包中的每个相应数据包与所述第一哈希值一起进行加密,以生成一个或多个相应第一加密消息,并且通过用所述接收的一个或多个相应公钥中的每个相应公钥对所述一个或多个相应第一加密消息进行加密来生成一个或多个相应最终加密消息,并且其中所述方法包括:
从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取所述一个或多个第一加密消息,其中所述链中除了所述请求P2P节点之外的每个相应P2P节点从所述链中的所述下一个相应P2P节点获取一个或多个加密消息,使用与所述相应P2P节点相关联的所述相应公钥对所述一个或多个加密消息进行解密,并且将所述一个或多个加密消息发送到所述链中的所述上一个相应P2P节点,使得所述一个或多个最终加密消息在沿所述链从所述目标P2P节点发送到所述请求P2P节点时被依次解密;
对所述一个或多个相应第一加密消息进行解密以获取所述一个或多个相应数据包,并据此构建所述目标数据项;以及
向所述区块链网络提交一个或多个相应证明事务,以证明从连接到所述请求P2P节点的所述链中的所述相应P2P节点获取了所述一个或多个第一加密消息。
2.根据权利要求1所述的方法,其中所述链中从所述链中的所述下一个相应P2P节点获取一个或多个加密消息的每个P2P节点被配置为向所述区块链网络提交一个或多个相应证明事务,以证明从所述链中的所述相应下一个P2P节点获取了所述一个或多个加密消息。
3.根据权利要求1或2所述的方法,其中对每个相应第一加密消息进行解密将显示候选第一哈希值和所述相应数据包,并且其中所述方法包括:
用所述第二哈希函数对所述候选第一哈希值进行哈希处理以生成候选第二哈希值;以及
验证所述候选第二哈希值与所述第二哈希值匹配。
4.根据前述任一项权利要求所述的方法,其中所述的将所述第二哈希值发送到连接到所述请求P2P节点的所述一个或多个P2P节点包括:将所述第二哈希值直接发送到所述一个或多个P2P节点。
5.根据权利要求1至4中任一项所述的方法,其中所述的将所述第二哈希值发送到连接到所述请求P2P节点的所述一个或多个P2P节点包括:向所述区块链网络提交请求事务,其中所述请求事务包括所述第二哈希值和一个或多个相应输出,每个相应输出锁定到所述P2P节点中的相应P2P节点的相应公钥。
6.根据前述任一项权利要求所述的方法,其中所述目标数据项被拆分成多个数据包。
7.根据前述任一项权利要求所述的方法,其中所述的从所述相应P2P节点获取所述一个或多个第一加密消息包括:直接从所述相应P2P节点获取所述一个或多个第一加密消息。
8.根据前述任一项权利要求所述的方法,其中所述区块链包括一个或多个相应数据事务,每个相应数据事务包括相应第一加密消息,并且其中所述的从所述相应P2P节点获取所述一个或多个第一加密消息包括:从所述区块链获取所述一个或多个第一加密消息。
9.根据前述任一项权利要求所述的方法,其中所述的获取所述第二哈希值包括:生成所述第二哈希值。
10.根据前述任一项权利要求所述的方法,其中所述第一哈希函数和所述第二哈希函数是相同的哈希函数。
11.根据权利要求1至9中任一项所述的方法,其中所述第一哈希函数和所述第二哈希函数是不同的哈希函数。
12.根据前述任一项权利要求所述的方法,其中所述第一哈希函数是加密哈希函数和/或所述第二哈希函数是加密哈希函数。
13.根据前述任一项权利要求所述的方法,其中所述数据请求基于所述目标数据项的哈希。
14.一种计算机实现的方法,用于使用区块链来协调通过对等P2P网络进行的数据传输,其中所述P2P网络包括多个P2P节点,其中每个P2P节点连接到至少一个其他P2P节点并且与相应公钥相关联,其中所述P2P节点中的目标P2P节点能够访问请求P2P节点所请求的目标数据项,其中所述方法由所述目标P2P节点执行并且包括:
获取第二哈希值以及一个或多个公钥,每个公钥与相应P2P节点相关联,其中所述一个或多个公钥中的一个公钥是所述请求P2P节点的公钥,并且其中所述一个或多个公钥中的每个其他公钥与属于所述请求P2P节点和所述目标P2P节点之间的P2P节点的链的相应P2P节点相关联,所述链中的每个P2P节点连接到所述链中的上一个P2P节点和/或所述链中的下一个P2P节点;
确定所述第二哈希值基于第一哈希值,其中所述第一哈希值基于与所述目标数据项相关联的数据请求;
将所述目标数据项拆分成一个或多个相应数据包;
使用所述请求P2P节点的公钥对所述一个或多个相应数据包中的每个相应数据包以及所述第一哈希值进行加密,以生成一个或多个相应第一加密消息;
用与所述链中的所述相应P2P节点相关联的所述相应公钥中的每个相应公钥对所述一个或多个相应第一加密消息进行加密,以生成一个或多个相应最终加密消息;以及
将所述一个或多个相应最终加密消息发送到所述链中的连接到所述目标P2P节点的P2P节点,并且其中向所述区块链网络提交一个或多个相应证明事务以证明发送了所述一个或多个相应最终加密消息。
15.根据权利要求14所述的方法,其中被提交给所述区块链网络的所述一个或多个相应证明事务由所述目标P2P节点提交给所述区块链网络。
16.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至15中任一项所述的方法。
17.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至15中任一项所述的方法。
CN202280056028.XA 2021-08-18 2022-07-19 使用区块链协调对等数据传输 Pending CN117836771A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2111836.9A GB2610165A (en) 2021-08-18 2021-08-18 Coordinating peer-to-peer data transfer using blockchain
GB2111836.9 2021-08-18
PCT/EP2022/070119 WO2023020764A1 (en) 2021-08-18 2022-07-19 Coordinating peer-to-peer data transfer using blockchain

Publications (1)

Publication Number Publication Date
CN117836771A true CN117836771A (zh) 2024-04-05

Family

ID=77860030

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280056028.XA Pending CN117836771A (zh) 2021-08-18 2022-07-19 使用区块链协调对等数据传输

Country Status (4)

Country Link
EP (1) EP4388440A1 (zh)
CN (1) CN117836771A (zh)
GB (1) GB2610165A (zh)
WO (1) WO2023020764A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115987693B (zh) * 2023-03-21 2023-06-13 成都运荔枝科技有限公司 一种基于区块链的数据传输方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10917234B2 (en) * 2018-05-03 2021-02-09 International Business Machines Corporation Blockchain for on-chain management of off-chain storage
US11128471B2 (en) * 2019-04-25 2021-09-21 Microsoft Technology Licensing, Llc Accessibility controls in distributed data systems
GB2593421A (en) * 2019-10-24 2021-09-29 Nchain Holdings Ltd Method of using a blockchain

Also Published As

Publication number Publication date
GB202111836D0 (en) 2021-09-29
EP4388440A1 (en) 2024-06-26
GB2610165A (en) 2023-03-01
WO2023020764A1 (en) 2023-02-23

Similar Documents

Publication Publication Date Title
CN110493347A (zh) 基于区块链的大规模云存储中数据访问控制方法及系统
CN114982196A (zh) 利用区块链事务的通信协议
CN113875186A (zh) 知识证明
CN114008969A (zh) 包含在区块链中的交易的延展性
KR20220139871A (ko) 블록체인 네트워크에서 사용하기 위한 증명 서비스
CN113994628A (zh) 通过侧信道流式传输部分数据
CN115606150A (zh) 多层通信网络
CN114128216A (zh) 多输入交易
CN116157796A (zh) 警报账户
CN117836771A (zh) 使用区块链协调对等数据传输
JP2023502057A (ja) ブロックチェーントランザクションを使用したアイデンティティ検証プロトコル
CN114982195A (zh) 利用区块链事务的请求和响应协议
TW202345545A (zh) 用於證明與驗證子金鑰真實性之技術
CN117280653A (zh) 多方区块链地址方案
CN116057920A (zh) 连接到区块链网络
CN116671061A (zh) 节点版本控制
CN116745794A (zh) 区块链相关验证方法和系统
CN117836772A (zh) 使用区块链协调对等数据传输
CN115136560A (zh) 分层网络
WO2021165757A1 (en) Adapting connections of a layered network
CN117716365A (zh) 使用区块链形成对等连接
CN116249998A (zh) Quic事务
WO2023227381A1 (en) Coordinating peer-to-peer data transfer using blockchain
WO2023006573A1 (en) Forming peer-to-peer connections using blockchain
GB2614221A (en) Forming peer-to-peer connections using blockchain

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication