11open Core
22open Async
3- open Currency
43open Signature_lib
5- open Mina_base
64open Integration_test_lib
75
86let docker_swarm_version = " 3.8"
@@ -50,39 +48,19 @@ module Network_config = struct
5048 ~(images : Test_config.Container_images .t ) ~(test_config : Test_config .t )
5149 ~(constants : Test_config .constants ) =
5250 let _ = cli_inputs in
53- let ({ genesis_ledger
54- ; epoch_data
55- ; block_producers
51+ let ({ block_producers
5652 ; snark_coordinator
5753 ; snark_worker_fee
5854 ; num_archive_nodes
5955 ; log_precomputed_blocks (* ; num_plain_nodes *)
6056 ; start_filtered_logs
61- ; proof_config
62- ; k
63- ; delta
64- ; slots_per_epoch
65- ; slots_per_sub_window
66- ; grace_period_slots
67- ; txpool_max_size
68- ; slot_tx_end
69- ; slot_chain_end
70- ; hard_fork_genesis_slot_delta
71- ; network_id
7257 ; _
7358 }
7459 : Test_config .t ) =
7560 test_config
7661 in
7762 let git_commit = Mina_version .commit_id_short in
7863 let stack_name = "it-" ^ git_commit ^ "-" ^ test_name in
79- let key_names_list =
80- List .map genesis_ledger ~f: (fun acct -> acct .account_name)
81- in
82- if List .contains_dup ~compare: String .compare key_names_list then
83- failwith
84- "All accounts in genesis ledger must have unique names. Check to make \
85- sure you are not using the same account_name more than once" ;
8664 let all_nodes_names_list =
8765 List .map block_producers ~f: (fun acct -> acct .node_name)
8866 @ match snark_coordinator with None -> [] | Some n -> [ n .node_name ]
@@ -91,210 +69,17 @@ module Network_config = struct
9169 failwith
9270 "All nodes in testnet must have unique names. Check to make sure you \
9371 are not using the same node_name more than once" ;
94- let keypairs =
95- List .take
96- (List .tl_exn
97- (Array .to_list (Lazy .force Key_gen.Sample_keypairs .keypairs )) )
98- (List .length genesis_ledger )
99- in
100- let runtime_timing_of_timing = function
101- | Account.Timing .Untimed ->
102- None
103- | Timed t ->
104- Some
105- { Runtime_config.Accounts.Single.Timed. initial_minimum_balance =
106- t.initial_minimum_balance
107- ; cliff_time = t.cliff_time
108- ; cliff_amount = t.cliff_amount
109- ; vesting_period = t.vesting_period
110- ; vesting_increment = t.vesting_increment
111- }
112- in
113- let add_accounts accounts_and_keypairs =
114- List .map accounts_and_keypairs
115- ~f: (fun
116- ( { Test_config.Test_account. balance
117- ; account_name
118- ; timing
119- ; permissions
120- ; zkapp
121- }
122- , (pk , sk ) )
123- ->
124- let timing = runtime_timing_of_timing timing in
125- let default = Runtime_config.Accounts.Single .default in
126- let account =
127- { default with
128- pk = Public_key.Compressed. to_string pk
129- ; sk = Some (Private_key. to_base58_check sk)
130- ; balance = Balance. of_mina_string_exn balance
131- ; delegate = None
132- ; timing
133- ; permissions =
134- Option. map
135- ~f: Runtime_config.Accounts.Single.Permissions. of_permissions
136- permissions
137- ; zkapp =
138- Option. map
139- ~f: Runtime_config.Accounts.Single.Zkapp_account. of_zkapp zkapp
140- }
141- in
142- (account_name , account ) )
143- in
144- let genesis_accounts_and_keys = List .zip_exn genesis_ledger keypairs in
145- let genesis_ledger_accounts = add_accounts genesis_accounts_and_keys in
146- let constraint_constants =
147- Genesis_ledger_helper .make_constraint_constants
148- ~default: constants.constraint_constants proof_config
149- in
150- let ledger_is_prefix ledger1 ledger2 =
151- List .is_prefix ledger2 ~prefix: ledger1
152- ~equal: (fun
153- ({ account_name = name1; _ } : Test_config.Test_account .t )
154- ({ account_name = name2; _ } : Test_config.Test_account .t )
155- -> String .equal name1 name2 )
156- in
72+ let genesis_ledger = Genesis_ledger .create test_config .genesis_ledger in
15773 let runtime_config =
158- { Runtime_config. daemon =
159- Some
160- { txpool_max_size = Some txpool_max_size
161- ; peer_list_url = None
162- ; zkapp_proof_update_cost = None
163- ; zkapp_signed_single_update_cost = None
164- ; zkapp_signed_pair_update_cost = None
165- ; zkapp_transaction_cost_limit = None
166- ; max_event_elements = None
167- ; max_action_elements = None
168- ; zkapp_cmd_limit_hardcap = None
169- ; slot_tx_end
170- ; slot_chain_end
171- ; hard_fork_genesis_slot_delta
172- ; minimum_user_command_fee = None
173- ; network_id
174- ; sync_ledger_max_subtree_depth = None
175- ; sync_ledger_default_subtree_depth = None
176- }
177- ; genesis =
178- Some
179- { k = Some k
180- ; delta = Some delta
181- ; slots_per_epoch = Some slots_per_epoch
182- ; slots_per_sub_window = Some slots_per_sub_window
183- ; grace_period_slots = Some grace_period_slots
184- ; genesis_state_timestamp =
185- Some Core.Time. (to_string_abs ~zone: Zone. utc (now () ))
186- }
187- ; proof = Some proof_config (* TODO: prebake ledger and only set hash *)
188- ; ledger =
189- Some
190- { base =
191- Accounts
192- (List. map genesis_ledger_accounts ~f: (fun (_name , acct ) ->
193- acct ) )
194- ; add_genesis_winner = None
195- ; num_accounts = None
196- ; balances = []
197- ; hash = None
198- ; s3_data_hash = None
199- ; name = None
200- }
201- ; epoch_data =
202- Option. map epoch_data ~f: (fun { staking = staking_ledger ; next } ->
203- let genesis_winner_account : Runtime_config.Accounts.single =
204- Runtime_config.Accounts.Single. of_account
205- Mina_state.Consensus_state_hooks. genesis_winner_account
206- |> Or_error. ok_exn
207- in
208- let ledger_of_epoch_accounts
209- (epoch_accounts : Test_config.Test_account.t list ) =
210- let epoch_ledger_accounts =
211- List. map epoch_accounts
212- ~f: (fun
213- { account_name; balance; timing; permissions; zkapp }
214- ->
215- let balance = Balance. of_mina_string_exn balance in
216- let timing = runtime_timing_of_timing timing in
217- let genesis_account =
218- match
219- List.Assoc. find genesis_ledger_accounts account_name
220- ~equal: String. equal
221- with
222- | Some acct ->
223- acct
224- | None ->
225- failwithf
226- " Epoch ledger account %s not in genesis ledger"
227- account_name ()
228- in
229- { genesis_account with
230- balance
231- ; timing
232- ; permissions =
233- Option. map
234- ~f:
235- Runtime_config.Accounts.Single. Permissions
236- .of_permissions permissions
237- ; zkapp =
238- Option. map
239- ~f:
240- Runtime_config.Accounts.Single. Zkapp_account
241- .of_zkapp zkapp
242- } )
243- in
244- ( { base =
245- Accounts (genesis_winner_account :: epoch_ledger_accounts)
246- ; add_genesis_winner = None (* no effect *)
247- ; num_accounts = None
248- ; balances = []
249- ; hash = None
250- ; s3_data_hash = None
251- ; name = None
252- }
253- : Runtime_config.Ledger. t )
254- in
255- let staking =
256- let ({ epoch_ledger; epoch_seed }
257- : Test_config.Epoch_data.Data. t ) =
258- staking_ledger
259- in
260- if not (ledger_is_prefix epoch_ledger genesis_ledger) then
261- failwith " Staking epoch ledger not a prefix of genesis ledger" ;
262- let ledger = ledger_of_epoch_accounts epoch_ledger in
263- let seed = epoch_seed in
264- ({ ledger; seed } : Runtime_config.Epoch_data.Data.t )
265- in
266- let next =
267- Option. map next ~f: (fun { epoch_ledger; epoch_seed } ->
268- if
269- not
270- (ledger_is_prefix staking_ledger.epoch_ledger
271- epoch_ledger )
272- then
273- failwith
274- " Staking epoch ledger not a prefix of next epoch ledger" ;
275- if not (ledger_is_prefix epoch_ledger genesis_ledger) then
276- failwith
277- " Next epoch ledger not a prefix of genesis ledger" ;
278- let ledger = ledger_of_epoch_accounts epoch_ledger in
279- let seed = epoch_seed in
280- ({ ledger; seed } : Runtime_config.Epoch_data.Data.t ) )
281- in
282- ({ staking; next } : Runtime_config.Epoch_data.t ) )
283- }
74+ Runtime_config_builder .create ~test_config ~genesis_ledger
28475 in
28576 let genesis_constants =
28677 Or_error .ok_exn
28778 (Genesis_ledger_helper .make_genesis_constants ~logger
28879 ~default: constants.genesis_constants runtime_config )
28980 in
29081 let constants : Test_config .constants =
291- { constants with genesis_constants; constraint_constants }
292- in
293- let mk_net_keypair keypair_name (pk , sk ) =
294- let keypair =
295- { Keypair. public_key = Public_key. decompress_exn pk; private_key = sk }
296- in
297- Network_keypair .create_network_keypair ~keypair_name ~keypair
82+ { constants with genesis_constants }
29883 in
29984 let long_commit_id =
30085 if String .is_substring Mina_version .commit_id ~substring: "[DIRTY]" then
@@ -309,12 +94,6 @@ module Network_config = struct
30994 let mina_archive_schema_aux_files =
31095 [ sprintf "%screate_schema.sql" mina_archive_base_url ]
31196 in
312- let genesis_keypairs =
313- List .fold genesis_accounts_and_keys ~init: String.Map .empty
314- ~f: (fun map ({ account_name; _ }, (pk , sk )) ->
315- let keypair = mk_net_keypair account_name (pk , sk ) in
316- String.Map .add_exn map ~key: account_name ~data: keypair )
317- in
31897 let open Docker_node_config in
31998 let open Docker_compose .Dockerfile in
32099 let port_manager = PortManager .create ~min_port: 10000 ~max_port: 11000 in
@@ -436,12 +215,10 @@ module Network_config = struct
436215 List .map block_producers ~f: (fun node ->
437216 let keypair =
438217 match
439- List .find genesis_accounts_and_keys
440- ~f: (fun ({ account_name; _ }, _keypair ) ->
441- String .equal account_name node .account_name )
218+ Core.String.Map .find genesis_ledger .keypairs node .account_name
442219 with
443- | Some ( _acct , keypair ) ->
444- keypair | > mk_net_keypair node .account_name
220+ | Some keypair ->
221+ keypair
445222 | None ->
446223 let failstring =
447224 Format .sprintf
@@ -484,7 +261,7 @@ module Network_config = struct
484261 | Some snark_coordinator_node ->
485262 let network_kp =
486263 match
487- String.Map .find genesis_keypairs
264+ String.Map .find genesis_ledger .keypairs
488265 snark_coordinator_node .account_name
489266 with
490267 | Some acct ->
@@ -554,7 +331,7 @@ module Network_config = struct
554331 ~config: snark_coordinator_config )
555332 in
556333 { debug_arg = debug
557- ; genesis_keypairs
334+ ; genesis_keypairs = genesis_ledger.keypairs
558335 ; commit_id = git_commit
559336 ; constants
560337 ; docker =
0 commit comments