From b1353edc84faeb291e1114207a21fae383990b9b Mon Sep 17 00:00:00 2001 From: Jaco Date: Sat, 1 May 2021 09:31:16 +0300 Subject: [PATCH] Expose additional camelCase `method` on `AbiMessage` (maps to decorated name) (#3466) --- CHANGELOG.md | 1 + packages/api-contract/src/Abi.ts | 4 +++- packages/api-contract/src/base/Blueprint.ts | 8 +++----- packages/api-contract/src/base/Code.ts | 8 +++----- packages/api-contract/src/base/Contract.ts | 12 +++++------- packages/api-contract/src/types.ts | 1 + 6 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bae354f951..be16110561 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Changes: - Fix generate of well-known storage keys (e.g. `:code`) - Optimize metadata unknown type validation - Allow metadata creation for `Map` or `Record` +- Expose additional camelCase `method` on `AbiMessage` (maps to decorated name) - Added explicit double-byte ss58 `AccountId` encoding test - Update to latest Substrate metadata diff --git a/packages/api-contract/src/Abi.ts b/packages/api-contract/src/Abi.ts index e2804deaf3..bdc16b82f4 100644 --- a/packages/api-contract/src/Abi.ts +++ b/packages/api-contract/src/Abi.ts @@ -143,6 +143,7 @@ export class Abi { #createMessage = (spec: ContractMessageSpec | ContractConstructorSpec, index: number, add: Partial = {}): AbiMessage => { const args = this.#createArgs(spec.args, spec); + const identifier = spec.name.toString(); const message = { ...add, args, @@ -151,8 +152,9 @@ export class Abi { args: this.#decodeArgs(args, data), message }), - identifier: spec.name.toString(), + identifier, index, + method: stringCamelCase(identifier), selector: spec.selector, toU8a: (params: CodecArg[], additional?: Uint8Array) => this.#encodeArgs(spec, args, params, additional) diff --git a/packages/api-contract/src/base/Blueprint.ts b/packages/api-contract/src/base/Blueprint.ts index e1c66ff8f3..ddbb06a831 100644 --- a/packages/api-contract/src/base/Blueprint.ts +++ b/packages/api-contract/src/base/Blueprint.ts @@ -10,7 +10,7 @@ import type { ContractGeneric, MapConstructorExec } from './types'; import { SubmittableResult } from '@polkadot/api'; import { ApiBase } from '@polkadot/api/base'; -import { isUndefined, stringCamelCase } from '@polkadot/util'; +import { isUndefined } from '@polkadot/util'; import { Abi } from '../Abi'; import { applyOnEvent } from '../util'; @@ -49,10 +49,8 @@ export class Blueprint extends Base { this.createContract = createBluePrintWithId(this.#deploy); this.abi.constructors.forEach((c): void => { - const messageName = stringCamelCase(c.identifier); - - if (isUndefined(this.#tx[messageName])) { - this.#tx[messageName] = createBluePrintTx((o, p) => this.#deploy(c, o, p)); + if (isUndefined(this.#tx[c.method])) { + this.#tx[c.method] = createBluePrintTx((o, p) => this.#deploy(c, o, p)); } }); } diff --git a/packages/api-contract/src/base/Code.ts b/packages/api-contract/src/base/Code.ts index e983938de6..fc9855b328 100644 --- a/packages/api-contract/src/base/Code.ts +++ b/packages/api-contract/src/base/Code.ts @@ -10,7 +10,7 @@ import type { MapConstructorExec } from './types'; import { SubmittableResult } from '@polkadot/api'; import { ApiBase } from '@polkadot/api/base'; -import { assert, compactAddLength, isFunction, isUndefined, isWasm, logger, stringCamelCase, u8aToU8a } from '@polkadot/util'; +import { assert, compactAddLength, isFunction, isUndefined, isWasm, logger, u8aToU8a } from '@polkadot/util'; import { blake2AsU8a } from '@polkadot/util-crypto'; import { Abi } from '../Abi'; @@ -49,10 +49,8 @@ export class Code extends Base { assert(isWasm(this.code), 'No WASM code provided'); this.abi.constructors.forEach((c): void => { - const messageName = stringCamelCase(c.identifier); - - if (isUndefined(this.#tx[messageName])) { - this.#tx[messageName] = createBluePrintTx((o, p) => this.#instantiate(c, o, p)); + if (isUndefined(this.#tx[c.method])) { + this.#tx[c.method] = createBluePrintTx((o, p) => this.#instantiate(c, o, p)); } }); } diff --git a/packages/api-contract/src/base/Contract.ts b/packages/api-contract/src/base/Contract.ts index 3bf2532d6f..b9f66e765d 100644 --- a/packages/api-contract/src/base/Contract.ts +++ b/packages/api-contract/src/base/Contract.ts @@ -13,7 +13,7 @@ import BN from 'bn.js'; import { SubmittableResult } from '@polkadot/api'; import { ApiBase } from '@polkadot/api/base'; -import { assert, bnToBn, isFunction, isUndefined, logger, stringCamelCase } from '@polkadot/util'; +import { assert, bnToBn, isFunction, isUndefined, logger } from '@polkadot/util'; import { map } from '@polkadot/x-rxjs/operators'; import { Abi } from '../Abi'; @@ -117,14 +117,12 @@ export class Contract extends Base { this.read = createWithId(this.#read, '.read is deprecated, use contract.query.(...) instead (where contract refers to this instance)'); this.abi.messages.forEach((m): void => { - const messageName = stringCamelCase(m.identifier); - - if (isUndefined(this.#tx[messageName])) { - this.#tx[messageName] = createTx((o, p) => this.#exec(m, o, p)); + if (isUndefined(this.#tx[m.method])) { + this.#tx[m.method] = createTx((o, p) => this.#exec(m, o, p)); } - if (isUndefined(this.#query[messageName])) { - this.#query[messageName] = createQuery((f, o, p) => this.#read(m, o, p).send(f)); + if (isUndefined(this.#query[m.method])) { + this.#query[m.method] = createQuery((f, o, p) => this.#read(m, o, p).send(f)); } }); } diff --git a/packages/api-contract/src/types.ts b/packages/api-contract/src/types.ts index 6399e5cdf5..9a82b151b4 100644 --- a/packages/api-contract/src/types.ts +++ b/packages/api-contract/src/types.ts @@ -39,6 +39,7 @@ export interface AbiMessage { isConstructor?: boolean; isMutating?: boolean; isPayable?: boolean; + method: string; returnType?: TypeDef | null; selector: ContractSelector; toU8a: (params: CodecArg[], additional?: Uint8Array) => Uint8Array;