Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
140 0 0
比原项目仓库:
. B% E/ l; b8 H& N/ E) U$ ?1 @3 D7 fGithub地址:https://github.com/Bytom/bytom
: I$ G3 g- M4 O- M/ u0 YGitee地址:https://gitee.com/BytomBlockchain/bytom& H& E$ o8 V; R4 X
一、合约简述6 D4 u1 T" a1 H$ u8 a
equity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。. Y2 q8 N7 _# |  b6 b/ C
二、锁定合约流程
3 L7 p" D, N+ ]* p: [1、合约编写
: a0 T0 g, s1 \合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:
7 ^% G7 M0 M/ s2 K. s# k# ucontract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }
: J% T: p. B1 ]- C9 p6 C! y& s2、编译合约
6 ~2 {0 d7 ^7 W- U: `7 P) `编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。
1 `/ C/ G% F; c7 V: p- b1 b2 t* y! t0 Ncurl 调用方式如下:
+ y9 N! r$ R3 r& Z' Fcurl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'! S' \6 P- X0 a% a1 P( {
postman 需要到官网下载工具:
+ b  y& ~9 M1 W- Dhttps://www.getpostman.com/5 I& l$ ?) X6 O
1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn& R  [- b5 H9 k& [; D. [8 P
curl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'( L% ]" Y1 c2 L0 ?/ l
返回结果如下:
: T1 \! f5 L! Q+ S& k2 G# b. j: C{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }: s6 n$ J+ s$ h5 a+ B7 o( K; A
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
$ Y/ K: W  B! k7 y: @% K2 [2 {& _. p' M1 Y" ]7 j. m- F& m
3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。
. P" u/ u3 T2 t8 W6 k) h% r( x& s, J8 Y
4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
- x  X) j- j8 f) N7 W3 r1 N; Z$ `, _0 P; ?
3、构建锁定合约交易
# g$ l; r& Z3 y3 Y下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction+ W" _( y! _  l. n8 c+ \- w

& ?  Y4 @+ M5 k" S6 v7 `$ x  ^8 D4、签名交易' l4 S2 V7 ]8 [( U
具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
2 W& V3 J( I4 ~/ z) ?
3 Z# q% s- y. X! U5、提交交易
( ~. P& ~0 j; L' `" a具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
' P1 X+ q2 c3 ?* s8 ~1 W0 {. R7 }% O8 o3 ?5 J
一旦合约交易打包成功,这样合约交易便发送成功了。% ^9 y# b! x% ]4 ?
三、解锁合约流程
: v# K  s+ O. a. x" G5 o1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。1 i4 a( H1 R$ L$ i/ r. V0 @
) C3 T7 V- x( l; H  S( o- `2 D

) u" A7 d! m. x其中ID字段便表示 outputID
& o/ \! G7 v5 B7 v0 z2 e  I0 ?9 O. t2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配
7 G3 v- A8 M+ W9 {* J) a( L2 {
5 I9 @* G  h! Z/ _- i' A3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)
8 z( S% z* f+ G) T$ L
* D9 t$ ~% j: A$ Q% c4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction- }( u* \% q9 o0 n, q8 p2 L& F% n
; v* b  b5 W! n& W' x, c+ h& i: V0 |5 W
5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction) d: K7 T7 L# S2 x3 V* ~1 Y* Q+ d

- }0 J0 \. O! O5 p8 a% o7 K9 L& S4 y解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8