Open bkontur opened 22 hours ago
Description contains problem on the sending side, when workaround with force_xcm_version(location, 5)
is used then it bubbles to the problem on the receiving side Corrupt
error, where ProcessXcmMessage
cannot decode the received XCM:
let versioned_message = VersionedXcm::<Call>::decode(&mut &message[..]).map_err(|e| {
log::trace!(
target: LOG_TARGET,
"`VersionedXcm` failed to decode: {e:?}",
);
ProcessMessageError::Corrupt
})?;
cc: @georgepisaltu This is exactly what you reported to me before cc: @franciscoaguirre so now we have both parts of the one problem :)
sorry, force_xcm_version(location, 5)
is not a workaround and Corrupt
is ok, because that is the point, we want to update new blob with xcmv4->xcmv5, but the actual runtime has 4 :)
so ignore my comment above
E.g. Westend is sending
Transact
to the child: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fwestend-rpc.polkadot.io#/explorer/query/0x01cd07a4ede58f34d76422febdf1adc28669c1a2ed5fa5ccaa7d15a7d1bfb0a5take_decoded()?.get_dispatch_info
is a problem forTransact
, because on the sending chain we don't know what isRuntimeCall
so decoding fails here for()
:For the real usage, we use e.g. xcm router which expects
Xcm<()>
:and the
wrap_version
ends here, because it tries to decode withRuntimeCall = ()
"