@@ -176,7 +176,12 @@ pub fn call_set_emission_address(env: &mut crate::consensus::consensus_apply::Ap
176176 if args. len ( ) != 1 { panic_any ( "invalid_args" ) }
177177 let address = args[ 0 ] . as_slice ( ) ;
178178 if address. len ( ) != 48 { panic_any ( "invalid_address_pk" ) }
179- kv_put ( env, & bcat ( & [ b"bic:epoch:emission_address:" , env. caller_env . account_caller . as_slice ( ) ] ) , address) ;
179+
180+ if kv_exists ( env, & crate :: bcat ( & [ b"account:" , & crate :: consensus:: bic:: coin:: BURN_ADDRESS , b":balance:AMA" ] ) ) {
181+ kv_put ( env, & bcat ( & [ b"account:" , & env. caller_env . account_caller , b":attribute:emission_address" ] ) , address) ;
182+ } else {
183+ kv_put ( env, & bcat ( & [ b"bic:epoch:emission_address:" , env. caller_env . account_caller . as_slice ( ) ] ) , address) ;
184+ }
180185}
181186
182187pub fn call_submit_sol ( env : & mut crate :: consensus:: consensus_apply:: ApplyEnv , args : Vec < Vec < u8 > > ) {
@@ -203,10 +208,19 @@ pub fn call_submit_sol(env: &mut crate::consensus::consensus_apply::ApplyEnv, ar
203208 panic_any ( "invalid_sol" ) ;
204209 }
205210
206- if !kv_exists ( env, & bcat ( & [ b"bic:epoch:pop:" , usol. pk . as_slice ( ) ] ) ) {
207- match consensus:: bls12_381:: verify ( & usol. pk , & usol. pop , & usol. pk , consensus:: aggsig:: DST_POP ) {
208- Ok ( ( ) ) => kv_put ( env, & bcat ( & [ b"bic:epoch:pop:" , usol. pk . as_slice ( ) ] ) , & usol. pop ) ,
209- Err ( _) => panic_any ( "invalid_pop" )
211+ if kv_exists ( env, & crate :: bcat ( & [ b"account:" , & crate :: consensus:: bic:: coin:: BURN_ADDRESS , b":balance:AMA" ] ) ) {
212+ if !kv_exists ( env, & bcat ( & [ b"account:" , & usol. pk , b":attribute:pop" ] ) ) {
213+ match consensus:: bls12_381:: verify ( & usol. pk , & usol. pop , & usol. pk , consensus:: aggsig:: DST_POP ) {
214+ Ok ( ( ) ) => kv_put ( env, & bcat ( & [ b"account:" , & usol. pk , b":attribute:pop" ] ) , & usol. pop ) ,
215+ Err ( _) => panic_any ( "invalid_pop" )
216+ }
217+ }
218+ } else {
219+ if !kv_exists ( env, & bcat ( & [ b"bic:epoch:pop:" , usol. pk . as_slice ( ) ] ) ) {
220+ match consensus:: bls12_381:: verify ( & usol. pk , & usol. pop , & usol. pk , consensus:: aggsig:: DST_POP ) {
221+ Ok ( ( ) ) => kv_put ( env, & bcat ( & [ b"bic:epoch:pop:" , usol. pk . as_slice ( ) ] ) , & usol. pop ) ,
222+ Err ( _) => panic_any ( "invalid_pop" )
223+ }
210224 }
211225 }
212226 kv_increment ( env, & bcat ( & [ b"bic:epoch:solutions_count:" , usol. pk . as_slice ( ) ] ) , 1 ) ;
@@ -304,21 +318,20 @@ pub fn call_slash_trainer(env: &mut crate::consensus::consensus_apply::ApplyEnv,
304318 } ;
305319 if !signature_valid { panic_any ( "invalid_signature" ) }
306320
307- let mut trainers_removed = kv_get_trainers ( env, & bcat ( & [ b"bic:epoch:trainers:removed:" , epoch. to_string ( ) . as_bytes ( ) ] ) ) ;
308- trainers_removed. push ( malicious_pk. to_vec ( ) ) ;
309- let term_trainers_removed = consensus:: bic:: eetf_list_of_binaries ( trainers_removed) . unwrap ( ) ;
310- kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:removed:" , epoch. to_string ( ) . as_bytes ( ) ] ) , term_trainers_removed. as_slice ( ) ) ;
311-
312- trainers. retain ( |pk| pk. as_slice ( ) != malicious_pk) ;
313- let term_trainers = consensus:: bic:: eetf_list_of_binaries ( trainers) . unwrap ( ) ;
314- kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:" , epoch. to_string ( ) . as_bytes ( ) ] ) , term_trainers. as_slice ( ) ) ;
315-
316- kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:height:" , & height_next] ) , term_trainers. as_slice ( ) ) ;
317- /*
318321 trainers. retain ( |pk| pk. as_slice ( ) != malicious_pk) ;
319- let term_trainers = consensus::bic::list_of_binaries_to_vecpak(trainers);
320- kv_put(env, &bcat(&[b"bic:epoch:trainers:height:", &height_next]), term_trainers.as_slice());
321- */
322+ if env. caller_env . entry_height >= 413_00000 {
323+ let term_trainers = consensus:: bic:: list_of_binaries_to_vecpak ( trainers) ;
324+ kv_put ( env, & bcat ( & [ b"bic:epoch:validators:height:" , & height_next] ) , term_trainers. as_slice ( ) ) ;
325+ } else {
326+ let mut trainers_removed = kv_get_trainers ( env, & bcat ( & [ b"bic:epoch:trainers:removed:" , epoch. to_string ( ) . as_bytes ( ) ] ) ) ;
327+ trainers_removed. push ( malicious_pk. to_vec ( ) ) ;
328+ let term_trainers_removed = consensus:: bic:: eetf_list_of_binaries ( trainers_removed) . unwrap ( ) ;
329+ kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:removed:" , epoch. to_string ( ) . as_bytes ( ) ] ) , term_trainers_removed. as_slice ( ) ) ;
330+
331+ let term_trainers = consensus:: bic:: eetf_list_of_binaries ( trainers) . unwrap ( ) ;
332+ kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:" , epoch. to_string ( ) . as_bytes ( ) ] ) , term_trainers. as_slice ( ) ) ;
333+ kv_put ( env, & bcat ( & [ b"bic:epoch:trainers:height:" , & height_next] ) , term_trainers. as_slice ( ) ) ;
334+ }
322335}
323336
324337pub fn next ( env : & mut ApplyEnv ) {
0 commit comments