Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
150 0 0
比原项目仓库:& A( T" c3 F) O7 _: |7 p
Github地址:https://github.com/Bytom/bytom
  }$ O: z- ], j+ ~6 }. \Gitee地址:https://gitee.com/BytomBlockchain/bytom
, V. s  @+ a, U一、合约简述
# `2 I, R7 {" }equity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。% ]9 u4 X3 r% k/ G5 P' s
二、锁定合约流程0 W7 e5 `% P; A
1、合约编写% {4 A- m# L- \, ]/ s8 h1 F
合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:6 W* g" e+ b2 S& L7 ]
contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }
2 T, k; `+ e! C( F2、编译合约
3 x( e3 ?; |) L+ f7 ~7 H; A编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。9 v, e4 E5 ~( D5 b$ p" G$ p; M
curl 调用方式如下:
% w9 f: x* R% c0 Tcurl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'' e: S0 @& Y. W9 R# e3 S- b2 r
postman 需要到官网下载工具:
& H; `2 |! G7 ahttps://www.getpostman.com/
$ i$ k2 |9 k! I% I6 \* ^+ ~1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn
6 X- {: U  t# S( e+ acurl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'
2 V. H% Z9 I6 U! L返回结果如下:, G  b! T1 {8 c, d- [; g' p) S
{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }
+ X1 W# t) e' c; |9 {. ]2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
/ O" ?+ Z, z  R! `! o. ^8 e" s8 d: r+ N
3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。
5 O# t5 C8 ?3 O; `# d6 ^5 `, o& I! I
4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
* {# ?$ g  ]: N( l- O
; G, h+ Y" {6 q% w3 C, y3、构建锁定合约交易7 [4 V" u( |0 S$ T; F! c
下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction
  Y2 V; u0 C6 c! r
6 q( n0 L  K& y4、签名交易
4 G8 a. z3 h. k  k; K具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
. K' d* i; G: c, f6 x. X+ y; i( \( e" z2 h8 h0 N2 }
5、提交交易. r* J2 T5 ?, {5 @% _
具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction  U6 F- w4 |( e' H

( o. b$ N) I, U4 c5 w+ q% O5 e  n+ G6 D一旦合约交易打包成功,这样合约交易便发送成功了。
$ {! D$ E) W& d/ N( v" I; J三、解锁合约流程0 w+ T1 d4 V- T9 l
1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。2 M8 a* {5 d- p* P

! Z: m3 g! d: z) q: v5 y6 ]3 U* @6 k! R! T0 h# e. G* d% ~& G
其中ID字段便表示 outputID
3 j, Y0 S7 K& f# }2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配, [! x& x8 x, f2 e6 q1 B

3 m% {3 y1 B; {! j3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)( _- n; V  ~- a# |: ?

5 d9 ]6 d! f% T9 H4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
4 e: N% e8 G+ l/ p' I
! a( K: t* ]9 M" x5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
+ M2 Y/ g/ n8 k  Y1 A  q, o( w0 e) `
% x' f5 Y  c, |0 s  A% \. R; n7 E0 K解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8