From 03cbdfff5e18fdffcb1c824ea71697a9e65a8719 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 25 May 2026 10:26:45 +0000 Subject: [PATCH 1/6] Move transaction validator --- packages/forger/source/service-provider.ts | 11 +++++++++++ .../source/transaction-validator.test.ts | 0 .../source/transaction-validator.ts | 0 packages/transactions/source/service-provider.ts | 11 ----------- 4 files changed, 11 insertions(+), 11 deletions(-) rename packages/{transactions => forger}/source/transaction-validator.test.ts (100%) rename packages/{transactions => forger}/source/transaction-validator.ts (100%) diff --git a/packages/forger/source/service-provider.ts b/packages/forger/source/service-provider.ts index 63d82ab52c..104f4a2280 100644 --- a/packages/forger/source/service-provider.ts +++ b/packages/forger/source/service-provider.ts @@ -1,14 +1,25 @@ import { Identifiers } from "@mainsail/constants"; import { injectable } from "@mainsail/container"; +import { Contracts } from "@mainsail/contracts"; import { Providers } from "@mainsail/kernel"; import Joi from "joi"; import { BlockForger } from "./block-forger.js"; +import { TransactionValidator } from "./transaction-validator.js"; @injectable() export class ServiceProvider extends Providers.ServiceProvider { public async register(): Promise { this.app.bind(Identifiers.Forger.Block).to(BlockForger).inSingletonScope(); + + this.app.bind(Identifiers.Transaction.Validator.Instance).to(TransactionValidator); + + this.app + .bind<() => TransactionValidator>(Identifiers.Transaction.Validator.Factory) + .toFactory( + (context: Contracts.Kernel.Container.ResolutionContext) => () => + context.get(Identifiers.Transaction.Validator.Instance), + ); } public configSchema(): Joi.AnySchema { diff --git a/packages/transactions/source/transaction-validator.test.ts b/packages/forger/source/transaction-validator.test.ts similarity index 100% rename from packages/transactions/source/transaction-validator.test.ts rename to packages/forger/source/transaction-validator.test.ts diff --git a/packages/transactions/source/transaction-validator.ts b/packages/forger/source/transaction-validator.ts similarity index 100% rename from packages/transactions/source/transaction-validator.ts rename to packages/forger/source/transaction-validator.ts diff --git a/packages/transactions/source/service-provider.ts b/packages/transactions/source/service-provider.ts index 4d540e3310..39940e8bd7 100644 --- a/packages/transactions/source/service-provider.ts +++ b/packages/transactions/source/service-provider.ts @@ -1,25 +1,14 @@ -import type { Contracts } from "@mainsail/contracts"; import { Identifiers } from "@mainsail/constants"; import { injectable } from "@mainsail/container"; import { Providers } from "@mainsail/kernel"; import { TransactionHandler } from "./handlers/index.js"; -import { TransactionValidator } from "./transaction-validator.js"; @injectable() export class ServiceProvider extends Providers.ServiceProvider { public async register(): Promise { - this.app.bind(Identifiers.Transaction.Validator.Instance).to(TransactionValidator); - this.app.bind(Identifiers.Transaction.Handler).to(TransactionHandler); - - this.app - .bind<() => TransactionValidator>(Identifiers.Transaction.Validator.Factory) - .toFactory( - (context: Contracts.Kernel.Container.ResolutionContext) => () => - context.get(Identifiers.Transaction.Validator.Instance), - ); } public async required(): Promise { From 813098752a681270cd7ad1f05666a2cd1ce3ebd6 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 25 May 2026 10:37:44 +0000 Subject: [PATCH 2/6] Remove transaction validator --- packages/constants/source/identifiers.ts | 4 -- packages/forger/source/service-provider.ts | 11 ---- packages/forger/source/transaction-forger.ts | 27 ++++++---- .../source/transaction-validator.test.ts | 46 ---------------- .../forger/source/transaction-validator.ts | 54 ------------------- 5 files changed, 17 insertions(+), 125 deletions(-) delete mode 100644 packages/forger/source/transaction-validator.test.ts delete mode 100644 packages/forger/source/transaction-validator.ts diff --git a/packages/constants/source/identifiers.ts b/packages/constants/source/identifiers.ts index be87f2ae70..041bfba634 100644 --- a/packages/constants/source/identifiers.ts +++ b/packages/constants/source/identifiers.ts @@ -280,10 +280,6 @@ export const Identifiers = { }, Transaction: { Handler: Symbol("Transaction"), - Validator: { - Factory: Symbol("Transaction"), - Instance: Symbol("Transaction"), - }, }, TransactionPool: { API: { diff --git a/packages/forger/source/service-provider.ts b/packages/forger/source/service-provider.ts index 104f4a2280..63d82ab52c 100644 --- a/packages/forger/source/service-provider.ts +++ b/packages/forger/source/service-provider.ts @@ -1,25 +1,14 @@ import { Identifiers } from "@mainsail/constants"; import { injectable } from "@mainsail/container"; -import { Contracts } from "@mainsail/contracts"; import { Providers } from "@mainsail/kernel"; import Joi from "joi"; import { BlockForger } from "./block-forger.js"; -import { TransactionValidator } from "./transaction-validator.js"; @injectable() export class ServiceProvider extends Providers.ServiceProvider { public async register(): Promise { this.app.bind(Identifiers.Forger.Block).to(BlockForger).inSingletonScope(); - - this.app.bind(Identifiers.Transaction.Validator.Instance).to(TransactionValidator); - - this.app - .bind<() => TransactionValidator>(Identifiers.Transaction.Validator.Factory) - .toFactory( - (context: Contracts.Kernel.Container.ResolutionContext) => () => - context.get(Identifiers.Transaction.Validator.Instance), - ); } public configSchema(): Joi.AnySchema { diff --git a/packages/forger/source/transaction-forger.ts b/packages/forger/source/transaction-forger.ts index f138c39314..32cb95d629 100644 --- a/packages/forger/source/transaction-forger.ts +++ b/packages/forger/source/transaction-forger.ts @@ -26,6 +26,10 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { @inject(Identifiers.Cryptography.Configuration) private readonly cryptoConfiguration!: Contracts.Crypto.Configuration; + @inject(Identifiers.Evm.Instance) + @tagged("instance", "validator") + private readonly evm!: Contracts.Evm.Instance; + @inject(Identifiers.State.Store) protected readonly stateStore!: Contracts.State.Store; @@ -35,8 +39,8 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { @inject(Identifiers.BlockchainUtils.RoundCalculator) private readonly roundCalculator!: Contracts.BlockchainUtils.RoundCalculator; - @inject(Identifiers.Transaction.Validator.Factory) - private readonly createTransactionValidator!: Contracts.Transactions.TransactionValidatorFactory; + @inject(Identifiers.Transaction.Handler) + private readonly transactionHandler!: Contracts.Transactions.TransactionHandler; @inject(Identifiers.Services.Log.Service) private readonly logger!: Contracts.Kernel.Logger; @@ -50,7 +54,6 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { #generatorAddress!: string; #timestamp!: number; #commitKey!: Contracts.Evm.CommitKey; - #validator!: Contracts.Transactions.TransactionValidator; #evm!: Contracts.Evm.Instance; #milestone!: Contracts.Crypto.Milestone; #previousBlock!: Contracts.Crypto.Block; @@ -67,8 +70,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { this.#timestamp = timestamp; this.#commitKey = commitKey; - this.#validator = this.createTransactionValidator(); - this.#evm = this.#validator.getEvm(); + this.#evm = this.evm; this.#milestone = this.cryptoConfiguration.getMilestone(); this.#previousBlock = this.stateStore.getLastBlock(); @@ -190,12 +192,17 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { } async #validateTransaction(transaction: Contracts.Crypto.Transaction): Promise { - return this.#validator.validate( + return await this.transactionHandler.apply( { - commitKey: this.#commitKey, - gasLimit: this.#milestone.block.maxGasLimit, - generatorAddress: this.#generatorAddress, - timestamp: this.#timestamp, + evm: { + blockContext: { + commitKey: this.#commitKey, + gasLimit: BigInt(this.#milestone.block.maxGasLimit), + timestamp: BigInt(this.#timestamp), + validatorAddress: this.#generatorAddress, + }, + instance: this.#evm, + }, }, transaction, ); diff --git a/packages/forger/source/transaction-validator.test.ts b/packages/forger/source/transaction-validator.test.ts deleted file mode 100644 index c0e1a5370b..0000000000 --- a/packages/forger/source/transaction-validator.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -// import { Utils } from "@mainsail/kernel"; -// import { AssertionError } from "assert"; -// import { SinonSpy } from "sinon"; - -// import { describeSkip } from "../../test-runner"; -// import { makeVoteTransactions } from "../test/make-vote-transactions"; -// import { setUp } from "../test/setup"; -// import { TransactionValidator } from "./transaction-validator"; - -// describeSkip<{ -// transactionValidator: TransactionValidator; -// applySpy: SinonSpy; -// }>("Transaction Validator", ({ it, beforeAll, afterEach, assert }) => { -// beforeAll(async (context) => { -// const environment = await setUp(); - -// context.transactionValidator = environment.transactionValidator; -// context.applySpy = environment.spies.applySpy; -// }); - -// afterEach((context) => { -// context.applySpy.resetHistory(); -// }); - -// it("should validate transactions", async (context) => { -// const transaction = makeVoteTransactions(1, [ -// `+${"03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37"}`, -// ]); - -// await context.transactionValidator.validate(transaction[0]); - -// assert.true(context.applySpy.calledWith(transaction[0])); -// }); - -// it("should throw when transaction id doesn't match deserialised", (context) => { -// const transaction = makeVoteTransactions(1, [ -// `+${"03287bfebba4c7881a0509717e71b34b63f31e40021c321f89ae04f84be6d6ac37"}`, -// ]); -// const copiedTransaction = Utils.cloneObject(transaction[0]) as any; -// copiedTransaction.id = "wrong"; - -// context.transactionValidator -// .validate(copiedTransaction) -// .catch((error) => assert.instance(error, AssertionError)); -// }); -// }); diff --git a/packages/forger/source/transaction-validator.ts b/packages/forger/source/transaction-validator.ts deleted file mode 100644 index 0451527f99..0000000000 --- a/packages/forger/source/transaction-validator.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { Contracts } from "@mainsail/contracts"; - -import { Identifiers } from "@mainsail/constants"; -import { inject, injectable, tagged } from "@mainsail/container"; -import { assert } from "@mainsail/utils"; -import { strictEqual } from "assert"; - -@injectable() -export class TransactionValidator implements Contracts.Transactions.TransactionValidator { - @inject(Identifiers.Evm.Instance) - @tagged("instance", "validator") - private readonly evm!: Contracts.Evm.Instance; - - @inject(Identifiers.Transaction.Handler) - private readonly transactionHandler!: Contracts.Transactions.TransactionHandler; - - @inject(Identifiers.Cryptography.Transaction.Factory) - private readonly transactionFactory!: Contracts.Crypto.TransactionFactory; - - public getEvm(): Contracts.Evm.Instance { - return this.evm; - } - - public async validate( - context: Contracts.Transactions.TransactionValidatorContext, - transaction: Contracts.Crypto.Transaction, - ): Promise { - const deserialized: Contracts.Crypto.Transaction = await this.transactionFactory.fromBytes( - transaction.serialized, - ); - strictEqual(transaction.hash, deserialized.hash); - - const { commitKey, gasLimit, generatorAddress, timestamp } = context; - - const receipt = await this.transactionHandler.apply( - { - evm: { - blockContext: { - commitKey, - gasLimit: BigInt(gasLimit), - timestamp: BigInt(timestamp), - validatorAddress: generatorAddress, - }, - instance: this.evm, - }, - }, - transaction, - ); - - assert.string(transaction.from); - - return receipt; - } -} From f5ed692ce1d9fc44387bd723a066242c8513bd86 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 25 May 2026 10:40:14 +0000 Subject: [PATCH 3/6] Use injected evm --- packages/forger/source/transaction-forger.ts | 23 +++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/forger/source/transaction-forger.ts b/packages/forger/source/transaction-forger.ts index 32cb95d629..f3a109f757 100644 --- a/packages/forger/source/transaction-forger.ts +++ b/packages/forger/source/transaction-forger.ts @@ -54,7 +54,6 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { #generatorAddress!: string; #timestamp!: number; #commitKey!: Contracts.Evm.CommitKey; - #evm!: Contracts.Evm.Instance; #milestone!: Contracts.Crypto.Milestone; #previousBlock!: Contracts.Crypto.Block; #timeLimit!: number; @@ -70,8 +69,6 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { this.#timestamp = timestamp; this.#commitKey = commitKey; - this.#evm = this.evm; - this.#milestone = this.cryptoConfiguration.getMilestone(); this.#previousBlock = this.stateStore.getLastBlock(); @@ -92,8 +89,8 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { fee: bigint; }> { try { - await this.#evm.initializeGenesis(this.genesisInfo); - await this.#evm.prepareNextCommit({ commitKey: this.#commitKey }); + await this.evm.initializeGenesis(this.genesisInfo); + await this.evm.prepareNextCommit({ commitKey: this.#commitKey }); const { fee, gasUsed, transactions } = await this.#processTransactions(); @@ -103,12 +100,12 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { return { fee, gasUsed, - logsBloom: await this.#evm.logsBloom(this.#commitKey), - stateRoot: await this.#evm.stateRoot(this.#commitKey, this.#previousBlock.stateRoot), + logsBloom: await this.evm.logsBloom(this.#commitKey), + stateRoot: await this.evm.stateRoot(this.#commitKey, this.#previousBlock.stateRoot), transactions, }; } finally { - await this.#evm.dispose(); + await this.evm.dispose(); } } @@ -159,7 +156,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { `attempting optimistic execution of tx ${transaction.hash} (tx.gas=${transaction.gasLimit} gasLeft=${result.gasLeft})`, ); - await this.#evm.snapshot(this.#commitKey); + await this.evm.snapshot(this.#commitKey); } const validation = await this.#validateTransaction(transaction); @@ -173,7 +170,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { ); if (optimisticExecution) { - await this.#evm.rollback(this.#commitKey); + await this.evm.rollback(this.#commitKey); return; } else { // In practice, this should never happen since the validator should reject transactions that exceed the block gas limit, but we check just in case. @@ -201,7 +198,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { timestamp: BigInt(this.#timestamp), validatorAddress: this.#generatorAddress, }, - instance: this.#evm, + instance: this.evm, }, }, transaction, @@ -216,7 +213,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { } async #updateRewardsAndVotes(): Promise { - await this.#evm.updateRewardsAndVotes({ + await this.evm.updateRewardsAndVotes({ blockReward: BigInt(this.#milestone.reward), commitKey: this.#commitKey, specId: this.#milestone.evmSpec, @@ -229,7 +226,7 @@ export class TransactionForger implements Contracts.Forger.TransactionForger { if (this.roundCalculator.isNewRound(this.#previousBlock.number + 2)) { const { roundValidators } = this.cryptoConfiguration.getMilestone(this.#previousBlock.number + 2); - await this.#evm.calculateRoundValidators({ + await this.evm.calculateRoundValidators({ commitKey: this.#commitKey, roundValidators: BigInt(roundValidators), specId: this.#milestone.evmSpec, From 2d8804cf0edc82b5e4146e42408606504d92ef17 Mon Sep 17 00:00:00 2001 From: sebastijankuzner <58827427+sebastijankuzner@users.noreply.github.com> Date: Mon, 25 May 2026 10:45:15 +0000 Subject: [PATCH 4/6] style: resolve style guide violations [ci-lint-fix] --- packages/transactions/source/service-provider.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/transactions/source/service-provider.ts b/packages/transactions/source/service-provider.ts index 39940e8bd7..874c45f107 100644 --- a/packages/transactions/source/service-provider.ts +++ b/packages/transactions/source/service-provider.ts @@ -1,4 +1,3 @@ - import { Identifiers } from "@mainsail/constants"; import { injectable } from "@mainsail/container"; import { Providers } from "@mainsail/kernel"; From 0c8bbaad5c6d87ad1f5fbf63bc42312b0d448c9b Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 25 May 2026 11:14:56 +0000 Subject: [PATCH 5/6] Fix tests --- .../forger/test/helpers/prepare-sandbox.ts | 28 +++++++++---------- .../validator/test/helpers/prepare-sandbox.ts | 28 +++++++++---------- .../consensus/source/custom-proposal.ts | 28 +++++++++++-------- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/packages/forger/test/helpers/prepare-sandbox.ts b/packages/forger/test/helpers/prepare-sandbox.ts index 70950410a8..8ba87c292b 100644 --- a/packages/forger/test/helpers/prepare-sandbox.ts +++ b/packages/forger/test/helpers/prepare-sandbox.ts @@ -73,22 +73,22 @@ export const prepareSandbox = async (context: { app?: Application }): Promise [], }); - const validator = { - getEvm: () => ({ - dispose: async () => {}, - initializeGenesis: async () => {}, - logsBloom: async () => "0".repeat(512), - prepareNextCommit: async () => {}, - rollback: async () => {}, - snapshot: async () => {}, - stateRoot: async () => "0000000000000000000000000000000000000000000000000000000000000000", - updateRewardsAndVotes: async () => {}, - }), - validate: async () => true, + const evm = { + dispose: async () => {}, + initializeGenesis: async () => {}, + logsBloom: async () => "0".repeat(512), + prepareNextCommit: async () => {}, + rollback: async () => {}, + snapshot: async () => {}, + stateRoot: async () => "0000000000000000000000000000000000000000000000000000000000000000", + updateRewardsAndVotes: async () => {}, }; - context.app.rebind(Identifiers.Transaction.Validator.Factory).toConstantValue(() => validator); + context.app.bind(Identifiers.Evm.Instance).toConstantValue(evm).whenTagged("instance", "validator"); + + context.app.rebind(Identifiers.Transaction.Handler).toConstantValue({ + apply: async () => ({ gasRefunded: 0n, gasUsed: 0n, logs: [], status: 1 }), + }); - context.app.bind(Identifiers.Evm.Instance).toConstantValue(() => {}); context.app.bind(EvmConsensusIdentifiers.Internal.GenesisInfo).toConstantValue({}); context.app.bind(Identifiers.State.Store).toConstantValue({ diff --git a/packages/validator/test/helpers/prepare-sandbox.ts b/packages/validator/test/helpers/prepare-sandbox.ts index 952b909710..776eaec27f 100644 --- a/packages/validator/test/helpers/prepare-sandbox.ts +++ b/packages/validator/test/helpers/prepare-sandbox.ts @@ -78,22 +78,22 @@ export const prepareSandbox = async (context: { app?: Application }): Promise ({ - dispose: async () => {}, - initializeGenesis: async () => {}, - logsBloom: async () => "0".repeat(512), - prepareNextCommit: async () => {}, - rollback: async () => {}, - snapshot: async () => {}, - stateRoot: async () => "0000000000000000000000000000000000000000000000000000000000000000", - updateRewardsAndVotes: async () => {}, - }), - validate: async () => true, + const evm = { + dispose: async () => {}, + initializeGenesis: async () => {}, + logsBloom: async () => "0".repeat(512), + prepareNextCommit: async () => {}, + rollback: async () => {}, + snapshot: async () => {}, + stateRoot: async () => "0000000000000000000000000000000000000000000000000000000000000000", + updateRewardsAndVotes: async () => {}, }; - context.app.rebind(Identifiers.Transaction.Validator.Factory).toConstantValue(() => validator); + context.app.bind(Identifiers.Evm.Instance).toConstantValue(evm).whenTagged("instance", "validator"); + + context.app.rebind(Identifiers.Transaction.Handler).toConstantValue({ + apply: async () => ({ gasRefunded: 0n, gasUsed: 0n, logs: [], status: 1 }), + }); - context.app.bind(Identifiers.Evm.Instance).toConstantValue(() => {}); context.app.bind(EvmConsensusIdentifiers.Internal.GenesisInfo).toConstantValue({}); context.app.bind(Identifiers.State.Store).toConstantValue({ diff --git a/tests/functional/consensus/source/custom-proposal.ts b/tests/functional/consensus/source/custom-proposal.ts index 42e6164f4e..058f674d37 100644 --- a/tests/functional/consensus/source/custom-proposal.ts +++ b/tests/functional/consensus/source/custom-proposal.ts @@ -1,6 +1,7 @@ import type { Consensus } from "@mainsail/consensus/distribution/consensus.js"; -import { Identifiers } from "@mainsail/constants"; import type { Contracts } from "@mainsail/contracts"; + +import { Identifiers } from "@mainsail/constants"; import { Proposal } from "@mainsail/crypto-proposal"; import { assert } from "@mainsail/utils"; import { randomBytes } from "crypto"; @@ -29,10 +30,8 @@ export const makeCustomProposal = async ( const cryptoConfiguration = app.get(Identifiers.Cryptography.Configuration); const milestone = cryptoConfiguration.getMilestone(); - const transactionValidatorFactory = app.get( - Identifiers.Transaction.Validator.Factory, - ); - const transactionValidator = transactionValidatorFactory(); + const transactionHandler = app.get(Identifiers.Transaction.Handler); + const evm = app.getTagged(Identifiers.Evm.Instance, "instance", "validator"); // 2) const round = app.get(Identifiers.Consensus.Service).getRound(); @@ -65,12 +64,17 @@ export const makeCustomProposal = async ( let result = { gasRefunded: 0n, gasUsed: 0n, logs: [] as any, status: 0 }; try { - result = await transactionValidator.validate( + result = await transactionHandler.apply( { - commitKey, - gasLimit: milestone.block.maxGasLimit, - generatorAddress: validators[0].publicKey, - timestamp: dayjs().valueOf(), + evm: { + blockContext: { + commitKey, + gasLimit: BigInt(milestone.block.maxGasLimit), + timestamp: BigInt(dayjs().valueOf()), + validatorAddress: validators[0].publicKey, + }, + instance: evm, + }, }, transaction, ); @@ -95,7 +99,7 @@ export const makeCustomProposal = async ( payloadSize += transaction.serialized.byteLength + 2; } - await transactionValidator.getEvm().dispose(); + await evm.dispose(); const hashFactory = app.get(Identifiers.Cryptography.Hash.Factory); const blockFactory = app.get(Identifiers.Cryptography.Block.Factory); @@ -131,8 +135,8 @@ export const makeCustomProposal = async ( const serializedProposal = await messageSerializer.serializeProposalUnsigned({ payloadSerialized: proposedBytes.toString("hex"), round, - validRound: undefined, validatorIndex: 0, + validRound: undefined, }); const proposalSignature = await app From 435ccbd22efb2c5cbdb41bbce4982f908d9c4166 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 25 May 2026 11:20:48 +0000 Subject: [PATCH 6/6] Remove unused interfaces --- .../contracts/source/contracts/transactions.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/contracts/source/contracts/transactions.ts b/packages/contracts/source/contracts/transactions.ts index 9060177692..b4c2dd3d42 100644 --- a/packages/contracts/source/contracts/transactions.ts +++ b/packages/contracts/source/contracts/transactions.ts @@ -1,5 +1,5 @@ import type { Transaction, TransactionData } from "./crypto/index.js"; -import type { BlockContext, CommitKey, Instance, TransactionReceipt } from "./evm/index.js"; +import type { BlockContext, Instance, TransactionReceipt } from "./evm/index.js"; import type { Wallet } from "./state/index.js"; export type TransactionHandlerConstructor = new () => TransactionHandler; @@ -36,17 +36,3 @@ export interface TransactionHandlerProvider { registerHandlers(): void; } - -export interface TransactionValidatorContext { - commitKey: CommitKey; - gasLimit: number; - timestamp: number; - generatorAddress: string; -} - -export interface TransactionValidator { - getEvm(): Instance; - validate(context: TransactionValidatorContext, transaction: Transaction): Promise; -} - -export type TransactionValidatorFactory = () => TransactionValidator;