From 90dffd675d3f8054a77fd312b3002665e0beb42a Mon Sep 17 00:00:00 2001 From: "422145328@qq.com" <422145328@qq.com> Date: Sat, 30 Aug 2025 20:28:37 +0800 Subject: [PATCH 1/4] add ink contract dry run --- .../contracts/ContractsInkController.ts | 27 ++++++++++++++++++- src/types/requests.ts | 7 +++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/controllers/contracts/ContractsInkController.ts b/src/controllers/contracts/ContractsInkController.ts index 175310a5f..d3fe2288a 100644 --- a/src/controllers/contracts/ContractsInkController.ts +++ b/src/controllers/contracts/ContractsInkController.ts @@ -20,7 +20,7 @@ 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 +34,7 @@ export default class ContractsInkController extends AbstractController = async ( + { params: { address }, query: { caller, payValue = "0", inputData } }, + res, + ): Promise => { + const dryRunResult: any = await this.api.call.reviveApi.call( + caller, + address, + this.api.registry.createType('Balance', BigInt(payValue)), + null, + null, + inputData ?? '', + ) + ContractsInkController.sanitizedSend( + res, + dryRunResult.toHuman(), + ); + }; } diff --git a/src/types/requests.ts b/src/types/requests.ts index 63d67a071..c29e97b3b 100644 --- a/src/types/requests.ts +++ b/src/types/requests.ts @@ -126,3 +126,10 @@ export interface IBlockQueryParams extends Query { export interface IRequestHandlerWithMetrics extends RequestHandler {} + + +export interface IContractDryParams extends Query { + caller: string; + payValue: string; + inputData: string; +} \ No newline at end of file From f37016d2985a4d9c0a668506d0db47e18626e0e1 Mon Sep 17 00:00:00 2001 From: "422145328@qq.com" <422145328@qq.com> Date: Sat, 30 Aug 2025 20:30:36 +0800 Subject: [PATCH 2/4] fix IContractDryParams --- src/types/requests.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/types/requests.ts b/src/types/requests.ts index c29e97b3b..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; @@ -126,10 +132,3 @@ export interface IBlockQueryParams extends Query { export interface IRequestHandlerWithMetrics extends RequestHandler {} - - -export interface IContractDryParams extends Query { - caller: string; - payValue: string; - inputData: string; -} \ No newline at end of file From 568c393167516d90e795f8668f2d68eda2e3811b Mon Sep 17 00:00:00 2001 From: "422145328@qq.com" <422145328@qq.com> Date: Mon, 1 Sep 2025 16:24:14 +0800 Subject: [PATCH 3/4] fix drycall error --- src/controllers/contracts/ContractsInkController.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/contracts/ContractsInkController.ts b/src/controllers/contracts/ContractsInkController.ts index d3fe2288a..b71032375 100644 --- a/src/controllers/contracts/ContractsInkController.ts +++ b/src/controllers/contracts/ContractsInkController.ts @@ -22,6 +22,7 @@ import { validateAddress } from '../../middleware'; import { ContractsInkService } from '../../services'; import { IBodyContractMetadata, IContractDryParams, IContractQueryParam, IPostRequestHandler } from '../../types/requests'; import AbstractController from '../AbstractController'; +import { hexToU8a } from '@polkadot/util'; export default class ContractsInkController extends AbstractController { static controllerName = 'ContractsInk'; @@ -80,7 +81,7 @@ export default class ContractsInkController extends AbstractController Date: Sun, 7 Sep 2025 09:14:36 +0800 Subject: [PATCH 4/4] fix lint error --- .../contracts/ContractsInkController.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/controllers/contracts/ContractsInkController.ts b/src/controllers/contracts/ContractsInkController.ts index b71032375..67853de46 100644 --- a/src/controllers/contracts/ContractsInkController.ts +++ b/src/controllers/contracts/ContractsInkController.ts @@ -15,14 +15,19 @@ // 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, IContractDryParams, IContractQueryParam, IPostRequestHandler } from '../../types/requests'; +import { + IBodyContractMetadata, + IContractDryParams, + IContractQueryParam, + IPostRequestHandler, +} from '../../types/requests'; import AbstractController from '../AbstractController'; -import { hexToU8a } from '@polkadot/util'; export default class ContractsInkController extends AbstractController { static controllerName = 'ContractsInk'; @@ -72,20 +77,18 @@ export default class ContractsInkController extends AbstractController = async ( - { params: { address }, query: { caller, payValue = "0", inputData } }, + { params: { address }, query: { caller, payValue = '0', inputData } }, res, ): Promise => { - const dryRunResult: any = await this.api.call.reviveApi.call( + 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(), ); + + ContractsInkController.sanitizedSend(res, dryRunResult.toHuman()); }; }