Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
98 0 0
比原项目仓库:( s7 k0 L- s+ g% d5 A' N7 A
Github地址:https://github.com/Bytom/bytom1 {9 }4 P( P' l9 w
Gitee地址:https://gitee.com/BytomBlockchain/bytom
: q1 `) c1 g" J' U一、合约简述
( I, d# v, A5 U* R) @1 N" N6 Yequity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。
% g  l' W1 r% c/ O. o二、锁定合约流程
, v, E9 F2 C: k" ^$ N. e0 y1、合约编写
6 x- _3 l; J- `! W% c. l% r合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:
, J  V( q3 r$ t8 O5 K& O1 vcontract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }6 f. K- ^$ t% v
2、编译合约& g# E& O4 ]' s( D* c
编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。; D: X! j9 `+ u* A1 A% o
curl 调用方式如下:
; `6 o. F2 ~& M2 [3 scurl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'
% V( n: u# F. V4 g" e& o% \postman 需要到官网下载工具:! q1 X: d( c- @: Z$ o
https://www.getpostman.com/$ V" I# }8 p$ \4 Z
1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn
! X+ R$ P7 F( P. Wcurl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'4 h3 d8 b: }: [7 M& v
返回结果如下:
9 h9 d/ R( Y( V( O{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }) F) C5 S- U) C) _
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f39 i6 [$ O7 [- h; {$ r

6 A  F/ D! ^$ A$ t2 Q( g. ]3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。
- O+ K  W$ \1 ?9 y, }. W4 S" C, b& n/ Z4 k1 u1 V
4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁). _% k; M+ J# m( ^* \" _

; z$ o2 `3 ~( O3、构建锁定合约交易
7 z! `9 X8 ?- L: y$ a下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction
# q0 Y1 ?$ m8 {5 ]* y* Z* Q' r9 o. H
4、签名交易( j9 P: L- k7 A7 |3 M# G0 m/ i& O2 c
具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
! Y2 d( E" j9 ~' h3 R& E/ t9 u) e* P' e& q
5、提交交易
! p: j4 I  Z2 q" y" ?% a具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction0 L; P$ ]  x# G  D- ~! H0 ~
9 Z& w+ ]5 `. J0 d, Z
一旦合约交易打包成功,这样合约交易便发送成功了。
$ f+ ~& }4 k6 X1 s* K( z三、解锁合约流程# E7 H/ C# M! `# I* J
1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。5 ^, _$ j/ b4 j& Z/ b

4 C2 K5 b5 q9 [! ]3 E+ q& `9 ]1 b# |' l
其中ID字段便表示 outputID+ K+ L- d0 J, s( d$ Z
2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配8 p* m! t; V0 H8 a. o* j8 q

) {: ?8 k/ N: T/ |3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)" h1 I, h- H9 c6 P
; M' b9 z9 G. Y9 S+ e
4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction# u1 }; K" k9 G% g: \
5 ?7 h  }- J7 L( V& ~, q# V
5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
- \# o8 a# B9 P3 _0 Z  l0 }9 h' R; a7 Z/ m
解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8