diff --git a/src/controllers/contracts/ContractsInkController.ts b/src/controllers/contracts/ContractsInkController.ts index 175310a5f..67853de46 100644 --- a/src/controllers/contracts/ContractsInkController.ts +++ b/src/controllers/contracts/ContractsInkController.ts @@ -15,12 +15,18 @@ // along with this program. If not, see . import { ContractPromise } from '@polkadot/api-contract'; +import { hexToU8a } from '@polkadot/util'; import { RequestHandler } from 'express'; import { BadRequest } from 'http-errors'; import { validateAddress } from '../../middleware'; import { ContractsInkService } from '../../services'; -import { IBodyContractMetadata, IContractQueryParam, IPostRequestHandler } from '../../types/requests'; +import { + IBodyContractMetadata, + IContractDryParams, + IContractQueryParam, + IPostRequestHandler, +} from '../../types/requests'; import AbstractController from '../AbstractController'; export default class ContractsInkController extends AbstractController { @@ -34,6 +40,7 @@ export default class ContractsInkController extends AbstractController = async ( + { params: { address }, query: { caller, payValue = '0', inputData } }, + res, + ): Promise => { + const dryRunResult = await this.api.call.reviveApi.call( + caller, + address, + this.api.registry.createType('Balance', BigInt(payValue)), + null, + null, + hexToU8a(inputData) ?? '', + ); + + ContractsInkController.sanitizedSend(res, dryRunResult.toHuman()); + }; } diff --git a/src/types/requests.ts b/src/types/requests.ts index 63d67a071..d43c88586 100644 --- a/src/types/requests.ts +++ b/src/types/requests.ts @@ -70,6 +70,12 @@ export interface IContractQueryParam extends Query { storageDepositLimit: string; } +export interface IContractDryParams extends Query { + caller: string; + payValue: string; + inputData: string; +} + export interface IPalletsConstantsParam extends ParamsDictionary { palletId: string; constantItemId: string;