Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比原链合约入门教程

获画关喊
86 0 0
比原项目仓库:
8 i8 u5 M8 H" {8 _( cGithub地址:https://github.com/Bytom/bytom
$ q9 P7 L/ F0 i; nGitee地址:https://gitee.com/BytomBlockchain/bytom
; r* N  y! P( S/ P5 z$ H! U! [一、合约简述8 ^# a$ w  Y1 Q
equity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。
+ G2 `# |7 Y; q二、锁定合约流程
5 Z' F7 _0 g. d  u1、合约编写
( F  F9 k* [' Q6 U合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下:. a& J0 g! }. V& f9 L) U0 W' D
contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }& ~- p2 S5 K! K# I
2、编译合约
5 u; b1 {# l4 q9 a4 w3 E6 D' J编译合约的工具暂未提供,建议使用api调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。! @2 e, k" g0 [* o
curl 调用方式如下:! K! O0 T& ~" e0 K/ T8 A( J
curl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'
; ^7 {8 S( ^5 I# S! D9 G4 J7 Ypostman 需要到官网下载工具:
& u4 q. W3 I2 P! x6 }# K+ uhttps://www.getpostman.com/
7 y( P: m$ U8 A9 s1)bytomd默认启动或开启auth认证,需要通过curl的方式调用API接口 获取access toekn
1 o' Z1 a5 d- w2 u! G9 Y% R/ ycurl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'
# r; I4 r4 G; N3 @3 }- M9 o* f返回结果如下:
2 Z0 q  o$ u) V, w{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }7 `4 @% U0 i* n. Y+ `3 b
2)选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3
, O: |$ J2 F5 Z$ X+ o) J( Z; {1 B* a  w* v2 @  f4 C' |  d& K
3)如果合约参数包含类型PublicKey,便需要获取合约参数 PublicKey, publicKey可通过API接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey对应的 derivation_path。
7 T; u3 C' ?( l6 G6 d% _8 G8 p/ e. E6 D2 U! k
4)编译合约,返回结果program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)
: k) y# }8 V$ @% f6 Q. o& w# `" U+ B, z6 ~- [' Y0 R0 K
3、构建锁定合约交易
% V. l; B: Y6 R' D& \下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction' v$ @3 K* p7 N$ K
, j% u9 k' Y) z" {% n
4、签名交易' c8 M& r! c( p1 K$ M, u$ U
具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction; F5 n. a+ D' u+ W) Q

( r; v- H6 s  ^: B5 e5、提交交易
( X% M6 t+ g  D6 G7 \8 [具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction
' E% S* C( p% d$ c
' y8 v6 m5 i. c" B一旦合约交易打包成功,这样合约交易便发送成功了。
& e+ d9 L+ a3 V: B三、解锁合约流程* d" ?0 g7 X7 h& w! m: n, N$ f
1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的outputID。
$ Y0 ]2 w9 P/ J, N4 K% Q% G7 I8 P
: k7 V$ @. Y0 D7 ~4 D
" \( Y; h9 w* A& o3 l$ }7 ?  {其中ID字段便表示 outputID
5 N+ w: N$ H* I2、根据outputID通过list-unspent-outputs 接口API 查找合约的UTXO,查看合约锁定的资产类型和数量是否匹配
6 v- K5 O  i' S# N, x" p$ p) z% N6 ?1 _
3、构建解锁合约交易,解锁clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明); S* F" f4 R2 i/ b5 r/ C

% y' _" x& T: r( v: n( ?, ?7 @$ c! I4、签名交易,具体内容参考签名交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction
# }: p/ B3 k. b: O3 I1 ]% {$ _5 N
$ i2 g% Z0 I3 M* @( k/ G1 o9 u1 C5、提交交易,具体方式参考提交交易的wiki:https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction- g! V+ m  f. [2 K
3 N& V& ?8 R5 f/ e! h
解锁合约交易打包成功之后,根据 outputID 通过list-unspent-outputs 接口API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

获画关喊 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    8