polkadot-api 1.10.0 → 1.10.2
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.mjs +1 -1
- package/dist/esm/tx/create-tx.mjs +2 -1
- package/dist/esm/tx/create-tx.mjs.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/umd/index.min.js +2 -2
- package/package.json +5 -5
package/bin/cli.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-tx.mjs","sources":["../../../src/tx/create-tx.ts"],"sourcesContent":["import { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { HexString, u16, u32, u64, u8 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n catchError,\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n of,\n scan,\n startWith,\n switchMap,\n take,\n} from \"rxjs\"\nimport { getSignExtensionsCreator } from \"./signed-extensions\"\nimport { CustomSignedExtensionValues } from \"./types\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nconst NONCE_RUNTIME_CALL = \"AccountNonceApi_account_nonce\"\nconst lenToDecoder = {\n 1: u8.dec,\n 2: u16.dec,\n 4: u32.dec,\n 8: u64.dec,\n}\n\nconst getNonceAtBlock$ = (\n call$: ChainHead$[\"call$\"],\n from: HexString,\n at: string,\n) =>\n call$(at, NONCE_RUNTIME_CALL, from).pipe(\n map((result) => {\n const bytes = fromHex(result)\n const decoder = lenToDecoder[bytes.length as 2 | 4 | 8]\n if (!decoder)\n throw new Error(`${NONCE_RUNTIME_CALL} retrieved wrong data`)\n return decoder(bytes)\n }),\n )\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n customSignExt: Record<string, CustomSignedExtensionValues>,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n customSignedExtensions,\n hinted = {},\n) =>\n combineLatest([\n hinted.nonce\n ? of(hinted.nonce)\n : getNonce$(chainHead, toHex(signer.publicKey)),\n chainHead.getRuntimeContext$(atBlock.hash),\n chainHead.genesis$,\n ]).pipe(\n take(1),\n mergeMap(([nonce, ctx, genesis]) => {\n const signExtCreator = getSignExtensionsCreator(\n fromHex(genesis),\n ctx.lookup,\n ctx.dynamicBuilder,\n )\n\n const mortality: HintedSignedExtensions[\"mortality\"] =\n hinted.mortality ?? { period: 64, mortal: true }\n\n const signExtensions = signExtCreator({\n nonce: nonce as number,\n tip: hinted.tip ?? 0n,\n mortality: mortality.mortal\n ? {\n mortal: true,\n period: mortality.period,\n startAtBlock: {\n height: atBlock.number,\n hash: atBlock.hash,\n },\n }\n : { mortal: false },\n customSignedExtensions,\n })\n\n return signer.signTx(\n callData,\n signExtensions,\n ctx.metadataRaw,\n atBlock.number,\n )\n }),\n )\n\nconst getNonce$ = (chainHead: ChainHead$, from: HexString) => {\n const followHead$ = (head: string) =>\n chainHead.newBlocks$.pipe(\n scan((acc, block) => (block.parent === acc ? block.hash : acc), head),\n startWith(head),\n distinctUntilChanged(),\n )\n const followNonce$ = (head: string) =>\n followHead$(head).pipe(\n take(2),\n switchMap((hash) => getNonceAtBlock$(chainHead.call$, from, hash)),\n )\n const getHeadsNonce$ = (heads: string[]) =>\n combineLatest(\n heads.map((head) =>\n followNonce$(head).pipe(\n map((value) => ({\n success: true as const,\n value,\n })),\n catchError((err) =>\n of({\n success: false as const,\n value: err,\n }),\n ),\n ),\n ),\n ).pipe(take(1))\n\n return chainHead.pinnedBlocks$.pipe(\n filter((v) => !v.recovering && v.blocks.size > 0),\n take(1),\n map(({ blocks, best }) => {\n // Grab only the heads: those blocks above the best that don't have children and are not getting pruned\n const bestBlock = blocks.get(best)!\n return [...blocks.values()]\n .filter(\n (v) =>\n !v.unpinnable &&\n v.children.size === 0 &&\n v.number >= bestBlock.number,\n )\n .map((v) => v.hash)\n }),\n switchMap(getHeadsNonce$),\n map((result) => {\n const winner = result.reduce(\n (acc: bigint | number | null, v) =>\n v.success ? (v.value >= (acc ?? 0) ? v.value : acc) : acc,\n null,\n )\n\n if (winner == null) {\n // We must have at least one error\n throw result[0].value\n }\n return winner\n }),\n )\n}\n"],"names":[],"mappings":";;;;;AA4BA,MAAM,kBAAqB,GAAA,+BAAA;AAC3B,MAAM,YAAe,GAAA;AAAA,EACnB,GAAG,EAAG,CAAA,GAAA;AAAA,EACN,GAAG,GAAI,CAAA,GAAA;AAAA,EACP,GAAG,GAAI,CAAA,GAAA;AAAA,EACP,GAAG,GAAI,CAAA;AACT,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,KACA,EAAA,IAAA,EACA,OAEA,KAAM,CAAA,EAAA,EAAI,kBAAoB,EAAA,IAAI,CAAE,CAAA,IAAA;AAAA,EAClC,GAAA,CAAI,CAAC,MAAW,KAAA;AACd,IAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM,CAAA;AAC5B,IAAM,MAAA,OAAA,GAAU,YAAa,CAAA,KAAA,CAAM,MAAmB,CAAA;AACtD,IAAA,IAAI,CAAC,OAAA;AACH,MAAA,MAAM,IAAI,KAAA,CAAM,CAAG,EAAA,kBAAkB,CAAuB,qBAAA,CAAA,CAAA;AAC9D,IAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,GACrB;AACH,CAAA;AAEW,MAAA,QAAA,GAOiB,CAC5B,SAAA,EACA,MACA,EAAA,QAAA,EACA,SACA,sBACA,EAAA,MAAA,GAAS,EAAC,KAEV,aAAc,CAAA;AAAA,EACZ,MAAA,CAAO,KACH,GAAA,EAAA,CAAG,MAAO,CAAA,KAAK,CACf,GAAA,SAAA,CAAU,SAAW,EAAA,KAAA,CAAM,MAAO,CAAA,SAAS,CAAC,CAAA;AAAA,EAChD,SAAA,CAAU,kBAAmB,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACzC,SAAU,CAAA;AACZ,CAAC,CAAE,CAAA,IAAA;AAAA,EACD,KAAK,CAAC,CAAA;AAAA,EACN,SAAS,CAAC,CAAC,KAAO,EAAA,GAAA,EAAK,OAAO,CAAM,KAAA;AAClC,IAAA,MAAM,cAAiB,GAAA,wBAAA;AAAA,MACrB,QAAQ,OAAO,CAAA;AAAA,MACf,GAAI,CAAA,MAAA;AAAA,MACJ,GAAI,CAAA;AAAA,KACN;AAEA,IAAA,MAAM,YACJ,MAAO,CAAA,SAAA,IAAa,EAAE,MAAQ,EAAA,EAAA,EAAI,QAAQ,IAAK,EAAA;AAEjD,IAAA,MAAM,iBAAiB,cAAe,CAAA;AAAA,MACpC,KAAA;AAAA,MACA,GAAA,EAAK,OAAO,GAAO,IAAA,EAAA;AAAA,MACnB,SAAA,EAAW,UAAU,MACjB,GAAA;AAAA,QACE,MAAQ,EAAA,IAAA;AAAA,QACR,QAAQ,SAAU,CAAA,MAAA;AAAA,QAClB,YAAc,EAAA;AAAA,UACZ,QAAQ,OAAQ,CAAA,MAAA;AAAA,UAChB,MAAM,OAAQ,CAAA;AAAA;AAChB,OACF,GACA,EAAE,MAAA,EAAQ,KAAM,EAAA;AAAA,MACpB;AAAA,
|
|
1
|
+
{"version":3,"file":"create-tx.mjs","sources":["../../../src/tx/create-tx.ts"],"sourcesContent":["import { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { HexString, u16, u32, u64, u8 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n catchError,\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n of,\n scan,\n startWith,\n switchMap,\n take,\n} from \"rxjs\"\nimport { getSignExtensionsCreator } from \"./signed-extensions\"\nimport { CustomSignedExtensionValues } from \"./types\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nconst NONCE_RUNTIME_CALL = \"AccountNonceApi_account_nonce\"\nconst lenToDecoder = {\n 1: u8.dec,\n 2: u16.dec,\n 4: u32.dec,\n 8: u64.dec,\n}\n\nconst getNonceAtBlock$ = (\n call$: ChainHead$[\"call$\"],\n from: HexString,\n at: string,\n) =>\n call$(at, NONCE_RUNTIME_CALL, from).pipe(\n map((result) => {\n const bytes = fromHex(result)\n const decoder = lenToDecoder[bytes.length as 2 | 4 | 8]\n if (!decoder)\n throw new Error(`${NONCE_RUNTIME_CALL} retrieved wrong data`)\n return decoder(bytes)\n }),\n )\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n customSignExt: Record<string, CustomSignedExtensionValues>,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n customSignedExtensions,\n hinted = {},\n) =>\n combineLatest([\n hinted.nonce\n ? of(hinted.nonce)\n : getNonce$(chainHead, toHex(signer.publicKey)),\n chainHead.getRuntimeContext$(atBlock.hash),\n chainHead.genesis$,\n ]).pipe(\n take(1),\n mergeMap(([nonce, ctx, genesis]) => {\n const signExtCreator = getSignExtensionsCreator(\n fromHex(genesis),\n ctx.lookup,\n ctx.dynamicBuilder,\n )\n\n const mortality: HintedSignedExtensions[\"mortality\"] =\n hinted.mortality ?? { period: 64, mortal: true }\n\n const signExtensions = signExtCreator({\n nonce: nonce as number,\n tip: hinted.tip ?? 0n,\n mortality: mortality.mortal\n ? {\n mortal: true,\n period: mortality.period,\n startAtBlock: {\n height: atBlock.number,\n hash: atBlock.hash,\n },\n }\n : { mortal: false },\n customSignedExtensions,\n asset: hinted.asset,\n })\n\n return signer.signTx(\n callData,\n signExtensions,\n ctx.metadataRaw,\n atBlock.number,\n )\n }),\n )\n\nconst getNonce$ = (chainHead: ChainHead$, from: HexString) => {\n const followHead$ = (head: string) =>\n chainHead.newBlocks$.pipe(\n scan((acc, block) => (block.parent === acc ? block.hash : acc), head),\n startWith(head),\n distinctUntilChanged(),\n )\n const followNonce$ = (head: string) =>\n followHead$(head).pipe(\n take(2),\n switchMap((hash) => getNonceAtBlock$(chainHead.call$, from, hash)),\n )\n const getHeadsNonce$ = (heads: string[]) =>\n combineLatest(\n heads.map((head) =>\n followNonce$(head).pipe(\n map((value) => ({\n success: true as const,\n value,\n })),\n catchError((err) =>\n of({\n success: false as const,\n value: err,\n }),\n ),\n ),\n ),\n ).pipe(take(1))\n\n return chainHead.pinnedBlocks$.pipe(\n filter((v) => !v.recovering && v.blocks.size > 0),\n take(1),\n map(({ blocks, best }) => {\n // Grab only the heads: those blocks above the best that don't have children and are not getting pruned\n const bestBlock = blocks.get(best)!\n return [...blocks.values()]\n .filter(\n (v) =>\n !v.unpinnable &&\n v.children.size === 0 &&\n v.number >= bestBlock.number,\n )\n .map((v) => v.hash)\n }),\n switchMap(getHeadsNonce$),\n map((result) => {\n const winner = result.reduce(\n (acc: bigint | number | null, v) =>\n v.success ? (v.value >= (acc ?? 0) ? v.value : acc) : acc,\n null,\n )\n\n if (winner == null) {\n // We must have at least one error\n throw result[0].value\n }\n return winner\n }),\n )\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -772,7 +772,8 @@ const createTx = (chainHead, signer, callData, atBlock, customSignedExtensions,
|
|
|
772
772
|
hash: atBlock.hash
|
|
773
773
|
}
|
|
774
774
|
} : { mortal: false },
|
|
775
|
-
customSignedExtensions
|
|
775
|
+
customSignedExtensions,
|
|
776
|
+
asset: hinted.asset
|
|
776
777
|
});
|
|
777
778
|
return signer.signTx(
|
|
778
779
|
callData,
|