• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链
您的位置:首页 > 网络安全 >区块链 > 比原链(Bytom)合约交易构造流程

比原链(Bytom)合约交易构造流程

作者:比原链 字体:[增加 减小] 来源:互联网

比原链向大家分享了比原链(Bytom)合约交易构造流程,其中包含比原链,Bytom,合约交易等知识点,遇到此问题的同学们可以参考下


equity合约简介


equity是bytom用于表达合约程序而使用的高级语言,主要用于描述bytom链上特定的资产:

·区块链上的所有资产都是锁定在合约program中, 资产值value(即UTXO)一旦被一个合约解锁unlock,仅仅是为了被一个或多个其他合约来进行锁定lock。
·合约保护资产value(即UTXO)的方式是采用执行虚拟机并通过verify指令来验证的交易要花费这个资产value是否达到了我的条件。

合约组成

contract ContractName ( parameters ) locks value { clauses }

·ContractName 合约名,用户自定义
·parameters 合约参数列表,其类型名必须符合合约语言的基本类型
·value 资产值(即UTXO的资产类型和对应的值)标识符,用户可以自定义
·clauses 条款(即函数)列表(一个或多个)

条款(函数)组成

clause ClauseName ( parameters ) { statements }
或
clause ClauseName ( parameters ) requires name : amount of asset { statements }

·ClauseName 条款/函数名,用户自定义
·parameters 条款/函数参数列表
·payments 花费UTXO需要的其他限制条件。例如进行币币交易的时候需要验证交易的另一方能够提供对应的资产值,该限制条件的使用场景主要为不同资产类型的合约交易

语句组成

statements 合约语句(一条或多条),代码语句只能是verify、lock和unlock

·verify语句 模式如verify expression,其中expression的结果必须是bool类型,为true才能继续往下执行
·unlock语句 模式如unlock value,其中value表示对应的资产值
·lock语句 模式如lock value with program,其中value表示对应的资产值,而program必须为Program基本类型
合约的基本类型:(Time类型暂已停用) Amount Asset Boolean Hash Integer Program PublicKey Signature String

内置函数:(涉及时间的内置函数before和after暂已停用,替代方法为验证区块高度的函数below和above)

·abs(n) 返回数值n的绝对值.
·min(x, y) 返回两个数值x和y中最小的一个.
·max(x, y) 返回两个数值x和y中最大的一个.
·size(s) 返回任意类型的字节大小size.
·concat(s1, s2) 返回连接两个字符串s1和s2生成新的字符串.
·concatpush(s1, s2) 将两个字符串类型的虚拟机执行操作码s1和s2连接起来(即将s2拼接在s1的后面),然后将他们push到栈中. 该操作函数主要用于嵌套合约中.
·below(height) 判断当前区块高度是否低于参数height,如果是则返回true,否则返回false.
·above(height) 判断当前区块高度是否高于参数height,如果是则返回true,否则返回false.
·sha3(s) 返回byte类型字符串参数s的SHA3-256的哈希运算结果.
·sha256(s) 返回byte类型字符串参数s的SHA-256的哈希运算结果.
·checkTxSig(key, sig) 根据一个PublicKey和一个Signature验证交易的签名是否正确.
·checkTxMultiSig([key1, key2, ...], [sig1, sig2, ...]) 根据多个PublicKey和多个Signature验证交易的多重签名是否正确。

合约交易构造流程

合约参数构造

合约参数主要涉及两个方面,一个是编译合约contract中的参数,另一个是解锁合约clause中的参数。合约的基本类型已做简单描述,对应编译合约的API接口compile中参数类型只有如下3种:

·boolean - 布尔类型的合约参数,对应的基本类型是Boolean.
·integer - 整数类型的合约参数,对应的基本类型包括:Integer、Amount.
·string - 字符串类型的合约参数,对应的基本类型包括:String、Asset、Hash、Program、PublicKey.

注意事项:

·编译合约API接口compile只需要使用contract中的参数
·解锁合约只需要提供clause中的参数
·Signature类型只能在clause的参数列表中出现,不能出现在编译合约的API中
·所有string类型的字符串都是必须以十六进制字节的string形式出现,否则调用编译合约API的时候会报错

如果合约参数中有Publickey和Signature(配套使用),那么获取这些参数需要调用list-pubkeys接口获取。Signature只能出现在clause中,表示该参数仅仅在解锁合约的时候才会被使用,由于目前对交易的签名必须通过sign-transaction接口才能获取签名结果,所以解锁的时候只需提供签名的参数root_xpub和derivation_path即可,需要注意的是这些参数需要跟验证签名pubkey匹配起来,否则合约也会执行失败。

其中list-pubkeys的参数如下:
String - account_id, 账户ID.
其请求和响应的json格式如下:


// Request
{
? "account_id": "0G1JIR6400A02"
}

// Result
{
? "pubkey_infos": [
? ? {
? ? ? "derivation_path": [
? ? ? ? "010100000000000000",
? ? ? ? "0300000000000000"
? ? ? ],
? ? ? "pubkey": "c37d5531f393bc6a3568628c0c0e17801ea452e75d604deb01403c4b161659a3"
? ? },
? ? {
? ? ? "derivation_path": [

您可能想查找下面的文章:

  • 比原链(Bytom)合约交易构造流程
  • 比原链 | Equity 语言入门

相关文章

  • 什么是区块链代币
  • 私钥攻击!权益证明协议的最大要害
  • 如何使用 imToken 创建 EOS 钱包
  • 比特币钱包(数字钱包)都有哪些类型?
  • 闪电网络是比特币的TCP/IP 协议栈
  • 教你用U盘在30分钟内创建一个比特币钱包
  • BITHD(比特护盾)详细使用教程
  • XKey神州数字智能硬件产品使用教程
  • 四个问答让你秒懂区块链原理及应用
  • 区块链是如何做到交易数据防篡改的

文章分类

  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链

最近更新的内容

    • 互联网医疗这门生意不好做,在线心理咨询要如何打开局面?
    • 以太坊代币标准的详细列表
    • 寻找小丑鱼Nemo:一文读懂区块链工作量证明机制
    • 配置区块链网络并利用该技术
    • 联盟区块链(Consortium blockchains) 简介
    • 如何购买比特币(买卖详解图文教程篇)
    • 区块链中的挖矿原理(POW算法)
    • 区块链的本质特征
    • 区块链的基本原理,直观看清区块链
    • 智能合约并不像你想象的那么智能

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有