1c0e57d984
This commit systematically rebrands various references from Parity Technologies' Polkadot/Substrate ecosystem to PezkuwiChain within the kurdistan-sdk. Key changes include: - Updated external repository URLs (zombienet-sdk, parity-db, parity-scale-codec, wasm-instrument) to point to pezkuwichain forks. - Modified internal documentation and code comments to reflect PezkuwiChain naming and structure. - Replaced direct references to with or specific paths within the for XCM, Pezkuwi, and other modules. - Cleaned up deprecated issue and PR references in various and files, particularly in and modules. - Adjusted image and logo URLs in documentation to point to PezkuwiChain assets. - Removed or rephrased comments related to external Polkadot/Substrate PRs and issues. This is a significant step towards fully customizing the SDK for the PezkuwiChain ecosystem.
240 lines
11 KiB
Rust
240 lines
11 KiB
Rust
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
|
|
use super::*;
|
|
|
|
use crate::{self as inbound_queue_v2};
|
|
use pezframe_support::{derive_impl, parameter_types, traits::ConstU32};
|
|
use hex_literal::hex;
|
|
use snowbridge_beacon_primitives::{
|
|
types::deneb, BeaconHeader, ExecutionProof, VersionedExecutionPayloadHeader,
|
|
};
|
|
use snowbridge_core::{ParaId, TokenId};
|
|
use snowbridge_inbound_queue_primitives::{
|
|
v2::{CreateAssetCallInfo, MessageToXcm},
|
|
Log, Proof, VerificationError,
|
|
};
|
|
use pezsp_core::H160;
|
|
use pezsp_runtime::{
|
|
traits::{IdentityLookup, MaybeConvert},
|
|
BuildStorage,
|
|
};
|
|
use pezsp_std::{convert::From, default::Default, marker::PhantomData};
|
|
use xcm::{opaque::latest::ZAGROS_GENESIS_HASH, prelude::*};
|
|
type Block = pezframe_system::mocking::MockBlock<Test>;
|
|
use snowbridge_test_utils::mock_rewards::{BridgeReward, MockRewardLedger};
|
|
pub use snowbridge_test_utils::mock_xcm::{MockXcmExecutor, MockXcmSender};
|
|
|
|
#[cfg(feature = "runtime-benchmarks")]
|
|
use snowbridge_inbound_queue_primitives::EventFixture;
|
|
#[cfg(feature = "runtime-benchmarks")]
|
|
use snowbridge_pallet_inbound_queue_v2_fixtures::register_token::make_register_token_message;
|
|
|
|
pezframe_support::construct_runtime!(
|
|
pub enum Test
|
|
{
|
|
System: pezframe_system::{Pallet, Call, Storage, Event<T>},
|
|
Balances: pezpallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
|
|
InboundQueue: inbound_queue_v2::{Pallet, Call, Storage, Event<T>},
|
|
}
|
|
);
|
|
|
|
pub(crate) const ERROR_ADDRESS: [u8; 20] = hex!("0000000000000000000000000000000000000911");
|
|
|
|
pub type AccountId = pezsp_runtime::AccountId32;
|
|
type Balance = u128;
|
|
|
|
#[derive_impl(pezframe_system::config_preludes::TestDefaultConfig)]
|
|
impl pezframe_system::Config for Test {
|
|
type AccountId = AccountId;
|
|
type Lookup = IdentityLookup<Self::AccountId>;
|
|
type AccountData = pezpallet_balances::AccountData<u128>;
|
|
type Block = Block;
|
|
}
|
|
|
|
parameter_types! {
|
|
pub const ExistentialDeposit: u128 = 1;
|
|
}
|
|
|
|
#[derive_impl(pezpallet_balances::config_preludes::TestDefaultConfig)]
|
|
impl pezpallet_balances::Config for Test {
|
|
type Balance = Balance;
|
|
type ExistentialDeposit = ExistentialDeposit;
|
|
type AccountStore = System;
|
|
}
|
|
|
|
// Mock verifier
|
|
pub struct MockVerifier;
|
|
|
|
impl Verifier for MockVerifier {
|
|
fn verify(log: &Log, _: &Proof) -> Result<(), VerificationError> {
|
|
if log.address == ERROR_ADDRESS.into() {
|
|
return Err(VerificationError::InvalidProof);
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
const GATEWAY_ADDRESS: [u8; 20] = hex!["b1185ede04202fe62d38f5db72f71e38ff3e8305"];
|
|
|
|
#[cfg(feature = "runtime-benchmarks")]
|
|
impl<T: Config> BenchmarkHelper<T> for Test {
|
|
// not implemented since the MockVerifier is used for tests
|
|
fn initialize_storage() -> EventFixture {
|
|
make_register_token_message()
|
|
}
|
|
}
|
|
|
|
pub struct MockTokenIdConvert;
|
|
impl MaybeConvert<TokenId, Location> for MockTokenIdConvert {
|
|
fn maybe_convert(_id: TokenId) -> Option<Location> {
|
|
Some(Location::parent())
|
|
}
|
|
}
|
|
|
|
pub struct MockAccountLocationConverter<AccountId>(PhantomData<AccountId>);
|
|
impl<'a, AccountId: Clone + Clone> TryConvert<&'a AccountId, Location>
|
|
for MockAccountLocationConverter<AccountId>
|
|
{
|
|
fn try_convert(_who: &AccountId) -> Result<Location, &AccountId> {
|
|
Ok(Location::here())
|
|
}
|
|
}
|
|
|
|
parameter_types! {
|
|
pub const EthereumNetwork: NetworkId = Ethereum { chain_id: 11155111 };
|
|
pub const GatewayAddress: H160 = H160(GATEWAY_ADDRESS);
|
|
pub InboundQueueLocation: InteriorLocation = [PalletInstance(84)].into();
|
|
pub SnowbridgeReward: BridgeReward = BridgeReward::Snowbridge;
|
|
pub const CreateAssetCallIndex: [u8;2] = [53, 0];
|
|
pub const SetReservesCallIndex: [u8;2] = [53, 33];
|
|
pub const CreateAssetDeposit: u128 = 10_000_000_000u128;
|
|
pub const LocalNetwork: NetworkId = ByGenesis(ZAGROS_GENESIS_HASH);
|
|
pub CreateAssetCall: CreateAssetCallInfo = CreateAssetCallInfo {
|
|
create_call: CreateAssetCallIndex::get(),
|
|
deposit: CreateAssetDeposit::get(),
|
|
min_balance: 1,
|
|
set_reserves_call: SetReservesCallIndex::get(),
|
|
};
|
|
pub AssetHubParaId: ParaId = ParaId::from(1000);
|
|
}
|
|
|
|
impl inbound_queue_v2::Config for Test {
|
|
type RuntimeEvent = RuntimeEvent;
|
|
type Verifier = MockVerifier;
|
|
type XcmSender = MockXcmSender;
|
|
type XcmExecutor = MockXcmExecutor;
|
|
type GatewayAddress = GatewayAddress;
|
|
type AssetHubParaId = ConstU32<1000>;
|
|
type MessageConverter = MessageToXcm<
|
|
CreateAssetCall,
|
|
EthereumNetwork,
|
|
LocalNetwork,
|
|
GatewayAddress,
|
|
InboundQueueLocation,
|
|
AssetHubParaId,
|
|
MockTokenIdConvert,
|
|
AccountId,
|
|
>;
|
|
#[cfg(feature = "runtime-benchmarks")]
|
|
type Helper = Test;
|
|
type WeightInfo = ();
|
|
type AccountToLocation = MockAccountLocationConverter<AccountId>;
|
|
type RewardKind = BridgeReward;
|
|
type DefaultRewardKind = SnowbridgeReward;
|
|
type RewardPayment = MockRewardLedger;
|
|
}
|
|
|
|
pub fn setup() {
|
|
System::set_block_number(1);
|
|
}
|
|
|
|
pub fn new_tester() -> pezsp_io::TestExternalities {
|
|
let storage = pezframe_system::GenesisConfig::<Test>::default().build_storage().unwrap();
|
|
let mut ext: pezsp_io::TestExternalities = storage.into();
|
|
ext.execute_with(setup);
|
|
ext
|
|
}
|
|
|
|
// Generated from smoketests:
|
|
// cd smoketests
|
|
// ./make-bindings
|
|
// cargo test --test register_token -- --nocapture
|
|
pub fn mock_event_log() -> Log {
|
|
Log {
|
|
// gateway address
|
|
address: hex!("b1185ede04202fe62d38f5db72f71e38ff3e8305").into(),
|
|
topics: vec![
|
|
hex!("550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c").into(),
|
|
],
|
|
// Nonce + Payload
|
|
data: hex!("00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b1185ede04202fe62d38f5db72f71e38ff3e830500000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000009184e72a0000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b8ea8cb425d85536b158d661da1ef0895bb92f1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(),
|
|
}
|
|
}
|
|
|
|
pub fn mock_event_log_invalid_gateway() -> Log {
|
|
Log {
|
|
// gateway address
|
|
address: H160::zero(),
|
|
topics: vec![
|
|
hex!("550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c").into(),
|
|
],
|
|
// Nonce + Payload
|
|
data: hex!("00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b1185ede04202fe62d38f5db72f71e38ff3e830500000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000009184e72a0000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b8ea8cb425d85536b158d661da1ef0895bb92f1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(),
|
|
}
|
|
}
|
|
|
|
pub fn mock_event_log_invalid_message() -> Log {
|
|
Log {
|
|
// gateway address
|
|
address: hex!("b8ea8cb425d85536b158d661da1ef0895bb92f1d").into(),
|
|
topics: vec![
|
|
hex!("b61699d45635baed7500944331ea827538a50dbfef79180f2079e9185da627aa").into(),
|
|
],
|
|
// Nonce + Payload
|
|
data: hex!("000000000000000000000000000000000000000000000000000000b8ea8cb425d85536b158d661da1ef0895bb92f1d000000000000000000000000000000000000000000000000001dcd6500000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000059682f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cdeadbeef774667629726ec1fabebcec0d9139bd1c8f72a23deadbeef0000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(),
|
|
}
|
|
}
|
|
|
|
pub fn mock_execution_proof() -> ExecutionProof {
|
|
ExecutionProof {
|
|
header: BeaconHeader::default(),
|
|
ancestry_proof: None,
|
|
execution_header: VersionedExecutionPayloadHeader::Deneb(deneb::ExecutionPayloadHeader {
|
|
parent_hash: Default::default(),
|
|
fee_recipient: Default::default(),
|
|
state_root: Default::default(),
|
|
receipts_root: Default::default(),
|
|
logs_bloom: vec![],
|
|
prev_randao: Default::default(),
|
|
block_number: 0,
|
|
gas_limit: 0,
|
|
gas_used: 0,
|
|
timestamp: 0,
|
|
extra_data: vec![],
|
|
base_fee_per_gas: Default::default(),
|
|
block_hash: Default::default(),
|
|
transactions_root: Default::default(),
|
|
withdrawals_root: Default::default(),
|
|
blob_gas_used: 0,
|
|
excess_blob_gas: 0,
|
|
}),
|
|
execution_branch: vec![],
|
|
}
|
|
}
|
|
|
|
// Generated from smoketests:
|
|
// cd smoketests
|
|
// ./make-bindings
|
|
// cargo test --test register_token_v2 -- --nocapture
|
|
pub fn mock_event_log_v2() -> Log {
|
|
Log {
|
|
// gateway address
|
|
address: hex!("b1185ede04202fe62d38f5db72f71e38ff3e8305").into(),
|
|
topics: vec![
|
|
hex!("550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c").into(),
|
|
],
|
|
// Nonce + Payload
|
|
data: hex!("00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b1185ede04202fe62d38f5db72f71e38ff3e830500000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000009184e72a0000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000015d3ef798000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000b8ea8cb425d85536b158d661da1ef0895bb92f1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(),
|
|
}
|
|
}
|