@@ -90,7 +90,7 @@ impl Adapter for EthereumAdapter {
90
90
) )
91
91
}
92
92
} ;
93
- println ! ( "{:?}" , json_file ) ;
93
+
94
94
let key_file: KeyFile = match serde_json:: from_reader ( json_file) {
95
95
Ok ( data) => data,
96
96
Err ( e) => return Err ( AdapterError :: Configuration ( format ! ( "{}" , e) ) ) ,
@@ -189,7 +189,13 @@ impl Adapter for EthereumAdapter {
189
189
) ) ;
190
190
}
191
191
192
- // @TODO checksum ethereum address
192
+ let validators: Vec < & str > = channel. spec . validators . into_iter ( ) . map ( |v| & v. id [ ..] ) . collect ( ) ;
193
+ let invalid_address_checkum = check_address_checksum ( & validators) ;
194
+ if invalid_address_checkum {
195
+ return Err ( AdapterError :: Configuration (
196
+ "channel.validators: all addresses are checksummed" . to_string ( )
197
+ ) )
198
+ }
193
199
// check if channel is valid
194
200
let is_channel_valid = EthereumAdapter :: is_channel_valid ( & self . config , channel) ;
195
201
if is_channel_valid. is_err ( ) {
@@ -293,6 +299,19 @@ impl Adapter for EthereumAdapter {
293
299
}
294
300
}
295
301
302
+ fn check_address_checksum ( addresses : & [ & str ] ) -> bool {
303
+ let mut invalid_address_checkum = false ;
304
+
305
+ for address in addresses {
306
+ if eth_checksum:: checksum ( address) != * address {
307
+ invalid_address_checkum = true ;
308
+ break ;
309
+ }
310
+ }
311
+
312
+ invalid_address_checkum
313
+ }
314
+
296
315
fn hash_message ( message : & str ) -> [ u8 ; 32 ] {
297
316
let eth = "\x19 Ethereum Signed Message:\n " ;
298
317
let message_length = message. len ( ) ;
0 commit comments