Skip to content

Commit 39c2dbf

Browse files
Check if PolkadotXcm.Sent exists
1 parent dff2d02 commit 39c2dbf

File tree

2 files changed

+112
-116
lines changed

2 files changed

+112
-116
lines changed

β€Ž.snippets/code/tutorials/interoperability/xcm-observability/limited-reserve-transfer-assets.tsβ€Ž

Lines changed: 56 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -96,78 +96,76 @@ async function main() {
9696
decodedCall,
9797
XCM_VERSION,
9898
);
99-
console.log(
100-
"πŸ“¦ Dry run result:",
101-
JSON.stringify(dryRunResult.value, toHuman, 2),
102-
);
99+
console.log("πŸ“¦ Dry run result:", JSON.stringify(dryRunResult.value, toHuman, 2));
103100

104101
const executionResult = dryRunResult.value.execution_result;
105102
if (!dryRunResult.success || !executionResult.success) {
106103
console.error("❌ Local dry run failed!");
107104
} else {
108105
console.log("βœ… Local dry run successful.");
109106

110-
let parachainBlockBefore = await para2Client.getFinalizedBlock();
111-
const extrinsic = await tx.signAndSubmit(aliceSigner);
112-
const block = extrinsic.block;
113-
console.log(`πŸ“¦ Finalised on ${para1Name} in block #${block.number}: ${block.hash}`);
114-
115-
if (!extrinsic.ok) {
116-
const dispatchError = extrinsic.dispatchError;
117-
if (dispatchError.type === "Module") {
118-
const modErr: any = dispatchError.value;
119-
console.error(`❌ Dispatch error in module: ${modErr.type} β†’ ${modErr.value?.type}`);
120-
} else {
121-
console.error("❌ Dispatch error:", JSON.stringify(dispatchError, toHuman, 2));
107+
const emittedEvents: [any] = dryRunResult.value.emitted_events;
108+
const polkadotXcmSentEvent = emittedEvents.find(event =>
109+
event.type === "PolkadotXcm" && event.value.type === "Sent"
110+
);
111+
if (polkadotXcmSentEvent === undefined) {
112+
console.log(`⚠️ PolkadotXcm.Sent is available in runtimes built from stable2503-5 or later.`);
113+
} else {
114+
let parachainBlockBefore = await para2Client.getFinalizedBlock();
115+
const extrinsic = await tx.signAndSubmit(aliceSigner);
116+
const block = extrinsic.block;
117+
console.log(`πŸ“¦ Finalised on ${para1Name} in block #${block.number}: ${block.hash}`);
118+
119+
if (!extrinsic.ok) {
120+
const dispatchError = extrinsic.dispatchError;
121+
if (dispatchError.type === "Module") {
122+
const modErr: any = dispatchError.value;
123+
console.error(`❌ Dispatch error in module: ${modErr.type} β†’ ${modErr.value?.type}`);
124+
} else {
125+
console.error("❌ Dispatch error:", JSON.stringify(dispatchError, toHuman, 2));
126+
}
122127
}
123-
}
124128

125-
const sentEvents = await para1Api.event.PolkadotXcm.Sent.pull();
126-
if (sentEvents.length > 0) {
127-
const sentMessageId = sentEvents[0].payload.message_id.asHex();
128-
console.log(`πŸ“£ Last message Sent on ${para1Name}: ${sentMessageId}`);
129-
130-
let processedMessageId = undefined;
131-
const maxRetries = 8;
132-
for (let i = 0; i < maxRetries; i++) {
133-
const parachainBlockAfter = await para2Client.getFinalizedBlock();
134-
if (parachainBlockAfter.number == parachainBlockBefore.number) {
135-
const waiting = 1_000 * (i + 1);
136-
console.log(`⏳ Waiting ${waiting}ms for ${para2Name} block to be finalised (${i + 1}/${maxRetries})...`);
137-
await new Promise((resolve) => setTimeout(resolve, waiting));
138-
continue;
129+
const sentEvents = await para1Api.event.PolkadotXcm.Sent.pull();
130+
if (sentEvents.length > 0) {
131+
const sentMessageId = sentEvents[0].payload.message_id.asHex();
132+
console.log(`πŸ“£ Last message Sent on ${para1Name}: ${sentMessageId}`);
133+
134+
let processedMessageId = undefined;
135+
const maxRetries = 8;
136+
for (let i = 0; i < maxRetries; i++) {
137+
const parachainBlockAfter = await para2Client.getFinalizedBlock();
138+
if (parachainBlockAfter.number == parachainBlockBefore.number) {
139+
const waiting = 1_000 * (2 ** i);
140+
console.log(`⏳ Waiting ${waiting}ms for ${para2Name} block to be finalised (${i + 1}/${maxRetries})...`);
141+
await new Promise((resolve) => setTimeout(resolve, waiting));
142+
continue;
143+
}
144+
145+
console.log(`πŸ“¦ Finalised on ${para2Name} in block #${parachainBlockAfter.number}: ${parachainBlockAfter.hash}`);
146+
const processedEvents = await para2Api.event.MessageQueue.Processed.pull();
147+
const processingFailedEvents = await para2Api.event.MessageQueue.ProcessingFailed.pull();
148+
if (processedEvents.length > 0) {
149+
processedMessageId = processedEvents[0].payload.id.asHex();
150+
console.log(`πŸ“£ Last message Processed on ${para2Name}: ${processedMessageId}`);
151+
break;
152+
} else if (processingFailedEvents.length > 0) {
153+
processedMessageId = processingFailedEvents[0].payload.id.asHex();
154+
console.log(`πŸ“£ Last message ProcessingFailed on ${para2Name}: ${processedMessageId}`);
155+
break;
156+
} else {
157+
console.log(`πŸ“£ No Processed events on ${para2Name} found.`);
158+
parachainBlockBefore = parachainBlockAfter; // Update the block before to the latest one
159+
}
139160
}
140161

141-
console.log(`πŸ“¦ Finalised on ${para2Name} in block #${parachainBlockAfter.number}: ${parachainBlockAfter.hash}`);
142-
const processedEvents = await para2Api.event.MessageQueue.Processed.pull();
143-
const processingFailedEvents = await para2Api.event.MessageQueue.ProcessingFailed.pull();
144-
if (processedEvents.length > 0) {
145-
processedMessageId = processedEvents[0].payload.id.asHex();
146-
console.log(`πŸ“£ Last message Processed on ${para2Name}: ${processedMessageId}`);
147-
break;
148-
} else if (processingFailedEvents.length > 0) {
149-
processedMessageId = processingFailedEvents[0].payload.id.asHex();
150-
console.log(`πŸ“£ Last message ProcessingFailed on ${para2Name}: ${processedMessageId}`);
151-
break;
162+
if (processedMessageId === sentMessageId) {
163+
console.log("βœ… Processed Message ID matched.");
152164
} else {
153-
console.log(`πŸ“£ No Processed events on ${para2Name} found.`);
154-
parachainBlockBefore = parachainBlockAfter; // Update the block before to the latest one
165+
console.error("❌ Processed Message ID does not match Sent Message ID.");
155166
}
156-
}
157-
158-
if (processedMessageId === sentMessageId) {
159-
console.log("βœ… Processed Message ID matched.");
160167
} else {
161-
console.error("❌ Processed Message ID does not match Sent Message ID.");
162-
}
163-
} else {
164-
console.log(`πŸ“£ No Sent events on ${para1Name} found.`);
165-
166-
const msgSentEvents = await para1Api.event.XcmpQueue.XcmpMessageSent.pull();
167-
if (msgSentEvents.length > 0) {
168-
const messageHash = msgSentEvents[0].payload.message_hash.asHex();
169-
console.log(`πŸ“£ Last message XcmpMessageSent on ${para1Name}: ${messageHash}`);
170-
console.log(`⚠️ PolkadotXcm.Sent is available in runtimes built from stable2503-5 or later.`);
168+
console.log(`πŸ“£ No Sent events on ${para1Name} found.`);
171169
}
172170
}
173171
}

β€Žllms.txtβ€Ž

Lines changed: 56 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -28012,78 +28012,76 @@ async function main() {
2801228012
decodedCall,
2801328013
XCM_VERSION,
2801428014
);
28015-
console.log(
28016-
"πŸ“¦ Dry run result:",
28017-
JSON.stringify(dryRunResult.value, toHuman, 2),
28018-
);
28015+
console.log("πŸ“¦ Dry run result:", JSON.stringify(dryRunResult.value, toHuman, 2));
2801928016

2802028017
const executionResult = dryRunResult.value.execution_result;
2802128018
if (!dryRunResult.success || !executionResult.success) {
2802228019
console.error("❌ Local dry run failed!");
2802328020
} else {
2802428021
console.log("βœ… Local dry run successful.");
2802528022

28026-
let parachainBlockBefore = await para2Client.getFinalizedBlock();
28027-
const extrinsic = await tx.signAndSubmit(aliceSigner);
28028-
const block = extrinsic.block;
28029-
console.log(`πŸ“¦ Finalised on ${para1Name} in block #${block.number}: ${block.hash}`);
28030-
28031-
if (!extrinsic.ok) {
28032-
const dispatchError = extrinsic.dispatchError;
28033-
if (dispatchError.type === "Module") {
28034-
const modErr: any = dispatchError.value;
28035-
console.error(`❌ Dispatch error in module: ${modErr.type} β†’ ${modErr.value?.type}`);
28036-
} else {
28037-
console.error("❌ Dispatch error:", JSON.stringify(dispatchError, toHuman, 2));
28023+
const emittedEvents: [any] = dryRunResult.value.emitted_events;
28024+
const polkadotXcmSentEvent = emittedEvents.find(event =>
28025+
event.type === "PolkadotXcm" && event.value.type === "Sent"
28026+
);
28027+
if (polkadotXcmSentEvent === undefined) {
28028+
console.log(`⚠️ PolkadotXcm.Sent is available in runtimes built from stable2503-5 or later.`);
28029+
} else {
28030+
let parachainBlockBefore = await para2Client.getFinalizedBlock();
28031+
const extrinsic = await tx.signAndSubmit(aliceSigner);
28032+
const block = extrinsic.block;
28033+
console.log(`πŸ“¦ Finalised on ${para1Name} in block #${block.number}: ${block.hash}`);
28034+
28035+
if (!extrinsic.ok) {
28036+
const dispatchError = extrinsic.dispatchError;
28037+
if (dispatchError.type === "Module") {
28038+
const modErr: any = dispatchError.value;
28039+
console.error(`❌ Dispatch error in module: ${modErr.type} β†’ ${modErr.value?.type}`);
28040+
} else {
28041+
console.error("❌ Dispatch error:", JSON.stringify(dispatchError, toHuman, 2));
28042+
}
2803828043
}
28039-
}
2804028044

28041-
const sentEvents = await para1Api.event.PolkadotXcm.Sent.pull();
28042-
if (sentEvents.length > 0) {
28043-
const sentMessageId = sentEvents[0].payload.message_id.asHex();
28044-
console.log(`πŸ“£ Last message Sent on ${para1Name}: ${sentMessageId}`);
28045-
28046-
let processedMessageId = undefined;
28047-
const maxRetries = 8;
28048-
for (let i = 0; i < maxRetries; i++) {
28049-
const parachainBlockAfter = await para2Client.getFinalizedBlock();
28050-
if (parachainBlockAfter.number == parachainBlockBefore.number) {
28051-
const waiting = 1_000 * (i + 1);
28052-
console.log(`⏳ Waiting ${waiting}ms for ${para2Name} block to be finalised (${i + 1}/${maxRetries})...`);
28053-
await new Promise((resolve) => setTimeout(resolve, waiting));
28054-
continue;
28045+
const sentEvents = await para1Api.event.PolkadotXcm.Sent.pull();
28046+
if (sentEvents.length > 0) {
28047+
const sentMessageId = sentEvents[0].payload.message_id.asHex();
28048+
console.log(`πŸ“£ Last message Sent on ${para1Name}: ${sentMessageId}`);
28049+
28050+
let processedMessageId = undefined;
28051+
const maxRetries = 8;
28052+
for (let i = 0; i < maxRetries; i++) {
28053+
const parachainBlockAfter = await para2Client.getFinalizedBlock();
28054+
if (parachainBlockAfter.number == parachainBlockBefore.number) {
28055+
const waiting = 1_000 * (2 ** i);
28056+
console.log(`⏳ Waiting ${waiting}ms for ${para2Name} block to be finalised (${i + 1}/${maxRetries})...`);
28057+
await new Promise((resolve) => setTimeout(resolve, waiting));
28058+
continue;
28059+
}
28060+
28061+
console.log(`πŸ“¦ Finalised on ${para2Name} in block #${parachainBlockAfter.number}: ${parachainBlockAfter.hash}`);
28062+
const processedEvents = await para2Api.event.MessageQueue.Processed.pull();
28063+
const processingFailedEvents = await para2Api.event.MessageQueue.ProcessingFailed.pull();
28064+
if (processedEvents.length > 0) {
28065+
processedMessageId = processedEvents[0].payload.id.asHex();
28066+
console.log(`πŸ“£ Last message Processed on ${para2Name}: ${processedMessageId}`);
28067+
break;
28068+
} else if (processingFailedEvents.length > 0) {
28069+
processedMessageId = processingFailedEvents[0].payload.id.asHex();
28070+
console.log(`πŸ“£ Last message ProcessingFailed on ${para2Name}: ${processedMessageId}`);
28071+
break;
28072+
} else {
28073+
console.log(`πŸ“£ No Processed events on ${para2Name} found.`);
28074+
parachainBlockBefore = parachainBlockAfter; // Update the block before to the latest one
28075+
}
2805528076
}
2805628077

28057-
console.log(`πŸ“¦ Finalised on ${para2Name} in block #${parachainBlockAfter.number}: ${parachainBlockAfter.hash}`);
28058-
const processedEvents = await para2Api.event.MessageQueue.Processed.pull();
28059-
const processingFailedEvents = await para2Api.event.MessageQueue.ProcessingFailed.pull();
28060-
if (processedEvents.length > 0) {
28061-
processedMessageId = processedEvents[0].payload.id.asHex();
28062-
console.log(`πŸ“£ Last message Processed on ${para2Name}: ${processedMessageId}`);
28063-
break;
28064-
} else if (processingFailedEvents.length > 0) {
28065-
processedMessageId = processingFailedEvents[0].payload.id.asHex();
28066-
console.log(`πŸ“£ Last message ProcessingFailed on ${para2Name}: ${processedMessageId}`);
28067-
break;
28078+
if (processedMessageId === sentMessageId) {
28079+
console.log("βœ… Processed Message ID matched.");
2806828080
} else {
28069-
console.log(`πŸ“£ No Processed events on ${para2Name} found.`);
28070-
parachainBlockBefore = parachainBlockAfter; // Update the block before to the latest one
28081+
console.error("❌ Processed Message ID does not match Sent Message ID.");
2807128082
}
28072-
}
28073-
28074-
if (processedMessageId === sentMessageId) {
28075-
console.log("βœ… Processed Message ID matched.");
2807628083
} else {
28077-
console.error("❌ Processed Message ID does not match Sent Message ID.");
28078-
}
28079-
} else {
28080-
console.log(`πŸ“£ No Sent events on ${para1Name} found.`);
28081-
28082-
const msgSentEvents = await para1Api.event.XcmpQueue.XcmpMessageSent.pull();
28083-
if (msgSentEvents.length > 0) {
28084-
const messageHash = msgSentEvents[0].payload.message_hash.asHex();
28085-
console.log(`πŸ“£ Last message XcmpMessageSent on ${para1Name}: ${messageHash}`);
28086-
console.log(`⚠️ PolkadotXcm.Sent is available in runtimes built from stable2503-5 or later.`);
28084+
console.log(`πŸ“£ No Sent events on ${para1Name} found.`);
2808728085
}
2808828086
}
2808928087
}

0 commit comments

Comments
Β (0)