Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
80 0 0
比原项目仓库:  X( m6 S* A% v2 t; ]. m0 n/ C& |
Github地址:https://github.com/Bytom/bytom+ [. L* R' a  v# o' S
Gitee地址:https://gitee.com/BytomBlockchain/bytom" }8 u. x6 O. A; |5 J; @
一、合约简述
+ t6 F) y$ d0 l, Mequity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。& `7 X5 Q! p- R$ S9 P
二、锁定合约流程) n- V9 I5 z) T. N4 p1 \, r: V8 g
1、合约编写4 u& K4 j/ v' K- l% E  I% }
合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:/ R: U) N( O4 P; r9 o* @- O
contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }) g# S+ Y& [: G. {
2、编译合约
( N. G, ]& P# v" m0 C- }: h; g8 N编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。1 k' J8 [; t5 h  u9 ]* a$ }
curl 调用方式如下:) W5 Q6 K, z; R9 c" s  w
curl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'+ ], k7 B- r% {$ v4 V$ h$ x
postman 需要到官网下载工具:: b7 T. O$ r8 l. X8 U2 U
https://www.getpostman.com/. S2 D0 e5 x( Q' R9 G
1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn: Y# E) L; [( e  u$ z) g) n
curl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'9 C; U* g, k4 @! ~% Z- `3 z, ?  J
返回结果如下:! Q3 {( z! p1 }) d. Z8 l0 Z9 F9 l6 J7 \
{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }! O; }6 a9 }; Z6 D* s
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
! j* i- t& z+ F4 n* Z3 s0 i# h8 K3 q# X5 y6 J
3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。* R4 Q/ O: b0 B

& G7 f$ d9 o' k4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
5 L- i( J' X7 L* R( H; O# a. G0 o- I3 J" ~% r
3、构建锁定合约交易
: y8 Q6 C* J" a8 x" d  ~下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction  W* \9 W( U' p% F

- \5 a9 c' s- U" l3 e8 j! j% v4、签名交易
/ K/ w& `6 ?2 d3 _! V4 i; z具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction* Y7 h8 n0 ~& D5 [" p! K

  z8 A" B# u. f2 W5、提交交易, z( J3 y6 P% }5 l1 e. V
具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction1 `' H5 h; }; ]& q! M

$ V4 c% _0 ]( _# Y, g8 K- u# w% |( g一旦合约交易打包成功,这样合约交易便发送成功了。
1 h  ~/ {; j, b. w$ w三、解锁合约流程0 I4 j  f, w$ {5 [$ t& o6 G  Q
1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。) P- z+ {' j% o: @5 @3 q0 h6 B

! E4 }! ^+ Y2 g/ J
/ v) K# T2 u3 {1 K( \2 R9 a其中ID字段便表示 outputID
* g! F. x! U3 O3 }. P* J! l! Q& f2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配
9 b- [  x: A  }8 z4 Z& ^
5 Y& T9 N2 r$ y9 m) J3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明): b( U/ M% w/ D% b0 `
1 x2 m8 T7 `5 J
4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
- a+ B) |8 a! j" S' q9 W6 J
8 P4 f$ ?$ l8 m( K6 Z5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction7 d5 H' ?% W  S' I5 |
: O" A! ~- Y# f# ^4 _
解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8