From 47f1350652f58ea790b14c1f7d36f2033f3f57d9 Mon Sep 17 00:00:00 2001 From: Keith Ingram Date: Tue, 17 Dec 2019 11:21:19 -0500 Subject: [PATCH] Additional rpcContractCall guard (#1677) * additional rpc guard * isFunction * isFunction --- packages/api-contract/src/base/Contract.ts | 2 +- packages/api-contract/src/base/util.ts | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/api-contract/src/base/Contract.ts b/packages/api-contract/src/base/Contract.ts index 8a0cc99e0e..f6f9b30379 100644 --- a/packages/api-contract/src/base/Contract.ts +++ b/packages/api-contract/src/base/Contract.ts @@ -41,7 +41,7 @@ export default class Contract extends BaseWithTxAndRpc return { send: this.decorateMethod( - as === 'rpc' + as === 'rpc' && this.hasRpcContractsCall ? (account: IKeyringPair | string | AccountId | Address): ContractCallResult<'rpc'> => { return this.rpcContractsCall( createType(this.registry, 'ContractCallRequest', { diff --git a/packages/api-contract/src/base/util.ts b/packages/api-contract/src/base/util.ts index e3866a7541..668408ed72 100644 --- a/packages/api-contract/src/base/util.ts +++ b/packages/api-contract/src/base/util.ts @@ -7,7 +7,7 @@ import { ApiObject, ContractABIMessage, ContractABIPre, ContractBase, ContractMe import { RpcInterface } from '@polkadot/rpc-core/jsonrpc.types'; import { Registry } from '@polkadot/types/types'; -import { assert, stringCamelCase } from '@polkadot/util'; +import { assert, isFunction, stringCamelCase } from '@polkadot/util'; import Abi from '../Abi'; export abstract class Base implements ContractBase { @@ -66,13 +66,13 @@ export abstract class BaseWithTx extends Base } export abstract class BaseWithTxAndRpcCall extends BaseWithTx { + public get hasRpcContractsCall (): boolean { + return isFunction(this.api.rx.rpc.contracts?.call); + } + protected get rpcContractsCall (): DecoratedRpc<'rxjs', RpcInterface>['contracts']['call'] { + assert(this.hasRpcContractsCall, 'You need to connect to a node with the contracts.call RPC method.'); + return this.api.rx.rpc.contracts.call; } - - constructor (api: ApiObject, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod) { - super(api, abi, decorateMethod); - - assert(this.api.rx.rpc.contracts && this.api.rx.tx.contracts.call, 'You need to connect to a node with the contracts module, the metadata does not enable api.rpc.contracts.call on this instance'); - } }