From fa5ec1b4a846078c5aa898a2b929fd303e40ad7e Mon Sep 17 00:00:00 2001 From: Jaco Date: Mon, 11 Jul 2022 14:43:03 +0200 Subject: [PATCH] Adjust assert usage in api-contract (#5057) --- packages/api-contract/src/Abi/index.ts | 22 ++++++++++++++++------ packages/api-contract/src/base/Base.ts | 12 ++++++++---- packages/api-contract/src/base/Code.ts | 6 ++++-- packages/api-contract/src/base/Contract.ts | 10 +++++++--- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/packages/api-contract/src/Abi/index.ts b/packages/api-contract/src/Abi/index.ts index f2ff15f42a..fd4bd29bd1 100644 --- a/packages/api-contract/src/Abi/index.ts +++ b/packages/api-contract/src/Abi/index.ts @@ -8,7 +8,7 @@ import type { AbiConstructor, AbiEvent, AbiMessage, AbiParam, DecodedEvent, Deco import { TypeRegistry } from '@polkadot/types'; import { TypeDefInfo } from '@polkadot/types-create'; -import { assert, assertReturn, compactAddLength, compactStripLength, isNumber, isObject, isString, logger, stringCamelCase, stringify, u8aConcat, u8aToHex } from '@polkadot/util'; +import { assertReturn, compactAddLength, compactStripLength, isNumber, isObject, isString, logger, stringCamelCase, stringify, u8aConcat, u8aToHex } from '@polkadot/util'; import { convertVersions, enumVersions } from './toLatest'; @@ -35,7 +35,9 @@ function getLatestMeta (registry: Registry, json: Record): Cont ) as unknown as ContractMetadata; const converter = convertVersions.find(([v]) => metadata[`is${v}`]); - assert(converter, () => `Unable to convert ABI with version ${metadata.type} to latest`); + if (!converter) { + throw new Error(`Unable to convert ABI with version ${metadata.type} to latest`); + } return converter[1](registry, metadata[`as${converter[0]}`]); } @@ -112,7 +114,9 @@ export class Abi { const index = data[0]; const event = this.events[index]; - assert(event, () => `Unable to find event with index ${index}`); + if (!event) { + throw new Error(`Unable to find event with index ${index}`); + } return event.fromU8a(data.subarray(1)); } @@ -142,7 +146,9 @@ export class Abi { #createArgs = (args: ContractMessageParamSpecLatest[], spec: unknown): AbiParam[] => { return args.map(({ label, type }, index): AbiParam => { try { - assert(isObject(type), 'Invalid type definition found'); + if (!isObject(type)) { + throw new Error('Invalid type definition found'); + } const displayName = type.displayName.length ? type.displayName[type.displayName.length - 1].toString() @@ -233,13 +239,17 @@ export class Abi { const selector = trimmed.subarray(0, 4); const message = list.find((m) => m.selector.eq(selector)); - assert(message, `Unable to find ${type} with selector ${u8aToHex(selector)}`); + if (!message) { + throw new Error(`Unable to find ${type} with selector ${u8aToHex(selector)}`); + } return message.fromU8a(trimmed.subarray(4)); }; #encodeArgs = ({ label, selector }: ContractMessageSpecLatest | ContractConstructorSpecLatest, args: AbiParam[], data: unknown[]): Uint8Array => { - assert(data.length === args.length, () => `Expected ${args.length} arguments to contract message '${label.toString()}', found ${data.length}`); + if (data.length !== args.length) { + throw new Error(`Expected ${args.length} arguments to contract message '${label.toString()}', found ${data.length}`); + } return compactAddLength( u8aConcat( diff --git a/packages/api-contract/src/base/Base.ts b/packages/api-contract/src/base/Base.ts index 5d8834d382..52e3f4fd9f 100644 --- a/packages/api-contract/src/base/Base.ts +++ b/packages/api-contract/src/base/Base.ts @@ -5,7 +5,7 @@ import type { ApiTypes, DecorateMethod } from '@polkadot/api/types'; import type { Registry } from '@polkadot/types/types'; import { ApiBase } from '@polkadot/api/base'; -import { assert, isFunction } from '@polkadot/util'; +import { isFunction } from '@polkadot/util'; import { Abi } from '../Abi'; @@ -24,9 +24,13 @@ export abstract class Base { this._decorateMethod = decorateMethod; - assert(!!(api && api.isConnected && api.tx), 'Your API has not been initialized correctly and is not connected to a chain'); - assert(!!(api.tx.contracts && Object.keys(api.tx.contracts).length), 'You need to connect to a chain with a runtime that supports contracts'); - assert(isFunction(api.tx.contracts.instantiateWithCode), 'You need to connect to a chain with a runtime with a V3 contracts module. The runtime does not expose api.tx.contracts.instantiateWithCode'); + if (!api || !api.isConnected || !api.tx) { + throw new Error('Your API has not been initialized correctly and is not connected to a chain'); + } else if (!api.tx.contracts || !Object.keys(api.tx.contracts).length) { + throw new Error('You need to connect to a chain with a runtime that supports contracts'); + } else if (!isFunction(api.tx.contracts.instantiateWithCode)) { + throw new Error('You need to connect to a chain with a runtime with a V3 contracts module. The runtime does not expose api.tx.contracts.instantiateWithCode'); + } } public get registry (): Registry { diff --git a/packages/api-contract/src/base/Code.ts b/packages/api-contract/src/base/Code.ts index cde342de07..a1f9763117 100644 --- a/packages/api-contract/src/base/Code.ts +++ b/packages/api-contract/src/base/Code.ts @@ -11,7 +11,7 @@ import type { MapConstructorExec } from './types'; import { SubmittableResult } from '@polkadot/api'; import { ApiBase } from '@polkadot/api/base'; -import { assert, BN_ZERO, compactAddLength, isUndefined, isWasm, u8aToU8a } from '@polkadot/util'; +import { BN_ZERO, compactAddLength, isUndefined, isWasm, u8aToU8a } from '@polkadot/util'; import { Abi } from '../Abi'; import { applyOnEvent } from '../util'; @@ -48,7 +48,9 @@ export class Code extends Base { ? this.abi.info.source.wasm : u8aToU8a(wasm); - assert(isWasm(this.code), 'No WASM code provided'); + if (!isWasm(this.code)) { + throw new Error('No WASM code provided'); + } this.abi.constructors.forEach((c): void => { if (isUndefined(this.#tx[c.method])) { diff --git a/packages/api-contract/src/base/Contract.ts b/packages/api-contract/src/base/Contract.ts index fea3894459..dc3fd16e18 100644 --- a/packages/api-contract/src/base/Contract.ts +++ b/packages/api-contract/src/base/Contract.ts @@ -13,7 +13,7 @@ import { map } from 'rxjs'; import { SubmittableResult } from '@polkadot/api'; import { ApiBase } from '@polkadot/api/base'; -import { assert, BN, BN_HUNDRED, BN_ONE, BN_ZERO, bnToBn, isFunction, isUndefined, logger } from '@polkadot/util'; +import { BN, BN_HUNDRED, BN_ONE, BN_ZERO, bnToBn, isFunction, isUndefined, logger } from '@polkadot/util'; import { Abi } from '../Abi'; import { applyOnEvent, extractOptions, isOptions } from '../util'; @@ -87,7 +87,9 @@ export class Contract extends Base { } public get query (): MapMessageQuery { - assert(this.hasRpcContractsCall, ERROR_NO_CALL); + if (!this.hasRpcContractsCall) { + throw new Error(ERROR_NO_CALL); + } return this.#query; } @@ -138,7 +140,9 @@ export class Contract extends Base { }; #read = (messageOrId: AbiMessage | string | number, { gasLimit = BN_ZERO, storageDepositLimit = null, value = BN_ZERO }: ContractOptions, params: unknown[]): ContractCallSend => { - assert(this.hasRpcContractsCall, ERROR_NO_CALL); + if (!this.hasRpcContractsCall) { + throw new Error(ERROR_NO_CALL); + } const message = this.abi.findMessage(messageOrId);