虽然在区块链技术蓬勃发展的今天,比特币日益显得臃肿和老旧,但比特币社区仍然为区块链技术贡献着重要的思想。基于闪电网络的思路,以太坊社区也提出了自己的链下微支付通道解决方案——雷电网络(RaidenNetwork)。
Raiden项目源码托管在https://github.com/raiden-network/raiden,开发语言为Python(目前尚未完成),其实施原理则是基于《UniversalPaymentChannels》一文。当我们将以太坊作为一个侧链导入其他加密货币之后,很容易依托以太坊智能合约为各类加密货币开发微支付通道。
Raiden项目的思路直接继承自比特币闪电网络,但也有所发展。因为以太坊智能合约对报文格式没有特别的字段限制,使得Raiden得以为通道余额快照引入一个单增序号,极为轻松、自然地解决了旧版本快照的识别和作废问题。首先要在以太坊上建有一个智能合约,由智能合约处理下文提到的OpenTransaction、UpdateTransaction等指令。下面是Raiden建立交易通道的主要形式。
和闪电网络一样,双方需要在以太坊区块链上开设通道并各自锁定以太币。这步动作可通过向Raiden智能合约发送一条双方签名认可的报文来实现。报文中的关键信息包括双方公钥、双方锁定资产数量、双方签名。
此后的任何支付动作都可以发生在以太坊区块链外,参与双方只需要私下传递一系列报文。其中最重要的报文是UpdateTransaction(更新交易通道),其形式如下。
此报文的内容几乎就是闪电网络的通道余额分配方案的翻版,只有如下几处细微的差别。
一是增加了Sequence Number字段和HoldPeriod字段以便识别作废的报文。A如果向区块链上合约提交一个双方签字的UpdateTransaction报文,合约将等待HoldPeriod时间。期间如果对方B能够提交一个Sequence Number更高的UpdateTransaction报文,合约将没收A质押在通道中的全部资产并转移给B。如果直至等待超时B也没有异议,合约将按照报文内容在区块链上完成转移支付并关闭通道。
二是通过Net Transfer Amount隐含余额分配的方式和闪电网络略有不同,这里是从建立通道时声明的Amount 1中扣减Net Transfer Amount,再将之加到Amount 2上。和直接声明余额比,只是形式上的差别。
三是雷电中引入了较HTLC更为通用的Smart Condition。Smart Condition表现为一个可在区块链上执行的函数Function(argument),可接受任何格式的报文为参数,执行后返回一个[0,1]之间的数。将其返回值乘以配套的Condition Transfer Amount,再加到Net Transfer Amount上去,就完成了条件支付引发的余额调整。闪电网络中的所谓Hash Lock,现在成了Smart Condition的一个特例。Smart Condition能够提供远较哈希校验丰富的功能,比如可以根据某类Oracle提供的道琼斯指数值完成衍生品合约的自动执行。
当发生争议时,只需向区块链上智能合约出示最新版本的UpdateTransaction报文,并请求智能合约对报文中的Smart Condition予以处理,就可以强制强制执行合约。如果没有争议,以上这一切都不会出现在以太坊区块链上。这样既增强了隐私,又提升了性能。
其他设计思路,如通过多跳打通微支付通道、接收方提交适当的Argument作为提款凭证等都和闪电网络类似。
Vitalik Buterin最近提及的State Channel技术,本质上也和这里介绍的一样,欲将区块链作为争议仲裁及强制执行的最后手段,平时则尽力避免信息在链上公开。