polkadot-api 2.1.8 → 3.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +1 -1
- package/dist/reexports/ws.d.ts +1 -1
- package/dist/src/client.js +79 -7
- package/dist/src/client.js.map +1 -1
- package/dist/src/compatibility/compat-ctx.js +3 -8
- package/dist/src/compatibility/compat-ctx.js.map +1 -1
- package/dist/src/compatibility/compatibility.js +1 -2
- package/dist/src/compatibility/compatibility.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/offline.js +71 -22
- package/dist/src/offline.js.map +1 -1
- package/dist/src/static-apis.js +3 -3
- package/dist/src/static-apis.js.map +1 -1
- package/dist/src/storage.js.map +1 -1
- package/dist/src/tx/tx.js +50 -66
- package/dist/src/tx/tx.js.map +1 -1
- package/dist/{types-BJAMtGIT.d.ts → types-CoK0ySKE.d.ts} +72 -204
- package/dist/umd/index.min.js +2 -2
- package/dist/umd/ink.min.js +1 -1
- package/dist/umd/pjs-signer.min.js +3 -1
- package/dist/umd/signer.min.js +3 -1
- package/dist/umd/ws.min.js +3 -3
- package/package.json +16 -15
- package/dist/src/tx/create-tx.js +0 -125
- package/dist/src/tx/create-tx.js.map +0 -1
- package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js +0 -9
- package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js.map +0 -1
- package/dist/src/tx/signed-extensions/mortal-enc.js +0 -25
- package/dist/src/tx/signed-extensions/mortal-enc.js.map +0 -1
- package/dist/src/tx/signed-extensions/sign-extensions.js +0 -107
- package/dist/src/tx/signed-extensions/sign-extensions.js.map +0 -1
- package/dist/src/tx/signed-extensions/system-version.js +0 -10
- package/dist/src/tx/signed-extensions/system-version.js.map +0 -1
package/dist/src/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sources":["../../src/storage.ts"],"sourcesContent":["import {\n firstValueFromWithSignal,\n isOptionalArg,\n lossLessExhaustMap,\n} from \"@/utils\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\nimport {\n BlockInfo,\n BlockNotPinnedError,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n catchError,\n combineLatest,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n firstValueFrom,\n from,\n identity,\n map,\n mergeMap,\n scan,\n shareReplay,\n take,\n} from \"rxjs\"\nimport { InOutCompat } from \"./compatibility\"\nimport { PullOptions } from \"./types\"\nimport { stgGetKey } from \"./utils/stg-get-key\"\nimport { createWatchEntries } from \"./watch-entries\"\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: PullOptions,\n]\n\ntype WithWatchOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: { at: \"best\" },\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\ntype AllPermutations<A extends Array<any>> = PossibleParents<A> | A\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype GetKey<Args extends Array<any>> = {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n}\n\ntype StorageEntryWithoutKeys<Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: PullOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param options Optionally choose which block to watch changes, `best`\n * or `finalized` (default)\n */\n watchValue: (options?: { at: \"best\" | \"finalized\" }) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n getKey: GetKey<[]>\n}\n\nexport type StorageEntryWithKeys<\n Args extends Array<any>,\n Payload,\n ArgsOut extends Array<any>,\n> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to watch changes,\n * `best` or `finalized` (default).\n */\n watchValue: (\n ...args: [...Args, options?: { at: \"best\" | \"finalized\" }]\n ) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: PullOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: ArgsOut; value: NonNullable<Payload> }>>\n /**\n * Watch changes (Observable-based) for the storage entries with a subset of\n * `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally choose which block to watch changes,\n * `best` or `finalized` (default)\n * By default watches changes against the finalized block.\n * When watching changes against the \"best\" block, this API\n * gratiously handles the re-orgs and provides the deltas\n * based on the latest emission.\n * The observed value contains the following properties:\n * - `block`: the block in where the `deltas` took place -\n * `deltas`: `null` indicates that nothing has changed from\n * the latest emission.\n * If the value is not `null` then the `deleted` and\n * `upserted`\n * properties indicate the entries that have changed.\n * - `entries`: it's an immutable data-structure with the\n * latest entries.\n * @example\n *\n * typedApi.query.Staking.Nominators.watchEntries()\n * typedApi.query.Staking.Nominators.watchEntries({ at: \"best\" })\n *\n */\n watchEntries: (\n ...args: WithWatchOptions<PossibleParents<Args>>\n ) => Observable<{\n block: BlockInfo\n deltas: null | {\n deleted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n upserted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }\n entries: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }>\n\n getKey: GetKey<Args>\n}\n\nexport type StorageEntry<\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Payload>\n : StorageEntryWithKeys<Args, Payload, ArgsOut>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n compatibility: InOutCompat,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n const isBlockHash = pallet === \"System\" && name === \"BlockHash\"\n const sysNumberMapper$ = chainHead.runtime$.pipe(\n filter(Boolean),\n take(1),\n map(({ dynamicBuilder }) =>\n typeof dynamicBuilder\n .buildStorage(\"System\", \"Number\")\n .value.dec(new Uint8Array(32)) === \"bigint\"\n ? BigInt\n : identity,\n ),\n shareReplay(),\n )\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const getCodec = (ctx: RuntimeContext) => {\n try {\n return ctx.dynamicBuilder.buildStorage(pallet, name)\n } catch (e: any) {\n throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`)\n }\n }\n\n const watchValue = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n const [actualArgs, isBest] = isLastArgOptional\n ? ([args.slice(0, -1), args.at(-1).at === \"best\"] as const)\n : ([args, false] as const)\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n scan(\n (\n acc: {\n block: BlockInfo\n value: { raw: HexString | null; mapped: unknown }\n } | null,\n { value, block },\n ) =>\n acc\n ? {\n block,\n value: acc.value.raw === value.raw ? acc.value : value,\n }\n : { block, value },\n null,\n ),\n map((evt) => ({ block: evt!.block, value: evt!.value.mapped })),\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{\n value: { raw: string | null; mapped: any }\n block: BlockInfo\n }> => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional)\n throw invalidArgs(args)\n\n if (!compat.args.isValueCompatible(actualArgs))\n throw incompatibleError()\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const {\n value: { isValueCompatible: isCompat },\n } = getCompatibility(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!isCompat(mapped)) throw incompatibleError()\n return { raw: data, mapped }\n },\n ),\n ),\n chainHead.withHodl(at),\n )\n\n if (isSystemNumber)\n return chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.Number\")\n }\n return block\n }),\n distinctUntilChanged((a, b) => a.number === b.number),\n combineLatestWith(sysNumberMapper$),\n map(([block, mapper]) => ({\n block,\n value: { raw: block.number.toString(), mapped: mapper(block.number) },\n })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? combineLatest([\n chainHead.genesis$,\n chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.BlockHash\")\n }\n return block\n }),\n take(1),\n ),\n ]).pipe(\n map(([raw, block]) => ({\n block,\n value: { raw, mapped: raw },\n })),\n )\n : result$\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal }: PullOptions = isLastArgOptional ? lastArg : {}\n\n return firstValueFromWithSignal(\n getRawValue$(...args).pipe(map((v) => v.value.mapped)),\n signal,\n )\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const compat = getCompatibility(ctx)\n const codecs = getCodec(ctx)\n if (!compat.isCompatible(CompatibilityLevel.Partial))\n throw incompatibleError()\n\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n\n // TODO: check for partial args\n // if (!compat.args.isValueCompatible(args)) throw incompatibleError\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n // TODO: check args compatibility with user\n if (\n compat.value.level === CompatibilityLevel.Partial &&\n decodedValues.some(\n ({ value }) => !compat.value.isValueCompatible(value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n ),\n ),\n map((v) => v.value),\n chainHead.withHodl(at),\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: PullOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n const watchEntries: any = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n return getWatchEntries(\n pallet,\n name,\n isLastArgOptional ? args.slice(0, -1) : args,\n isLastArgOptional && lastArg.at === \"best\",\n )\n }\n\n const getKey = (...args: Array<any>): Promise<string> =>\n firstValueFrom(\n combineLatest([chainHead.getRuntimeContext$(null), compatibility]).pipe(\n map(([ctx, getCompat]) =>\n stgGetKey(\n ctx,\n pallet,\n name,\n getCompat(ctx).args.isValueCompatible,\n )(...args),\n ),\n ),\n )\n\n return {\n getKey: getKey as GetKey<any>,\n getValue,\n getValues,\n getEntries,\n watchValue,\n watchEntries,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sources":["../../src/storage.ts"],"sourcesContent":["import {\n firstValueFromWithSignal,\n isOptionalArg,\n lossLessExhaustMap,\n} from \"@/utils\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\nimport {\n BlockInfo,\n BlockNotPinnedError,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport {\n Observable,\n catchError,\n combineLatest,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n firstValueFrom,\n from,\n identity,\n map,\n mergeMap,\n scan,\n shareReplay,\n take,\n} from \"rxjs\"\nimport { InOutCompat } from \"./compatibility\"\nimport { PullOptions } from \"./types\"\nimport { stgGetKey } from \"./utils/stg-get-key\"\nimport { createWatchEntries } from \"./watch-entries\"\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: PullOptions,\n]\n\ntype WithWatchOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: { at: \"best\" },\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\ntype AllPermutations<A extends Array<any>> = PossibleParents<A> | A\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype GetKey<Args extends Array<any>> = {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n}\n\ntype StorageEntryWithoutKeys<Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: PullOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param options Optionally choose which block to watch changes, `best`\n * or `finalized` (default)\n */\n watchValue: (options?: { at: \"best\" | \"finalized\" }) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n getKey: GetKey<[]>\n}\n\nexport type StorageEntryWithKeys<\n Args extends Array<any>,\n Payload,\n ArgsOut extends Array<any>,\n> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to watch changes,\n * `best` or `finalized` (default).\n */\n watchValue: (\n ...args: [...Args, options?: { at: \"best\" | \"finalized\" }]\n ) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: PullOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: ArgsOut; value: NonNullable<Payload> }>>\n /**\n * Watch changes (Observable-based) for the storage entries with a subset of\n * `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally choose which block to watch changes,\n * `best` or `finalized` (default)\n * By default watches changes against the finalized block.\n * When watching changes against the \"best\" block, this API\n * gratiously handles the re-orgs and provides the deltas\n * based on the latest emission.\n * The observed value contains the following properties:\n * - `block`: the block in where the `deltas` took place -\n * `deltas`: `null` indicates that nothing has changed from\n * the latest emission.\n * If the value is not `null` then the `deleted` and\n * `upserted`\n * properties indicate the entries that have changed.\n * - `entries`: it's an immutable data-structure with the\n * latest entries.\n * @example\n *\n * typedApi.query.Staking.Nominators.watchEntries()\n * typedApi.query.Staking.Nominators.watchEntries({ at: \"best\" })\n *\n */\n watchEntries: (\n ...args: WithWatchOptions<PossibleParents<Args>>\n ) => Observable<{\n block: BlockInfo\n deltas: null | {\n deleted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n upserted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }\n entries: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }>\n\n getKey: GetKey<Args>\n}\n\nexport type StorageEntry<\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Payload>\n : StorageEntryWithKeys<Args, Payload, ArgsOut>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n compatibility: InOutCompat,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n const isBlockHash = pallet === \"System\" && name === \"BlockHash\"\n const sysNumberMapper$ = chainHead.runtime$.pipe(\n filter(Boolean),\n take(1),\n map(({ dynamicBuilder }) =>\n typeof dynamicBuilder\n .buildStorage(\"System\", \"Number\")\n .value.dec(new Uint8Array(32)) === \"bigint\"\n ? BigInt\n : identity,\n ),\n shareReplay(),\n )\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const getCodec = (ctx: RuntimeContext) => {\n try {\n return ctx.dynamicBuilder.buildStorage(pallet, name)\n } catch (e: any) {\n throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`)\n }\n }\n\n const watchValue = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n const [actualArgs, isBest] = isLastArgOptional\n ? ([args.slice(0, -1), args.at(-1).at === \"best\"] as const)\n : ([args, false] as const)\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n scan(\n (\n acc: {\n block: BlockInfo\n value: { raw: HexString | null; mapped: unknown }\n } | null,\n { value, block },\n ) =>\n acc\n ? {\n block,\n value: acc.value.raw === value.raw ? acc.value : value,\n }\n : { block, value },\n null,\n ),\n map((evt) => ({ block: evt!.block, value: evt!.value.mapped })),\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{\n value: { raw: string | null; mapped: any }\n block: BlockInfo\n }> => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional)\n throw invalidArgs(args)\n\n if (!compat.args.isValueCompatible(actualArgs))\n throw incompatibleError()\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const {\n value: { isValueCompatible: isCompat },\n } = getCompatibility(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!isCompat(mapped)) throw incompatibleError()\n return { raw: data, mapped }\n },\n ),\n ),\n chainHead.withHodl(at),\n )\n\n if (isSystemNumber)\n return chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.Number\")\n }\n return block\n }),\n distinctUntilChanged((a, b) => a.number === b.number),\n combineLatestWith(sysNumberMapper$),\n map(([block, mapper]) => ({\n block,\n value: { raw: block.number.toString(), mapped: mapper(block.number) },\n })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? combineLatest([\n chainHead.genesis$,\n chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.BlockHash\")\n }\n return block\n }),\n take(1),\n ),\n ]).pipe(\n map(([raw, block]) => ({\n block,\n value: { raw, mapped: raw },\n })),\n )\n : result$\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal }: PullOptions = isLastArgOptional ? lastArg : {}\n\n return firstValueFromWithSignal(\n getRawValue$(...args).pipe(map((v) => v.value.mapped)),\n signal,\n )\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const compat = getCompatibility(ctx)\n const codecs = getCodec(ctx)\n if (!compat.isCompatible(CompatibilityLevel.Partial))\n throw incompatibleError()\n\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n\n // TODO: check for partial args\n // if (!compat.args.isValueCompatible(args)) throw incompatibleError\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n // TODO: check args compatibility with user\n if (\n compat.value.level === CompatibilityLevel.Partial &&\n decodedValues.some(\n ({ value }) => !compat.value.isValueCompatible(value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n ),\n ),\n map((v) => v.value),\n chainHead.withHodl(at),\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: PullOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n const watchEntries: any = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n return getWatchEntries(\n pallet,\n name,\n isLastArgOptional ? args.slice(0, -1) : args,\n isLastArgOptional && lastArg.at === \"best\",\n )\n }\n\n const getKey = (...args: Array<any>): Promise<string> =>\n firstValueFrom(\n combineLatest([chainHead.getRuntimeContext$(null), compatibility]).pipe(\n map(([ctx, getCompat]) =>\n stgGetKey(\n ctx,\n pallet,\n name,\n getCompat(ctx).args.isValueCompatible,\n )(...args),\n ),\n ),\n )\n\n return {\n getKey: getKey as GetKey<any>,\n getValue,\n getValues,\n getEntries,\n watchValue,\n watchEntries,\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/src/tx/tx.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { getCallData } from '../utils/get-call-data.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { firstValueFrom, map, mergeMap, combineLatest, throwError, of, take } from 'rxjs';
|
|
6
|
-
import { createTx } from './create-tx.js';
|
|
2
|
+
import { Struct, u128, Variant, _void, compactBn, Enum, compact, u32 } from '@polkadot-api/substrate-bindings';
|
|
3
|
+
import { mergeUint8, toHex, fromHex } from '@polkadot-api/utils';
|
|
4
|
+
import { firstValueFrom, map, mergeMap, combineLatest, switchMap, of, take } from 'rxjs';
|
|
7
5
|
import { submit, submit$ } from './submit-fns.js';
|
|
8
6
|
export { InvalidTxError } from './submit-fns.js';
|
|
9
7
|
|
|
10
|
-
const accountIdEnc = AccountId().enc;
|
|
11
|
-
const fakeSignature = new Uint8Array(64);
|
|
12
|
-
const fakeSignatureEth = new Uint8Array(65);
|
|
13
|
-
const getFakeSignature = (isEth) => () => isEth ? fakeSignatureEth : fakeSignature;
|
|
14
8
|
const [, queryInfoDecFallback] = Struct({
|
|
15
9
|
weight: Struct({
|
|
16
10
|
ref_time: compactBn,
|
|
@@ -23,13 +17,9 @@ const [, queryInfoDecFallback] = Struct({
|
|
|
23
17
|
}),
|
|
24
18
|
partial_fee: u128
|
|
25
19
|
});
|
|
26
|
-
const createTxEntry = (pallet, name, chainHead, broadcast, compatibility
|
|
20
|
+
const createTxEntry = (bindings, pallet, name, chainHead, broadcast, compatibility) => {
|
|
27
21
|
const getCompatCtx$ = (at) => combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(
|
|
28
|
-
map(([ctx, getCompat]) => ({
|
|
29
|
-
ctx,
|
|
30
|
-
isAssetCompat: getIsAssetCompat(ctx),
|
|
31
|
-
...getCompat(ctx)
|
|
32
|
-
}))
|
|
22
|
+
map(([ctx, getCompat]) => ({ ctx, ...getCompat(ctx) }))
|
|
33
23
|
);
|
|
34
24
|
const getCallData$ = (arg, at) => getCompatCtx$(at).pipe(
|
|
35
25
|
map(
|
|
@@ -55,59 +45,52 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
|
|
|
55
45
|
}
|
|
56
46
|
)
|
|
57
47
|
);
|
|
58
|
-
const getEncodedAsset$ = (asset, at) => asset === void 0 ? of(void 0) : getCompatCtx$(at).pipe(
|
|
59
|
-
map(({ ctx, isAssetCompat }) => {
|
|
60
|
-
if (!isAssetCompat(asset))
|
|
61
|
-
throw new Error(`Incompatible runtime asset`);
|
|
62
|
-
const { dynamicBuilder, assetId } = ctx;
|
|
63
|
-
if (!assetId) return void 0;
|
|
64
|
-
return dynamicBuilder.buildDefinition(assetId).enc(asset);
|
|
65
|
-
})
|
|
66
|
-
);
|
|
67
48
|
return (arg) => {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
49
|
+
const create$ = (creator, opts, mockedSignature) => combineLatest([
|
|
50
|
+
chainHead.genesis$,
|
|
51
|
+
chainHead.best$.pipe(
|
|
52
|
+
switchMap(
|
|
53
|
+
(best) => combineLatest([
|
|
54
|
+
of(best),
|
|
55
|
+
chainHead.getRuntimeContext$(best.hash),
|
|
56
|
+
getCallData$(arg, best.hash)
|
|
57
|
+
])
|
|
58
|
+
)
|
|
59
|
+
)
|
|
71
60
|
]).pipe(
|
|
61
|
+
take(1),
|
|
72
62
|
mergeMap(
|
|
73
|
-
([
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
([genesisHash, [best, ctx, { callData }]]) => creator(
|
|
64
|
+
{
|
|
65
|
+
callData: toHex(callData),
|
|
66
|
+
context: {
|
|
67
|
+
metadata: toHex(ctx.metadataRaw),
|
|
68
|
+
bestBlockHash: best.hash,
|
|
69
|
+
bestBlockHeight: best.number,
|
|
70
|
+
genesisHash,
|
|
71
|
+
token: null
|
|
72
|
+
},
|
|
73
|
+
extensions: [],
|
|
74
|
+
signer: null,
|
|
75
|
+
txExtVersion: null,
|
|
76
|
+
version: 1
|
|
77
|
+
},
|
|
78
|
+
opts ?? {},
|
|
79
|
+
bindings,
|
|
80
|
+
mockedSignature
|
|
80
81
|
)
|
|
81
|
-
)
|
|
82
|
+
),
|
|
83
|
+
map(fromHex)
|
|
82
84
|
);
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return throwError(() => new Error(`Uknown block ${at}`));
|
|
87
|
-
return (atBlock ? of(atBlock) : chainHead.finalized$).pipe(
|
|
88
|
-
take(1),
|
|
89
|
-
mergeMap(
|
|
90
|
-
(block) => sign$(from, _options, block).pipe(map((tx) => ({ tx, block })))
|
|
91
|
-
)
|
|
92
|
-
);
|
|
93
|
-
};
|
|
94
|
-
const sign = (from, options) => firstValueFrom(_sign(from, options)).then((x) => x.tx);
|
|
95
|
-
const signAndSubmit = (from, _options) => firstValueFrom(_sign(from, _options)).then(
|
|
96
|
-
({ tx, block }) => submit(chainHead, broadcast, tx, block.hash)
|
|
85
|
+
const create = (creator, ...[options]) => firstValueFrom(create$(creator, options, false));
|
|
86
|
+
const createAndSubmit = (creator, ...[options]) => firstValueFrom(create$(creator, options, false)).then(
|
|
87
|
+
(tx) => submit(chainHead, broadcast, tx)
|
|
97
88
|
);
|
|
98
|
-
const
|
|
99
|
-
mergeMap((
|
|
89
|
+
const createSubmitAndWatch = (creator, ...[options]) => create$(creator, options, false).pipe(
|
|
90
|
+
mergeMap((tx) => submit$(chainHead, broadcast, tx, true))
|
|
100
91
|
);
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
from = from.startsWith("0x") ? fromHex(from) : accountIdEnc(from);
|
|
104
|
-
const isEth = from.length === 20;
|
|
105
|
-
const fakeSigner = getPolkadotSigner(
|
|
106
|
-
from,
|
|
107
|
-
isEth ? "Ecdsa" : "Sr25519",
|
|
108
|
-
getFakeSignature(isEth)
|
|
109
|
-
);
|
|
110
|
-
const encoded = await sign(fakeSigner, _options);
|
|
92
|
+
const getPaymentInfoWithOptions = async (creator, options) => {
|
|
93
|
+
const encoded = await firstValueFrom(create$(creator, options, true));
|
|
111
94
|
const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]));
|
|
112
95
|
const decoder$ = chainHead.getRuntimeContext$(null).pipe(
|
|
113
96
|
map((ctx) => {
|
|
@@ -115,7 +98,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
|
|
|
115
98
|
return ctx.dynamicBuilder.buildRuntimeCall(
|
|
116
99
|
"TransactionPaymentApi",
|
|
117
100
|
"query_info"
|
|
118
|
-
).value
|
|
101
|
+
).value.dec;
|
|
119
102
|
} catch {
|
|
120
103
|
return queryInfoDecFallback;
|
|
121
104
|
}
|
|
@@ -132,10 +115,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
|
|
|
132
115
|
)
|
|
133
116
|
);
|
|
134
117
|
};
|
|
118
|
+
const getPaymentInfo = async (creator, ...[options]) => getPaymentInfoWithOptions(creator, options);
|
|
135
119
|
const getEncodedData = () => firstValueFrom(
|
|
136
120
|
getCallData$(arg, null).pipe(map(({ callData }) => callData))
|
|
137
121
|
);
|
|
138
|
-
const getEstimatedFees = async (
|
|
122
|
+
const getEstimatedFees = async (creator, ...[options]) => (await getPaymentInfoWithOptions(creator, options)).partial_fee;
|
|
139
123
|
return {
|
|
140
124
|
getPaymentInfo,
|
|
141
125
|
getEstimatedFees,
|
|
@@ -145,9 +129,9 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
|
|
|
145
129
|
},
|
|
146
130
|
getEncodedData,
|
|
147
131
|
getBareTx: () => firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
132
|
+
create,
|
|
133
|
+
createSubmitAndWatch,
|
|
134
|
+
createAndSubmit
|
|
151
135
|
};
|
|
152
136
|
};
|
|
153
137
|
};
|
package/dist/src/tx/tx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.js","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { ValueCompat } from \"@/compatibility\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport type {\n BlockInfo,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n compact,\n compactBn,\n Decoder,\n Enum,\n HexString,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n take,\n throwError,\n} from \"rxjs\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n Extensions,\n PaymentInfo,\n Transaction,\n TxEntry,\n TxOptions,\n} from \"./types\"\n\nexport { InvalidTxError, submit, submit$ }\n\nconst accountIdEnc = AccountId().enc\nconst fakeSignature = new Uint8Array(64)\nconst fakeSignatureEth = new Uint8Array(65)\nconst getFakeSignature = (isEth: boolean) => () =>\n isEth ? fakeSignatureEth : fakeSignature\n\nconst [, queryInfoDecFallback] = Struct({\n weight: Struct({\n ref_time: compactBn,\n proof_size: compactBn,\n }),\n class: Variant({\n Normal: _void,\n Operational: _void,\n Mandatory: _void,\n }),\n partial_fee: u128,\n})\n\nexport const createTxEntry = <\n Arg extends {} | undefined,\n Asset extends PlainDescriptor<any>,\n E,\n>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n broadcast: (tx: Uint8Array) => Observable<never>,\n compatibility: ValueCompat,\n getIsAssetCompat: (ctx: RuntimeContext) => (asset: any) => Boolean,\n): TxEntry<Arg, E, Asset> => {\n type Ext = Extensions<E>\n\n const getCompatCtx$ = (at: HexString | null) =>\n combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(\n map(([ctx, getCompat]) => ({\n ctx,\n isAssetCompat: getIsAssetCompat(ctx),\n ...getCompat(ctx),\n })),\n )\n\n const getCallData$ = (arg: any, at: HexString | null) =>\n getCompatCtx$(at).pipe(\n map(\n ({\n ctx: { dynamicBuilder, extVersions },\n isValueCompatible: isCompat,\n }) => {\n const callData = getCallData(\n dynamicBuilder,\n isCompat,\n pallet,\n name,\n arg,\n )\n return {\n callData,\n bare: mergeUint8([\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ]),\n }\n },\n ),\n )\n\n const getEncodedAsset$ = (\n asset: any,\n at: HexString | null,\n ): Observable<Uint8Array | undefined> =>\n asset === undefined\n ? of(undefined)\n : getCompatCtx$(at).pipe(\n map(({ ctx, isAssetCompat }) => {\n if (!isAssetCompat(asset))\n throw new Error(`Incompatible runtime asset`)\n\n const { dynamicBuilder, assetId } = ctx\n if (!assetId) return undefined\n return dynamicBuilder.buildDefinition(assetId).enc(asset)\n }),\n )\n\n return (arg?: Arg): Transaction<Asset, Ext> => {\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}, Ext>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n combineLatest([\n getCallData$(arg, atBlock.hash),\n getEncodedAsset$(_options.asset, atBlock.hash),\n ]).pipe(\n mergeMap(([callData, asset]) =>\n createTx(\n chainHead,\n from,\n callData.callData,\n atBlock,\n (_options.customSignedExtensions as any) || {},\n { ..._options, asset },\n ),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}, Ext> = {},\n ) => {\n const atBlock = chainHead.pinnedBlocks$.state.blocks.get(at!)\n if (at && !atBlock)\n return throwError(() => new Error(`Uknown block ${at}`))\n\n return (atBlock ? of(atBlock) : chainHead.finalized$).pipe(\n take(1),\n mergeMap((block) =>\n sign$(from, _options, block).pipe(map((tx) => ({ tx, block }))),\n ),\n )\n }\n\n const sign: Transaction<Asset, Ext>[\"sign\"] = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: Transaction<Asset, Ext>[\"signAndSubmit\"] = (\n from,\n _options,\n ) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: Transaction<Asset, Ext>[\"signSubmitAndWatch\"] = (\n from,\n _options,\n ) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx }) => submit$(chainHead, broadcast, tx, true)),\n )\n\n const getPaymentInfo = async (\n from: Uint8Array | string,\n _options?: any,\n ) => {\n if (typeof from === \"string\")\n from = from.startsWith(\"0x\") ? fromHex(from) : accountIdEnc(from)\n const isEth = from.length === 20\n const fakeSigner = getPolkadotSigner(\n from,\n isEth ? \"Ecdsa\" : \"Sr25519\",\n getFakeSignature(isEth),\n )\n const encoded = await sign(fakeSigner, _options)\n const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]))\n\n const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map((ctx) => {\n try {\n return ctx.dynamicBuilder.buildRuntimeCall(\n \"TransactionPaymentApi\",\n \"query_info\",\n ).value[1]\n } catch {\n return queryInfoDecFallback\n }\n }),\n )\n\n const call$ = chainHead.call$(\n null,\n \"TransactionPaymentApi_query_info\",\n args,\n )\n\n return firstValueFrom(\n combineLatest([call$, decoder$]).pipe(\n map(([result, decoder]) => decoder(result)),\n ),\n )\n }\n\n const getEncodedData = () =>\n firstValueFrom(\n getCallData$(arg, null).pipe(map(({ callData }) => callData)),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | string,\n _options?: any,\n ) => (await getPaymentInfo(from, _options)).partial_fee\n\n return {\n getPaymentInfo,\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg),\n },\n getEncodedData,\n getBareTx: () =>\n firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tx.js","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { ValueCompat } from \"@/compatibility\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport type { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { TxCreator, TxCreatorBindings } from \"@polkadot-api/polkadot-signer\"\nimport {\n _void,\n compact,\n compactBn,\n Decoder,\n Enum,\n HexString,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n switchMap,\n take,\n} from \"rxjs\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n ExtensionConstraints,\n PaymentInfo,\n Transaction,\n TxCreatorOptions,\n TxEntry,\n} from \"./types\"\n\nexport { InvalidTxError, submit, submit$ }\n\nconst [, queryInfoDecFallback] = Struct({\n weight: Struct({\n ref_time: compactBn,\n proof_size: compactBn,\n }),\n class: Variant({\n Normal: _void,\n Operational: _void,\n Mandatory: _void,\n }),\n partial_fee: u128,\n})\n\nexport const createTxEntry = <\n Arg extends {} | undefined,\n EC extends ExtensionConstraints,\n>(\n bindings: TxCreatorBindings,\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n broadcast: (tx: Uint8Array) => Observable<never>,\n compatibility: ValueCompat,\n): TxEntry<Arg, EC> => {\n const getCompatCtx$ = (at: HexString | null) =>\n combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(\n map(([ctx, getCompat]) => ({ ctx, ...getCompat(ctx) })),\n )\n\n const getCallData$ = (arg: any, at: HexString | null) =>\n getCompatCtx$(at).pipe(\n map(\n ({\n ctx: { dynamicBuilder, extVersions },\n isValueCompatible: isCompat,\n }) => {\n const callData = getCallData(\n dynamicBuilder,\n isCompat,\n pallet,\n name,\n arg,\n )\n return {\n callData,\n bare: mergeUint8([\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ]),\n }\n },\n ),\n )\n\n return (arg?: Arg): Transaction<EC> => {\n const create$ = <T extends TxCreator<any>>(\n creator: T,\n opts: TxCreatorOptions<T, EC> | undefined,\n mockedSignature: boolean,\n ) =>\n combineLatest([\n chainHead.genesis$,\n chainHead.best$.pipe(\n switchMap((best) =>\n combineLatest([\n of(best),\n chainHead.getRuntimeContext$(best.hash),\n getCallData$(arg, best.hash),\n ]),\n ),\n ),\n ]).pipe(\n take(1),\n mergeMap(([genesisHash, [best, ctx, { callData }]]) =>\n creator(\n {\n callData: toHex(callData),\n context: {\n metadata: toHex(ctx.metadataRaw),\n bestBlockHash: best.hash,\n bestBlockHeight: best.number,\n genesisHash,\n token: null,\n },\n extensions: [],\n signer: null,\n txExtVersion: null,\n version: 1,\n },\n opts ?? {},\n bindings,\n mockedSignature,\n ),\n ),\n map(fromHex),\n )\n\n const create: Transaction<EC>[\"create\"] = (creator, ...[options]) =>\n firstValueFrom(create$(creator, options, false))\n\n const createAndSubmit: Transaction<EC>[\"createAndSubmit\"] = (\n creator,\n ...[options]\n ) =>\n firstValueFrom(create$(creator, options, false)).then((tx) =>\n submit(chainHead, broadcast, tx),\n )\n\n const createSubmitAndWatch: Transaction<EC>[\"createSubmitAndWatch\"] = (\n creator,\n ...[options]\n ) =>\n create$(creator, options, false).pipe(\n mergeMap((tx) => submit$(chainHead, broadcast, tx, true)),\n )\n\n const getPaymentInfoWithOptions = async <T extends TxCreator<any>>(\n creator: T,\n options: TxCreatorOptions<T, EC> | undefined,\n ) => {\n const encoded = await firstValueFrom(create$(creator, options, true))\n const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]))\n\n const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map((ctx) => {\n try {\n return ctx.dynamicBuilder.buildRuntimeCall(\n \"TransactionPaymentApi\",\n \"query_info\",\n ).value.dec\n } catch {\n return queryInfoDecFallback\n }\n }),\n )\n\n const call$ = chainHead.call$(\n null,\n \"TransactionPaymentApi_query_info\",\n args,\n )\n\n return firstValueFrom(\n combineLatest([call$, decoder$]).pipe(\n map(([result, decoder]) => decoder(result)),\n ),\n )\n }\n\n const getPaymentInfo: Transaction<EC>[\"getPaymentInfo\"] = async (\n creator,\n ...[options]\n ) => getPaymentInfoWithOptions(creator, options)\n\n const getEncodedData = () =>\n firstValueFrom(\n getCallData$(arg, null).pipe(map(({ callData }) => callData)),\n )\n\n const getEstimatedFees: Transaction<EC>[\"getEstimatedFees\"] = async (\n creator,\n ...[options]\n ) => (await getPaymentInfoWithOptions(creator, options)).partial_fee\n\n return {\n getPaymentInfo,\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg),\n },\n getEncodedData,\n getBareTx: () =>\n firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),\n create,\n createSubmitAndWatch,\n createAndSubmit,\n }\n }\n}\n"],"names":[],"mappings":"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"}
|