20

【比原链】比原链合约入门-比原技术的博客

 5 years ago
source link: http://blog.51cto.com/13794581/2159059
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【比原链】比原链合约入门

一、合约简述
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,将显示为空,否则合约交易解锁失败。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK