虫洞社区·签约做者 steven baihtml
若是可以进行以太坊和比特币跨链原子资产交换,是否是一件很酷的事情?
目前链下的扩容方式有不少,最广为人知的就是比特币的闪电网络和以太坊的雷电网络,今天我就来告诉如何经过智能雷电和闪电网络来实现跨链原子资产交换。node
智能雷电是一种最新的链下扩容方案,能够实现即时的、低费用和可扩展的支付。能够运行与以太坊和光谱链,兼容ERC20 token 和 ERC233 token。
它是跨平台的,目前支持 Windows Linux MacOS Android IOS
为了更好的适用于移动设备各类复杂的网络环境,智能雷电支持无网支付,安全快捷。
同时智能雷电也是开源的,而且正在积极维护中,想要参与和详细了解请移步官方源码.git
在本地搭建一个Bob和Alice的环境,让他们创建通道。假设你已经安装好了 go
geth
若是没有请参考安装说明github
链接以太坊的测试链testnet
web
geth --testnet --fast --rpc --rpcapi eth,net,web3 --bootnodes "enode://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d1db1510d8f61e6a8866ad7f0e17c02b14182d37ea7c3c8b9c2683aeb6b733a1@52.169.14.227:30303,enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9cbc9216e7aa349691242576d552a2a56aaeae426c5303ded677ce455ba1acd9d@13.84.180.240:30303"
启动两个节点,分别是Alice
和Bob
启动Alice
api
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
datadir
节点的本地数据存储目录api-address
rest api 监听端口address
以太坊节点地址,若是没有能够经过geth account new
建立keystore-path
--keystore-path 路径password-file
password-file 路径eth-rpc-endpoint
以太坊全节点的rpc端口,默认的websocket
是8546此时你就已经成功搭建好了本地智能雷电节点网络,能够经过查询SmartRaiden api文档来建立通道。服务器
本地搭建一个Bob和Alice的闪电网络测试环境,让他们创建通道。微信
默认你已经安装好了btcd
和lnd
,若是没有请参考安装说明websocket
运行btcd,打开终端,而后运行
btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
txindex
是必须的,以便lnd
客户端可以从中查询历史交易btcd
testnet
指定咱们正在使用的testnet
网络rpcuser
和rpcpass
设置用于对btcd
实例进行身份验证的默认密码启动两个节点,分别是Alice
和Bob
启动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
rpclisten
:host:侦听RPC服务器的端口。这是应用程序与之通讯的主要方式lndlisten
:host:侦听传入P2P链接的端口。这是在网络层面,不一样于Lightning频道网络和比特币/ Litcoin网络自己。restlisten
:host:port,公开REST api,用于与lndHTTP 进行交互。例如,您能够经过向GET请求获取Alice的频道余额localhost:8001/v1/channels。datadir
:lnd将存储数据的目录logdir
:记录输出的目录。debuglevel
:全部子系统的日志记录级别。能够设置为 trace,debug,info,warn,error,critical。bitcoin.testnet
t:指定是否使用simnet或testnetbitcoin.active
:指定比特币处于活动状态。还能够包括 --litecoin.active激活Litecoin。bitcoin.node=btcd
:使用btcd完整节点与区块链链接。请注意,使用Litecoin时,选项是--litecoin.node=btcd。btcd.rpcuser和--btcd.rpcpass
:btcd实例的用户名和密码。请注意,使用Litecoin时,选项为--ltcd.rpcuser 和--ltcd.rpcpass启动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
lnd.conf
位于:/Users/[username]/Library/Application\ Support/Lnd/lnd.conf
~/.lnd/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
建立钱包同上
此时Alice
和Bob
就能够建立通道了,详细教程请参考lnd api
到这里咱们为了进行SmartRaiden 和 Lighting Network 进行跨链原子资产交换的准备工做就已经完成了,具体的实现方法以下。
回到咱们最初的那个问题
Alice 在某个信息发布网站上发布信息,但愿用1个 BTC 置换100个 SMT
Bob和Alice SmartRaiden场景
Bob和Alice Lnd场景
Atmosphere 服务会启动响应的SmartRaiden和Lnd
假设 Alice 在SmartRaiden的节点使用的私钥为 SA_Priv, 公钥为 SA, 在 Lnd 节点使用的私钥为 LA_Priv, 公钥为 LA
假设 Bob 在 SmartRaiden 节点使用的私钥为 SB_Priv, 公钥为 SB, 在 Lnd 节点使用的私钥为 LB_Priv, 公钥为 LB
1 Bob发起交易,指定Secret,金额为100,token 为 SMT,接收方为 SA
2 Bob等待是否收到一个金额为1BTC,密码 hash 为 Sha256(Secret),
1 Alice 在 SmartRaiden 上等待是否收到了来自 Bob 的100个 SMT交易