Skip to content

Commit 5fac4d9

Browse files
authored
Add additional isCodec checks to error/event .is (#4840)
1 parent baa2caa commit 5fac4d9

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Changes:
66

77
- Adjust extrinsic inspect for signed/unsigned
88
- Add support for `mmr_generateBatchProof` RPC
9+
- Add additional `isCodec` checks to error/event `.is`
910

1011

1112
## 8.4.2 May 15, 2022

packages/types/src/metadata/decorate/errors/index.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { DispatchErrorModule, DispatchErrorModuleU8a, MetadataLatest, SiFie
77
import type { PortableRegistry } from '../../../metadata';
88
import type { Errors, IsError } from '../types';
99

10-
import { isU8a, lazyMethod, objectSpread, stringCamelCase } from '@polkadot/util';
10+
import { isCodec, isU8a, lazyMethod, objectSpread, stringCamelCase } from '@polkadot/util';
1111

1212
import { lazyVariants } from '../../../create/lazy';
1313
import { objectNameToString } from '../util';
@@ -39,11 +39,14 @@ export function decorateErrors (registry: Registry, { lookup, pallets }: Metadat
3939

4040
lazyMethod(result, stringCamelCase(name), () =>
4141
lazyVariants(lookup, errors.unwrap(), objectNameToString, (variant: SiVariant): IsError => ({
42-
is: ({ error, index }: DispatchErrorModule | DispatchErrorModuleU8a) =>
43-
index.eq(sectionIndex) && (
44-
isU8a(error)
45-
? error[0] === variant.index.toNumber()
46-
: error.eq(variant.index)
42+
// We sprinkle in isCodec & isU8a to ensure we are dealing with the correct objects
43+
is: (errorMod: DispatchErrorModule | DispatchErrorModuleU8a) =>
44+
isCodec(errorMod) &&
45+
isCodec(errorMod.index) &&
46+
errorMod.index.eq(sectionIndex) && (
47+
isU8a(errorMod.error)
48+
? errorMod.error[0] === variant.index.toNumber()
49+
: isCodec(errorMod.error) && errorMod.error.eq(variant.index)
4750
),
4851
meta: registry.createTypeUnsafe('ErrorMetadataLatest', [variantToMeta(lookup, variant)])
4952
}))

packages/types/src/metadata/decorate/events/index.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
// Copyright 2017-2022 @polkadot/types authors & contributors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import type { AnyTuple } from '@polkadot/types-codec/types';
5-
import type { IEvent } from '../../../types';
6-
74
import rpcMetadata from '@polkadot/types-support/metadata/static-substrate';
85

96
import { TypeRegistry } from '../../../create';
@@ -42,7 +39,7 @@ describe('decorateEvents', (): void => {
4239

4340
it('should check against a specific error', (): void => {
4441
expect(
45-
events.system.ExtrinsicSuccess.is({ index: [0, 0] } as unknown as IEvent<AnyTuple>)
42+
events.system.ExtrinsicSuccess.is(registry.createType('Event', { index: [0, 0] }))
4643
).toBe(true);
4744
});
4845
});

packages/types/src/metadata/decorate/events/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { MetadataLatest, PalletMetadataLatest, SiVariant } from '../../../i
66
import type { IEvent } from '../../../types';
77
import type { Events, IsEvent } from '../types';
88

9-
import { lazyMethod, stringCamelCase } from '@polkadot/util';
9+
import { isCodec, isU8a, lazyMethod, stringCamelCase } from '@polkadot/util';
1010

1111
import { lazyVariants } from '../../../create/lazy';
1212
import { variantToMeta } from '../errors';
@@ -27,7 +27,10 @@ export function decorateEvents (registry: Registry, { lookup, pallets }: Metadat
2727

2828
lazyMethod(result, stringCamelCase(name), () =>
2929
lazyVariants(lookup, events.unwrap(), objectNameToString, (variant: SiVariant): IsEvent<AnyTuple> => ({
30+
// We sprinkle in isCodec & isU8a to ensure we are dealing with the correct objects
3031
is: <T extends AnyTuple> (eventRecord: IEvent<AnyTuple>): eventRecord is IEvent<T> =>
32+
isCodec(eventRecord) &&
33+
isU8a(eventRecord.index) &&
3134
sectionIndex === eventRecord.index[0] &&
3235
variant.index.eq(eventRecord.index[1]),
3336
meta: registry.createTypeUnsafe('EventMetadataLatest', [variantToMeta(lookup, variant)])

0 commit comments

Comments
 (0)