Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
90 0 0
比原项目仓库:6 h8 B. y2 R" H5 ?# g& a
Github地址:https://github.com/Bytom/bytom
: G. @) \% d" z, ~7 ]" O6 F* x9 VGitee地址:https://gitee.com/BytomBlockchain/bytom
) D0 `; s4 q' m0 t  J一、合约简述* M4 F! o+ I6 b0 p
equity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。
: ?, R# d& }/ v, Q. w二、锁定合约流程/ t- o  {1 a1 Z2 k( B
1、合约编写
  T( O& y8 G  I- k4 P合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:
6 E1 a$ V2 N; T# w7 X' {contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }
% z9 u+ [6 e/ B8 k  c) Y& A2、编译合约
' A. I1 G0 a* V- }/ K编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。7 y+ f' y) W( _: d, P/ ]" Q& ]
curl 调用方式如下:! D6 q( P8 s' Y  Y* p
curl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'+ l9 |3 v- Q- @& f! U0 u
postman 需要到官网下载工具:
- u& K2 n, c& {https://www.getpostman.com/
; v/ ?/ z3 ^5 H+ V$ A" K1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn
' a! J4 S: z0 p, T; Ocurl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'1 E3 \9 h2 ^6 ^$ u9 O, D
返回结果如下:  r* N! c& n  _' h0 Q& T
{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }$ e, k( b% f( ]5 B2 x6 e
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
9 i8 `" R5 F5 D1 K! t" O& k4 Z- m! n; l7 v8 j2 Y3 }
3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。$ B, i  e- U5 x! b3 ]6 F

- H8 Q& Z: U8 s; a4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
4 t9 p) ?9 K9 {/ n7 f3 H( }8 W
* Z) G* g. N; y9 _( p3、构建锁定合约交易4 ]! d3 o: Y# e% m! K) |7 V5 u
下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction
9 K8 C, l- f; `8 ^: n& f. R3 D+ i% C! \0 e* v: [
4、签名交易
5 R6 i# w, W$ Q1 {* K. u5 K具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction3 |6 L# ^3 H) s, \3 m
3 t) p1 T- }  o3 O9 m
5、提交交易1 X/ B6 f7 Q* ]2 Z3 C2 A
具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
+ w9 O: \, I0 m6 a. i  _
$ E% k6 E& u5 G0 c一旦合约交易打包成功,这样合约交易便发送成功了。. S0 t# _* T/ S, f
三、解锁合约流程
! q% X; U% P9 j# {: r" c0 k8 C1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。
  \% `  d3 M! M# X0 {
- j; l/ R6 Q% `7 m0 J% r# ~  s" E$ N) n% j4 U
其中ID字段便表示 outputID% h! c& p: N" z! Q4 p+ y. w
2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配" K; k+ k3 W/ k% |. u
1 u/ C  E& K+ K6 c# u
3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)5 [# u! V$ n9 G9 B1 |" \+ `1 Z  Y
% b+ l& g2 r, c$ L
4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
% G+ W7 P9 B) G( t3 q4 ~9 ~; J- `9 b' E$ R4 y) Z. K! ~3 [" d/ D
5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction7 X& @* v" r$ p9 E5 T: J; u( P
% K: `" b0 w- f6 O9 H) t
解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8