我需要在智能合约中做的一件事是计算当前纪元的轮次。我需要它的原因是我的智能合约不应该在一个 epoch 的前 5-10 分钟内执行任何操作(所以前 50-100 轮?)。
为此,我认为我可以使用当前的区块轮数,将其除以每个纪元的轮数,最后就是当前纪元中的当前轮次。
到目前为止还好吗?但这不起作用。 以 devnet 为例:
轮次:5017252 每个时期的轮数:1200 纪元 = 5017252 / 1200 = ~4181.04333 但实际纪元是:4150
在主网上,这个计算确实有效。 大家有更好的主意吗?
简短回答:开发网络上每个周期有 2400 轮,而不是 1200。
说明
在 devnet 上,一个 epoch 持续 4 小时(旧 devnet 上为 2 小时)而不是 24 小时,因此 devnet 上每个 epoch 的轮数并不等于主网上的轮数。
要检查一个纪元中有多少轮,您可以查询:https://devnet-gateway.multiversx.com/network/config
回应:
{
"data": {
"config": {
"erd_adaptivity": "false",
"erd_chain_id": "D",
"erd_denomination": 18,
"erd_extra_gas_limit_guarded_tx": 50000,
"erd_gas_per_data_byte": 1500,
"erd_gas_price_modifier": "0.01",
"erd_hysteresis": "0.200000",
"erd_latest_tag_software_version": "D1.6.13.2-hf1",
"erd_max_gas_per_transaction": 600000000,
"erd_meta_consensus_group_size": 58,
"erd_min_gas_limit": 50000,
"erd_min_gas_price": 1000000000,
"erd_min_transaction_version": 1,
"erd_num_metachain_nodes": 58,
"erd_num_nodes_in_shard": 58,
"erd_num_shards_without_meta": 3,
"erd_rewards_top_up_gradient_point": "2000000000000000000000000",
"erd_round_duration": 6000,
"erd_rounds_per_epoch": 2400,
"erd_shard_consensus_group_size": 21,
"erd_start_time": 1694000000,
"erd_top_up_factor": "0.500000"
}
},
"error": "",
"code": "successful"
}
您可以在开发网络上看到每个 epoch 有 2400 轮。
现在让我们通过查询在主网上执行相同的操作 https://gateway.multiversx.com/network/config
回应:
{
"data": {
"config": {
"erd_adaptivity": "false",
"erd_chain_id": "1",
"erd_denomination": 18,
"erd_extra_gas_limit_guarded_tx": 50000,
"erd_gas_per_data_byte": 1500,
"erd_gas_price_modifier": "0.01",
"erd_hysteresis": "0.200000",
"erd_latest_tag_software_version": "v1.6.13.0",
"erd_max_gas_per_transaction": 600000000,
"erd_meta_consensus_group_size": 400,
"erd_min_gas_limit": 50000,
"erd_min_gas_price": 1000000000,
"erd_min_transaction_version": 1,
"erd_num_metachain_nodes": 400,
"erd_num_nodes_in_shard": 400,
"erd_num_shards_without_meta": 3,
"erd_rewards_top_up_gradient_point": "2000000000000000000000000",
"erd_round_duration": 6000,
"erd_rounds_per_epoch": 14400,
"erd_shard_consensus_group_size": 63,
"erd_start_time": 1596117600,
"erd_top_up_factor": "0.500000"
}
},
"error": "",
"code": "successful"
}
您可以看到主网上每个时期有 14400 轮。
请注意,在未来的网络升级中,回合持续时间可能会发生变化。所以要小心,不要在你的合约中硬编码它,特别是如果它不可升级的话