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分鐘時間
連接配接測試網
./scripts/cli/start_cli_testnet.sh
進入互動終端
2.體驗:建立賬戶、充值、發起交易、查詢交易
建立賬戶
account create
執行
account list
列舉剛剛建立的兩個賬号
給#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:
搜尋proto中的request,隻實作了這幾個接口:
做了接口接下來就是在錢包應用中調用了,此時就把libra-weight釋出完放一邊,進入Libra-wallet,代碼結構以及調用的實作如下:
然後前往浏覽器中調用接口,就能看到賬戶的交易資訊了
示例使用了官方測試網絡位址,當然你完全可以如前文中所寫,在本地自行搭建驗證節點,并且運作示例代碼直覺感受一番。至于錢包前端已經有不少人做了,可以先去 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