通过前文我们可以知道,Algorand通过提供layer1智能合约,使得对交易的程序化审批成为可能。在定义审批逻辑时,需要用到其提供的一门特殊的语言,即TEAL。TEAL的全称为Transaction Execution Approval Language,意即交易执行审批语言。顾名思义,TEAL的职能仅限于定义审批交易的逻辑,这一点与以太坊等平台有很大不同。考虑到这一点,TEAL被设计成一门非图灵完备的语言,这对TEAL程序的安全性和性能都大有裨益。
一段程序的执行通常可以看作从输入到输出的过程,TEAL程序也不例外,其输入即为交易信息(交易双方地址,交易金额等),其最终输出则为0或者一个非0的整数,分别意味着拒绝交易和放行交易。最简单的TEAL程序类似int 1,即永远返回一个非0的值(这里为1)。在这种情况下,无论实际内容为何,交易始终会被放行(这样的合约显然既不安全,也没有实际意义)。
TEAL采用了栈式风格的语法,这意味着在进行任何运算时,都需要将参数进行显式的入栈。以下通过一个简单的例子进行说明,假设我们需要计算如下内容:
(1 + 2) * 3
在栈式风格下,其执行过程如下图所示:
1 + 23 * 4
在TEAL中,对参数入栈,算术运算等操作的支持以操作码的形式体现。根据功能的不同,共分为以下几类:
1. 运算类,包含算术运算,逻辑运算和加密操作
算术运算: + - * / ...
逻辑运算:&& || == != ...
加密操作:sha256 keccak256 sha512_256 ...
2. 加载参数(入栈)类,包含加载常量,交易信息(交易双方地址,交易金额等)和全局信息(交易费用等)
加载常量:intc bytec arg ...
加载交易信息:txn gtxn
加载全局信息:global
3. 流程控制类
限于篇幅,这里仅列出了部分操作码,完整的操作码列表可以在官方文档找到。关于TEAL的使用模式及具体案例,会在下一篇中进行介绍。
网友评论