diff --git a/packages/api/src/base/Decorate.ts b/packages/api/src/base/Decorate.ts index e0764c6fbc..6c2975ee3d 100644 --- a/packages/api/src/base/Decorate.ts +++ b/packages/api/src/base/Decorate.ts @@ -344,7 +344,11 @@ export default abstract class Decorate extends Events } private decorateStorageRange (decorated: QueryableStorageEntry, args: [Arg?, Arg?], range: [Hash, Hash?]): Observable<[Hash, Codec][]> { - const outputType = unwrapStorageType(decorated.creator.meta.type); + let outputType: any = unwrapStorageType(decorated.creator.meta.type); + + if (decorated.creator.meta.modifier.isOptional) { + outputType = `Option<${outputType}>`; + } return this._rpcCore.state .queryStorage([decorated.key(...args)], ...range) @@ -353,7 +357,7 @@ export default abstract class Decorate extends Events .filter((change): change is StorageChangeSet => !!change.changes.length) .map(({ block, changes: [[, value]] }): [Hash, Codec] => [ block, - this.createType(outputType, value.unwrapOrDefault()) + this.createType(outputType, value.isSome ? value.unwrap().toHex() : undefined) ]) )); } @@ -464,7 +468,7 @@ export default abstract class Decorate extends Events map(([keys, values]): [StorageKey, Codec][] => keys.map((key, index): [StorageKey, Codec] => [ key, - this.createType(outputType, values[index].unwrapOr(undefined)) + this.createType(outputType, values[index].isSome ? values[index].unwrap().toHex() : undefined) ]) ) ); diff --git a/packages/api/test/api.spec.ts b/packages/api/test/api.spec.ts index 94f64155d0..f6a7210afa 100644 --- a/packages/api/test/api.spec.ts +++ b/packages/api/test/api.spec.ts @@ -17,6 +17,15 @@ describe.skip('misc quick tests', (): void => { )); }); + it.skip('handles map entries', async (): Promise => { + const provider = new WsProvider('wss://kusama-rpc.polkadot.io'); + const api = await new ApiPromise({ provider }).isReady; + + console.error(JSON.stringify( + await api.query.indices.accounts.entries() + )); + }); + it.skip('handles doublemap entries', async (): Promise => { const api = await new ApiPromise().isReady; const activeEra = await api.query.staking.activeEra();