雷电网络源码解析

雷电网络

基于以太坊的快速数字资产交易


以太坊上网络支付通道
Raiden 利用链下网络状态技术给以太坊上的数字资产带来了许多nice的属性:

  • 1.可扩展性: 它与参与者的数量呈线性关系(每秒可能有1,000,000+次转帐)。
  • 2.快速: 转账在一秒钟的时间内被确认和确定。
  • 3.匿名性:单次转帐不会显示在全局分布式帐本中。
  • 4.互操作性: 以太坊上任何实现了标准代币的接口的代币都可以互相交易。
  • 5.低额交易费: 交易费比区块链上的交易费低7个数量级。
  • 6.小额支付: 低交易费允许有效的转移小额资金。
    技术点
    该技术类似于比特币的闪电网络。
    基本思想是: 所有的交易需要记载到区块链上的共享账本上(这是区块链的瓶颈),而该技术是通过交易双方私下签名交易信息, 不需要全部上链。Raiden 使用一个p2p支付通道网络,并在以太坊的区块链上存一定的押金。Raiden 是以太坊上的一个扩展应用。Raiden 节点和以太坊的节点互相联通工作,作为交易的基础设施, 并用以太坊上的链来管理通道的存证信息。Raiden 提供了简单的API, 使得DApps 非常容易实现。
    应用
  • 为内容分发做小额计费:Paywalls,广告和订阅。
  • 去中心化的M2M市场: 特别是在物联网中, 微小的带宽, 存储, cpu占有率, 能量, 传感器数据等可以交易。
  • 没有交集的代币系统: 游戏代币, 奖励代币, 私有货币。
  • API 访问: 对于即将来临的M2M经济,每次API 访问计费。
  • 快速去中心话交易。
    与以太坊相辅相成
    Vitalik Buterin 说:“ 状态通道是一种重要技术, 有可能大大提高许多区块链应用程序的可扩展性和隐私性; 结合分片和其他隐私秘密保护技术, 他们是一个重要的组合,可以实现去中心化的许多属性,而这些属性是圈内人和机构所期望,也应该实现的“

Raiden 1.0 详解:
Raiden 1.0 通过合约的方式实现了token 的线下状态通道支付。
Registry 合约是系统注册合约,以太坊上的每一种代币都可以一次注册, 然后会产生一个基于该token的状态通道管理合约。每个有该token的用户都可以选择一个搭档建立一个状态通道合约,通过设置押金(会在链上存证)实现线下通道支付,线下交易都是双方各自签名确认即可, 撤出时, 再双方提供证据, 链上交易存证。合约如下:


image

Raiden 的类介绍:

ASSET


  • a. 没有特殊规范来规定哪样的资产。
  • b.只要是上链的一个简单合约地址就可以(如Toke address)。

RAIDENPROTOCOL


  • a.节点间的传输层交互
  • b.RaidenService 的网络事件通知。

RAIDEN SERVICE


  • a.链下运行。
  • b.Raiden 的根类。
  • c.暴露Raiden 与Raiden的接口。
  • d.需要直接访问本地的Blockchain节点。
  • e.管理所有的链上链下交互路由。
  • f.维护AssetManagers列表。
  • g.每个维护的AssetManagers只负责一个资产。

ASSETMANAGER


  • a.链下运行。
  • b.完全由RaidenService实例拥有。
  • c.与一个单一资产相关联。
  • d.与链上的ChannelManagerContract相关联,负责同一个资产。
  • e.在单一资产上维护一组到其他节点的通道。
  • f.从链上的ChannelManagerContract获取通道初始化列表。

CHANNELMANAGERCONTRACT


  • a.链上运行。
  • b.关联实实在在的一种资产。
  • c. 维护链上的NettingChannelContracts列表。

NETTINGCHANNELCONTRACT


  • a.链上运行。
  • b.和一种资产相关联。
  • c.知道同一通道的两个参与方(链上 地址)
  • d.持有双方存款
  • e.在链上执行一个通道的结算。

TRANSFERMANAGER


  • a.链下运行。
  • b.负责处理TransferTasks,它们代表了脱机通道中双方之间的单一转移。
  • c.在没有直接目标通道打开的情况下,会产生TransferTask 作为中介转移。
  • d.如果具有接收到的转移目标的通道打开,则可以启动到目标的转移。

TRANSFERTASK(UML: TRANSFER_ACTIVITY, TRANSFER_STATE)


  • a.链下运行。
  • b.异步运行, 通过网络事件触发。
  • c.和AssetManager, TransferManager 和RaidenService 相关联。
  • d. 和transfer完全相关联。
  • e.负责找到与之相关联的传输路径。
  • i. 路径是活跃的。
  • ii.路径有足够的资金用于转移。
  • f.如果找不到路径,则启动CancelTransfer。

TRANSFER


  • a.包含nonce, 资产, 金额,参与方,locksroot[, secret]。
  • b. nonce: 跟踪消息序列的计数器。Transfers的nonce 在通道中更新, 参与方的nonce在参与方的本地镜像中更新。
  • c.是一个merkle树的树根。它记录了他们的hashlocks的最精简locked_ammounts。

LOCKEDTRANSFER


  • a. 如果收款人知道hashlock的secret, 那么他就可以声明locked_amount。 locked_amount不是余额的一部分,而是在locksroot中隐含。

CHANNEL


  • a.链下运行。
  • b.被本地或者伙伴节点初始化。
  • c.在链上有一个相对应的NettingChannelContract。
  • d.在每个资产的对端节点中最多有一个通道。也就是说,(目前)最多两个(不同的)节点可以为每个资产设置一个通道。
  • e.和伙伴节点维护最终的交易账本。
  • f.执行创造和取消transfers。
  • g.维护LockedTransfers列表。
  • h. 执行LockedTransfers的声明。
  • i.更新自己和伙伴的账目(接受或者发送)。

各模块关系图如下:


concept_relationships.png

核心步骤。


TRANSFERS IN A CHANNEL


  • a.类型: Transfer, LockedTransfer (Parent class for): MediatedTransfer, CancelTransfer。
  • b.Trasfers 接收到一个RaidenProtocol实例化的消息,并转发给RaidenService,由TransferManager来真正的处理。
  • c.TransferManager 从AssetManager中获得相关联的通道。
  • d.任何通道可以追踪Transfers和LockedTransfers。
  • e.Transfers 可以通过通道发送给参与方的节点, 也可以注册本地通道。因此,通道中的transfer既可以是用于发送的, 也可以是用于接收的。
  • f.一旦接收到transfer, 由通道注册。
  • i.Transfer 接收者必须要有正确的nonce。这个nonce是当每次接收到伙伴节点transfer而增加。这个nonce 在本地伙伴节点维护。参与双方维护相同的增加。保证参与transfer双方的序列一致性。
  • ii.收到的transfer包含secret, 解锁secret得到金额, 并相应更新余额。
  • iii.如果我们收到了LockerTransfer,LockedTransfer将被注册。
  • iiii.最后,自己的余额和合作伙伴的余额根据allowance(= transfer.balance - self.balance)进行更新。如果转让包含secreted, 余额则根据步骤ii中触发的声明进行。
  • g.如果Transfer被发送, 则由Channel注册:
  • i.对于接收方,是对称的。
  • ii.我们不需要验证lockroots是否正确。
  • h.只有节点的当前余额超过传送的额度并且未达到到期的块高度(后者仅与LockedTransfers相关),Transfers才能被初始化。

选择多条Transfer的场景


正常的TRANSFER


A 通过B 转帐给C:
A: 初始化secret
A: MediatedTransfer -> B
B:MediatedTransfer ->  C
C:secretRequest -> A (证明收到的transfer是有效的)
A:Secret -> C
C:Secret -> B

CANCELTRANSFER:


A: 初始化Secret
A: MediatedTransfer -> B
B: MediatedTransfer -> C(失败: C 不能和D建立路经)
C:CancelTransfer -> B
B:MediatedTransfer -> C2
C2:MediatedTransfer -> D

TIMEOUTTRANSFER


A: 初始化Secret
B: MediatedTransfer -> B
B: MediatedTransfer -> C (失败:没有接收到C的ACK消息)
B: TransferTimeout -> A
决议:A不会透露secret,尝试新的transfer,B禁止C
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容