polkadot-api 1.21.2 → 1.22.0
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/tx.mjs +16 -4
- package/dist/esm/tx/tx.mjs.map +1 -1
- package/dist/index.d.ts +41 -0
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/umd/index.min.js +2 -2
- package/package.json +6 -6
package/bin/cli.mjs
CHANGED
package/dist/esm/tx/tx.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getPolkadotSigner } from '@polkadot-api/signer';
|
|
2
|
-
import { AccountId, Struct, u128, Variant, _void, compactBn, Enum, u32, Binary } from '@polkadot-api/substrate-bindings';
|
|
2
|
+
import { AccountId, Struct, u128, Variant, _void, compactBn, Enum, u32, Binary, compact } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
import { toHex, fromHex, mergeUint8 } from '@polkadot-api/utils';
|
|
4
4
|
import { firstValueFrom, mergeMap, map, take, throwError, combineLatest } from 'rxjs';
|
|
5
5
|
import { getCompatibilityApi } from '../compatibility.mjs';
|
|
@@ -34,7 +34,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
34
34
|
const fn = (arg) => {
|
|
35
35
|
const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
|
|
36
36
|
const ctx = getCompatibilityApi(runtime).runtime();
|
|
37
|
-
const { dynamicBuilder, assetId, lookup } = ctx;
|
|
37
|
+
const { dynamicBuilder, assetId, lookup, extVersions } = ctx;
|
|
38
38
|
let codecs;
|
|
39
39
|
try {
|
|
40
40
|
codecs = dynamicBuilder.buildCall(pallet, name);
|
|
@@ -57,9 +57,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
const { location, codec } = codecs;
|
|
60
|
+
const callData = mergeUint8([new Uint8Array(location), codec.enc(arg2)]);
|
|
60
61
|
return {
|
|
61
|
-
callData: Binary.fromBytes(
|
|
62
|
-
|
|
62
|
+
callData: Binary.fromBytes(callData),
|
|
63
|
+
bare: toHex(
|
|
64
|
+
mergeUint8(
|
|
65
|
+
compact.enc(callData.length + 1),
|
|
66
|
+
new Uint8Array(extVersions.slice(-1)),
|
|
67
|
+
callData
|
|
68
|
+
)
|
|
63
69
|
),
|
|
64
70
|
options: returnOptions
|
|
65
71
|
};
|
|
@@ -72,6 +78,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
72
78
|
return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)));
|
|
73
79
|
return getCallDataWithContext(token, arg).callData;
|
|
74
80
|
};
|
|
81
|
+
const getBareTx = (token) => {
|
|
82
|
+
if (!token)
|
|
83
|
+
return firstValueFrom(getCallData$(arg).pipe(map((x) => x.bare)));
|
|
84
|
+
return getCallDataWithContext(token, arg).bare;
|
|
85
|
+
};
|
|
75
86
|
const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
|
|
76
87
|
mergeMap(
|
|
77
88
|
({ callData, options }) => createTx(
|
|
@@ -149,6 +160,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
149
160
|
value: Enum(name, arg)
|
|
150
161
|
},
|
|
151
162
|
getEncodedData,
|
|
163
|
+
getBareTx,
|
|
152
164
|
sign,
|
|
153
165
|
signSubmitAndWatch,
|
|
154
166
|
signAndSubmit
|
package/dist/esm/tx/tx.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import type { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n Binary,\n compactBn,\n Decoder,\n Enum,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n RuntimeToken,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n Extensions,\n PaymentInfo,\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\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 D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ChainHead$,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n type Ext = Extensions<D>\n\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken | RuntimeToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n return {\n callData: Binary.fromBytes(\n mergeUint8([new Uint8Array(location), codec.enc(arg)]),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(token, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}, Ext>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(\n chainHead,\n from,\n callData.asBytes(),\n atBlock,\n _options.customSignedExtensions || {},\n options,\n ),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}, Ext> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset, Ext> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset, Ext> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset, Ext> = (from, _options) =>\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 = fromHex(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 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 as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import type { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n Binary,\n compact,\n compactBn,\n Decoder,\n Enum,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n RuntimeToken,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n Extensions,\n PaymentInfo,\n TxBare,\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\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 D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ChainHead$,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n type Ext = Extensions<D>\n\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken | RuntimeToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup, extVersions } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n const callData = mergeUint8([new Uint8Array(location), codec.enc(arg)])\n return {\n callData: Binary.fromBytes(callData),\n bare: toHex(\n mergeUint8(\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(token, arg).callData\n }\n\n const getBareTx: TxBare = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.bare)))\n\n return getCallDataWithContext(token, arg).bare\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}, Ext>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(\n chainHead,\n from,\n callData.asBytes(),\n atBlock,\n _options.customSignedExtensions || {},\n options,\n ),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}, Ext> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset, Ext> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset, Ext> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset, Ext> = (from, _options) =>\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 = fromHex(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 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 as any),\n },\n getEncodedData,\n getBareTx,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -636,6 +636,37 @@ interface TxCall {
|
|
|
636
636
|
*/
|
|
637
637
|
(compatibilityToken: CompatibilityToken): Binary;
|
|
638
638
|
}
|
|
639
|
+
interface TxBare {
|
|
640
|
+
/**
|
|
641
|
+
* SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
|
|
642
|
+
*
|
|
643
|
+
* @returns Promise resolving in a Bare transaction (it falls back to an
|
|
644
|
+
* unsigned transaction if only v4 is available)
|
|
645
|
+
*/
|
|
646
|
+
(): Promise<HexString>;
|
|
647
|
+
/**
|
|
648
|
+
* @param compatibilityToken Token from got with `await
|
|
649
|
+
* typedApi.compatibilityToken`
|
|
650
|
+
* @returns Synchronously returns a Bare transaction (it falls back to an
|
|
651
|
+
* unsigned transaction if only v4 is available)
|
|
652
|
+
*/
|
|
653
|
+
(compatibilityToken: CompatibilityToken): HexString;
|
|
654
|
+
}
|
|
655
|
+
interface UnsafeTxBare {
|
|
656
|
+
/**
|
|
657
|
+
* SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
|
|
658
|
+
*
|
|
659
|
+
* @returns Promise resolving in a Bare transaction (it falls back to an
|
|
660
|
+
* unsigned transaction if only v4 is available)
|
|
661
|
+
*/
|
|
662
|
+
(): Promise<HexString>;
|
|
663
|
+
/**
|
|
664
|
+
* @param runtimeToken Token from got with `await typedApi.runtimeToken`
|
|
665
|
+
* @returns Synchronously returns a Bare transaction (it falls back to an
|
|
666
|
+
* unsigned transaction if only v4 is available)
|
|
667
|
+
*/
|
|
668
|
+
(runtimeToken: RuntimeToken): HexString;
|
|
669
|
+
}
|
|
639
670
|
interface UnsafeTxCall {
|
|
640
671
|
/**
|
|
641
672
|
* SCALE-encoded callData of the transaction.
|
|
@@ -701,6 +732,10 @@ type InnerTransaction<Unsafe, Arg extends {} | undefined, Pallet extends string,
|
|
|
701
732
|
* SCALE-encoded callData of the transaction.
|
|
702
733
|
*/
|
|
703
734
|
getEncodedData: Unsafe extends true ? UnsafeTxCall : TxCall;
|
|
735
|
+
/**
|
|
736
|
+
* SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
|
|
737
|
+
*/
|
|
738
|
+
getBareTx: Unsafe extends true ? UnsafeTxBare : TxBare;
|
|
704
739
|
/**
|
|
705
740
|
* Estimate fees against the latest known `finalizedBlock`
|
|
706
741
|
*
|
|
@@ -976,6 +1011,12 @@ interface PolkadotClient {
|
|
|
976
1011
|
getBestBlocks: () => Promise<BlockInfo[]>;
|
|
977
1012
|
/**
|
|
978
1013
|
* Observable of new blocks that have been discovered by the client.
|
|
1014
|
+
* There is the strong guarantee that for every block emitted its parent has
|
|
1015
|
+
* been emitted already in the subscription (except the first block).
|
|
1016
|
+
* After subscription, the latest finalized block and all of its known
|
|
1017
|
+
* descendants will be emitted synchronously.
|
|
1018
|
+
* The Observable will complete if the continuity of the blocks cannot be
|
|
1019
|
+
* guaranteed.
|
|
979
1020
|
*/
|
|
980
1021
|
blocks$: Observable<BlockInfo>;
|
|
981
1022
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1105,7 +1105,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
1105
1105
|
const fn = (arg) => {
|
|
1106
1106
|
const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
|
|
1107
1107
|
const ctx = getCompatibilityApi(runtime).runtime();
|
|
1108
|
-
const { dynamicBuilder, assetId, lookup } = ctx;
|
|
1108
|
+
const { dynamicBuilder, assetId, lookup, extVersions } = ctx;
|
|
1109
1109
|
let codecs;
|
|
1110
1110
|
try {
|
|
1111
1111
|
codecs = dynamicBuilder.buildCall(pallet, name);
|
|
@@ -1128,9 +1128,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
1128
1128
|
};
|
|
1129
1129
|
}
|
|
1130
1130
|
const { location, codec } = codecs;
|
|
1131
|
+
const callData = utils.mergeUint8([new Uint8Array(location), codec.enc(arg2)]);
|
|
1131
1132
|
return {
|
|
1132
|
-
callData: substrateBindings.Binary.fromBytes(
|
|
1133
|
-
|
|
1133
|
+
callData: substrateBindings.Binary.fromBytes(callData),
|
|
1134
|
+
bare: utils.toHex(
|
|
1135
|
+
utils.mergeUint8(
|
|
1136
|
+
substrateBindings.compact.enc(callData.length + 1),
|
|
1137
|
+
new Uint8Array(extVersions.slice(-1)),
|
|
1138
|
+
callData
|
|
1139
|
+
)
|
|
1134
1140
|
),
|
|
1135
1141
|
options: returnOptions
|
|
1136
1142
|
};
|
|
@@ -1143,6 +1149,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
1143
1149
|
return rxjs.firstValueFrom(getCallData$(arg).pipe(rxjs.map((x) => x.callData)));
|
|
1144
1150
|
return getCallDataWithContext(token, arg).callData;
|
|
1145
1151
|
};
|
|
1152
|
+
const getBareTx = (token) => {
|
|
1153
|
+
if (!token)
|
|
1154
|
+
return rxjs.firstValueFrom(getCallData$(arg).pipe(rxjs.map((x) => x.bare)));
|
|
1155
|
+
return getCallDataWithContext(token, arg).bare;
|
|
1156
|
+
};
|
|
1146
1157
|
const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
|
|
1147
1158
|
rxjs.mergeMap(
|
|
1148
1159
|
({ callData, options }) => createTx(
|
|
@@ -1220,6 +1231,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
|
|
|
1220
1231
|
value: substrateBindings.Enum(name, arg)
|
|
1221
1232
|
},
|
|
1222
1233
|
getEncodedData,
|
|
1234
|
+
getBareTx,
|
|
1223
1235
|
sign,
|
|
1224
1236
|
signSubmitAndWatch,
|
|
1225
1237
|
signAndSubmit
|