一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

通过侧信道流式传输部分数据的制作方法

2022-02-22 02:52:53 来源:中国专利 TAG:


1.本公开涉及在基于区块链的系统背景中通过“链下”侧信道的数据流式传输和交换。


背景技术:

2.区块链指分布式数据结构的一种形式,其中在对等(p2p)网络多个节点中的每个节点维护区块链副本。区块链包括一连串数据块,其中每个区块包括一个或多个交易。每个交易均可指向序列中的先前交易。交易可以通过“挖矿”提交至网络以包含在新的区块中。挖矿过程涉及多个竞相执行“工作量证明”的挖矿节点,即基于等待被包含到区块中的未决交易池解决加密难题。
3.区块链中的交易通常用于传递数字资产,即作为价值储存手段的数据。但是也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在交易输出中储存附加用户数据。现代区块链在单一交易中可储存的最大数据容量在不断增加,从而能够并入更复杂的数据。比如,这可用于在区块链中存储电子文件,或者甚至音频或视频数据。
4.网络中的每个节点都可以具有转发、挖矿和存储三种角色中的任意一种、两种或全部角色。每个转发节点将(有效的)交易传播到一个或多个其他节点,从而在它们之间将交易传播到整个网络节点。每个挖矿节点竞相将交易挖掘到区块中。每个存储节点储存自己的区块链挖矿区块副本。为将交易记录在区块链中,一方将交易发送到拟传播网络的一个节点。接收交易的挖矿节点可能会竞相将交易挖掘到新的区块中。每个节点被配置为遵守相同的节点协议,该协议将包含一个或多个条件来保证交易有效。无效交易将不会被传播或挖掘到区块中。假定交易已验证并因此在区块链上被接受,附加用户数据将作为不可改变的公共记录,继续储存在p2p网络中的各个节点处。
5.通常,成功解决工作量证明难题以创建最新区块的矿工会获得称作“生成交易”的交易奖励,生成新的数字资产金额。交易还可以可选地为成功的矿工指定额外的挖矿费。工作量证明鼓励矿工不要通过将双重支付交易包含在其区块中来欺骗系统,因为这需要大量的计算资源来挖掘区块,并且包含双重支付尝试的区块很可能不被其他节点所接受。
6.在“基于输出的”模型(有时称为“基于utxo的模型”)中,给定交易的数据结构包括一个或多个输入和一个或多个输出。任何可花费的输出都包括指定数字资产金额的元素,有时称为utxo(“未花费的交易输出”)。输出可进一步包括指定赎回输出条件的锁定脚本。每个输入均包括指向先前交易中的此类输出的指针,并且可进一步包括用于解锁所指向输出的锁定脚本的解锁脚本。因此设想一对交易,称为第一交易和第二交易(或“目标”交易)。第一交易包括指定数字资产金额的至少一个输出,包括定义解锁输出的一个或多个条件的锁定脚本。第二目标交易包括至少一个输入,包括指向第一交易的输出的指针,以及用于解锁第一交易的输出的解锁脚本。
7.在此等模型中,当第二目标交易被发送到p2p网络传播并且记录在区块链中时,每个节点应用的有效性条件之一是:解锁脚本满足第一交易的锁定脚本中定义的要求。目标
交易有效的另一个条件是:第一交易的输出尚未被另一个有效交易赎回。根据这些条件中的任何一个发现目标交易无效的任何节点都不会传播该交易,也不会包含该交易以挖掘到拟记录在区块链中的区块中。
8.例如,假设目标交易是将一定数量的数字资产从第一方(“爱丽丝”)传送给第二方(“鲍勃”)。先前第一交易的锁定脚本中定义的要求之一通常是:目标交易的解锁脚本中包含爱丽丝的加密签名。签名必须由爱丽丝签署目标交易的一部分来产生。
9.众所周知的技术还包括建立侧信道,有时称为“支付通道”,以在交易被广播到p2p网络以记录在区块链中之前“链下”交换双方之间的交易。侧信道与p2p覆盖网络分离,因此直到其中一方选择将交易发布到网络之前,通过侧信道发送的任何交易都不会(尚未)通过网络传播以记录在区块链中。标准的支付通道要求“资金交易”,由此双方可以有效地共同托管资金。资金交易被广播以建立通道,然后一旦提供相关服务,结算交易就会被广播以关闭通道,并花费资金交易。
10.目前已经有一些关于“小额支付通道”的方案,即一方(“爱丽丝”)向另一方(“鲍勃”)发送交易序列,以向鲍勃支付小额的分期付款。这不需要资金交易。目前至少有一种方案是利用侧信道对数据包中的电影数据进行流式传输。鲍勃会向爱丽丝发送数据包序列,作为对每个数据包的回应,爱丽丝会返回相应交易,然后鲍勃可以将该交易广播到网络从而获得相应电影数据包的付款。


技术实现要素:

11.但是,目前的小额支付通道方案的问题是:对于鲍勃发送给爱丽丝的每一个单独部分数据(例如,每个电影数据包),需要分别将相应单独交易广播到p2p网络并记录在区块链中。这要求更大的网络流量,并且也会导致包含多笔小额交易的区块链膨胀。需要建立这样的机制,既能避免资金交易的需要,又能避免网络流量剧增和包含多笔小额交易的区块链膨胀。
12.本公开提供了一种机制,该机制能够逐部分进行数据的流式传输并且对已流式传输数据的每个部分进行支付,但不管序列中数据部分的数量如何(例如,序列中从三至一百或者甚至数千部分的任何数字),实际同时只需将一对交易发送至网络并且记录在区块链中。第一接收方(“爱丽丝”)可以随时停止从第二发送方(“鲍勃”)流式传输数据,鲍勃将仍然能够根据每次只能广播单对交易到网络的发布原则获得迄今为止已流式传输数据部分的付款。相反,鲍勃可以随时停止发送数据部分,并且爱丽丝将只允许鲍勃获得迄今为止已发送数据部分的款项。
13.为实现这一点,根据本文公开的一个方面,提供了一种用于在至少部分节点网络中的每个节点维护的区块链副本中记录目标交易的方法,其中所述方法包括通过第二方的计算机设备执行以下操作。所述方法包括:在第一方和所述第二方之间,建立与所述网络分离的侧信道;通过所述侧信道将连续数据部分的序列流式传输到所述第一方,直至所述序列中的最新部分;响应于所述数据部分的各个相应部分,通过所述侧信道从所述第一方接收回第一交易的不同相应实例。所述目标交易包括输入,所述输入包括指向所述第一交易的第一输出的指针,所述目标交易进一步包括输出,所述输出指定从所述第一交易的所述第一输出转移至所述第二方的数字资产金额,其中所述金额在所述目标交易的每个连续实
例中均增加。所述方法进一步包括:导致所述第一交易的所述最新实例和所述目标交易的对应版本通过网络传播并且记录在区块链中,其中所述目标交易的对应版本中的所述指针指向所述序列中所述第一交易的最新实例中的所述第一输出。
14.如果两个交易都包含引用相同源交易(或“第零”交易)的相同输出(例如utxo)的输入,则可以说本文的两个(或多个)交易是(基本上)相同交易的多个实例。他们可在满足相同解锁条件的基础上赎回该输入。但是,他们可包含不同的输入签名(即,任一实例中的已签名消息都不相同)。不同的实例可以基本上用作相同的功能,但是用于不同的相应数据部分,并且金额递增。稍后讨论的一些实施例还可以允许目标交易的不同可能版本。如果两个交易都包含引用第一交易的相同输出(例如相同utxo)的输入(无论实例如何),则可以说两个交易是(基本上)相同交易的多个版本。不同版本可通过满足该输出的不同解锁条件来提供不同的功能。不同版本还可都包含相同的输入签名(即,任一实例中的已签名消息都相同)。
15.对于包括目标交易的多个交易中的每一个交易而言,至少部分网络节点被配置为在交易有效的情况下传播每个交易,并且至少部分节点被配置为在交易有效的情况下在该节点的区块链副本中记录每个交易。例如,目标交易的有效性通常取决于解锁第一交易的输出的解锁脚本。但是,网络中的每个节点也被配置为使得一旦其中一个实例在任何给定节点上被验证,则该节点会视其他实例为无效实例,并且因此不会由该节点传播和记录在区块链中。而且,一旦目标交易的一个版本在给定节点上被验证,则该节点会视目标交易的任何其他版本为无效版本,并且因此不会由该节点传播和记录在区块链中。
16.因为每个实例具有指向之前相同的源交易(或者“第零”交易,即下文示例中所述的tx0)的相同输出的输入,所以第一交易的实例(例如tx1、tx2、tx3……
)会被每个网络节点视为基本相同交易的实例。这意味着一旦第一交易的一个实例(例如,tx1、tx2、
……
中的一个)被挖掘,则会消耗源交易(例如tx0)的输出,并且因此任何其他实例均无法消耗该输出。因此,只有一个实例可以记录在区块链中。此外,一旦发现第一交易的一个实例在任一给定节点上被目标交易(例如tx
p
或tx
p’)的任何版本有效赎回,则试图赎回第一交易的任何实例的任何进一步目标交易都将被该节点视为无效,并且因此不会由该节点传播和记录在区块链中。
17.一旦目标交易(例如tx
p
或tx
p’)的任何版本通过p2p网络广播并且在给定节点上被发现有效地指向第一交易的特定实例(不同的实例仅定义不同的金额)的第一输出,这意味着该输出无法再次被任何进一步版本赎回,因为只有一笔目标交易能够有效赎回该输出。即,一旦发现第一交易(tx1、tx2、tx3……
)的一个实例在任一给定节点上被目标交易(例如tx
p
或tx
p’)有效赎回,则试图赎回第一交易的任何实例的任何进一步目标交易都将被视为无效,并且因此不会由该节点传播和记录在区块链中。尽管如此,因为每个实例中的支付也随着每一部分数据的交换而增加,第二方(“鲍勃”)必须要做的是发送目标交易的一个版本(例如tx
p’),以赎回拟传播并且记录在区块链中的第一交易的最后或最近的实例txn。然后,他将收到基于单对交易发送至该点的全部数据部分的全额款项。
18.如果爱丽丝在序列结束之前在任意点停止发送第一交易(tx1、tx2、tx3……
)的实例,鲍勃仍然可以选择停止向爱丽丝发送进一步的数据部分,并将目标交易(例如tx
p
)的版本发送到网络,以赎回在该点之前发送的数据部分的款项(因此仅丢失发送的最新数据部
分)。相反,如果鲍勃在任意点停止发送数据部分,爱丽丝则可以选择停止发送第一交易txi的进一步实例,并且鲍勃将只能赎回爱丽丝迄今为止收到的数据部分的款项。
19.在特定的可选实施方式中,该方法可包括第二方通过侧信道从第一方接收第一交易;第一交易可包括指定输入金额的一个或多个第一输入,其中第一交易的第一输出指定第一款项,第一交易进一步包括一个或多个指定一个或多个进一步款项的进一步输出,使得款项的总金额大于输入金额,并且第二方从第一方接收的第一交易不包括弥补差额的其他输入。例如,该进一步输出可包括第二输出和第三输出,第二输出指定向第一方支付的等于输入金额减去第一款项的第二款项,第三输出指定向第二方支付的等于第二款项的第三款项。如果指定付款总额大于总输入金额,网络的节点将因为无效而拒绝第一交易。在此等实施例中,该方法包括第二方向第一交易的最新或最终实例添加第二输入以弥补差额,并且发送添加第二输入的第一交易,以通过网络传播并且记录在区块链中。
20.这可以防止第一方(“爱丽丝”)通过发送她自己的目标交易来赎回一个较早的实例来欺骗系统,从而防止鲍勃赎回一个稍后实例(或者实际上是任一实例),因为这样做时爱丽丝不得不添加额外输入,从而使其产生更多的数字资产。因此,不值得爱丽丝欺骗系统。
21.在进一步可选的实施例中,至少第一交易的最终实例的第一输出可包括锁定脚本,该锁定脚本指定多个备选条件,用于解锁第一交易的第一输出,包括至少第一和第二条件,并且目标交易的输入可包括解锁脚本。在此等实施例中,在被发送以通过网络传播并且记录在区块链中的目标交易的对应版本中,锁定脚本被配置为基于满足所述备选条件中的第二条件,而非第一条件,解锁第一交易的第一输出。
22.第一交易的各个实例的输出可包括指定多个备选条件的锁定脚本。在这种情况下,该方法可包括提供一种功能,可以使在最终实例前第一交易的当前接收实例和指向当前实例的目标交易的第一版本通过网络传播并且记录在区块链中,其中第一版本中的锁定脚本被配置为基于满足第一条件解锁第一交易的第一输出。
23.比如,所述功能可使第二方选择在序列中的任意点手动选择,使第一交易的当前接收实例和目标交易的第一版本通过网络传播并且记录在区块链中。此外/或者,所述功能可被配置为如果第一方停止通过序列发送第一交易的实例,则自动使第一交易的当前实例和目标交易的第一版本通过网络传播并且记录在区块链中。
24.目标交易的有效性取决于根据所述条件中的任何一个条件解锁第一交易的输出的解锁脚本。但是,一旦其中一个版本在任何给定节点上被验证,则该节点会视其他版本为无效版本,并且因此不会由该节点传播或记录在区块链中。
25.因此,第二方(“鲍勃”)不会发送两个版本以传播并且记录在区块链中,因为两个版本都无法有效地赎回第一交易。他基于满足第二条件发送其偏好的拟传播和记录的第二版本,但第一版本存在的事实可以使其在未满足第二版本的必要条件的情况下,转向记录第一版本。比如,第一条件中可能要求目标交易的解锁脚本中包含数据有效载荷,这会鲍勃受到处罚(例如挖矿费与数据量成比例,和/或因为数据是鲍勃的专有数据,将数据存放在区块链上将使数据公开)。另一方面,第二条件可能要求爱丽丝的签名,因此需要爱丽丝的授权。
26.根据本文公开的又一方面,提供了一种执行该方法的程序,和/或被编程用于执行
该方法的第二方的计算机设备。
附图说明
27.为了帮助理解本公开的实施例并显示如何实施此等实施例,现将仅通过举例的方式参考附图进行说明,其中:
28.图1是实现区块链的系统的示意性框图,
29.图2示意性地示出了可记录在区块链中的交易的一些示例,
30.图3是实现区块链的另一系统的示意性框图,
31.图4是客户端应用程序的示意性框图,
32.图5是可由图4的客户端应用程序表示的示例性用户界面的示意性模型,
33.图6是一组交易的示意图,
34.图7是示出一种流式传输数据的方法的信令图,
35.图8是示出在图7的方法的示例性实施方式中第一交易的实例的输入和输出值的图,以及
36.图9是在图7的方法中第一交易的示例性交易格式。
具体实施方式
37.如前所述,目前针对支付通道和小额支付已经提供了一些方案。但是,这些都要求通过p2p网络发布单独交易并且在区块链中记录每个单独款项的增量(即在流式传输时,针对每个已发送的单独数据部分)。这会引起p2p网络上网络阻塞,还会造成包含多笔小额支付交易的区块链膨胀。
38.本公开提供了一种机制,由此为了回应从鲍勃获得的每一部分数据,爱丽丝可以通过侧信道向鲍勃退回给定交易的不同实例,其中每个支付款项都在递增。鲍勃只能在该交易的一个实例中要求付款。
39.进一步地,为了建立互信,目前大多数方案都要求资金交易。支付通道的任何过早关闭都会导致资金被锁定一段时间。或者,要求变更共识规则,即引入新的能够破坏协议稳定性的操作码。其他一些则具有到期时间。但是,当在通道建立过程中考虑开销时,到期时间便成了一个问题。
40.本文公开的实施例提供了一种选项,即在建立支付通道时可以不需要资金交易。相反,参与者能够按自己的意愿选择加入和离开通道。所公开的技术也可以利用现有的交易和节点协议实现。
41.实施例可以使用延展性的概念。延展性指在不导致整个交易无效的情况下修改交易的至少一部分的能力。通过相关形式的加密签名(例如ecdsa签名)签署的交易中的任何信息都不存在延展的可能性。
42.假设目标交易是将一定数量的数字资产从第一方(“爱丽丝”)传送给第二方(“鲍勃”)。先前第一交易的锁定脚本中定义的条件之一通常是:目标交易的解锁脚本中包含爱丽丝的加密签名。签名必须由爱丽丝签署目标交易的一部分来产生。至于是哪一部分,可以由锁定脚本灵活定义,或者可以是节点协议的固有特性,具体取决于所使用的协议。然而,拟签署的部分都通常不包含目标交易的一些其他部分,例如解锁脚本本身的部分或全部。
43.这使得“延展性”成为了可能。即在挖矿之前,目标交易中未签署的部分可进行修改(“延展”),而不会使交易无效。延展性通常是密码学中的一个已知概念。利用延展性,消息可以被恶意修改但仍被认为是真实的,所以延展性通常被视为存在安全问题。在区块链的背景下,延展性并不一定构成问题,而只不过是一种奇妙的人类产物。利用延展性,可以修改交易的某个部分而不会使其无效。与延展性有关的任何安全问题均由于不恰当的实施方式引起,而不是协议本身。
44.本文公开的实施例可选地采用延展性作为一种有用的特性如何推进快速、安全且免信任的支付通道。具体的思路是确定交易中哪个或哪些部分没有或不必签名(例如,通过ecdsa签名)。公开的方案将利用以下事实:交易的每个输入的解锁脚本(例如

scriptsig’字段)中的任何内容都没有任何签名。实施例还可以利用sighash标志,从而使修改交易更灵活且不会使交易无效。
45.下面举个示例。当在区块链上进行数据交换时,常见的做法是通过哈希难题来促使数据显示和同意付款同时发生。为了避免这种情况的发生,可以构建交易来要求付款,使得只需满足下列两种条件的其中之一即可:i)提供“数据 鲍勃的签名”;或者ii)提供“爱丽丝的签名 鲍勃的签名”。
46.鲍勃将通过提供数据和他的签名构建交易来要求付款,并且将该交易发送至爱丽丝。然后,爱丽丝用她的签名替代该数据,并将该交易广播到网络。或者,鲍勃获得爱丽丝的签名,用它替代该数据,并且广播到网络。无论采用哪种方式,由于该数据并不构成经鲍勃签名的消息的一部分,因此用爱丽丝的签名替代该数据将不会使该交易无效。此外,因为输入满足条件ii),所以该交易仍然有效。如果爱丽丝未将该交易广播到网络或者未提供她的签名,那么鲍勃仍然可以按照条件i)将原始交易进行广播来要求付款(因为鲍勃必须上传相当大的数据和/或专有数据,所以这并不是优选的)。可通过请求确认、折扣激励的方式鼓励爱丽丝提供她的签名,或者鼓励爱丽丝对鲍勃提供的良好服务进行奖励。
47.系统概述
48.图1示出了用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成对等(p2p)覆盖网络106。每个节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或多个处理器的处理装置,例如一个或多个中央处理单元(cpu)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(fpga)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(ssd)等电子媒介、闪存或电可擦只读存储器和/或诸如光盘驱动器等光学介质。
49.区块链150包括一系列数据区块151,其中p2p网络160多个节点中的每个节点维护区块链150的相应副本。链中的每个区块151均包括一个或多个交易152,其中该上下文中的交易指一种数据结构。数据结构的性质将取决于用作交易模型或计划的一部分的交易协议类型。给定的区块链通常全程使用一个特定的交易协议。在一种常见的交易协议中,每个交易152的数据结构至少包括一个输入和至少一个输出。每个输出指定一个金额,该金额表示属于输出被加密锁定的用户103的数字资产值(需要该用户的签名进行解锁,从而进行赎回
或花费)。每个输入指向先前交易152的输出,从而链接这些交易。
50.至少一些节点104扮演转发节点104f的角色,这些节点转发并因此传播交易152。至少一些节点104扮演挖掘区块151的矿工104m角色。至少一些节点104扮演存储节点104s(有时也称为“完整副本”节点)的角色,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。每个矿工节点104m还维护等待被挖掘到区块151中的交易152池154。给定节点104可以是转发节点104、矿工104m、存储节点104s或其中两个节点或所有节点的任意组合。
51.在给定的当前交易152j中,输入(或每个输入)包括指针,该指针引用交易序列中先前交易152i的输出,指定该输出将在当前交易152j中被赎回或“花费”。通常而言,先前交易可以是池154或任何区块151中的任何交易。为了保证当前交易有效,当创建当前交易152j或甚至将当前交易152j发送到网络106时,先前交易152i不一定要存在,但是先前交易152i必须存在并且有效。因此,本文中的“先前”系指通过指针连接的逻辑序列中的前期,不一定是时间序列中创建或发送的时间。因此,并不一定排除交易152i,152j是无序创建或发送的可能(详见下文中有关孤立交易的描述)。先前交易152i同样可以被称为先行或前期交易。
52.当前交易152j的输入还包括先前交易152i输出被锁定的用户103a的签名。反过来,当前交易152j的输出可以加密锁定至新用户103b。因此,当前交易152j可将先前交易152i输入中定义的金额转移到当前交易152j输出中定义的新用户103b。在某些情况下,交易152可具有多个输出,以在多个用户间分割输入金额(其中一个可以是原始用户103a,以便进行变更)。在某些情况下,交易还可以具有多个输入,将一个或多个先前交易的多个输出的金额汇总在一起,并重新分配到当前交易的一个或多个输出。
53.上述可称为“基于输出型”交易协议,有时也称为未花费的交易输出(utxo)型协议(其中输出被称为utxo)。用户的总余额不是用区块链中储存的任何一个数字定义;相反,用户需要特殊“钱包”应用程序105,以整理该用户的所有utxo值,这些utxo值分散在区块链151的许多不同交易152中。
54.作为基于账户型交易模型的一部分,另一种类型的交易协议可称为“基于账户型”协议。在基于账户的情况下,每个交易均不通过参考过去交易序列中先前交易的utxo来定义转移的金额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。本公开涉及一种基于输出的模型,而不是基于账户的模型。
55.无论采用何种类型的交易协议,当用户103希望执行新交易152j时,其希望将新交易从其计算机终端102发送至p2p网络106的一个节点104(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点104根据应用于每个节点104的节点协议检查交易是否有效。节点协议的详细信息将与相关区块链150中使用的交易协议类型相对应,一起形成整个交易模型。节点协议通常要求节点104检查新交易152j中的加密签名是否与预期签名相匹配,这取决于交易152的有序序列中的上一个交易152i。在基于输出型案例中,这可包括检查新交易152j输入中包含的用户加密签名是否与新交易花费的先前交易152i输出中定义的条件相匹配,其中该条件通常包括至少检查新交易152j输入中的加密签名是否解锁新交易输入所指向的上一个交易152i的输出。在一些交易协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独固定,或可通过其
组合固定。无论采用哪种方式,如果新交易152j有效,则当前节点将新交易转发至p2p网络106中一个或多个其他节点104。这些节点104中的至少一些还作为转发节点104f,根据相同的节点协议应用相同的测试,从而将新交易152j转发至一个或多个进一步的节点104,依此类推。通过这种方式,新交易在整个节点104网络中进行传播。
56.在基于输出型模型中,给定输出(例如:utxo)是否花费的定义是,根据节点协议,其是否通过另一个随后交易152j的输入有效赎回。交易有效的另一个条件是其试图花费或赎回的先前交易152i的输出尚未被另一个有效交易花费/赎回。同样,如果无效,交易152j将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一个交易的输出花费超过一次。
57.除了验证外,至少部分节点104m在挖矿过程中争先创建交易区块,该挖矿过程以“工作量证明”为基础。在挖矿节点104m,将新交易添加至区块中尚未出现的有效交易池。然后,矿工争相通过尝试解决加密难题以组装交易池154中的新的有效交易152区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与交易池154并置且进行散列时,哈希值的输出满足预定条件。例如,预定可以是哈希值的输出具有预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而解决难题时各节点104m需要消耗大量的处理资源。
58.解决难题的第一矿工节点104m在网络106上宣布难题解决,提供解决方案作为证据,然后网络中的其他节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,检查哈希值的输出以满足条件便比较简单)。基于在每个节点检查获胜者公布的解决方案,解决难题的获胜者的交易池154之后由作为存储节点104s的至少部分节点104记录为区块链150中的新区块151。区块指针155还分配给指向链中之前创建的区块151n-1的新区块151n。工作量证明有助于降低重复花费的风险,因为创建新区块151需要大量工作,且包含重复花费的任何区块都可能被其他节点104拒绝,因此挖矿节点104m受到激励,不允许在其区块中包含双重花费。一旦创建后,则不可修改区块151,因为其根据相同的协议在p2p网络106中的每个存储节点104s进行识别和维护。区块指针155还向区块151施加顺序。因为交易152记录在p2p网络106各存储节点104s的有序区块中,因此提供了不可改变的交易公共分类账。
59.请注意,不同的矿工104m在任何给定的时间争相解决难题可能是基于任何给定时间的未挖矿交易池154的不同快照,具体取决于何时开始寻找解决方案。解决相应难题的人员首先定义下一个新区块151n中包含的交易152,并更新当前的未挖矿交易池154。然后,矿工104m继续争相从新定义的未完成池154中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两个矿工104m彼此在很短的时间内解决难题,使得传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。
60.在大部分区块链中,获胜矿工104m会自动获得特殊类型的新交易作为奖励,该新交易创建新的数字资产值(与将数字资产金额从一个用户转移至另一个用户的正常交易截然相反)。因此,获胜节点被称为“挖到”了一些数字资产。这种特殊类型的交易有时称为“生成”交易。其自动形成新区块151n的一部分。该奖励可激励矿工104m参与工作量证明竞赛。通常情况下,常规(非生成)交易152还将在其一个输出中指定附加交易费用,以进一步奖励创建包含交易所在区块151n的获胜矿工104m。
61.由于挖矿时涉及计算资源,通常至少每一个矿工节点104m采用服务器的形式,该服务器包括一个或多个物理服务器单元,甚至整个数据中心。每个转发节点104m和/或存储节点104s还可以采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可采用用户终端或一组联网的用户终端的形式。
62.每个节点104的存储器均储存被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角色和处理交易152。应当理解的是,本文节点104的任何行动均可通过在相应计算机设备的处理装置上运行的软件执行。此外,本文的“区块链”一词是指一般技术类型的通用术语,不限于任何特定专有区块链、协议或服务。
63.同时连接至网络101的还包括作为消费用户角色的多方103中的每一方的计算机设备102。他们作为交易中的付款人和收款人,但不一定代表其他方参与挖矿或传播交易。它们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,第二方103b及其相应的计算机设备102b。应当理解的是,更多这样的当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。为进行说明,本文中第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
64.每一方103的计算机设备102包括相应的处理装置,其包含一个或多个处理器,例如一个或多个中央处理单元、中央处理单元、其他加速器处理器、特定应用程序处理器和/或现场可编程门阵列。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘等电子媒介、闪存或电可擦只读存储器和/或诸如光盘驱动器等光学介质。每一方103计算机设备102上的存储器储存包含被设置在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,本文给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。给定方103的计算机设备102还可包括一个或多个其他网络资源,诸如通过用户终端访问的云计算资源。
65.客户端应用程序或软件105最初可通过适当的计算机可读存储介质提供至任何给定方103的计算机设备102,例如从服务器下载,或提供在移动式存储设备上,诸如可移动固态硬盘、闪存密钥、可移动电可擦只读存储器、可移动磁盘驱动器、软盘或磁带、光盘(诸如cd或dvd rom)或可移动光驱等。
66.客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应的用户方103创建、签署和发送拟在整个节点网络104中传播的交易152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产金额。在基于输出型系统中,该第二功能包括整理分散在区块链150中属于相关方的各种152交易的输出中定义的金额。
67.每个计算机设备102上的客户端应用程序105的实例可操作地耦合到p2p网络106的至少一个转发节点104f。这可以启用客户端105的钱包功能,将交易152发送至网络106。客户端105还可联系一个、一些或所有存储节点104,以在区块链150查询相应方103为接收
方的任何交易(或实际上检查区块链150中的其他方交易,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供交易信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据交易协议制定和发送交易152。每个节点104在转发节点104f转发交易152的情况下运行被配置成根据节点协议验证交易152的软件,以在整个网络106中进行传播。交易协议和节点协议相互对应,给定交易协议和给定节点协议一起实现给定的交易模型。区块链150中的所有交易152均采用相同的交易协议(尽管交易协议可允许其内存在不同的交易子类型)。网络106中的所有节点104采用相同的节点协议(尽管其可根据子类型的规则区分处理不同的交易子类型,且不同的节点还可扮演不同的角色,因此实现协议的不同对应方面)。
68.如前所述,区块链150包括一些列区块151,其中每个区块151包括一组已由先前讨论的工作量证明过程创建的一个或多个交易152。每个区块151还包括区块指针155,其指向链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效交易池154,其等待通过工作量证明过程包含在新的区块中。每个交易152包括指向上一个交易的指针,以定义交易序列的顺序(注:交易152的序列可进行分支)。区块151的链一直追溯到创始区块(gb)153,该创始区块是链中的第一个区块。早期链150中的一个或多个原始交易152指向创始区块153,而非先前交易。
69.当给定方103(比方说爱丽丝)希望发送拟包含在区块链150的新交易152j时,她根据相关的交易协议(使用其客户端应用程序105中的钱包功能)制定新的交易。然后,她将交易152从客户端应用程序105发送至其连接的一个或多个转发节点104f中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104f。当任何给定节点104接收新交易152j时,其根据节点协议及其相应的角色进行处理。这包括首先检查是否新接收的交易152j符合“有效”的特定条件,具体示例稍后将详细描述。在一些交易协议中,验证条件可通过交易152中包含的脚本在每个交易的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
70.如果新接收的交易152j通过有效性测试(即:经过“验证”的条件下),任何接收交易152j的存储节点104s将把新验证交易152添加至节点104s维护的区块链150副本的池154中。进一步地,任何接收交易152j的转发节点104f随后将传播验证交易152至p2p网络106中的一个或多个其他节点104。由于每个转发节点104f应用相同的协议,因此假定交易152j有效,这意味着交易很快将通过整个p2p网络106进行传播。
71.一旦进入一个或多个存储节点104维护的区块链150副本的池154中,矿工节点104m将开始竞相解决包括新交易152的池154的最新版本中的工作量证明难题(其他矿工104m可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终有人将解决包含爱丽丝交易152j的池154的一部分存在的难题)。一旦包括新交易152j的池154完成工作量证明,其将不可改变地成为区块链150中区块151的一部分。每个交易152包括指向早前交易的指针,因此交易的顺序也被不可改变地记录下来。
72.图2示出了示例性交易协议。这是基于utxo协议的示例。交易152(简称“tx”)是区块链150的基本数据结构(每个区块151包括一个或多个交易152)。下文的描述参考基于输出或基于“utxo”的协议。但这并不限于所有可能的实施例。
73.在基于utxo的模型中,每个交易(“tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费的交易输出(utxo),其可用作另一个新交易的输入202来源(如果utxo未被赎回)。utxo指定了数字资产金额(价值存储手段)。其还可包含其来源交易的交易id以及其他信息。交易数据结构可包括标题201,其可包括输入字段202和输出字段203的大小指示符。标题201还可包括交易的id。在实施例中,交易id是交易数据(不含交易id本身)的哈希值,且储存在提交至矿工104m的原始交易152的标题201中。
74.即爱丽丝103a希望创建转移相关数字资产金额至鲍勃103b的交易152j。在图2中,爱丽丝的新交易152j标记为“tx
1”。其获取在序列中先前交易152j输出203锁定至爱丽丝的数字资产金额,并至少转移一部分此等金额至鲍勃。图2中的先前交易152j标记为“tx
0”。tx0和tx1只是一个任意的标签。其不一定意味着tx0指区块链151中的第一交易和tx1指池154中的下一个交易。tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)交易。
75.当爱丽丝创建其新交易tx1时,或至少在她将其发送至网络106时,先前交易tx0可能已经验证并包含在区块链150中。此时可能已包含在一个区块151中,或可仍在池154中等待,在这种情况下,其将很快被包括在新块151中。或者,tx0和tx1可以创建并一起发送至网络102,或如果节点协议允许缓冲“孤立”交易,tx0甚至可以在tx1之后发送。本文交易顺序上下文中使用的“先前”和“后续”一词指交易中指定的交易指针所定义的序列中的交易顺序(哪个交易指向哪个其他交易等等)。它们同样可以用“前期”和“后续”、“先行”和“后继”、“上代”和“子代”或者诸如此类的词替代。这不一定指其创建、发送至网络106或到达任何给定节点104的顺序。然而,指向先前交易(先行交易或“父交易”)的后续交易(后继交易或“子交易”)在父交易进行验证之前不会进行验证。在父交易之前到达节点104的子交易被视为孤立交易。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父交易。
76.先前交易tx0的一个或多个输出203中的一个包括特定的utxo,标记为utxo0。每个utxo包括指定utxo表示的数字资产金额的值以及锁定脚本,该锁定脚本定义后续交易输入202中解锁脚本必须满足的条件,以供后续交易进行验证,从而成功赎回utxo。通常情况下,锁定脚本将金额锁定至特定方(该金额的交易的受益人)。即,锁定脚本定义解锁条件,通常包括以下条件:后续交易输入中的解锁脚本包括先前交易被锁定一方的加密签名。
77.锁定脚本(亦称scriptpubkey)是节点协议识别的域特定语言中写入的一段代码。此等语言的特定示例称为“脚本”(s大写)。锁定脚本指定花费交易输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在交易的输出中。解锁脚本(亦称scriptsig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在交易的输入202中。
78.因此在示出的示例中,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》,其包括爱丽丝的加密签名,该签名由爱丽丝将其密钥
对中的私钥应用到预定的部分数据进行创建(有时在密码学中称为“消息”)。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
[0079]
当新交易tx1到达节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或多个标准)。在实施例中,这涉及并置两个脚本:
[0080]
《sig pa》《pa》||[checksig pa]
[0081]
其中“||”表示并置,“《

》”表示将数据放在堆栈上,“[

]”表示由解锁脚本组成的函数(在此示例中指基于堆栈的语言)。同样地,使用普通堆栈,脚本就可以连续运行,而不是连接脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥pa(包含在tx0输出的锁定脚本中),以验证tx1输入中的锁定脚本是否包含爱丽丝签署预期部分数据时的签名。预期部分数据本身(“消息”)也需要包含在tx0中,以便执行此验证。在实施例中,签署的数据包含整个tx0(因此需要包含一个单独的元素,明文指定签署的部分数据,因为其本身便存在)。
[0082]
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可验证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希处理,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够验证签名。因此,需要注意的是,本文中提及特定数据片段、部分交易内容或诸如此类的签名可表示对该数据片段或部分交易内容的哈希值进行签名。
[0083]
如果tx1中的解锁脚本满足tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在tx1中提供了爱丽丝的签名并进行验证),则节点104认为tx1有效。如果是存储节点104s,这意味着其将添加至等待工作量证明的交易154池。如果是转发节点104f,则其将交易tx1转发到网络106中的一个或多个其他节点104,从而将在整个网络中传播。一旦tx1被验证并包含在区块链150中,这将把tx0中的utxo0定义为已花费。请注意,tx1仅在花费未花费的交易输出203时才有效。如果试图花费另一交易152已经花费的输出,则即使满足所有其他条件,tx1也将无效。因此,节点104还需要检查先前交易tx0中引用的utxo是否已经花费(已经形成另一有效交易的有效输入)。这是为何区块链150对交易152施加定义的顺序很重要的原因之一。在实践中,给定节点104可维护单独的数据库,标记已花费交易152的utxo 203,但最终定义utxo是否已花费取决于是否在区块链150中形成了另一有效交易的有效输入。
[0084]
请注意,在基于utxo的交易模型中,给定utxo需要作为一个整体使用。不能“留下”utxo中定义为已花费的一部分金额,而同时又花费另一部分。但utxo的金额可以在下一个交易的多个输出之间分割。例如,tx0的utxo0中定义的金额可以在tx1中的多个utxo之间分割。因此,如果爱丽丝不想将utxo0中定义的所有金额都给鲍勃,她可以使用剩余部分在tx1的第二输出中自己找零钱,或者支付给另一方。
[0085]
在实践中,爱丽丝将通常还需要包含获胜矿工的费用,因为现在仅靠生成交易的奖励通常不足以激励挖矿。如果爱丽丝不包括矿工费,tx0可能会被矿工节点104m拒绝,因此,尽管技术上有效,但仍然不会传播并包含在区块链150中(如果矿工不愿意,矿工协议不会强制矿工104m接受交易152)。在一些协议中,挖矿费不需要其自身的单独输出203(即不
需要单独的utxo)。相反,输入202指向的总金额与给定交易152的输出203指定的总金额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向utxo0的指针是tx1的唯一输入,而tx1只有一个输出utxo1。如果utxo0中指定的数字资产的金额大于utxo1中指定的金额,则该差额将自动转移至获胜矿工104m。此外/或者,这不一定排除矿工费可以在其自身交易152的一个utxo 203中明确规定。
[0086]
同时,还应当注意,如果给定交易152的全部输出203中指定的总金额大于其全部输入202所指向的总金额,则说明大多数交易模型中的交易是无效的。因此,此等交易将不会被传播,也不会被挖掘到区块151中。
[0087]
爱丽丝和鲍勃的数字资产由区块链150中其任何交易152锁定的未花费utxo组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种交易152的utxo中。区块链150中均不定义给定方103的总余额。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后交易中尚未花费的不同utxo值整理在一起。通过查询任何存储节点104s储存的区块链150副本可实现这一点,例如与相应方的计算机设备102最近或最佳连接的存储节点104s。
[0088]
请注意,脚本代码通常用示意图表示(即,非精确的语言)。例如,写入[checksig pa]意味着[checksig pa]=op_dup op_hash160《h(pa)》op_equalverify op_checksig。“op_...”指脚本语言的特定操作码。op_checksig(又称“checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ecdsa)验证签名的有效性。在运行时,移除脚本中任何出现的签名(

sig’),但在由

sig’输入验证的交易中仍保留附加要求,诸如哈希难题。再如,op_return是脚本语言操作码,用于创建交易的不可花费输出,其可以将元数据储存在交易中,从而将元数据不可改变地记录在区块链150中。例如,元数据可包括需储存在区块链中的文件。
[0089]
签名pa是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的椭圆曲线数字签名算法。数字签名对特定的数据段进行签名。在实施例中,对于给定交易,签名将签署部分交易输入、全部或部分交易输出。其签署输出的特定部分取决于sighash标志。sighash标志是包含在签名末尾的4字节代码,用于选择签署的输出(并因此在签名时固定)。
[0090]
锁定脚本有时称为“scriptpubkey”,指其包括相应交易锁定方的公钥。解锁脚本有时称为“scriptsig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,utxo赎回的条件并不一定包括验证签名。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
[0091]
图3示出了用于实现区块链150的系统100。除了附加的通信功能外,该系统100与图1所示的内容基本相同。爱丽丝和鲍勃的每台计算机设备102a,120b上的客户端应用程序分别包括附加通信功能。也就是说,这可使爱丽丝103a建立与鲍勃103b分离的侧信道301(在任何一方或第三方的鼓动下)。侧信道301能够独立于p2p网络实现数据交换。此等通信有时候被称为“链下”通信。比如,当交换爱丽丝与鲍勃之间的交易152时不想将该交易(仍未)发布到p2p网络106或挖掘到区块150,可以采用此等通信,直到其中一方选择将该交易广播到网络106。此等侧信道301有时候被用作例如“支付通道”。
[0092]
通过与p2p覆盖网络106相同的分组交换网络101可建立侧信道301。此外/或者,通过诸如移动蜂窝网络等不同网络、或者诸如本地无线网络等局域网、或者甚至爱丽丝和鲍
勃的设备1021,102b之间的直接有线或无线连接可以建立侧信道301。一般而言,本文所指的侧信道301可包括经由一种或多种联网技术或者通信介质的任何一个或多个链路,用于“链下”(即独立于p2p覆盖网络106)交换数据。在多个链路被使用的情况下,整个链下链路的捆绑或集合才可以被称为侧信道301。因此,需要注意的是,虽然爱丽丝和鲍勃通过侧信道301对特定的信息或数据片段或者诸如此类进行交换,但这并不一定意味着所有这些数据片段必须通过相同的链路或甚至同一类型网络进行发送。
[0093]
示例性定义
[0094]
下面是一些实施方式中可能采用的示例性定义。需注意,这些示例性定义并不会完全限制所有可能的实施方式,而只是为了帮助理解特定的可能实施方式,诸如可能用在下文所述的示例性用例的一些可能实施方式中的定义。
[0095]
定义1:交易。交易系指包含输入和输出的消息。它还可以包括协议版本号和/或锁定时间。协议版本是指交易协议的版本。锁定时间将会稍后单独进行解释。
[0096]
定义2:输入。交易的输入构成有序列表。该列表中的每一个条目包含输出点(未花费的交易输出的标识符)和scriptsig(解锁脚本)。它还可以包括序列号。
[0097]
定义3:输出。交易的输出构成有序列表。该列表中的每一个条目包含数值(以基本单位表示的数字资产金额)和scriptpubkey(锁定脚本)。
[0098]
定义4:输出点。输出点通过交易idtxid和索引号i进行唯一定义。它是指交易txid输出中的第i个条目,表示未花费的交易输出(utxo)的唯一位置。此处“未花费的”一词指输出点从未在任何有效的后续交易中出现过。
[0099]
定义5:scriptsig。这是解锁或花费与给定输出点对应的utxo所需的信息。在标准的交易中,这种信息通常是指ecdsa签名。因此,该脚本被称为'scriptsig'。但是,解锁输出点所需的信息可以是满足utxo锁定条件的任何数据。
[0100]
定义6:scriptpubkey。这是指锁定特定utxo相关资金的脚本。当且仅当scriptsig被添加到scriptpubkey中,并且组合脚本的执行显示为true时,该资金才能被解锁并且被花费。如果不是这种情况,那么交易无效并且将会被拒绝。由于该脚本通常包含用于标准交易的ecdsa公钥的哈希值,所以它被称为“scriptpubkey”。
[0101]
在下一个定义中,如果引用签署输入,则意味着签署不包括scriptsig部分(见定义2)的输入。
[0102]
定义7:sighash标志。当提供ecdsa签名时,还需要添加下列sighash标志之一。
[0103]
[0104]
当把延展性作为特性讨论时,要寻找未通过ecdsa签名签署的交易中的信息。除了可以从拟签署的消息中排除的输入和输出之外,scriptsig的内容始终被排除在外。这是因为scriptsig被设计用作签名的占位符。
[0105]
定义8:区块链时间锁。通常而言,交易中可使用两种时间锁:绝对时间锁和相对时间锁。绝对时间锁指定具体的时间点,发生在这个时间点之后的一些信息会被认为是有效的;而相对时间锁指定时间段,发生在这个时间段之后的一些信息才会被认为有效。在这两种情况下,当使用区块链时间锁时,可以用区块高度(挖到的区块数量)或经过时间(例如unix时间)来代理时间。
[0106]
区块链时间锁的另一个属性在于它们出现的位置以及它们所应用的交易方面。在这种意义上,又可以划分为两个类别时间锁:交易级时间锁,用于锁定整个交易;和脚本级时间锁,用于解锁特定的输出。这两个类别的时间锁均可用于实现绝对或相对时间锁。下表汇总了四种实现可基于上述属性创建的时间锁的机制。
[0107][0108]
定义9:nlocktime。锁定时间(nlocktime)是指非负整数,表示区块高度或特定的unix时间。如果交易只能在指定的区块或指定的时间后才能被添加到区块链中,那么从这个意义上讲,则是交易级时间锁。如果nlocktime被设置为小于500,000,000,则视为区块高度。如果其被设置为等于或大于500,000,000,则视为表示unix时间。也就是说,1970年1月1日00:00:00之后的秒数。
[0109]
例如,如果当前最高区块的高度为3,000,000,并且锁定时间被设置为4,000,000,则在挖掘第400万个区块之前矿工不会考虑该交易。
[0110]
定义10:nsequence。序列号(nsequence)作为消息,表示交易版本。修改交易会使序列号增大。nsequence的最大值是2
32-1,并且通常而言,序列号将默认设置为该最大值,以表示交易已完成。交易的每个输入都定义nsequence值,该值指定输入所引用的utxo被包含在区块中之后到该输入可用作有效输入之前所需的时间段。如果矿工看到两笔交易有相同的输入,那么该矿工会选择序列号更大的交易。但是,这个特性通常已被禁用。
[0111]
定义11:checklocktimeverify(op_cltv)。op_checklocktimeverify(op_cltv)操作码是脚本级绝对时间锁,可用于锁定未来某个特定时间或区块高度的交易的特定输出。如果utxo被引用到交易中的当前unix时间或区块高度小于utxo被创建的unix时间或区块高度以及在op_cltv操作码之前指定的参数,那么花费交易的脚本执行将失败。
[0112]
定义12:checksequenceverify(op_csv)。op_checksequenceverify(op_csv)操作码是脚本级相对时间锁,可用于锁定未来某个特定时间段或区块数量的交易的特定输出。该与op_cltv的操作类似,不同之处在于提供给op_csv的参数表示相对时间。如果utxo被引用到交易中的当前unix时间或区块高度小于在op_csv操作码之前指定的参数,那么花费交
易的脚本执行将失败。
[0113]
定义13:延展性。通常而言,区块链交易可能具有两大类别的延展性,两者均允许修改交易内容,且不导致输入中提供的签名无效。
[0114]
为了说明这两种类别,以首次交易tx为例,该交易包含一个输入、该输入中的一个签名和一个输出。
[0115]
第1类:脚本级延展性。这种延展性利用了拟使用脚本操作码op_checksig检查的签名不会签署交易中任何输入的脚本字段的事实。这一事实允许我们在交易tx上生成签名,修改输入脚本,使得交易tx

不等同于tx,并且仍然可以视tx和tx

为区块链共识规则下由相同签名签署的有效交易消息。
[0116]
第2类:输入输出级延展性。这种延展性依赖于sighash标志的使用,而不是交易中采用的sighash all。如果交易tx有输入签名且该签名使用其他五个sighash标志组合中任意一个,那么可以添加输入或输出来创建不等同的交易tx

,使得两者在共识规则下将被视为有效的交易消息,而不需要修改签名。
[0117]
延展性特性
[0118]
图4示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括交易引擎401和用户界面(ui)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,交易引擎401被配置为实现客户端105的基础交易相关功能,诸如制定交易152,通过侧信道301接收和/或发送交易和/或其他数据,和/或发送交易以通过p2p网络106传播。在一些的实施例中,至少鲍勃的客户端105b的交易引擎401可以可选地包括选择功能形式的应用功能403,其能够选择从鲍勃的相应计算机设备102发送两个或多个不同版本的目标交易(“tx
p”和“tx
p
’”
)中的哪一个,以通过p2p网络106传播进行验证,并且因此记录在区块链150中(传播和记录本身通过前面讨论的机制来实现)。需再次注意,该发送可包括直接从鲍勃的计算机设备102b发送目标交易到网络106的转发节点104f之一,或者发送目标交易到爱丽丝的设备102b或第三方的设备,以转发到网络106的节点104f之一。
[0119]
ui层402被配置为通过相应用户的计算机设备102的用户输入/输出(i/o)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或多个显示屏(触摸或非触摸屏)、提供音频输出的一个或多个扬声器、和/或提供触觉输出的一个或多个触觉输出设备等。用户输入方式可包括例如一个或多个触摸屏的输入阵列(与用于输出方式的相同或不同);一个或多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或多个机械按钮、开关或控制杆等。
[0120]
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或多个不同应用程序组成的一套程序中实现,例如一个是另一个的插件。比如,交易引擎401的功能可以在单独的应用程序中实现,而不是在ui层402中实现,或者诸如交易引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除假设某些或所有描述的功能可以在比如操作系统层实现。在本文任何位
置参考单个或给定应用程序105或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
[0121]
图5给出了用户界面(ui)500的示例的模型,其可由鲍勃的设备102b上的客户端应用程序105b的ui层402呈现。在一些实施例中,用户界面500可以可选地包括至少两个用户可选择的选项501,502,这些选项可以通过用户输出方式(诸如两个屏幕上的按钮)或者菜单中的两个不同选项呈现为两个不同的ui元素。用户输入方式被设置成使用户103b(在这种情况下为鲍勃)能够选择其中一个选项,诸如通过点击或触摸屏幕上的ui元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不仅限于手的使用)。应当理解的是,呈现和选择选项的特定方式并不重要。
[0122]
不管使用什么方式,每个选项对应于第一和第二目标交易(tx
p
和tx
p’)中的不同交易。选择功能403被配置为与ui层402接口以启用下述功能。也就是说,如果鲍勃103b选择第一选项501,则这将导致交易引擎403发送目标交易tx
p
的第一版本,以通过网络106传播并且记录在区块链150中;但是,如果鲍勃103b选择第二选项502,则这将导致交易引擎403发送目标交易tx
p’的第一版本,以通过网络106传播并且记录在区块链150中。
[0123]
应当理解的是,图5中示出的ui 500只是一个图示模型,在实践中,它可包括一个或多个进一步的ui元素,为了简洁起见,未对其进行说明。
[0124]
作为替代方案或除了ui选项501,502之外,选择功能403可以被配置为在发送目标交易的第一和第二版本(tx
p
或tx
p’)之间执行自动选择,用于记录在区块链150中。这可以由预定事件或在预定超时后自动触发。比如,如果事件y发生在超时之前,则功能403自动发送第二版本tx
p’,以通过网络150传播,但是如果超时在事件y之前发生,则功能403自动发送第一版本tx
p
。或者如果发生事件x,则功能403自动发送第一版本tx
p
,以通过网络150传播,但是如果发生事件y,则功能403自动发送第二版本tx
p’。原则上,几乎任何情况均可以被系统设计者配置为自动将第一和第二版本发送到网络150的情况。
[0125]
图6示出了根据本文公开的实施例使用的一组交易152。该组包括:第零交易tx0;第一交易txi(其可以有多个示例i=1、2、3

);以及第二交易,其可以有多个版本tx
p
/tx
p’。需注意,“第零”、“第一”和“第二”只是便利标签。它们并不一定意味着这些交易将立即相继放置在区块151或区块链150中,也不意味着第零交易是区块151或区块链150中的初始交易。这些标签不一定意味着任何关于他们的交易被发送到网络106的顺序的信息。他们仅指逻辑序列,其中下一交易的输入指向一个交易的输出。需记住的是,在一些系统中,可以在其子交易之后将父交易发送至网络106(在这种情况下,“孤立”子交易将在一个或多个节点104处缓冲一段时间,同时等待父交易到达)。
[0126]
第零交易tx0还可称为就本发明而言的源交易,因为其充当锁定至爱丽丝103a的数字资产金额的来源。第一交易txi还可称为就本发明而言的中间交易或条件交易,因为其充当有条件地从源交易tx0转移数字资产金额的中介。第二交易还可称为目标交易或者支付交易(因此下标为“p”),因为该交易将解锁其中一个条件并且为鲍勃(或者鲍勃代表的潜在受益人)支付款项。在一些实施例中,目标交易有至少两个可能的版本,即第一版本tx
p
和第二版本tx
p’。这些交易可以至少在一些时间点存在,在爱丽丝的计算机设备102a(第一方)、或鲍勃(第二方)的计算机设备102b、或第三方的计算机设备(未示出)或者这些的任何组合上显示。两个版本tx
p
和tx
p’可同时存在一段时间,或者相继存在,或者在时间上部分重
叠。
[0127]
如图6所示,源交易tx0包括至少一个输出2030(例如tx0的输出0),其指定数字资产的金额,并且进一步包含将该输出锁定至爱丽丝103a的锁定脚本。这意味着源交易tx0的锁定脚本要求至少满足一种条件,即试图解锁输出(并且因此赎回数字资产的金额)的任何交易的输入必须在其解锁脚本中包含爱丽丝的加密签名(即使用爱丽丝的公钥)。在这种意义上,tx0的输出中定义的金额可以说是由爱丽丝拥有。该输出可以称为utxo。就本发明而言,tx0的输入指向的先前交易的输出并不特别重要(只要足以涵盖tx0的总输出)。
[0128]
在这种情况下,锁定源交易tx0的输出的交易是一个示例的第一,或中间,交易txi。因此,txi具有至少一个输入2021(例如txi的输入0),该输入包括指向tx0的相关输出的指针(所示示例中tx0的输出0),并且进一步包括被配置为根据该输出的锁定脚本中定义的条件解锁tx0所指向输出的解锁脚本,其至少要求爱丽丝的签名。tx0的锁定脚本所需的爱丽丝的签名需要签署txi的一部分。在一些协议中,txi需要签署的部分可以是txi的解锁脚本中定义的设置。例如,这可以通过sighash标志设置,该标志附加至签名,为一个字节,因此就数据而言,解锁脚本显示为:《sig pa》《sighashflag》《pa》。或者,需要签署的部分可以仅仅是txi的固定部分。无论采用哪种方式,拟签署的部分都通常不包含解锁脚本本身,并且可能不包括txi的部分或全部输入。这意味着txi的输入是可延展的。
[0129]
第一或中间交易txi具有至少一个输出2031(例如,txi的输出0,输出也可称为utxo)。中间交易txi的输出未对任何一方无条件锁定。就像tx0,其具有至少一个输出(例如txi的输出0),指定随后拟转移的数字资产金额,并且进一步包括锁定脚本,该锁定脚本定义解锁输出并且因此赎回该金额的所需内容。但是,在一些实施例中,该锁定脚本可以允许基于多个不同可能条件的任何一个解锁其输出,至少包括:i)第一条件(“条件1”)和ii)第二条件(“条件2”)。
[0130]
第二目标交易tx
p
/tx
p’具有至少一个输入202p(例如tx
p
/tx
p’的输出0),该输出包括指向txi的前述输出的指针(txi的输出0,如示例所示),该输出还包括解锁脚本,该解锁脚本被配置为基于满足txi的锁定脚本中定义的一个或多个条件中的一个条件解锁txi的所述输出。例如,在目标交易tx
p
的第一版本中,解锁脚本被配置为满足第一条件,即条件1。在某一时刻,则可以创建目标交易的第二版本tx
p
,例如通过延展。在第二版本中,解锁脚本被配置为满足第二条件,即条件2。
[0131]
第二目标交易tx
p
/tx
p’具有至少一个输出202p(例如tx
p
/tx
p’的输出0),在任何一个版本中,该输出指定转移给鲍勃的数字资产金额和将此锁定至鲍勃的锁定脚本(即,要求进一步随后交易在花费的解锁脚本中包括鲍勃的签名)。在这种意义上,目标交易tx
p
/tx
p’的输出可以说是由鲍勃拥有。该输出同样可以称为utxo。
[0132]
在实施例中,第一条件要求试图解锁txi的交易的解锁脚本(在一些实施例中,指目标交易的第一版本tx
p
)在其解锁脚本中包括鲍勃的加密签名和/或数据有效载荷,该数据有效载荷可能是鲍勃必须提供或包含的鲍勃的数据。包括数据有效载荷的要求可以通过txi的锁定脚本中包含的哈希挑战(哈希质询)施加。该挑战包括数据的哈希值(不是数据本身)以及配置为(当与解锁脚本一起在节点104上运行时)测试在对应解锁脚本中提供的数据哈希值是否等于锁定脚本中提供的哈希值的一段脚本。签名的要求可通过例如之前讨论的checksig施加。在实施例中,第一条件不要求爱丽丝的签名包含在tx
p
的解锁脚本中。tx
p
需要由鲍勃签署的部分可以是tx
p
的解锁脚本的设置(例如通过sighash标志指定),或者可以固定。无论采用哪种方式,其至少不包含解锁脚本。因此,tx
p
的解锁脚本是可延展的。
[0133]
在实施例中,第二条件要求试图解锁txi的交易的解锁脚本(在一些实施例中,指目标交易的第二版本tx
p’)在其解锁脚本中包括鲍勃的加密签名和爱丽丝的加密签名。同样,这可以通过例如checksig施加。在实施例中,第一条件不要求数据有效载荷包含在tx
p’的解锁脚本中。tx
p’需要由爱丽丝和鲍勃签署的部分可以是txi的锁定脚本的设置(例如通过sighash标志指定),或者可以固定。
[0134]
第零交易(即源交易)tx0可以由爱丽丝、鲍勃或第三方生成。其通常需要先前方的签名,爱丽丝从该先前方获得tx0的输入中定义的金额。其可由爱丽丝、鲍勃、先前方或其他第三方发送至网络106。
[0135]
第一交易(即中间交易和条件交易)txi还可以由爱丽丝、鲍勃或第三方生成。因为在实施例中需要爱丽丝的签名,所以其可以由爱丽丝生成。或者,其可以由鲍勃或第三方生成作为模板,然后发送至爱丽丝进行签名,例如通过侧信道301发送。然后,爱丽丝可自己将已签署交易发送至网络106,或者将其发送至鲍勃或第三方以供他们转发至网络106,或者仅发送她的签名供鲍勃或第三方组装到已签署txi并转发至网络106。同样,在发送txi至网络106之前的任何链下交换均可通过侧信道301执行。
[0136]
第二交易(即目标交易或支付交易)tx
p
/tx
p’的任何版本都可由爱丽丝、鲍勃或第三方生成。由于第一版本需要鲍勃的签名和/或数据,其可由鲍勃生成。或者,其可以由爱丽丝或第三方生成作为模板,然后发送至鲍勃进行签名和添加数据,例如通过侧信道301发送至鲍勃。然后,鲍勃可自己将已签署交易发送至网络106,或者将其发送至爱丽丝或第三方以供他们转发至网络106,或者仅发送他的签名和数据供爱丽丝或第三方组装到已签署tx
p
并转发至网络。在实施例中,第二版本要求鲍勃和爱丽丝两者的签名。因此,其可以由爱丽丝或鲍勃生成作为模板,并且发送至其他方作为模板以添加他们的签名,例如同样通过侧信道301。或者,其可以由第三方生成作为模板,然后发送至爱丽丝,其中爱丽丝添加她的签名,并且转发至鲍勃以添加他的签名。然后,鲍勃将已签署交易转发至网络106,或者发送回爱丽丝或第三方以供他们转发至网络106。或者,tx
p’可以由第三方生成作为模板,然后发送至鲍勃,其中鲍勃添加他的签名,然后转发至爱丽丝以添加她的签名。然后,爱丽丝将已签署交易转发至网络106,或者发送回鲍勃或第三方以供他们转发至网络106。在进一步的变体中,爱丽丝和/或鲍勃签署接收的交易模板,并且仅将其签名返回至其他方中的一方,以供该方组装到tx
p’并转发至网络106。同样,在发送tx
p
和/或tx
p’至网络106之前的任何链下交换均可通过侧信道301执行。
[0137]
应当理解的是,存在可以生成和组装交易的不同元素的多个位置,以及用于随后将其直接或间接地发送至p2p网络106的最终目的地的各种方法。所公开技术的实施方式的范围不限于这些方面中的任何一个。
[0138]
还应当理解的是,本文中诸如“由爱丽丝”、“由鲍勃”和“由第三方”等词组可分别用作“由爱丽丝103a的计算机设备102a”、“由鲍勃103b的计算机设备102b”和“由第三方的计算机设备”的简略语。此外,需再次注意,给定方的设备可包括由该方使用的一个或多个用户设备、或者诸如该方使用的云资源等服务器资源,或这些的任何组合。这不一定限制在单个用户设备上执行的行为。
[0139]
因为目标交易tx
p
的解锁脚本是可延展的,在实施例中,目标交易的第二版本tx
p’可通过延展第一版本tx
p
生成,即采用tx
p
的现有数据结构并且对其进行修改形成第二版本tx
p’(在这种情况下,通过延展锁定脚本)。这是脚本级延展性的示例。但是,在等效变体中,tx
p’可以通过创建具有相同结构的目标交易的新版本生成,不同的解锁脚本除外。本文可使用“更新”作为一般术语,以描述延展现有结构或创建新的替换版本的可能性。可通过示例的方式涉及本文的多个实施例来提及延展性,但应当理解的是,这可以由从头开始创建目标交易的新版本所代替。无论采用哪种方式,新版本的延展或创建均可鉴于爱丽丝和/或鲍勃的签名,由爱丽丝和/或鲍勃和/或第三方执行。
[0140]
如前所述,在实施例中,在txi中,第一条件i)要求将鲍勃的签名以及数据有效载荷包含在tx
p
的解锁脚本中,但不是爱丽丝的签名;第二条件ii)要求爱丽丝和鲍勃两者的签名,但不要求数据有效载荷包含在tx
p’的解锁脚本中。
[0141]
因此,可由鲍勃(或者代表鲍勃)单方面地赎回目标交易tx
p
,无需爱丽丝的签名,但前提是数据有效载荷包含在解锁脚本中。这将使得挖矿更贵。矿工104m需要支付挖矿费以接受挖矿交易。如果费用不足,即使交易有效(有效性和可接受性属于不同的概念),他们也将不会接受挖掘到区块151的交易。挖矿费通常与交易中数据量的大小(例如字节数或千字节数)成比例。进一步地,数据有效载荷可以是鲍勃的专有数据,他优选不公开发布到区块链150上。因此,鲍勃优选让爱丽丝欣然提供目标交易的第二更新版本tx
p’,包括她的签名(或者至少发送鲍勃或第三方组装进目标交易tx
p’中的她的签名)。这可使鲍勃赎回txi的输出,并且不必在目标交易tx
p’中包括数据有效载荷。但是,如果爱丽丝违约,鲍勃仍然可基于不太优选的第一条件转向赎回txi的输出,要求数据有效载荷包含在目标交易tx
p
中。
[0142]
第一交易txi和源交易也需要广播至网络106,用于记录在区块链150中。只要他们最终都在某个阶段得到核实,则这可以由任何一方在任意点完成。
[0143]
需注意,txi的锁定脚本的第一条件中的要求并未要求在txi的锁定脚本中包括数据有效载荷,而且也不要求爱丽丝知道数据有效载荷,即使在txi由爱丽丝制定的情况下也同样如此。相反,只要求将数据有效载荷的哈希值包含在txi的锁定脚本中(连同质询tx
p
的解锁脚本的脚本,以提供当在节点104进行哈希处理时将与解锁脚本中的哈希值相匹配的数据)。因此,即使爱丽丝或第三方制定txi,鲍勃仅需提供其数据的哈希值,而不是数据本身。只有在他必须发布目标交易的第一版本tx
p
至链的情况下,他才必须发布数据。
[0144]
在一些实施例中,txi的锁定脚本可包括第三解锁条件,作为第一和第二条件的替代。第三条件可要求锁定时间已过期,并且爱丽丝的签名包含在目标交易的第三版本tx
p”的解锁脚本中。如果鲍勃未基于第一和第二条件中的任何一个条件提出索赔,则这使爱丽丝能够从txi的输出中收回其支付款项(例如:因为他根本不参与该过程或者未在规定时限内参与该过程)。锁定时间可定义为绝对时间点、或者拟过去的时间段,例如以秒或者挖掘区块的数量进行测量。
[0145]
应当理解的是,就本发明而言,在第一交易和不同版本的目标交易中使用不同的备选条件是一种可选的额外安全措施。这些条件有利于实现流式传输和小额支付机制,但并不是必需的。现在将更详细地描述相关的实施例。
[0146]
流式传输和小额支付通道
[0147]
参考图7,假设爱丽丝希望针对来自鲍勃的一些数据的流式传输进行付费。数据将
从鲍勃“逐块”传送至爱丽丝,即在d0、d1、d2等部分的序列中。这些可以例如是由鲍勃向爱丽丝流式传输的媒体内容项的部分,例如包括视频轨(诸如电影)和/或音频轨(诸如一段音乐)。视频可包括时变图像或图形,例如电影、电视节目、幻灯片或其他此等序列或静态图像、动态矢量图形和/或游戏内容。音频可以包含采样音频和/或合成音频,包括语音、音乐、噪音和/或特效或诸如此类。在另一个示例中,要让爱丽丝即时支付服务可使用下列技术:例如提供诸如气、电、水等公用设施;或租赁车辆、房产或其他实物。在支付服务款项时,每个数据部分d0、d1、d2等包括解锁服务单元所需的不同相应密钥,而不是本身是所需内容的一部分的数据部分。比如,爱丽丝的水电气供应通过连接至她的计算机设备102a的智能仪表来管理。她将每个收到的密钥从其计算机设备102a提供给其仪表,仪表验证相应密钥后解锁另一个公用设施单元。
[0148]
采用这样的方式流式传输数据部分是可取的,即鲍勃的支付款项与迄今为止收到的数据部分的数量成比例。为此,爱丽丝可响应于从鲍勃收到的每个数据部分d0、d1、d2……
,通过侧信道301返回相应已签署交易tx1、tx2、tx3……
至鲍勃。这将意味着如果鲍勃停止发送数据,则爱丽丝可以仅停止发送支付款项;并且如果爱丽丝停止发送支付款项,鲍勃可以仅停止发送数据并且不多发送爱丽丝未支付的数据d。
[0149]
但是,还需要以这样的方式实现,即对于流式传输的每个单独数据部分d0、d1、d2等不需要将单独交易广播至网络106并且记录在区块链150中,因为这会增加网络拥塞和导致区块链150膨胀。
[0150]
为解决这一问题,响应于她从鲍勃分别接收的每个数据部分d0、d1、d2……
,爱丽丝发送回鲍勃的每个交易tx1、tx2、tx3……
是指向相同源交易tx0的相同输出(例如相同utxo)的第一交易的不同实例。因为第一交易的金额每次都会增加,所以鲍勃只需要在某个已定义的序列(例如电影等音频轨或视频轨结束时,或者指定的服务期,例如每小时、每天、每周或每月)结束时要求最后交易的输出即可。稍后将进一步参考图7进行更详细地解释。
[0151]
同时,还优选采用这样的方式流式传输该部分,即首先,鲍勃不能通过不发送数据但仍然收取爱丽丝的款项进行欺骗;其次,爱丽丝不能通过收到数据但不向鲍勃付款进行欺骗。
[0152]
在实施例中,第一交易的每个实例都包含多个输出,该输出的数字资产总金额大于其输入指向的金额。这意味着只有在某人(在实践中是鲍勃)添加他自身的另一个输入来弥补差异(输入级延展性的示例)之后交易才有效。这会阻止爱丽丝在序列中发布早期交易,进而阻止鲍勃发布后期交易。因此,这使得没有初始资金交易的流式传输充当整部电影或诸如此类的存款。稍后将参考图8对此进行更详细地讨论。
[0153]
为实现流式传输方法,爱丽丝和鲍勃彼此间可以建立链下侧信道301。即通过该信道发送的交易将不会(尚未)被发布到p2p网络以用于记录在区块链150中。这将作为支付通道的修改形式,在本文中也被称为“小额支付通道”。而且,鲍勃向爱丽丝提供序列中数据部分d0、d1,、d2……
的哈希集。例如,鲍勃可以通过支付通道301向爱丽丝发送哈希集,或者可以将其公开,以便在互联网101或诸如此类上通过服务器访问该集合。哈希集包含一组哈希值,使爱丽丝能够针对数据创建哈希挑战,而不必提前知道实际的生数据本身。例如,哈希集可包括哈希树(也称为“默克尔树”)(注意:从最广泛的意义上讲,本文使用的默克尔树是指任意哈希树,不一定限于例如二进制分支)。或者,哈希集合还包含哈希链或哈希表。
[0154]
鲍勃刚开始通过支付通道301向爱丽丝发送第一数据部分d0。该第一部分被免费发送或在双方互信的基础上发送。如果爱丽丝不付款,那么鲍勃的损失不超过第一数据部分的价值。假设爱丽丝想继续,则响应于接收d0,她通过支付通道301向鲍勃发送第一交易tx1的第一实例。作为回应,鲍勃向爱丽丝发送序列中的下一数据部分d1,然后作为回应,爱丽丝向鲍勃发送第一交易的第二实例tx2,之后鲍勃向爱丽丝发送d2,爱丽丝向鲍勃发送tx2等等,整个过程均通过支付通道301进行。第一交易的每一实例tx1、tx2、tx3……
指定向鲍勃支付的递增款项,例如随着迄今为止收到的数据部分d的数量而呈线性增加。但是,第一交易的每个实例tx1、tx2、tx3……
指向爱丽丝的相同utxo。因此,鲍勃只能构建第二更新交易tx
p
/tx
p’的有效实例,向他们中的其中一人要求付款(任何试图赎回相同utxo两次的行为都将因为无效而被网络106拒绝)。假设一切正常,因此鲍勃将创建目标交易版本,要求从序列中第一交易的最后实例支付款项。
[0155]
在实施例中,如前所述(例如,参考图5),第一交易的每个实例tx1、tx2、tx3……
或至少是最终实例txn定义该交易的输出中对赎回爱丽丝支付款项的多个备选条件。在这种情况下,爱丽丝除了要确认序列中最后数据部分dn以外,还需要提供目标交易的第二版本tx
p’,或者至少提供她的签名使鲍勃能够组装tx
p’。这使鲍勃能够根据优选的第二条件要求对全序列(例如整部电影)付款,而不是处罚鲍勃的第一条件。如果鲍勃停止对部分d,进行流式传输并且爱丽丝不满意,那么她可能不会根据需要提供满足第二条件的签名,因此鲍勃只能根据第一条件(即不太优选的条件)要求付款。在另一方面,如果爱丽丝中途停止请求进一步的部分但是没有不满意(例如,她只是选择停止观看电影),并且假设迄今为止第一交易的每个实例tx1、tx2、tx3……
都包含多个备选条件,则爱丽丝可能会根据优选的第二条件提供tx
p’或她的签名,以使鲍勃能够要求对该序列支付款项。
[0156]
第一交易txi的实例i=1,2,3
……
使用通用utxo,但是在不同的消息上使用签名。因此,在该上下文中的实例指爱丽丝的相应数据请求,也就是交易的实例(稍后讨论)。这是因为修改数值和请求数据会改变已签名消息。
[0157]
第二交易tx
p
/tx
p’的版本使用通用utxo,但是在相同的消息上使用签名。因此,在该上下文中,版本指交易的未延展和延展形式,也就是交易的相应版本。这是因为脚本级延展不会改变已签名消息。
[0158]
注意:之前就哪一方生成和/或广播第一交易tx1……
以及目标交易的第一和第二版本tx
p
/tx
p’而讨论的任何变体在这里也同样适用。例如,第三方可以代表爱丽丝或鲍勃生成和/或广播部分或全部交易;或者鲍勃也可以自己发送tx
p
/tx
p’至网络或者发送至爱丽丝去广播,或者发送他的签名给爱丽丝让爱丽丝组装目标交易tx
p
/tx
p’等。为简洁起见,这些不同的选项在此不再一一重复赘述。
[0159]
这里举一个电影行业的示例。编写脚本时,脚本大小限制在10千字节。因此,对于每部电影,可以分割成许多个8千字节的部分。如果存在其他限制条件,一个部分的大小可能更小;或者如果脚本大小限制增加,一个部分的大小可能更大。一旦部分被定义,就可以创建默克尔树,并且根哈希会连同电影标题一起被公开显示。
[0160]
为简便起见,讨论将假设隐含挖矿费。如果显式输入不能包含显式输出和隐含的交易费用,则假设存在另一个隐式输入。
[0161]
爱丽丝将向鲍勃购买一部电影。该电影是通过n 1小数据包d0,

,dn及其带根哈希hroot
的默克尔树t定义的。这种方法将构建从爱丽丝至鲍勃的一系列交易tx1,tx2,

,txn。每笔交易txi对应于di的请求和接收d
i-1
的确认。理想状态下,当支付通道301被正确关闭时,只有两笔交易(tx
′n和tx
p

)将发布以完成爱丽丝向鲍勃的付款。这种场景在图7中进行了描述,该图为爱丽丝与鲍勃之间支付通道301的序列图。需注意,鲍勃先给爱丽丝发送一条消息,接着是每个数据包的n个消息对和关闭通道的最后两条消息。
[0162]
第一回合-轮到爱丽丝:最初,鲍勃向爱丽丝发送d0和包含所需数据包的完整默克尔树。爱丽丝检查根哈希是否确实属于她选择的电影标题,并且验证d0的默克尔路径。一旦爱丽丝对收到的数据感到满意,则她会构建tx1确认她已经收到d0,并且想要请求d1。该交易可采取以下形式。
[0163]
tx1[0164]
锁定时间:0
[0165]
输入0:
[0166]
·
爱丽丝的未花费输出点(txid0,vout=0)
[0167]
·
爱丽丝的签名和sighash_all|anyonecanpay
[0168]
输出0:
[0169]
·
锁定条件:
[0170]
(i)如果鲍勃提供d1和他的签名,则他可要求输出。
[0171]
(ii)否则,如果爱丽丝和鲍勃提供了他们的签名,鲍勃可要求输出。
[0172]
(iii)否则,在720个区块之后(因为该交易被挖矿),爱丽丝可要求输出。
[0173]
·
数值:500个单位的数字资产
[0174]
输出1:
[0175]
·
爱丽丝的零钱
[0176]
输出2:
[0177]
·
向鲍勃支付与输出1中相同的金额
[0178]
图9示出了这方面的示例性例示。这种单一的交易设计具有三个预期功能。通过向交易中的某些字段指定额外的隐含意义,可以只用一个单一的交易模板替换数据交易场景下所需要的多个消息。sig(pa,tx1)是确认之前的数据包已被接收且符合要求的签名。pp_dup op_sha256《h(d1)》op_equal是下一数据包的请求。500个单位是下一数据包的支付款项。
[0179]
tx1的输入至少包括输入0。这包括指向锁定至爱丽丝的上一个交易tx0的utxo的指针,其(例如2000个单位)金额大于tx1的输出0(见下文)。tx1的输出0还包括输入的解锁脚本中爱丽丝的签名,以及能够使其他方添加输入(“anyonecanpay”)的标志。
[0180]
tx1的输出至少包括输出0。这指定了(最初的)少量数字资产(例如,500个单位),小于tx1的输入0。在可选实施例中,tx1的输出0还包括锁定脚本,使其能够在以下任何条件下解锁:
[0181]
i)后续交易tx
p
的输入中的解锁脚本包含d1和鲍勃的签名;
[0182]
ii)后续交易tx
p’的输入中的解锁脚本包含爱丽丝的签名和鲍勃的签名;或
[0183]
iii)超时限制已过,并且后续交易的输入中的解锁脚本包含爱丽丝的签名。
[0184]
关于条件i),因为鲍勃已经向爱丽丝发送过默克尔树(也称为哈希树),所以爱丽
丝知道预期的数据部分。从而,她可以确定d1的哈希值,这足以让她通过哈希挑战包括这个条件(tx1的锁定脚本包含d1的哈希值以及用于检查tx
p
输入的解锁脚本中出现的值被进行哈希处理时是否会匹配锁定脚本中的值的部分代码)。这个条件意味着如果鲍勃在未获得爱丽丝的签名时想要求付款,则他必须上传d1到区块链150,但因为d1是鲍勃的专有数据且d1的尺寸将招致高昂的挖矿费,所以他不愿意这样做。这种技术也可以同样用于后续的数据部分d2、d3等。
[0185]
条件ii)将使鲍勃能够要求付款,而不必上传数据,前提是他获得爱丽丝的签名。但是,假设他还不想这样做。
[0186]
条件iii)是可选的。如果鲍勃在某个指定的超时期限结束之后没有以任何理由要求付款(例如,鲍勃从未参与该过程),爱丽丝则可以要求收回tx1的输出0中的金额。应当理解的是,720个区块的特定超时值只是一个示例。更通俗地说,可以根据区块的数量或者人工时间(诸如秒)定义超时期限,也可以将超时期限设为任意值。它可以定义为在绝对时间点或经过的一段时间内到期。
[0187]
tx1还可以可选地包括一个或多个进一步输出。在实施例中,这些包括输出1和输出2。输出1包括定义与输入金额相等的数字资产金额的脚本,并且将此锁定爱丽丝(“爱丽丝的零钱”)。例如,2000-500个单位=1500个单位。
[0188]
输出2包括定义与输出1相等的数字资产金额的脚本,并且将此锁定至鲍勃(“向鲍勃支付与输出1中爱丽丝的零钱相同的金额”)。这样做的结果是,总输出(本示例中,500 1500 1500个单位=3500个单位)始终大于输入,除非其他人(在实践中只能是鲍勃)为了弥补差异而向tx1中添加他自身的另一个输入1。
[0189]
输出2是为了阻止爱丽丝将未经鲍勃确认的交易进行发布而设计的一种技巧。作为付款人,爱丽丝起初并未被激励去广播tx1。但是几回合之后,当在其他交易中爱丽丝向鲍勃支付更多费用时,在鲍勃使用稍后的实例来要求付款之前,爱丽丝可以使用tx1通过将其广播到网络106来使这些交易无效。通过包含输出2,鲍勃将他自己的输入(输入1)添加到tx1后,tx1才会生效,以弥补输出和输入之间的差额。鲍勃将可以添加额外的输入,因为爱丽丝使用sighash标志“all|anyonecanpay”。因此,tx1将可能仅由鲍勃广播。对于tx1有效所需的额外输入,爱丽丝不想添加,因为这比不欺骗系统要花费得更多。
[0190]
爱丽丝的零钱定义为爱丽丝的输入值(输入0)减去鲍勃的款项值(输出0)。如图8所示,鲍勃的保险(输出2)将确保总输出(虚线)始终大于发送最后数据部分前的输入。
[0191]
更通俗地说,输出的其他组合起来可以用于创建一种情况,即tx1的总输出值大于总输入值,因此需要鲍勃添加他自己的输入,以申请tx1的输出0并阻止爱丽丝广播tx1。
[0192]
作为在脚本语言的输出0中实现i)、ii)和ii)三个条件的示例,可以使用哈希难题和条件操作码,例如如下所示。
[0193][0194]
第一回合-轮到鲍勃:当鲍勃收到交易tx1时,他只发送d1至爱丽丝。需注意,鲍勃这样做很安全,因为他可以在tx1中通过下述操作要求付款,而无需爱丽丝的任何协助。首先,鲍勃使用输出点(txidb,vout=0)通过添加其自身的输入来创建tx
′1,以涵盖tx1中输出2的值。其次,鲍勃创建另一个交易tx
p
,以要求付款:
[0195]
tx
p
[0196]
锁定时间:0
[0197]
输入0:
[0198]
·
来自tx
′1输出0的输出点。
[0199]
·
解锁数据
[0200]
od1[0201]
o鲍勃的签名
[0202]
输出0:
[0203]
·
向鲍勃付款
[0204]
·
数值:500个单位
[0205]
然后,鲍勃将两个交易广播到网络106。但是,对于鲍勃而言,这不是理想的情况,因为他必须在交易中透露d1。这被视为通道的提前关闭。但是,如果爱丽丝遵循正确的程序关闭支付通道(如下所述),则鲍勃无需这样做。
[0206]
第二回合-轮到爱丽丝:当爱丽丝收到d1并且对内容满意时,她为下一个数据包构建以下交易。该交易还将被视为接收d1的确认。
[0207]
tx2[0208]
锁定时间:0
[0209]
输入0:
[0210]
·
爱丽丝的未花费输出点(假定是与tx1中相同的输出点)
[0211]
·
爱丽丝的签名和sighash_all|anyonecanpay
[0212]
输出0:
[0213]
·
锁定条件:
[0214]
o如果鲍勃提供d2和他的签名,则他可要求输出。
[0215]
o否则,如果爱丽丝和鲍勃提供了他们的签名,鲍勃可要求输出。
[0216]
o否则,在720个区块之后,爱丽丝可要求输出。
[0217]
·
数值:1000个单位
[0218]
输出1:
[0219]
·
爱丽丝的零钱
[0220]
输出2:
[0221]
·
向鲍勃支付与输出1中相同的金额
[0222]
比较tx1和tx2,需注意,d1更改为d2,并且输出0的值从500个单位的数字资产增加至1000个单位。由于这两点更改,其他输出将具有不同的值(假设爱丽丝使用相同的未花费的输出点)。而且,由于这些更改不是在交易的可延展部分上进行,爱丽丝必须为tx2生成新的签名。
[0223]
第二回合-轮到鲍勃:当鲍勃收到交易tx2时,他只发送d2至爱丽丝。
[0224]
与之前一样,鲍勃这样做是安全的,因为他可以在没有爱丽丝帮助的情况下像第一回合一样要求付款:鲍勃将同样从(txidb,vout=0)添加其自身的输入,以涵盖tx2中的输出2,并且创建tx
′2;鲍勃还将创建另一个交易tx
p
,以要求付款:
[0225]
tx
p
[0226]
锁定时间:0
[0227]
输入0:
[0228]
·
来自tx
′2输出0的输出点。
[0229]
·
解锁数据
[0230]
od2[0231]
o鲍勃的签名
[0232]
输出0:
[0233]
·
向鲍勃付款
[0234]
·
数值:1000个单位
[0235]
然后,鲍勃将两个交易广播到网络。
[0236]
如果爱丽丝和鲍勃合作关闭通道,鲍勃可以避免第一回合中提到的操作。
[0237]
最后一回合-轮到爱丽丝:几回合后,爱丽丝构建txn请求最终的数据包dn。
[0238]
txn[0239]
锁定时间:0
[0240]
输入0:
[0241]
·
爱丽丝的未花费输出点(假定是与tx1中相同的输出点)
[0242]
·
爱丽丝的签名和sighash_all|anyonecanpay
[0243]
输出0:
[0244]
·
锁定条件:
[0245]
o如果鲍勃提供dn和他的签名,则他可要求输出。
[0246]
o否则,如果爱丽丝和鲍勃提供了他们的签名,鲍勃可要求输出。
[0247]
o否则,在720个区块之后,爱丽丝可要求输出。
[0248]
·
数值:500n个单位
[0249]
输出1:
[0250]
·
爱丽丝的零钱
[0251]
输出2:
[0252]
·
向鲍勃支付与输出1中相同的金额
[0253]
最后一回合-轮到鲍勃:鲍勃用最终数据包dn进行响应。
[0254]
关闭通道:为了关闭支付通道,爱丽丝和鲍勃之间有一些交互。爱丽丝或鲍勃都可以向对方发出信号,表明打算关闭通道301的意愿。在不失一般性的前提下,假设从鲍勃发送给爱丽丝的最后数据包是dn。鲍勃发现txn,即请求dn的交易,并且添加其自身的输入,以涵盖输出2来创建tx
′n。鲍勃创建tx
p
,如下所示:
[0255]
tx
p
[0256]
锁定时间:0
[0257]
输入0:
[0258]
·
来自tx
′n输出0的输出点。
[0259]
·
解锁数据
[0260]
odn[0261]
o鲍勃的签名
[0262]
输出0:
[0263]
·
向鲍勃付款
[0264]
·
数值:500n个单位
[0265]
鲍勃通过支付通道301直接向爱丽丝发送两个交易(tx
′n和tx
p
)。爱丽丝检查tx
′n和tx
p
的输入是否确实如她所期望的那样相关。爱丽丝签署tx
p
,并且将dn替换为她的签名以创建tx
p


[0266]
tx
p

[0267]
锁定时间:0
[0268]
输入0:
[0269]
·
来自tx
′n输出0的输出点。
[0270]
·
解锁数据
[0271]
o爱丽丝的签名
[0272]
o鲍勃的签名
[0273]
输出0:
[0274]
·
向鲍勃付款
[0275]
·
数值:500n个单位
[0276]
爱丽丝将tx
p

发送给鲍勃。鲍勃广播tx
′n和tx
p

至网络106。或者,爱丽丝将广播tx
′n和/或tx
p

,或者可发送他们中的一个或两个至第三方,以代表爱丽丝和鲍勃进行广播。
需注意,爱丽丝可以随时选择关闭通道。
[0277]
注意图7:(a)鲍勃可以通过广播一对交易而单方面关闭通道;(b)形成交易对的两个交易都在通道关闭时被广播,显示通道在链下有效“打开”而不与网络106通信。
[0278]
为概括此序列,鲍勃发送d2给爱丽丝,作为对tx1的响应。爱丽丝向鲍勃发送tx2进行确认,然后鲍勃发送d3等。tx2与tx1相同,但d1替换为d2,输出0的金额增加。在tx3中,d2被替换为d3,输出0的金额再次增加。在实施例中,输出0中的金额随着i呈线性增加,即随着每个数据块和在确认中发送的tx增加。或者,不排除使用了另一种递增关系,例如在序列结束时给予更高的权重,以进一步激励完成序列。
[0279]
鲍勃可以基于标准ii)单方面要求tx1…
txi中的任何一个。为此,鲍勃会进行延展以创建tx
i’。延展包括添加鲍勃部分数字资产的输入以弥补差额,然后创建在其输入中包含di的另一个交易tx
p
,以花费txi。tx
p
具有无条件地锁定至鲍勃的输出。鲍勃可以添加他的输入,并且花费早期交易tx1或tx2等中的一个,但并不值得。他更愿意继续发送电影并在最后获得全部金额。此外,鲍勃更倾向于不依赖标准ii),因为他必须在区块链上发布电影的其中一个数据块。
[0280]
需注意,每个tx1、tx2、tx3……
的输入指定tx0的相同utxo。因此,如果其中任何一者被广播至网络并且在任意给定节点核实,则示例中的任何其他者将在该节点不再被视为有效(有效的条件是tx不试图花费已经被另一个交易有效花费的utxo)。不同节点104可能首先接收不同的实例,并且因此在挖掘一个实例之前,对于哪个实例

有效’具有冲突的观点,在这一点上,所有节点104都同意所挖掘的实例是唯一有效的实例。如果节点104接受一个实例为有效,然后发现第二实例已被记录在区块链中150,则该节点104(必须)接受这一点并且将丢弃最初接受的未挖掘实例(即视为无效)。
[0281]
如果鲍勃提前兑现并且停止发送电影,那么爱丽丝只多支付了一个数据块,因此只损失了500。爱丽丝可以在任意点保释,但如果她这样做,鲍勃则不会向爱丽丝发送其未支付的任何一个多余的电影数据块(例如价值500个单位)。
[0282]
该机制之所以起作用,是因为金额每次都会从小到大增加,直到电影结束;并且所有交易都试图在tx0中花费相同的utxo,因此兑现任何一笔交易都会使得其他交易无效。此外,在实施例中,输出总和必须大于输入,直到鲍勃添加他自己的输入。这是输入级延展性的示例。
[0283]
如果鲍勃和爱丽丝都等到电影结束,鲍勃将发送tx
n’至爱丽丝供爱丽丝签署,使得dn的哈希值替换为她的签名。这使鲍勃能够在不发布任何数据块d的情况下要求全额付款。这是脚本级延展性的示例。
[0284]
为了避免区块链上的数据拥塞,该过程使用锁定脚本,该锁定脚本可以通过使用某些数据包或数据接收方的签名来解锁。通过使用交易的延展性,数据接收方可以用她或他的签名替换解锁脚本中的数据。这一行为不仅能确认数据已收到或确认支付通道关闭,还可以从交易中修剪数据以节省空间。
[0285]
考虑到交易价值增量的增加,除了从爱丽丝那里收到的最后一笔交易之外,鲍勃没有发布任何交易的动机。如果爱丽丝过早离开通道,那么鲍勃只需发布他从爱丽丝那里收到的最后一笔交易,以及要求付款的交易。如果他没有收到爱丽丝的延展交易,则必须公开相关的数据包才能要求付款。在实施例中,如果对数据机密性有很高的要求,鲍勃可以对
发送给爱丽丝的数据进行加密,并在交易中透露解密密钥(见下文)。
[0286]
但是对于爱丽丝来说,当她收到足够大的数据包时,可能有发布第一交易的动机。由于第一交易和最新交易均有效,因此不确定她是否会成功地使最新的通信交易无效。为了完全避免这种情况,实施例中包含一个使交易本身无效的额外输出,除非有人弥补了输出和输入之间的差额。对于爱丽丝而言,为使交易有效,她必须提供额外的输入,但这违背了其广播交易的目的。
[0287]
在鲍勃下线的情况下,爱丽丝将无法继续观看电影。但是,她也不会为观看过的内容支付多余的费用。她可以等待鲍勃回来,或者也可以转到另一个服务提供商并从她停下的地方开始。
[0288]
需注意,这种形式的支付通道不需要资金交易。此外,这非常灵活,爱丽丝可以在任意点重新连接以恢复流式传输服务。也就是说,没有建立支付通道的开销。
[0289]
实施例解决了支付通道内的所有风险。但爱丽丝仍有可能在支付通道外双重支付utxo。实施例可以防止以下三个选项中的任何一个或多个,以防止这种情况发生。第一种是采用技术强制爱丽丝在尝试双重支付utxo时向存款账户透露密钥,在这种情况下,鲍勃将能够领取所有存款。第二选项是使爱丽丝的确认也具有法律约束力。即爱丽丝在鲍勃的支付请求交易上的签名可以被视为是具有约束力的身份证明。爱丽丝的任何不当行为都将受到法律实施的约束。第三选项是鲍勃不时终止并重新启动支付通道,例如每5分钟。鲍勃可以根据自己对风险的评估来调整频率。需注意,因为不需要资金交易,所以重新启动支付通道不会产生开销。
[0290]
数据加密:当数据通过公共网络交换时,通常对数据机密性有要求。在上一节中,假设数据接收方确切地知道预期接收的内容。但是,当数据被加密时,在没有任何通信的情况下,很难提前知道密文或期望的哈希值。这就需要在锁定脚本中构建哈希难题。为了缓解这种情况,在实施例中,数据销售方可以在传输之前将密文的哈希值传送给数据接收方。数据接收方使用给定的哈希值构建支付交易。当接收到加密数据时,数据接收方可以对数据进行解密,并且验证数据是否符合预期。如果符合,则一切顺利。如果不符合,那么最坏的情况是接收方赔钱。但是,接收方可能损失的金额受每个数据包的价格约束。如果是电影,可能大约500个单位,例如加起来大约5美元一部电影。考虑到经济价值小和声誉影响大,数据销售方没有欺骗的动机。
[0291]
一些实施例可以实现一种机制,在数据销售方和每个数据购买方之间通过对称加密建立共享密钥。因此,传输中的所有数据都可以加密。
[0292]
结论
[0293]
应当理解的是,上述实施例仅通过示例的方式进行描述。
[0294]
更通俗地说,根据本文公开的一个方面,提供了一种用于在至少部分节点网络中的每个节点维护的区块链副本中记录目标交易的方法,其中该方法包括通过第二方的计算机设备执行以下操作:在第一方和所述第二方之间,建立与所述网络分离的侧信道;通过侧信道将连续数据部分的序列流式传输到第一方,直至序列中的最新部分;响应于数据部分的各个相应部分,通过侧信道从第一方接收回第一交易的不同相应实例,其中目标交易包括输入,该输入包括指向第一交易的第一输出的指针,目标交易进一步包括输出,该输出指定从第一交易的第一输出转移至第二方的数字资产金额,其中该金额在目标交易的每个连
续实例中均增加;导致第一交易的最新实例和目标交易的对应版本通过网络传播并且记录在区块链中,其中目标交易的对应版本中的指针指向序列中第一交易的最新实例中的第一输出。
[0295]
所述导致可包括第二方自身(通过第二方的计算机设备)发送第一交易的最新实例和/或对应目标交易,以通过网络传播并且记录在区块链中(其中所述发送可以直接进行或者通过第一方或第三方进行)。或者,所述导致可包括第二方请求或触发第一方或第三方发送第一交易的最新实例中的一个或两个和对应目标交易,以通过网络传播并且记录在区块链中。比如,第二方可将第一和/或第二交易中的一个或两个以部分形式(例如,包括第二方的签名,而不是第一方)发送至第一方,以便第一方完成并且随后发送至网络(直接发送或者通过第三方发送)。再如,导致第一方发送其中一个交易可包括第二方向第一方发送交易的组成部分(例如,第二方的签名),以便第一方形成和发送交易。
[0296]
在实施例中,金额可随着目标交易的各连续实例呈线性增加。
[0297]
在实施例中,第一交易的每个实例可充当第一方接收相应数据部分的确认,在这种情况下,流式传输包括响应于第一交易的相应实例的接收发送序列中的下一个数据部分。
[0298]
在实施例中,该方法可包括在第二方的计算机设备:提供一种应用功能,可以使第一交易的实例中的任何一个和指向该实例的目标交易的对应版本能够在序列中的任意点在网络传播并且记录在区块链中。在这种情况下,该方法包括使用所述功能实现序列中第一交易的最新实例的传播和记录,以及指向序列中的最新实例的目标交易的对应版本,而非实例中的任何前述实例(而不是为此使用功能)。
[0299]
在实施例中,每个数据部分可包括一段媒体内容的相应部分(例如,视频和/或音频内容)。
[0300]
或者,每个数据部分可包括不同的相应密钥,使第一方能够从服务供应商解锁服务单元。例如,服务可包括以下其中一项:提供电、气、水等公用设施;或租赁房产、车辆或其他实物。
[0301]
在实施例中,序列可以是有限序列,并且所述最新数据部分可以是序列中的最终部分。
[0302]
在实施例中,至少第一交易的最终实例的第一输出可包括锁定脚本,该锁定脚本指定多个备选条件,用于解锁第一交易的第一输出,包括至少第一和第二条件,并且目标交易的输入可包括解锁脚本。在被发送以通过网络传播并且记录在区块链中的目标交易的对应版本中,锁定脚本可被配置为基于满足所述备选条件中的第二条件,而非第一条件,解锁第一交易的第一输出。
[0303]
在实施例中,第一交易的各个实例的输出可包括指定多个备选条件的锁定脚本。所述功能可以使在最终实例前第一交易的当前接收实例和指向当前实例的目标交易的第一版本通过网络传播并且记录在区块链中,其中第一版本中的锁定脚本被配置为基于满足第一条件解锁第一交易的第一输出。
[0304]
比如,所述功能可使第二方选择在序列中的任意点手动选择,使第一交易的当前接收实例和目标交易的第一版本通过网络传播并且记录在区块链中。此外/或者,所述功能可被配置为如果第一方停止通过序列发送第一交易的实例,则自动使第一交易的当前实例
和目标交易的第一版本通过网络传播并且记录在区块链中。
[0305]
在实施例中,第二条件可要求解锁脚本包括签署目标交易的一部分,不包括解锁脚本,的第一方的加密签名;其中发送以传播并且记录在区块链中的第二版本可在解锁脚本中包括第一方的签名。
[0306]
在实施例中,第一条件可不要求第一方的加密签名。
[0307]
在实施例中,至少第一条件要求解锁脚本包括第二方的加密签名,该加密签名签署目标交易的一部分,不包括解锁脚本。
[0308]
在实施例中,第二条件可要求解锁脚本包括第二方的加密签名,该加密签名签署目标交易的一部分,不包括解锁脚本。在这种情况下,发送以传播并且记录在区块链中的第二版本将在解锁脚本中包括第二方的签名。
[0309]
在实施例中,该方法可包括通过第二方的计算机设备:将第一版本发送至第一方,以便第一方通过添加第一方的签名延展为目标交易。
[0310]
在实施例中,第一条件要求在解锁脚本中包括相应数据部分,但是第二条件不要求在目标交易中包括任何数据部分。在这种情况下,发送以通过网络传播并且记录在区块链中的目标交易的第二版本不需要包括目标交易中的任何数据部分。
[0311]
在实施例中,第一条件要求解锁脚本包括相应数据部分和第二方的加密签名,该加密签名签署目标交易的一部分,不包括解锁脚本,但不要求在目标交易中包括第一方的加密签名;第二条件要求解锁脚本包括第一方和第二方的加密签名,但不要求在目标交易中包括任何数据部分。在这种情况下,发送以传播并且记录在区块链中的目标交易的第二版本在所述第二版本中不需要包括任何所述数据部分,而是在解锁脚本中包括第一方和第二方的签名。
[0312]
在实施例中,包括相应数据部分的要求可通过锁定脚本中包含的哈希挑战创建,该哈希挑战包括相应部分数据的哈希值和哈希函数,以检查解锁脚本中相应数据部分的哈希值与锁定脚本中包含的哈希值相匹配。在这种情况下,该方法包括,独立于网络并且在接收第一交易的实例之前,使哈希集对第一方可用,该哈希集包括每个数据部分的哈希值,以使第一方能够为相应数据部分生成哈希挑战。
[0313]
在实施例中,该方法可包括第二方通过侧信道接收来自第一方的第一交易。第一交易可包括指定输入金额的一个或多个第一输入,其中第一交易的第一输出指定第一款项,第一交易进一步包括一个或多个指定一个或多个进一步款项的进一步输出,使得款项的总金额大于输入金额,并且第二方从第一方接收的第一交易不包括弥补差额的其他输入。如果指定付款总额大于总输入金额,网络的节点则被配置为因为无效而拒绝诸如第一交易等交易。在此等实施例中,该方法包括第二方向第一交易的最新或最终实例添加第二输入以弥补差额,并且发送添加第二输入的第一交易,以通过网络传播并且记录在区块链中。
[0314]
作为如上所示的示例性实施方式,进一步输出可包括第二输出和第三输出,第二输出指定向第一方支付的等于输入金额减去第一款项的第二款项,第三输出可指定向第二方支付的等于第二款项的第三款项。
[0315]
在实施例中,锁定脚本可包括所述备选条件中的第三条件,其要求超时时间已过期以及在解锁脚本中包含第一方的加密签名,从而如果第二方在超时时间内未赎回,则第
一方可赎回第一交易的第一输出中的款项。
[0316]
根据本文公开的另一方面,提供了一种包含在计算机可读存储器上的计算机程序,其被配置为当在第二方的计算机设备上运行时用以执行第二方的方法。
[0317]
根据本文公开的另一方面,提供了第二方的计算机设备,包括:存储器,该存储器包括一个或多个存储单元,和处理装置,该处理装置包括一个或多个处理单元;其中存储器储存被设置在处理装置上运行的代码,代码被配置为当在处理装置上运行时执行第二方的方法。
[0318]
在实施例中,程序或代码可进一步被配置为执行本文公开的第二方的任何步骤。
[0319]
根据本文公开的另一方面,提供了一种使第二方在至少部分节点网络中的每个节点维护的区块链副本中记录目标交易的方法,其中该方法包括通过第一方的计算机设备执行以下操作:通过与所述网络分离的侧信道,从第二方接收连续数据部分的序列;响应于数据部分的各个相应部分,通过侧信道从第一方退回第一交易的不同相应实例,其中目标交易包括输入,该输入包括指向第一交易的第一输出的指针,目标交易进一步包括输出,该输出指定从第一交易的第一输出转移至第二方的数字资产金额,其中该金额在目标交易的每个连续实例中均增加;从而使第二方发送目标交易的任何一个实例,以通过网络传播并且记录在区块链中。
[0320]
在实施例中,该方法可进一步包括第一方的步骤,以补充的方式对应于本文公开的第二方的任何步骤。
[0321]
根据本文公开的另一方面,提供了一种包含在计算机可读存储器上的计算机程序,其被配置为当在第一方的计算机设备上运行时执行第一方的方法。
[0322]
根据本文公开的另一方面,提供了第一方的计算机设备,包括:存储器,该存储器包括一个或多个存储单元,和处理装置,该处理装置包括一个或多个处理单元;其中存储器储存被设置在处理装置上运行的代码,代码被配置为当在处理装置上运行时执行第一方的方法。
[0323]
在实施例中,程序或代码可进一步被配置为执行本文公开的第一方的任何步骤。
[0324]
根据本文公开的另一方面,提供了用于记录在区块链中的一组交易,该组在计算机可读数据介质或媒体上包括:第一交易至最新实例的实例序列,每一个均包括输入,该输入指向相同源交易的相同输出,该源交易的输出指定第一方的数字资产金额;目标交易,该目标交易包括输入,该输入包括指向第一交易的其中一个实例的第一输出的指针,其中目标交易进一步包括输出,该输出指定从第一交易的第一输出转移至第二方的数字资产金额,其中金额在目标交易的每个连续实例中均增加,并且目标交易的对应版本中的指针指向序列中第一交易的最新实例中的第一输出。
[0325]
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献