美文网首页
雷电网络源码解析

雷电网络源码解析

作者: 牧码人爱跑马 | 来源:发表于2018-10-08 14:09 被阅读0次

    雷电网络

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


    以太坊上网络支付通道
    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
    

    相关文章

      网友评论

          本文标题:雷电网络源码解析

          本文链接:https://www.haomeiwen.com/subject/ayzdaftx.html