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

使用区块链的方法与流程

2021-10-24 07:06:00 来源:中国专利 TAG:区块 披露 第二层 特定 添加


1.本公开披露了一种区块链的特定的新的第二层应用,即区块链上添加二级功能。


背景技术:

2.区块链指一系列数据区块,其中对等(p2p)网络多个节点中的每个节点维护相应的区块链副本。至少有一些节点还可以作为矿工,稍后将具体进行解释。链中的每个区块均包括一个或多个交易,其中该上下文中的交易指一种数据结构。数据结构的性质将取决于用作交易模型或计划的一部分的交易协议类型。给定的区块链通常全程使用一个特定的交易协议。在一种常见的交易协议中,每个交易的数据结构至少包括一个输入和至少一个输出。每个输出指定一个金额,该金额表示属于输出被加密锁定的用户的数字资产值(需要该用户的签名进行解锁,从而进行赎回或花费)。每个输入指向先前交易的输出,从而链接这些交易。
3.在给定的当前交易中,输入(或每个输入)包括指针,该指针引用交易序列中先前交易的输出,指定该输出将在当前交易中被赎回或“花费”。当前交易的输入还包括先前交易输出被锁定的用户的签名。反过来,当前交易的输出可以加密锁定至新用户。因此,当前交易可将先前交易输入中定义的金额转移到当前交易输出中定义的新用户。在某些情况下,交易可具有多个输出,以在多个用户间分割输入金额(其中一个可以是原始用户,以便进行变更)。在某些情况下,交易还可以具有多个输入,将一个或多个先前交易的多个输出的金额汇总在一起,并重新分配到当前交易的一个或多个输出。
4.上述可称为“基于输出型”交易协议,有时也称为未花费的交易输出(utxo)型协议(其中输出被称为utxo)。用户的总余额不是用区块链中储存的任何一个数字定义;相反,用户需要特殊“钱包”应用程序,以整理该用户的所有utxo值,这些utxo值分散在区块链的许多不同交易中。
5.作为基于账户型交易模型的一部分,另一种类型的交易协议可称为“基于账户型”协议。在基于账户的情况下,每个交易均不通过参考过去交易序列中先前交易的utxo来定义转移的金额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。在此等系统中,交易使用账户的运行交易记录(也称为“头寸position”)进行排序。该值由发送方作为其加密签名的一部分进行签署,且作为交易引用计算的一部分进行散列。此外,可选的数据字段也可以在交易中签名。此数据字段可指向上一个交易,例如,如果数据字段中包含上一个交易id。
6.无论采用何种类型的交易协议,当用户希望执行新交易时,其希望将新交易从其计算机终端发送至p2p网络的一个节点(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点根据应用于每个节点的节点协议检查交易是否有效。节点协议的详细信息将与相关区块链中使用的交易协议类型相对应,一起形成整个交易模型。节点协议通常要求节点检查新交易中的加密签名是否与预期签名相匹配,这取决于交易的有序序列中的上一个交易。在基于输出型案例中,这可包括检查新交易输入中包含的用户加密签名是
否与新交易花费的先前交易输出中定义的条件相匹配,其中该条件通常包括至少检查新交易输入中的加密签名是否解锁新交易输入所指向的上一个交易的输出。在一些交易协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独固定,或可通过其组合固定。无论采用哪种方式,如果交易有效,则当前节点将新交易转发至p2p网络中一个或多个其他节点。这些节点中的至少一些还作为转发节点,根据相同的节点协议应用相同的测试,从而将新交易转发至一个或多个进一步的节点,依此类推。通过这种方式,新交易在整个节点网络中进行传播。
7.在基于输出型模型中,给定输出(例如:utxo)是否花费的定义是,根据节点协议,其是否通过另一个随后交易的输入有效赎回。交易有效的另一个条件是其试图花费或赎回的先前交易的输出尚未被另一个有效交易花费/赎回。同样,如果无效,交易将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一个交易的输出花费超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的交易顺序,账户余额在任何时候均具有单一定义的状态。
8.除了验证外,至少部分节点在挖矿过程中争先创建交易区块,该挖矿过程以“工作量证明”为基础。在挖矿节点,将新交易添加至区块中尚未出现的有效交易池。然后,矿工争相通过尝试解决加密难题以组装交易池中的新的有效交易区块。通常情况下,这包括搜索“随机数”值,从而当随机数与交易池并置且进行散列时,哈希值的输出满足预定条件。例如,预定可以是哈希值的输出具有预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而解决难题时各节点需要消耗大量的处理资源。
9.解决难题的第一矿工节点在网络上宣布难题解决,提供解决方案作为证据,然后网络中的其他节点则可以轻松检查该解决方案(一旦给出哈希值的解决方案,检查哈希值的输出以满足条件便比较简单)。基于在每个节点检查获胜者公布的解决方案,解决难题的获胜者的交易池之后由作为存储节点的至少部分节点记录为区块链中的新区块。区块指针还分配给指向链中之前创建的区块的新区块。工作量证明有助于降低重复花费的风险,因为创建新区块需要大量工作,且包含重复花费的任何区块都可能被其他节点拒绝,因此挖矿节点受到激励,不允许在其区块中包含双重花费。一旦创建后,则不可修改区块,因为其根据相同的协议在p2p网络中的每个存储节点进行识别和维护。区块指针还向区块施加顺序。因为交易记录在p2p网络各存储节点的有序区块中,因此提供了不可改变的交易公共分类账。
10.请注意,不同的矿工在任何给定的时间争相解决难题可能是基于任何给定时间的未挖矿交易池的不同快照,具体取决于何时开始寻找解决方案。解决相应难题的人员首先定义新区块中包含的交易,并更新当前的未挖矿交易池。然后,矿工继续争相从新定义的未完成池中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两个矿工彼此在很短的时间内解决难题,从而传播区块链的冲突视图(简言之,分叉方向最长的成为最终链)。
11.在大部分区块链中,获胜矿工会自动获得特殊类型的新交易作为奖励,该新交易创建新的数字资产值(与将数字资产金额从一个用户转移至另一个用户的正常交易截然相反)。因此,获胜节点被称为“挖到”了一些数字资产。这种特殊类型的交易有时称为“基于币
型”交易。其自动形成新区块的一部分。该奖励可激励矿工参与工作量证明竞赛。通常情况下,交易还将在其一个输出中指定附加交易费用,以进一步奖励创建包含交易所在区块的获胜矿工。
12.区块链中的交易通常用于传递数字资产,即作为价值储存手段的数据。但是也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在交易输出中储存附加用户数据。现代区块链在单一交易中可储存的最大数据容量在不断增加,从而能够并入更复杂的数据。假定交易已验证并因此在区块链上被接受,附加用户数据将作为不可改变的公共记录,继续储存在p2p网络中的各个节点处。例如,这可以用于在区块链中储存电子文件。加密签署交易的事实在一定程度上增加了对文件的信任,因此通过使用区块链作为储存文件的一种方式提供了一定程度的安全性,特别是与区块链提供不可改变的公共记录的事实结合时。


技术实现要素:

13.但是,这只提供了一定程度的安全性。为进一步提高安全性,本文认识到,需要提供一种允许第二方以电子形式证明第一方已同意文件或类似文件的事实(例如,同意语句或文件内容中的语句)。这方面的技术挑战在于提供一种信任证明的机制。特别地,当第二方证明第一方已同意某些语句或主张时,本文认为需要以计算或加密的方式证明第二方在第一方之后生成了其加密签名。本文进一步认识到,可以利用节点验证的作用实现这一点。
14.根据本文公开的一方面,提供了一种使用区块链证明第一方同意语句的计算机实现的方法。该方法包括在第二方计算机设备上执行的下列步骤。第二方接收第一方对语句同意的确认;第二方接收第一方的一条信息,只有在所述确认之后以及第一方生成其自身的加密签名以表明所述同意后,该信息才可供第二方使用。为表明第二方证明已收到第一方的所述确认,第二方通过签署包含所述信息或其转换的部分数据生成其自身的加密签名。然后第二方或使用设备的另一方将一个或多个交易发送至节点网络。该一个或多个交易包括一个或多个交易的至少一个中包含的第一方的签名和一个或多个交易的至少一个中包含的第二方的签名。网络被配置为在满足验证条件时通过网络传播每个交易,以记录在至少一些所述节点中的每个节点维护的区块链副本中。验证条件被配置为在下列条件下验证一个或多个交易中的一个:第一方的签名包含在一个或多个交易的一个中,第二方的签名包含在一个或多个交易的一个中,第二方的签名通过签署所述部分数据生成。
15.由于第二方仅在第一方签名并确认其同意后才接收第一方的信息,且由于需要通过签署该信息生成第二方的签名,这以密码方式证明了第二方在第一方之后签名。一旦通过整个网络传播交易,则交易将作为该证据不可改变的记录保留在区块链中(在各存储节点维护的副本中)。但是如果未满足条件,转发节点将不会验证交易,且因此不会进行传播。因此,这利用验证过程来证明签名的顺序,因为只有证明签名顺序正确的交易才会传播并记录在区块链中。
附图说明
16.为了帮助理解本公开的实施例并显示如何实施此等实施例,现将仅通过举例的方式参考附图进行说明,其中:
17.图1是实现区块链的系统的示意性框图,
18.图2示意性地示出了可记录在区块链中的交易的一些示例,
19.图3是实现区块链的另一系统的示意性框图,
20.图4示意性地示出了图3所示系统中使用的一对终端,
21.图5示意性地示出了用于根据第一种方法证明同意区块链中的文件的一组交易示例,
22.图6示意性地示出了第一种方法中部分步骤的示例细节,
23.图7是示出使用图5和图6中所示的一组交易的第一种方法的步骤的示意性流程图,
24.图8示意性地示出了用于根据第二种方法证明同意区块链中的文件的另一组示例性交易,
25.图9示意性地示出了第二种方法中部分步骤的示例细节,
26.图10是示出使用图8和图9中所示的一组交易的第二种方法的示意性流程图,
27.图11示意性地示出了用于根据第一种方法的变体证明同意区块链中的文件的一组交易示例,
28.图12是示出使用图11中所示的一组交易的所述第一种方法变体的步骤的示意性流程图。
具体实施方式
29.图1示出了通常用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成对等(p2p)覆盖网络106。每个节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或多个处理器的处理装置,例如一个或多个中央处理单元(cpu)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(fpga)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(ssd)等电子媒介、闪存或电可擦只读存储器和/或诸如光盘驱动器等光学介质。
30.至少一些节点104扮演转发节点104f的角色,这些节点转发并因此传播交易152。至少一些节点104扮演挖掘区块151的矿工104m角色。至少一些节点104扮演存储节点104s(有时也称为“完整副本”节点)的角色,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。给定节点104可以是转发节点104、矿工104m、存储节点104s或其中两个节点或所有节点的任意组合。
31.由于挖矿时涉及计算资源,通常至少每一个矿工节点104m采用服务器的形式,该服务器包括一个或多个物理服务器单元,甚至整个数据中心。每个转发节点104m和/或存储节点104s还可以采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可包括用户终端或一组联网的用户终端。
32.每个节点104的存储器均储存被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角色和处理交易152。应当理解的是,本文节点104的任何行动均
可通过在相应计算机设备的处理装置上运行的软件执行。此外,本文的“区块链”一词是指一般技术类型的通用术语,不限于任何特定实体的任何特定专有区块链、协议或服务。
33.同时连接至网络101的还包括作为消费用户角色的多方103中的每一方的计算机设备102。他们作为交易中的付款人和收款人,但不一定代表其他方参与挖矿或传播交易。它们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,第二方103b及其相应的计算机设备102b。应当理解的是,更多这样的当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。为进行说明,本文中第一方103a称为爱丽丝alice,第二方103b称为鲍勃bob,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
34.每一方103的计算机设备102包括相应的处理装置,其包含一个或多个处理器,例如一个或多个中央处理单元、加速器处理器、特定应用程序处理器和/或现场可编程门阵列。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘等电子媒介、闪存或电可擦只读存储器和/或诸如光盘驱动器等光学介质。每一方103计算机设备102上的存储器储存包含被设置在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,本文给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。给定方103的计算机设备102还可包括一个或多个其他网络资源,诸如通过用户终端访问的云计算资源。
35.客户端应用程序或软件105最初可通过适当的计算机可读存储介质提供至任何给定方103的计算机设备102,例如从服务器下载,或提供在移动式存储设备上,诸如可移动固态硬盘、闪存密钥、可移动电可擦只读存储器、可移动磁盘驱动器、软盘或磁带、光盘(诸如cd或dvd rom)或可移动光驱等。
36.客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应的用户方103创建、签署和发送拟在整个节点网络104中传播的交易152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产金额。在基于输出型系统中,该第二功能包括整理分散在区块链150中属于相关方的各种152交易的输出中定义的金额。
37.每个计算机设备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采用相同的节点协议(尽管其可根据子类型的规则区分处理不同的交易子类型,且不同的节点还可扮演不同的角色,因此实现协议的不同对应方面)。
38.区块链150包括一系列的区块151。每个区块151包括一组已由先前讨论的工作量证明过程创建的一个或多个交易152。每个区块151还包括区块指针155,其指向链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效交易池154,其等待通过工作量证明过程包含在新的区块中。每个交易152包括指向上一个交易的指针,以定义交易序列的顺序(注:交易152的序列可进行分支)。区块151的链一直追溯到创始区块(gb)153,该创始区块是链中的第一个区块。早期链150中的一个或多个原始交易152指向创始区块153,而非先前交易。
39.当给定方103(比方说爱丽丝)希望发送拟包含在区块链150的新交易152m时,她根据相关的交易协议(使用其客户端应用程序105中的钱包功能)制定新的交易。然后,她将交易152从客户端应用程序105发送至其连接的一个或多个转发节点104f中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104f。当任何给定节点104接收新交易152m时,其根据节点协议及其相应的角色进行处理。这包括首先检查是否新接收的交易152m符合“有效”的特定条件,具体示例稍后将详细描述。在一些交易协议中,验证条件可通过交易152中包含的脚本在每个交易的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
40.如果新接收的交易152m通过有效性测试(即:经过“验证”的条件下),任何接收交易152m的存储节点104s将把新验证交易152添加至在节点104s维护的区块链150副本的池154中。进一步地,任何接收交易152m的转发节点104f随后将传播验证交易152至p2p网络106中的一个或多个其他节点104。由于每个转发节点104f应用相同的协议,因此假定交易152m有效,这意味着交易很快将通过整个p2p网络106进行传播。
41.一旦进入在一个或多个存储节点104维护的区块链150副本的池154中,矿工节点104m将开始竞相解决包括新交易152的池154的最新版本中的工作量证明难题(其他矿工104m可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终有人将解决包含爱丽丝交易152m的池154的一部分存在的难题)。一旦包括新交易152m的池154完成工作量证明,其将不可改变地成为区块链150中区块151的一部分。每个交易152包括指向早前交易的指针,因此交易的顺序也被不可改变地记录下来。
42.图2示出了示例性交易协议。这是基于utxo协议的示例。交易(简称“tx”)是区块链150的基本数据结构(每个区块151包括一个或多个交易152)。下文的描述参考基于输出或基于“utxo”的协议。但这并不限于所有可能的实施例。
43.在基于utxo的模型中,每个交易(“tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费的交易输出(utxo),其可用作另一个新交易的输入202来源(如果utxo未被赎回)。utxo包含其来源交易的交易id以及其他信息。交易数据结构可包括标题201,其可包括输入字段202和输出字段203的大小指示符。标题201还可包括交易的id。在实施例中,交易id是交易数据(不含交易id本身)的哈希值,且储存在提交至矿工104m的原始交易152的标题201中。
44.即爱丽丝103a希望创建转移相关数字资产金额至鲍勃103b的交易。在图2中,爱丽丝的新交易152m标记为“tx
1”。其获取在序列中先前交易输出203锁定至爱丽丝的数字资产金额,并至少转移一部分此等金额至鲍勃。图2中的先前交易标记为“tx
0”。tx0和tx1只是一个任意的标签。其不一定意味着tx0指区块链151中的第一交易和tx1指池154中的下一个交易。tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前交易。
45.当爱丽丝创建其新交易tx1时,或至少在她将其发送至网络106时,先前交易tx0可能已经验证并包含在区块链150中。此时可能已包含在一个区块151中,或可仍在池154中等待,在这种情况下,其将很快被包括在新块151中。或者,tx0和tx1可以创建并一起发送至网络102,或如果节点协议允许缓冲“孤立”交易,tx0甚至可以在tx1之后发送。本文交易顺序上下文中使用的“先前”和“后续”一词指交易中指定的交易指针所定义的序列中的交易顺序(哪个交易指向哪个其他交易等等)。这不一定指其创建、发送至网络106或到达任何给定节点104的顺序。然而,指向先前交易(“父交易”)的后续交易(“子交易”)在父交易进行验证之前不会进行验证。在父交易之前到达节点104的子交易被视为孤立交易。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父交易。
46.先前交易tx0的一个或多个输出203中的一个包括特定的utxo,标记为utxo0。每个utxo包括指定utxo表示的数字资产金额的值以及锁定脚本,该锁定脚本定义后续交易输入202中解锁脚本必须满足的条件,以供后续交易进行验证,从而成功赎回utxo。通常情况下,锁定脚本将金额锁定至特定方(该金额的交易的受益人)。即,锁定脚本定义解锁条件:后续交易输入中的解锁脚本包括先前交易被锁定一方的加密签名。
47.锁定脚本(亦称scriptpubkey)是节点协议识别的域特定语言中写入的一段代码。此等语言的特定示例称为“脚本”(s大写)。锁定脚本指定花费交易输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在交易的输出中。解锁脚本(亦称scriptsig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在交易的输入202中。
48.因此在示出的示例中,tx0输出203中的utxo0包括锁定脚本[checksig p
a
],该锁定脚本需要爱丽丝的签名sig p
a
,以赎回utxo0(严格来说,是为了使试图赎回utxo0的后续交易有效)。[checksig p
a
]包括爱丽丝的公私密钥对中的公钥p
a
。tx1的输入202包括指向tx1的指针(例如,通过其交易id(txid0),其在实施例中是整个交易tx0的哈希值)。tx1的输入202包括在tx0中标识utxo0的索引,以在tx0的任何其他可能输出中对其进行标识。tx1的输入202进一步包括解锁脚本<sig p
a
>,其包括爱丽丝的加密签名,该签名由爱丽丝将其密钥对中的私钥应用到预定的部分数据进行创建(有时在密码学中称为“消息”)。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
[0049]
当新交易tx1到达节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或多个标准)。在实施例中,这涉及并置(concatenate)两个脚本:
[0050]
<sig p
a
>||[checksig p
a
]
[0051]
其中,“||”表示并置(concatenation),“<

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

]”表示由解锁脚本组成的函数(在此示例中指基于堆栈的语言)。当一起运行时,脚本使用爱丽丝的公钥p
a
(包含在tx0输出的锁定脚本中),以验证tx1输入中的锁定脚本是否包含爱丽丝
签署预期部分数据时的签名。预期部分数据本身(“消息”)也需要包含在tx0中,以便执行此验证。在实施例中,签署的数据包含整个tx0(因此需要包含一个单独的元素,明文指定签署的部分数据,因为其本身便存在)。
[0052]
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可验证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够验证签名。
[0053]
如果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中形成了另一有效交易的有效输入。
[0054]
请注意,在基于utxo的交易模型中,给定utxo需要作为一个整体使用。不能“留下”utxo中定义为已花费的一部分金额,而同时又花费另一部分。但utxo的金额可以在下一个交易的多个输出之间分割。例如,tx0的utxo0中定义的金额可以在tx1中的多个utxo之间分割。因此,如果爱丽丝不想将utxo0中定义的所有金额都给鲍勃,她可以使用剩余部分在tx1的第二输出中自己找零钱,或者支付给另一方。
[0055]
在实践中,爱丽丝还将需要包含获胜矿工的费用,因为现在仅靠奖励币通常不足以激励挖矿。如果爱丽丝不包括矿工费,tx0可能会被矿工节点104m拒绝,因此,尽管技术上有效,但仍然不会传播并包含在区块链150中(如果矿工不愿意,矿工协议不会强制矿工104m接受交易152)。在一些协议中,挖矿费不需要其自身的单独输出203(即不需要单独的utxo)。相反,输入202指向的总金额与给定交易152的输出203指定的总金额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向utxo0的指针是tx1的唯一输入,而tx1只有一个输出utxo1。如果utxo0中指定的数字资产的金额大于utxo1中指定的金额,则该差额将自动转移至获胜矿工104m。此外/或者,这不一定排除矿工费可以在其自身交易152的一个utxo 203中明确规定。
[0056]
爱丽丝和鲍勃的数字资产由区块链150中其任何交易锁定的未花费utxo组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种交易152的utxo中。区块链150中均不定义给定方103的总余额。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后交易中尚未花费的不同utxo值整理在一起。通过查询任何存储节点104s储存的区块链150副本可实现这一点,例如与相应方的计算机设备102最近或最佳连接的存储节点104s。
[0057]
请注意,脚本代码通常用示意图表示(即,非精确的语言)。例如,写入[checksig p
a
]意味着[checksig p
a
]=op_dup op_hash160<h(p
a
)>op_equalverify op_checksig。“op_...”指脚本语言的特定操作码。op_checksig(又称“checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ecdsa)验证签名的有效性。在运行时,移除脚本中任何出现的签名(

sig’),但在由

sig’输入验证的交易中仍保留附加要求,诸如哈希难题。再如,op_return是脚本语言操作码,用于创建交易的不可花费输出,其可以将元数据储存在交易中,从而将元数据不可改变地记录在区块链150中。例如,元数据可包括需储存在区块链中的文件。
[0058]
签名p
a
是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的椭圆曲线数字签名算法。数字签名对特定的数据段进行签名。在实施例中,对于给定交易,签名将签署部分交易输入、全部或部分交易输出。其签署输出的特定部分取决于sighash标志。sighash标志是包含在签名末尾的4字节代码,用于选择签署的输出(并因此在签名时固定)。
[0059]
注:锁定脚本有时称为“scriptpubkey”,指其包括相应交易锁定方的公钥。解锁脚本有时称为“scriptsig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,utxo赎回的条件并不一定包括验证签名。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
[0060]
根据本公开,利用节点验证过程提供了一种安全机制,借此第二方103a(“鲍勃”)可以证明第一方103a(“爱丽丝”)同意文件的事实。在此场景中,爱丽丝表示同意,鲍勃为了另一方的利益作证。同意文件可指同意文件内容中一个或多个语句中的一个、一些或全部。例如,文件可包括契约、宣誓书或遗嘱。其可以纸质、电子或任何其他形式存在。爱丽丝将提供其与文件相关的加密签名,然后鲍勃将提供其与文件相关的加密签名,以证明爱丽丝同意该文件。签名包含在区块链150的一个或多个交易152中,作为同意和证明的证据。用于记录此等内容的交易152可能会或可能不会向鲍勃支付其服务费用。
[0061]
进一步地,所公开的过程提供了一种防止在爱丽丝之前鲍勃应用其签名的机制。这一点很重要,因为如果鲍勃见证爱丽丝的协议,则鲍勃在爱丽丝签名并向鲍勃表示同意前不得签名(鲍勃不得声称见证了一些尚未发生且未观察到证据的事情)。基于公开机制形成和记录的交易152作为不可改变的记录保存在区块链150中,用于证明签名的应用顺序。
[0062]
如上所述,元数据可包括在交易152不可花费的输出中,以储存诸如文件等用户内容。在本文公开的实施例中,此等机制用于将见证文件的电子副本储存在区块链150中。
[0063]
进一步地,根据本文公开的实施例,区块链功能与附加多方通信功能相结合,诸如视频通话功能,该功能提供了鲍勃可见证爱丽丝同意文件的事实的信道。
[0064]
图3和图4中示出了此方面的示例。图3示出了用于实现区块链150的系统100’。除了附加的通信功能外,该系统100’与图1所示的内容基本相同。与图1所示相比,爱丽丝和鲍勃的每台计算机设备102a,120b上的客户端应用程序分别包括附加功能,因此标记为105’(在实例中,爱丽丝为105a’,鲍勃为105b’)。特别地,如图4所示,客户端应用程序105’在爱丽丝和鲍勃的每台计算机设备102a,102b上运行,包括钱包功能401和多方通信功能402,例如voip功能,优选具有视频通话功能。这些功能401,402中的每一个均可以软件模块的形式实现,其实例储存在爱丽丝和鲍勃的每台计算机设备102a,102b的存储器中,且被设置成在相应的处理装置上运行。
[0065]
钱包功能401被配置为与p2p网络106接口,以执行制定和发送交易152以及整理utxo值的功能,具体如上文图1的相关描述与背景技术部分。在另一方面,多方通信功能402可使爱丽丝103a建立与鲍勃103b的单独多方通信信道301(在任何一方或第三方的鼓动下)。例如,此多方通信信道301可包括voip信道和/或视频链路,用于在爱丽丝103a和鲍勃103b之间进行语音和/或视频通话。通过与p2p覆盖网络106相同的分组交换网络101可建立多方通信信道301。此外/或者,通过诸如移动蜂窝网络等不同网络可以建立多方通信信道301。
[0066]
当多方通信功能402还可提供侧信道302,其与主要的多方通信信道301分开,用于发送数据。在实施例中,这可包括非面向用户的数据通道,经由该通道,爱丽丝的设备102a上的客户端105a’可将“幕后”数据发送至鲍勃设备102b上的客户端105b’。或者,其可例如包括即时通讯(im)信道、电子邮件服务或适合发送文本和/或数字的其他信道。在实施例中,该侧信道302可用于向鲍勃发送爱丽丝的签名和/或一条秘密信息“x”(稍后将更详细地讨论)。通过与p2p覆盖网络106相同的分组交换网络101可建立侧信道302。此外/或者,通过诸如移动蜂窝网络等不同网络可以建立侧信道302。通过与多方通信信道301相同的网络可以或不可以建立侧信道302。
[0067]
钱包功能401和通讯功能402(如图3和图4所示出)被集成到同一客户端应用程序105’。但是这并不构成限制,相反可以在不同的应用中实现,或者钱包功能401可以是通信应用程序402的插件,或反之亦然。进一步地,当使用侧信道302时,可以或不可以通过与多方通信信道301相同的应用程序,或与提供钱包功能401相同的应用程序建立侧信道。其可以集成在与多方通信功能401、钱包功能401或其中一者的插件或单独的第三方应用相同的应用程序中。
[0068]
多种功能通过任意的方式予以实现。现考虑下述场景。
[0069]
爱丽丝103a想与见证人鲍勃103b通过多方通信信道301签署契约或类似协议。他们将用数字签名进行签名,并将此信息储存在区块链150上。爱丽丝是签字人。她拥有公钥p
a
。鲍勃是见证人。他拥有公钥p
b
。爱丽丝可拥有与其想签署的契约相关的电子文件。
[0070]
在实施例中,通信信道301包括视频链路。在实施例中,爱丽丝和鲍勃将使用视频链路301记录签名过程。可选地,他们还可在区块链150上储存此等记录的视频信息。
[0071]
下面介绍两种方法:m1和m2。在第一种方法m1中,爱丽丝和鲍勃均签署一笔交易。在第二种方法m2中,有两个交易:爱丽丝先签署第一个交易,鲍勃才可签署第二个交易。
[0072]
图5示出了方法m1可使用的一对示例性交易。如稍后将更详细地讨论,爱丽丝构造了一个初始交易tx0,该交易使用所需的锁定脚本生成utxo1。这通过依次提供爱丽丝的签名、h(x)的原像和鲍勃的签名在交易tx1中进行花费。
[0073]
图7是列出方法m1中的步骤的流程图。图6示出了方法m1期间特定步骤的交易状态。
[0074]
在步骤s1中,爱丽丝103a和鲍勃103b打开他们之间的视频信道301。这是鲍勃将见证爱丽丝同意的信道。更通俗地说,他们可使用任何形式的多方通信信道301进行彼此通信。例如,或者多方通信信道301可以是语音信道,其中可识别爱丽丝和鲍勃的语音。但是,为获取更高安全性,可能优选视频,以便可以在视频中识别爱丽丝和鲍勃的图像。优选地,视频还可包括用于交换语音的音频。这也为双方在签署时的能力和精神状态提供了证据。
可选地,通过该信道301交换的视频或其他此等媒介被记录在数据存储区中(尚未在节点104处的区块链150中)。例如,其可储存在爱丽丝和/或鲍勃的计算机设备102a,102b的存储器、第三方的设备或服务器(例如,云端)中。
[0075]
在步骤s2中,爱丽丝创建了一个仅其自己知道的秘密x,并对该秘密进行哈希运算,即h(x)。本文的哈希指加密哈希函数,例如sha256、blake2等。h(x)指在x处计算的哈希函数。秘密x可以是任何数据、仅爱丽丝知道的数据或至少鲍勃不知道的数据,且鲍勃无法猜测。例如,在实施例中,x可以是数值或文本字符串。例如,其可以是随机数,或者由鲍勃不知道的某个确定性过程生成的数字或其他值。举个例子,x可能是一个512位长的数字,有2^512个可能的数值,因此鲍勃猜不出来。
[0076]
在步骤s3中,爱丽丝创建utxo1,其可以通过提供她的签名、h(x)的原像和鲍勃的签名进行赎回。h(x)的原像指h(x)的值,该值将得出给定值h(x)的h(x),换句话说,是h(x)的解。在实施例中,锁定脚本可采取如下示意性形式编写:
[0077]
locking utxo1=[checksig p
a
][solve h(x)][checksig p
b
]。
[0078]
赎回时,在后续交易tx1的输入中,将需要爱丽丝和鲍勃签署的解锁脚本,其可采取如下示意性形式编写:
[0079]
unlocking=<sig p
b
><x><sig p
a
>。
[0080]
当节点104接收到tx1时,节点测试其是否有效。为此,根据脚本语言的解释规则,节点104将并置锁定脚本和解锁脚本,具体如下:
[0081]
<sig p
b
><x><sig p
a
>||[checksigp
a
][solve h(x)][checksig p
b
]
[0082]
节点104处的解释器随后将一起处理锁定脚本和解锁脚本,以确定tx1是否有效。根据解释脚本语言的节点协议所应用的规则,首先检查解锁脚本的最右侧输入(在本例中为sig p
a
)与锁定脚本的最左侧输入(在本例中为checksig p
a
),然后检查解锁脚本的下一个最右侧输入(在本例中为x)与锁定脚本的下一个最左侧输入(在本例中为solve h(x)),依此类推。checksig是用于检查tx1中的输入签名是否通过tx0的锁定脚本中相应的公钥p进行验证的函数。solve h(x)是用于检查tx1输入中提供的x值是否为h(x)的解的函数。还需要记住的是,函数checksig(包括操作码op_checksig)在执行检查后会移除其已检查的签名。在另一方面,solve h(x)不移除x。因此,当解释器开始检查解锁脚本的最左侧输入(sig p
b
)与锁定脚本的最右侧输入(checksig p
b
)时,爱丽丝的签名(sig p
a
)将被删除,但x不会被删除。因此,由于节点协议根据脚本语言的规则解释锁定脚本和解锁脚本的方式,鲍勃无需签署包括爱丽丝签名的任何内容。但是,根据本文公开的实施例,他需要签署包含x的内容。
[0083]
在实施例中,爱丽丝可能至少需要签署utxo1的锁定脚本,即[checksig p
a
][solve h(x)][checksig p
b
]。可选地,爱丽丝需要签署的数据可能还包括utxo1的解锁脚本减去爱丽丝和鲍勃的签名,即<x>。鲍勃可能需要签署部分数据,包括utxo1的锁定脚本加上utxo1的解锁脚本减去鲍勃和爱丽丝的签名。即,鲍勃签署<x>||[checksig p
a
][solve h(x)][checksig p
b
]。
[0084]
由于作为输入,爱丽丝和鲍勃在签署tx1的同时签署txid0。[checksig p
a
][solve h(x)][checksig p
b
]作为交易的一部分包含在txid0的计算中。因此,爱丽丝和鲍勃间接签署条件。
[0085]
需要签署的内容可以使用sighash标志进行设置。还应当注意,当据称一方签署了给定的部分数据(“消息”)时,在实施例中,这可以指该方事实上已签署数据或消息的转换,诸如数据或消息哈希值(当引用签名时,哈希值通常视为已读)。即其首先散列或以其他方式转换数据,然后用其私钥对散列或转换的版本进行签名。这一点的优势在于,散列通常可以在用私钥签名之前减少正在签名的数据量。例如,爱丽丝可以签署交易txid0,其是整个tx0的哈希值。鲍勃可以签署下述哈希值:<x>||[checksig p
a
][solve h(x)][checksig p
b
]。
[0086]
如果爱丽丝和鲍勃没有提供对交易tx0的所需部分进行签名的有效签名,则tx1将不会被验证,因此不会在整个网络106中传播,以记录在每个存储节点104s的区块链150副本中。
[0087]
应当理解的是,上述只是脚本语言和相应节点协议的一个示例。更通俗地说,其他语言可用于在tx0的输出中包含类似的验证条件。为了在更广泛的意义上实现方法m1,至少需创建条件,由此鲍勃必须签署至少包含x的某个定义的部分数据,爱丽丝必须签署可包含任何内容的某个定义的部分数据(取决于使用的协议)。鲍勃和爱丽丝需签署的部分数据可以作为脚本语言和节点协议的一部分进行设置,或者可由给定交易结构的节点协议进行固定。
[0088]
在步骤s4中,爱丽丝创建花费utxo1的交易tx1的部分版本。在实施例中,电子文件(或其哈希值)可以包括在交易中,例如在不可花费的输出(op_return)中。这意味着如果tx1被验证,文件将不可改变地储存在区块链150的交易tx1中。但是,这是可选的。
[0089]
爱丽丝尚未将其签名或h(x)的原像添加至tx1。
[0090]
tx0的锁定脚本中包含h(x)而非x的原因在于,如果不这样做的话,会透露x的原始值(需要记住的是,鲍勃可检查区块链150)。
[0091]
在步骤s5中,爱丽丝通过侧信道302将部分交易tx1发送至鲍勃。或者,可以通过主信道301进行通信,例如通过爱丽丝在视频中展示诸如qr码等视觉码,或者通过在视频或音频中分别嵌入看不见或听不见的信号。
[0092]
注:此时鲍勃无法为tx1提供有效签名,因为他不知道h(x)的原像。这是因为,尽管鲍勃构造其签名时忽视了爱丽丝的签名(解释如上),但不能忽略哈希难题的原像。即,鲍勃需要签署以使tx1有效的部分数据包含x。
[0093]
在步骤s6中,鲍勃询问爱丽丝是否同意契约(或更通俗地说,文件)的条款,爱丽丝进行确认。这是通过多方通信信道301进行的,优选通过具有语音的视频进行。但是可以使用纯音频信道,尤其是在音频中可识别语音时。鲍勃可口头询问爱丽丝是否同意文件,爱丽丝可口头回答。此外/或者,一方或双方可使用可视的通信方式,诸如手语。通信甚至可通过另一种形式的媒介信道301进行,诸如共享虚拟白板,该共享虚拟白板允许双方在共享工作区上写入其可识别的笔迹,例如通过各方终端102a,102b处的平板电脑和电子笔。无论采用什么方式,至少应允许爱丽丝的同意声明在合理的确定程度上可被识别为源自爱丽丝。优选地,鲍勃的问题也可被识别为源自鲍勃。但是在其他场景中,只要鲍勃通过信道301见证爱丽丝的同意,鲍勃的问题便可以是可选的(即爱丽丝可以在没有提示的情况下进行声明)。
[0094]
无论采用什么形式的媒介,同意均在媒介链路301上捕捉。可选地,此媒介至少临
时地记录在爱丽丝、鲍勃或第三方的数据存储区中(例如,在爱丽丝或鲍勃的本地存储驱动器或传统云存储账户中)。其中记录了至少一部分媒介,包括爱丽丝的同意,且优选也记录鲍勃的问题。无论是否记录,都将储存在区块链150中,该记录提供了证明同意的记录。
[0095]
在步骤s7,爱丽丝提供tx1的签名和哈希难题h(x)的解。她通过侧信道302将这些发送给鲍勃。或者,可以通过主信道301进行通信,例如通过爱丽丝在视频中展示诸如二维码等视码,或者通过在视频或音频中分别嵌入看不见或听不见的信号。如果x采取对人类有意义的形式,爱丽丝甚至可以通过视频或音频信道自己口头交流或手动进行交流。例如,x可以是密码或书中的一段,爱丽丝可以读出或让鲍勃去查找。
[0096]
在实施例中,爱丽丝的客户端应用程序105a’(或者更通俗地说,包括一个或多个应用程序的软件)可被配置为自动隐瞒解x并将其发送给鲍勃,自动发送或允许其在自动检测到爱丽丝已提供其签名和/或她已通过信道301表示同意的条件下进行发送(例如,使用机器智能技术可检测到后者)。或者,爱丽丝手动发送或触发x的发送。一般而言,可采用使鲍勃暂时无法使用x的任何方法。
[0097]
在步骤s8中,鲍勃现在知道x并且可以为tx1提供有效签名。鲍勃签署tx1,从而完成tx1。
[0098]
在可选步骤s9中,视频数据或视频数据的哈希值可储存在交易tx1中,例如op_return中。这意味着如果经过验证,证明同意的视频或其他此等媒介将不可改变地储存在区块链150的交易tx1中。但是,这是可选的。注意:输出的这部分之前不得由爱丽丝和鲍勃签署,这可以使用sighash标志来实现,而非sighash_all。原因在于,签名对消息(即交易数据)进行签署。爱丽丝签署文件,且被记录签署了文件。如果随后添加视频,则会添加记录,这会导致消息更改。因此,爱丽丝应单独签署文件,鲍勃可使用sighash标志签署视频和文件。
[0099]
该视频数据可由爱丽丝、鲍勃或其两者使用与步骤s7和s8不同的签名进行签署。
[0100]
在步骤s10中,交易tx1现在已完成并且可通过爱丽丝或鲍勃发送至网络106,从而不可改变地记录在区块链150上。
[0101]
爱丽丝向鲍勃声明同意并提供其签名sig p
a
之前均隐瞒x的事实意味着鲍勃的签名至少在此之前无法有效提供。由于根据锁定脚本鲍勃签署x(在实施例中,x本身被单独包含在tx1中)是tx1有效的条件,这意味着鲍勃或任何其他人不可能使tx1通过网络106传播并加入到区块链150中,直至鲍勃被提供x。在此之前,鲍勃不可能以加密的方式提供有效的签名。tx1仍不可改变地记录在区块链150中,作为签名顺序的加密演示。为了更加安全,可以可选地在tx1中随附文件/或视频或其他此等媒介(或哈希值或其的其他此等转换)的副本。
[0102]
方法m1提供了一种仅使用单一交易tx1记录证据的方法。这一点的优势在于,所有证据均记录在区块链150的一点处,从而在诸如爱丽丝、鲍勃或其他公众成员等任何一方在以后希望查询时可高效地搜索和查找证据。需要记住的是,区块链150不包括交易索引,因此不单独维护本身繁重的单独索引,搜索区块链需要遍历区块链交易以搜索所需的交易。相比分散在链中任意相应点的两个交易,区块链150的一点处的一个交易更容易找到计算资源。少数交易需要较少的传播并因此对网络101,106造成更少的负担。
[0103]
方法m2提供了一种使用两个交易实现与方法m1结果类似的方法。这一点的优势在于,尽管下文以脚本语言的示例进行了描述,但也可使用基于账户的交易模型和不允许脚
本定义有效性的自定义条件的其他协议实现方法2。
[0104]
图8示出了方法m2可使用的一组示例性交易。如稍后将更详细地讨论,爱丽丝构造了一个初始交易tx0,通过爱丽丝提供其签名在交易tx1中进行花费。交易tx2通过鲍勃提供其签名花费tx1的输出。
[0105]
图10是列出方法m2中的步骤的流程图。图9示出了方法m2期间特定步骤的交易状态。
[0106]
在步骤s1中,爱丽丝和鲍勃打开他们之间的视频信道或其他媒介信道301。该视频或其他媒介可进行记录。
[0107]
在步骤t2中,爱丽丝创建了可通过提供其签名进行赎回的utxo1。
[0108]
在步骤t3中,爱丽丝创建了花费utxo1的部分交易tx1。该交易包含一个可花费的输出utxo2,其可通过提供鲍勃的签名进行赎回。可选地,电子文件(或其哈希值)也可包含在tx1中,例如op_return中。
[0109]
在方法m2的场景中,爱丽丝需要对tx0的交易id(txid0)进行签名,并将该签名(sig p
a
)包含在tx1的输入中,以使tx1有效。txid0是整个tx0的哈希值。鲍勃将需要签署tx1的交易id(txid1),并将该签名(sig p
b
)包含在进一步交易tx2的输入中,以有效赎回tx1的输出utxo2。txid1是整个tx1的哈希值,其包括爱丽丝的签名sig p
a
。因此,鲍勃在tx2中提供有效签名取决于爱丽丝在tx1中的签名。如果鲍勃未提供签名或签署错误的内容,tx2则不会被节点104视为有效,且因此不会传播和记录在区块链150中。
[0110]
爱丽丝尚未添加其签名至tx1。
[0111]
在步骤t4中,爱丽丝将其部分交易tx1发送至鲍勃。注:此时鲍勃无法提供赎回utxo2的有效签名,因为他不知道交易tx1的交易id(txid1)。(请记住,交易id是交易数据的哈希值。)这是因为爱丽丝尚未为tx1提供签名。
[0112]
在步骤t5中,鲍勃口头询问爱丽丝是否同意契约(或更通俗地说,文件)的条款。爱丽丝口头进行确认。这是在视频链路301上捕捉的。此外/或者,可以通过链路301使用另一种形式的通信和/或媒介,例如手语等(参见前面关于方法m1的讨论)。
[0113]
在步骤t6,爱丽丝为tx1提供签名,其现在是完整交易。她通过侧信道302将其发送给鲍勃。或者,可通过主媒介信道301进行通信(同样参见关于方法m1的相应讨论)。
[0114]
在步骤t7中,鲍勃创建花费utxo2的交易utxo2。鲍勃签署tx2。
[0115]
在可选的步骤t8中,记录的视频或其他媒体数据可以类似于方法m1中步骤s9的方式存储在tx2中。同样,此数据可由爱丽丝、鲍勃或其两者进行签署。
[0116]
在步骤t9中,交易tx1和tx2现在已完成并且可通过爱丽丝或鲍勃发送至网络106。其不可改变地记录在区块链150上。在m2方法中,不需要x,但是签名的顺序仍然是强制的,因为必须存在txid1才能有效地生成tx2。
[0117]
方法m2甚至可使用基于账户的模型和交易协议,其不允许脚本定义可定制的验证条件。请注意,方法m2中涉及的所有交易仅使用标准脚本,该标准脚本对应于许多非基于脚本和基于账户的交易协议的通用或标准验证准则。
[0118]
方法m1和m2具有多个统一的特性。首先,签名顺序是固定的:爱丽丝必须在鲍勃可提供其签名之前提供其签名。进一步地,在这两个方法的实施例中,签署交易的视频可证明签署人爱丽丝和见证人鲍勃的能力。在交易中包含视频数据或视频数据的哈希值是可选
的。包含与契约有关文件的任何电子副本或文件的哈希值也是可选的。
[0119]
在这两种方法中,签名的记录和可选补充数据(文件和/或视频数据)储存在区块链上,并且不可改变。当交易提交至区块链时,由节点104检查数字签名。仅具有有效签名的交易会储存在区块链150上。因此,第三方无法自己检查,可信任签名的有效性。记录通过分布式网络上的完整副本节点104s进行复制,因此很容易由第三方获得。
[0120]
在实施例中,尽管使用基于哈希的消息验证码(hmac),但双方可传输部分填入的交易,并验证交易没有意外变更或传输错误。
[0121]
注:交易的可花费utxo输出中转入的数字资产金额与当前目的无关。因此,在方法1中,其是tx0(utxo1)的输出0和tx1的输出0。在方法m2中,参见tx0(utxo1)的输出0、tx1(utxo2)的输出0和tx2的输出0。在任何给定的一个交易中都可能存在更多的可花费输出,以分割输入值或未示出的其他输入。爱丽丝可以将utxo中定义的部分或全部数字资产转移给其自己、服务提供方鲍勃或另一方。在实践中,爱丽丝可能需要留出足够的矿工费,以确保矿工成功接受交易,且在实施例中支付储存文件和/或视频记录的费用(储存在每个节点104的区块链150副本中的所有存储节点104s上,但仅获胜矿工104m(也可能是存储节点104s)获得挖矿费)。但是在其他用例中,诸如私人或财团区块链,矿工104m不一定需要奖励进行激励。
[0122]
图11和图12示出了方法m1的替代实施,使用带有代码分隔符的单一交易,而非x的哈希值。
[0123]
图11是该方法变体示例中使用的交易的示意图。爱丽丝构造一个初始交易tx0,其用所需的锁定脚本生成utxo1。通过依次提供爱丽丝的签名和鲍勃的签名,可在交易tx1中进行花费。在此示例中,秘密x实际上不是交易tx1的一部分。但是,为使鲍勃在tx1中创建有效的签名,其需要知道x。
[0124]
图12示出了相应的流程图。
[0125]
本实施例在tx0的锁定脚本中使用代码分隔符,以控制鲍勃需要签署的锁定脚本内容。爱丽丝随后采用与在之前描述的实施例中隐瞒x类似的方式隐瞒鲍勃需签署的部分锁定脚本。
[0126]
签名将签署tx1的输出。在实施例中,解锁脚本中的sighash标志可设置对tx1的哪些部分进行签署。但是,签名还签署部分锁定脚本,且锁定脚本包含在tx0中。在不使用代码分隔符的情况下,那么在至少一个协议中,默认情况下始终签署整个锁定脚本。另一方面,在使用代码分隔符的情况下,制定tx0的该方可以控制签署的部分。
[0127]
在步骤u1中,爱丽丝和鲍勃打开他们之间的视频信道。该视频可进行记录。
[0128]
在步骤u2中,爱丽丝创建仅其自己知道的秘密x。
[0129]
在步骤u3中,爱丽丝创建utxo1,其可通过从代码分隔符开始为一部分锁定脚本提供爱丽丝的签名,和通过为包含该秘密x的整个锁定脚本提供鲍勃的签名进行赎回。
[0130]
锁定脚本可采取如下示意性形式编写:
[0131]
locking utxo1=[checksig p
b
]<x>op_drop op_codeseparator[checksig p
a
]。
[0132]
为创建有效交易,爱丽丝必须签署锁定脚本中除[checksig p
b
]<x>op_drop之外的所有内容。鲍勃必须签署锁定脚本中的所有内容,包括[checksig p
b
]<x>op_drop。
[0133]
爱丽丝未向鲍勃透露整个utxo1(可能尚未发送至网络106并在区块151中挖掘)。
[0134]
在步骤u4中,爱丽丝创建花费utxo1.的部分交易tx1。电子文件可包含在交易中,例如不可花费的输出(op_return)中。
[0135]
爱丽丝尚未添加其签名。
[0136]
在步骤u5中,爱丽丝向鲍勃发送utxo1的部分版本,其中包含代码分隔符之后的锁定脚本。她还向鲍勃透露utxo1所属的交易tx0的其余部分,包括交易id。
[0137]
爱丽丝向鲍勃发送部分交易tx1。
[0138]
注:此时,鲍勃无法为tx1提供有效签名,因为他不知道utxo1的整个锁定脚本(tx0的utxo)。特别地,他不知道出现在代码分隔符之前的秘密x。
[0139]
爱丽丝不需要提前向鲍勃发送部分版本(即步骤u5是可选的)。但是,这样做的一个优势在于,当她提供自己的签名时,鲍勃可检查签名是否有效,因为鲍勃了解爱丽丝签署交易的所有部分。
[0140]
在步骤u6中,鲍勃口头询问爱丽丝是否同意契约的条款。爱丽丝口头进行确认。这可以记录在视频链路上。
[0141]
在步骤u7中,爱丽丝为tx1提供签名及其秘密x。她将此发送给鲍勃。
[0142]
在步骤u8中,鲍勃现在知道x,因此可构造整个锁定脚本utxo1并验证其所属的交易id是否正确。现在,他可以提供有效签名。鲍勃签署tx1。
[0143]
在步骤u9中,可选地,视频数据或数据的哈希值可储存在交易tx1中,例如op_return中。输出的这部分不得事先由爱丽丝和鲍勃签署,这可以使用sighash标志来实现,而非sighash_all。
[0144]
该视频数据可由爱丽丝、鲍勃或其两者使用与步骤u7和u8不同的签名进行签署。
[0145]
在步骤u10中,交易tx1可通过爱丽丝或鲍勃发送至网络,从而不可改变地记录在区块链150上。tx0可以同时发送,或者在tx1之前或tx1之后发送。
[0146]
应当理解的是,上述实施例仅通过示例的方式进行描述。
[0147]
例如,如上所述,签署给定交易的一方103a,103b不必是首先创建交易、组装完整交易和将完整交易发送至网络106的该方。同样,第三方可以代表爱丽丝和鲍勃起草书面契约,仅需爱丽丝和鲍勃进行签名。电子交易152也是如此。类似地,其他人可以将签署的契约发送至其存储位置。
[0148]
第一方至少需提供第二方的签名,第二方至少需提供第二方的签名。交易的其他元素可以由第一方、第二方或其他第三方或这些方的任何组合进行创建。在使用x的实施例中,x优选也由第一方提供给第二方,但或者x可以是第一方和可信第三方之间共享的共享秘密,并且秘密x可以由可信第三方提供给第二方。
[0149]
交易的元素可以由第一方、第二方、任何第三方或其组合进行组装。完整交易可由第一方或第二方直接发送至网络,或可经由第三方转发至网络106。
[0150]
进一步地,本公开的范围不限于上述讨论的特定交易协议或节点协议。例如,与方法m1和m2相关的类似功能可使用其他脚本语言实现,具体取决于相关特定系统的节点104应用的节点协议识别的语言。
[0151]
在一些区块链中,交易使用基于账户的协议,该协议不使用序列中一个交易的概念“花费”或赎回序列中另一个交易的输出。在基于账户的区块链中,账户通常由账户地址标识。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。交易具有发送方和接
收方字段,且据悉从发送方字段中的账户转入接收方字段中的账户(尽管实际上交易从终端发送至区块链节点,以进行验证并传播至其他区块链节点;账户本身是由区块链状态定义的逻辑结构,该区块链状态反过来由其包含的交易序列所定义)。交易例如可在发送方和接收方账户之间转移一定数量的数字资产,使得该金额从发送方账户的余额中扣除并增加至接收方账户的余额中。通过将交易发送至之前不存在的账户地址(即区块链任何早期交易中从未包含的账户地址),可创建账户,涉及该账户的后续交易将在其发送方或接收方字段指定其地址。因此,区块链上与给定账户相关的所有交易(包括创建该账户的交易)均由公共账户地址链接。
[0152]
因此,在基于账户的模型中,交易不基于utxo的系统或类似系统工作,因此每个交易均花费或赎回先前交易的输出。相反,交易使用账户的运行交易记录(也称为“头寸position”或“随机数nonce”,不要与工作量证明随机数混淆)进行排序。该值由发送方作为其加密签名的一部分进行签署,且作为交易引用计算的一部分进行散列。因此,即使允许自定义脚本,方法m2也仍可在基于账户的协议中实现。
[0153]
在基于账户的案例中,交易1的交易id可以可选地包含在交易2的数据字段中。然后,简化为与方法m2相同的情况。在一些基于账户的协议中,可使用智能合约扮演锁定脚本的角色。在智能合约中,可要求签署特定数据位的签名。因此,可以签署智能合约,要求爱丽丝签名,然后由专门签署爱丽丝签名的鲍勃进行签名。在这种情况下,如上文方法m2基于utxo的版本中所述,鲍勃不知道的信息本身就是爱丽丝的签名。
[0154]
在进一步的变体中,如果交易协议和节点协议允许更灵活的脚本语言,则条件验证的所有变体可编程到一个或多个交易中。例如,可以编写自定义脚本,要求鲍勃在同一交易中签署包含爱丽丝签名(或其转换)的部分数据。这将提供方法m1中的单一交易测试,但不需要方法m2中的x。爱丽丝仅在通过通信信道301签署和声明同意之后才向鲍勃隐瞒她的签名。
[0155]
更进一步地,虽然上文针对公共区块链进行了描述,但这不构成任何限制,相反区块链150可以是例如在选定的组织之间使用的财团区块链,或甚至给定组织内的私有区块链。
[0156]
还应当注意,上文描述的顺序对于方法m1和m2中的所有步骤并不是必需的。例如参考方法m1中的步骤s5,爱丽丝此时不必向鲍勃发送部分交易。她可以等到步骤s7再在部分交易tx1中一起发送x及其签名。类似地,再如,在方法m2中,爱丽丝在步骤t4中不必向鲍勃发送部分tx1,但可以等到步骤t6再和其签名一起发送。此外,如上所述,另一方可以提供部分交易,或爱丽丝信任的另一方甚至可以负责向鲍勃发送x。更通俗地说,关键在于隐瞒鲍勃且需要签名以提供将由节点104验证的有效签名的信息。此外,向鲍勃隐瞒或不供鲍勃使用信息(诸如秘密信息,例如x)并不意味着该信息事先便已存在。在一些实施例中,可以在爱丽丝提供其签名和/或向鲍勃表示同意后生成。
[0157]
方法m1的另一个示例变体如下所示。如上所述,tx0的锁定脚本中包含h(x)而非x的原因在于,如果不这样做的话,会在区块链150中透露x的原始值。但是,原则上爱丽丝也可以隐瞒tx0,直至tx0和tx1均可发送至网络106为止(需要记住的是,有些系统存在关于孤立交易的规定)。在这种情况下,tx0的锁定脚本中的[solve h(x)]可以替换为仅检查是否与x相等的函数(例如,使用操作码op_equalverify)。
[0158]
一旦给出本文所解释的基本原理,方法m1和/或m2的其他变体对于技术人员可能变得显而易见。
[0159]
此外,尽管上述内容针对爱丽丝同意文件内容进行了描述,但这不是必须的。例如,爱丽丝同意可仅仅是同意口头契约或一个或多个条件的其他集合。更通俗地说,该方法可用于任何媒介(电子或其他方式)上规定的任何形式(书面或其他)的任何语句。本文中使用的“语句(statement)”一词并不限制所同意的内容的性质。例如,可以是爱丽丝、鲍勃或另一方针对事实或观点的任何陈述;或鲍勃或另一方向爱丽丝提出的任何主张。
[0160]
更一般地,根据本文公开的一方面,提供了一种使用区块链证明第一方同意语句的计算机实现的方法;该方法在第二方的计算机设备上执行,包括:第二方接收第一方同意语句的确认;第二方接收第一方的一条信息,只有在所述确认之后以及第一方生成其自身的加密签名以表明除所述确认之外的所述同意后,该信息才可供第二方使用;为表明第二方证明已收到第一方的所述确认,第二方通过签署包含所述信息的部分数据或所述信息的变换的部分数据生成其自身的加密签名;将一个或多个交易发送至节点网络或使一个或多个交易发送至网络,其形式包括一个或多个交易的至少一个中包含的第一方签名以及一个或多个交易的至少一个中包含的第二方签名,该网络被配置为在满足验证条件时通过网络传播每个交易,并将每个交易记录在至少一些节点中的每个节点维护的区块链副本中;其中验证条件被配置为在下列条件下验证一个或多个交易中的一个:第一方的签名包含在一个或多个交易的一个中,第二方的签名包含在一个或多个交易的一个中,第二方的签名通过签署所述部分数据生成。
[0161]
请注意,在方法m2中,拟验证的第二交易要求第一交易也有效。当节点验证交易时,其检查之前验证的交易是否正在花费,且具有未花费的输出。因此,在方法m2中,第二交易在第一方的签名包含在一个交易(第一交易)中的条件下进行验证,并要求第二方的签名包含在第二交易中且第二方的签名通过签署所述部分数据生成。在方法m1中,个人交易在两个签名均包含在相同交易中的条件下进行验证。
[0162]
隐瞒的信息可包括第一方的签名、或与第一方的签名一起接收或分开接收的单独信息,例如随机数。如果为单独信息,这也可包含在拟发送至并记录在区块链的一个或多个交易的一个中。
[0163]
在实施例中,该方法可包括第二方以部分形式接收一个或多个交易中的至少一个。部分形式可以从第一方或促进记录的第三方处接收。在实施例中,该方法可包括第二方接收来自第一方的签名。第一方的签名可作为一个或多个交易的部分形式的一部分接收,或单独接收。在实施例中,第二方通过将第二方签名包含在部分形式中完成一个或多个交易。如果单独接收,则第二方也可添加第一方的签名,以完成交易。然后,所述发送至网络可包括第二方转发完成的交易以在所述节点网络中传播,并因此记录在区块链中。所述转发可包括直接发送至所述节点中的一个,或发送至第三方的计算机设备,以便随后直接或间接转发至所述节点中的一个。
[0164]
在替代实施例中,一旦收到第一方的签名和第一方的信息(如果分开),第二方即可在第二方的计算机设备上创建包含所述节点的一个或多个交易。然后,第二方可转发完整形式的一个或多个交易以通过所述节点网络进行传播,并因此记录在区块链中(同样,其中所述转发可包括直接发送至所述节点中的一个,或发送至第三方的计算机设备,以便随
后直接或间接转发至所述节点中的一个)。
[0165]
在另外的替代实施例中,第一方可向第三方发送一个或多个交易的部分形式、第一方的签名和机密信息(如果与签名分开),第二方可向第三方发送第二方的签名,以使第三方根据从第一方和第二方收到的这些元素组装一个或多个交易的完整形式。然后,第三方可将一个或多个交易直接或间接转发至所述节点中的一个,以在整个网络中传播并因此记录在区块链中。或者第一方可将第一方的签名和(如果分开)机密信息转发至第三方,第二方可将第二方的签名转发至第三方,以便第三方组装一个或多个过渡。同样,然后,第三方可将一个或多个交易直接或间接转发至所述节点中的一个,以在整个网络中传播并因此记录在区块链中。
[0166]
第一方的签名可以通过第一方签署一个或多个交易中至少一个交易的至少一部分或其转换(例如,一个或两个交易的部分或全部的哈希值)来生成。第二方签署的部分数据还可包括至少一个交易的部分或全部或其转换,例如哈希值。在实施例中,第二方签署的部分数据可以由应用于每个节点的协议、包括在一个或多个交易中的代码或这些的组合来指定。
[0167]
在实施例中,语句可以是文件中的语句。
[0168]
在实施例中,文件的记录包含在一个或多个交易的一个中,并因此储存在区块链中。
[0169]
文件的记录可包括格式清楚的文件本身、诸如文件哈希值等文件转换、或加密形式的文件。
[0170]
在实施例中,文件的记录可以由第一方和第二方中的一方或双方进行加密签名。
[0171]
为实现这一点,在实施例中,为生成第一和/或第二签名而签署的数据可包括文件的记录。此外/或者,第一方和/或第二方可对文件记录应用单独的加密签名。
[0172]
在实施例中,由第二方签署以生成所述第二方签名的部分数据可包括所述文件的记录,和/或由第一方签署以生成所述第一方签名的数据包括所述文件的记录。
[0173]
在实施例中,该方法可进一步包括在第一方和第二方之间建立视频通话,其中所述确认的接收可包括所述第二方通过视频通话以可视或可听的方式接收来自第一方的确认。
[0174]
在实施例中,视频的记录可被存储以供未来参考,其中包括至少一段含所述可视或可听确认的视频。
[0175]
在实施例中,所述视频的记录可包含在一个或多个交易的一个中,并因此储存在区块链中。
[0176]
视频的记录可包括格式清楚的视频本身、诸如视频相关部分的哈希值等视频转换、或加密形式的视频。
[0177]
在实施例中,视频的记录可以由第一方和第二方中的一方或双方进行加密签名。
[0178]
为实现这一点,在实施例中,为生成第一和/或第二签名而签署的数据可包括视频的记录。或者,第一方和/或第二方可对视频记录应用单独的加密签名。
[0179]
在实施例中,验证条件被配置为至少部分地通过包含在交易和/或区块链先前交易中的相应代码用于每个交易。例如,先前交易可以是由相关交易所指向的交易。
[0180]
此外/或者,验证条件可以至少部分地通过在每个节点处实现的公共节点协议进
行定义。
[0181]
当一个或多个交易被创建和/或发送,或先前交易可能已经准备就绪拟包含在区块链中时,先前交易可能已经包含在区块链中。
[0182]
在第一类实施例中,一个或多个交易可由包含第一方和第二方两者签名的一个交易组成;验证条件可被配置为在下列条件下验证所述一个交易:第一方和第二方两者的签名均包含在交易中,第二方的签名通过签署所述部分数据生成。
[0183]
仅仅使用一个交易的优势在于证据均保存在同一笔交易中,使得以后可通过较少的查找操作进行再次询问。
[0184]
在实施例中,所述一个交易的输入可包括指向区块链中或拟包含在区块链中的先前交易的输出的指针,其中该先前交易的输出包括锁定脚本,该锁定脚本需要第一方的签名和第二方的签名以解锁该先前交易的输出。所述一个交易可包括所述一个交易的输入中的解锁脚本,该解锁脚本包括第一方和第二方的签名,被配置用于通过使用第一和第二签名解锁该先前交易来实现验证。
[0185]
在实施例中,除第一方的签名之外,所述信息可包括第一方的一条秘密信息。
[0186]
在实施例中,该方法可包括:第二方在发送至网络传播之前,在所述一个交易中包含和转发该秘密信息,或转发该秘密信息以包含在所述一个交易中。验证条件可被配置用于在进一步的条件下验证所述一个交易:该秘密信息包含在所述一个交易中。
[0187]
在实施例中,所述一个交易可包括该秘密信息的哈希值,该秘密信息包含在所述一个交易中的条件可包括:第二方转发的秘密信息是包含在代码中的秘密信息的哈希值的解。
[0188]
这一点的优势在于,第一方无需披露所述一个交易中秘密信息的原始值。
[0189]
在实施例中,锁定脚本可能还需要秘密信息以解锁先前交易的输出,所述一个交易的输入中的解锁脚本可包括所述秘密信息,其被配置用于在解锁脚本中使用所述秘密信息。
[0190]
在替代实施例中,锁定脚本可包括分隔锁定脚本的第一和第二部分的代码分隔符,其中第二部分包括所述信息,其中锁定脚本被配置用于启用所述一个交易的验证时,需要第一方的签名以至少签署第一部分,而非第二部分,以及第二方的签名以至少签署第二部分。在此情况下,所述信息的接收包括接收锁定脚本的第二部分,所述第二方签名的生成包括至少签署第二部分。
[0191]
在一些此等实施例中,该方法可包括:在第二方接收所述信息之前,第二方接收锁定脚本的第一部分,其中第一方的签名至少签署所述第一部分;基于所述接收的第一部分,第二方验证第一方的签名。
[0192]
在实施例中,先前交易可以由第一方创建。在实施例中,先前交易可通过第一方直接或间接发送至网络传播,并因此记录在每个节点的区块链实例中。或者,先前交易可由第三方或甚至第二方部分创建,并发送至第一方供签名和发送;或第一方可发送其签名至第三方或第二方以组装并发送先前交易。
[0193]
在实施例中,第二方可从第一方处接收至少包括解锁脚本的部分形式的所述一个交易,且可由第二方完成,包括在所述一个交易中的第二方的签名和秘密信息(如使用)。第一方的签名可在所述一个交易中接收,或可由第二方单独接收和包含在所述一个交易中。
一旦完成后,所述一个交易可由第二方直接发送至网络,或者所述一个交易可由第二方发送至第三方以转发至网络。在另一个替代方案中,第一方可将第一方的签名与秘密信息发送至第三方,第二方可将第二方的签名发送至第三方。在这种情况下,解锁脚本可由第三方生成或由第三方从第一方处接收。这些元素可由第三方组装成所述一个交易,然后第三方可直接或间接将所述一个交易发送至网络传播。
[0194]
在实施例中,文件的记录可包含在所述一个交易的输出中。
[0195]
在实施例中,视频的记录可包含在所述一个交易的输出中。
[0196]
第二方的签名可通过签署包含明文的秘密信息的所述一个交易的一部分形成,或通过签署包含秘密信息哈希值的部分数据形成。在实施例中,第二方签署的部分数据还可包括所述一个交易的一个或多个其他元素,诸如锁定脚本和/或解锁脚本或其一部分;或诸如这种或其技术的哈希值等转换。在一个特定的实施例中,第二方至少签署秘密信息和锁定脚本,或仅秘密信息和锁定脚本。在实施例中,由第二方签署的部分数据不包括第一方的签名。
[0197]
第一方的签名可通过签署来自所述一个交易的至少一部分数据或其转换(例如:哈希值)生成。在实施例中,第一方签署的数据可包括锁定脚本、和/或先前交易的一个或多个其他输出、和/或所述一个交易的一个或多个其他输入,而不是包括解锁脚本的输入;或诸如任何或所有这些的哈希值等转换。在实施例中,由第一方签署的数据不包括秘密信息。
[0198]
在第二类实施例中,一个或多个交易可包括第一交易和第二交易;验证条件被配置为在第一方的签名包含在第一交易中的条件下验证第一交易;在第二方的签名包含在第二交易中的条件下验证第二交易,第二签名通过签署所述部分数据生成。
[0199]
在实施例中,第一交易的输入可包括指向区块链中或拟包含在区块链中的先前交易的输出的指针,其中先前交易的输出包括锁定脚本,该锁定脚本需要第一方的签名以解锁先前交易的输出。第二交易的输入可包括指向第一交易的输出的指针,其中第一交易的输出包括锁定脚本,该锁定脚本需要第二方的签名以解锁第一交易的输出。第一交易可包括第一交易的输入中的第一解锁脚本和第二交易的输入中的第二解锁脚本,第一解锁脚本包括第一方的签名,第二解锁脚本包括第二方的签名,被配置用于使用第一方的签名解锁先前交易的输出和使用第二方的签名解锁第一交易的输出来实现验证。第一方隐瞒的信息可包括第一方的签名。
[0200]
在实施例中,文件的记录可包含在第二交易的输出中。
[0201]
在实施例中,视频的记录可包含在第二交易的输出中。
[0202]
第一方的签名可通过签署来自第一交易和/或先前交易的数据生成。第二交易的签名可通过签署来自第二交易和/或先前交易的数据生成。在实施例中,由第二方签署的部分数据可包括第一交易的交易id,其可以是第一交易签名期间整个第一交易的哈希值。由第一方签署的数据可包括先前交易的交易id,其可以是整个先前交易的哈希值。
[0203]
根据本文公开的另一方面,提供了一种包含在计算机可读存储器上的计算机程序产品,包括配置为当在第二方的计算机设备上运行时用以根据第二方的任何要求执行操作的代码。
[0204]
根据本文公开的另一方面,提供了第二方的计算机设备,包括处理装置和存储器,该处理装置包括一个或多个处理器,该存储器包括一个或多个存储装置,该存储器储存被
设置用于在处理器上运行的软件,该软件被配置为在运行时根据第二方的任何要求执行操作。
[0205]
根据本文公开的另一方面,提供了一种在第一方计算机设备上执行的计算机实现的方法,该方法包括:第一方生成其自身的加密签名,表明第一方同意语句;与所述第一方的签名分开地,向第二方确认第一方同意语句;在第一方生成其自身的所述签名且向第二方发送所述确认后,使所述第一方的信息可供第二方使用,然后向所述第二方发送所述信息,从而通过签署包含所述信息或其转换的部分数据使第二方生成其自身的加密签名;通过发送所述信息,使一个或多个交易被发送至节点网络,其形式包括一个或多个交易的至少一个中包含的第一方签名以及一个或多个交易的至少一个中包含的第二方签名,该网络被配置为在满足验证条件时通过网络传播每个交易,并将每个交易记录在至少一些所述节点中的每个节点维护的区块链副本中;其中验证条件被配置为在下列条件下验证一个或多个交易中的一个:第一方的签名包含在一个或多个交易的一个中,第二方的签名包含在一个或多个交易的一个中,第二方的签名通过签署所述部分数据生成。
[0206]
在实施例中,该方法可包括对应于由第二方和/或第三方或节点执行的方法的任何实施例的补充步骤。
[0207]
根据另一方面,提供了一种包含在计算机可读存储器上的计算机程序产品,包括配置为当在第一方的计算机设备上运行时用以根据第一方的相应方法执行操作的代码。
[0208]
根据另一方面,提供了第一方的计算机设备,包括处理装置和存储器,该处理装置包括一个或多个处理器,该存储器包括一个或多个存储装置,该存储器储存被设置用于在处理器上运行的软件,该软件被配置为在运行时根据第一方的方法执行操作。
[0209]
根据另一方面,提供了一种包含在计算机可读存储器上的计算机程序,其被配置为当在第一方的计算机设备上运行时用以根据第一方的方法执行操作。
[0210]
根据本文公开的另一方面,提供了一种由节点网络中的第一节点执行的方法,包括:接收一个或多个交易,其包括一个或多个交易的一个中包含的第一方的加密签名和一个或多个交易的至少一个中包含的第二方的加密签名;验证第一方的签名和第二方的签名均包含在一个或多个交易的一个中,第一方的签名签署了部分数据,该部分数据包括或源自第一方的一条信息,该信息在第一方生成第一签名后才可供第二方使用;将一个或多个交易记录在第一个节点维护的区块链副本中;并且随后传播一个或多个交易至一个或多个其他节点,以记录在一个或多个其他节点的每个节点处记录的区块链副本中;其中第一节点被配置为在所述验证的条件下,由所述第一节点执行一个或多个交易的至少一个的所述记录和随后传播。
[0211]
在实施例中,由第一节点执行的方法可包括对应于由第一方、第二方和/或第三方执行的方法的任何实施例的补充步骤。
[0212]
根据另一方面,提供了被设置成执行所述节点的方法的网络节点。
[0213]
根据另一方面,提供了一种包含在计算机可读存储器上的计算机程序,其被配置为当在节点上运行时用以执行节点的方法。
[0214]
根据另一方面,提供了节点网络,每个节点被配置为根据与第一节点相关的方法进行操作,从而被配置为在整个网络传播一个或多个交易,并在所述验证的条件下记录在各节点的区块链副本中。
[0215]
根据本文公开的另一方面,可提供一种包括第一方、第二方、可能涉及的任何第三方和节点网络的动作的方法。
[0216]
根据本文公开的另一方面,可提供一种包括第一方的计算机设备、第二方的计算机设备、任何第三方的计算机设备和节点网络的系统。
[0217]
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜