From 97b1ee88dfb4e0703f1de1fced76a4fb3af70bc0 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Tue, 25 Oct 2022 20:38:20 +0200 Subject: [PATCH 1/7] Dal/Scoru node: ignore subscription when downloading confirmed slots --- .../bin_sc_rollup_node/RPC_server.ml | 8 - src/proto_alpha/bin_sc_rollup_node/daemon.ml | 6 - .../bin_sc_rollup_node/dal_pages_request.ml | 5 +- .../bin_sc_rollup_node/dal_slots_tracker.ml | 89 ++---- .../bin_sc_rollup_node/dal_slots_tracker.mli | 15 +- .../dal_slots_tracker_event.ml | 5 +- src/proto_alpha/bin_sc_rollup_node/store.ml | 25 +- src/proto_alpha/bin_sc_rollup_node/store.mli | 10 +- .../lib_sc_rollup/sc_rollup_services.ml | 7 - tezt/lib_tezos/operation_core.ml | 13 +- tezt/lib_tezos/operation_core.mli | 5 - tezt/lib_tezos/sc_rollup_client.ml | 10 - tezt/lib_tezos/sc_rollup_client.mli | 5 - tezt/tests/dal.ml | 174 ++++------- ...ctionality (rollup_node_dal_subscript.out | 47 --- ...y layer node (rollup_node_applies_dal_.out | 274 +++++++++++++++++- ...y layer node (rollup_node_downloads_sl.out | 264 ++++++++++++++++- 17 files changed, 608 insertions(+), 354 deletions(-) delete mode 100644 tezt/tests/expected/dal.ml/Alpha- Testing data availability layer functionality (rollup_node_dal_subscript.out diff --git a/src/proto_alpha/bin_sc_rollup_node/RPC_server.ml b/src/proto_alpha/bin_sc_rollup_node/RPC_server.ml index 083fb1e79b31..9d54fac130ca 100644 --- a/src/proto_alpha/bin_sc_rollup_node/RPC_server.ml +++ b/src/proto_alpha/bin_sc_rollup_node/RPC_server.ml @@ -299,14 +299,6 @@ module Make (PVM : Pvm.S) = struct let*! status = PVM.get_status state in return (PVM.string_of_status status) - let () = - Block_directory.register0 - Sc_rollup_services.Global.Block.dal_slot_subscriptions - @@ fun (node_ctxt, block) () () -> - let open Lwt_result_syntax in - let*! subs = Store.Dal_slot_subscriptions.find node_ctxt.store block in - return subs - let () = Block_directory.register0 Sc_rollup_services.Global.Block.dal_slots @@ fun (node_ctxt, block) () () -> diff --git a/src/proto_alpha/bin_sc_rollup_node/daemon.ml b/src/proto_alpha/bin_sc_rollup_node/daemon.ml index bd4dccbdfbf2..642d32b5ddb4 100644 --- a/src/proto_alpha/bin_sc_rollup_node/daemon.ml +++ b/src/proto_alpha/bin_sc_rollup_node/daemon.ml @@ -79,12 +79,6 @@ module Make (PVM : Pvm.S) = struct tzfail (Sc_rollup_node_errors.Lost_game (loser, reason, slashed_amount)) | Dal_publish_slot_header {slot_header}, Dal_publish_slot_header_result _ -> let {Dal.Slot.Header.id = {index; _}; _} = slot_header in - (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3510 - We store slot headers for all slots. In practice, - it would be convenient to store only information about - headers of slots to which the rollup node is subscribed to. - We do not have the information about DAL slots subscribed to - at this time. *) let*! () = Store.Dal_slots_headers.add node_ctxt.store diff --git a/src/proto_alpha/bin_sc_rollup_node/dal_pages_request.ml b/src/proto_alpha/bin_sc_rollup_node/dal_pages_request.ml index d407108dbf94..be2878eb2219 100644 --- a/src/proto_alpha/bin_sc_rollup_node/dal_pages_request.ml +++ b/src/proto_alpha/bin_sc_rollup_node/dal_pages_request.ml @@ -29,10 +29,9 @@ open Alpha_context (** If a slot, published at some level L, is expected to be confirmed at level L+D then, once the confirmation level is over, the rollup node is supposed to: - Download and save the content of the slot's pages in the store, if the slot - is confirmed and the rollup is subscribed to it; + is confirmed; - Add entries [None] for the slot's pages in the store, if the slot - is not confirmed and the rollup is subscribed to it; - - Do nothing, if the rollup node is not subscribed to that slot. *) + is not confirmed. *) type error += Dal_slot_not_found_in_store of Dal.Slot.Header.id diff --git a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml index 994248da237b..13d15947fd07 100644 --- a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml +++ b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml @@ -45,25 +45,6 @@ let () = (function Cannot_read_block_metadata hash -> Some hash | _ -> None) (fun hash -> Cannot_read_block_metadata hash) -let get_slot_subscriptions cctxt head rollup = - let open Lwt_result_syntax in - let*? level = Environment.wrap_tzresult @@ Raw_level.of_int32 (snd head) in - Plugin.RPC.Sc_rollup.dal_slot_subscriptions - cctxt - (cctxt#chain, cctxt#block) - rollup - level - -(* [fetch_and_save_subscribed_slot_headers cctxt head rollup] fetches the slot - indices to which [rollup] is subscribed to at [head], and stores them. *) -let fetch_and_save_subscribed_slot_headers - Node_context.{cctxt; rollup_address; store; _} - Layer1.{level; hash = head_hash} = - let open Lwt_result_syntax in - let* res = get_slot_subscriptions cctxt (head_hash, level) rollup_address in - let*! () = Store.Dal_slot_subscriptions.add store head_hash res in - return_unit - let ancestor_hash ~number_of_levels {Node_context.genesis_info; l1_ctxt; _} head = let genesis_level = genesis_info.level in @@ -80,29 +61,21 @@ let ancestor_hash ~number_of_levels {Node_context.genesis_info; l1_ctxt; _} head go number_of_levels head (* Values of type `confirmations_info` are used to catalog the status of slots - published in a given block hash. These values record whether the rollup was - subscribed to a given slot index when the block was published, and whether + published in a given block hash. These values record whether the slot has been confirmed after the endorsement_lag has passed. *) type confirmations_info = { (* The hash of the block in which the slots have been published. *) published_block_hash : Block_hash.t; - (* The slot indexes to which the rollup is subscribed to in - the block with hash `published_block_hash. *) - subscribed_slots_indexes : Bitset.t; (* The indexes of slots that have beenp published in block with hash `published_block_hash`, and have later been confirmed. *) confirmed_slots_indexes : Bitset.t; } -(** [slots_info node_ctxt head] gathers information about the slot subscriptions - and confirmations of slot indexes. It reads the slot indexes that have been - declared available from [head]'s block receipt, and the list of slot index - subscriptions from the block to which the confirmations refer to. - It then returns the hash of the block where the slot headers have been - published, the list of slots indexes to which the rollup was - subscribed to in that block, and the list of slot indexes that have - been confirmed for that block. There is no relationship between - the confirmed and subscribed slot indexes returned by this function. *) +(** [slots_info node_ctxt head] gathers information about the slot confirmations + of slot indexes. It reads the slot indexes that have been declared available + from [head]'s block receipt. It then returns the hash of + the block where the slot headers have been published and the list of + slot indexes that have been confirmed for that block. *) let slots_info node_ctxt (Layer1.{hash; _} as head) = (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3722 The case for protocol migrations when the lag constant has @@ -118,15 +91,14 @@ let slots_info node_ctxt (Layer1.{hash; _} as head) = in (* we are downloading endorsemented for slots at level [level], so we need to download the data at level [level - lag]. - Therefore, we need to check only the slots to which the rollup node - was subscribed to at level `level - lag` *) let* published_slots_block_hash = ancestor_hash ~number_of_levels:lag node_ctxt head in match published_slots_block_hash with | None -> - (* Less then lag levels have passed from the rollup origination, and confirmed slots should not be applied *) + (* Less then lag levels have passed from the rollup origination, and + confirmed slots should not be applied *) return None | Some published_block_hash -> let* {metadata; _} = @@ -145,15 +117,6 @@ let slots_info node_ctxt (Layer1.{hash; _} as head) = ~default:Dal.Endorsement.empty metadata.protocol_data.dal_slot_availability in - let*! subscribed_slots_indexes_list = - Store.Dal_slot_subscriptions.get node_ctxt.store published_block_hash - in - let*? subscribed_slots_indexes = - Environment.wrap_tzresult - (subscribed_slots_indexes_list - |> List.map Dal.Slot_index.to_int - |> Bitset.from_list) - in let*! published_slots_indexes = Store.Dal_slots_headers.list_secondary_keys node_ctxt.store @@ -170,13 +133,7 @@ let slots_info node_ctxt (Layer1.{hash; _} as head) = |> List.map Dal.Slot_index.to_int |> Bitset.from_list) in - return - @@ Some - { - published_block_hash; - subscribed_slots_indexes; - confirmed_slots_indexes; - } + return @@ Some {published_block_hash; confirmed_slots_indexes} (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3884 avoid going back and forth between bitsets and lists of slot indexes. *) @@ -221,7 +178,7 @@ let save_confirmed_slot store current_block_hash slot_index pages = let download_and_save_slots {Node_context.store; dal_cctxt; protocol_constants; _} ~current_block_hash - {published_block_hash; subscribed_slots_indexes; confirmed_slots_indexes} = + {published_block_hash; confirmed_slots_indexes} = let open Lwt_result_syntax in let*? all_slots = Misc.(0 --> (protocol_constants.parametric.dal.number_of_slots - 1)) @@ -232,10 +189,9 @@ let download_and_save_slots @@ to_slot_index_list protocol_constants.parametric @@ Bitset.diff all_slots confirmed_slots_indexes in - let*? subscribed_and_confirmed = + let*? confirmed = Environment.wrap_tzresult - @@ to_slot_index_list protocol_constants.parametric - @@ Bitset.inter subscribed_slots_indexes confirmed_slots_indexes + @@ to_slot_index_list protocol_constants.parametric confirmed_slots_indexes in (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/2766. As part of the clean rollup storage workflow, we should make sure that @@ -250,7 +206,7 @@ let download_and_save_slots not_confirmed in let* () = - subscribed_and_confirmed + confirmed |> List.iter_ep (fun s_slot -> (* slot_header is missing but the slot with index s_slot has been confirmed. This scenario should not be possible. *) @@ -269,13 +225,13 @@ let download_and_save_slots ~primary_key:published_block_hash ~secondary_key:s_slot in + (* The slot with index s_slot is confirmed. We can + proceed retrieving it from the dal node and save it + in the store. *) let* pages = Dal_node_client.get_slot_pages dal_cctxt commitment in let*! () = save_confirmed_slot store current_block_hash s_slot pages in - (* The slot with index s_slot is subscribed to and endorsed, - we can proceed retrieving it from the dal node and save it - in the store. *) let*! () = Dal_slots_tracker_event.slot_has_been_confirmed s_slot @@ -287,9 +243,9 @@ let download_and_save_slots return_unit module Confirmed_slots_history = struct - (** [confirmed_slots_with_headers node_ctxt confirmations_info] returns - the headers of confirmed (but not necessarily subscribed to) slot indexes - for the block with hash [confirmations_info.published_block_hash]. *) + (** [confirmed_slots_with_headers node_ctxt confirmations_info] returns the + headers of confirmed slot indexes for the block with hash + [confirmations_info.published_block_hash]. *) let confirmed_slots_with_headers node_ctxt {published_block_hash; confirmed_slots_indexes; _} = let open Lwt_result_syntax in @@ -428,17 +384,10 @@ end let process_head node_ctxt (Layer1.{hash = head_hash; _} as head) = let open Lwt_result_syntax in - let* () = fetch_and_save_subscribed_slot_headers node_ctxt head in let* confirmation_info = slots_info node_ctxt head in match confirmation_info with | None -> return_unit | Some confirmation_info -> - (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3867. - Pre-fetch the slots to which the rollup node is subscribed to. - Note that subscriptions are not used anymore to determine the slot pages - that will be applied in the PVM. However, we currently use them to - determine the slot indexes that will be pre-fetched by the rollup node. - *) let* () = download_and_save_slots ~current_block_hash:head_hash diff --git a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.mli b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.mli index e63149169211..0207b1cafe49 100644 --- a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.mli +++ b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.mli @@ -23,21 +23,18 @@ (* *) (*****************************************************************************) -(** The rollup node keeps the list of dal slots to which the rollup is - subscribed to for each block it needs to process. This is to determine - whether the inbox for a given block will need to be retrieved from the - block operations, or from the data availability layer after lag levels - have passed and the slot for the block has been declared available. +(** The rollup node keeps the list of dal slots for each block it needs to + process. This is to determine whether the inbox for a given block will need + to be retrieved from the block operations, or from the data availability + layer after lag levels have passed and the slot for the block has been + declared available. - The state of subscribed slots per block is persistent. -*) + The state of slots per block is persistent. *) type error += Cannot_read_block_metadata of Block_hash.t (** [process_head node_ctxt head] performs the following operations: {ul - {li it fetches the slot indices to which the rollup is subscribed to, - and stores them in [Store.Dal_slot_subbscriptions] } {li it reads the endorsements for headers published endorsement_lag levels preceding [head] from the block metadata, determines which ones the rollup node will download, and stores the results in diff --git a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker_event.ml b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker_event.ml index c06c8afd1309..84ed4506c47f 100644 --- a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker_event.ml +++ b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker_event.ml @@ -37,9 +37,8 @@ module Simple = struct ~name:"dal_confirmed_slot" ~msg: "Slot header for index {slot_index} was published at block \ - {published_hash}. The rollup was subscribed to the slot index and the \ - slot header has been confirmed at {confirmed_hash}. The slot contents \ - will be downloaded." + {published_hash}. The slot header has been confirmed at \ + {confirmed_hash}. The slot contents will be downloaded." ~level:Notice ("slot_index", Dal.Slot_index.encoding) ("published_hash", Block_hash.encoding) diff --git a/src/proto_alpha/bin_sc_rollup_node/store.ml b/src/proto_alpha/bin_sc_rollup_node/store.ml index 105f69cfde38..29803d80f438 100644 --- a/src/proto_alpha/bin_sc_rollup_node/store.ml +++ b/src/proto_alpha/bin_sc_rollup_node/store.ml @@ -315,29 +315,6 @@ module Commitments_published_at_level = let encoding = Raw_level.encoding end) -(* Slot subscriptions per block hash, saved as a list of - `Dal.Slot_index.t`, which is a bounded integer between `0` and `255` - included. *) -module Dal_slot_subscriptions = - Make_append_only_map - (struct - let path = ["dal"; "slot_subscriptions"] - - let keep_last_n_entries_in_memory = None - end) - (struct - type key = Block_hash.t - - let to_path_representation = Block_hash.to_b58check - end) - (struct - type value = Dal.Slot_index.t list - - let name = "slot_indexes" - - let encoding = Data_encoding.list Dal.Slot_index.encoding - end) - module Contexts = Make_append_only_map (struct @@ -395,7 +372,7 @@ module Dal_slot_pages = end) (** stores slots whose data have been considered and pages stored to disk (if - they are confirmed and the rollup node subscribed to them). *) + they are confirmed). *) module Dal_processed_slots = Make_nested_map (struct diff --git a/src/proto_alpha/bin_sc_rollup_node/store.mli b/src/proto_alpha/bin_sc_rollup_node/store.mli index 643f86fbfc2c..6a12355c1d5e 100644 --- a/src/proto_alpha/bin_sc_rollup_node/store.mli +++ b/src/proto_alpha/bin_sc_rollup_node/store.mli @@ -148,14 +148,6 @@ module Commitments_published_at_level : and type value = Raw_level.t and type store = t -(** Storage containing the a [Block_hash.t]-indexed map whose values are - the slots to which the rollup was subscribed w.r.t. a block hash. *) -module Dal_slot_subscriptions : - Store_sigs.Map - with type key = Block_hash.t - and type value = Dal.Slot_index.t list - and type store = t - (** Storage containing the hashes of contexts retrieved from the L1 node. *) module Contexts : Store_sigs.Map @@ -206,7 +198,7 @@ module Dal_slot_pages : this storage module have type `[`Confirmed | `Unconfirmed]`, depending on whether the content of the slot has been confirmed or not. If an entry is not present for a [(block_hash, slot_index)], this either means that it's - not processed yet, or that the rollup node didn't subscribe to that slot. + not processed yet. *) module Dal_processed_slots : Store_sigs.Nested_map diff --git a/src/proto_alpha/lib_sc_rollup/sc_rollup_services.ml b/src/proto_alpha/lib_sc_rollup/sc_rollup_services.ml index c0be4f88bcc4..0d9a2990e511 100644 --- a/src/proto_alpha/lib_sc_rollup/sc_rollup_services.ml +++ b/src/proto_alpha/lib_sc_rollup/sc_rollup_services.ml @@ -288,13 +288,6 @@ module Global = struct ~output:Data_encoding.(list Sc_rollup.output_encoding) (path / "outbox") - let dal_slot_subscriptions = - RPC_service.get_service - ~description:"Data availability layer slot subscriptions at block" - ~query:RPC_query.empty - ~output:Data_encoding.(option @@ list Dal.Slot_index.encoding) - (path / "dal" / "slot_subscriptions") - let dal_slots = RPC_service.get_service ~description:"Availability slots for a given block" diff --git a/tezt/lib_tezos/operation_core.ml b/tezt/lib_tezos/operation_core.ml index 57e152da0b1e..5f5bfe9ea6fb 100644 --- a/tezt/lib_tezos/operation_core.ml +++ b/tezt/lib_tezos/operation_core.ml @@ -344,7 +344,6 @@ module Manager = struct index : int; commitment : Tezos_crypto_dal.Cryptobox.commitment; } - | Sc_rollup_dal_slot_subscribe of {rollup : string; slot_index : int} | Delegation of {delegate : Account.key} | Sc_rollup_refute of { (* See details in {!Operation_repr} module. *) @@ -365,9 +364,6 @@ module Manager = struct let dal_publish_slot_header ~level ~index ~commitment = Dal_publish_slot_header {level; index; commitment} - let sc_rollup_dal_slot_subscribe ~rollup ~slot_index = - Sc_rollup_dal_slot_subscribe {rollup; slot_index} - let delegation ?(delegate = Constant.bootstrap2) () = Delegation {delegate} let sc_rollup_refute ?refutation ~sc_rollup ~opponent () = @@ -414,12 +410,6 @@ module Manager = struct ("kind", `String "dal_publish_slot_header"); ("slot_header", slot_header); ] - | Sc_rollup_dal_slot_subscribe {rollup; slot_index} -> - [ - ("kind", `String "sc_rollup_dal_slot_subscribe"); - ("rollup", `String rollup); - ("slot_index", json_of_int slot_index); - ] | Delegation {delegate} -> [("kind", `String "delegation"); ("delegate", json_of_account delegate)] | Sc_rollup_refute {sc_rollup; opponent; refutation} -> @@ -478,8 +468,7 @@ module Manager = struct let gas_limit = Option.value gas_limit ~default:1_040 in let storage_limit = Option.value storage_limit ~default:257 in {source; counter; fee; gas_limit; storage_limit; payload} - | Reveal _ | Dal_publish_slot_header _ | Delegation _ - | Sc_rollup_dal_slot_subscribe _ -> + | Reveal _ | Dal_publish_slot_header _ | Delegation _ -> let fee = Option.value fee ~default:1_450 in let gas_limit = Option.value gas_limit ~default:1_490 in let storage_limit = Option.value storage_limit ~default:0 in diff --git a/tezt/lib_tezos/operation_core.mli b/tezt/lib_tezos/operation_core.mli index 39fdcec51a6c..97369b565f65 100644 --- a/tezt/lib_tezos/operation_core.mli +++ b/tezt/lib_tezos/operation_core.mli @@ -284,11 +284,6 @@ module Manager : sig commitment:Tezos_crypto_dal.Cryptobox.commitment -> payload - (** [sc_rollup_dal_slot_subscribe ~rollup ~slot_index] builds an - operation for the sc rollup [rollup] to subscribe to the data - availability layer slot with index [slot_index]. *) - val sc_rollup_dal_slot_subscribe : rollup:string -> slot_index:int -> payload - (** [delegation ?(delegate=Constant.bootstrap2) ()] builds a delegation operation. *) val delegation : ?delegate:Account.key -> unit -> payload diff --git a/tezt/lib_tezos/sc_rollup_client.ml b/tezt/lib_tezos/sc_rollup_client.ml index fef422f4c35b..415284b0dc14 100644 --- a/tezt/lib_tezos/sc_rollup_client.ml +++ b/tezt/lib_tezos/sc_rollup_client.ml @@ -220,16 +220,6 @@ let last_published_commitment ?hooks sc_client = let+ json = rpc_get ?hooks sc_client ["local"; "last_published_commitment"] in commitment_with_hash_and_level_from_json json -let dal_slot_subscriptions ?hooks ?(block = "head") sc_client = - let open Lwt.Syntax in - let+ json = - rpc_get - ?hooks - sc_client - ["global"; "block"; block; "dal"; "slot_subscriptions"] - in - JSON.as_list json |> List.map JSON.as_int - let dal_slot_headers ?hooks ?(block = "head") sc_client = let open Lwt.Syntax in let+ json = diff --git a/tezt/lib_tezos/sc_rollup_client.mli b/tezt/lib_tezos/sc_rollup_client.mli index bef9b5fcd72b..467a9dbaf6a1 100644 --- a/tezt/lib_tezos/sc_rollup_client.mli +++ b/tezt/lib_tezos/sc_rollup_client.mli @@ -132,11 +132,6 @@ with its hash and level when the commitment was first published. *) val last_published_commitment : ?hooks:Process.hooks -> t -> (string * commitment * int option) option Lwt.t -(** [dal_slot_subscriptions ?block client] gets the slots to which the rollup - node is subscribed to, for the [block] (default ["head"]). *) -val dal_slot_subscriptions : - ?hooks:Process.hooks -> ?block:string -> t -> int list Lwt.t - (** [dal_slot_headers ?block client] returns the dal slot headers of the [block] (default ["head"]). *) val dal_slot_headers : diff --git a/tezt/tests/dal.ml b/tezt/tests/dal.ml index 957759d7cc23..474c85042ccc 100644 --- a/tezt/tests/dal.ml +++ b/tezt/tests/dal.ml @@ -185,20 +185,6 @@ let test_dal_scenario ?dal_enable variant = description = "Testing data availability layer functionality "; } -let subscribe_to_dal_slot client ~sc_rollup_address ~slot_index = - let* op_hash = - Operation.Manager.( - inject - ~force:true - [ - make - @@ sc_rollup_dal_slot_subscribe ~rollup:sc_rollup_address ~slot_index; - ] - client) - in - let* () = Client.bake_for_and_wait client in - return op_hash - let update_neighbors dal_node neighbors = let neighbors = `A @@ -220,7 +206,7 @@ let wait_for_stored_slot dal_node slot_header = if JSON.(e |-> "slot_header" |> as_string) = slot_header then Some () else None) -let test_feature_flag _protocol _sc_rollup_node sc_rollup_address node client = +let test_feature_flag _protocol _sc_rollup_node _sc_rollup_address node client = (* This test ensures the feature flag works: - 1. It checks the feature flag is not enabled by default @@ -264,11 +250,8 @@ let test_feature_flag _protocol _sc_rollup_node sc_rollup_address node client = [make @@ dal_publish_slot_header ~index:0 ~level:1 ~commitment] client) in - let* (`OpHash oph3) = - subscribe_to_dal_slot client ~sc_rollup_address ~slot_index:0 - in let* mempool = Mempool.get_mempool client in - let expected_mempool = Mempool.{empty with refused = [oph1; oph2; oph3]} in + let expected_mempool = Mempool.{empty with refused = [oph1; oph2]} in Check.( (mempool = expected_mempool) Mempool.classified_typ @@ -496,61 +479,6 @@ let test_slot_management_logic = ~error_msg:"Expected slot 1 to be available") ; check_dal_raw_context node -(* Tests for integration between Dal and Scoru *) -let rollup_node_subscribes_to_dal_slots _protocol sc_rollup_node - sc_rollup_address _node client = - (* Steps in this integration test: - - 1. Run rollup node for an originated rollup - 2. Fetch the list of subscribed slots, determine that it's empty - 3. Execute a client command to subscribe the rollup to dal slot 0, bake one level - 4. Fetch the list of subscribed slots, determine that it contains slot 0 - 5. Execute a client command to subscribe the rollup to dal slot 1, bake one level - 6. Fetch the list of subscribed slots, determine that it contains slots 0 and 1 - *) - let* genesis_info = - RPC.Client.call ~hooks client - @@ RPC.get_chain_block_context_sc_rollup_genesis_info sc_rollup_address - in - let init_level = JSON.(genesis_info |-> "level" |> as_int) in - let* () = Sc_rollup_node.run sc_rollup_node in - let sc_rollup_client = Sc_rollup_client.create sc_rollup_node in - let* level = Sc_rollup_node.wait_for_level sc_rollup_node init_level in - Check.(level = init_level) - Check.int - ~error_msg:"Current level has moved past origination level (%L = %R)" ; - let* subscribed_slots = - Sc_rollup_client.dal_slot_subscriptions ~hooks sc_rollup_client - in - Check.(subscribed_slots = []) - (Check.list Check.int) - ~error_msg:"Unexpected list of slot subscriptions (%L = %R)" ; - let* (`OpHash _) = - subscribe_to_dal_slot client ~sc_rollup_address ~slot_index:0 - in - let* first_subscription_level = - Sc_rollup_node.wait_for_level sc_rollup_node (init_level + 1) - in - let* subscribed_slots = - Sc_rollup_client.dal_slot_subscriptions ~hooks sc_rollup_client - in - Check.(subscribed_slots = [0]) - (Check.list Check.int) - ~error_msg:"Unexpected list of slot subscriptions (%L = %R)" ; - let* (`OpHash _) = - subscribe_to_dal_slot client ~sc_rollup_address ~slot_index:1 - in - let* _second_subscription_level = - Sc_rollup_node.wait_for_level sc_rollup_node (first_subscription_level + 1) - in - let* subscribed_slots = - Sc_rollup_client.dal_slot_subscriptions ~hooks sc_rollup_client - in - Check.(subscribed_slots = [0; 1]) - (Check.list Check.int) - ~error_msg:"Unexpected list of slot subscriptions (%L = %R)" ; - return () - let init_dal_node protocol = let* node, client = let* parameter_file = Rollup.Dal.Parameters.parameter_file protocol in @@ -764,13 +692,13 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node 0. Run dal node 1. Send three slots to dal node and obtain corresponding headers 2. Run rollup node for an originated rollup - 3. Subscribe rollup node to slots 0 and 1 + 3. (Rollup node is implicitely subscribed to all slots) 4. Publish the three slot headers for slots 0, 1, 2 5. Check that the rollup node fetched the slot headers from L1 6. After lag levels, endorse only slots 1 and 2 7. Wait for the rollup node to download the slots - 8. Verify that rollup node has downloaded slot 1, slot 0 is - unconfirmed, and slot 2 has not been downloaded + 8. Verify that rollup node has downloaded slots 1 and 2. Slot 0 is + unconfirmed. *) (* 0. run dl node. *) @@ -795,25 +723,17 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node @@ RPC.get_chain_block_context_sc_rollup_genesis_info sc_rollup_address in let init_level = JSON.(genesis_info |-> "level" |> as_int) in + let* () = Sc_rollup_node.run sc_rollup_node in let sc_rollup_client = Sc_rollup_client.create sc_rollup_node in let* level = Sc_rollup_node.wait_for_level sc_rollup_node init_level in + Check.(level = init_level) Check.int ~error_msg:"Current level has moved past origination level (%L = %R)" ; - let* (`OpHash _) = - subscribe_to_dal_slot client ~sc_rollup_address ~slot_index:0 - in - (* 3. Subscribe rollup node to slots 0 and 1. *) - let* first_subscription_level = - Sc_rollup_node.wait_for_level sc_rollup_node (init_level + 1) - in - let* (`OpHash _) = - subscribe_to_dal_slot client ~sc_rollup_address ~slot_index:1 - in - let* second_subscription_level = - Sc_rollup_node.wait_for_level sc_rollup_node (first_subscription_level + 1) - in + + (* 3. (Rollup node is implicitely subscribed to all slots) *) + (* 4. Publish the three slot headers for slots with indexes 0, 1 and 2. *) let* _op_hash = publish_slot_header @@ -842,7 +762,7 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node (* 5. Check that the slot_headers are fetched by the rollup node. *) let* () = Client.bake_for_and_wait client in let* slots_published_level = - Sc_rollup_node.wait_for_level sc_rollup_node (second_subscription_level + 1) + Sc_rollup_node.wait_for_level sc_rollup_node (init_level + 1) in let* slots_headers = Sc_rollup_client.dal_slot_headers ~hooks sc_rollup_client @@ -884,9 +804,9 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node let* downloaded_confirmed_slots = Sc_rollup_client.dal_downloaded_confirmed_slot_pages ~hooks sc_rollup_client in - (* 8. Verify that rollup node has downloaded slot 1, slot 0 is - unconfirmed, and slot 2 has not been downloaded *) - let expected_number_of_downloaded_or_unconfirmed_slots = 1 in + (* 8. Verify that rollup node has downloaded slots 1 and 2. Slot 0 is + unconfirmed. *) + let expected_number_of_downloaded_or_unconfirmed_slots = 2 in Check.( List.length downloaded_confirmed_slots = expected_number_of_downloaded_or_unconfirmed_slots) @@ -894,17 +814,27 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node ~error_msg: "Unexpected number of slots that have been either downloaded or \ unconfirmed (%L = %R)" ; - let confirmed_slot_index, confirmed_slot_contents = - List.nth downloaded_confirmed_slots 0 - in - Check.(confirmed_slot_index = 1) - Check.int - ~error_msg:"Index of confirmed slot is not as expected (%L = %R)" ; - let relevant_slot = List.nth confirmed_slot_contents 0 in - let message = String.sub relevant_slot 0 (String.length slot_contents_1) in - Check.(message = slot_contents_1) - Check.string - ~error_msg:"unexpected message in slot (%L = %R)" ; + let submitted_slots_contents = + [slot_contents_0; slot_contents_1; slot_contents_2] + in + List.iter + (fun i -> + let index = i + 1 in + let confirmed_slot_index, confirmed_slot_contents = + List.nth downloaded_confirmed_slots i + in + let relevant_page = List.nth confirmed_slot_contents 0 in + let confirmed_slot_content = List.nth submitted_slots_contents index in + let message = + String.sub relevant_page 0 (String.length confirmed_slot_content) + in + Check.(confirmed_slot_index = index) + Check.int + ~error_msg:"Index of confirmed slot is not as expected (%L = %R)" ; + Check.(message = confirmed_slot_content) + Check.string + ~error_msg:"unexpected message in slot (%L = %R)") + [0; 1] ; match expand_test with | None -> return () | Some f -> f client sc_rollup_address sc_rollup_node @@ -929,35 +859,34 @@ let rollup_node_interprets_dal_pages client sc_rollup sc_rollup_node = - the page 0 of slot 0 contains 10, - the page 0 of slot 1 contains 200, - the page 0 of slot 2 contains 400. - The rollup subscribed to slots 0 and 1, but only slot 1 is confirmed. - Below, we expect to have value = 302. *) + Only slot 1 is confirmed. Below, we expect to have value = 302. *) let expected_value = 302 in (* The code should be adapted if the current level changes. *) - assert (level = 6) ; + assert (level = 4) ; let* () = send_messages client [ " 99 3 "; (* Total sum is now 99 + 3 = 102 *) - " dal:5:1:0 "; + " dal:3:1:0 "; (* Page 0 of Slot 1 contains 200, total sum is 302. *) - " dal:5:1:1 "; - " dal:5:0:0 "; + " dal:3:1:1 "; + " dal:3:0:0 "; (* Slot 0 is not confirmed, total sum doesn't change. *) - " dal:5:0:2 "; + " dal:3:0:2 "; (* Page 2 of Slot 0 empty, total sum unchanged. *) (* Page 1 of Slot 1 is empty, total sum unchanged. *) - " dal:4:1:0 "; + " dal:2:1:0 "; (* It's too late to import a page published at level 5. *) - " dal:6:1:0 "; + " dal:5:1:0 "; (* It's too early to import a page published at level 7. *) - " dal:5:10000:0 "; - " dal:5:0:100000 "; - " dal:5:-10000:0 "; - " dal:5:0:-100000 "; - " dal:5:expecting_integer:0 "; - " dal:5:0:expecting_integer "; + " dal:3:10000:0 "; + " dal:3:0:100000 "; + " dal:3:-10000:0 "; + " dal:3:0:-100000 "; + " dal:3:expecting_integer:0 "; + " dal:3:0:expecting_integer "; (* The 6 pages requests above are ignored by the PVM because slot/page ID is out of bounds or illformed. *) " dal:1002147483647:1:1 " @@ -990,11 +919,6 @@ let rollup_node_interprets_dal_pages client sc_rollup sc_rollup_node = let register ~protocols = test_dal_scenario "feature_flag_is_disabled" test_feature_flag protocols ; - test_dal_scenario - ~dal_enable:true - "rollup_node_dal_subscriptions" - rollup_node_subscribes_to_dal_slots - protocols ; test_slot_management_logic protocols ; test_dal_node_slot_management protocols ; test_dal_node_slots_headers_tracking protocols ; diff --git a/tezt/tests/expected/dal.ml/Alpha- Testing data availability layer functionality (rollup_node_dal_subscript.out b/tezt/tests/expected/dal.ml/Alpha- Testing data availability layer functionality (rollup_node_dal_subscript.out deleted file mode 100644 index 43194a77da0d..000000000000 --- a/tezt/tests/expected/dal.ml/Alpha- Testing data availability layer functionality (rollup_node_dal_subscript.out +++ /dev/null @@ -1,47 +0,0 @@ - -./octez-client --wait none originate sc rollup from '[PUBLIC_KEY_HASH]' of kind arith of type unit booting with --burn-cap 9999999 -Node is bootstrapped. -Estimated gas: 2909.925 units (will add 100 for safety) -Estimated storage: 6524 bytes added (will add 20 for safety) -Operation successfully injected in the node. -Operation hash is '[OPERATION_HASH]' -NOT waiting for the operation to be included. -Use command - octez-client wait for [OPERATION_HASH] to be included --confirmations 1 --branch [BLOCK_HASH] -and/or an external block explorer to make sure that it has been included. -This sequence of operations was run: - Manager signed operations: - From: [PUBLIC_KEY_HASH] - Fee to the baker: ꜩ0.000649 - Expected counter: 1 - Gas limit: 3010 - Storage limit: 6544 bytes - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ0.000649 - payload fees(the block proposer) ....... +ꜩ0.000649 - Smart contract rollup origination: - Kind: arith - Parameter type: unit - Boot sector Blake2B hash: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8' - This smart contract rollup origination was successfully applied - Consumed gas: 2909.925 - Storage size: 6524 bytes - Address: [SC_ROLLUP_HASH] - Genesis commitment hash: [SC_ROLLUP_COMMITMENT_HASH] - Balance updates: - [PUBLIC_KEY_HASH] ... -ꜩ1.631 - storage fees ........................... +ꜩ1.631 - - -./octez-client rpc get '/chains/main/blocks/head/context/sc_rollup/[SC_ROLLUP_HASH]/genesis_info' -{ "level": 2, - "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } - -./octez-sc-rollup-client-alpha rpc get /global/block/head/dal/slot_subscriptions -[] - -./octez-sc-rollup-client-alpha rpc get /global/block/head/dal/slot_subscriptions -[ 0 ] - -./octez-sc-rollup-client-alpha rpc get /global/block/head/dal/slot_subscriptions -[ 0, 1 ] diff --git a/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_applies_dal_.out b/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_applies_dal_.out index 9e52eac9c918..664bdc9473e0 100644 --- a/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_applies_dal_.out +++ b/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_applies_dal_.out @@ -38,13 +38,13 @@ This sequence of operations was run: "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } ./octez-sc-rollup-client-alpha rpc get /global/block/head/dal/slot_headers -[ { "level": 4, "index": 0, +[ { "level": 2, "index": 0, "commitment": "sh23Xtg7DY2qvSKgM1TiQDLH4cGZ2tHQwiQ5usHYdBUMzkirZUEVkSKoBDvjQePseeKFnQDGc9" }, - { "level": 4, "index": 1, + { "level": 2, "index": 1, "commitment": "[DAL_SLOT_HEADER]" }, - { "level": 4, "index": 2, + { "level": 2, "index": 2, "commitment": "sh237VRQLZqf8Uno4hjiiJh8RJxuwhPF4xWnPq2VKuC2ZbwVp3w9nw36iGfLHzpQrbopWx8GFq" } ] @@ -306,13 +306,271 @@ This sequence of operations was run: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ] }, + { "index": 2, + "contents": + [ "2034303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ] } ] ./octez-client rpc get '/chains/main/blocks/head/context/sc_rollup/[SC_ROLLUP_HASH]/genesis_info' { "level": 2, "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } -./octez-client --wait none send sc rollup message '[" 99 3 "," dal:5:1:0 "," dal:5:1:1 "," dal:5:0:0 "," dal:5:0:2 "," dal:4:1:0 "," dal:6:1:0 "," dal:5:10000:0 "," dal:5:0:100000 "," dal:5:-10000:0 "," dal:5:0:-100000 "," dal:5:expecting_integer:0 "," dal:5:0:expecting_integer "," dal:1002147483647:1:1 "," + + value"]' from bootstrap2 +./octez-client --wait none send sc rollup message '[" 99 3 "," dal:3:1:0 "," dal:3:1:1 "," dal:3:0:0 "," dal:3:0:2 "," dal:2:1:0 "," dal:5:1:0 "," dal:3:10000:0 "," dal:3:0:100000 "," dal:3:-10000:0 "," dal:3:0:-100000 "," dal:3:expecting_integer:0 "," dal:3:0:expecting_integer "," dal:1002147483647:1:1 "," + + value"]' from bootstrap2 Node is bootstrapped. Estimated gas: 1010.725 units (will add 100 for safety) Estimated storage: no bytes added @@ -335,14 +593,14 @@ This sequence of operations was run: Smart contract rollup messages submission This smart contract rollup messages submission was successfully applied Consumed gas: 1010.725 - Resulting inbox state: { level = 7 + Resulting inbox state: { level = 5 current messages hash = hash: [SC_ROLLUP_INBOX_HASH] - level: 7 nb_messages_in_commitment_period = 28 + level: 5 nb_messages_in_commitment_period = 24 message_counter = 16 old_levels_messages = content = hash: [SC_ROLLUP_INBOX_HASH] - level: 6 - index = 6 + level: 4 + index = 4 back_pointers = [SC_ROLLUP_INBOX_HASH] [SC_ROLLUP_INBOX_HASH] [SC_ROLLUP_INBOX_HASH] diff --git a/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_downloads_sl.out b/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_downloads_sl.out index 75e13a0913dc..e079bd8b530b 100644 --- a/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_downloads_sl.out +++ b/tezt/tests/expected/dal.ml/Alpha- Testing rollup and Data availability layer node (rollup_node_downloads_sl.out @@ -38,13 +38,13 @@ This sequence of operations was run: "commitment_hash": "[SC_ROLLUP_COMMITMENT_HASH]" } ./octez-sc-rollup-client-alpha rpc get /global/block/head/dal/slot_headers -[ { "level": 4, "index": 0, +[ { "level": 2, "index": 0, "commitment": "sh23Xtg7DY2qvSKgM1TiQDLH4cGZ2tHQwiQ5usHYdBUMzkirZUEVkSKoBDvjQePseeKFnQDGc9" }, - { "level": 4, "index": 1, + { "level": 2, "index": 1, "commitment": "[DAL_SLOT_HEADER]" }, - { "level": 4, "index": 2, + { "level": 2, "index": 2, "commitment": "sh237VRQLZqf8Uno4hjiiJh8RJxuwhPF4xWnPq2VKuC2ZbwVp3w9nw36iGfLHzpQrbopWx8GFq" } ] @@ -306,4 +306,262 @@ This sequence of operations was run: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ] }, + { "index": 2, + "contents": + [ "2034303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ] } ] -- GitLab From 5df41aa118a44fbbf321f9fb6d986698959a2098 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 08:04:34 +0200 Subject: [PATCH 2/7] Tests: remove unit tests related to Dal slots subscription --- .../test/unit/test_sc_rollup_storage.ml | 308 ------------------ 1 file changed, 308 deletions(-) diff --git a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_storage.ml b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_storage.ml index e1de3cfb17ef..515c13c7834d 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_storage.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_storage.ml @@ -472,11 +472,6 @@ let number_of_ticks_exn n = | Some x -> x | None -> Stdlib.failwith "Bad Number_of_ticks" -let dal_slot_index_of_int_exn n = - match Dal_slot_repr.Index.of_int n with - | Some n -> n - | None -> Stdlib.failwith "Bad slot index" - let valid_inbox_level ctxt = let root_level = Raw_level_repr.to_int32 Level_storage.(current ctxt).level in let commitment_freq = @@ -2559,256 +2554,6 @@ let test_storage_outbox_size_diff () = let* () = Assert.equal_int ~loc:__LOC__ (Z.to_int size_diff) (-14) in return () -let test_subscribe_slot_to_rollup () = - let* ctxt = new_context () in - let level = (Raw_context.current_level ctxt).level in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_index = dal_slot_index_of_int_exn 0 in - let* index, subscribed_level, _ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index - in - let* () = - Assert.equal_int - ~loc:__LOC__ - (Dal_slot_repr.Index.to_int index) - (Dal_slot_repr.Index.to_int slot_index) - in - Assert.equal_int32 - ~loc:__LOC__ - (Raw_level_repr.to_int32 subscribed_level) - (Raw_level_repr.to_int32 level) - -let test_subscribe_slot_twice_at_same_level () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_index = dal_slot_index_of_int_exn 0 in - let* _index, _subscribed_level, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index) - (Dal_errors_repr.Dal_rollup_already_registered_to_slot_index - (rollup, slot_index)) - -let test_subscribe_slot_twice_at_different_levels () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_index = dal_slot_index_of_int_exn 0 in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 10 in - let* _index, _subscribed_level, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index) - (Dal_errors_repr.Dal_rollup_already_registered_to_slot_index - (rollup, slot_index)) - -let test_subscribe_different_slots_at_same_level () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - assert_true ctxt - -let test_subscribe_different_slots_at_different_levels () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 10 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - assert_true ctxt - -let test_subscribe_slot_to_missing_rollup () = - let slot_index = dal_slot_index_of_int_exn 0 in - assert_fails_with_missing_rollup - ~loc:__LOC__ - (Sc_rollup_storage.Dal_slot.subscribe ~slot_index) - -let test_subscribe_to_slot_with_index_out_of_bounds () = - let* ctxt = new_context () in - (* Ensure that the maximum number of slots is not above the hard limit *) - let number_of_slots = - Dal_slot_repr.Index.to_int Dal_slot_repr.Index.max_value - in - let* ctxt = - Lwt.map (fun ctxt -> Ok ctxt) - @@ Raw_context.patch_constants ctxt (fun constants -> - {constants with dal = {constants.dal with number_of_slots}}) - in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let out_of_bounds_index = dal_slot_index_of_int_exn number_of_slots in - let maximum = dal_slot_index_of_int_exn (number_of_slots - 1) in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_storage.Dal_slot.subscribe - ctxt - rollup - ~slot_index:out_of_bounds_index) - (Dal_errors_repr.Dal_subscribe_rollup_invalid_slot_index - {given = out_of_bounds_index; maximum}) - -let test_subscribed_slots_no_entries () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let current_level = (Raw_context.current_level ctxt).level in - let* subscribed_slots = - lift - @@ Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - current_level - in - Assert.assert_equal_list - ~loc:__LOC__ - (fun lhs rhs -> - Dal_slot_repr.Index.to_int lhs = Dal_slot_repr.Index.to_int rhs) - "Unexpected slot indices" - Dal_slot_repr.Index.pp - subscribed_slots - [] - -let test_subscribed_slots_returns_overall_slot_subscriptions () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - let current_level = (Raw_context.current_level ctxt).level in - let* subscribed_slots = - lift - @@ Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - current_level - in - Assert.assert_equal_list - ~loc:__LOC__ - (fun lhs rhs -> - Dal_slot_repr.Index.to_int lhs = Dal_slot_repr.Index.to_int rhs) - "Unexpected slot indices" - Dal_slot_repr.Index.pp - subscribed_slots - [slot_0; slot_1] - -let test_subscribed_slots_no_entry_at_current_level () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let current_level = (Raw_context.current_level ctxt).level in - let* subscribed_slots = - lift - @@ Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - current_level - in - Assert.assert_equal_list - ~loc:__LOC__ - (fun lhs rhs -> - Dal_slot_repr.Index.to_int lhs = Dal_slot_repr.Index.to_int rhs) - "Unexpected slot indices" - Dal_slot_repr.Index.pp - subscribed_slots - [slot_0; slot_1] - -let test_subscribed_slots_at_level_past_context_level () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let current_level = (Raw_context.current_level ctxt).level in - let*? future_level = - Environment.wrap_tzresult @@ Raw_level_repr.of_int32 - @@ Int32.succ (Raw_level_repr.to_int32 current_level) - in - assert_fails_with - ~loc:__LOC__ - (Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - future_level) - (Dal_errors_repr.Dal_requested_subscriptions_at_future_level - (current_level, future_level)) - -let test_subscribed_slots_entries_at_future_level () = - let* ctxt = new_context () in - let* rollup, _genesis_hash, ctxt = lift @@ new_sc_rollup ctxt in - let slot_0 = dal_slot_index_of_int_exn 0 in - let slot_1 = dal_slot_index_of_int_exn 1 in - let slot_2 = dal_slot_index_of_int_exn 2 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_0 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_1 - in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let query_level = (Raw_context.current_level ctxt).level in - let ctxt = Raw_context.Internal_for_tests.add_level ctxt 1 in - let* _, _, ctxt = - lift @@ Sc_rollup_storage.Dal_slot.subscribe ctxt rollup ~slot_index:slot_2 - in - let* subscribed_slots = - lift - @@ Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - query_level - in - Assert.assert_equal_list - ~loc:__LOC__ - (fun lhs rhs -> - Dal_slot_repr.Index.to_int lhs = Dal_slot_repr.Index.to_int rhs) - "Unexpected slot indices" - Dal_slot_repr.Index.pp - subscribed_slots - [slot_0; slot_1] - -let test_subscribed_slots_of_missing_rollup () = - assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> - Sc_rollup_storage.Dal_slot.subscribed_slot_indices - ctxt - rollup - (Raw_context.current_level ctxt).level) - let test_get_cemented_commitments_with_levels_of_missing_rollup () = assert_fails_with_missing_rollup ~loc:__LOC__ (fun ctxt rollup -> Sc_rollup_commitment_storage.Internal_for_tests @@ -3105,59 +2850,6 @@ let tests = "Record messages size diffs" `Quick test_storage_outbox_size_diff; - Tztest.tztest - "Slot subscription to rollup is successful" - `Quick - test_subscribe_slot_to_rollup; - Tztest.tztest - "Subscribing twice to same slot at the same level fails" - `Quick - test_subscribe_slot_twice_at_same_level; - Tztest.tztest - "Subscribing to same slot at different levels fails" - `Quick - test_subscribe_slot_twice_at_different_levels; - Tztest.tztest - "Subscribe to different slots at same level is allowed" - `Quick - test_subscribe_different_slots_at_same_level; - Tztest.tztest - "Subscribe to different slots at different level is allowed" - `Quick - test_subscribe_different_slots_at_different_levels; - Tztest.tztest - "Subscribe missing rollup to slot fails" - `Quick - test_subscribe_slot_to_missing_rollup; - Tztest.tztest - "Subscribe to nonexisting slot fails" - `Quick - test_subscribe_to_slot_with_index_out_of_bounds; - Tztest.tztest - "Fetching slot subscriptions when there are no entries returns the empty \ - list" - `Quick - test_subscribed_slots_no_entries; - Tztest.tztest - "Fetching slot subscriptions returns overall slot subscriptions" - `Quick - test_subscribed_slots_returns_overall_slot_subscriptions; - Tztest.tztest - "Fetching slot subscriptions returns information for most recent entry" - `Quick - test_subscribed_slots_no_entry_at_current_level; - Tztest.tztest - "Fetching slot subscriptions at level higher than current level fails" - `Quick - test_subscribed_slots_at_level_past_context_level; - Tztest.tztest - "Fetching slot subscriptions ignores entries at future levels" - `Quick - test_subscribed_slots_entries_at_future_level; - Tztest.tztest - "Fetching slot subscriptions of missing rollup fails" - `Quick - test_subscribed_slots_of_missing_rollup; Tztest.tztest "Originating a rollup creates a genesis commitment" `Quick -- GitLab From 70e93309ebc2e733e84cb4352b3ce6d9588edc6e Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 08:06:57 +0200 Subject: [PATCH 3/7] Proto/Plugin: remove Dal slots subscription RPCs --- src/proto_alpha/lib_plugin/RPC.ml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/proto_alpha/lib_plugin/RPC.ml b/src/proto_alpha/lib_plugin/RPC.ml index 99e5d7886a60..390c49976a38 100644 --- a/src/proto_alpha/lib_plugin/RPC.ml +++ b/src/proto_alpha/lib_plugin/RPC.ml @@ -1953,17 +1953,6 @@ module Sc_rollup = struct path /: Sc_rollup.Address.rpc_arg / "commitment" /: Sc_rollup.Commitment.Hash.rpc_arg) - let dal_slot_subscriptions = - RPC_service.get_service - ~description: - "List of slot indices to which a rollup is subscribed to at a given \ - level" - ~query:RPC_query.empty - ~output:(Data_encoding.list Dal.Slot_index.encoding) - RPC_path.( - path /: Sc_rollup.Address.rpc_arg / "dal_slot_subscriptions" - /: Raw_level.rpc_arg) - let ongoing_refutation_game = let query = let open RPC_query in @@ -2151,11 +2140,6 @@ module Sc_rollup = struct in commitment - let register_dal_slot_subscriptions () = - Registration.register2 ~chunked:false S.dal_slot_subscriptions - @@ fun ctxt address level () () -> - Alpha_context.Sc_rollup.Dal_slot.subscribed_slot_indices ctxt address level - let register_root () = Registration.register0 ~chunked:true S.root (fun context () () -> Sc_rollup.list_unaccounted context) @@ -2232,7 +2216,6 @@ module Sc_rollup = struct register_last_cemented_commitment_hash_with_level () ; register_staked_on_commitment () ; register_commitment () ; - register_dal_slot_subscriptions () ; register_root () ; register_ongoing_refutation_game () ; register_conflicts () ; @@ -2267,16 +2250,6 @@ module Sc_rollup = struct () () - let dal_slot_subscriptions ctxt block sc_rollup_address level = - RPC_context.make_call2 - S.dal_slot_subscriptions - ctxt - block - sc_rollup_address - level - () - () - let boot_sector ctxt block sc_rollup_address = RPC_context.make_call1 S.boot_sector ctxt block sc_rollup_address () () -- GitLab From bb21fc293df3a3a4fa881ae211645f338becc502 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 18:05:41 +0200 Subject: [PATCH 4/7] Client: remove Dal slot subscribe command/function --- .../lib_client/client_proto_context.ml | 36 ------------------- .../lib_client/client_proto_context.mli | 25 ------------- 2 files changed, 61 deletions(-) diff --git a/src/proto_alpha/lib_client/client_proto_context.ml b/src/proto_alpha/lib_client/client_proto_context.ml index 71713c022991..4e97c8980e67 100644 --- a/src/proto_alpha/lib_client/client_proto_context.ml +++ b/src/proto_alpha/lib_client/client_proto_context.ml @@ -1510,42 +1510,6 @@ let sc_rollup_recover_bond (cctxt : #full) ~chain ~block ?confirmations ?dry_run | Apply_results.Single_and_result ((Manager_operation _ as op), result) -> return (oph, op, result) -let sc_rollup_dal_slot_subscribe (cctxt : #full) ~chain ~block ?confirmations - ?dry_run ?verbose_signing ?simulation ?fee ?gas_limit ?storage_limit - ?counter ~source ~rollup ~slot_index ~src_pk ~src_sk ~fee_parameter () = - match Dal.Slot_index.of_int slot_index with - | None -> failwith "Dal slot index either negative or above hard limit" - | Some slot_index -> ( - let op = - Annotated_manager_operation.Single_manager - (Injection.prepare_manager_operation - ~fee:(Limit.of_option fee) - ~gas_limit:(Limit.of_option gas_limit) - ~storage_limit:(Limit.of_option storage_limit) - (Sc_rollup_dal_slot_subscribe {rollup; slot_index})) - in - Injection.inject_manager_operation - cctxt - ~chain - ~block - ?confirmations - ?dry_run - ?verbose_signing - ?simulation - ?counter - ~source - ~fee:(Limit.of_option fee) - ~storage_limit:(Limit.of_option storage_limit) - ~gas_limit:(Limit.of_option gas_limit) - ~src_pk - ~src_sk - ~fee_parameter - op - >>=? fun (oph, _, op, result) -> - match Apply_results.pack_contents_list op result with - | Apply_results.Single_and_result ((Manager_operation _ as op), result) -> - return (oph, op, result)) - let sc_rollup_refute (cctxt : #full) ~chain ~block ?confirmations ?dry_run ?verbose_signing ?simulation ?fee ?gas_limit ?storage_limit ?counter ~source ~rollup ~refutation ~opponent ~src_pk ~src_sk ~fee_parameter () = diff --git a/src/proto_alpha/lib_client/client_proto_context.mli b/src/proto_alpha/lib_client/client_proto_context.mli index 17e25123bc71..fd6dcbea39f1 100644 --- a/src/proto_alpha/lib_client/client_proto_context.mli +++ b/src/proto_alpha/lib_client/client_proto_context.mli @@ -1015,28 +1015,3 @@ val sc_rollup_timeout : * Kind.sc_rollup_timeout Kind.manager Apply_results.contents_result) tzresult Lwt.t - -val sc_rollup_dal_slot_subscribe : - #Protocol_client_context.full -> - chain:Chain_services.chain -> - block:Block_services.block -> - ?confirmations:int -> - ?dry_run:bool -> - ?verbose_signing:bool -> - ?simulation:bool -> - ?fee:Tez.t -> - ?gas_limit:Gas.Arith.integral -> - ?storage_limit:Z.t -> - ?counter:Manager_counter.t -> - source:public_key_hash -> - rollup:Alpha_context.Sc_rollup.t -> - slot_index:int -> - src_pk:public_key -> - src_sk:Client_keys.sk_uri -> - fee_parameter:Injection.fee_parameter -> - unit -> - (Operation_hash.t - * Kind.sc_rollup_dal_slot_subscribe Kind.manager contents - * Kind.sc_rollup_dal_slot_subscribe Kind.manager Apply_results.contents_result) - tzresult - Lwt.t -- GitLab From 5cecf3bd436ed695436d08905cfa40e0d76e019a Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 08:09:30 +0200 Subject: [PATCH 5/7] Proto: remove Sc_rollup_dal_slot_subscribe operation --- src/proto_alpha/bin_sc_rollup_node/daemon.ml | 3 +- .../bin_sc_rollup_node/injector.ml | 3 +- src/proto_alpha/lib_client/injection.ml | 9 +-- .../lib_client/operation_result.ml | 24 ------ src/proto_alpha/lib_injector/l1_operation.ml | 2 - .../lib_protocol/alpha_context.mli | 30 -------- src/proto_alpha/lib_protocol/apply.ml | 11 --- src/proto_alpha/lib_protocol/apply_results.ml | 77 ------------------- .../lib_protocol/apply_results.mli | 6 -- .../lib_protocol/operation_repr.ml | 44 ----------- .../lib_protocol/operation_repr.mli | 15 ---- .../lib_protocol/test/helpers/block.ml | 6 +- .../test/helpers/operation_generator.ml | 9 --- .../test/integration/validate/test_sanity.ml | 4 +- src/proto_alpha/lib_protocol/validate.ml | 6 -- 15 files changed, 9 insertions(+), 240 deletions(-) diff --git a/src/proto_alpha/bin_sc_rollup_node/daemon.ml b/src/proto_alpha/bin_sc_rollup_node/daemon.ml index 642d32b5ddb4..279f7ad7dc48 100644 --- a/src/proto_alpha/bin_sc_rollup_node/daemon.ml +++ b/src/proto_alpha/bin_sc_rollup_node/daemon.ml @@ -109,8 +109,7 @@ module Make (PVM : Pvm.S) = struct | Sc_rollup_refute {rollup; _} | Sc_rollup_timeout {rollup; _} | Sc_rollup_execute_outbox_message {rollup; _} - | Sc_rollup_recover_bond {sc_rollup = rollup} - | Sc_rollup_dal_slot_subscribe {rollup; _} -> + | Sc_rollup_recover_bond {sc_rollup = rollup} -> Sc_rollup.Address.(rollup = node_ctxt.Node_context.rollup_address) | Dal_publish_slot_header _ -> true | Reveal _ | Transaction _ | Origination _ | Delegation _ diff --git a/src/proto_alpha/bin_sc_rollup_node/injector.ml b/src/proto_alpha/bin_sc_rollup_node/injector.ml index f34cfe5bd865..bab633a33f14 100644 --- a/src/proto_alpha/bin_sc_rollup_node/injector.ml +++ b/src/proto_alpha/bin_sc_rollup_node/injector.ml @@ -150,8 +150,7 @@ module Parameters : | Tx_rollup_rejection _ | Tx_rollup_dispatch_tickets _ | Transfer_ticket _ | Dal_publish_slot_header _ | Sc_rollup_originate _ | Sc_rollup_execute_outbox_message _ | Sc_rollup_recover_bond _ - | Sc_rollup_dal_slot_subscribe _ | Zk_rollup_origination _ - | Zk_rollup_publish _ -> + | Zk_rollup_origination _ | Zk_rollup_publish _ -> (* These operations should never be handled by this injector *) assert false diff --git a/src/proto_alpha/lib_client/injection.ml b/src/proto_alpha/lib_client/injection.ml index a05bf5079bda..c29f8c69a6ff 100644 --- a/src/proto_alpha/lib_client/injection.ml +++ b/src/proto_alpha/lib_client/injection.ml @@ -336,8 +336,7 @@ let estimated_gas_single (type kind) | Sc_rollup_refute_result {consumed_gas; _} | Sc_rollup_timeout_result {consumed_gas; _} | Sc_rollup_execute_outbox_message_result {consumed_gas; _} - | Sc_rollup_recover_bond_result {consumed_gas; _} - | Sc_rollup_dal_slot_subscribe_result {consumed_gas; _} -> + | Sc_rollup_recover_bond_result {consumed_gas; _} -> Ok consumed_gas | Zk_rollup_origination_result {consumed_gas; _} -> Ok consumed_gas | Zk_rollup_publish_result {consumed_gas; _} -> Ok consumed_gas) @@ -423,8 +422,7 @@ let estimated_storage_single (type kind) ~tx_rollup_origination_size *) | Sc_rollup_cement_result _ | Sc_rollup_publish_result _ | Sc_rollup_refute_result _ | Sc_rollup_timeout_result _ - | Sc_rollup_recover_bond_result _ - | Sc_rollup_dal_slot_subscribe_result _ -> + | Sc_rollup_recover_bond_result _ -> Ok Z.zero) | Skipped _ -> error_with "Cannot estimate storage of skipped operation" @@ -515,8 +513,7 @@ let originated_contracts_single (type kind) | Sc_rollup_add_messages_result _ | Sc_rollup_cement_result _ | Sc_rollup_publish_result _ | Sc_rollup_refute_result _ | Sc_rollup_timeout_result _ | Sc_rollup_execute_outbox_message_result _ - | Sc_rollup_recover_bond_result _ - | Sc_rollup_dal_slot_subscribe_result _ | Zk_rollup_origination_result _ + | Sc_rollup_recover_bond_result _ | Zk_rollup_origination_result _ | Zk_rollup_publish_result _ -> Ok []) | Skipped _ -> diff --git a/src/proto_alpha/lib_client/operation_result.ml b/src/proto_alpha/lib_client/operation_result.ml index f0fc58ae6947..e60b6f562ce0 100644 --- a/src/proto_alpha/lib_client/operation_result.ml +++ b/src/proto_alpha/lib_client/operation_result.ml @@ -398,16 +398,6 @@ let pp_manager_operation_content (type kind) source ppf sc_rollup Contract.pp source - | Sc_rollup_dal_slot_subscribe {rollup; slot_index} -> - Format.fprintf - ppf - "Data availability slot subscription:@,\ - Slot number: %a@,\ - Smart contract rollup address: %a" - Dal.Slot_index.pp - slot_index - Sc_rollup.Address.pp - rollup | Dal_publish_slot_header {slot_header} -> Format.fprintf ppf @@ -829,16 +819,6 @@ let pp_manager_operation_contents_result ppf op_result = pp_consumed_gas ppf consumed_gas ; pp_balance_updates ppf balance_updates in - let pp_sc_rollup_dal_slot_subscribe_result - (Sc_rollup_dal_slot_subscribe_result {consumed_gas; slot_index; level}) = - Format.fprintf ppf "@,Consumed gas: %a" Gas.Arith.pp consumed_gas ; - Format.fprintf - ppf - "@,Registered slot index: %a" - Dal.Slot_index.pp - slot_index ; - Format.fprintf ppf "@,Registered level %a" Raw_level.pp level - in let pp_sc_rollup_recover_bond_result (Sc_rollup_recover_bond_result {balance_updates; consumed_gas}) = pp_balance_updates ppf balance_updates ; @@ -894,8 +874,6 @@ let pp_manager_operation_contents_result ppf op_result = | Sc_rollup_execute_outbox_message_result _ -> "smart contract output message execution" | Sc_rollup_recover_bond_result _ -> "smart contract bond retrieval" - | Sc_rollup_dal_slot_subscribe_result _ -> - "data availability slot subscription" | Dal_publish_slot_header_result _ -> "data availability slot header publishing" | Zk_rollup_origination_result _ -> "zk rollup originate" @@ -939,8 +917,6 @@ let pp_manager_operation_contents_result ppf op_result = pp_sc_rollup_execute_outbox_message_result op | Sc_rollup_recover_bond_result _ as op -> pp_sc_rollup_recover_bond_result op - | Sc_rollup_dal_slot_subscribe_result _ as op -> - pp_sc_rollup_dal_slot_subscribe_result op | Dal_publish_slot_header_result _ as op -> pp_dal_publish_slot_header_result op | Zk_rollup_origination_result _ as op -> pp_zk_rollup_origination_result op diff --git a/src/proto_alpha/lib_injector/l1_operation.ml b/src/proto_alpha/lib_injector/l1_operation.ml index 43fa5c6e4d44..839ba22e499c 100644 --- a/src/proto_alpha/lib_injector/l1_operation.ml +++ b/src/proto_alpha/lib_injector/l1_operation.ml @@ -69,7 +69,6 @@ module Manager_operation = struct make sc_rollup_timeout_case; make sc_rollup_execute_outbox_message_case; make sc_rollup_recover_bond_case; - make sc_rollup_dal_slot_subscribe_case; ] let get_case : @@ -105,7 +104,6 @@ module Manager_operation = struct | Sc_rollup_execute_outbox_message _ -> sc_rollup_execute_outbox_message_case | Sc_rollup_recover_bond _ -> sc_rollup_recover_bond_case - | Sc_rollup_dal_slot_subscribe _ -> sc_rollup_dal_slot_subscribe_case | Zk_rollup_origination _ -> zk_rollup_origination_case | Zk_rollup_publish _ -> zk_rollup_publish_case diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 02aa58e382f5..3136936c9aff 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2961,10 +2961,6 @@ module Dal_errors : sig type error += | Dal_feature_disabled | Dal_slot_index_above_hard_limit - | Dal_subscribe_rollup_invalid_slot_index of { - given : Dal.Slot_index.t; - maximum : Dal.Slot_index.t; - } | Dal_endorsement_unexpected_size of {expected : int; got : int} | Dal_publish_slot_header_invalid_index of { given : Dal.Slot_index.t; @@ -3905,17 +3901,6 @@ module Sc_rollup : sig val get_boot_sector : context -> t -> (context * string) tzresult Lwt.t - module Dal_slot : sig - val subscribe : - context -> - t -> - slot_index:Dal.Slot_index.t -> - (Dal.Slot_index.t * Raw_level.t * context) tzresult Lwt.t - - val subscribed_slot_indices : - context -> t -> Raw_level.t -> Dal.Slot_index.t list tzresult Lwt.t - end - (** This module discloses definitions that are only useful for tests and must not be used otherwise. *) module Internal_for_tests : sig @@ -4229,8 +4214,6 @@ module Kind : sig type sc_rollup_recover_bond = Sc_rollup_recover_bond_kind - type sc_rollup_dal_slot_subscribe = Sc_rollup_dal_slot_subscribe_kind - type zk_rollup_origination = Zk_rollup_origination_kind type zk_rollup_publish = Zk_rollup_publish_kind @@ -4267,8 +4250,6 @@ module Kind : sig | Sc_rollup_execute_outbox_message_manager_kind : sc_rollup_execute_outbox_message manager | Sc_rollup_recover_bond_manager_kind : sc_rollup_recover_bond manager - | Sc_rollup_dal_slot_subscribe_manager_kind - : sc_rollup_dal_slot_subscribe manager | Zk_rollup_origination_manager_kind : zk_rollup_origination manager | Zk_rollup_publish_manager_kind : zk_rollup_publish manager end @@ -4509,11 +4490,6 @@ and _ manager_operation = sc_rollup : Sc_rollup.t; } -> Kind.sc_rollup_recover_bond manager_operation - | Sc_rollup_dal_slot_subscribe : { - rollup : Sc_rollup.t; - slot_index : Dal.Slot_index.t; - } - -> Kind.sc_rollup_dal_slot_subscribe manager_operation | Zk_rollup_origination : { public_parameters : Plonk.public_parameters; circuits_info : bool Zk_rollup.Account.SMap.t; @@ -4718,9 +4694,6 @@ module Operation : sig val sc_rollup_recover_bond_case : Kind.sc_rollup_recover_bond Kind.manager case - val sc_rollup_dal_slot_subscribe_case : - Kind.sc_rollup_dal_slot_subscribe Kind.manager case - val zk_rollup_origination_case : Kind.zk_rollup_origination Kind.manager case @@ -4795,9 +4768,6 @@ module Operation : sig val sc_rollup_recover_bond_case : Kind.sc_rollup_recover_bond case - val sc_rollup_dal_slot_subscribe_case : - Kind.sc_rollup_dal_slot_subscribe case - val zk_rollup_origination_case : Kind.zk_rollup_origination case val zk_rollup_publish_case : Kind.zk_rollup_publish case diff --git a/src/proto_alpha/lib_protocol/apply.ml b/src/proto_alpha/lib_protocol/apply.ml index b1a115d60a6e..a64fe7b54a81 100644 --- a/src/proto_alpha/lib_protocol/apply.ml +++ b/src/proto_alpha/lib_protocol/apply.ml @@ -1403,16 +1403,6 @@ let apply_manager_operation : } in return (ctxt, result, []) - | Sc_rollup_dal_slot_subscribe {rollup; slot_index} -> - let open Lwt_tzresult_syntax in - let+ slot_index, level, ctxt = - Sc_rollup.Dal_slot.subscribe ctxt rollup ~slot_index - in - let consumed_gas = Gas.consumed ~since:ctxt_before_op ~until:ctxt in - let result = - Sc_rollup_dal_slot_subscribe_result {consumed_gas; slot_index; level} - in - (ctxt, result, []) | Zk_rollup_origination {public_parameters; circuits_info; init_state; nb_ops} -> Zk_rollup_apply.originate @@ -1654,7 +1644,6 @@ let burn_manager_storage_fees : Sc_rollup_execute_outbox_message_result {payload with balance_updates} ) | Sc_rollup_recover_bond_result _ -> return (ctxt, storage_limit, smopr) - | Sc_rollup_dal_slot_subscribe_result _ -> return (ctxt, storage_limit, smopr) | Zk_rollup_origination_result payload -> Fees.burn_zk_rollup_origination_fees ctxt diff --git a/src/proto_alpha/lib_protocol/apply_results.ml b/src/proto_alpha/lib_protocol/apply_results.ml index 5ca742c480b5..c50ae2115167 100644 --- a/src/proto_alpha/lib_protocol/apply_results.ml +++ b/src/proto_alpha/lib_protocol/apply_results.ml @@ -174,12 +174,6 @@ type _ successful_manager_operation_result = consumed_gas : Gas.Arith.fp; } -> Kind.sc_rollup_recover_bond successful_manager_operation_result - | Sc_rollup_dal_slot_subscribe_result : { - consumed_gas : Gas.Arith.fp; - slot_index : Dal.Slot_index.t; - level : Raw_level.t; - } - -> Kind.sc_rollup_dal_slot_subscribe successful_manager_operation_result | Zk_rollup_origination_result : { balance_updates : Receipt.balance_updates; originated_zk_rollup : Zk_rollup.t; @@ -1010,28 +1004,6 @@ module Manager_result = struct (balance_updates, consumed_gas)) ~inj:(fun (balance_updates, consumed_gas) -> Sc_rollup_recover_bond_result {balance_updates; consumed_gas}) - - let sc_rollup_dal_slot_subscribe_case = - make - ~op_case: - Operation.Encoding.Manager_operations.sc_rollup_dal_slot_subscribe_case - ~encoding: - (obj3 - (dft "consumed_milligas" Gas.Arith.n_fp_encoding Gas.Arith.zero) - (req "slot_index" Dal.Slot_index.encoding) - (req "level" Raw_level.encoding)) - ~select:(function - | Successful_manager_result - (Sc_rollup_dal_slot_subscribe_result _ as op) -> - Some op - | _ -> None) - ~proj:(function - | Sc_rollup_dal_slot_subscribe_result {consumed_gas; slot_index; level} - -> - (consumed_gas, slot_index, level)) - ~kind:Kind.Sc_rollup_dal_slot_subscribe_manager_kind - ~inj:(fun (consumed_gas, slot_index, level) -> - Sc_rollup_dal_slot_subscribe_result {consumed_gas; slot_index; level}) end let successful_manager_operation_result_encoding : @@ -1221,10 +1193,6 @@ let equal_manager_kind : Kind.Sc_rollup_recover_bond_manager_kind ) -> Some Eq | Kind.Sc_rollup_recover_bond_manager_kind, _ -> None - | ( Kind.Sc_rollup_dal_slot_subscribe_manager_kind, - Kind.Sc_rollup_dal_slot_subscribe_manager_kind ) -> - Some Eq - | Kind.Sc_rollup_dal_slot_subscribe_manager_kind, _ -> None | ( Kind.Zk_rollup_origination_manager_kind, Kind.Zk_rollup_origination_manager_kind ) -> Some Eq @@ -1880,18 +1848,6 @@ module Encoding = struct Some (op, res) | _ -> None) - let sc_rollup_dal_slot_subscribe_case = - make_manager_case - Operation.Encoding.sc_rollup_dal_slot_subscribe_case - Manager_result.sc_rollup_dal_slot_subscribe_case - (function - | Contents_and_result - ( (Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _} - as op), - res ) -> - Some (op, res) - | _ -> None) - let zk_rollup_origination_case = make_manager_case Operation.Encoding.zk_rollup_origination_case @@ -1972,7 +1928,6 @@ let contents_result_encoding = make sc_rollup_timeout_case; make sc_rollup_execute_outbox_message_case; make sc_rollup_recover_bond_case; - make sc_rollup_dal_slot_subscribe_case; make zk_rollup_origination_case; make zk_rollup_publish_case; ] @@ -2039,7 +1994,6 @@ let contents_and_result_encoding = make sc_rollup_timeout_case; make sc_rollup_execute_outbox_message_case; make sc_rollup_recover_bond_case; - make sc_rollup_dal_slot_subscribe_case; make zk_rollup_origination_case; make zk_rollup_publish_case; ] @@ -2866,37 +2820,6 @@ let kind_equal : Some Eq | Manager_operation {operation = Sc_rollup_execute_outbox_message _; _}, _ -> None - | ( Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _}, - Manager_operation_result - {operation_result = Applied (Sc_rollup_dal_slot_subscribe_result _); _} - ) -> - Some Eq - | ( Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _}, - Manager_operation_result - { - operation_result = - Backtracked (Sc_rollup_dal_slot_subscribe_result _, _); - _; - } ) -> - Some Eq - | ( Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _}, - Manager_operation_result - { - operation_result = - Failed - (Alpha_context.Kind.Sc_rollup_dal_slot_subscribe_manager_kind, _); - _; - } ) -> - Some Eq - | ( Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _}, - Manager_operation_result - { - operation_result = - Skipped Alpha_context.Kind.Sc_rollup_dal_slot_subscribe_manager_kind; - _; - } ) -> - Some Eq - | Manager_operation {operation = Sc_rollup_dal_slot_subscribe _; _}, _ -> None | ( Manager_operation {operation = Zk_rollup_origination _; _}, Manager_operation_result {operation_result = Applied (Zk_rollup_origination_result _); _} ) -> diff --git a/src/proto_alpha/lib_protocol/apply_results.mli b/src/proto_alpha/lib_protocol/apply_results.mli index b468b0bae19a..59c1f1156e66 100644 --- a/src/proto_alpha/lib_protocol/apply_results.mli +++ b/src/proto_alpha/lib_protocol/apply_results.mli @@ -277,12 +277,6 @@ and _ successful_manager_operation_result = consumed_gas : Gas.Arith.fp; } -> Kind.sc_rollup_recover_bond successful_manager_operation_result - | Sc_rollup_dal_slot_subscribe_result : { - consumed_gas : Gas.Arith.fp; - slot_index : Dal.Slot_index.t; - level : Raw_level.t; - } - -> Kind.sc_rollup_dal_slot_subscribe successful_manager_operation_result | Zk_rollup_origination_result : { balance_updates : Receipt.balance_updates; originated_zk_rollup : Zk_rollup.t; diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 44a02137c32c..74a3116c6c62 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -121,8 +121,6 @@ module Kind = struct type sc_rollup_recover_bond = Sc_rollup_recover_bond_kind - type sc_rollup_dal_slot_subscribe = Sc_rollup_dal_slot_subscribe_kind - type zk_rollup_origination = Zk_rollup_origination_kind type zk_rollup_publish = Zk_rollup_publish_kind @@ -159,8 +157,6 @@ module Kind = struct | Sc_rollup_execute_outbox_message_manager_kind : sc_rollup_execute_outbox_message manager | Sc_rollup_recover_bond_manager_kind : sc_rollup_recover_bond manager - | Sc_rollup_dal_slot_subscribe_manager_kind - : sc_rollup_dal_slot_subscribe manager | Zk_rollup_origination_manager_kind : zk_rollup_origination manager | Zk_rollup_publish_manager_kind : zk_rollup_publish manager end @@ -471,11 +467,6 @@ and _ manager_operation = sc_rollup : Sc_rollup_repr.t; } -> Kind.sc_rollup_recover_bond manager_operation - | Sc_rollup_dal_slot_subscribe : { - rollup : Sc_rollup_repr.t; - slot_index : Dal_slot_repr.Index.t; - } - -> Kind.sc_rollup_dal_slot_subscribe manager_operation | Zk_rollup_origination : { public_parameters : Plonk.public_parameters; circuits_info : bool Zk_rollup_account_repr.SMap.t; @@ -520,8 +511,6 @@ let manager_kind : type kind. kind manager_operation -> kind Kind.manager = | Sc_rollup_execute_outbox_message _ -> Kind.Sc_rollup_execute_outbox_message_manager_kind | Sc_rollup_recover_bond _ -> Kind.Sc_rollup_recover_bond_manager_kind - | Sc_rollup_dal_slot_subscribe _ -> - Kind.Sc_rollup_dal_slot_subscribe_manager_kind | Zk_rollup_origination _ -> Kind.Zk_rollup_origination_manager_kind | Zk_rollup_publish _ -> Kind.Zk_rollup_publish_manager_kind @@ -615,9 +604,6 @@ let sc_rollup_execute_outbox_message_tag = sc_rollup_operation_tag_offset + 6 let sc_rollup_operation_recover_bond_tag = sc_rollup_operation_tag_offset + 7 -let sc_rollup_operation_dal_slot_subscribe_tag = - sc_rollup_operation_tag_offset + 8 - let dal_offset = 230 let dal_publish_slot_header_tag = dal_offset + 0 @@ -1282,28 +1268,6 @@ module Encoding = struct proj = (function Sc_rollup_recover_bond {sc_rollup} -> sc_rollup); inj = (fun sc_rollup -> Sc_rollup_recover_bond {sc_rollup}); } - - let sc_rollup_dal_slot_subscribe_case = - MCase - { - tag = sc_rollup_operation_dal_slot_subscribe_tag; - name = "sc_rollup_dal_slot_subscribe"; - encoding = - obj2 - (req "rollup" Sc_rollup_repr.encoding) - (req "slot_index" Dal_slot_repr.Index.encoding); - select = - (function - | Manager (Sc_rollup_dal_slot_subscribe _ as op) -> Some op - | _ -> None); - proj = - (function - | Sc_rollup_dal_slot_subscribe {rollup; slot_index} -> - (rollup, slot_index)); - inj = - (fun (rollup, slot_index) -> - Sc_rollup_dal_slot_subscribe {rollup; slot_index}); - } end type 'b case = @@ -1751,11 +1715,6 @@ module Encoding = struct sc_rollup_operation_recover_bond_tag Manager_operations.sc_rollup_recover_bond_case - let sc_rollup_dal_slot_subscribe_case = - make_manager_case - sc_rollup_operation_dal_slot_subscribe_tag - Manager_operations.sc_rollup_dal_slot_subscribe_case - let zk_rollup_origination_case = make_manager_case zk_rollup_operation_create_tag @@ -1817,7 +1776,6 @@ module Encoding = struct make sc_rollup_timeout_case; make sc_rollup_execute_outbox_message_case; make sc_rollup_recover_bond_case; - make sc_rollup_dal_slot_subscribe_case; make zk_rollup_origination_case; make zk_rollup_publish_case; ] @@ -2077,8 +2035,6 @@ let equal_manager_operation_kind : | Sc_rollup_execute_outbox_message _, _ -> None | Sc_rollup_recover_bond _, Sc_rollup_recover_bond _ -> Some Eq | Sc_rollup_recover_bond _, _ -> None - | Sc_rollup_dal_slot_subscribe _, Sc_rollup_dal_slot_subscribe _ -> Some Eq - | Sc_rollup_dal_slot_subscribe _, _ -> None | Zk_rollup_origination _, Zk_rollup_origination _ -> Some Eq | Zk_rollup_origination _, _ -> None | Zk_rollup_publish _, Zk_rollup_publish _ -> Some Eq diff --git a/src/proto_alpha/lib_protocol/operation_repr.mli b/src/proto_alpha/lib_protocol/operation_repr.mli index 18573215474b..e40dba3e0f92 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.mli +++ b/src/proto_alpha/lib_protocol/operation_repr.mli @@ -152,8 +152,6 @@ module Kind : sig type sc_rollup_recover_bond = Sc_rollup_recover_bond_kind - type sc_rollup_dal_slot_subscribe = Sc_rollup_dal_slot_subscribe_kind - type zk_rollup_origination = Zk_rollup_origination_kind type zk_rollup_publish = Zk_rollup_publish_kind @@ -190,8 +188,6 @@ module Kind : sig | Sc_rollup_execute_outbox_message_manager_kind : sc_rollup_execute_outbox_message manager | Sc_rollup_recover_bond_manager_kind : sc_rollup_recover_bond manager - | Sc_rollup_dal_slot_subscribe_manager_kind - : sc_rollup_dal_slot_subscribe manager | Zk_rollup_origination_manager_kind : zk_rollup_origination manager | Zk_rollup_publish_manager_kind : zk_rollup_publish manager end @@ -560,11 +556,6 @@ and _ manager_operation = sc_rollup : Sc_rollup_repr.t; } -> Kind.sc_rollup_recover_bond manager_operation - | Sc_rollup_dal_slot_subscribe : { - rollup : Sc_rollup_repr.t; - slot_index : Dal_slot_repr.Index.t; - } - -> Kind.sc_rollup_dal_slot_subscribe manager_operation | Zk_rollup_origination : { public_parameters : Plonk.public_parameters; circuits_info : bool Zk_rollup_account_repr.SMap.t; @@ -823,9 +814,6 @@ module Encoding : sig val sc_rollup_recover_bond_case : Kind.sc_rollup_recover_bond Kind.manager case - val sc_rollup_dal_slot_subscribe_case : - Kind.sc_rollup_dal_slot_subscribe Kind.manager case - val zk_rollup_origination_case : Kind.zk_rollup_origination Kind.manager case val zk_rollup_publish_case : Kind.zk_rollup_publish Kind.manager case @@ -898,9 +886,6 @@ module Encoding : sig val sc_rollup_recover_bond_case : Kind.sc_rollup_recover_bond case - val sc_rollup_dal_slot_subscribe_case : - Kind.sc_rollup_dal_slot_subscribe case - val zk_rollup_origination_case : Kind.zk_rollup_origination case val zk_rollup_publish_case : Kind.zk_rollup_publish case diff --git a/src/proto_alpha/lib_protocol/test/helpers/block.ml b/src/proto_alpha/lib_protocol/test/helpers/block.ml index 67943470a345..bd1fb14b4416 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/block.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/block.ml @@ -905,9 +905,8 @@ let bake_n_with_all_balance_updates ?(baking_mode = Application) ?policy | Sc_rollup_publish_result _ | Sc_rollup_refute_result _ | Sc_rollup_timeout_result _ | Sc_rollup_execute_outbox_message_result _ - | Sc_rollup_recover_bond_result _ - | Sc_rollup_dal_slot_subscribe_result _ - | Zk_rollup_origination_result _ | Zk_rollup_publish_result _ -> + | Sc_rollup_recover_bond_result _ | Zk_rollup_origination_result _ + | Zk_rollup_publish_result _ -> balance_updates_rev | Transaction_result ( Transaction_to_contract_result {balance_updates; _} @@ -960,7 +959,6 @@ let bake_n_with_origination_results ?(baking_mode = Application) ?policy n b = | Successful_manager_result (Sc_rollup_execute_outbox_message_result _) | Successful_manager_result (Sc_rollup_recover_bond_result _) - | Successful_manager_result (Sc_rollup_dal_slot_subscribe_result _) | Successful_manager_result (Zk_rollup_origination_result _) | Successful_manager_result (Zk_rollup_publish_result _) -> origination_results_rev diff --git a/src/proto_alpha/lib_protocol/test/helpers/operation_generator.ml b/src/proto_alpha/lib_protocol/test/helpers/operation_generator.ml index d15e2e74dfc3..6c5247c65806 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/operation_generator.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/operation_generator.ml @@ -89,7 +89,6 @@ let manager_kinds = `KSc_rollup_timeout; `KSc_rollup_execute_outbox_message; `KSc_rollup_recover_bond; - `KSc_rollup_dal_slot_subscribe; ] let pass_to_operation_kinds = function @@ -725,12 +724,6 @@ let generate_sc_rollup_recover_bond = let+ sc_rollup = random_sc_rollup in Sc_rollup_recover_bond {sc_rollup} -let generate_sc_rollup_dal_slot_subscribe = - let open QCheck2.Gen in - let+ rollup = random_sc_rollup in - let slot_index = Alpha_context.Dal.Slot_index.zero in - Sc_rollup_dal_slot_subscribe {rollup; slot_index} - (** {By Kind Operation Generator} *) let generator_of ?source = function @@ -782,8 +775,6 @@ let generator_of ?source = function generate_sc_rollup_execute_outbox_message | `KSc_rollup_recover_bond -> generate_manager_operation ?source generate_sc_rollup_recover_bond - | `KSc_rollup_dal_slot_subscribe -> - generate_manager_operation ?source generate_sc_rollup_dal_slot_subscribe let generate_manager_operation batch_size = let open QCheck2.Gen in diff --git a/src/proto_alpha/lib_protocol/test/integration/validate/test_sanity.ml b/src/proto_alpha/lib_protocol/test/integration/validate/test_sanity.ml index 98dedeb3932a..a148921e7aed 100644 --- a/src/proto_alpha/lib_protocol/test/integration/validate/test_sanity.ml +++ b/src/proto_alpha/lib_protocol/test/integration/validate/test_sanity.ml @@ -98,8 +98,8 @@ let ensure_kind infos kind = | Sc_rollup_publish _ | Sc_rollup_cement _ | Sc_rollup_add_messages _ | Sc_rollup_refute _ | Sc_rollup_timeout _ | Sc_rollup_execute_outbox_message _ | Sc_rollup_recover_bond _ - | Dal_publish_slot_header _ | Sc_rollup_dal_slot_subscribe _ - | Zk_rollup_origination _ | Zk_rollup_publish _ ), + | Dal_publish_slot_header _ | Zk_rollup_origination _ + | Zk_rollup_publish _ ), _ ) -> assert false) | Single _ -> assert false diff --git a/src/proto_alpha/lib_protocol/validate.ml b/src/proto_alpha/lib_protocol/validate.ml index bf3b54d7aa63..6fc8437e721e 100644 --- a/src/proto_alpha/lib_protocol/validate.ml +++ b/src/proto_alpha/lib_protocol/validate.ml @@ -2237,9 +2237,6 @@ module Manager = struct let assert_sc_rollup_feature_enabled vi = error_unless (Constants.sc_rollup_enable vi.ctxt) Sc_rollup_feature_disabled - let assert_dal_feature_enabled vi = - error_unless (Constants.dal_enable vi.ctxt) Dal_errors.Dal_feature_disabled - let assert_not_zero_messages messages = match messages with | [] -> error Sc_rollup_errors.Sc_rollup_add_zero_messages @@ -2436,9 +2433,6 @@ module Manager = struct the operations Branch_delayed if they cannot be successfully prechecked? *) assert_sc_rollup_feature_enabled vi - | Sc_rollup_dal_slot_subscribe _ -> - let* () = assert_sc_rollup_feature_enabled vi in - assert_dal_feature_enabled vi | Dal_publish_slot_header {slot_header} -> Dal_apply.validate_publish_slot_header vi.ctxt slot_header | Zk_rollup_origination _ | Zk_rollup_publish _ -> -- GitLab From 293c0a8e078948b441e5e941c9e9fabff5e4db06 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 08:11:08 +0200 Subject: [PATCH 6/7] Proto: remove ununsed (subscribe) maps from storage. --- .../lib_protocol/sc_rollup_storage.ml | 111 ------------------ .../lib_protocol/sc_rollup_storage.mli | 38 ------ src/proto_alpha/lib_protocol/storage.ml | 25 ---- src/proto_alpha/lib_protocol/storage.mli | 14 --- 4 files changed, 188 deletions(-) diff --git a/src/proto_alpha/lib_protocol/sc_rollup_storage.ml b/src/proto_alpha/lib_protocol/sc_rollup_storage.ml index 79a8935c8ea6..138940cf0f3f 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_storage.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_storage.ml @@ -152,114 +152,3 @@ let parameters_type ctxt rollup = let open Lwt_result_syntax in let+ ctxt, res = Store.Parameters_type.find ctxt rollup in (res, ctxt) - -module Dal_slot = struct - open Dal_errors_repr - - let slot_of_int_e n = - let open Tzresult_syntax in - match Dal_slot_repr.Index.of_int n with - | None -> fail Dal_errors_repr.Dal_slot_index_above_hard_limit - | Some slot_index -> return slot_index - - let fail_if_slot_index_invalid ctxt slot_index = - let open Lwt_tzresult_syntax in - let*? max_slot_index = - slot_of_int_e @@ ((Raw_context.constants ctxt).dal.number_of_slots - 1) - in - if - Compare.Int.( - Dal_slot_repr.Index.compare slot_index max_slot_index > 0 - || Dal_slot_repr.Index.compare slot_index Dal_slot_repr.Index.zero < 0) - then - fail - Dal_errors_repr.( - Dal_subscribe_rollup_invalid_slot_index - {given = slot_index; maximum = max_slot_index}) - else return slot_index - - let all_indexes ctxt = - let max_slot_index = (Raw_context.constants ctxt).dal.number_of_slots - 1 in - Misc.(0 --> max_slot_index) |> List.map slot_of_int_e |> all_e - - let subscribed_slots_at_level ctxt rollup level = - let open Lwt_tzresult_syntax in - let current_level = (Raw_context.current_level ctxt).level in - if Raw_level_repr.(level > current_level) then - fail (Dal_requested_subscriptions_at_future_level (current_level, level)) - else - let*! subscription_levels = - Store.Slot_subscriptions.keys (ctxt, rollup) - in - (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3170 - Improve code efficiency. *) - let relevant_subscription_levels = - subscription_levels - |> List.filter (fun subscription_level -> - Raw_level_repr.(subscription_level <= level)) - in - let last_subscription_level_opt = - List.fold_left - (fun max_level level -> - match max_level with - | None -> Some level - | Some max_level -> - Some - (if Raw_level_repr.(max_level > level) then max_level - else level)) - None - relevant_subscription_levels - in - match last_subscription_level_opt with - | None -> return Bitset.empty - | Some subscription_level -> - Store.Slot_subscriptions.get (ctxt, rollup) subscription_level - - let subscribe ctxt rollup ~slot_index = - let open Lwt_tzresult_syntax in - let* (_slot_index : Dal_slot_repr.Index.t) = - fail_if_slot_index_invalid ctxt slot_index - in - (* Check if the rollup exists by looking for the initial level *) - let* ctxt, _initial_level = genesis_info ctxt rollup in - let {Level_repr.level; _} = Raw_context.current_level ctxt in - let* subscribed_slots = subscribed_slots_at_level ctxt rollup level in - let*? slot_already_subscribed = - Bitset.mem subscribed_slots (Dal_slot_repr.Index.to_int slot_index) - in - if slot_already_subscribed then - fail (Dal_rollup_already_registered_to_slot_index (rollup, slot_index)) - else - let*? subscribed_slots = - Bitset.add subscribed_slots (Dal_slot_repr.Index.to_int slot_index) - in - let*! ctxt = - (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3248 - remove too old entries and charge for storage. *) - Store.Slot_subscriptions.add (ctxt, rollup) level subscribed_slots - in - return (slot_index, level, ctxt) - - let subscribed_slot_indices ctxt rollup level = - let all_indexes = all_indexes ctxt in - let to_dal_slot_index_list bitset = - let open Result_syntax in - let* all_indexes = all_indexes in - let+ slot_indexes = - all_indexes - |> List.map (fun i -> - let+ is_index_present = - Bitset.mem bitset (Dal_slot_repr.Index.to_int i) - in - if is_index_present then [i] else []) - |> all_e - in - List.concat slot_indexes - in - let open Lwt_tzresult_syntax in - (* Check if the rollup exists by looking for the initial level *) - let* ctxt, _initial_level = genesis_info ctxt rollup in - let* subscribed_slots = subscribed_slots_at_level ctxt rollup level in - let*? result = to_dal_slot_index_list subscribed_slots in - return result -end diff --git a/src/proto_alpha/lib_protocol/sc_rollup_storage.mli b/src/proto_alpha/lib_protocol/sc_rollup_storage.mli index 36ea175365f6..074330470ab8 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_storage.mli +++ b/src/proto_alpha/lib_protocol/sc_rollup_storage.mli @@ -81,41 +81,3 @@ val parameters_type : Raw_context.t -> Sc_rollup_repr.t -> (Script_repr.lazy_expr option * Raw_context.t) tzresult Lwt.t - -module Dal_slot : sig - (** [subscribe ctxt rollup slot_index] marks the [rollup] as subscribed to - [slot_index] at the level indicated by [Raw_context.current_level ctxt]. - - May fail with: - {ul - {li [Sc_rollup_does_not_exist] if [rollup] does not exist} - {li [Dal_subscribe_rollup_invalid_slot_index of {given=slot_index; maximum}] if - the slot_index is either negative or above [maximum], which is the maximum - slot index (inclusive) allowed} - {li [Dal_errors_repr.Dal_rollup_already_registered_to_slot (rollup, slot_index)] - if [rollup] is already subscribed to [slot_index]} - } - *) - val subscribe : - Raw_context.t -> - Sc_rollup_repr.t -> - slot_index:Dal_slot_repr.Index.t -> - (Dal_slot_repr.Index.t * Raw_level_repr.t * Raw_context.t) tzresult Lwt.t - - (** [subscribed_slot_indices ctxt rollup level] returns the slots to - which [rollup] was subscribed at level [level]. - - May fail with: - {ul - {li [Sc_rollup_does_not_exist] if [rollup] does not exist} - {li [Dal_errors_repr.Dal_requested_subscriptions_at_future_level (current_level, level)] - if [level] is above the current elvel, i.e. - [current] = [Raw_context.current_level ctxt] and [level] > [current]} - } - *) - val subscribed_slot_indices : - Raw_context.t -> - Sc_rollup_repr.t -> - Raw_level_repr.t -> - Dal_slot_repr.Index.t list tzresult Lwt.t -end diff --git a/src/proto_alpha/lib_protocol/storage.ml b/src/proto_alpha/lib_protocol/storage.ml index 274acf2e0491..f4a40dcbead7 100644 --- a/src/proto_alpha/lib_protocol/storage.ml +++ b/src/proto_alpha/lib_protocol/storage.ml @@ -1925,31 +1925,6 @@ module Sc_rollup = struct let name = ["applied_outbox_messages"] end) (Bitset_and_level) - - (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/3172. - Implement support for unsubscribing from a slot. *) - (* We map levels into (non-empty) list of slots. If a rollup is subscribed to a slot - index s at level l, then the slot index s will appear in the map entry for level l. - *) - module Dal_level_index = - Make_indexed_subcontext - (Make_subcontext (Registered) (Indexed_context.Raw_context) - (struct - let name = ["dal"; "level"] - end)) - (Make_index (Raw_level_repr.Index)) - - module Slot_subscriptions = - Dal_level_index.Make_map - (Registered) - (struct - let name = ["slot_subscriptions"] - end) - (struct - type t = Bitset.t - - let encoding = Bitset.encoding - end) end module Dal = struct diff --git a/src/proto_alpha/lib_protocol/storage.mli b/src/proto_alpha/lib_protocol/storage.mli index 7e6da9f6dd3d..853e49bcab54 100644 --- a/src/proto_alpha/lib_protocol/storage.mli +++ b/src/proto_alpha/lib_protocol/storage.mli @@ -887,20 +887,6 @@ module Sc_rollup : sig with type t = Raw_context.t * Sc_rollup_repr.t and type key = int32 and type value = Raw_level_repr.t * Bitset.t - - (** An indexed data storage for keeping track of dal slots to which - a rollup is subscribed to a given level. - - The [key] is a pair [(rollup, level)], and the [value] is a [Bitset.t] - representation of all the slot indices to which [rollup] has subscribed - to, as of level [level]. Only entries at levels for which there is a - change in the dal slot subscriptions are kept in this map. - *) - module Slot_subscriptions : - Indexed_data_storage - with type t = Raw_context.t * Sc_rollup_repr.t - and type key = Raw_level_repr.t - and type value = Bitset.t end module Dal : sig -- GitLab From 8357b2f5fcaa6f3fe0b0a2b07db13424ee49a5fe Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 27 Oct 2022 08:11:35 +0200 Subject: [PATCH 7/7] Proto: remove unused 'subscribe' errors from dal_errors_repr --- .../lib_protocol/dal_errors_repr.ml | 85 +------------------ 1 file changed, 1 insertion(+), 84 deletions(-) diff --git a/src/proto_alpha/lib_protocol/dal_errors_repr.ml b/src/proto_alpha/lib_protocol/dal_errors_repr.ml index cf09c8d1715d..a7c0744ec79e 100644 --- a/src/proto_alpha/lib_protocol/dal_errors_repr.ml +++ b/src/proto_alpha/lib_protocol/dal_errors_repr.ml @@ -26,10 +26,6 @@ type error += | Dal_feature_disabled | Dal_slot_index_above_hard_limit - | Dal_subscribe_rollup_invalid_slot_index of { - given : Dal_slot_repr.Index.t; - maximum : Dal_slot_repr.Index.t; - } | Dal_endorsement_unexpected_size of {expected : int; got : int} | Dal_publish_slot_header_invalid_index of { given : Dal_slot_repr.Index.t; @@ -40,37 +36,9 @@ type error += } | Dal_endorsement_size_limit_exceeded of {maximum_size : int; got : int} | Dal_publish_slot_header_duplicate of {slot_header : Dal_slot_repr.Header.t} - | Dal_rollup_already_registered_to_slot_index of - (Sc_rollup_repr.t * Dal_slot_repr.Index.t) - | Dal_requested_subscriptions_at_future_level of - (Raw_level_repr.t * Raw_level_repr.t) let () = let open Data_encoding in - let description = "Bad index for slot" in - register_error_kind - `Permanent - ~id:"dal_subscribe_rollup_invalid_slot_index" - ~title:"DAL invalid slot index for subscribing sc rollup" - ~description - ~pp:(fun ppf (given, maximum) -> - Format.fprintf - ppf - "%s: Given %a. Maximum %a." - description - Dal_slot_repr.Index.pp - given - Dal_slot_repr.Index.pp - maximum) - (obj2 - (req "given" Dal_slot_repr.Index.encoding) - (req "got" Dal_slot_repr.Index.encoding)) - (function - | Dal_subscribe_rollup_invalid_slot_index {given; maximum} -> - Some (given, maximum) - | _ -> None) - (fun (given, maximum) -> - Dal_subscribe_rollup_invalid_slot_index {given; maximum}) ; let description = "Data-availability layer will be enabled in a future proposal." in @@ -194,55 +162,4 @@ let () = (function | Dal_publish_slot_header_duplicate {slot_header} -> Some slot_header | _ -> None) - (fun slot_header -> Dal_publish_slot_header_duplicate {slot_header}) ; - register_error_kind - `Permanent - ~id:"Dal_rollup_already_subscribed_to_slot" - ~title:"DAL rollup already subscribed to slot" - ~description - ~pp:(fun ppf (rollup, slot_index) -> - Format.fprintf - ppf - "Rollup %a is already subscribed to data availability slot index %a" - Sc_rollup_repr.pp - rollup - Dal_slot_repr.Index.pp - slot_index) - Data_encoding.( - obj2 - (req "rollup" Sc_rollup_repr.encoding) - (req "slot_index" Dal_slot_repr.Index.encoding)) - (function - | Dal_rollup_already_registered_to_slot_index (rollup, slot_index) -> - Some (rollup, slot_index) - | _ -> None) - (fun (rollup, slot_index) -> - Dal_rollup_already_registered_to_slot_index (rollup, slot_index)) ; - let description = - "Requested List of subscribed rollups to slot at a future level" - in - register_error_kind - `Temporary - ~id:"Dal_requested_subscriptions_at_future_level" - ~title:"Requested list of subscribed dal slots at a future level" - ~description - ~pp:(fun ppf (current_level, future_level) -> - Format.fprintf - ppf - "The list of subscribed dal slot indices has been requested for level \ - %a, but the current level is %a" - Raw_level_repr.pp - future_level - Raw_level_repr.pp - current_level) - Data_encoding.( - obj2 - (req "current_level" Raw_level_repr.encoding) - (req "future_level" Raw_level_repr.encoding)) - (function - | Dal_requested_subscriptions_at_future_level (current_level, future_level) - -> - Some (current_level, future_level) - | _ -> None) - (fun (current_level, future_level) -> - Dal_requested_subscriptions_at_future_level (current_level, future_level)) + (fun slot_header -> Dal_publish_slot_header_duplicate {slot_header}) -- GitLab