[区块链] 比原链合约入门教程

新闻来源    2018年08月13日 11:08

比原项目仓库:

Github 地址: https://github.com/Bytom/bytom

Gitee 地址: https://gitee.com/BytomBlockchain/bytom

equity 是 bytom 的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方 equity 合约相关介绍。




1、合约编写

合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定 publickey 合约为例,其合约代码如下:

contract LockWithPublicKey(publicKey: PublicKey) locks locked { clause unlockWithSig(sig: Signature) { verify checkTxSig(publicKey, sig) unlock locked } }

2、编译合约

编译合约的工具暂未提供,建议使用 api 调用的方式来编译合约。调用的方式可以使用 curl 命令行 或 postman 工具等。

curl 调用方式如下:

curl -X POST http://localhost:9888/create-key -d '{"alias": "alice", "password": "123456"}'

postman 需要到官网下载工具:

https://www.getpostman.com/

1 ) bytomd 默认启动或开启 auth 认证,需要通过 curl 的方式调用 API 接口 获取 access toekn

curl -X POST http://localhost:9888/create-access-token -d '{"id":"token1"}'

返回结果如下:

{ "token": "token1:1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3", "id": "token1", "created_at": "2018-03-20T18:56:01.043919771+08:00" }

2 )选择 basic auth 认证方式,填入 access-token 的用户名和密码,即上述返回结果的 token1 和 1fee70f537128a201338bd5f25a3adbf33dad02eae4f4c9ac43f336a069df8f3

3 )如果合约参数包含类型 PublicKey,便需要获取合约参数 PublicKey,publicKey 可通过 API 接口获取。这里需要将结果保存下来,以后解锁合约的时候需要用到 root_xpub 和 pubkey 对应的 derivation_path。

4 )编译合约,返回结果 program 便是可锁定的合约。(直接编译合约产生的是合约执行步骤,如果部署这样的合约,用户可以直接构造对应的参数便能解锁)

3、构建锁定合约交易

下面表示锁定 1000 个 777e3586d2ec47c4974d262e0ff86fd3c1c063d242d32bdef71d6d16eed6763e 类型的资产到合约 204e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae417403ae7cac00c0 之中。具体内容参考构建交易的 wiki: https://github.com/Bytom/bytom/wiki/API-Reference#build-transaction

4、签名交易

具体内容参考签名交易的 wiki: https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction

5、提交交易

具体方式参考提交交易的 wiki: https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction

一旦合约交易打包成功,这样合约交易便发送成功了。

1、合约交易被区块打包成功之后,可以查看具体的合约交易内容,找到对应的 outputID。

其中 ID 字段便表示 outputID

2、根据 outputID 通过 list-unspent-outputs 接口 API 查找合约的 UTXO,查看合约锁定的资产类型和数量是否匹配

3、构建解锁合约交易,解锁 clause unlockWithSig 的参数为 Signature, 但是签名结果只能在 sign-transaction 成功之后才能得到,所以我们只需构建完成签名参数即可。于之前构建的 publicKey 为 4e925f0fcc2f2618d96b7a3dce2aad28e60ab3339377760d48aea8ae8169ae41,那么签名参数为 root_xpub 和 derivation_path,对应的值分别为: “dc903a862a14966d47dc6bc935c687c6cccb7a8f9c70f13bb82a41a0fe2696596cb141ff1840f90c75f8f25099f0dc50e005e1e36817d184b2b1eb1354b61575” 和 [ “010400000000000000”, “0100000000000000” ] 。 其结构如下:(具体字段可参考官方智能合约文档说明)

4、签名交易,具体内容参考签名交易的 wiki: https://github.com/Bytom/bytom/wiki/API-Reference#sign-transaction

5、提交交易,具体方式参考提交交易的 wiki: https://github.com/Bytom/bytom/wiki/API-Reference#submit-transaction

解锁合约交易打包成功之后,根据 outputID 通过 list-unspent-outputs 接口 API 查找原来的合约 UTXO,将显示为空,否则合约交易解锁失败。


新闻来源


CryptoCurrencyCNYChange 1hChange 24hChange 7d
Bitcoin244,958 5.04 % 9.73 % 18.38 %
Ethereum15,312 0.52 % 1.32 % 9.04 %
Tether6.490 0.02 % 0.10 % 0.00 %
Binance Coin2,136.2 0.43 % 7.24 % 9.83 %
Cardano8.240 5.57 % 5.38 % 6.76 %
XRP4.110 4.86 % 5.44 % 7.48 %
Dogecoin1.360 4.84 % 6.79 % 14.19 %
USD Coin6.450 0.19 % 0.45 % 0.44 %
Polkadot186.24 0.08 % 15.21 % 37.87 %
Binance USD6.490 0.38 % 0.60 % 0.69 %
Uniswap259.87 1.14 % 12.19 % 0.43 %
Bitcoin Cash6,714.1 0.17 % 13.74 % 49.71 %
Litecoin2,003.2 1.07 % 7.23 % 35.68 %
Chainlink159.12 0.87 % 1.57 % 4.71 %
Solana120.65 1.27 % 1.81 % 28.37 %
Wrapped Bitcoin219,027 0.89 % 1.38 % 3.42 %
Polygon6.780 5.42 % 14.59 % 30.34 %
Ethereum Classic38.85 0.12 % 1.75 % 3.58 %
Stellar3.260 0.41 % 6.68 % 0.28 %
Internet Computer264.48 5.71 % 9.44 % 36.93 %
Theta Network21.61 0.67 % 12.16 % 36.34 %
VeChain0.3343 0.42 % 4.52 % 46.37 %
Dai6.450 0.27 % 0.66 % 0.81 %
cUSDC0.1393 0.03 % 0.04 % 0.13 %
Filecoin1,246.1 0.77 % 9.19 % 43.15 %
TRON0.4254 0.04 % 0.43 % 3.05 %
cDAI0.1386 0.00 % 0.25 % 0.05 %
OKB117.73 11.77 % 31.62 % 46.97 %
Aave2,693.8 1.81 % 11.13 % 3.80 %
Monero2,256.9 0.15 % 7.91 % 5.83 %