配置参数
通过 tonviewer 读取实时值
👋 介绍
在这个页面上,你可以找到在TON区块链中使用的配置参数的描述。TON有一个复杂的配置,包含许多技术参数:一些被区块链本身使用,一些被生态系统使用。然而,只有少数人理解这些参数的含义。这篇文章是为了提供给用户一种简单的方式来理解这些参数及其目的。
💡 必要条件
本材料旨在与参数列表一起阅读。你可以在 当前配置 中查看参数值,并且它们是如何被写入 cells 的,在 TL-B 格式的 block.tlb 文件中有描述。
TON区块链参数末尾的二进制编码是其配置的序列化二进制表示,使得配置的存储或传输更为高效。序列化的确切细节取决于TON区块链使用的特定编码方案。
🚀 开始吧!
所有参数都有序排列,你不会迷路。为方便起见,请使用右侧边栏进行快速导航。
参数 0
此参数是一个特殊智能合约的地址,该合约存储区块链的配置。配置存储在合约中,以简化其在验证者投票期间的加载和修改。
在配置参数中,只记录了地址的哈希部分,因为合约始终位于 masterchain(工作链 -1)。因此,合约的完整地址将被写为 -1:<配置参数的值>
。
参数 1
此参数是 Elector 智能合约的地址,负责任命验证者、分发奖励和对区块链参数的变更进行投票。
参数 2
此参数代表系统的地址,代表系统铸造新的TON并作为奖励发放给验证区块链的验证者。
如果参数 2 缺失,将使用参数 0 替代(新铸造的TON来自于配置智能合约)。
参数 3
此参数是交易费收集者的地址。
如果参数 3 缺失(截至撰写时的情况),交易费将发送至Elector智能合约(参数 1)。
参数 4
此参数是TON网络的 根DNS合约地址。
更多详细信息可以在 TON DNS & Domains 文章中找到,并且在 这里 有更详细的原始描述。该合约不负责销售 .ton 域名。
参数 6
此参数负责新代币的铸造费用。
Currently, minting additional currency is not implemented and does not work. The implementation and launch of the minter are planned.
你可以在 相关文章 中了解更多关于问题和前景。
参数 7
此参数存储流通中的 每种额外代币的数量。数据以 字典(二叉树;可能在TON开发过程中这种结构被错误地命名为哈希映射)extracurrency_id -> amount
的形式存储,数量以 VarUint 32
- 从 0
到 2^248
的整数表示。
参数 8
此参数指示网络版本和验证者支持的额外功能。
验证者是区块链网络中负责创建新块和验证交易的节点。
-
version
:此字段指定版本。 -
capabilities
:此字段是一组标志,用于指示某些功能或能力的存在或缺失。
因此,在更新网络时,验证者将投票改变参数 8。这样,TON网络可以在不停机的情况下进行更新。
参数 9
此参数包含一个强制性参数的列表(二叉树)。它确保某些配置参数始终存在,并且在参数 9 变更之前,不能通过提案被删除。
参数 10
此参数代表一份重要TON参数的列表(二叉树),其变更会显著影响网络,因此会举行更多的投票轮次。
参数 11
此参数指出更改TON配置的提案在何种条件下被接受。
min_tot_rounds
- 提案可应用前的最小轮次数max_tot_rounds
- 达到此轮次数时提案将自动被拒绝min_wins
- 所需的胜利次数(3/4的验证者按质押总和计算必须赞成)max_losses
- 达到此失败次数时提案将自动被拒绝min_store_sec
和max_store_sec
确定提案被存储的可能的时间间隔bit_price
和cell_price
指出存储提案的一个位或一个cell的价格
参数 12
此参数代表TON区块链中工作链的配置。TON区块链中的工作链被设计为独立的区块链,可以并行运行,使TON能够扩展并处理大量的交易和智能合约。
工作链配置参数
-
enabled_since
:启用此工作链的时刻的UNIX时间戳; -
actual_min_split
:验证者支持的此工作链的最小拆分(分片)深度; -
min_split
:由配置设置的此工作链的最小拆分深度; -
max_split
:此 工作链的最大拆分深度; -
basic
:一个布尔标志位(1表示真,0表示假),指示此工作链是否基础(处理TON币,基于TON虚拟机的智能合约); -
active
:一个布尔标志位,指示此工作链当前是否活跃; -
accept_msgs
:一个布尔标志位,指示此工作链目前是否接受消息; -
flags
:工作链的附加标志位(保留,当前始终为0); -
zerostate_root_hash
和zerostate_file_hash
:工作链第一个区块的哈希; -
version
:工作链的版本; -
format
:工作链的格式,包括 vm_version 和 vm_mode - 那里使用的虚拟机。
参数 13
此参数定义了在 Elector 合约中对验证者不正确操作提出投诉的成本。
参数 14
此参数代表TON区块链中区块创建的奖励。Nanograms是nanoTON,因此,masterchain中的区块创建奖励等于1.7 TON,而基本工作链中的区块创建奖励为1.0 TON(同时,如果工作链发生拆分,区块奖励也会拆分:如果工作链中有两个分片链,那么分片区块的奖励将是0.5 TON)。
参数 15
此参数包含TON区块链中不同选举阶段和验证者工作的持续时间。
对于每个验证期,都有一个等于验证开始时UNIX格式时间的 election_id
。
你可以通过调用Elector合约的相应get方法 active_election_id
和 past_election_ids
获得当前的 election_id
(如果选举正在进行中)或过去的一个。
工作链配置参数
-
validators_elected_for
:选举出的验证者集合执行其角色的秒数(一轮)。 -
elections_start_before
:当前轮次结束前多少秒将开始下一时期的选举过程。 -
elections_end_before
:当前轮次结束前多少秒将选择下一轮的验证者。 -
stake_held_for
:在轮次过期后,为处理投诉而持有验证者质押的时期。
参数中的每个值都由 uint32
数据类型确定。
示例
在TON区块链中,通常将验证周期分为偶数和奇数。这些轮次相互跟随。由于下一轮的投票在前一轮进行,因此验证者需要将资金分为两个池,以有机会参与两轮。
主网
当前值:
constants = {
'validators_elected_for': 65536, # 18.2 hours
'elections_start_before': 32768, # 9.1 hours
'elections_end_before': 8192, # 2.2 hours
'stake_held_for': 32768 # 9.1 hours
}
方案:
如何计算周期?
假设 election_id = validation_start = 1600032768
。那么:
election_start = election_id - constants['elections_start_before'] = 1600032768 - 32768 = 1600000000
election_end = delay_start = election_id - constants['elections_end_before'] = 1600032768 - 8192 = 1600024576
hold_start = validation_end = election_id + constants['validators_elected_for'] = 1600032768 + 65536 = 1600098304
hold_end = hold_start + constants['stake_held_for'] = 1600098304 + 32768 = 1600131072
因此,目前,一个奇偶性轮次的长度为 1600131072 - 1600000000 = 131072秒 = 36.40888...小时
测试网
当前值:
constants = {
'validators_elected_for': 7200, # 2 hours
'elections_start_before': 2400, # 40 minutes
'elections_end_before': 180, # 3 minutes
'stake_held_for': 900 # 15 minutes
}
方案
如何计算周期?
假设 election_id = validation_start = 160002400
。那么:
election_start = election_id - constants['elections_start_before'] = 160002400 - 2400 = 1600000000
election_end = delay_start = election_id - constants['elections_end_before'] = 160002400 - 180 = 160002220
hold_start = validation_end = election_id + constants['validators_elected_for'] = 160002400 + 7200 = 160009600
hold_end = hold_start + constants['stake_held_for'] = 160009600 + 900 = 160010500
因此,目前,一个奇偶性轮次的长度为 160010500 - 1600000000 = 10500秒 = 175分钟 = 2.91666...小时
参数 16
此参数代表TON区块链中验证者数量的限制。它直接被Elector智能合约使用。