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;