@ton-community/tlb-runtime
Version:
TL‑B Runtime is a library for parsing and (de)serializing data according to TL‑B schemas
2 lines (1 loc) • 39.2 kB
TypeScript
export declare const blockSchema = "// https://github.com/ton-blockchain/ton/raw/774371bdc9f6107fd05106c1fd559e8903e0513d/crypto/block/block.tlb\nunit$_ = Unit;\ntrue$_ = True;\n// EMPTY False;\nbool_false$0 = Bool;\nbool_true$1 = Bool;\nbool_false$0 = BoolFalse;\nbool_true$1 = BoolTrue;\nnothing$0 {X:Type} = Maybe X;\njust$1 {X:Type} value:X = Maybe X;\nleft$0 {X:Type} {Y:Type} value:X = Either X Y;\nright$1 {X:Type} {Y:Type} value:Y = Either X Y;\npair$_ {X:Type} {Y:Type} first:X second:Y = Both X Y;\n\nbit$_ (## 1) = Bit;\n/*\n *\n * FROM hashmap.tlb\n *\n */\n// ordinary Hashmap / HashmapE, with fixed length keys\n//\nhm_edge#_ {n:#} {X:Type} {l:#} {m:#} label:(HmLabel ~l n) \n {n = (~m) + l} node:(HashmapNode m X) = Hashmap n X;\n\nhmn_leaf#_ {X:Type} value:X = HashmapNode 0 X;\nhmn_fork#_ {n:#} {X:Type} left:^(Hashmap n X) \n right:^(Hashmap n X) = HashmapNode (n + 1) X;\n\nhml_short$0 {m:#} {n:#} len:(Unary ~n) {n <= m} s:(n * Bit) = HmLabel ~n m;\nhml_long$10 {m:#} n:(#<= m) s:(n * Bit) = HmLabel ~n m;\nhml_same$11 {m:#} v:Bit n:(#<= m) = HmLabel ~n m;\n\nunary_zero$0 = Unary ~0;\nunary_succ$1 {n:#} x:(Unary ~n) = Unary ~(n + 1);\n\nhme_empty$0 {n:#} {X:Type} = HashmapE n X;\nhme_root$1 {n:#} {X:Type} root:^(Hashmap n X) = HashmapE n X;\n\n// true#_ = True;\n_ {n:#} _:(Hashmap n True) = BitstringSet n;\n\n// HashmapAug, hashmap with an extra value \n// (augmentation) of type Y at every node\n//\nahm_edge#_ {n:#} {X:Type} {Y:Type} {l:#} {m:#} \n label:(HmLabel ~l n) {n = (~m) + l} \n node:(HashmapAugNode m X Y) = HashmapAug n X Y;\nahmn_leaf#_ {X:Type} {Y:Type} extra:Y value:X = HashmapAugNode 0 X Y;\nahmn_fork#_ {n:#} {X:Type} {Y:Type} left:^(HashmapAug n X Y)\n right:^(HashmapAug n X Y) extra:Y = HashmapAugNode (n + 1) X Y;\n\nahme_empty$0 {n:#} {X:Type} {Y:Type} extra:Y \n = HashmapAugE n X Y;\nahme_root$1 {n:#} {X:Type} {Y:Type} root:^(HashmapAug n X Y) \n extra:Y = HashmapAugE n X Y;\n\n// VarHashmap / VarHashmapE, with variable-length keys\n//\nvhm_edge#_ {n:#} {X:Type} {l:#} {m:#} label:(HmLabel ~l n) \n {n = (~m) + l} node:(VarHashmapNode m X) \n = VarHashmap n X;\nvhmn_leaf$00 {n:#} {X:Type} value:X = VarHashmapNode n X;\nvhmn_fork$01 {n:#} {X:Type} left:^(VarHashmap n X) \n right:^(VarHashmap n X) value:(Maybe X) \n = VarHashmapNode (n + 1) X;\nvhmn_cont$1 {n:#} {X:Type} branch:Bit child:^(VarHashmap n X) \n value:X = VarHashmapNode (n + 1) X;\n\n// nothing$0 {X:Type} = Maybe X;\n// just$1 {X:Type} value:X = Maybe X;\n\nvhme_empty$0 {n:#} {X:Type} = VarHashmapE n X;\nvhme_root$1 {n:#} {X:Type} root:^(VarHashmap n X) \n = VarHashmapE n X;\n\n//\n// PfxHashmap / PfxHashmapE, with variable-length keys\n// constituting a prefix code\n//\n\nphm_edge#_ {n:#} {X:Type} {l:#} {m:#} label:(HmLabel ~l n) \n {n = (~m) + l} node:(PfxHashmapNode m X) \n = PfxHashmap n X;\n\nphmn_leaf$0 {n:#} {X:Type} value:X = PfxHashmapNode n X;\nphmn_fork$1 {n:#} {X:Type} left:^(PfxHashmap n X) \n right:^(PfxHashmap n X) = PfxHashmapNode (n + 1) X;\n\nphme_empty$0 {n:#} {X:Type} = PfxHashmapE n X;\nphme_root$1 {n:#} {X:Type} root:^(PfxHashmap n X) \n = PfxHashmapE n X;\n/*\n *\n * END hashmap.tlb\n *\n */\n//\n// TON BLOCK LAYOUT\n//\naddr_none$00 = MsgAddressExt;\naddr_extern$01 len:(## 9) external_address:(bits len) \n = MsgAddressExt;\nanycast_info$_ depth:(#<= 30) { depth >= 1 }\n rewrite_pfx:(bits depth) = Anycast;\naddr_std$10 anycast:(Maybe Anycast) \n workchain_id:int8 address:bits256 = MsgAddressInt;\naddr_var$11 anycast:(Maybe Anycast) addr_len:(## 9) \n workchain_id:int32 address:(bits addr_len) = MsgAddressInt;\n_ _:MsgAddressInt = MsgAddress;\n_ _:MsgAddressExt = MsgAddress;\n//\nvar_uint$_ {n:#} len:(#< n) value:(uint (len * 8))\n = VarUInteger n;\nvar_int$_ {n:#} len:(#< n) value:(int (len * 8)) \n = VarInteger n;\nnanograms$_ amount:(VarUInteger 16) = Grams;\n\n_ grams:Grams = Coins;\n\n//\nextra_currencies$_ dict:(HashmapE 32 (VarUInteger 32)) \n = ExtraCurrencyCollection;\ncurrencies$_ grams:Grams other:ExtraCurrencyCollection \n = CurrencyCollection;\n//\nint_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool\n src:MsgAddressInt dest:MsgAddressInt \n value:CurrencyCollection ihr_fee:Grams fwd_fee:Grams\n created_lt:uint64 created_at:uint32 = CommonMsgInfo;\next_in_msg_info$10 src:MsgAddressExt dest:MsgAddressInt \n import_fee:Grams = CommonMsgInfo;\next_out_msg_info$11 src:MsgAddressInt dest:MsgAddressExt\n created_lt:uint64 created_at:uint32 = CommonMsgInfo;\n\nint_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool\n src:MsgAddress dest:MsgAddressInt \n value:CurrencyCollection ihr_fee:Grams fwd_fee:Grams\n created_lt:uint64 created_at:uint32 = CommonMsgInfoRelaxed;\next_out_msg_info$11 src:MsgAddress dest:MsgAddressExt\n created_lt:uint64 created_at:uint32 = CommonMsgInfoRelaxed;\n\ntick_tock$_ tick:Bool tock:Bool = TickTock;\n\n_ fixed_prefix_length:(Maybe (## 5)) special:(Maybe TickTock)\n code:(Maybe ^Cell) data:(Maybe ^Cell)\n library:(Maybe ^Cell) = StateInit;\n\n// StateInitWithLibs is used to validate sent and received messages\n_ fixed_prefix_length:(Maybe (## 5)) special:(Maybe TickTock)\n code:(Maybe ^Cell) data:(Maybe ^Cell)\n library:(HashmapE 256 SimpleLib) = StateInitWithLibs;\n\nsimple_lib$_ public:Bool root:^Cell = SimpleLib;\n\nmessage$_ {X:Type} info:CommonMsgInfo\n init:(Maybe (Either StateInit ^StateInit))\n body:(Either X ^X) = Message X;\n\nmessage$_ {X:Type} info:CommonMsgInfoRelaxed\n init:(Maybe (Either StateInit ^StateInit))\n body:(Either X ^X) = MessageRelaxed X;\n \n_ (Message Any) = MessageAny;\n\n//\ninterm_addr_regular$0 use_dest_bits:(#<= 96) \n = IntermediateAddress;\ninterm_addr_simple$10 workchain_id:int8 addr_pfx:uint64 \n = IntermediateAddress;\ninterm_addr_ext$11 workchain_id:int32 addr_pfx:uint64\n = IntermediateAddress;\nmsg_envelope#4 cur_addr:IntermediateAddress \n next_addr:IntermediateAddress fwd_fee_remaining:Grams \n msg:^(Message Any) = MsgEnvelope;\nmsg_metadata#0 depth:uint32 initiator_addr:MsgAddressInt initiator_lt:uint64 = MsgMetadata;\nmsg_envelope_v2#5 cur_addr:IntermediateAddress\n next_addr:IntermediateAddress fwd_fee_remaining:Grams\n msg:^(Message Any)\n emitted_lt:(Maybe uint64)\n metadata:(Maybe MsgMetadata) = MsgEnvelope;\n//\nmsg_import_ext$000 msg:^(Message Any) transaction:^Transaction \n = InMsg;\nmsg_import_ihr$010 msg:^(Message Any) transaction:^Transaction \n ihr_fee:Grams proof_created:^Cell = InMsg;\nmsg_import_imm$011 in_msg:^MsgEnvelope\n transaction:^Transaction fwd_fee:Grams = InMsg;\nmsg_import_fin$100 in_msg:^MsgEnvelope \n transaction:^Transaction fwd_fee:Grams = InMsg;\nmsg_import_tr$101 in_msg:^MsgEnvelope out_msg:^MsgEnvelope \n transit_fee:Grams = InMsg;\nmsg_discard_fin$110 in_msg:^MsgEnvelope transaction_id:uint64 \n fwd_fee:Grams = InMsg;\nmsg_discard_tr$111 in_msg:^MsgEnvelope transaction_id:uint64 \n fwd_fee:Grams proof_delivered:^Cell = InMsg;\nmsg_import_deferred_fin$00100 in_msg:^MsgEnvelope\n transaction:^Transaction fwd_fee:Grams = InMsg;\nmsg_import_deferred_tr$00101 in_msg:^MsgEnvelope out_msg:^MsgEnvelope = InMsg;\n//\nimport_fees$_ fees_collected:Grams \n value_imported:CurrencyCollection = ImportFees;\n\n_ (HashmapAugE 256 InMsg ImportFees) = InMsgDescr;\n\nmsg_export_ext$000 msg:^(Message Any)\n transaction:^Transaction = OutMsg;\nmsg_export_imm$010 out_msg:^MsgEnvelope \n transaction:^Transaction reimport:^InMsg = OutMsg;\nmsg_export_new$001 out_msg:^MsgEnvelope \n transaction:^Transaction = OutMsg;\nmsg_export_tr$011 out_msg:^MsgEnvelope \n imported:^InMsg = OutMsg;\nmsg_export_deq$1100 out_msg:^MsgEnvelope\n import_block_lt:uint63 = OutMsg;\nmsg_export_deq_short$1101 msg_env_hash:bits256\n next_workchain:int32 next_addr_pfx:uint64\n import_block_lt:uint64 = OutMsg;\nmsg_export_tr_req$111 out_msg:^MsgEnvelope \n imported:^InMsg = OutMsg;\nmsg_export_deq_imm$100 out_msg:^MsgEnvelope \n reimport:^InMsg = OutMsg;\nmsg_export_new_defer$10100 out_msg:^MsgEnvelope\n transaction:^Transaction = OutMsg;\nmsg_export_deferred_tr$10101 out_msg:^MsgEnvelope\n imported:^InMsg = OutMsg;\n\n_ enqueued_lt:uint64 out_msg:^MsgEnvelope = EnqueuedMsg;\n\n_ (HashmapAugE 256 OutMsg CurrencyCollection) = OutMsgDescr;\n\n_ (HashmapAugE 352 EnqueuedMsg uint64) = OutMsgQueue;\n\nprocessed_upto$_ last_msg_lt:uint64 last_msg_hash:bits256 = ProcessedUpto;\n// key is [ shard:uint64 mc_seqno:uint32 ] \n_ (HashmapE 96 ProcessedUpto) = ProcessedInfo;\n\nihr_pending$_ import_lt:uint64 = IhrPendingSince;\n_ (HashmapE 320 IhrPendingSince) = IhrPendingInfo;\n\n// key - created_lt\n_ messages:(HashmapE 64 EnqueuedMsg) count:uint48 = AccountDispatchQueue;\n// key - sender address, aug - min created_lt\n_ (HashmapAugE 256 AccountDispatchQueue uint64) = DispatchQueue;\n\nout_msg_queue_extra#0 dispatch_queue:DispatchQueue out_queue_size:(Maybe uint48) = OutMsgQueueExtra;\n\n_ out_queue:OutMsgQueue proc_info:ProcessedInfo\n extra:(Maybe OutMsgQueueExtra) = OutMsgQueueInfo;\n\nstorage_extra_none$000 = StorageExtraInfo;\nstorage_extra_info$001 dict_hash:uint256 = StorageExtraInfo;\n\nstorage_used$_ cells:(VarUInteger 7) bits:(VarUInteger 7) = StorageUsed;\n\nstorage_info$_ used:StorageUsed storage_extra:StorageExtraInfo last_paid:uint32\n due_payment:(Maybe Grams) = StorageInfo;\n\naccount_none$0 = Account;\naccount$1 addr:MsgAddressInt storage_stat:StorageInfo\n storage:AccountStorage = Account;\n\naccount_storage$_ last_trans_lt:uint64\n balance:CurrencyCollection state:AccountState \n = AccountStorage;\n\naccount_uninit$00 = AccountState;\naccount_active$1 _:StateInit = AccountState;\naccount_frozen$01 state_hash:bits256 = AccountState;\n\nacc_state_uninit$00 = AccountStatus;\nacc_state_frozen$01 = AccountStatus;\nacc_state_active$10 = AccountStatus;\nacc_state_nonexist$11 = AccountStatus;\n\naccount_descr$_ account:^Account last_trans_hash:bits256 \n last_trans_lt:uint64 = ShardAccount;\n\ndepth_balance$_ split_depth:(#<= 30) balance:CurrencyCollection = DepthBalanceInfo;\n\n_ (HashmapAugE 256 ShardAccount DepthBalanceInfo) = ShardAccounts;\n\ntransaction$0111 account_addr:bits256 lt:uint64 \n prev_trans_hash:bits256 prev_trans_lt:uint64 now:uint32\n outmsg_cnt:uint15\n orig_status:AccountStatus end_status:AccountStatus\n ^[ in_msg:(Maybe ^(Message Any)) out_msgs:(HashmapE 15 ^(Message Any)) ]\n total_fees:CurrencyCollection state_update:^(HASH_UPDATE Account)\n description:^TransactionDescr = Transaction;\n\n!merkle_update#04 {X:Type} old_hash:bits256 new_hash:bits256 old_depth:uint16 new_depth:uint16\n old:^X new:^X = MERKLE_UPDATE X;\nupdate_hashes#72 {X:Type} old_hash:bits256 new_hash:bits256\n = HASH_UPDATE X;\n!merkle_proof#03 {X:Type} virtual_hash:bits256 depth:uint16 virtual_root:^X = MERKLE_PROOF X;\n\nacc_trans#5 account_addr:bits256\n transactions:(HashmapAug 64 ^Transaction CurrencyCollection)\n state_update:^(HASH_UPDATE Account)\n = AccountBlock;\n\n_ (HashmapAugE 256 AccountBlock CurrencyCollection) = ShardAccountBlocks;\n//\ntr_phase_storage$_ storage_fees_collected:Grams \n storage_fees_due:(Maybe Grams)\n status_change:AccStatusChange\n = TrStoragePhase;\n\nacst_unchanged$0 = AccStatusChange; // x -> x\nacst_frozen$10 = AccStatusChange; // init -> frozen\nacst_deleted$11 = AccStatusChange; // frozen -> deleted\n\ntr_phase_credit$_ due_fees_collected:(Maybe Grams)\n credit:CurrencyCollection = TrCreditPhase;\n\ntr_phase_compute_skipped$0 reason:ComputeSkipReason\n = TrComputePhase;\ntr_phase_compute_vm$1 success:Bool msg_state_used:Bool \n account_activated:Bool gas_fees:Grams\n ^[ gas_used:(VarUInteger 7)\n gas_limit:(VarUInteger 7) gas_credit:(Maybe (VarUInteger 3))\n mode:int8 exit_code:int32 exit_arg:(Maybe int32)\n vm_steps:uint32\n vm_init_state_hash:bits256 vm_final_state_hash:bits256 ]\n = TrComputePhase;\ncskip_no_state$00 = ComputeSkipReason;\ncskip_bad_state$01 = ComputeSkipReason;\ncskip_no_gas$10 = ComputeSkipReason;\ncskip_suspended$110 = ComputeSkipReason;\n\ntr_phase_action$_ success:Bool valid:Bool no_funds:Bool\n status_change:AccStatusChange\n total_fwd_fees:(Maybe Grams) total_action_fees:(Maybe Grams)\n result_code:int32 result_arg:(Maybe int32) tot_actions:uint16\n spec_actions:uint16 skipped_actions:uint16 msgs_created:uint16 \n action_list_hash:bits256 tot_msg_size:StorageUsed\n = TrActionPhase;\n\ntr_phase_bounce_negfunds$00 = TrBouncePhase;\ntr_phase_bounce_nofunds$01 msg_size:StorageUsed\n req_fwd_fees:Grams = TrBouncePhase;\ntr_phase_bounce_ok$1 msg_size:StorageUsed\n msg_fees:Grams fwd_fees:Grams = TrBouncePhase;\n//\ntrans_ord$0000 credit_first:Bool\n storage_ph:(Maybe TrStoragePhase)\n credit_ph:(Maybe TrCreditPhase)\n compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)\n aborted:Bool bounce:(Maybe TrBouncePhase)\n destroyed:Bool\n = TransactionDescr;\n\ntrans_storage$0001 storage_ph:TrStoragePhase\n = TransactionDescr;\n\ntrans_tick_tock$001 is_tock:Bool storage_ph:TrStoragePhase\n compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)\n aborted:Bool destroyed:Bool = TransactionDescr;\n//\nsplit_merge_info$_ cur_shard_pfx_len:(## 6)\n acc_split_depth:(## 6) this_addr:bits256 sibling_addr:bits256\n = SplitMergeInfo;\ntrans_split_prepare$0100 split_info:SplitMergeInfo\n storage_ph:(Maybe TrStoragePhase)\n compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)\n aborted:Bool destroyed:Bool\n = TransactionDescr;\ntrans_split_install$0101 split_info:SplitMergeInfo\n prepare_transaction:^Transaction\n installed:Bool = TransactionDescr;\n\ntrans_merge_prepare$0110 split_info:SplitMergeInfo\n storage_ph:TrStoragePhase aborted:Bool\n = TransactionDescr;\ntrans_merge_install$0111 split_info:SplitMergeInfo\n prepare_transaction:^Transaction\n storage_ph:(Maybe TrStoragePhase)\n credit_ph:(Maybe TrCreditPhase)\n compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)\n aborted:Bool destroyed:Bool\n = TransactionDescr;\n\nsmc_info#076ef1ea actions:uint16 msgs_sent:uint16\n unixtime:uint32 block_lt:uint64 trans_lt:uint64 \n rand_seed:bits256 balance_remaining:CurrencyCollection\n myself:MsgAddressInt global_config:(Maybe Cell) = SmartContractInfo;\n//\n//\nout_list_empty$_ = OutList 0;\nout_list$_ {n:#} prev:^(OutList n) action:OutAction\n = OutList (n + 1);\naction_send_msg#0ec3c86d mode:(## 8) \n out_msg:^(MessageRelaxed Any) = OutAction;\naction_set_code#ad4de08e new_code:^Cell = OutAction;\naction_reserve_currency#36e6b809 mode:(## 8)\n currency:CurrencyCollection = OutAction;\nlibref_hash$0 lib_hash:bits256 = LibRef;\nlibref_ref$1 library:^Cell = LibRef;\naction_change_library#26fa1dd4 mode:(## 7)\n libref:LibRef = OutAction;\n\nout_list_node$_ prev:^Cell action:OutAction = OutListNode;\n//\n//\nshard_ident$00 shard_pfx_bits:(#<= 60) \n workchain_id:int32 shard_prefix:uint64 = ShardIdent;\n\next_blk_ref$_ end_lt:uint64\n seq_no:uint32 root_hash:bits256 file_hash:bits256 \n = ExtBlkRef;\n\nblock_id_ext$_ shard_id:ShardIdent seq_no:uint32\n root_hash:bits256 file_hash:bits256 = BlockIdExt;\n\nmaster_info$_ master:ExtBlkRef = BlkMasterInfo;\n\nshard_state#9023afe2 global_id:int32\n shard_id:ShardIdent \n seq_no:uint32 vert_seq_no:#\n gen_utime:uint32 gen_lt:uint64\n min_ref_mc_seqno:uint32\n out_msg_queue_info:^OutMsgQueueInfo\n before_split:(## 1)\n accounts:^ShardAccounts\n ^[ overload_history:uint64 underload_history:uint64\n total_balance:CurrencyCollection\n total_validator_fees:CurrencyCollection\n libraries:(HashmapE 256 LibDescr)\n master_ref:(Maybe BlkMasterInfo) ]\n custom:(Maybe ^McStateExtra)\n = ShardStateUnsplit;\n \n_ ShardStateUnsplit = ShardState;\nsplit_state#5f327da5 left:^ShardStateUnsplit right:^ShardStateUnsplit = ShardState;\n\nshared_lib_descr$00 lib:^Cell publishers:(Hashmap 256 True)\n = LibDescr;\n\nblock_info#9bc7a987 version:uint32 \n not_master:(## 1) \n after_merge:(## 1) before_split:(## 1) \n after_split:(## 1) \n want_split:Bool want_merge:Bool\n key_block:Bool vert_seqno_incr:(## 1)\n flags:(## 8) { flags <= 1 }\n seq_no:# vert_seq_no:# { vert_seq_no >= vert_seqno_incr } \n { prev_seq_no:# } { ~prev_seq_no + 1 = seq_no } \n shard:ShardIdent gen_utime:uint32\n start_lt:uint64 end_lt:uint64\n gen_validator_list_hash_short:uint32\n gen_catchain_seqno:uint32\n min_ref_mc_seqno:uint32\n prev_key_block_seqno:uint32\n gen_software:flags . 0?GlobalVersion\n master_ref:not_master?^BlkMasterInfo \n prev_ref:^(BlkPrevInfo after_merge)\n prev_vert_ref:vert_seqno_incr?^(BlkPrevInfo 0)\n = BlockInfo;\n\nprev_blk_info$_ prev:ExtBlkRef = BlkPrevInfo 0;\nprev_blks_info$_ prev1:^ExtBlkRef prev2:^ExtBlkRef = BlkPrevInfo 1;\n\nblock#11ef55aa global_id:int32\n info:^BlockInfo value_flow:^ValueFlow\n state_update:^(MERKLE_UPDATE ShardState) \n extra:^BlockExtra = Block;\n\nblock_extra in_msg_descr:^InMsgDescr\n out_msg_descr:^OutMsgDescr\n account_blocks:^ShardAccountBlocks\n rand_seed:bits256\n created_by:bits256\n custom:(Maybe ^McBlockExtra) = BlockExtra;\n//\nvalue_flow#b8e48dfb ^[ from_prev_blk:CurrencyCollection \n to_next_blk:CurrencyCollection\n imported:CurrencyCollection\n exported:CurrencyCollection ]\n fees_collected:CurrencyCollection\n ^[\n fees_imported:CurrencyCollection\n recovered:CurrencyCollection\n created:CurrencyCollection\n minted:CurrencyCollection\n ] = ValueFlow;\n\nvalue_flow_v2#3ebf98b7 ^[ from_prev_blk:CurrencyCollection\n to_next_blk:CurrencyCollection\n imported:CurrencyCollection\n exported:CurrencyCollection ]\n fees_collected:CurrencyCollection\n burned:CurrencyCollection\n ^[\n fees_imported:CurrencyCollection\n recovered:CurrencyCollection\n created:CurrencyCollection\n minted:CurrencyCollection\n ] = ValueFlow;\n\n//\n//\nbt_leaf$0 {X:Type} leaf:X = BinTree X;\nbt_fork$1 {X:Type} left:^(BinTree X) right:^(BinTree X) \n = BinTree X;\n\nfsm_none$0 = FutureSplitMerge;\nfsm_split$10 split_utime:uint32 interval:uint32 = FutureSplitMerge;\nfsm_merge$11 merge_utime:uint32 interval:uint32 = FutureSplitMerge;\n\nshard_descr#b seq_no:uint32 reg_mc_seqno:uint32\n start_lt:uint64 end_lt:uint64\n root_hash:bits256 file_hash:bits256 \n before_split:Bool before_merge:Bool\n want_split:Bool want_merge:Bool\n nx_cc_updated:Bool flags:(## 3) { flags = 0 }\n next_catchain_seqno:uint32 next_validator_shard:uint64\n min_ref_mc_seqno:uint32 gen_utime:uint32\n split_merge_at:FutureSplitMerge\n fees_collected:CurrencyCollection\n funds_created:CurrencyCollection = ShardDescr;\n\nshard_descr_new#a seq_no:uint32 reg_mc_seqno:uint32\n start_lt:uint64 end_lt:uint64\n root_hash:bits256 file_hash:bits256 \n before_split:Bool before_merge:Bool\n want_split:Bool want_merge:Bool\n nx_cc_updated:Bool flags:(## 3) { flags = 0 }\n next_catchain_seqno:uint32 next_validator_shard:uint64\n min_ref_mc_seqno:uint32 gen_utime:uint32\n split_merge_at:FutureSplitMerge\n ^[ fees_collected:CurrencyCollection\n funds_created:CurrencyCollection ] = ShardDescr;\n\n_ (HashmapE 32 ^(BinTree ShardDescr)) = ShardHashes;\n\nbta_leaf$0 {X:Type} {Y:Type} extra:Y leaf:X = BinTreeAug X Y;\nbta_fork$1 {X:Type} {Y:Type} left:^(BinTreeAug X Y) \n right:^(BinTreeAug X Y) extra:Y = BinTreeAug X Y;\n\n_ fees:CurrencyCollection create:CurrencyCollection = ShardFeeCreated;\n_ (HashmapAugE 96 ShardFeeCreated ShardFeeCreated) = ShardFees;\n\n_ config_addr:bits256 config:^(Hashmap 32 ^Cell) \n = ConfigParams;\n\nvalidator_info$_\n validator_list_hash_short:uint32 \n catchain_seqno:uint32\n nx_cc_updated:Bool\n= ValidatorInfo;\n\nvalidator_base_info$_\n validator_list_hash_short:uint32 \n catchain_seqno:uint32\n= ValidatorBaseInfo;\n\n_ key:Bool max_end_lt:uint64 = KeyMaxLt;\n_ key:Bool blk_ref:ExtBlkRef = KeyExtBlkRef;\n\n_ (HashmapAugE 32 KeyExtBlkRef KeyMaxLt) = OldMcBlocksInfo;\n\n\ncounters#_ last_updated:uint32 total:uint64 cnt2048:uint64 cnt65536:uint64 = Counters; \ncreator_info#4 mc_blocks:Counters shard_blocks:Counters = CreatorStats; \nblock_create_stats#17 counters:(HashmapE 256 CreatorStats) = BlockCreateStats;\nblock_create_stats_ext#34 counters:(HashmapAugE 256 CreatorStats uint32) = BlockCreateStats;\n\nmasterchain_state_extra#cc26\n shard_hashes:ShardHashes\n config:ConfigParams\n ^[ flags:(## 16) { flags <= 1 }\n validator_info:ValidatorInfo\n prev_blocks:OldMcBlocksInfo\n after_key_block:Bool\n last_key_block:(Maybe ExtBlkRef)\n block_create_stats:(flags . 0)?BlockCreateStats ]\n global_balance:CurrencyCollection\n= McStateExtra;\n\ned25519_pubkey#8e81278a pubkey:bits256 = SigPubKey; // 288 bits\ned25519_signature#5 R:bits256 s:bits256 = CryptoSignatureSimple; // 516 bits\n_ CryptoSignatureSimple = CryptoSignature;\nsig_pair$_ node_id_short:bits256 sign:CryptoSignature = CryptoSignaturePair; // 256+x ~ 772 bits\n\ncertificate#4 temp_key:SigPubKey valid_since:uint32 valid_until:uint32 = Certificate; // 356 bits\ncertificate_env#a419b7d certificate:Certificate = CertificateEnv; // 384 bits\nsigned_certificate$_ certificate:Certificate certificate_signature:CryptoSignature\n = SignedCertificate; // 356+516 = 872 bits\n// certificate_signature is the signature of CertificateEnv (with embedded certificate) with persistent key\nchained_signature#f signed_cert:^SignedCertificate temp_key_signature:CryptoSignatureSimple\n = CryptoSignature; // 4+(356+516)+516 = 520 bits+ref (1392 bits total)\n// temp_key_signature is the signature of whatever was originally intended to be signed with temp_key from certificate\n\nmasterchain_block_extra#cca5\n key_block:(## 1)\n shard_hashes:ShardHashes\n shard_fees:ShardFees\n ^[ prev_blk_signatures:(HashmapE 16 CryptoSignaturePair)\n recover_create_msg:(Maybe ^InMsg)\n mint_msg:(Maybe ^InMsg) ]\n config:key_block?ConfigParams\n= McBlockExtra;\n\n//\n// CONFIGURATION PARAMETERS\n//\n\nvalidator#53 public_key:SigPubKey weight:uint64 = ValidatorDescr;\nvalidator_addr#73 public_key:SigPubKey weight:uint64 adnl_addr:bits256 = ValidatorDescr;\nvalidators#11 utime_since:uint32 utime_until:uint32 \n total:(## 16) main:(## 16) { main <= total } { main >= 1 } \n list:(Hashmap 16 ValidatorDescr) = ValidatorSet;\nvalidators_ext#12 utime_since:uint32 utime_until:uint32 \n total:(## 16) main:(## 16) { main <= total } { main >= 1 } \n total_weight:uint64 list:(HashmapE 16 ValidatorDescr) = ValidatorSet;\n\n_ config_addr:bits256 = ConfigParam 0;\n_ elector_addr:bits256 = ConfigParam 1;\n_ minter_addr:bits256 = ConfigParam 2; // ConfigParam 0 is used if absent\n_ fee_collector_addr:bits256 = ConfigParam 3; // ConfigParam 1 is used if absent\n_ dns_root_addr:bits256 = ConfigParam 4; // root TON DNS resolver\n\nburning_config#01\n blackhole_addr:(Maybe bits256)\n fee_burn_num:# fee_burn_denom:# { fee_burn_num <= fee_burn_denom } { fee_burn_denom >= 1 } = BurningConfig;\n_ BurningConfig = ConfigParam 5;\n\n_ mint_new_price:Grams mint_add_price:Grams = ConfigParam 6;\n_ to_mint:ExtraCurrencyCollection = ConfigParam 7;\n\ncapabilities#c4 version:uint32 capabilities:uint64 = GlobalVersion;\n_ GlobalVersion = ConfigParam 8; // all zero if absent\n_ mandatory_params:(Hashmap 32 True) = ConfigParam 9;\n_ critical_params:(Hashmap 32 True) = ConfigParam 10;\n\ncfg_vote_cfg#36 min_tot_rounds:uint8 max_tot_rounds:uint8 min_wins:uint8 max_losses:uint8 min_store_sec:uint32 max_store_sec:uint32 bit_price:uint32 cell_price:uint32 = ConfigProposalSetup;\ncfg_vote_setup#91 normal_params:^ConfigProposalSetup critical_params:^ConfigProposalSetup = ConfigVotingSetup;\n_ ConfigVotingSetup = ConfigParam 11;\n\ncfg_proposal#f3 param_id:int32 param_value:(Maybe ^Cell) if_hash_equal:(Maybe uint256) \n = ConfigProposal;\ncfg_proposal_status#ce expires:uint32 proposal:^ConfigProposal is_critical:Bool\n voters:(HashmapE 16 True) remaining_weight:int64 validator_set_id:uint256 \n rounds_remaining:uint8 wins:uint8 losses:uint8 = ConfigProposalStatus;\n\nwfmt_basic#1 vm_version:int32 vm_mode:uint64 = WorkchainFormat 1;\nwfmt_ext#0 min_addr_len:(## 12) max_addr_len:(## 12) addr_len_step:(## 12)\n { min_addr_len >= 64 } { min_addr_len <= max_addr_len } \n { max_addr_len <= 1023 } { addr_len_step <= 1023 }\n workchain_type_id:(## 32) { workchain_type_id >= 1 }\n = WorkchainFormat 0;\n\nwc_split_merge_timings#0\n split_merge_delay:uint32 split_merge_interval:uint32\n min_split_merge_interval:uint32 max_split_merge_delay:uint32\n = WcSplitMergeTimings;\n\n//workchain#a5 enabled_since:uint32 min_split:(## 8) max_split:(## 8)\n// { min_split <= max_split } { max_split <= 60 }\n\nworkchain#a6 enabled_since:uint32 monitor_min_split:(## 8)\n min_split:(## 8) max_split:(## 8) { monitor_min_split <= min_split }\n basic:(## 1) active:Bool accept_msgs:Bool flags:(## 13) { flags = 0 }\n zerostate_root_hash:bits256 zerostate_file_hash:bits256\n version:uint32 format:(WorkchainFormat basic)\n = WorkchainDescr;\n\nworkchain_v2#a7 enabled_since:uint32 monitor_min_split:(## 8)\n min_split:(## 8) max_split:(## 8) { monitor_min_split <= min_split }\n basic:(## 1) active:Bool accept_msgs:Bool flags:(## 13) { flags = 0 }\n zerostate_root_hash:bits256 zerostate_file_hash:bits256\n version:uint32 format:(WorkchainFormat basic)\n split_merge_timings:WcSplitMergeTimings\n persistent_state_split_depth:(## 8) { persistent_state_split_depth <= 63 }\n = WorkchainDescr;\n\n_ workchains:(HashmapE 32 WorkchainDescr) = ConfigParam 12;\n\ncomplaint_prices#1a deposit:Grams bit_price:Grams cell_price:Grams = ComplaintPricing; \n_ ComplaintPricing = ConfigParam 13;\n\nblock_grams_created#6b masterchain_block_fee:Grams basechain_block_fee:Grams\n = BlockCreateFees;\n_ BlockCreateFees = ConfigParam 14;\n\n_ validators_elected_for:uint32 elections_start_before:uint32 \n elections_end_before:uint32 stake_held_for:uint32\n = ConfigParam 15;\n \n_ max_validators:(## 16) max_main_validators:(## 16) min_validators:(## 16) \n { max_validators >= max_main_validators } \n { max_main_validators >= min_validators } \n { min_validators >= 1 }\n = ConfigParam 16;\n\n_ min_stake:Grams max_stake:Grams min_total_stake:Grams max_stake_factor:uint32 = ConfigParam 17;\n\n_#cc utime_since:uint32 bit_price_ps:uint64 cell_price_ps:uint64 \n mc_bit_price_ps:uint64 mc_cell_price_ps:uint64 = StoragePrices;\n_ (Hashmap 32 StoragePrices) = ConfigParam 18;\n\n_ global_id:int32 = ConfigParam 19;\n\ngas_prices#dd gas_price:uint64 gas_limit:uint64 gas_credit:uint64 \n block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 \n = GasLimitsPrices;\n\ngas_prices_ext#de gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas_credit:uint64 \n block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 \n = GasLimitsPrices;\n\ngas_flat_pfx#d1 flat_gas_limit:uint64 flat_gas_price:uint64 other:GasLimitsPrices\n = GasLimitsPrices;\n\nconfig_mc_gas_prices#_ GasLimitsPrices = ConfigParam 20;\nconfig_gas_prices#_ GasLimitsPrices = ConfigParam 21;\n\nparam_limits#c3 underload:# soft_limit:# { underload <= soft_limit }\n hard_limit:# { soft_limit <= hard_limit } = ParamLimits;\nblock_limits#5d bytes:ParamLimits gas:ParamLimits lt_delta:ParamLimits\n = BlockLimits;\n \nconfig_mc_block_limits#_ BlockLimits = ConfigParam 22;\nconfig_block_limits#_ BlockLimits = ConfigParam 23;\n\n// msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms\n// ihr_fwd_fees = ceil((msg_fwd_fees * ihr_price_factor)/2^16) nanograms\n// bits in the root cell of a message are not included in msg.bits (lump_price pays for them)\nmsg_forward_prices#ea lump_price:uint64 bit_price:uint64 cell_price:uint64\n ihr_price_factor:uint32 first_frac:uint16 next_frac:uint16 = MsgForwardPrices;\n\n// used for messages to/from masterchain\nconfig_mc_fwd_prices#_ MsgForwardPrices = ConfigParam 24;\n// used for all other messages\nconfig_fwd_prices#_ MsgForwardPrices = ConfigParam 25;\n\ncatchain_config#c1 mc_catchain_lifetime:uint32 shard_catchain_lifetime:uint32 \n shard_validators_lifetime:uint32 shard_validators_num:uint32 = CatchainConfig;\n\ncatchain_config_new#c2 flags:(## 7) { flags = 0 } shuffle_mc_validators:Bool\n mc_catchain_lifetime:uint32 shard_catchain_lifetime:uint32\n shard_validators_lifetime:uint32 shard_validators_num:uint32 = CatchainConfig;\n\nconsensus_config#d6 round_candidates:# { round_candidates >= 1 }\n next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32\n fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32\n max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;\n\nconsensus_config_new#d7 flags:(## 7) { flags = 0 } new_catchain_ids:Bool\n round_candidates:(## 8) { round_candidates >= 1 }\n next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32\n fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32\n max_block_bytes:uint32 max_collated_bytes:uint32 = ConsensusConfig;\n\nconsensus_config_v3#d8 flags:(## 7) { flags = 0 } new_catchain_ids:Bool\n round_candidates:(## 8) { round_candidates >= 1 }\n next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32\n fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32\n max_block_bytes:uint32 max_collated_bytes:uint32 \n proto_version:uint16 = ConsensusConfig;\n\nconsensus_config_v4#d9 flags:(## 7) { flags = 0 } new_catchain_ids:Bool\n round_candidates:(## 8) { round_candidates >= 1 }\n next_candidate_delay_ms:uint32 consensus_timeout_ms:uint32\n fast_attempts:uint32 attempt_duration:uint32 catchain_max_deps:uint32\n max_block_bytes:uint32 max_collated_bytes:uint32\n proto_version:uint16 catchain_max_blocks_coeff:uint32 = ConsensusConfig;\n\n_ CatchainConfig = ConfigParam 28;\n_ ConsensusConfig = ConfigParam 29;\n\n_ fundamental_smc_addr:(HashmapE 256 True) = ConfigParam 31;\n_ prev_validators:ValidatorSet = ConfigParam 32;\n_ prev_temp_validators:ValidatorSet = ConfigParam 33;\n_ cur_validators:ValidatorSet = ConfigParam 34;\n_ cur_temp_validators:ValidatorSet = ConfigParam 35;\n_ next_validators:ValidatorSet = ConfigParam 36;\n_ next_temp_validators:ValidatorSet = ConfigParam 37;\n\nvalidator_temp_key#3 adnl_addr:bits256 temp_public_key:SigPubKey seqno:# valid_until:uint32 = ValidatorTempKey;\nsigned_temp_key#4 key:^ValidatorTempKey signature:CryptoSignature = ValidatorSignedTempKey;\n_ (HashmapE 256 ValidatorSignedTempKey) = ConfigParam 39;\n\nmisbehaviour_punishment_config_v1#01 \n default_flat_fine:Grams default_proportional_fine:uint32\n severity_flat_mult:uint16 severity_proportional_mult:uint16\n unpunishable_interval:uint16\n long_interval:uint16 long_flat_mult:uint16 long_proportional_mult:uint16\n medium_interval:uint16 medium_flat_mult:uint16 medium_proportional_mult:uint16\n = MisbehaviourPunishmentConfig;\n_ MisbehaviourPunishmentConfig = ConfigParam 40;\n\nsize_limits_config#01 max_msg_bits:uint32 max_msg_cells:uint32 max_library_cells:uint32 max_vm_data_depth:uint16\n max_ext_msg_size:uint32 max_ext_msg_depth:uint16 = SizeLimitsConfig;\nsize_limits_config_v2#02 max_msg_bits:uint32 max_msg_cells:uint32 max_library_cells:uint32 max_vm_data_depth:uint16\n max_ext_msg_size:uint32 max_ext_msg_depth:uint16 max_acc_state_cells:uint32 max_acc_state_bits:uint32\n max_acc_public_libraries:uint32 defer_out_queue_size_limit:uint32 max_msg_extra_currencies:uint32\n max_acc_fixed_prefix_length:uint8 = SizeLimitsConfig;\n_ SizeLimitsConfig = ConfigParam 43;\n\n// key is [ wc:int32 addr:uint256 ]\nsuspended_address_list#00 addresses:(HashmapE 288 Unit) suspended_until:uint32 = SuspendedAddressList;\n_ SuspendedAddressList = ConfigParam 44;\n\nprecompiled_smc#b0 gas_usage:uint64 = PrecompiledSmc;\nprecompiled_contracts_config#c0 list:(HashmapE 256 PrecompiledSmc) = PrecompiledContractsConfig;\n_ PrecompiledContractsConfig = ConfigParam 45;\n\noracle_bridge_params#_ bridge_address:bits256 oracle_mutlisig_address:bits256 oracles:(HashmapE 256 uint256) external_chain_address:bits256 = OracleBridgeParams;\n_ OracleBridgeParams = ConfigParam 71; // Ethereum bridge\n_ OracleBridgeParams = ConfigParam 72; // Binance Smart Chain bridge\n_ OracleBridgeParams = ConfigParam 73; // Polygon bridge\n\n// Note that chains in which bridge, minter and jetton-wallet operate are fixated\njetton_bridge_prices#_ bridge_burn_fee:Coins bridge_mint_fee:Coins\n wallet_min_tons_for_storage:Coins\n wallet_gas_consumption:Coins\n minter_min_tons_for_storage:Coins\n discover_gas_consumption:Coins = JettonBridgePrices;\n\njetton_bridge_params_v0#00 bridge_address:bits256 oracles_address:bits256 oracles:(HashmapE 256 uint256) state_flags:uint8 burn_bridge_fee:Coins = JettonBridgeParams;\njetton_bridge_params_v1#01 bridge_address:bits256 oracles_address:bits256 oracles:(HashmapE 256 uint256) state_flags:uint8 prices:^JettonBridgePrices external_chain_address:bits256 = JettonBridgeParams;\n\n_ JettonBridgeParams = ConfigParam 79; // ETH->TON token bridge\n_ JettonBridgeParams = ConfigParam 81; // BNB->TON token bridge\n_ JettonBridgeParams = ConfigParam 82; // Polygon->TON token bridge\n\n\n//\n// PROOFS\n//\nblock_signatures_pure#_ sig_count:uint32 sig_weight:uint64\n signatures:(HashmapE 16 CryptoSignaturePair) = BlockSignaturesPure;\nblock_signatures#11 validator_info:ValidatorBaseInfo pure_signatures:BlockSignaturesPure = BlockSignatures;\nblock_proof#c3 proof_for:BlockIdExt root:^Cell signatures:(Maybe ^BlockSignatures) = BlockProof;\n\nchain_empty$_ = ProofChain 0;\nchain_link$_ {n:#} root:^Cell prev:n?^(ProofChain n) = ProofChain (n + 1);\ntop_block_descr#d5 proof_for:BlockIdExt signatures:(Maybe ^BlockSignatures) \n len:(## 8) { len >= 1 } { len <= 8 } chain:(ProofChain len) = TopBlockDescr;\n\n//\n// COLLATED DATA\n//\ntop_block_descr_set#4ac789f3 collection:(HashmapE 96 ^TopBlockDescr) = TopBlockDescrSet;\n\n//\n// VALIDATOR MISBEHAVIOR COMPLAINTS\n//\nprod_info#34 utime:uint32 mc_blk_ref:ExtBlkRef state_proof:^(MERKLE_PROOF Block)\n prod_proof:^(MERKLE_PROOF ShardState) = ProducerInfo;\nno_blk_gen from_utime:uint32 prod_info:^ProducerInfo = ComplaintDescr;\nno_blk_gen_diff prod_info_old:^ProducerInfo prod_info_new:^ProducerInfo = ComplaintDescr;\nvalidator_complaint#bc validator_pubkey:bits256 description:^ComplaintDescr created_at:uint32 severity:uint8 reward_addr:uint256 paid:Grams suggested_fine:Grams suggested_fine_part:uint32 = ValidatorComplaint;\ncomplaint_status#2d complaint:^ValidatorComplaint voters:(HashmapE 16 True) vset_id:uint256 weight_remaining:int64 = ValidatorComplaintStatus;\n\n//\n// TVM REFLECTION\n//\nvm_stk_null#00 = VmStackValue;\nvm_stk_tinyint#01 value:int64 = VmStackValue;\nvm_stk_int#0201_ value:int257 = VmStackValue;\nvm_stk_nan#02ff = VmStackValue;\nvm_stk_cell#03 cell:^Cell = VmStackValue;\n_ cell:^Cell st_bits:(## 10) end_bits:(## 10) { st_bits <= end_bits }\n st_ref:(#<= 4) end_ref:(#<= 4) { st_ref <= end_ref } = VmCellSlice;\nvm_stk_slice#04 _:VmCellSlice = VmStackValue;\nvm_stk_builder#05 cell:^Cell = VmStackValue;\nvm_stk_cont#06 cont:VmCont = VmStackValue;\nvm_tupref_nil$_ = VmTupleRef 0;\nvm_tupref_single$_ entry:^VmStackValue = VmTupleRef 1;\nvm_tupref_any$_ {n:#} ref:^(VmTuple (n + 2)) = VmTupleRef (n + 2);\nvm_tuple_nil$_ = VmTuple 0;\nvm_tuple_tcons$_ {n:#} head:(VmTupleRef n) tail:^VmStackValue = VmTuple (n + 1);\nvm_stk_tuple#07 len:(## 16) data:(VmTuple len) = VmStackValue;\n\nvm_stack#_ depth:(## 24) stack:(VmStackList depth) = VmStack;\nvm_stk_cons#_ {n:#} rest:^(VmStackList n) tos:VmStackValue = VmStackList (n + 1);\nvm_stk_nil#_ = VmStackList 0;\n\n_ cregs:(HashmapE 4 VmStackValue) = VmSaveList;\ngas_limits#_ remaining:int64 _:^[ max_limit:int64 cur_limit:int64 credit:int64 ]\n = VmGasLimits;\n_ libraries:(HashmapE 256 ^Cell) = VmLibraries;\n\nvm_ctl_data$_ nargs:(Maybe uint13) stack:(Maybe VmStack) save:VmSaveList\ncp:(Maybe int16) = VmControlData;\nvmc_std$00 cdata:VmControlData code:VmCellSlice = VmCont;\nvmc_envelope$01 cdata:VmControlData next:^VmCont = VmCont;\nvmc_quit$1000 exit_code:int32 = VmCont;\nvmc_quit_exc$1001 = VmCont;\nvmc_repeat$10100 count:uint63 body:^VmCont after:^VmCont = VmCont; \nvmc_until$110000 body:^VmCont after:^VmCont = VmCont;\nvmc_again$110001 body:^VmCont = VmCont;\nvmc_while_cond$110010 cond:^VmCont body:^VmCont\nafter:^VmCont = VmCont;\nvmc_while_body$110011 cond:^VmCont body:^VmCont\nafter:^VmCont = VmCont;\nvmc_pushint$1111 value:int32 next:^VmCont = VmCont;\n\n//\n// DNS RECORDS\n//\n_ (HashmapE 256 ^DNSRecord) = DNS_RecordSet;\n\nchunk_ref$_ {n:#} ref:^(TextChunks (n + 1)) = TextChunkRef (n + 1);\nchunk_ref_empty$_ = TextChunkRef 0;\ntext_chunk$_ {n:#} len:(## 8) data:(bits (len * 8)) next:(TextChunkRef n) = TextChunks (n + 1);\ntext_chunk_empty$_ = TextChunks 0;\ntext$_ chunks:(## 8) rest:(TextChunks chunks) = Text;\ndns_text#1eda _:Text = DNSRecord;\n\ndns_next_resolver#ba93 resolver:MsgAddressInt = DNSRecord; // usually in record #-1\n\ndns_adnl_address#ad01 adnl_addr:bits256 flags:(## 8) { flags <= 1 }\n proto_list:flags . 0?ProtoList = DNSRecord; // often in record #2\nproto_list_nil$0 = ProtoList;\nproto_list_next$1 head:Protocol tail:ProtoList = ProtoList;\nproto_http#4854 = Protocol;\n\ndns_smc_address#9fd3 smc_addr:MsgAddressInt flags:(## 8) { flags <= 1 }\n cap_list:flags . 0?SmcCapList = DNSRecord; // often in record #1\ncap_list_nil$0 = SmcCapList;\ncap_list_next$1 head:SmcCapability tail:SmcCapList = SmcCapList;\ncap_method_seqno#5371 = SmcCapability;\ncap_method_pubkey#71f4 = SmcCapability;\ncap_is_wallet#2177 = SmcCapability;\ncap_name#ff name:Text = SmcCapability;\n\ndns_storage_address#7473 bag_id:bits256 = DNSRecord;\n\n//\n// PAYMENT CHANNELS\n//\n\nchan_config$_ init_timeout:uint32 close_timeout:uint32 a_key:bits256 b_key:bits256 \n a_addr:^MsgAddressInt b_addr:^MsgAddressInt channel_id:uint64 min_A_extra:Grams = ChanConfig;\n\nchan_state_init$000 signed_A:Bool signed_B:Bool min_A:Grams min_B:Grams expire_at:uint32 A:Grams B:Grams = ChanState;\nchan_state_close$001 signed_A:Bool signed_B:Bool promise_A:Grams promise_B:Grams expire_at:uint32 A:Grams B:Grams = ChanState;\nchan_state_payout$010 A:Grams B:Grams = ChanState;\n\nchan_promise$_ channel_id:uint64 promise_A:Grams promise_B:Grams = ChanPromise;\nchan_signed_promise#_ sig:(Maybe ^bits512) promise:ChanPromise = ChanSignedPromise;\n\nchan_msg_init#27317822 inc_A:Grams inc_B:Grams min_A:Grams min_B:Grams channel_id:uint64 = ChanMsg;\nchan_msg_close#f28ae183 extra_A:Grams extra_B:Grams promise:ChanSignedPromise = ChanMsg;\nchan_msg_timeout#43278a28 = ChanMsg;\nchan_msg_payout#37fe7810 = ChanMsg;\n\nchan_signed_msg$_ sig_A:(Maybe ^bits512) sig_B:(Maybe ^bits512) msg:ChanMsg = ChanSignedMsg;\n\nchan_op_cmd#912838d1 msg:ChanSignedMsg = ChanOp;\n\n\nchan_data$_ config:^ChanConfig state:^ChanState = ChanData;\n";