1. 程式人生 > >SmartRaiden 和 Lighting Network 進行去中心化跨鏈原子資產交換

SmartRaiden 和 Lighting Network 進行去中心化跨鏈原子資產交換

作者介紹

蟲洞社群·簽約作者 steven bai

前言

如果能夠進行以太坊和比特幣跨鏈原子資產交換,是不是一件很酷的事情? 目前鏈下的擴容方式有很多,最廣為人知的就是比特幣的閃電網路和以太坊的雷電網路,今天我就來告訴如何通過智慧雷電和閃電網路來實現跨鏈原子資產交換。

場景

  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://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d[email protected]52.169.14.227:30303,enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9c
[email protected]
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  
  • 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測試鏈

預設你已經安裝好了btcdlnd,如果沒有請參考安裝說明

執行btcd,開啟終端,然後執行

btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
  • txindex是必須的,以便lnd客戶端能夠從中查詢歷史交易btcd
  • testnet 指定我們正在使用的testnet網路
  • rpcuserrpcpass 設定用於對btcd例項進行身份驗證的預設密碼
啟動節點

啟動兩個節點,分別是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 

  • rpclisten:host:偵聽RPC伺服器的埠。這是應用程式與之通訊的主要方式lnd
  • listen: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.testnett:指定是否使用simnet或testnet
  • bitcoin.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

  • MacOS:lnd.conf位於:/Users/[username]/Library/Application\ Support/Lnd/lnd.conf
  • Linux:~/.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建立錢包同上

此時AliceBob就可以建立通道了,詳細教程請參考lnd api

實現方法

到這裡我們為了進行SmartRaiden 和 Lighting Network 進行跨鏈原子資產交換的準備工作就已經完成了,具體的實現方法如下。 回到我們最初的那個問題

Alice 在某個資訊釋出網站上釋出資訊,希望用1個 BTC 置換100個 SMT

Bob和Alice SmartRaiden場景

sm

Bob和Alice Lnd場景

lnd

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服務

  • 1 Bob發起交易,指定Secret,金額為100,token 為 SMT,接收方為 SA

  • 2 Bob等待是否收到一個金額為1BTC,密碼 hash 為 Sha256(Secret),

  • 3 收到以後,允許自己的 SmartRaiden 響應 SecretRequest

3. Alice 的Atmosphere 服務

  • 1 Alice 在 SmartRaiden 上等待是否收到了來自 Bob 的100個 SMT交易

  • 2 一旦收到, Alice 校驗該交易是否有效,比如 Expiration 時間是否足夠,必須大於125分鐘(500Spectrum 塊)

  • 3 如果都一致,那麼通過向自己的 Lnd 註冊這個 PaymentReq,並指定過期時間為100分鐘,secretHash

  • 4 檢測 Lnd 是否收到了密碼,如果收到了,立即向 自己的SmartRaiden 註冊密碼

跨鏈時序圖

seq

新增微信(cdong1024),加入區塊鏈開發者技術交流群

在這裡插入圖片描述