跳转到内容

主链

在 TON 区块链中,一条名为”主链” 的特殊链用于同步消息路由和交易执行,因此网络中的节点可以固定多链状态中的某个特定点,并就该状态达成共识。

主链存储 网络配置 和所有 [工作链] 的最终状态(https://docs.ton.org/learn/overviews/ton-blockchain#workchain-blockchain-with-your-own-rules)。 它承载着基本的协议信息,包括当前设置、活动验证器及其赌注列表、活动工作链以及相关的分块链。 最重要的是,它为所有工作链和分块链维护最新的区块哈希值记录,从而在整个网络中达成共识。

主链如何保护合约

Tact 强制所有合约使用 basechain,即 ID 为 00 的默认工作链。这样做是为了防止在合约中使用主链地址。

在未启用主链支持的情况下,任何指向主链或以其他方式与之交互的尝试都会产生异常,并显示退出代码 137: 此合约未启用 “主链支持”。

也就是说,意外部署到主链、从主链账户接收消息、向此类账户发送消息以及使用主链地址或其链 ID (1-1) 都是默认禁止的。

在编译选项中启用主链支持

如果您确实需要主链支持,最简单也是最推荐的方法是修改项目根目录下的 tact.config.json 文件(如果还不存在,则创建该文件),并 masterchain 属性设置为 true

如果您正在开发基于 Blueprint 的项目,可以在合约的编译配置中启用主链支持,这些配置位于名为 wrappers/ 的目录中:

wrappers/YourContractName.compile.ts
import { CompilerConfig } from '@ton/blueprint';
export const compile:CompilerConfig = {
lang: 'tact',
target: 'contracts/your_contract_name.tact',
options:{
masterchain: true, // ← that's the stuff!
}
};

不过,蓝图 项目中仍可使用 tact.config.json。 在这种情况下,除非在 wrappers/ 中修改,否则 tact.config.json中指定的值将作为默认值。