天天看點

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

Facebook Libra最近很是吸引眼球,作為看好Libra的區塊鍊應用開發者,自然是要嘗試着做些什麼了。本文記錄了開發一個Libra錢包的具體過程,采用RPC調用方案和鍊做互動。過程描述較為仔細,請視情況跳過已了解的内容。最後附上了Libra錢包源碼的Github倉庫位址,歡迎clone。

1.安裝Libra、編譯用戶端、連接配接測試網

安裝

git clone https://github.com/libra/libra.git && cd libra
./scripts/dev_setup.sh
           

編譯用戶端

cargo build
           

如果遇到 google/protobuf/wrappers.proto: File not found (macos環境),則在cargo build之前執行

export PATH="/usr/local/opt/protobuf/bin:$PATH"
           

看到下圖則表示完成,預計5分鐘時間

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

連接配接測試網

./scripts/cli/start_cli_testnet.sh
           

進入互動終端

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

2.體驗:建立賬戶、充值、發起交易、查詢交易

建立賬戶

account create
           

執行

account list
           

列舉剛剛建立的兩個賬号

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

給#0賬号充值

account mint 0 10000
           

然後查詢餘額

query balance 0
           

結果為

Balance is: 10000

發起交易

transfer 0 1 2
           

之後查詢交易

query txn_acc_seq 0 0 true
           

傳回包括Committed transaction和Events和兩部分。通過amount可以看出數額最多保留到小數點後6位,這對于穩定币而言足矣。

此時嘗試退出後重新進入,執行account list傳回為空,看似資料被清除了。但當你執行account create以後建立的賬戶還和之前的一樣,再查詢餘額,之前充值的影響還在,其實資料已經上了測試網絡。

3.本地運作節點

體驗過Libra的基本操作後,接下來我們需要自己在本地跑一個認證節點。

cargo run -p libra_swarm -- -s 
           

(注意:請提前關閉本地的代理,否則會報錯)

如果執行順利,會和上文執行

./scripts/cli/start_cli_testnet.sh

一樣進入互動終端。

可以看到運作在本地的節點,資料是和測試環境獨立的,并且退出後資料會重置。

4.調用鍊的API實作

由于Libra提供了rpc調用方式,我們能夠很友善的選擇語言進行開發。這裡我基于nodejs開發了一個npm包

libra-weight

,用于封裝rpc方法提供前端調用的基本api。

libra-weight在實作接口前做了這些事:

複制rust源碼中的proto檔案到項目中,然後執行以下代碼:

protoc --proto_path=./ --proto_path=/usr/local/Cellar/protobuf/3.7.1/include/ --js_out=import
_style=commonjs,binary:. *.proto
           

每個.proto檔案都會得到編譯後的*.pb.js:

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

搜尋proto中的request,隻實作了這幾個接口:

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

做了接口接下來就是在錢包應用中調用了,此時就把libra-weight釋出完放一邊,進入Libra-wallet,代碼結構以及調用的實作如下:

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

然後前往浏覽器中調用接口,就能看到賬戶的交易資訊了

Libra區塊鍊錢包開發實錄附源碼 - LearnDapp系列

示例使用了官方測試網絡位址,當然你完全可以如前文中所寫,在本地自行搭建驗證節點,并且運作示例代碼直覺感受一番。至于錢包前端已經有不少人做了,可以先去 https://github.com/learndapp/awesome-libra#open-source-wallets 看看錢包的部分。

建立賬戶可以在Libra終端内進行,因為Libra沒有挖礦,可以認為充值屬于特殊的一種轉賬交易,也可以在終端中完成。如果你現在就要做到在錢包應用中建立賬戶,不妨看看這個案例 https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52 ,當然這種實作方式隻是用于示範,建立賬戶的操作交由他人或經過網絡傳輸都是不安全的。合理的方案是本地環境建立賬戶+api調用進行轉賬交易的廣播。

後話

Libra項目有很多可以探索的地方。比方說用Move編寫的mvir字尾檔案,如同以太坊Solidity的sol字尾一樣,可以稱之為Libra中的智能合約。目前在應用端做嘗試的也不少,比如區塊浏覽器,可以去 https://github.com/learndapp/awesome-libra#blockchain-explorers 的區塊鍊浏覽器部分檢視。接下來我也會做更多實踐,有新發現會持續分享。

文中提到的錢包源碼:https://github.com/learndapp/Libra-wallet

本文已整理至倉庫:https://github.com/learndapp/LearnDapp

記得順手點個Star,這是對我最好的支援。有任何問題也歡迎随時聯系我的微信公衆号「區塊鍊瓦工」。

參考連接配接

官方文檔:

https://developers.libra.org/docs/my-first-transaction

https://developers.libra.org/docs/move-overview

https://developers.libra.org/docs/crates/ir-to-bytecode

https://developers.libra.org/docs/reference/libra-cli

繼續閱讀