Appearance
常用功能
以下是一些最常用的内置 全局静态函数。
上下文函数
now
solidity
fun now(): Int
返回当前的 Unix 时间。
使用示例:
solidity
let timeOffset: Int = now() + 1000; // 现在起一千秒
myBalance
solidity
fun myBalance(): Int;
返回智能合约在当前交易的 计算阶段 开始时的 nanoToncoin 余额。
使用示例:
solidity
let iNeedADolla: Int = myBalance();
myAddress
solidity
fun myAddress(): Address;
返回当前智能合约的地址,类型为 Address
。
使用示例:
solidity
let meMyselfAndI: Address = myAddress();
sender
solidity
fun sender(): Address;
返回当前消息的发送者的 Address
。
使用示例:
solidity
receive() {
let whoSentMeMessage: Address = sender();
}
context
solidity
fun context(): Context;
返回 Context
结构体,包含以下字段:
字段 | 类型 | 描述 |
---|---|---|
bounced | Bool | 收到的消息的 弹回 标志。 |
sender | Address | TON 区块链上发送者的内部地址。 |
value | Int | 消息中的 nanoToncoins 数量。 |
raw | Slice | 消息的其余部分,类型为 Slice ,遵循 TON 的 内部消息布局,从目标 Address 开始 (dest:MsgAddressInt 在 TL-B notation 中)。 |
使用示例:
solidity
let ctx: Context = context();
require(ctx.value != 68 + 1, "Invalid amount of nanoToncoins, bye!");
地址相关函数
newAddress
solidity
fun newAddress(chain: Int, hash: Int): Address;
基于 chain
id 和 SHA-256 编码的 hash
值 创建一个新的 Address
。
此函数在可能时尝试在 编译时 解析常量值。
使用示例:
solidity
let oldTonFoundationAddr: Address =
newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
// ↑ ------------------------------------------------------------------
// | ↑
// | 合约初始化包 (StateInit) 的 sha-256 哈希
// 链 id: 0 是工作链,-1 是主链
contractAddress
solidity
fun contractAddress(s: StateInit): Address;
基于其 StateInit
计算工作链 $0$ 中智能合约的 Address
。
使用示例:
solidity
let foundMeSome: Address = contractAddress(initOf SomeContract());
contractAddressExt
solidity
fun contractAddressExt(chain: Int, code: Cell, data: Cell): Address;
基于 chain
id、合约的 code
和合约的初始状态 data
计算智能合约的 Address
。使用 initOf
表达式获取给定合约的初始 code
和初始 data
。
使用示例:
solidity
let initPkg: StateInit = initOf SomeContract();
let hereBeDragons: Address = contractAddressExt(0, initPkg.code, initPkg.data);
通信函数
send
solidity
fun send(params: SendParameters);
使用 SendParameters
结构体 发送消息。
使用示例:
solidity
send(SendParameters{
to: sender(), // 发送给发送者,
value: ton("1"), // 1 Toncoin (1_000_000_000 nanoToncoin),
// 没有消息体
});
emit
solidity
fun emit(body: Cell);
发送消息 body
到外部世界,目的是记录并在链外进行分析。此消息没有接收者,与使用 Tact 的任何其他消息发送函数相比,它的 gas 效率更高。
使用示例:
solidity
emit("Catch me if you can, Mr. Holmes".asComment()); // asComment() 将字符串转换为 Cell