Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
141 0 0
比原项目仓库:+ s  j+ d' g* {9 L
Github地址:https://github.com/Bytom/bytom1 W/ D7 O8 K. J+ ?$ z& k  ~2 f" O( G
Gitee地址:https://gitee.com/BytomBlockchain/bytom
/ D0 E2 V0 }, F- Z# ?! `9 S7 Q一、合约简述
8 C0 s* l  `! j3 T, G+ zequity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。
( @, Q! s  |- [1 ~/ Z- v' @! p6 |二、锁定合约流程
, c. B8 x6 W$ y$ p5 k, N1、合约编写
! F! Z% z' d+ M合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:
6 J/ x) j  r4 g7 `$ |0 k' }contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }! E+ z5 J5 j4 U2 @) o
2、编译合约# u% ~' F/ l( j4 p+ ?
编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。) P3 I& E/ h9 @, _% Z+ I: D
curl 调用方式如下:
1 ^1 r  j! G, _7 ~! V5 hcurl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'2 k$ h$ W% [' J! t/ Z
postman 需要到官网下载工具:. l% \1 R# ]" X
https://www.getpostman.com/
' u) `" ?& B3 W5 r: K1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn" v2 }5 ?/ S- [/ Q6 I& t/ x
curl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'
% M3 B% m+ m2 T; [7 R1 L: m+ v返回结果如下:" S& b( W: N+ f1 n7 S- @- s
{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }
7 q( ~9 x" g! D! u2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
( L  ~* x- J( _( j9 O4 P# R
) p! P1 I: @! m3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。; g* n3 j4 y" E4 z+ A1 f

" Y1 ?4 s7 Y. j( |$ {8 `3 p; r. P4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
$ u, d2 I+ Z& V0 n. N$ ^& S. B" F+ ~3 A# x/ h. ^/ V( o8 e7 ~
3、构建锁定合约交易
& q! N" [( r) f: b% a& H9 o下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction
; B' [* X$ N5 n& J  O3 _1 s) x& w5 X" X* }- X4 m. e
4、签名交易
2 d" a( q% o, \  A# `具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
$ y1 ^6 T: ?  J/ |/ C7 X; B: ]! {4 e0 o# k" W# j4 g  ?4 c
5、提交交易
  j& p- \1 ~5 _1 F具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction6 [' q. L3 t: j2 t4 Q8 I0 n

; o9 W! _. ], x& p7 U/ o一旦合约交易打包成功,这样合约交易便发送成功了。* U6 R6 V0 k2 E7 K
三、解锁合约流程
: o7 E2 D9 l3 X2 S3 v: Z) Q1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。
' u. m/ d* Y/ _) U6 w) V0 y' d/ i: o3 f6 E% `: @! H
6 p7 f5 r6 _2 m: ~$ \6 l- J  T
其中ID字段便表示 outputID
2 M- _3 Z: J1 ~* o2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配0 [+ P9 W4 m& _- K# G

' v0 u3 p; J/ C) v1 Z! N3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)
. g6 h7 t6 L3 L, s, _
3 N$ m% e" T1 [4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction+ k9 U( M3 q& i) t

# M0 [4 i0 n: r; v8 R* R; K% j7 K6 @6 F5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction2 O) \6 @3 u9 J  s) i
* Z# X5 ^( k4 |$ u. f
解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8