diff --git a/frame/dvm/ethereum/src/lib.rs b/frame/dvm/ethereum/src/lib.rs index 0d3a5d41f4..8f474708ff 100644 --- a/frame/dvm/ethereum/src/lib.rs +++ b/frame/dvm/ethereum/src/lib.rs @@ -961,7 +961,7 @@ impl InternalTransactHandler for Pallet { fn internal_transact(target: H160, input: Vec) -> DispatchResultWithPostInfo { let source = T::PalletId::get().derive_ethereum_address(); let nonce = ::RingAccountBasic::account_basic(&source).nonce; - let transaction = internal_transaction(nonce, target, input); + let transaction = internal_transaction::(nonce, target, input); Self::raw_transact(source, transaction).map(|(reason, used_gas)| match reason { // Only when exit_reason is successful, return Ok(...) @@ -983,7 +983,7 @@ impl InternalTransactHandler for Pallet { sp_io::storage::start_transaction(); let source = T::PalletId::get().derive_ethereum_address(); let nonce = ::RingAccountBasic::account_basic(&source).nonce; - let transaction = internal_transaction(nonce, contract, input); + let transaction = internal_transaction::(nonce, contract, input); let (_, _, info) = Self::execute(source, &transaction, None)?; sp_io::storage::rollback_transaction(); @@ -1064,7 +1064,11 @@ impl From for AdvancedTransaction { } } -pub fn internal_transaction(nonce: U256, target: H160, input: Vec) -> AdvancedTransaction { +pub fn internal_transaction( + nonce: U256, + target: H160, + input: Vec, +) -> AdvancedTransaction { let transaction = ethereum::TransactionV0 { nonce, // Not used, and will be overwritten by None later. @@ -1076,9 +1080,9 @@ pub fn internal_transaction(nonce: U256, target: H160, input: Vec) -> Advanc signature: ethereum::TransactionSignature::new( // Reference https://github.com/ethereum/EIPs/issues/155 // - // But this transaction is sent by darwinia-issuing system from `0x0` - // So ignore signature checking, simply set `chain_id` to `1` - 1 * 2 + 36, + // The internal transaction is sent by specific pallets, no signature + // validation, just create a valid transaction signature is enough. + T::ChainId::get() * 2 + 36, H256::from_slice(&[55u8; 32]), H256::from_slice(&[55u8; 32]), ) diff --git a/frame/dvm/ethereum/src/tests/internal.rs b/frame/dvm/ethereum/src/tests/internal.rs index 301debb988..42af5244d4 100644 --- a/frame/dvm/ethereum/src/tests/internal.rs +++ b/frame/dvm/ethereum/src/tests/internal.rs @@ -258,7 +258,7 @@ fn internal_transaction_should_works() { System::assert_last_event(Event::Ethereum(crate::Event::Executed( ::PalletId::get().derive_ethereum_address(), contract_address, - H256::from_str("0xabdebc2d8a79e4c40d6d66c614bafc2be138d4fc0fd21e28d318f3a032cbee39") + H256::from_str("0xad9426a685cbd9077fc6945dfd294c1d42862950e0ac292ea2e9d34ecf7a9007") .unwrap(), ExitReason::Succeed(ExitSucceed::Returned), ))); @@ -267,7 +267,7 @@ fn internal_transaction_should_works() { System::assert_last_event(Event::Ethereum(crate::Event::Executed( ::PalletId::get().derive_ethereum_address(), contract_address, - H256::from_str("0x2028ce5eef8d4531d4f955c9860b28f9e8cd596b17fea2326d2be49a8d3dc7ac") + H256::from_str("0x85a0a4a2620d7adb3d15a4a295ec4e786b8b5ca115e76a2fe89bb90c876ab694") .unwrap(), ExitReason::Succeed(ExitSucceed::Returned), )));