应用特定原语
操作码 | 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) 。等同于 RANDU256 256 MULRSHIFT . | 26+\|c7\|+\|c1_1\| |
F814 | SETRAND | x - | 将随机种子设置为无符号 256 位 整数 x 。 | 26+\|c7\|+\|c1_1\| |
F815 | ADDRAND RANDOMIZE | 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 PUSHCTR FIRST [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)。 等同于 CONFIGROOT 32 PUSHINT . | 26 |
F832 | CONFIGPARAM | i - c -1 或 0 | 以 cell c 的形式返回整数索引 i 的全局配置参数的值,以及指示成功的标志位。等同于 CONFIGDICT DICTIGETREF . | |
F833 | CONFIGOPTPARAM | i - c^? | 以 可能的cell c^? 的形式返回整数索引 i 的全局配置参数的值。等同于 CONFIGDICT DICTIGETOPTREF . |
全局变量原语
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F840 | GETGLOBVAR | k - x | 返回第 k 个全局变量,对于 0 <= k < 255 。相当于 c7 PUSHCTR SWAP INDEXVARQ 。 | 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 PUSHCTR ROTREV SETINDEXVARQ c7 POPCTR 。 | 26+\|c7’\| |
F87_k | [k] SETGLOB | x - | 将 x 分配给第 k 个全局变量,对于 1 <= k <= 31 。相当于 c7 PUSHCTR SWAP k SETINDEXQ c7 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 相当于 ROT NEWC 256 STU ENDC ROTREV CHKSIGNS ,即,相当于用第一个参数 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 中不同cell x 、数据位 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 | LDGRAMS LDVARUINT16 | s - x s' | 从 分片 s 中加载(反序列化)一个 Gram 或 VarUInteger 16 数量,并以 整数 x 形式返回数量及 s 的剩余部分 s' 。x 的预期序列化格式包括一个 4 位无符号大端整数 l ,随后是 x 的一个 8l 位无符号大端表示。其效果大致等同于 4 LDU SWAP 3 LSHIFT# LDUX 。 | 26 |
FA01 | LDVARINT16 | s - x s' | 与 LDVARUINT16 相似,但加载一个 有符号 整数 x 。大致等同于 4 LDU SWAP 3 LSHIFT# LDIX 。 | 26 |
FA02 | STGRAMS STVARUINT16 | 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 - | 创建一个输出操作,该操作将从账户的剩余余额中准确预留 x nanograms(如果 y=0 ),最多 x nanograms(如果 y=2 ),或除 x nanograms外的所有nanograms(如果 y=1 或 y=3 )。这大致相当于创建一个携带 x nanograms(或 b-x nanograms,其中 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 指令内容列表
...