diff --git a/CHANGELOG.md b/CHANGELOG.md index 29d52a5d8e..631fa8a108 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Contributed: Changes: - Cater for `TransactionPaymentApi/2` runtime calls +- Add getters for `has{DryRun, PaymentInfo}` on submittables (feature detection) ## 9.7.1 Nov 6, 2022 diff --git a/packages/api-base/src/types/submittable.ts b/packages/api-base/src/types/submittable.ts index ed917062df..fbb69db668 100644 --- a/packages/api-base/src/types/submittable.ts +++ b/packages/api-base/src/types/submittable.ts @@ -50,6 +50,11 @@ export interface SubmittableResultValue { } export interface SubmittableExtrinsic extends Extrinsic { + /** true if api.rpc.system.dryRun is available, enabling dryRun(...) */ + hasDryRun: boolean; + /** true if api.call.transactionPaymentApi.queryInfo is available, enabling paymentInfo(...) */ + hasPaymentInfo: boolean; + dryRun (account: AddressOrPair, options?: Partial): SubmittableDryRunResult; paymentInfo (account: AddressOrPair, options?: Partial): SubmittablePaymentResult; diff --git a/packages/api/src/submittable/createClass.ts b/packages/api/src/submittable/createClass.ts index 1be062655e..fd4fef85b3 100644 --- a/packages/api/src/submittable/createClass.ts +++ b/packages/api/src/submittable/createClass.ts @@ -100,9 +100,17 @@ export function createClass ({ api, apiType, blockHas this.#ignoreStatusCb = apiType === 'rxjs'; } + public get hasDryRun (): boolean { + return isFunction(api.rpc.system?.dryRun); + } + + public get hasPaymentInfo (): boolean { + return isFunction(api.call.transactionPaymentApi?.queryInfo); + } + // dry run an extrinsic public dryRun (account: AddressOrPair, optionsOrHash?: Partial | Uint8Array | string): SubmittableDryRunResult { - if (!api.rpc.system?.dryRun) { + if (!this.hasDryRun) { throw new Error('The system.dryRun RPC call is not available in your environment'); } @@ -124,7 +132,7 @@ export function createClass ({ api, apiType, blockHas // calculate the payment info for this transaction (if signed and submitted) public paymentInfo (account: AddressOrPair, optionsOrHash?: Partial | Uint8Array | string): SubmittablePaymentResult { - if (!api.call.transactionPaymentApi?.queryInfo) { + if (!this.hasPaymentInfo) { throw new Error('The transactionPaymentApi.queryInfo runtime call is not available in your environment'); }