基于以太坊的链下交易方案Raiden介绍

  • 时间:
  • 浏览:26

  注意这篇文章你已经了解Smart Contract 的话理解比较简单,如果不了解Smart Contract 的话读起来会有点吃力。

  Raiden是一个基于Ethereum (以太坊)的链下交易方案,主要想解决三大问题:速度、费用与隐私。

  速度跟费用是在Ethereum上蛮需要解决的问题,依照目前的资讯目前网路上每秒的平均交易数量为10个,而交易费虽然可以每次Transaction都可以调整gas price,不过网路雍塞时却不得不调高来让自己的交易可以完成,最近的加密猫之乱让整个Ethereum网路拥塞想必有些支援以太币(Ether)的交易所像是热锅上的蚂蚁一样吧。

  虽然Sharding与Plasma等等解决交易速度的扩展解决方案愈来愈常提及,不过距离正式的释出似乎都还需要一段时间的酝酿。而Raiden在目前看起来是完成度较高的扩展方案。

  注:我没介绍隐私方面有什么问题,因为觉得速度跟费用这两个问题比较严重。

  速度与交易费的问题

  但这实际上问题到底是出在哪里呢?

  在速度方面,因为所有交易都需要全网共识的关系,所以每个交易都须要等到新的区块被算出来时,并且此笔新交易需要包含在其中之后才会成立,依照目前Ethereum 的出块速度交易可能会需要数十秒到数分钟才有办法确认,在网络壅塞时甚至需要等更久。

  交易费的状况则是因为Ethereum 中所设计的gas 机制的关系,每笔交易都会支付给矿工一笔交易费用,这交易费用如果放到比较大额的交易时还好,不过如果在小额交易时费用比例就会太高。比如说最近几次我完成的交易费用大约在0.3USD~0.37USD 之间,如果只是作几百块台币的交易那就显然太贵了。

  Raiden 网络的解决方案

  最前面有提到一个让人很疑惑的句子:Raiden 是一个基于 Ethereum (以太坊)的链下交易方案,既然是链下解决方案,怎么会又基于Ethereum呢?

  因为Raiden 是一个辅佐型的网络,利用开启通道(Channel) 来处理一批次的交易,再用一些加密演算法的机制在链下纪录并核实真正的交易数据,最后在关闭Channel 时将交易数据送入区块链中进行实际的加密货币交易与核实。这样实际在区块链上的交易笔数就会减少许多,达成减低交易费与加速的目的了。

  听起来很神奇(确实也是),但是要达成这样的目的需要有许多细节,会在下面一一的解释。

  首先要先说明Raiden 是一个多节点的网络,但是为了先从简单的情境开始,我们会先说明两个节点之间要怎么利用Raiden 的原理达成减少交易费以及加速的目的,最后再解释在许多Raiden 的节点所形成的网路要怎么达成目的。

  另外Raiden 可以转任何ERC20 的token,我们以下虽然用以太币Ether (ETH) 作为范例,不过实际上会被包装成一个相容于ERC20 的token。

  先想像一下…

  因为我还没看过Raiden 的服务或钱包长怎样,为了比较好的解释跟想像Raiden Network,请先想像使用Raiden 时会像是悠游卡一样的储值卡app,不一样的是它是一个app,平常你会到捷运的储值机储值悠游卡,在Raiden Network 底下你需要要一个app 把你的Ether 以太币储值入Raiden 里面。

  

  你可以在这个app 上面看到你的Ethereum 帐户与Raiden 帐户里面分别有多少余额、列出你曾经在Raiden 网络上作的转帐,最后app 底端有三个功能:

  · 储值(Deposit):把以太币从Ethereum 帐户转到Raiden 帐户

  · 提领(Withdraw):把以太币从Raiden 帐户转回Ethereum 帐户

  · 转帐(Transfer):把以太币转给同样在Raiden 网络里面的帐户

  先谈两个节点之间的互动

  说了这么多,终于要开始解释两个节点之间的互动了。前面有提到Raiden 网络的原理是在Ethereum 上开一个通道来处理多笔交易,让我们来好好检视一下之中的细节。

  开启通道

  首先,其实通道(Channel) 其实就是一个Smart Contract。当你打开了一个通道后就是布署了一个新的Smart Contract。举例来说Bob 跟Alice 之间经常一起吃饭,三天两头就要互相Cover 饭钱,他们之间的互动会是这样:

  

  上面的这张图虚线以上是区块链上的互动,虚线以下是Raiden 网络上的互动。

  首先他们要先开启一个通道(部署一个Smart Contract),接着两个人都先放5 以太币到这个Smart Contract 里面,让资金足够可以在两人之间流动。当这个Smart Contract 已经储存了两人的以太币后,双方就可以开始在Raiden 网络中进行交易了。当Bob 在Raiden 网络送出第一笔1 ETH 的交易给Alice 时,此笔交易并不会发到区块链上,取而代之的是Bob 会将此笔交易资讯包含双方在通道中的余额利用自己的私钥签章过后,送给Alice 保存此笔资讯,此笔资讯称为Balance Proof。当Alice 也通知Bob 收到Balance Proof 后,这笔交易在Raiden 上面就会成立了。

  在这个时间点,双方都会有通道上的余额资讯,如Alice会拥有一份Balance Proof Bob: 4 ETH, Alice 6 ETH并且已经经过了Bob的签章。

  接下来的三笔交易都会用同样的方式仅在Raiden 当中检查、签名与传送,这些资讯都不会上到Ethereum区块链网络上。

  另外在Raiden 网络上面并不需要保存所有的交易纪录,仅需要保存最后的余额即可。

  关闭通道

  当这两个节点的任何一个节点想要把在Smart Contract 的储值的钱领回时,可以关闭通道(Close Channel)。

  假设是Bob想要关闭通道,则Bob呼叫Smart Contract的close(),此时Bob会在close()的参数内附上自己最新取得的一次Balance Proof,同时在一段时间内Alice也可以呼叫updateTransfer()更新双方余额数据。

  当双方都更新完数据后,此通道可以被任何一个人(不限于双方,可以是Ethereum上的任一节点)触发settle()将双方的钱都发回。Bob跟Alice当初都存了5 ETH进去这个通道,最后余额的状况则是发回给Bob 6 ETH,给Alice 4 ETH。

  

  这边的重点就是因为每个人拥有的Balance Proof都会经过对方的私钥签名,所以不论是哪一方呼叫了close()或是updateTransfer(),此通道的Smart Contract都可以利用Solidity中的ecrecover()验证签名,当Balance Proof验证正确后,Smart Contract就可以确认这笔余额双方都确认无误。

  整个Raiden 网络

  刚刚先说明了两个节点在Raiden 网络的运作状况,但是如果每次都要在需要支付的双方开一个通道来转帐显得很不合理,所以Raiden 网络上的多个节点就派上用场,假如说Alice (A) 现在要转帐给David (D),他们之间其实并不需要双方存在直接通道,仅需要Alice 跟David 都在Raiden 网络上即可,也就是说他们都跟Raiden 网络上的其中一些节点之间已经开启了通道。

  

  原图出自Raiden Network 101,但是把格式改成横的方便阅读

  当Alice要转帐给David时,首先他要先在Raiden中找到一条通往David节点的路径,找到后就可以借用这些节点之间的通道把以太币转给David。而在整个传输完成前,这条通道上交易会使用Hash Lock锁定住,直到David在通道上确认已经收到款项,跟Alice用SecretRequest要求解锁的Key后,整个交易才会解锁。

  最后每个传送者都会传送Balance Proof 给下一个接收者,最终的状态则是在这个通道上的所有人,都会拥有上一个的Balance Proof。比如说Bob (B) 有Alice (A) 签名过的Balance Proof,Carol (C) 有Bob (B) 签名过的Balance Proof,这些Balance Proof 就可以在关闭通道时使用。

  而这些通道不必然要马上关闭,因为这些通道还可以用在其他人的转帐,这样就可以在不需要Ethereum 交易费的状况下继续转帐。这个时候让我们再回到原本的那张草图,你的Raiden app 就像是储值卡一样,可以快速地拿它来做小额交易,直到你认为需要把钱提领回你的Ethereum 帐号时,才按Withdraw 提领把钱领出来。在你的通道还没关闭时,都可以透过Raiden 网络转帐给另外一个人。

  

  由于不需要全网共识的关系,所以Raiden 可以在相对快的速度当中完成交易。另外在这边要说Raiden 网络中传输还是会有费用的,总共有两种,其中一种Protocol level fees 会在你转帐时收取,不过理论上费用会非常少。另外一个费用是Peripheral fees,如果你只有使用Raiden 的轻节点(light node) 时因为自身没有跑完整的Raiden 服务的关系,所以会需要全节点替你提供服务,所以会收取费用。

  但如果是跑全节点(full node)就不需要收取费用,反而还可以因为提供转发服务而从轻节点那边收取到Peripheral fees。

  结论

  总之Raiden Network 就是利用上述的方式用链下的方案来解决目前Ethereum 交易速度与费用的问题,不过我目前都仅是在文件上的阅读与理解,还没试着跑过他们的网络来实际体验一下效果。所以实际上到底能不能解决问题还需要更深入的探讨才能知道目前实作的状况。

  另外在Raiden Network 要解决交易费太少的这个问题上,其实在透过多个节点转送交易时,交易费的高低会依照中间经过的节点数量会有所不同,数量愈高交易费也会伴随着提高。所以问题会回到在Raiden 网络上找到的最短路径所产生的交易费是不是可以比原本直接在Ethereum 区块链上直接交易要来得低。