跳转到内容

常见问题

最常用的内置 [全局静态函数] 列表(/book/functions#global-static-functions)。

语境

现在

fun now():Int

返回当前 Unix 时间

使用示例

let timeOffsetInt = now() + 1000; // 距离 now() 千秒

我的余额

fun myBalance():Int

返回当前交易的 计算阶段 开始时智能合约的 纳米通币 余额。

使用示例

iNeedADollaInt = myBalance();

我的地址

fun myAddress():地址;

地址的形式返回当前智能合约的地址。

使用示例

let meMyselfAndI: Address = myAddress();

sender

fun sender():地址;

返回当前信息发件人的 地址

使用示例

receive() {
let whoSentMeMessageAddress = sender();
}

context

fun context():Context

Returns Context Struct, that consists of:

现场类型说明
宣布Bool退信 标志。
发件人地址发送方在 TON 区块链上的内部地址。
Int信息中 nanoToncoins 的数量。
[切片][切片]信息的其余部分作为 [][片]。 它遵循 TON 的内部报文布局,从目的地地址TL-B 符号 中的dest:MsgAddressInt)开始。

使用示例

ctxContext = context();
require(ctx.value != 68 + 1, "Invalid amount of nanoToncoins, bye!");

地址

新地址

fun newAddress(chain: Int, hash: Int):地址;

根据idSHA-256编码的哈希创建一个新的地址

该函数尽可能在编译时解析常量值。

使用示例

let oldTonFoundationAddr: Address =
newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
// ↑ ------------------------------------------------------------------
| // ↑
// | 合约初始包(StateInit)的 sha-256 哈希值
// 链 id:0 代表工作链,-1 代表主链。

合同地址

fun contractAddress(s: StateInit):地址;

根据智能合约的 StateInit,计算智能合约在工作链 00 中的 地址

使用示例

foundMeSomeAddress = contractAddress(initOf SomeContract());

合同地址扩展

fun contractAddressExt(chain: Int, code: Cell, data: Cell):地址;

根据 “链 “id、合约 “代码 “和合约初始状态 “数据 “计算智能合约的地址。 使用 initOf表达式获取给定合约的初始 code 和初始 data

使用示例

initPkgStateInit = initOf SomeContract();
let hereBeDragonsAddress = contractAddressExt(0, initPkg.code, initPkg.data);

交流

发送

fun send(params: SendParameters);

使用 发送参数结构发送队列信息

使用示例

send(SendParameters{
to: sender(), // back to the sender,
value: ton("1"), // with 1 Toncoin (1_000_000_000 nanoToncoin),
// and no message body
});

发出

fun emit(body: Cell);

信息排队 body 发送到外部世界,以便在链外进行记录和分析。 该信息没有收件人,与使用 Tact 的其他信息发送功能相比更省油。

使用示例

emit("Catch me if you can, Mr. Holmes".asComment()); // asComment() 将字符串转换为单元格