比原鏈合約入門教程

比原項目倉庫:git

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

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

1、合約簡述

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

2、鎖定合約流程

一、合約編寫

合約的編寫能夠經過參考合約模板來進行構造,若是須要更進一步的瞭解,能夠閱讀一下合約相關的說明文檔。以典型的鎖定publickey合約爲例,其合約代碼以下:工具

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

二、編譯合約

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

curl 調用方式以下:url

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

postman 須要到官網下載工具:3d

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 即是可鎖定的合約。(直接編譯合約產生的是合約執行步驟,若是部署這樣的合約,用戶能夠直接構造對應的參數便能解鎖)

三、構建鎖定合約交易

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

四、簽名交易

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

五、提交交易

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

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

3、解鎖合約流程

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

其中ID字段便表示 outputID

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

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

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

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

解鎖合約交易打包成功以後,根據 outputID 經過list-unspent-outputs 接口API 查找原來的合約 UTXO,將顯示爲空,不然合約交易解鎖失敗。

相關文章
相關標籤/搜索