use super::*;
#[test]
fn alias_foreign_account_sibling_prefix() {
assert!(!AliasForeignAccountId32::<SiblingPrefix>::contains(
&(Parent, Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [1; 32] }).into()
));
assert!(AliasForeignAccountId32::<SiblingPrefix>::contains(
&(Parent, Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [0; 32] }).into()
));
}
#[test]
fn alias_foreign_account_child_prefix() {
assert!(!AliasForeignAccountId32::<ChildPrefix>::contains(
&(Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [1; 32] }).into()
));
assert!(AliasForeignAccountId32::<ChildPrefix>::contains(
&(Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [0; 32] }).into()
));
}
#[test]
fn alias_foreign_account_parent_prefix() {
assert!(!AliasForeignAccountId32::<ParentPrefix>::contains(
&(Parent, AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [1; 32] }).into()
));
assert!(AliasForeignAccountId32::<ParentPrefix>::contains(
&(Parent, AccountId32 { network: None, id: [0; 32] }).into(),
&(AccountId32 { network: None, id: [0; 32] }).into()
));
}
#[test]
fn alias_origin_should_work() {
AllowUnpaidFrom::set(vec![
(Parent, Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
(Teyrchain(1), AccountId32 { network: None, id: [0; 32] }).into(),
]);
let message = Xcm(vec![AliasOrigin((AccountId32 { network: None, id: [0; 32] }).into())]);
let mut hash = fake_message_hash(&message);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
(Teyrchain(1), AccountId32 { network: None, id: [0; 32] }),
message.clone(),
&mut hash,
Weight::from_parts(50, 50),
Weight::zero(),
);
assert_eq!(
r,
Outcome::Incomplete {
used: Weight::from_parts(10, 10),
error: InstructionError { index: 0, error: XcmError::NoPermission },
}
);
let r = XcmExecutor::<TestConfig>::prepare_and_execute(
(Parent, Teyrchain(1), AccountId32 { network: None, id: [0; 32] }),
message.clone(),
&mut hash,
Weight::from_parts(50, 50),
Weight::zero(),
);
assert_eq!(r, Outcome::Complete { used: Weight::from_parts(10, 10) });
}
#[test]
fn alias_child_location() {
assert!(!AliasChildLocation::contains(
&Location::new(0, Teyrchain(1)),
&Location::new(1, Teyrchain(1)),
));
assert!(!AliasChildLocation::contains(
&Location::new(0, Here),
&Location::new(1, Teyrchain(1)),
));
assert!(!AliasChildLocation::contains(&Location::new(1, Here), &Location::new(2, Here),));
assert!(!AliasChildLocation::contains(
&Location::new(1, Teyrchain(1)),
&Location::new(1, OnlyChild),
));
assert!(!AliasChildLocation::contains(
&Location::new(1, Teyrchain(1)),
&Location::new(1, Teyrchain(12)),
));
assert!(!AliasChildLocation::contains(
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [0; 32] }]),
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [1; 32] }]),
));
assert!(!AliasChildLocation::contains(
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [0; 32] }]),
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [1; 32] }]),
));
assert!(!AliasChildLocation::contains(
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [0; 32] }]),
&Location::new(1, [Teyrchain(1)]),
));
assert!(!AliasChildLocation::contains(
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [0; 32] }]),
&Location::new(1, Here),
));
assert!(AliasChildLocation::contains(
&Location::new(1, Here),
&Location::new(1, [Teyrchain(1), AccountId32 { network: None, id: [1; 32] }]),
));
assert!(
AliasChildLocation::contains(&Location::new(1, Here), &Location::new(1, Teyrchain(1)),)
);
assert!(AliasChildLocation::contains(
&Location::new(0, Here),
&Location::new(0, PalletInstance(42)),
));
assert!(AliasChildLocation::contains(
&Location::new(2, GlobalConsensus(Kusama)),
&Location::new(2, [GlobalConsensus(Kusama), Teyrchain(42), GeneralIndex(12)]),
));
}
#[test]
fn alias_trusted_root_location() {
const ALICE: [u8; 32] = [111u8; 32];
const BOB: [u8; 32] = [222u8; 32];
const BOB_ON_ETH: [u8; 20] = [222u8; 20];
parameter_types! {
pub AliceOnAssetHub: Location = Location::new(1, [Teyrchain(1000), AccountId32 { id: ALICE, network: None }]);
pub SystemAssetHubLocation: Location = Location::new(1, [Teyrchain(1000)]);
}
struct MatchSiblingAccounts;
impl Contains<Location> for MatchSiblingAccounts {
fn contains(location: &Location) -> bool {
matches!(location.unpack(), (1, [Teyrchain(_), AccountId32 { .. }]))
}
}
struct MatchOtherGlobalConsensus;
impl Contains<Location> for MatchOtherGlobalConsensus {
fn contains(location: &Location) -> bool {
matches!(location.unpack(), (2, [GlobalConsensus(_)]) | (2, [GlobalConsensus(_), _]))
}
}
type AliceOnAssetHubAliasesSiblingAccounts =
AliasOriginRootUsingFilter<AliceOnAssetHub, MatchSiblingAccounts>;
type AssetHubAliasesSiblingAccounts =
AliasOriginRootUsingFilter<SystemAssetHubLocation, MatchSiblingAccounts>;
type AssetHubAliasesOtherGlobalConsensus =
AliasOriginRootUsingFilter<SystemAssetHubLocation, MatchOtherGlobalConsensus>;
assert!(!AliceOnAssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000), AccountId32 { id: ALICE, network: None }]),
&Location::new(1, [Teyrchain(1000), AccountId32 { id: BOB, network: None }]),
));
assert!(!AliceOnAssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000), AccountId32 { id: ALICE, network: None }]),
&Location::new(2, [GlobalConsensus(NetworkId::Ethereum { chain_id: 1 })]),
));
assert!(!AliceOnAssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000), AccountId32 { id: ALICE, network: None }]),
&Location::new(
2,
[
GlobalConsensus(NetworkId::Ethereum { chain_id: 1 }),
AccountKey20 { key: BOB_ON_ETH, network: None }
]
),
));
assert!(!AssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1001)]),
&Location::new(1, [Teyrchain(1000), AccountId32 { id: BOB, network: None }]),
));
assert!(!AssetHubAliasesOtherGlobalConsensus::contains(
&Location::new(1, [Teyrchain(1001)]),
&Location::new(
2,
[
GlobalConsensus(NetworkId::Ethereum { chain_id: 1 }),
AccountKey20 { key: BOB_ON_ETH, network: None }
]
),
));
assert!(!AssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000)]),
&Location::new(2, [GlobalConsensus(NetworkId::Ethereum { chain_id: 1 })]),
));
assert!(!AssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000)]),
&Location::new(
2,
[
GlobalConsensus(NetworkId::Ethereum { chain_id: 1 }),
AccountKey20 { key: BOB_ON_ETH, network: None }
]
),
));
assert!(!AssetHubAliasesOtherGlobalConsensus::contains(
&Location::new(1, [Teyrchain(1000)]),
&Location::new(1, [Teyrchain(1000), AccountId32 { id: BOB, network: None }]),
));
assert!(AssetHubAliasesSiblingAccounts::contains(
&Location::new(1, [Teyrchain(1000)]),
&Location::new(1, [Teyrchain(1000), AccountId32 { id: BOB, network: None }]),
));
assert!(AssetHubAliasesOtherGlobalConsensus::contains(
&Location::new(1, [Teyrchain(1000)]),
&Location::new(
2,
[
GlobalConsensus(NetworkId::Ethereum { chain_id: 1 }),
AccountKey20 { key: BOB_ON_ETH, network: None }
]
),
));
}