Skip to content

Commit

Permalink
add transfer fn of pallet assets to whitelist
Browse files Browse the repository at this point in the history
  • Loading branch information
gitofdeepanshu committed Sep 26, 2023
1 parent 6ca2376 commit ccbeaad
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 1 deletion.
1 change: 1 addition & 0 deletions runtime/astar/src/precompiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ impl Contains<RuntimeCall> for WhitelistedCalls {
calls.iter().all(|call| WhitelistedCalls::contains(call))
}
RuntimeCall::DappsStaking(_) => true,
RuntimeCall::Assets(pallet_assets::Call::transfer { .. }) => true,
_ => false,
}
}
Expand Down
1 change: 1 addition & 0 deletions runtime/local/src/precompiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ impl Contains<RuntimeCall> for WhitelistedCalls {
| RuntimeCall::Utility(pallet_utility::Call::batch_all { calls }) => {
calls.iter().all(|call| WhitelistedCalls::contains(call))
}
RuntimeCall::Assets(pallet_assets::Call::transfer { .. }) => true,
RuntimeCall::DappsStaking(_) => true,
_ => false,
}
Expand Down
1 change: 1 addition & 0 deletions runtime/shibuya/src/precompiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ impl Contains<RuntimeCall> for WhitelistedCalls {
| RuntimeCall::Utility(pallet_utility::Call::batch_all { calls }) => {
calls.iter().all(|call| WhitelistedCalls::contains(call))
}
RuntimeCall::Assets(pallet_assets::Call::transfer { .. }) => true,
RuntimeCall::DappsStaking(_) => true,
_ => false,
}
Expand Down
1 change: 1 addition & 0 deletions runtime/shiden/src/precompiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ impl Contains<RuntimeCall> for WhitelistedCalls {
calls.iter().all(|call| WhitelistedCalls::contains(call))
}
RuntimeCall::DappsStaking(_) => true,
RuntimeCall::Assets(pallet_assets::Call::transfer { .. }) => true,
_ => false,
}
}
Expand Down
24 changes: 23 additions & 1 deletion tests/integration/src/dispatch_precompile_filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use frame_support::{
traits::Contains,
};
use pallet_evm_precompile_dispatch::DispatchValidateT;
use parity_scale_codec::Compact;

/// Whitelisted Calls are defined in the runtime
#[test]
Expand Down Expand Up @@ -77,22 +78,38 @@ fn filter_rejects_non_whitelisted_batch_calls() {
#[test]
fn filter_accepts_whitelisted_calls() {
ExtBuilder::default().build().execute_with(|| {
// Dappstaking call works
let contract = SmartContract::Evm(H160::repeat_byte(0x01));
let stake_call = RuntimeCall::DappsStaking(DappStakingCall::Call::claim_staker {
contract_id: contract.clone(),
});
assert!(WhitelistedCalls::contains(&stake_call));

// Pallet::Assets transfer call works
let transfer_call = RuntimeCall::Assets(pallet_assets::Call::transfer {
id: Compact(0),
target: MultiAddress::Address20(H160::repeat_byte(0x01).into()),
amount: 100,
});
assert!(WhitelistedCalls::contains(&transfer_call));
});
}

#[test]
fn filter_rejects_non_whitelisted_calls() {
ExtBuilder::default().build().execute_with(|| {
// Random call from non whitelisted pallet doesn't work
let transfer_call = RuntimeCall::Balances(BalancesCall::transfer {
dest: MultiAddress::Id(CAT),
value: 100_000_000_000,
});
assert!(!WhitelistedCalls::contains(&transfer_call));

// Only `transfer` call from pallet assets work
// Other random call from Pallet Assets doesn't work
let thaw_asset_call =
RuntimeCall::Assets(pallet_assets::Call::thaw_asset { id: Compact(0) });
assert!(!WhitelistedCalls::contains(&thaw_asset_call));
})
}

Expand All @@ -106,8 +123,13 @@ fn filter_accepts_whitelisted_batch_all_calls() {
let inner_call2 = RuntimeCall::DappsStaking(DappStakingCall::Call::claim_staker {
contract_id: contract.clone(),
});
let transfer_call = RuntimeCall::Assets(pallet_assets::Call::transfer {
id: Compact(0),
target: MultiAddress::Address20(H160::repeat_byte(0x01).into()),
amount: 100,
});
let call = RuntimeCall::Utility(UtilityCall::batch_all {
calls: vec![inner_call1, inner_call2],
calls: vec![inner_call1, inner_call2, transfer_call],
});
assert!(WhitelistedCalls::contains(&call));
});
Expand Down

0 comments on commit ccbeaad

Please sign in to comment.