摘要
近年来出现了大量不同的区块链平台,但其中许多平台各自运行。 因此,需要可靠的跨链通信来实现区块链互操作性。 区块链互操作性具有挑战性,因为交易通常无法恢复,因此,如果提交了一项交易,则协议必须确保所有相关交易也都已提交。现有的互操作性方法(例如Cosmos和Polkadot)存在局限性,因为它们仅支持自己的子链之间的互操作性,或者需要对现有区块链进行侵入性更改。为了克服这个限制,我们提出了PIECHAIN,一个基于Kafka的通用跨链通信框架。 我们利用PIECHAIN进行实际案例研究:跨链拍卖,其中在多个链上持有代币的用户竞价在另一个链上出售的门票。PIECHAIN是第一个公开的、实用的跨链通信通用框架的实现。
I.简介
区块链是一种复制的、防篡改的数据库,专为敌对环境设计。它由许多节点组成,其中一些节点可能是恶意的,这些节点维护一个仅附加的账本。分类帐存储修改某些全局状态的交易记录。在典型的例子中,即加密货币[7],全局状态是用户帐户和本地(可替代)代币,而账本包含将代币从一个帐户转移到另一个帐户的交易。在另一个新兴应用中,区块链存储唯一代表资产的不可替代代币(NFT),例如数字艺术作品或音乐会门票。许多区块链还支持智能合约,让用户定义自己的状态和修改状态的代码。智能合约存储在账本中,并由所有区块链节点复制和保持一致。
近年来,出现了许多独立的区块链平台,形成了一个长尾生态系统。一方面,有少量非常受欢迎的通用区块链平台,如以太坊和Hyperledger。另一方面,有成千上万的小型区块链是为特定应用程序设计的,其中大多数仅处于开发的早期阶段。截至2023年初,这包括超过10000种加密货币[3],以及用于医疗保健、身份管理和物联网的区块链。一般来说,这些区块链不互操作。因此,区块链互操作性,即用户在不同区块链上交换信息或资产的能力,越来越引起研究界的兴趣[6],[10],[4],[1],[11]。

图1.PIECHAIN架构:跨链服务(CC-SVC)从Kafka网络读取/写入事件,并与不同的底层区块链(BC)交互。
设计安全的区块链互操作性框架的主要挑战之一是保证原子性,即协议交易集的所有步骤要么成功终止,要么没有成功终止。这在区块链中比在传统数据库中更复杂,因为区块链交易(原则上)是不可逆的。例如,如果a链上的NFT已经在B链上支付,那么原子性要求a链上必须进行交易,因为B链上的交易无法恢复。保证原子性的一种常见方法是将交易中涉及的所有代币托管在智能合约中,并仅通过各方签署的提交消息释放它们[6]。区块链互操作性的另一个重要挑战是保证活跃性,这样托管的代币就不会永远冻结。为了确保活跃性,节点必须能够发送中止消息,允许各方从托管中提取其资产。
为了保证原子性和活跃性,互操作性框架必须能够容忍向一个区块链发送提交消息并向另一个区块网发送中止消息的对抗性节点。众所周知,对于异步网络(即,没有消息延迟的约束),如果没有可信的第三方(TTP),这是不可能实现的[10]。
克服这一挑战主要有两种方法[6]。第一种方法是将同步假设与中止的冷却期相结合,即假设一旦生成提交投票,就可以在中止的任何冷却期结束前将其附加到所有受影响的区块链。这种方法适用于例如散列时间锁定合同[5]。第二种方法是用另一个区块链取代TTP,以确保可以创建有效的提交或中止消息,但不能同时创建[6]、[9]。
尽管科学文献中已经提出了这两种类型的方法,但它们要么没有公开的实现[5]、[6]、[9],要么应用范围有限,例如,在另一个区块链上创建支持资产[11]或代币交换[8]。在另一个发展中,出现了几个默认实现互操作性的区块链平台,例如Cosmos和Polkadot。然而,这些平台只支持其子链之间的互操作性,或者需要对现有区块链进行侵入性更改。这激发了对通用和实用的互操作性框架的需求,该框架可以在不修改现有区块链平台的情况下连接到现有区块链。我们的目标是提供这样一个框架。
贡献与新颖:我们推出PIECHAIN来实现这一目标。由于在实践中很难假设同步性,PIECHAIN使用跨链服务来取代TTP。跨链服务使用事件日志进行通信,该日志使用Apache的Kafka协议以提高效率。为了证明PIECHAIN的实际相关性,我们为一个现实的案例研究实现了一个跨链服务:跨链拍卖。我们已经将PIECHAIN与一些支持智能合约的最受欢迎的区块链平台对接:以太坊、Hyperledger Fabric和Quorum。最后,我们为我们的案例研究开发了一个GUI。拍卖案例研究是三个案例研究之一(两个拍卖和一个闪贷[6]),其代码可以在GitHub上的PIEChain代码库中找到。
II.PIECHAIN概述
A.实体
PIECHAI中的主要实体如下(另见图1):区块链,存储用户持有的资产(如代币、密钥)。用户可以在多个区块链上持有资产。
每个区块链都有自己的协议来确定谁有读写访问权限——区块链通常是有许可的,即一组固定的节点有读写权限,或者是无许可的,也就是每个人都有读访问权限并可以创建交易,而具有足够功率(例如处理速度)的节点可以将交易添加到区块链中。
跨链服务(CC-SVC),允许用户在不同的区块链上交换资产。每个CC-SVC由一个服务器组成,该服务器与用户客户端交互以促进跨链通信。在实践中,CC-SVC向用户收取参与费,它可以与任意数量进行交互区块链。在下文中,每个CC-SVC对应于由服务器发送到Kafka账本的资产原子交换中涉及的一组事件。在实践中,单个服务器可以操作许多CC SVC。
Kafka网络,作为CC SVC生成的事件的仅附加日志。事件对应于在基础区块链上进行的交易。Kafka网络由一组固定的节点操作,这些节点向CCSVC收取上传事件的费用。
在PIECHAIN中,我们假设CC SVC是半信半疑的,他们的动机是通过维护声誉来诚实行事,类似于商业外包服务提供商。Kafka网络运营商是不受信任的,但由于他们不与底层区块链互动,因此没有不当行为的动机。这使我们能够运行一种将效率置于安全之上的协议(Kafka)。另一种设计是使CC SVC不可信,使Kafka网络可信。在这种情况下,每个Kafka节点为每个底层区块链运行一个(轻)客户端,以验证这些链上包含的事务。在这种情况下,事件日志必须使用更安全的协议,如PBFT[2]。我们把这样的设计留给未来的工作。
B.流程
给定第II-A节的实体,PIECHAIN中的流程与Herlihy等人提出的跨链交易具有相同的结构[6]。跨链交易是多个用户在不同区块链上交换资产的协议,由五个阶段组成(另见图2):
1)清算阶段:CC-SVC在不同的区块链上创建智能合约,用于托管和转移交易中涉及的资产。
2) 托管阶段:用户通过将其传出的资产转移到智能合约来托管这些资产。
3) 转移阶段:暂时交换资产,即指定智能合约的执行逻辑。
4) 验证阶段:每个用户检查执行逻辑的结果是否符合他们的要求。
5) 承诺阶段:如果各方都满意,则通过承诺达成协议,否则通过堕胎达成协议。承诺意味着执行智能合约中的执行逻辑,并按照交易的规定交换资产。中止意味着每个智能合约中的资产都会返还给其原始所有者。
为了提交,用户交互地构建提交投票,该投票由CC-SVC发送到Kafka账本。为了中止,单个用户向CC-SVC发送中止消息。对于每个CC-SVC,提交或中止消息都可以添加到Kafka账本中,但不能同时添加。不同区块链上的所有智能合约都接受Kafka账本上提交投票的包含证明——这保证了一旦构建了提交投票,要么可以执行所有资产转移,要么不执行。

图2.在一个CC-SVC(顶部)、两个用户(中间)和两个区块链(底部)的设置中,第II-B节的五个步骤的说明。Kafka网络未显示。
III.PIECHAIN的实现
为了说明PIECHAIN的实际适用性,我们将其连接到了几个常用的区块链平台,并使用它来实现科学文献[6]中的一个应用程序:数字资产的跨链拍卖。区块链支持扩展到其他案例研究,正如我们在第五节中所讨论的。
A.区块链支持
为了将底层区块链与PIECHAIN对接,CC SVC必须能够验证这些链上的交易。我们的实现支持以下区块链平台:以太坊(私人以太坊的工作证明和授权证明版本)、Hyperledger Fabric和Quorum。后两种支持许可的区块链,而以太坊有一个无许可的主链,但也支持具有相同功能的私有链。
B.拍卖
在我们的案例研究中,拍卖师在一个区块链上出售资产,并在另一个区块上以资产的形式收到付款。在[6]中,我们使用了一个售票员的例子。门票是专用区块链上的NFT,而另一个区块链支持更常用的可替代代币(例如以太币)。前者称为票券区块链,后者称为硬币区块链。这很容易推广到具有多个硬币区块链的设置中。在下文中,我们考虑第一价格拍卖(即,出价最高的投标人支付其出价并接收资产)。协议的五个阶段如下:
1) 拍卖商招募了一个CC-SVC,该CC-SVC在门票区块链和硬币区块链上创建智能合约。
2) 拍卖商将其资产(彩票的NFT)转移到彩票合同中,竞拍者将其出价转移到其硬币区块链上的合同中。
3) 执行逻辑是确定的:拍卖师通过指定哪一方收到彩票以及哪一个出价被转移给拍卖师来更新每张彩票和硬币合同。(请注意,由于票链上的合同无法从硬币区块链中读取数据,因此无法在票合同中先验地指定此逻辑。)
4)每个用户(即拍卖人和竞买人)确定传输协议的结果是否为他们同意的,即机票是否确实转让给了正确的一方。
5) 所有用户都构建了一个提交投票——一旦构建完成,它就会被发送到每个合同,以制定转移阶段指定的转移
在PIECHAIN中,拍卖需要两种(逻辑)类型的CC-SVC:中继方和签名方。中继程序监听币链上的事件(出价),并将其中继到票务区块链。签名者协助创建提交投票。

图3.拍卖仪表板。
IV.演示计划
对于我们的演示,我们使用React框架开发了一个图形用户界面(GUI)来说明跨链拍卖。GUI由三个主要页面组成:一个显示已知拍卖列表的仪表板页面,如图3所示,一个单独拍卖的详细视图,如图5所示,以及一个创建新拍卖的页面(未显示)。拍卖人和竞拍者的观点是一样的。在仪表板视图中,潜在的拍卖商可以单击“创建新拍卖”按钮启动拍卖——拍卖商选择一个CC-SVC、要拍卖的资产、要接受哪些其他区块链的投标、不同区块链之间的代币汇率(必须提前固定)以及拍卖结束的时间。接下来,中继CC-SVC创建相关合同,并将资产链上的合同地址发送给拍卖商。然后,拍卖师可以通过添加合同地址并单击“添加现有拍卖”按钮,在其仪表板上添加拍卖。同时,它向潜在的投标人宣传合同地址。
当投标人知道资产合同地址时,他们也可以将其添加到自己的仪表板中。竞拍者添加拍卖后,她可以通过按下拍卖面板中的“查看”按钮来查看更详细的拍卖,这将带她进入详细的查看页面。在该页面上,竞买人可以查看有关拍卖的关键信息,如拍卖的创建和结束时间,以及出价列表。最高出价用星号标记。如果拍卖仍在进行中,那么投标人可以通过指定区块链来添加出价在其上进行出价以及要出价的代币的数量。然后对相关的硬币合约进行交易,并且将信息发送到中继CC-SVC。用户还可以中止通过CC-SVC进行的任何出价。
拍卖结束后,中继CC-SVC通知所有参与者,并指定智能合约中货物的临时转移。然后,CC-SVC要求所有参与者的客户参与创建提交投票。(未能参与将导致罚款[4]。)创建提交投票后,将其发送给所有合同,以启动资产的最终转让。此时,GUI将显示拍卖已经结束。

图4.显示区块链客户端控制台输出的窗口。
演示的确切流程如下:
1)一个用户——拍卖人——打开一个基于web浏览器的GUI,并使用它启动所选资产的拍卖。在此过程中,将演示拍卖创建页面上的所有功能。该资产存在于Hyperledger Fabric中运行的专用票证链上。合同是在所有涉及的区块链上创建的(图2的步骤1)。
2) 至少还有两个用户在不同的机器上使用浏览器窗口,导航到新创建的拍卖的详细信息页面,并提交他们对资产的单独出价(图2的步骤2)。至少有一个投标人使用(私人)以太坊,另一个使用Quorum。
3) 一段时间后,拍卖结束,并确定中标(图2的步骤3)。这将导致拍卖商向中继CCSVC发送“结束拍卖”事件。正在侦听此类事件的签名者将注意到该事件并构造提交投票(图2的步骤
4)然后,提交投票被发送到Kafka,并由中继节点转发到拍卖合同和币链合同。此时,资产被转移给中标人,中标人被转移给拍卖人(图2的步骤5)。
在整个演示过程中,我们将使用终端窗口来查询每个步骤后底层区块链的状态,如图4所示。这将使观众能够观察背景中发生的变化,并与演示的流程进行互动:例如,通过要求采取新的行动来了解背景状态是如何变化的。
为了说明演示的流程,可以在网上找到一个视频,该视频描述了暂定的演示幻灯片,以及如果拍卖师和竞拍者使用一台计算机执行他们的操作时的屏幕。(这不是PIECHAIN的限制,但可以更容易地录制视频。)

图5.活动拍卖的详细视图。
V.扩展
CC-SVC框架和支持的区块链接口可以用于轻松地将PIECHAIN扩展到其他用例。其中之一是如[6]所述的跨链快速贷款。由于套利机会通常会迅速解决,因此用于闪贷的GUI的实际相关性有限,因此与CC-SVC的交互通常由交易机器人完成。然而,如果时间允许,我们将显示闪存贷款中的步骤对各种相关合同状态的影响。