Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
158 0 0
比原项目仓库:
" T" D. ~2 w7 p/ \# ]$ FGithub地址:https://github.com/Bytom/bytom: E% u( K& u  o; U3 r( u
Gitee地址:https://gitee.com/BytomBlockchain/bytom8 Z4 ?5 y  Z* X+ s
一、合约简述
  `# e1 ^: P9 o2 Cequity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。
, o  C: ?1 o$ T6 W. p/ Y' x- @  n# `二、锁定合约流程
( |% i0 a( l9 r1、合约编写" D: T$ N2 d5 g! I) V. q( z# f
合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:
( b- |$ e  F! D' U  ?contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }
  Z+ z* I# d, p( V+ W7 Z$ @  a6 x2、编译合约
7 R: `: C: p9 \7 t编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。8 J; Q7 v8 z4 v6 y* L2 |3 b
curl 调用方式如下:8 v$ y+ y1 n' ]4 P6 P
curl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'
: }- D: s. \. {- `3 a6 k2 M3 p0 tpostman 需要到官网下载工具:
! A" z/ x8 `8 e3 ~; Whttps://www.getpostman.com/& `5 b8 _: a0 ~. V. b- [$ U) D
1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn
: v9 G, j6 k$ u( K8 tcurl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'
0 G. }/ C9 X: b$ |3 u返回结果如下:
9 v  N2 ^0 L- ?' Q' t{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }9 T& u1 L0 `6 J+ l& m7 [% b
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
0 W. U6 k0 w; A  g6 s
1 V  x) j2 i5 m) P4 U9 p9 F3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。
' |( P7 |2 d; H% w0 S0 s7 q8 p/ X9 Z6 w/ {2 D
4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)* k+ Z8 Z) L1 S
. e# @* T2 }; b& r
3、构建锁定合约交易( C5 [0 Y5 Y4 S( x
下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction
9 P) P: ]  C" M. z3 Q2 t8 ^3 a- H0 _  R2 p2 ?  w' N6 P  e
4、签名交易
. {& p* e7 Z4 B1 }9 K具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
, e$ S5 T- I: f0 P
# L2 F3 e& U# o( G5、提交交易$ W9 j- N2 q& v) @) Z. v! F
具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
- W% Y  t7 U4 m+ v0 X7 E
% e2 H( X3 q# z: a/ x, E) m9 f2 I一旦合约交易打包成功,这样合约交易便发送成功了。
1 S0 z  a8 w5 m* a  S8 c三、解锁合约流程
# v& r. Q( B( G1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。
& s5 H9 D% V/ i4 {6 A$ b1 ]& h+ `( w
* f  l: d2 J3 G4 C) h8 i' @8 j  o! Y2 f! y8 U! g* e0 O1 C# [
其中ID字段便表示 outputID
  h, s& u6 R# ]. j+ i) @7 `2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配$ K1 J& Y. Q3 e4 v$ l# W! ^

6 ^) C  V1 Y- M( n/ v3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)
5 H6 o" J- t* I/ {8 N; x5 b9 Y; ^! @; d" U1 L# ?
4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
& [7 [3 L, X; y2 g3 v9 q+ R. l
5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
8 W% I! D1 W: t" {
. m3 e3 A. j( t/ Y* [解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8