蟲洞社區·簽約做者 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交易