Skip to content

常用功能

以下是一些最常用的内置 全局静态函数。

上下文函数

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 结构体,包含以下字段:

字段类型描述
bouncedBool收到的消息的 弹回 标志。
senderAddressTON 区块链上发送者的内部地址。
valueInt消息中的 nanoToncoins 数量。
rawSlice消息的其余部分,类型为 Slice,遵循 TON 的 内部消息布局,从目标 Address 开始 (dest:MsgAddressIntTL-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 idSHA-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