@@ -122,20 +122,84 @@ defmodule EntryGenesis do
122122 } ,
123123 txs: [ ] ,
124124 }
125- entry_signed = Entry . sign ( entry )
125+ entry_signed = Entry . sign ( sk , entry )
126126
127127 % { db: db , cf: cf } = :persistent_term . get ( { :rocksdb , Fabric } )
128128 rtx = RocksDB . transaction ( db )
129129 Process . put ( { RocksDB , :ctx } , % { rtx: rtx , cf: cf } )
130130 { mutations , _ } = BIC.Base . call_exit ( % { entry: entry } )
131131
132132 mutations_hash = ConsensusKV . hash_mutations ( mutations )
133- attestation = Attestation . sign ( entry_signed . hash , mutations_hash )
133+ attestation = Attestation . sign ( sk , entry_signed . hash , mutations_hash )
134134
135135 pop = BlsEx . sign! ( sk , pk , BLS12AggSig . dst_pop ( ) )
136136 entry_signed = Entry . pack ( entry_signed ) |> Entry . unpack ( )
137137
138138 IO . inspect { entry_signed , attestation , pop } , limit: :infinity
139139 :ok
140140 end
141+
142+ def generate_testnet ( ) do
143+ % { db: db , cf: cf } = :persistent_term . get ( { :rocksdb , Fabric } )
144+ if ! RocksDB . get ( "temporal_height" , % { db: db , cf: cf . sysconf } ) do
145+ IO . puts "making testnet.."
146+
147+ pk = Application . fetch_env! ( :ama , :trainer_pk )
148+ sk = Application . fetch_env! ( :ama , :trainer_sk )
149+
150+ if length ( Application . fetch_env! ( :ama , :keys ) ) < 10 do
151+ new_keys = Enum . map ( 0 .. 9 , fn ( _ ) -> :crypto . strong_rand_bytes ( 64 ) |> Base58 . encode ( ) end )
152+ |> Enum . join ( "\n " )
153+ workdir = Application . fetch_env! ( :ama , :work_folder )
154+ File . write! ( Path . join ( [ workdir , "seeds" ] ) , new_keys )
155+ IO . puts "seeded testnet please restart node"
156+ :erlang . halt ( )
157+ end
158+
159+ entropy_seed = :crypto . strong_rand_bytes ( 512 )
160+ dr = Blake3 . hash ( entropy_seed )
161+ vr = BlsEx . sign! ( sk , dr <> dr <> dr , BLS12AggSig . dst_vrf ( ) )
162+
163+ entry = % {
164+ header_unpacked: % {
165+ slot: 0 ,
166+ height: 0 ,
167+ prev_slot: - 1 ,
168+ prev_hash: << >> ,
169+ dr: dr ,
170+ vr: vr ,
171+ signer: pk ,
172+ } ,
173+ txs: [ ] ,
174+ }
175+ entry_signed = Entry . sign ( sk , entry )
176+
177+
178+ rtx = RocksDB . transaction ( db )
179+ Process . put ( { RocksDB , :ctx } , % { rtx: rtx , cf: cf } )
180+
181+ mutations_hash = ConsensusKV . hash_mutations ( [ ] )
182+ attestation = Attestation . sign ( sk , entry_signed . hash , mutations_hash )
183+
184+ pop = BlsEx . sign! ( sk , pk , BLS12AggSig . dst_pop ( ) )
185+ entry_signed = Entry . pack ( entry_signed ) |> Entry . unpack ( )
186+
187+ RocksDB . put ( entry_signed . hash , Entry . pack ( entry_signed ) , % { rtx: rtx , cf: cf . entry } )
188+ RocksDB . put ( entry_signed . hash , :os . system_time ( 1000 ) , % { rtx: rtx , cf: cf . my_seen_time_for_entry , term: true } )
189+ RocksDB . put ( "temporal_tip" , entry_signed . hash , % { rtx: rtx , cf: cf . sysconf } )
190+ RocksDB . put ( "temporal_height" , 0 , % { rtx: rtx , cf: cf . sysconf , term: true } )
191+ RocksDB . put ( "rooted_tip" , entry_signed . hash , % { rtx: rtx , cf: cf . sysconf } )
192+
193+ validator_pks = Application . fetch_env! ( :ama , :keys ) |> Enum . map ( & & 1 . pk )
194+ RocksDB . put ( "bic:epoch:trainers:height:#{ String . pad_leading ( "0" , 12 , "0" ) } " ,
195+ :erlang . term_to_binary ( validator_pks ) , % { rtx: rtx , cf: cf . contractstate } )
196+ Enum . each ( Application . fetch_env! ( :ama , :keys ) , fn ( key ) ->
197+ RocksDB . put ( "bic:coin:balance:#{ key . pk } :AMA" , "1001000000000" , % { rtx: rtx , cf: cf . contractstate } )
198+ RocksDB . put ( "bic:epoch:pop:#{ key . pk } " , key . pop , % { rtx: rtx , cf: cf . contractstate } )
199+ end )
200+ rtx = RocksDB . transaction_commit ( rtx )
201+
202+ #Fabric.aggregate_attestation(attestation |> Attestation.pack())
203+ end
204+ end
141205end
0 commit comments