@@ -7,7 +7,7 @@ use ckb_app_config::{
77} ;
88use ckb_chain_spec:: { consensus:: Consensus , ChainSpec } ;
99use ckb_jsonrpc_types:: ScriptHashType ;
10- use ckb_logger:: info;
10+ use ckb_logger:: { error , info} ;
1111use ckb_types:: { u256, H256 , U256 } ;
1212use clap:: ArgMatches ;
1313use std:: { path:: PathBuf , str:: FromStr } ;
@@ -71,33 +71,47 @@ impl Setup {
7171 } else {
7272 u256 ! ( "0x0" )
7373 } ;
74-
75- let arg_assume_valid_target = matches. get_one :: < String > ( cli:: ARG_ASSUME_VALID_TARGET ) ;
76-
77- config. network . sync . assume_valid_target =
78- arg_assume_valid_target. and_then ( |s| H256 :: from_str ( & s[ 2 ..] ) . ok ( ) ) ;
79- if config. network . sync . assume_valid_target . is_none ( ) {
80- config. network . sync . assume_valid_target = match consensus. id . as_str ( ) {
74+ config. network . sync . assume_valid_targets = matches
75+ . get_one :: < String > ( cli:: ARG_ASSUME_VALID_TARGET )
76+ . map ( |concacate_targets| {
77+ concacate_targets
78+ . split ( ',' )
79+ . map ( |s| H256 :: from_str ( & s[ 2 ..] ) )
80+ . collect :: < Result < Vec < H256 > , _ > > ( )
81+ . map_err ( |err| {
82+ error ! ( "Invalid assume valid target: {}" , err) ;
83+ ExitCode :: Cli
84+ } )
85+ } )
86+ . transpose ( ) ?; // Converts Result<Option<T>, E> to Option<Result<T, E>>
87+
88+ if config. network . sync . assume_valid_targets . is_none ( ) {
89+ config. network . sync . assume_valid_targets = match consensus. id . as_str ( ) {
8190 ckb_constant:: hardfork:: mainnet:: CHAIN_SPEC_NAME => Some (
82- H256 :: from_str ( & ckb_constant:: default_assume_valid_target:: mainnet:: DEFAULT_ASSUME_VALID_TARGET [ 2 ..] )
83- . expect ( "default assume_valid_target for mainnet must be valid" ) ,
84- ) ,
91+ ckb_constant:: default_assume_valid_target:: mainnet:: default_assume_valid_targets ( ) . iter ( ) . map ( |target|
92+ H256 :: from_str ( & target[ 2 ..] ) . expect ( "default assume_valid_target for mainnet must be valid" ) ) . collect :: < Vec < H256 > > ( ) ) ,
8593 ckb_constant:: hardfork:: testnet:: CHAIN_SPEC_NAME => Some (
86- H256 :: from_str ( & ckb_constant:: default_assume_valid_target:: testnet:: DEFAULT_ASSUME_VALID_TARGET [ 2 ..] )
87- . expect ( "default assume_valid_target for testnet must be valid" ) ,
88- ) ,
89- _ => None ,
94+ ckb_constant:: default_assume_valid_target:: testnet:: default_assume_valid_targets ( ) . iter ( ) . map ( |target|
95+ H256 :: from_str ( & target[ 2 ..] ) . expect ( "default assume_valid_target for testnet must be valid" ) ) . collect :: < Vec < H256 > > ( ) ) ,
96+ _ => None ,
9097 } ;
9198 }
9299
93- if let Some ( ref assume_valid_target) = config. network . sync . assume_valid_target {
94- if assume_valid_target
95- == & H256 :: from_slice ( & [ 0 ; 32 ] ) . expect ( "must parse Zero h256 successful" )
96- {
97- info ! ( "Disable assume valid target since assume_valid_target is zero" ) ;
98- config. network . sync . assume_valid_target = None
99- } else {
100- info ! ( "assume_valid_target set to 0x{}" , assume_valid_target) ;
100+ if let Some ( ref assume_valid_targets) = config. network . sync . assume_valid_targets {
101+ if let Some ( first_target) = assume_valid_targets. first ( ) {
102+ if assume_valid_targets. len ( ) == 1 {
103+ if first_target
104+ == & H256 :: from_slice ( & [ 0 ; 32 ] ) . expect ( "must parse Zero h256 successful" )
105+ {
106+ info ! ( "Disable assume valid targets since assume_valid_targets is zero" ) ;
107+ config. network . sync . assume_valid_targets = None ;
108+ } else {
109+ info ! (
110+ "assume_valid_targets set to {:?}" ,
111+ config. network. sync. assume_valid_targets
112+ ) ;
113+ }
114+ }
101115 }
102116 }
103117
0 commit comments