mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 12:51:02 +00:00
XCM: Tools for uniquely referencing messages (#7234)
* Tools for unique topic references * Formatting * Naming * Repot into routing.rs. * More things done * Universal Exporter supports topic-as-reference * Some tests for the topic routing * More tests * Paid bridge tests * Add message ID to sending events * Formatting * fix and integrate into test nets * Move DenyThenTry and friend from Cumulus * Append SetTopic rather than prepend * Docs * Docs * Work with new ProcessMessage ID API * Formatting * Fix build * Fixes * Formatting * Update xcm/xcm-builder/src/barriers.rs Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com> * Update xcm/xcm-builder/src/routing.rs Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com> * Docs * Rename message_hash * Formatting * ".git/.scripts/commands/fmt/fmt.sh" * Rename * Another Rename * ".git/.scripts/commands/fmt/fmt.sh" * ".git/.scripts/commands/fmt/fmt.sh" * Update xcm/xcm-builder/src/routing.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> --------- Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com> Co-authored-by: command-bot <> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
This commit is contained in:
@@ -27,7 +27,10 @@ use polkadot_parachain::primitives::Id as ParaId;
|
||||
use sp_runtime::traits::{AccountIdConversion, BlakeTwo256, Hash};
|
||||
use xcm::{latest::QueryResponseInfo, prelude::*};
|
||||
use xcm_builder::AllowKnownQueryResponses;
|
||||
use xcm_executor::{traits::ShouldExecute, XcmExecutor};
|
||||
use xcm_executor::{
|
||||
traits::{Properties, ShouldExecute},
|
||||
XcmExecutor,
|
||||
};
|
||||
|
||||
const ALICE: AccountId = AccountId::new([0u8; 32]);
|
||||
const BOB: AccountId = AccountId::new([1u8; 32]);
|
||||
@@ -101,7 +104,11 @@ fn report_outcome_notify_works() {
|
||||
0,
|
||||
Response::ExecutionResult(None),
|
||||
)),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Notified(0, 4, 2)),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Notified {
|
||||
query_id: 0,
|
||||
pallet_index: 4,
|
||||
call_index: 2
|
||||
}),
|
||||
]
|
||||
);
|
||||
assert_eq!(crate::Queries::<Test>::iter().collect::<Vec<_>>(), vec![]);
|
||||
@@ -157,10 +164,10 @@ fn report_outcome_works() {
|
||||
assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000)));
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::ResponseReady(
|
||||
0,
|
||||
Response::ExecutionResult(None),
|
||||
))
|
||||
RuntimeEvent::XcmPallet(crate::Event::ResponseReady {
|
||||
query_id: 0,
|
||||
response: Response::ExecutionResult(None),
|
||||
})
|
||||
);
|
||||
|
||||
let response = Some((Response::ExecutionResult(None), 1));
|
||||
@@ -206,12 +213,12 @@ fn custom_querier_works() {
|
||||
assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000)));
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier(
|
||||
AccountId32 { network: None, id: ALICE.into() }.into(),
|
||||
0,
|
||||
querier.clone(),
|
||||
None,
|
||||
)),
|
||||
RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier {
|
||||
origin: AccountId32 { network: None, id: ALICE.into() }.into(),
|
||||
query_id: 0,
|
||||
expected_querier: querier.clone(),
|
||||
maybe_actual_querier: None,
|
||||
}),
|
||||
);
|
||||
|
||||
// Supplying the wrong querier will also fail
|
||||
@@ -232,12 +239,12 @@ fn custom_querier_works() {
|
||||
assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000)));
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier(
|
||||
AccountId32 { network: None, id: ALICE.into() }.into(),
|
||||
0,
|
||||
querier.clone(),
|
||||
Some(MultiLocation::here()),
|
||||
)),
|
||||
RuntimeEvent::XcmPallet(crate::Event::InvalidQuerier {
|
||||
origin: AccountId32 { network: None, id: ALICE.into() }.into(),
|
||||
query_id: 0,
|
||||
expected_querier: querier.clone(),
|
||||
maybe_actual_querier: Some(MultiLocation::here()),
|
||||
}),
|
||||
);
|
||||
|
||||
// Multiple failures should not have changed the query state
|
||||
@@ -257,10 +264,10 @@ fn custom_querier_works() {
|
||||
assert_eq!(r, Outcome::Complete(Weight::from_parts(1_000, 1_000)));
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::ResponseReady(
|
||||
0,
|
||||
Response::ExecutionResult(None),
|
||||
))
|
||||
RuntimeEvent::XcmPallet(crate::Event::ResponseReady {
|
||||
query_id: 0,
|
||||
response: Response::ExecutionResult(None),
|
||||
})
|
||||
);
|
||||
|
||||
let response = Some((Response::ExecutionResult(None), 1));
|
||||
@@ -285,6 +292,7 @@ fn send_works() {
|
||||
buy_execution((Parent, SEND_AMOUNT)),
|
||||
DepositAsset { assets: AllCounted(1).into(), beneficiary: sender.clone() },
|
||||
]);
|
||||
|
||||
let versioned_dest = Box::new(RelayLocation::get().into());
|
||||
let versioned_message = Box::new(VersionedXcm::from(message.clone()));
|
||||
assert_ok!(XcmPallet::send(
|
||||
@@ -292,19 +300,20 @@ fn send_works() {
|
||||
versioned_dest,
|
||||
versioned_message
|
||||
));
|
||||
assert_eq!(
|
||||
sent_xcm(),
|
||||
vec![(
|
||||
Here.into(),
|
||||
Xcm(Some(DescendOrigin(sender.clone().try_into().unwrap()))
|
||||
.into_iter()
|
||||
.chain(message.0.clone().into_iter())
|
||||
.collect())
|
||||
)],
|
||||
);
|
||||
let sent_message = Xcm(Some(DescendOrigin(sender.clone().try_into().unwrap()))
|
||||
.into_iter()
|
||||
.chain(message.0.clone().into_iter())
|
||||
.collect());
|
||||
let id = fake_message_hash(&sent_message);
|
||||
assert_eq!(sent_xcm(), vec![(Here.into(), sent_message)]);
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Sent(sender, RelayLocation::get(), message))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Sent {
|
||||
origin: sender,
|
||||
destination: RelayLocation::get(),
|
||||
message,
|
||||
message_id: id,
|
||||
})
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -376,7 +385,7 @@ fn teleport_assets_works() {
|
||||
let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap();
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -420,7 +429,7 @@ fn limited_teleport_assets_works() {
|
||||
let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap();
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -462,7 +471,7 @@ fn unlimited_teleport_assets_works() {
|
||||
);
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -509,7 +518,7 @@ fn reserve_transfer_assets_works() {
|
||||
let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap();
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -557,7 +566,7 @@ fn limited_reserve_transfer_assets_works() {
|
||||
let _check_v2_ok: xcm::v2::Xcm<()> = versioned_sent.try_into().unwrap();
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -603,7 +612,7 @@ fn unlimited_reserve_transfer_assets_works() {
|
||||
);
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -635,7 +644,7 @@ fn execute_withdraw_to_deposit_works() {
|
||||
assert_eq!(Balances::total_balance(&BOB), SEND_AMOUNT);
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(weight)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome: Outcome::Complete(weight) })
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -670,10 +679,14 @@ fn trapped_assets_can_be_claimed() {
|
||||
assert_eq!(
|
||||
last_events(2),
|
||||
vec![
|
||||
RuntimeEvent::XcmPallet(crate::Event::AssetsTrapped(hash.clone(), source, vma)),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Complete(
|
||||
BaseXcmWeight::get() * 5
|
||||
)))
|
||||
RuntimeEvent::XcmPallet(crate::Event::AssetsTrapped {
|
||||
hash: hash.clone(),
|
||||
origin: source,
|
||||
assets: vma
|
||||
}),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted {
|
||||
outcome: Outcome::Complete(BaseXcmWeight::get() * 5)
|
||||
}),
|
||||
]
|
||||
);
|
||||
assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE - SEND_AMOUNT);
|
||||
@@ -707,13 +720,8 @@ fn trapped_assets_can_be_claimed() {
|
||||
]))),
|
||||
weight
|
||||
));
|
||||
assert_eq!(
|
||||
last_event(),
|
||||
RuntimeEvent::XcmPallet(crate::Event::Attempted(Outcome::Incomplete(
|
||||
BaseXcmWeight::get(),
|
||||
XcmError::UnknownClaim
|
||||
)))
|
||||
);
|
||||
let outcome = Outcome::Incomplete(BaseXcmWeight::get(), XcmError::UnknownClaim);
|
||||
assert_eq!(last_event(), RuntimeEvent::XcmPallet(crate::Event::Attempted { outcome }));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -768,7 +776,7 @@ fn basic_subscription_works() {
|
||||
&remote,
|
||||
message.inner_mut(),
|
||||
weight,
|
||||
&mut Weight::zero(),
|
||||
&mut Properties { weight_credit: Weight::zero(), message_id: None },
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user