博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【比原链】比原链合约入门
阅读量:6845 次
发布时间:2019-06-26

本文共 2087 字,大约阅读时间需要 6 分钟。

一、合约简述

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 -d '{"alias": "alice", "password": "123456"}'
postman 需要到官网下载工具:

1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn

curl -X POST -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:

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

4、签名交易,具体内容参考签名交易的wiki:

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

5、提交交易,具体方式参考提交交易的wiki:

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

一旦合约交易打包成功,这样合约交易便发送成功了。

三、解锁合约流程

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:

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

5、提交交易,具体方式参考提交交易的wiki:

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

解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。

转载于:https://blog.51cto.com/13794581/2159059

你可能感兴趣的文章
策略模式
查看>>
主键和索引区别
查看>>
CentOS 6.1 安装Nodejs及npm
查看>>
『C#基础』多线程笔记「二」线程同步
查看>>
countif and left or right
查看>>
Vmware vSphere(Esxi)常见问题汇总
查看>>
CentOS 6.3完成mysql 5.5.27安装后的初始化工作(二)添加管理帐号
查看>>
android下使用libcurl和c-ares
查看>>
ssm+mavn+idea2017.1+jdk1.7+
查看>>
HTTPClient模拟登陆21CN
查看>>
一周学习回顾1(入门XHTML,以及一些学习心得)
查看>>
kafka
查看>>
MYSQL配置远程服务器访问
查看>>
【优达学城测评】Using CSV Module(Python)
查看>>
(转) Twisted :第六部分 抽象地利用Twisted
查看>>
php+mysql+html页面编码解决方案
查看>>
moinmoin 1.9.7 成功移机记录
查看>>
手机QQ浏览器和微信内置webview对input type="file" 的change事件不灵
查看>>
毕业设计总目录
查看>>
121 项目 031 笔记向 jquery validation
查看>>