Сравнение TL-B-схем в TON и Tycho
Tycho сохраняет совместимость с экосистемой TON на уровне ячеек и TVM, но вносит небольшие изменения в формат блока и в параметры конфигурации сети. Эти изменения нужны, чтобы консенсус и коллатор могли работать эффективнее, в том числе за счёт более точных временных меток и дополнительных данных о прогрессе обработки очередей сообщений.
Практическое следствие такое: парсер, который ожидает ровно схемы TON из block.tlb, не сможет корректно разобрать блок Tycho, потому что в Tycho меняются конструкторы и появляются новые поля. Для Tycho нужно использовать TL-B-схемы Tycho и код, который умеет их парсить.
Отличия TL-B-схем
Отличия в BlockInfo
В BlockInfo добавляется gen_utime_ms:uint16:
-block_info#9bc7a987 ... shard:ShardIdent gen_utime:uint32 start_lt:uint64 end_lt:uint64 ... = BlockInfo;
+block_info_tycho#9bc7a988 ... shard:ShardIdent gen_utime:uint32 gen_utime_ms:uint16 start_lt:uint64 end_lt:uint64 ... = BlockInfo;
Отличия в Block
В Tycho меняется конструктор Block и добавляется отдельная структура OutMsgQueueUpdates, которая лежит рядом с state_update:
-block#11ef55aa global_id:int32
+block_tycho#11ef55bb global_id:int32
info:^BlockInfo value_flow:^ValueFlow
+ ^[
state_update:^(MERKLE_UPDATE ShardState)
+ out_msg_queue_updates:OutMsgQueueUpdates
+ ]
extra:^BlockExtra = Block;
+out_msg_queue_updates#1 diff_hash:bits256 tail_len:uint32 = OutMsgQueueUpdates;
Отличия в ShardDescr
В Tycho меняется конструктор ShardDescr и набор полей, связанных с прогрессом обработки.
-shard_descr#b seq_no:uint32 reg_mc_seqno:uint32
+shard_descr_tycho#a seq_no:uint32 reg_mc_seqno:uint32
start_lt:uint64 end_lt:uint64
root_hash:bits256 file_hash:bits256
before_split:Bool before_merge:Bool
want_split:Bool want_merge:Bool
- nx_cc_updated:Bool flags:(## 3) { flags = 0 }
- next_catchain_seqno:uint32 next_validator_shard:uint64
+ nx_cc_updated:Bool top_sc_block_updated:Bool flags:(## 2) { flags = 0 }
+ next_catchain_seqno:uint32 ext_processed_to_anchor_id:uint32
min_ref_mc_seqno:uint32 gen_utime:uint32
...
= ShardDescr;
Отличия в ShardState
В Tycho меняется конструктор ShardStateUnsplit и добавляется миллисекундная часть времени генерации:
Вместо OutMsgQueueInfo появляется ProcessedUptoInfo с раздельными данными для внешних и внутренних сообщений.
-shard_state#9023afe2 global_id:int32
+shard_state_tycho#9023aeee global_id:int32
shard_id:ShardIdent
seq_no:uint32 vert_seq_no:#
- gen_utime:uint32 gen_lt:uint64
+ gen_utime:uint32 gen_utime_ms:uint16 gen_lt:uint64
min_ref_mc_seqno:uint32
- out_msg_queue_info:^OutMsgQueueInfo
+ processed_upto:^ProcessedUptoInfo
...
= ShardStateUnsplit;
+processed_upto_info#00
+ partitions:(HashmapE 16 ProcessedUptoPartition)
+ msgs_exec_params:(Maybe ^MsgsExecutionParams)
+ = ProcessedUptoInfo;
+
+processedUptoPartition#00
+ externals:ExternalsProcessedUpto
+ internals:InternalsProcessedUpto
+ = ProcessedUptoPartition;
+
+externalsProcessedUpto#00
+ processed_to_anchor_id:uint32
+ processed_to_msgs_offset:uint64
+ ranges:(HashmapE 32 ExternalsRange)
+ = ExternalsProcessedUpto;
+
+externalsRange#00
+ from_anchor_id:uint32
+ from_msgs_offset:uint64
+ to_anchor_id:uint32
+ to_msgs_offset:uint64
+ chain_time:uint64
+ skip_offset:uint32
+ processed_offset:uint32
+ = ExternalsRange;
+
+internalsProcessedUpto#00
+ processed_to:(HashmapE 96 ProcessedUpto)
+ ranges:(HashmapE 32 InternalsRange)
+ = InternalsProcessedUpto;
+
+internalsRange#00
+ skip_offset:uint32
+ processed_offset:uint32
+ shards:(HashmapE 96 ShardRange)
+ = InternalsRange;
+
+shardRange#00 from:uint64 to:uint64 = ShardRange;
Отличия в McStateExtra и данных консенсуса
В masterchain_state_extra расширяется диапазон flags и появляется опциональное поле consensus_info:
masterchain_state_extra#cc26
shard_hashes:ShardHashes
config:ConfigParams
- ^[ flags:(## 16) { flags <= 1 }
+ ^[ flags:(## 16) { flags <= 4 }
validator_info:ValidatorInfo
prev_blocks:OldMcBlocksInfo
after_key_block:Bool
last_key_block:(Maybe ExtBlkRef)
- block_create_stats:(flags . 0)?BlockCreateStats ]
+ block_create_stats:(flags . 0)?BlockCreateStats
+ consensus_info:(flags . 2)?ConsensusInfo ]
global_balance:CurrencyCollection
= McStateExtra;
+consensus_info#_
+ vset_switch_round:uint32
+ prev_vset_switch_round:uint32
+ genesis_info:GenesisInfo
+ prev_shuffle_mc_validators:Bool
+ = ConsensusInfo;
+
+genesis_info#_
+ start_round:uint32
+ genesis_millis:uint64
+ = GenesisInfo;
Отличия в CatchainConfig
В Tycho меняется содержимое ConfigParam 28. Вместо CatchainConfig вводится CollationConfig со схемами collation_config_tycho и collation_config_tycho_v2.
-_ CatchainConfig = ConfigParam 28;
+_ CollationConfig = ConfigParam 28;
+collation_config_tycho#a6
+ shuffle_mc_validators:Bool
+ mc_block_min_interval_ms:uint32
+ empty_sc_block_interval_ms:uint32
+ max_uncommitted_chain_length:uint8
+ wu_used_to_import_next_anchor:uint64
+ msgs_exec_params:MsgsExecutionParams
+ work_units_params:WorkUnitsParams
+ = CollationConfig;
+
+collation_config_tycho_v2#a7
+ shuffle_mc_validators:Bool
+ mc_block_min_interval_ms:uint32
+ mc_block_max_interval_ms:uint32
+ empty_sc_block_interval_ms:uint32
+ max_uncommitted_chain_length:uint8
+ wu_used_to_import_next_anchor:uint64
+ msgs_exec_params:MsgsExecutionParams
+ work_units_params:WorkUnitsParams
+ = CollationConfig;
+
+msgs_execution_params_tycho#00
+ buffer_limit:uint32
+ group_limit:uint16
+ group_vert_size:uint16
+ externals_expire_timeout:uint16
+ open_ranges_limit:uint16
+ par_0_int_msgs_count_limit:uint32
+ par_0_ext_msgs_count_limit:uint32
+ group_slots_fractions:(HashmapE 16 uint8)
+ = MsgsExecutionParams;
+
+msgs_execution_params_tycho_v2#01
+ buffer_limit:uint32
+ group_limit:uint16
+ group_vert_size:uint16
+ externals_expire_timeout:uint16
+ open_ranges_limit:uint16
+ par_0_int_msgs_count_limit:uint32
+ par_0_ext_msgs_count_limit:uint32
+ group_slots_fractions:(HashmapE 16 uint8)
+ range_messages_limit:uint32
+ = MsgsExecutionParams;
+
+work_units_params_tycho#00
+ prepare:WorkUnitParamsPrepare
+ execute:WorkUnitParamsExecute
+ finalize:WorkUnitParamsFinalize
+ = WorkUnitsParams;
+
+work_units_params_prepare_tycho#00
+ fixed:uint32
+ msgs_stats:uint16
+ remaning_msgs_stats:uint16
+ read_ext_msgs:uint16
+ read_int_msgs:uint16
+ read_new_msgs:uint16
+ add_to_msg_groups:uint16
+ = WorkUnitsParamsPrepare;
+
+work_units_params_execute_tycho#00
+ prepare:uint32
+ execute:uint16
+ execute_err:uint16
+ execute_delimiter:uint32
+ serialize_enqueue:uint16
+ serialize_dequeue:uint16
+ insert_new_msgs:uint16
+ subgroup_size:uint16
+ = WorkUnitsParamsExecute;
+
+work_units_params_finalize_tycho#00
+ build_transactions:uint16
+ build_accounts:uint16
+ build_in_msg:uint16
+ build_out_msg:uint16
+ serialize_min:uint32
+ serialize_accounts:uint16
+ serialize_msg:uint16
+ state_update_min:uint32
+ state_update_accounts:uint16
+ state_update_msg:uint16
+ create_diff:uint16
+ serialize_diff:uint16
+ apply_diff:uint16
+ diff_tail_len:uint16
+ = WorkUnitsParamsFinalize;
Отличия в ConsensusConfig
В Tycho меняется содержимое ConfigParam 29. Для ConsensusConfig используется схема consensus_config_tycho.
+consensus_config_tycho#d8
+ clock_skew_millis:uint16 { clock_skew_millis != 0 }
+ payload_batch_bytes:uint32 { payload_batch_bytes != 0 }
+ commit_history_rounds:uint8 { commit_history_rounds != 0 }
+ deduplicate_rounds:uint16
+ max_consensus_lag_rounds:uint16 { max_consensus_lag_rounds != 0 }
+ payload_buffer_bytes:uint32 { payload_buffer_bytes != 0 }
+ broadcast_retry_millis:uint8 { broadcast_retry_millis != 0 }
+ download_retry_millis:uint8 { download_retry_millis != 0 }
+ download_peers:uint8 { download_peers != 0 }
+ min_sign_attempts:uint8 { min_sign_attempts != 0 }
+ download_peer_queries:uint8 { download_peer_queries != 0 }
+ sync_support_rounds:uint16 { sync_support_rounds != 0 }
+ = ConsensusConfig;
_ ConsensusConfig = ConfigParam 29;
-consensus_config#d6 round_candidates:# { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;
-
-consensus_config_new#d7 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;
-
-consensus_config_v3#d8 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32
- proto_version:uint16 = ConsensusConfig;
-
-consensus_config_v4#d9 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32
- proto_version:uint16 catchain_max_blocks_coeff:uint32 = ConsensusConfig;
Full diff block.tlb
diff block.tlb (TON - Tycho)
master_info$_ master:ExtBlkRef = BlkMasterInfo;
-shard_state#9023afe2 global_id:int32
+shard_state_tycho#9023aeee global_id:int32
shard_id:ShardIdent
seq_no:uint32 vert_seq_no:#
- gen_utime:uint32 gen_lt:uint64
+ gen_utime:uint32 gen_utime_ms:uint16 gen_lt:uint64
min_ref_mc_seqno:uint32
- out_msg_queue_info:^OutMsgQueueInfo
+ processed_upto:^ProcessedUptoInfo
before_split:(## 1)
accounts:^ShardAccounts
^[ overload_history:uint64 underload_history:uint64
@@ -442,10 +442,49 @@ shard_state#9023afe2 global_id:int32
_ ShardStateUnsplit = ShardState;
split_state#5f327da5 left:^ShardStateUnsplit right:^ShardStateUnsplit = ShardState;
+processed_upto_info#00
+ partitions:(HashmapE 16 ProcessedUptoPartition)
+ msgs_exec_params:(Maybe ^MsgsExecutionParams)
+ = ProcessedUptoInfo;
+
+processedUptoPartition#00
+ externals:ExternalsProcessedUpto
+ internals:InternalsProcessedUpto
+ = ProcessedUptoPartition;
+
+externalsProcessedUpto#00
+ processed_to_anchor_id:uint32
+ processed_to_msgs_offset:uint64
+ ranges:(HashmapE 32 ExternalsRange)
+ = ExternalsProcessedUpto;
+
+externalsRange#00
+ from_anchor_id:uint32
+ from_msgs_offset:uint64
+ to_anchor_id:uint32
+ to_msgs_offset:uint64
+ chain_time:uint64
+ skip_offset:uint32
+ processed_offset:uint32
+ = ExternalsRange;
+
+internalsProcessedUpto#00
+ processed_to:(HashmapE 96 ProcessedUpto)
+ ranges:(HashmapE 32 InternalsRange)
+ = InternalsProcessedUpto;
+
+internalsRange#00
+ skip_offset:uint32
+ processed_offset:uint32
+ shards:(HashmapE 96 ShardRange)
+ = InternalsRange;
+
+shardRange#00 from:uint64 to:uint64 = ShardRange;
+
shared_lib_descr$00 lib:^Cell publishers:(Hashmap 256 True)
= LibDescr;
-block_info#9bc7a987 version:uint32
+block_info_tycho#9bc7a988 version:uint32
not_master:(## 1)
after_merge:(## 1) before_split:(## 1)
after_split:(## 1)
@@ -455,6 +494,7 @@ block_info#9bc7a987 version:uint32
seq_no:# vert_seq_no:# { vert_seq_no >= vert_seqno_incr }
{ prev_seq_no:# } { ~prev_seq_no + 1 = seq_no }
shard:ShardIdent gen_utime:uint32
+ gen_utime_ms:uint16
start_lt:uint64 end_lt:uint64
gen_validator_list_hash_short:uint32
gen_catchain_seqno:uint32
@@ -469,12 +509,17 @@ block_info#9bc7a987 version:uint32
prev_blk_info$_ prev:ExtBlkRef = BlkPrevInfo 0;
prev_blks_info$_ prev1:^ExtBlkRef prev2:^ExtBlkRef = BlkPrevInfo 1;
-block#11ef55aa global_id:int32
+block_tycho#11ef55bb global_id:int32
info:^BlockInfo value_flow:^ValueFlow
+ ^[
state_update:^(MERKLE_UPDATE ShardState)
+ out_msg_queue_updates:OutMsgQueueUpdates
+ ]
extra:^BlockExtra = Block;
-block_extra in_msg_descr:^InMsgDescr
+out_msg_queue_updates#1 diff_hash:bits256 tail_len:uint32 = OutMsgQueueUpdates;
+
+block_extra_tycho#4a33f6fc in_msg_descr:^InMsgDescr
out_msg_descr:^OutMsgDescr
account_blocks:^ShardAccountBlocks
rand_seed:bits256
@@ -516,25 +561,13 @@ fsm_none$0 = FutureSplitMerge;
fsm_split$10 split_utime:uint32 interval:uint32 = FutureSplitMerge;
fsm_merge$11 merge_utime:uint32 interval:uint32 = FutureSplitMerge;
-shard_descr#b seq_no:uint32 reg_mc_seqno:uint32
+shard_descr_tycho#a seq_no:uint32 reg_mc_seqno:uint32
start_lt:uint64 end_lt:uint64
root_hash:bits256 file_hash:bits256
before_split:Bool before_merge:Bool
want_split:Bool want_merge:Bool
- nx_cc_updated:Bool flags:(## 3) { flags = 0 }
- next_catchain_seqno:uint32 next_validator_shard:uint64
- min_ref_mc_seqno:uint32 gen_utime:uint32
- split_merge_at:FutureSplitMerge
- fees_collected:CurrencyCollection
- funds_created:CurrencyCollection = ShardDescr;
-
-shard_descr_new#a seq_no:uint32 reg_mc_seqno:uint32
- start_lt:uint64 end_lt:uint64
- root_hash:bits256 file_hash:bits256
- before_split:Bool before_merge:Bool
- want_split:Bool want_merge:Bool
- nx_cc_updated:Bool flags:(## 3) { flags = 0 }
- next_catchain_seqno:uint32 next_validator_shard:uint64
+ nx_cc_updated:Bool top_sc_block_updated:Bool flags:(## 2) { flags = 0 }
+ next_catchain_seqno:uint32 ext_processed_to_anchor_id:uint32
min_ref_mc_seqno:uint32 gen_utime:uint32
split_merge_at:FutureSplitMerge
^[ fees_collected:CurrencyCollection
@@ -577,15 +610,28 @@ block_create_stats_ext#34 counters:(HashmapAugE 256 CreatorStats uint32) = Block
masterchain_state_extra#cc26
shard_hashes:ShardHashes
config:ConfigParams
- ^[ flags:(## 16) { flags <= 1 }
+ ^[ flags:(## 16) { flags <= 4 }
validator_info:ValidatorInfo
prev_blocks:OldMcBlocksInfo
after_key_block:Bool
last_key_block:(Maybe ExtBlkRef)
- block_create_stats:(flags . 0)?BlockCreateStats ]
+ block_create_stats:(flags . 0)?BlockCreateStats
+ consensus_info:(flags . 2)?ConsensusInfo ]
global_balance:CurrencyCollection
= McStateExtra;
+consensus_info#_
+ vset_switch_round:uint32
+ prev_vset_switch_round:uint32
+ genesis_info:GenesisInfo
+ prev_shuffle_mc_validators:Bool
+ = ConsensusInfo;
+
+genesis_info#_
+ start_round:uint32
+ genesis_millis:uint64
+ = GenesisInfo;
+
ed25519_pubkey#8e81278a pubkey:bits256 = SigPubKey; // 288 bits
ed25519_signature#5 R:bits256 s:bits256 = CryptoSignatureSimple; // 516 bits
_ CryptoSignatureSimple = CryptoSignature;
@@ -747,39 +793,110 @@ config_mc_fwd_prices#_ MsgForwardPrices = ConfigParam 24;
// used for all other messages
config_fwd_prices#_ MsgForwardPrices = ConfigParam 25;
-consensus_config#d6 round_candidates:# { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;
-
-consensus_config_new#d7 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;
-
-consensus_config_v3#d8 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32
- proto_version:uint16 = ConsensusConfig;
-
-consensus_config_v4#d9 flags:(## 7) { flags = 0 } new_catchain_ids:Bool
- round_candidates:(## 8) { round_candidates >= 1 }
- next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32
- fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32
- max_block_bytes:uint32 max_collated_bytes:uint32
- proto_version:uint16 catchain_max_blocks_coeff:uint32 = ConsensusConfig;
-
-_ CatchainConfig = ConfigParam 28;
+collation_config_tycho#a6
+ shuffle_mc_validators:Bool
+ mc_block_min_interval_ms:uint32
+ empty_sc_block_interval_ms:uint32
+ max_uncommitted_chain_length:uint8
+ wu_used_to_import_next_anchor:uint64
+ msgs_exec_params:MsgsExecutionParams
+ work_units_params:WorkUnitsParams
+ = CollationConfig;
+
+collation_config_tycho_v2#a7
+ shuffle_mc_validators:Bool
+ mc_block_min_interval_ms:uint32
+ mc_block_max_interval_ms:uint32
+ empty_sc_block_interval_ms:uint32
+ max_uncommitted_chain_length:uint8
+ wu_used_to_import_next_anchor:uint64
+ msgs_exec_params:MsgsExecutionParams
+ work_units_params:WorkUnitsParams
+ = CollationConfig;
+
+msgs_execution_params_tycho#00
+ buffer_limit:uint32
+ group_limit:uint16
+ group_vert_size:uint16
+ externals_expire_timeout:uint16
+ open_ranges_limit:uint16
+ par_0_int_msgs_count_limit:uint32
+ par_0_ext_msgs_count_limit:uint32
+ group_slots_fractions:(HashmapE 16 uint8)
+ = MsgsExecutionParams;
+
+msgs_execution_params_tycho_v2#01
+ buffer_limit:uint32
+ group_limit:uint16
+ group_vert_size:uint16
+ externals_expire_timeout:uint16
+ open_ranges_limit:uint16
+ par_0_int_msgs_count_limit:uint32
+ par_0_ext_msgs_count_limit:uint32
+ group_slots_fractions:(HashmapE 16 uint8)
+ range_messages_limit:uint32
+ = MsgsExecutionParams;
+
+work_units_params_tycho#00
+ prepare:WorkUnitParamsPrepare
+ execute:WorkUnitParamsExecute
+ finalize:WorkUnitParamsFinalize
+ = WorkUnitsParams;
+
+work_units_params_prepare_tycho#00
+ fixed:uint32
+ msgs_stats:uint16
+ remaning_msgs_stats:uint16
+ read_ext_msgs:uint16
+ read_int_msgs:uint16
+ read_new_msgs:uint16
+ add_to_msg_groups:uint16
+ = WorkUnitsParamsPrepare;
+
+work_units_params_execute_tycho#00
+ prepare:uint32
+ execute:uint16
+ execute_err:uint16
+ execute_delimiter:uint32
+ serialize_enqueue:uint16
+ serialize_dequeue:uint16
+ insert_new_msgs:uint16
+ subgroup_size:uint16
+ = WorkUnitsParamsExecute;
+
+work_units_params_finalize_tycho#00
+ build_transactions:uint16
+ build_accounts:uint16
+ build_in_msg:uint16
+ build_out_msg:uint16
+ serialize_min:uint32
+ serialize_accounts:uint16
+ serialize_msg:uint16
+ state_update_min:uint32
+ state_update_accounts:uint16
+ state_update_msg:uint16
+ create_diff:uint16
+ serialize_diff:uint16
+ apply_diff:uint16
+ diff_tail_len:uint16
+ = WorkUnitsParamsFinalize;
+
+consensus_config_tycho#d8
+ clock_skew_millis:uint16 { clock_skew_millis != 0 }
+ payload_batch_bytes:uint32 { payload_batch_bytes != 0 }
+ commit_history_rounds:uint8 { commit_history_rounds != 0 }
+ deduplicate_rounds:uint16
+ max_consensus_lag_rounds:uint16 { max_consensus_lag_rounds != 0 }
+ payload_buffer_bytes:uint32 { payload_buffer_bytes != 0 }
+ broadcast_retry_millis:uint8 { broadcast_retry_millis != 0 }
+ download_retry_millis:uint8 { download_retry_millis != 0 }
+ download_peers:uint8 { download_peers != 0 }
+ min_sign_attempts:uint8 { min_sign_attempts != 0 }
+ download_peer_queries:uint8 { download_peer_queries != 0 }
+ sync_support_rounds:uint16 { sync_support_rounds != 0 }
+ = ConsensusConfig;
+
+_ CollationConfig = ConfigParam 28;
_ ConsensusConfig = ConfigParam 29;
_ fundamental_smc_addr:(HashmapE 256 True) = ConfigParam 31;