1. 程式人生 > >比原鏈合約入門教程

比原鏈合約入門教程

tput 進一步 sub 下載工具 word ram code trac thp

比原項目倉庫:

Github地址:https://github.com/Bytom/bytom

Gitee地址:https://gitee.com/BytomBlockchain/bytom

一、合約簡述

equity是bytom的一種智能合約語言,是一門聲明性謂詞語言。詳細說明請參考官方equity合約相關介紹。

二、鎖定合約流程

1、合約編寫

合約的編寫可以通過參考合約模板來進行構造,如果需要更進一步的了解,可以閱讀一下合約相關的說明文檔。以典型的鎖定publickey合約為例,其合約代碼如下:

contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }

2、編譯合約

編譯合約的工具暫未提供,建議使用api調用的方式來編譯合約。調用的方式可以使用 curl 命令行 或 postman 工具等。

curl 調用方式如下:

curl -X POST http://localhost:9888/create-key -d ‘{"alias": "alice", "password": "123456"}‘

postman 需要到官網下載工具:

https://www.getpostman.com/

1)bytomd默認啟動或開啟auth認證,需要通過curl的方式調用API接口 獲取access toekn

curl -X POST http://localhost:9888/create-access-token -d ‘{"id":"token1"}‘

返回結果如下:

{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }

2)選擇 basic auth 認證方式,填入 access-token 的用戶名和密碼,即上述返回結果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3

技術分享圖片

3)如果合約參數包含類型PublicKey,便需要獲取合約參數 PublicKey, publicKey可通過API接口獲取。這裏需要將結果保存下來,以後解鎖合約的時候需要用到 root_xpub 和 pubkey對應的 derivation_path。

技術分享圖片

4)編譯合約,返回結果program 便是可鎖定的合約。(直接編譯合約產生的是合約執行步驟,如果部署這樣的合約,用戶可以直接構造對應的參數便能解鎖)

技術分享圖片

3、構建鎖定合約交易

下面表示鎖定 1000 個 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 類型的資產到合約 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具體內容參考構建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction

技術分享圖片

4、簽名交易

具體內容參考簽名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction

技術分享圖片

5、提交交易

具體方式參考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction

技術分享圖片

一旦合約交易打包成功,這樣合約交易便發送成功了。

三、解鎖合約流程

1、合約交易被區塊打包成功之後,可以查看具體的合約交易內容,找到對應的outputID。

技術分享圖片

技術分享圖片

其中ID字段便表示 outputID

2、根據outputID通過list-unspent-outputs 接口API 查找合約的UTXO,查看合約鎖定的資產類型和數量是否匹配

技術分享圖片

3、構建解鎖合約交易,解鎖clause unlockWithSig 的參數為 Signature, 但是簽名結果只能在 sign-transaction 成功之後才能得到,所以我們只需構建完成簽名參數即可。於之前構建的publicKey 為 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那麽簽名參數為root_xpub 和 derivation_path,對應的值分別為: "dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575" 和 [ "010400000000000000", "0100000000000000" ] 。 其結構如下:(具體字段可參考官方智能合約文檔說明)

技術分享圖片

4、簽名交易,具體內容參考簽名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction

技術分享圖片

5、提交交易,具體方式參考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction

技術分享圖片

解鎖合約交易打包成功之後,根據 outputID 通過list-unspent-outputs 接口API 查找原來的合約 UTXO,將顯示為空,否則合約交易解鎖失敗。

比原鏈合約入門教程