Skip to content

Commit 6efd5b9

Browse files
committed
refactor out in place ledger/daemon config with specialized structs
1 parent 2634f8d commit 6efd5b9

File tree

1 file changed

+9
-232
lines changed

1 file changed

+9
-232
lines changed

src/lib/testing/integration_test_local_engine/mina_docker.ml

Lines changed: 9 additions & 232 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
open Core
22
open Async
3-
open Currency
43
open Signature_lib
5-
open Mina_base
64
open Integration_test_lib
75

86
let 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

Comments
 (0)