From cba5710fec30bfba45da8917c0d481890044c4e4 Mon Sep 17 00:00:00 2001 From: Keith Ingram Date: Tue, 5 Nov 2019 12:56:49 +0100 Subject: [PATCH] Return Codec from contracts.call (#1545) * combine values * Contracts with Data return * Data toU8a() * return data from contracts.call * create Data * cleanup --- packages/api-contract/src/base/Contract.ts | 21 ++++++++------------- packages/api-contract/src/types.ts | 6 +++--- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/packages/api-contract/src/base/Contract.ts b/packages/api-contract/src/base/Contract.ts index 0233bc19ec..f0692fed9d 100644 --- a/packages/api-contract/src/base/Contract.ts +++ b/packages/api-contract/src/base/Contract.ts @@ -4,7 +4,7 @@ import { ApiTypes, DecorateMethod, ObsInnerType } from '@polkadot/api/types'; import { AccountId, Address, ContractExecResult } from '@polkadot/types/interfaces'; -import { IKeyringPair } from '@polkadot/types/types'; +import { Codec, IKeyringPair } from '@polkadot/types/types'; import { ApiObject, ContractABIMessage, ContractABIPre, ContractCallOutcome } from '../types'; import BN from 'bn.js'; @@ -68,30 +68,25 @@ export default class Contract extends BaseWithTxAndRpc } private createOutcome (result: ContractExecResult, origin: AccountId, message: ContractABIMessage, params: any[]): ContractCallOutcome { - let output: string; + let output: Codec | null = null; if (result.isSuccess) { const { data } = result.asSuccess; - // TODO We actually want to return the full Codec type here, not a string value output = message.returnType - ? formatData(data, message.returnType).toString() - : data.toHex(); - } else { - output = 'Error'; + ? formatData(data, message.returnType) + : createType('Data', data); } - const outcome = { + return { time: Date.now(), message, origin, params, - result: result, - success: result.isSuccess, - output: output && output.length ? output : '()' + result, + isSuccess: result.isSuccess, + output }; - - return outcome; } public constructor (api: ApiObject, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod, address: string | AccountId | Address) { diff --git a/packages/api-contract/src/types.ts b/packages/api-contract/src/types.ts index edd96cfffa..23de5c6e9b 100644 --- a/packages/api-contract/src/types.ts +++ b/packages/api-contract/src/types.ts @@ -4,7 +4,7 @@ import { ApiTypes, DecorateMethod } from '@polkadot/api/types'; import { AccountId, Address, ContractExecResult } from '@polkadot/types/interfaces'; -import { CodecArg } from '@polkadot/types/types'; +import { Codec, CodecArg } from '@polkadot/types/types'; import { MetaRegistryJson, StringIndex, TypeIndex, TypeDef } from '@polkadot/types/codec/create/types'; // import { Observable } from 'rxjs'; @@ -200,8 +200,8 @@ export interface ContractCallOutcome { time: number; result: ContractExecResult; origin: AccountId; - output: string; + output: Codec | null; params: any[]; - success: boolean; + isSuccess: boolean; message: ContractABIMessage; }