应用特定原语
| 操作码 | Fift 语法 | 堆栈 | Gas | 描述 | 
|---|---|---|---|---|
| Please enter a search query | ||||
| No results found | ||||
TVM 指令内容列表
...
应用特定原语
与 Gas 相关的原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F800 | ACCEPT | - | 将当前的 Gas 限制 g_l设置为其允许的最大值g_m,并将 Gas 信用g_c重置为零,同时减少g_r的值g_c。换句话说,当前的智能合约同意购买一些 Gas 以完成当前交易。此操作是处理外部消息所必需的,这些消息本身不携带价值(因而没有 Gas)。 | 26 | 
| F801 | SETGASLIMIT | g -  | 将当前的 Gas 限制 g_l设置为g与g_m的最小值,并将 Gas 信用g_c重置为零。如果到目前为止所消耗的 Gas(包括当前指令)超过了所得的g_l值,则在设置新的 Gas 限制之前抛出(未处理的)Gas 超限异常。请注意,带有参数g >= 2^63-1的SETGASLIMIT等同于ACCEPT。 | 26 | 
| F80F | COMMIT | - | 提交寄存器 c4(“持久数据”)和c5(“操作”)的当前状态,以便即使后来抛出异常,当前执行也被视为“成功”,并保存了这些值。 | 26 | 
伪随机数生成器原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F810 | RANDU256 | - x | 生成一个新的伪随机的无符号 256 位 整数 x。算法如下: 如果r是旧的随机种子值,被视为一个 32 字节的数组(通过构造一个无符号 256 位整数的大端表示),则计算其sha512(r);这个哈希的前 32 字节被存储为新的随机种子值r',剩下的 32 字节作为下一个随机值x返回。 | 26+\|c7\|+\|c1_1\| | 
| F811 | RAND | y - z | 在 0...y-1(或y...-1, 如果y<0)范围内生成一个新的伪随机整数z。更确切地说,生成一个无符号随机值x,如同在RAND256U中;然后计算z:=floor(x*y/2^256)。等同于 RANDU256256 MULRSHIFT. | 26+\|c7\|+\|c1_1\| | 
| F814 | SETRAND | x -  | 将随机种子设置为无符号 256 位 整数 x。 | 26+\|c7\|+\|c1_1\| | 
| F815 | ADDRANDRANDOMIZE | x -  | 将无符号 256 位 整数 x混入随机种子r中,通过将随机种子设为两个 32 字节字符串的连结的Sha,第一个字符串以旧种子r的大端表示,第二个字符串以x的大端表示。 | 26 | 
配置原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F82i | [i] GETPARAM |  - x | 从提供于 c7的 元组 中返回第i个参数,对于0 <= i <= 15。等同于c7 PUSHCTRFIRST[i] INDEX.如果这些内部操作之一失败,则抛出相应的类型检查或范围检查异常。 | 26 | 
| F823 | NOW |  - x | 返回当前 Unix 时间作为一个 整数。如果从 c7开始无法恢复请求的值,则抛出类型检查或范围检查异常。等同于 3 GETPARAM. | 26 | 
| F824 | BLOCKLT |  - x | 返回当前区块的开始逻辑时间。 等同于 4 GETPARAM. | 26 | 
| F825 | LTIME |  - x | 返回当前交易的逻辑时间。 等同于 5 GETPARAM. | 26 | 
| F826 | RANDSEED |  - x | 以无符号 256 位 整数 的形式返回当前的随机种子。 等同于 6 GETPARAM. | 26 | 
| F827 | BALANCE |  - t | 以 元组 形式返回智能合约剩余的余额,元组 包含一个 整数(剩余的Gram余额,以nanograms为单位)和一个 可能的cell(以 32 位键表示的“额外代币”的余额字典)。 等同于 7 GETPARAM.请注意,如 SENDRAWMSG等RAW原语不会更新此字段。 | 26 | 
| F828 | MYADDR |  - s | 以 分片 形式返回当前智能合约的内部地址,包含一个 MsgAddressInt。如果必要,可以使用诸如PARSEMSGADDR或REWRITESTDADDR之类的原语进一步解析它。等同于 8 GETPARAM. | 26 | 
| F829 | CONFIGROOT |  - D | 以 可能的cell D形式返回当前全局配置字典。等同于9 GETPARAM 。 | 26 | 
| F830 | CONFIGDICT |  - D 32 | 返回全局配置字典及其键长(32)。 等同于 CONFIGROOT32 PUSHINT. | 26 | 
| F832 | CONFIGPARAM | i - c -1 或 0 | 以 cell c的形式返回整数索引i的全局配置参数的值,以及指示成功的标志位。等同于 CONFIGDICTDICTIGETREF. | |
| F833 | CONFIGOPTPARAM | i - c^? | 以 可能的cell c^?的形式返回整数索引i的全局配置参数的值。等同于 CONFIGDICTDICTIGETOPTREF. | 
全局变量原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F840 | GETGLOBVAR | k - x | 返回第 k个全局变量,对于0 <= k < 255。相当于 c7 PUSHCTRSWAPINDEXVARQ。 | 26 | 
| F85_k | [k] GETGLOB |  - x | 返回第 k个全局变量,对于1 <= k <= 31。相当于 c7 PUSHCTR[k] INDEXQ。 | 26 | 
| F860 | SETGLOBVAR | x k -  | 将 x分配给第k个全局变量,对于0 <= k < 255。相当于 c7 PUSHCTRROTREVSETINDEXVARQc7 POPCTR。 | 26+\|c7’\| | 
| F87_k | [k] SETGLOB | x -  | 将 x分配给第k个全局变量,对于1 <= k <= 31。相当于 c7 PUSHCTRSWAPk SETINDEXQc7 POPCTR。 | 26+\|c7’\| | 
哈希和密码学原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F900 | HASHCU | c - x | 计算 cell c的表示哈希,并将其作为 256 位无符号整数x返回。用于对由cell树表示的任意实体进行签名和检查签名。 | 26 | 
| F901 | HASHSU | s - x | 计算 分片 s的哈希,并将其作为 256 位无符号整数x返回。结果与如果创建了一个仅包含s的数据和引用的普通cell并通过HASHCU计算其哈希相同。 | 526 | 
| F902 | SHA256U | s - x | 对 分片 s的数据位计算Sha。如果s的位长度不能被八整除,抛出一个cell下溢异常。哈希值作为 256 位无符号整数x返回。 | 26 | 
| F910 | CHKSIGNU | h s k - ? | 使用公钥 k(也用一个 256 位无符号整数表示)检查哈希h(通常作为某些数据的哈希,为一个 256 位无符号整数)的 Ed25519 签名s。签名 s必须是至少包含 512 位数据的 分片;仅使用前 512 位。结果为-1则签名有效,否则为0。请注意, CHKSIGNU相当于ROTNEWC256 STUENDCROTREVCHKSIGNS,即,相当于用第一个参数d设置为包含h的 256 位 分片 的CHKSIGNS。因此,如果h是作为某些数据的哈希计算的,这些数据会被 两次 哈希,第二次哈希发生在CHKSIGNS内部。 | 26 | 
| F911 | CHKSIGNS | d s k - ? | 检查 s是否是使用公钥k对 分片d的数据部分的有效 Ed25519 签名,类似于CHKSIGNU。如果 分片d的位长度不能被八整除,抛出一个cell下溢异常。Ed25519 签名的验证是标准的,使用Sha将d缩减为实际签名的 256 位数字。 | 26 | 
其他原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| F940 | CDATASIZEQ | c n - x y z -1 或 0 | 递归计算以 cell c为根的 dag 中不同cellx、数据位y和cell引用z的计数,有效地返回考虑等价cell标识时该 dag 使用的总存储量。x、y和z的值通过该 dag 的深度优先遍历来计算,使用访问过的cell哈希表来防止已访问cell的重复访问。访问的cell总数x不能超过非负 整数n;否则,在访问第(n+1)个cell之前计算被中断,并返回零表示失败。如果c为 空,则返回x=y=z=0。 | |
| F941 | CDATASIZE | c n - x y z | CDATASIZEQ的非静默版本,失败时抛出cell溢出异常(8)。 | |
| F942 | SDATASIZEQ | s n - x y z -1 或 0 | 类似于 CDATASIZEQ,但接受一个 分片s而非 cell。返回的x值不包括包含切片s本身的cell;然而,s的数据位和cell引用在y和z中被计算在内。 | |
| F943 | SDATASIZE | s n - x y z | SDATASIZEQ的非静默版本,失败时抛出cell溢出异常(8)。 | 
代币操作原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| FA00 | LDGRAMSLDVARUINT16 | s - x s' | 从 分片 s中加载(反序列化)一个Gram或VarUInteger 16数量,并以 整数x形式返回数量及s的剩余部分s'。x的预期序列化格式包括一个 4 位无符号大端整数l,随后是x的一个8l位无符号大端表示。其效果大致等同于 4 LDUSWAP3 LSHIFT#LDUX。 | 26 | 
| FA01 | LDVARINT16 | s - x s' | 与 LDVARUINT16相似,但加载一个 有符号 整数x。大致等同于 4 LDUSWAP3 LSHIFT#LDIX。 | 26 | 
| FA02 | STGRAMSSTVARUINT16 | b x - b' | 将范围为 0...2^120-1内的 整数x存储(序列化)到 构建器b中,并返回 构建器b'的结果。x的序列化格式包括一个 4 位无符号大端整数l,这是满足x<2^(8l)的最小的l>=0整数,随后是x的一个8l位无符号大端表示。如果x不在支持的范围内,则抛出范围检查异常。 | 26 | 
| FA03 | STVARINT16 | b x - b' | 类似于 STVARUINT16,但序列化一个范围为-2^119...2^119-1的 有符号 整数x。 | 26 | 
消息和地址操作原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| FA40 | LDMSGADDR | s - s' s'' | 从 分片 s中加载唯一有效的MsgAddress前缀,并将该前缀s'和s的剩余部分s''作为分片返回。 | 26 | 
| FA41 | LDMSGADDRQ | s - s' s'' -1 或 s 0 | LDMSGADDR的静默版本:成功时额外推送-1;失败时推送原始s和零。 | 26 | 
| FA42 | PARSEMSGADDR | s - t | 将包含有效 MsgAddress的 分片s分解为一个具有此MsgAddress独立字段的 元组t。如果s不是有效的MsgAddress,则抛出cell反序列化异常。 | 26 | 
| FA43 | PARSEMSGADDRQ | s - t -1 或 0 | PARSEMSGADDR的静默版本:错误时返回零而不是抛出异常。 | 26 | 
| FA44 | REWRITESTDADDR | s - x y | 解析包含有效 MsgAddressInt(通常是msg_addr_std)的 分片s,应用从anycast(如果存在)到地址的相同长度前缀的重写,并以整数形式返回工作链x和 256 位地址y。如果地址不是 256 位的,或者如果s不是有效的MsgAddressInt序列化,则抛出cell反序列化异常。 | 26 | 
| FA45 | REWRITESTDADDRQ | s - x y -1 或 0 | 原语 REWRITESTDADDR的静默版本。 | 26 | 
| FA46 | REWRITEVARADDR | s - x s' | REWRITESTDADDR的变体,即使地址不是完全为 256 位长(由msg_addr_var表示),也返回(重写的)地址作为 分片s。 | 26 | 
| FA47 | REWRITEVARADDRQ | s - x s' -1 或 0 | 原语 REWRITEVARADDR的静默版本。 | 26 | 
出站消息和输出操作原语
| xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas | 
|---|---|---|---|---|
| FB00 | SENDRAWMSG | c x -  | 发送包含在 cell c中的原始消息,其中应包含正确序列化的对象Message X,唯一的例外是源地址允许有虚拟值addr_none(将自动替换为当前智能合约地址),且ihr_fee、fwd_fee、created_lt和created_at字段可以有任意值(在当前交易的操作阶段将被正确值重写)。整数参数x包含标志位。当前x=0用于普通消息;x=128用于携带当前智能合约所有剩余余额的消息(而非消息最初指示的值);x=64用于携带除初始指示的新消息值外,入站消息的所有剩余值的消息(如果未设置位 0,则此金额中扣除 gas 费用);x'=x+1表示发送者想要单独支付转账费用;x'=x+2表示在操作阶段处理此消息时发生的任何错误都应被忽略。最后,x'=x+32意味着如果当前账户的最终余额为零,则必须销毁该账户。这个标志位通常与+128一起使用。 | 526 | 
| FB02 | RAWRESERVE | x y -  | 创建一个输出操作,该操作将从账户的剩余余额中准确预留 xnanograms(如果y=0),最多xnanograms(如果y=2),或除xnanograms外的所有nanograms(如果y=1或y=3)。这大致相当于创建一个携带xnanograms(或b-xnanograms,其中b是剩余余额)到自己的出站消息,以便后续输出操作无法花费超过剩余金额的资金。y中的位+2表明,如果无法预留指定金额,外部操作不会失败;相反,将预留所有剩余余额。y中的位+8表示在执行任何进一步操作之前x:=-x。y中的位+4表示在执行任何其他检查和操作之前,x会增加当前帐户(在计算阶段之前)的原始余额,包括所有额外货币。当前x必须是非负整数,且y必须在0...15范围内。 | 526 | 
| FB03 | RAWRESERVEX | x D y -  | 类似于 RAWRESERVE,但也接受一个代表额外代币的字典D(由 cell 或 空 表示)。这种方式可以预留Grams以外的货币。 | 526 | 
| FB04 | SETCODE | c -  | 创建一个输出操作,该操作将此智能合约代码更改为由 cell c给出的代码。请注意,此更改仅在当前智能合约运行成功终止后生效。 | 526 | 
| FB06 | SETLIBCODE | c x -  | 创建一个输出操作,用于修改此智能合约库的集合,通过添加或移除在 cell c中给定代码的库。如果x=0,若库先前存在于集合中,则实际上会被移除(如果不存在,则此操作无效)。如果x=1,则库被作为私有库添加;如果x=2,则库被作为公共库添加(如果当前智能合约位于主链中,则变得对所有智能合约可用);如果库之前已存在于集合中,则其公共/私有状态将根据x改变。另外,16可以加到x上,以在失败时启用弹回交易。x的值除了0...2 (+16 可能)之外都是无效的。 | 526 | 
| FB07 | CHANGELIB | h x -  | 类似于 SETLIBCODE,创建一个输出操作,但它接受库的哈希而非库代码,哈希以无符号 256 位整数h的形式给出。如果x!=0且该智能合约的库集合中不存在哈希值为h的库,此输出操作将失败。 | 526 | 
TVM 指令内容列表
...