diff --git a/common/changes/@subsquid/substrate-data/master_2024-07-23-12-11.json b/common/changes/@subsquid/substrate-data/master_2024-07-23-12-11.json new file mode 100644 index 000000000..1f44bc57c --- /dev/null +++ b/common/changes/@subsquid/substrate-data/master_2024-07-23-12-11.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@subsquid/substrate-data", + "comment": "ignore events from `Migrations` pallet while parsing calls", + "type": "patch" + } + ], + "packageName": "@subsquid/substrate-data" +} \ No newline at end of file diff --git a/substrate/substrate-data/src/parsing/call/parser.ts b/substrate/substrate-data/src/parsing/call/parser.ts index c09f5b498..ad2415b1f 100644 --- a/substrate/substrate-data/src/parsing/call/parser.ts +++ b/substrate/substrate-data/src/parsing/call/parser.ts @@ -326,7 +326,18 @@ export class CallParser { while (this.eventPos >= 0) { let event = this.events[this.eventPos] if (event.phase === 'ApplyExtrinsic') { - if (event.extrinsicIndex !== this.extrinsic.index) return + if (event.extrinsicIndex !== this.extrinsic.index) { + if (event.name.startsWith('Migrations.')) { + let index = assertNotNull(event.extrinsicIndex) + // Besides `Migrations.*` events there can be more parachain-defined events, + // so we skip all events related to the "phantom" extrinsic. + this.skipExtrinsicEvents(index) + continue + } else { + return + } + } + this.eventPos -= 1 return event } else { @@ -334,4 +345,15 @@ export class CallParser { } } } + + private skipExtrinsicEvents(extrinsicIndex: number) { + while (true) { + let event = this.events[this.eventPos] + if (event.extrinsicIndex == extrinsicIndex) { + this.eventPos -= 1 + } else { + break + } + } + } }