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

内置函数:(涉及时间的内置函数beforeafter暂已停用,替代方法为验证区块高度的函数belowabove

  • 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验证交易的多重签名是否正确.