比原链合约入门教程

news/2024/9/18 2:44:20

比原项目仓库:

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,将显示为空,否则合约交易解锁失败。


http://lihuaxi.xjx100.cn/news/271516.html

相关文章

Java多线课程,java多线程课程.doc

java多线程课程.doc还剩9页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:如下:线程 A:休眠 10s线程 B:休眠 20s线程 C&…

关于协作机器人10个观点的讨论

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在当今的加工设备中,自动化应用往往需要功能强大的机器人。也就是说,具有高负载和高速度的机器人,通常会固定在某个地方,并…

导师吐槽大会开始:自己招的学生,哭着也要带完

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本文来源:本文整理自知乎主持人:记不住学生名字,不给人家改论文,不帮人家做实验,问你问题不回答等控诉你承认不承…

Windows Phone 7 不温不火学习之《创建用户控件》

同样出自微软的产品,像ASP.NET 一样,Windows Phone 7 也有一个叫UserControl 的东西。这个相当于一个组件,类似于Android 继承View 。 本篇将实现一个用户控件,默认为它添加高宽,并为它添加一个自己的事件,…

快速搭建对话机器人,就用这一招!

作者 | Milvus.io 责编 | 胡巍巍问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用。其经典应用场景包括:智能语音交互、在线客服、知识获取、情感类聊天等。常见的分类有:生成…

记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:funnyZpCcnblogs.com/funnyzpc/p/13541713.html去年年底的时候,我们线上出了一次事故,这个事故的表象是这样的:系统出现了两个一模一样的订单号&#xf…

querywrapper or and嵌套_两个经常用的逻辑函数AND函数,OR函数

在逻辑函数里AND函数,OR函数是使用频率是比较高的函数,但像NOT函数和XOR两个函数就略显鸡肋了。今天我们重点对前两个函数进行讲述,后两个大家可以自行查看下,知道就行了,等哪天可以用上的时候再进行尝试也行,但我估计…

C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装

修改自网路 CommonTools.h /** CommonTools.h** Created on: 2018年8月2日* Author: didi*/ #include <iostream> #include <curl/curl.h> #include "zlib.h" #include <vector> #include <string> #include <unistd.h> #includ…