diff --git a/node/src/chainspec/testnet.rs b/node/src/chainspec/testnet.rs index 92e49b003..a8ca984de 100644 --- a/node/src/chainspec/testnet.rs +++ b/node/src/chainspec/testnet.rs @@ -129,7 +129,7 @@ pub fn local_testnet_config(chain_id: u64) -> Result { testnet::get_evm_balance_distribution(), ]), testnet::get_substrate_balance_distribution(), - develop::get_evm_claims(), + develop::get_local_claims(), true, ) }, @@ -258,11 +258,13 @@ fn testnet_genesis( .collect::>(); let num_endowed_accounts = endowed_accounts.len(); - let claims: Vec<(MultiAddress, Balance, Option)> = endowed_accounts + + let claims_list: Vec<(MultiAddress, Balance, Option)> = endowed_accounts .iter() .map(|x| (MultiAddress::Native(x.clone()), ENDOWMENT, Some(StatementKind::Regular))) - .chain(claims.into_iter().map(|(a, b)| (a, b, Some(StatementKind::Regular)))) + .chain(claims.clone().into_iter().map(|(a, b)| (a, b, Some(StatementKind::Regular)))) .collect(); + let vesting_claims: Vec<( MultiAddress, BoundedVec<(Balance, Balance, BlockNumber), MaxVestingSchedules>, @@ -273,6 +275,11 @@ fn testnet_genesis( bounded_vec.try_push((ENDOWMENT, ENDOWMENT, 0)).unwrap(); (MultiAddress::Native(x.clone()), bounded_vec) }) + .chain(claims.into_iter().map(|(a, b)| { + let mut bounded_vec = BoundedVec::new(); + bounded_vec.try_push((b, b, 0)).unwrap(); + (a, bounded_vec) + })) .collect(); RuntimeGenesisConfig { @@ -355,7 +362,7 @@ fn testnet_genesis( phantom: PhantomData, }, claims: ClaimsConfig { - claims, + claims: claims_list, vesting: vesting_claims, expiry: Some(( 200u64, diff --git a/node/src/distributions/develop.rs b/node/src/distributions/develop.rs index d0c735456..fa1e57d9c 100644 --- a/node/src/distributions/develop.rs +++ b/node/src/distributions/develop.rs @@ -18,9 +18,10 @@ use std::str::FromStr; use fp_evm::GenesisAccount; use pallet_airdrop_claims::MultiAddress; use sp_core::{H160, U256}; +use sp_runtime::AccountId32; use tangle_primitives::Balance; -pub fn get_evm_claims() -> Vec<(MultiAddress, Balance)> { +pub fn get_local_claims() -> Vec<(MultiAddress, Balance)> { vec![ // Test account with a simple menmonic // Mnemonic: "test test test test test test test test test test test junk" @@ -34,6 +35,30 @@ pub fn get_evm_claims() -> Vec<(MultiAddress, Balance)> { ), 1_000_000_000_000_000_000_000_000u128, ), + ( + MultiAddress::EVM( + H160::from_str("2DFA35bd8C59C38FB3eC4e71b0106160E130A40E") + .expect("internal H160 is valid; qed") + .into(), + ), + 1_000_000_000_000_000_000_000_000u128, + ), + ( + MultiAddress::Native( + AccountId32::from_str("5EbkKKTdRJzP1j3aM3S7q178du6tW7ZVWK9Dtjx9CbTFEpGf") + .expect("internal AccountId32 is valid; qed") + .into(), + ), + 1_000_000_000_000_000_000_000_000u128, + ), + ( + MultiAddress::Native( + AccountId32::from_str("5DLXgUoVVeCZKHduaVhkH4RvLcyG1GdQwLqYLd4aFuYX1qve") + .expect("internal AccountId32 is valid; qed") + .into(), + ), + 1_000_000_000_000_000_000_000_000u128, + ), ] } diff --git a/pallets/claims/src/lib.rs b/pallets/claims/src/lib.rs index 53068c877..ce25103a8 100644 --- a/pallets/claims/src/lib.rs +++ b/pallets/claims/src/lib.rs @@ -559,14 +559,11 @@ impl Pallet { // Constructs the message that PolkadotJS would sign. fn polkadotjs_signable_message(what: &[u8], extra: &[u8]) -> Vec { let mut v = Vec::new(); - let polkadotjs_prefix = b""; - let polkadotjs_suffix = b""; let prefix = T::Prefix::get(); - v.extend_from_slice(polkadotjs_prefix); + v.extend_from_slice(prefix); v.extend_from_slice(what); v.extend_from_slice(extra); - v.extend_from_slice(polkadotjs_suffix); v } @@ -579,6 +576,7 @@ impl Pallet { extra: &[u8], ) -> Option { let msg = keccak_256(&Self::polkadotjs_signable_message(what, extra)); + let public: Public = match addr.clone() { MultiAddress::EVM(_) => return None, MultiAddress::Native(a) => { @@ -587,9 +585,25 @@ impl Pallet { Public(bytes) }, }; + match sr25519_verify(&s.0, &msg, &public) { true => Some(addr), - false => None, + false => { + // If the signature verification fails, we try to wrap the hashed msg in a + // `` tag and try again. + let polkadotjs_prefix = b""; + let polkadotjs_suffix = b""; + + let mut wrapped_msg = Vec::new(); + wrapped_msg.extend_from_slice(polkadotjs_prefix); + wrapped_msg.extend_from_slice(&msg); + wrapped_msg.extend_from_slice(polkadotjs_suffix); + + match sr25519_verify(&s.0, &wrapped_msg, &public) { + true => Some(addr), + false => None, + } + }, } }