SmartMesh Developer Community以太坊智能合约

SmartRaiden 和 Lighting Network 进

2018-09-14  本文已影响13人  stevenbai_

SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换

前言

如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情?
目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网络,今天我就来告诉如何通过智能雷电和闪电网络来实现跨链原子资产交换。

场景

  1. Alice 在某个信息发布网站上发布信息,希望用1个 BTC 置换100个 SMT
  2. Bob 看到以后,和 Alice 进行沟通,达成交换意见 那么Alice 和 Bob 如何不需要借助任何第三方实现原子资产置换呢?

智能雷电与闪电网络测试环境

什么是智能雷电?

智能雷电是一种最新的链下扩容方案,可以实现即时的、低费用和可扩展的支付。可以运行与以太坊和光谱链,兼容ERC20 token 和 ERC233 token。
它是跨平台的,目前支持 Windows Linux MacOS Android IOS
为了更好的适用于移动设备各种复杂的网络环境,智能雷电支持无网支付,安全快捷。
同时智能雷电也是开源的,并且正在积极维护中,想要参与和详细了解请移步官方源码.

准备步骤

安装启动智能雷电

在本地搭建一个Bob和Alice的环境,让他们建立通道。假设你已经安装好了 go geth 如果没有请参考安装说明

连接以太坊测试网络

连接以太坊的测试链testnet

geth --testnet --fast --rpc --rpcapi eth,net,web3 --bootnodes "enode://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d1db1510d8f61e6a8866ad7f0e17c02b14182d37ea7c3c8b9c2683aeb6b733a1@52.169.14.227:30303,enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9cbc9216e7aa349691242576d552a2a56aaeae426c5303ded677ce455ba1acd9d@13.84.180.240:30303"

启动节点

启动两个节点,分别是AliceBob
启动Alice

smartraiden --datadir=.smartraiden --api-address=0.0.0.0:5001 --listen-address=127.0.0.1:400001 --address="0x69c5621db8093ee9a26cc2e253f929316e6e5b92" --keystore-path ~/.ethereum/keystore  -password-file /file --eth-rpc-endpoint ws://127.0.0.1:8546 

启动Bob

smartraiden --datadir=.smartraiden --api-address=0.0.0.0:5002 --listen-address=127.0.0.1:40002 --address="0x31ddac67e610c22d19e887fb1937bee3079b56cd" --keystore-path ~/.ethereum/keystore --password-file /file --eth-rpc-endpoint ws://127.0.0.1:8546  

此时你就已经成功搭建好了本地智能雷电节点网络,可以通过查询SmartRaiden api文档来创建通道。

安装启动闪电网络

本地搭建一个Bob和Alice的闪电网络测试环境,让他们建立通道。

连接Btcd测试链

默认你已经安装好了btcdlnd,如果没有请参考安装说明

运行btcd,打开终端,然后运行

btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
启动节点

启动两个节点,分别是AliceBob
启动Alice

lnd --rpclisten=localhost:10001 --listen=localhost:10011 --restlisten=localhost:8001 --datadir=data --logdir=log --debuglevel=info --bitcoin.testnet --bitcoin.active --bitcoin.node=btcd --btcd.rpcuser=kek --btcd.rpcpass=kek 

启动Bob

lnd --rpclisten=localhost:10002 --listen=localhost:10012--restlisten=localhost:8002 --datadir=data --logdir=log --debuglevel=info --bitcoin.testnet --bitcoin.active --bitcoin.node=btcd --btcd.rpcuser=kek --btcd.rpcpass=kek 

为了不必每次都输入一堆命令,可以修改配置文件lnd.conf

datadir=data
logdir=log
debuglevel=info
debughtlc=true

bitcoin.active=1
bitcoin.testnet=1
bitcoin.node=btcd
btcd.rpchost=localhost
btcd.rpcuser=kek
btcd.rpcpass=kek

现在启动Alice节点我们只需要输入

lnd --rpclisten=localhost:10001 --listen=localhost:10011 --restlisten=localhost:8001

重新打开新的终端,创建Alice钱包密码

lncli --rpcserver=localhost:10001 --macaroonpath=data/admin.macaroon create

为了避免每次都输入--rpcserver=localhost:1000X--macaroonpath标记,可以设置一些别名

alias lncli-alice="lncli --rpcserver=localhost:10001 --macaroonpath=data/admin.macaroon"
alias lncli-bob="lncli --rpcserver=localhost:10002 --macaroonpath=data/admin.macaroon"

Bob创建钱包同上

此时AliceBob就可以创建通道了,详细教程请参考lnd api

实现方法

到这里我们为了进行SmartRaiden 和 Lighting Network 进行跨链原子资产交换的准备工作就已经完成了,具体的实现方法如下。
回到我们最初的那个问题

Alice 在某个信息发布网站上发布信息,希望用1个 BTC 置换100个 SMT

Bob和Alice SmartRaiden场景

sequenceDiagram
participant A as Alice's SmartRaden
participant B as Bob's SmartRaiden 
B->>A:发送100SMT 密码=Secret
Note over A,A:收到MediatedTransfer,密码hash=Sha256(Secret)
A->>B:不断发送SecretRequest...

Bob和Alice Lnd场景

sequenceDiagram
participant A as Alice's Lnd
participant B as Bob's Lnd 
Note over B,B:Bob addinvoice:密码=Secret 1BTC
A->>B:发送:1BTC,payment_hash=Sha256(Secret)
Note over B,B:校验Payment_hash=Sha256(Secret)
Note over A,A:发送成功后,可以知道交易的Secret

1. Bob和 Alice 分别启动自己的 Atmosphere 服务

Atmosphere 服务会启动响应的SmartRaiden和Lnd
假设 Alice 在SmartRaiden的节点使用的私钥为 SA_Priv, 公钥为 SA, 在 Lnd 节点使用的私钥为 LA_Priv, 公钥为 LA
假设 Bob 在 SmartRaiden 节点使用的私钥为 SB_Priv, 公钥为 SB, 在 Lnd 节点使用的私钥为 LB_Priv, 公钥为 LB

2. Bob 的Atmosphere服务

3. Alice 的Atmosphere 服务

跨链时序图

sequenceDiagram
participant ae as  Alice's Atmosphere
    participant al as Alice's Lnd
    participant as as Alice's SmartRaiden
    participant space
    participant bs as Bob's SmartRaiden
    participant bl as Bob's Lnd
    participant be as Bob's Atmosphere
    
    be->>ae: 可以用我100SMT换你1 BTC? 
    ae->>be: 没问题
    be->>bs: 发送MediatedTransfer 给Alice:Secret,100SMT
    be->>bl:准备接受金额为1BTC,密码为Secret的交易
    bs->>as: MediatedTransfer(Secret,100SMT,from Bob to Alice,Expiration=600)
    as->>ae: 收到了有效的 MediatedTransfer
    ae->>al: 通过Lnd向bob发送 (1BTC, secretHash, Expiration=10Block) 
  
    al->>bl: Send payment to bob(1BTC,secertHash,Expiration=10Block)
        loop alice wait
        al->>al:是否收到了Secret(包括链上注册的密码)
    end
    bl->>al: 凭借Secret换回1BTC
    bl->>be: 收到有效的 HTLC
    loop bob wait
        be->>be: 收到了来自Alice的1BTC ?
    end
    be->>bs: 响应来自Alice'SmartRaiden 的 SecretRequest 
    bs->>as: 发送 Secret给Alice 开始正常的雷电交易
    ae->>as:如果还没有收到Smarraiden交易,去链上注册密码

上一篇 下一篇

猜你喜欢

热点阅读