From 6823f6686da1ab4c1ac8abf807bef2cca24bc1cd Mon Sep 17 00:00:00 2001 From: "Sebastijan K." <58827427+sebastijankuzner@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:54:27 +0100 Subject: [PATCH] feat(api-evm): add `prefixedTransactionId` and `prefixedBlockId` schemas (#832) * Add prefixedTransactionId * Add prefixedBlockId * Remove schemas * Remove TODO * Extract block tag * Extract block tag * Fix tests --- packages/api-evm/package.json | 3 +++ packages/api-evm/source/actions/eth-call.ts | 6 ++--- .../source/actions/eth-get-balance.test.ts | 15 ++++--------- .../api-evm/source/actions/eth-get-balance.ts | 2 +- .../source/actions/eth-get-block-by-hash.ts | 2 +- .../source/actions/eth-get-block-by-number.ts | 5 +---- ...et-block-transaction-count-by-hash.test.ts | 9 ++++---- ...eth-get-block-transaction-count-by-hash.ts | 2 +- ...-block-transaction-count-by-number.test.ts | 7 ++---- .../source/actions/eth-get-code.test.ts | 15 ++++--------- .../api-evm/source/actions/eth-get-code.ts | 2 +- .../source/actions/eth-get-storage-at.test.ts | 22 +++++-------------- .../source/actions/eth-get-storage-at.ts | 6 ++--- ...get-transaction-by-block-hash-and-index.ts | 2 +- ...t-transaction-by-block-number-and-index.ts | 2 +- .../actions/eth-get-transaction-by-hash.ts | 2 +- .../actions/eth-get-transaction-count.test.ts | 15 ++++--------- .../actions/eth-get-transaction-count.ts | 2 +- .../actions/eth-get-transaction-receipt.ts | 4 +--- .../eth-get-uncle-by-block-hash-and-index.ts | 2 +- .../eth-get-uncle-count-by-block-hash.ts | 2 +- .../api-evm/source/actions/web3-sha3.test.ts | 7 ++---- packages/api-evm/source/index.ts | 1 - packages/api-evm/source/schemas.ts | 17 -------------- packages/api-evm/source/server.ts | 4 +--- packages/api-evm/source/service-provider.ts | 1 - .../source/contracts/crypto/block.ts | 1 + packages/crypto-block/source/schemas.ts | 18 ++++++++++++++- .../source/validation/schemas.ts | 7 ++++++ pnpm-lock.yaml | 9 ++++++++ 30 files changed, 80 insertions(+), 112 deletions(-) delete mode 100644 packages/api-evm/source/schemas.ts diff --git a/packages/api-evm/package.json b/packages/api-evm/package.json index 51d24f18f..b633e91de 100644 --- a/packages/api-evm/package.json +++ b/packages/api-evm/package.json @@ -32,6 +32,9 @@ "joi": "17.12.2" }, "devDependencies": { + "@mainsail/crypto-address-keccak256": "workspace:*", + "@mainsail/crypto-block": "workspace:*", + "@mainsail/crypto-validation": "workspace:*", "@mainsail/validation": "workspace:*", "@types/semver": "7.5.8", "uvu": "^0.5.6" diff --git a/packages/api-evm/source/actions/eth-call.ts b/packages/api-evm/source/actions/eth-call.ts index a5d82e4b2..8d4173350 100644 --- a/packages/api-evm/source/actions/eth-call.ts +++ b/packages/api-evm/source/actions/eth-call.ts @@ -2,8 +2,6 @@ import { inject, injectable, tagged } from "@mainsail/container"; import { Contracts, Exceptions, Identifiers } from "@mainsail/contracts"; import { ethers } from "ethers"; -type BlockTag = "latest" | "finalized" | "safe"; - type TxData = { from: string; to: string; @@ -35,13 +33,13 @@ export class CallAction implements Contracts.Api.RPC.Action { required: ["from", "to", "data"], type: "object", }, - { enum: ["latest", "finalized", "safe"], type: "string" }, + { $ref: "blockTag" }, ], type: "array", }; - public async handle(parameters: [TxData, BlockTag]): Promise { + public async handle(parameters: [TxData, Contracts.Crypto.BlockTag]): Promise { const [data] = parameters; const { success, output } = await this.evm.view({ diff --git a/packages/api-evm/source/actions/eth-get-balance.test.ts b/packages/api-evm/source/actions/eth-get-balance.test.ts index cba911697..f6f6c5a95 100644 --- a/packages/api-evm/source/actions/eth-get-balance.test.ts +++ b/packages/api-evm/source/actions/eth-get-balance.test.ts @@ -1,4 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; +import { schemas as keccak256Schemas } from "@mainsail/crypto-address-keccak256"; +import { schemas as blockSchemas } from "@mainsail/crypto-block"; import { Validator } from "@mainsail/validation"; import { describe, Sandbox } from "../../../test-framework/source"; @@ -34,17 +36,8 @@ describe<{ }); it("schema should be array with 0 parameters", ({ action, validator }) => { - validator.addSchema({ - $id: "address", - allOf: [ - { - maxLength: 42, - minLength: 42, - pattern: "^0x[0123456789a-fA-F]+$", - }, - ], - type: "string", - }); + validator.addSchema(keccak256Schemas.address); + validator.addSchema(blockSchemas.blockTag); validator.addSchema(action.schema); assert.undefined( diff --git a/packages/api-evm/source/actions/eth-get-balance.ts b/packages/api-evm/source/actions/eth-get-balance.ts index 079333d7b..90df1559a 100644 --- a/packages/api-evm/source/actions/eth-get-balance.ts +++ b/packages/api-evm/source/actions/eth-get-balance.ts @@ -15,7 +15,7 @@ export class EthGetBalanceAction implements Contracts.Api.RPC.Action { maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "address" }, { enum: ["latest", "finalized", "safe"], type: "string" }], + prefixItems: [{ $ref: "address" }, { $ref: "blockTag" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-block-by-hash.ts b/packages/api-evm/source/actions/eth-get-block-by-hash.ts index 69c3d5e7a..5b98fed1b 100644 --- a/packages/api-evm/source/actions/eth-get-block-by-hash.ts +++ b/packages/api-evm/source/actions/eth-get-block-by-hash.ts @@ -19,7 +19,7 @@ export class EthGetBlockByHashAction implements Contracts.Api.RPC.Action { maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "prefixedHex" }, { type: "boolean" }], // TODO: Replace prefixedHex with prefixedBlockId + prefixItems: [{ $ref: "prefixedBlockId" }, { type: "boolean" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-block-by-number.ts b/packages/api-evm/source/actions/eth-get-block-by-number.ts index 54e9f7f86..f34ed923b 100644 --- a/packages/api-evm/source/actions/eth-get-block-by-number.ts +++ b/packages/api-evm/source/actions/eth-get-block-by-number.ts @@ -22,10 +22,7 @@ export class EthGetBlockByNumberAction implements Contracts.Api.RPC.Action { maxItems: 2, minItems: 2, - prefixItems: [ - { oneOf: [{ $ref: "prefixedHex" }, { enum: ["latest", "finalized", "safe"], type: "string" }] }, // TODO: Extract block tag - { type: "boolean" }, - ], + prefixItems: [{ oneOf: [{ $ref: "prefixedHex" }, { $ref: "blockTag" }] }, { type: "boolean" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.test.ts b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.test.ts index e4195a6b0..5eb8c0f21 100644 --- a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.test.ts +++ b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.test.ts @@ -1,4 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; +import { schemas as cryptoBlockSchemas } from "@mainsail/crypto-block"; +import { schemas as cryptoValidationSchemas } from "@mainsail/crypto-validation"; import { Validator } from "@mainsail/validation"; import { describe, Sandbox } from "../../../test-framework/source"; @@ -28,11 +30,8 @@ describe<{ }); it("schema should be array with 0 parameters", ({ action, validator }) => { - validator.addSchema({ - $id: "prefixedHex", - pattern: "^0x[0-9a-f]+$", - type: "string", - }); + validator.addSchema(cryptoValidationSchemas.prefixedHex); + validator.addSchema(cryptoBlockSchemas.prefixedBlockId); validator.addSchema(action.schema); assert.undefined( diff --git a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.ts b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.ts index 044761cf1..12a2a87cd 100644 --- a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.ts +++ b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-hash.ts @@ -14,7 +14,7 @@ export class EthGetBlockTransactionCountByHash implements Contracts.Api.RPC.Acti maxItems: 1, minItems: 1, - prefixItems: [{ $ref: "prefixedHex" }], // TODO: Replace prefixedHex with prefixedBlockId + prefixItems: [{ $ref: "prefixedBlockId" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-number.test.ts b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-number.test.ts index d5649d6c4..800533a2a 100644 --- a/packages/api-evm/source/actions/eth-get-block-transaction-count-by-number.test.ts +++ b/packages/api-evm/source/actions/eth-get-block-transaction-count-by-number.test.ts @@ -1,5 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; import { Validator } from "@mainsail/validation"; +import { schemas as cryptoValidationSchemas } from "@mainsail/crypto-validation"; import { describe, Sandbox } from "../../../test-framework/source"; import { EthGetBlockTransactionCountByNumber } from "./index.js"; @@ -28,11 +29,7 @@ describe<{ }); it("schema should be array with 0 parameters", ({ action, validator }) => { - validator.addSchema({ - $id: "prefixedHex", - pattern: "^0x[0-9a-f]+$", - type: "string", - }); + validator.addSchema(cryptoValidationSchemas.prefixedHex); validator.addSchema(action.schema); assert.undefined(validator.validate("jsonRpc_eth_getBlockTransactionCountByNumber", ["0x0"]).errors); diff --git a/packages/api-evm/source/actions/eth-get-code.test.ts b/packages/api-evm/source/actions/eth-get-code.test.ts index a125ffb60..2f1a69dea 100644 --- a/packages/api-evm/source/actions/eth-get-code.test.ts +++ b/packages/api-evm/source/actions/eth-get-code.test.ts @@ -1,4 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; +import { schemas as keccak256Schemas } from "@mainsail/crypto-address-keccak256"; +import { schemas as blockSchemas } from "@mainsail/crypto-block"; import { Validator } from "@mainsail/validation"; import { describe, Sandbox } from "../../../test-framework/source"; @@ -28,17 +30,8 @@ describe<{ }); it("schema should be ok", ({ action, validator }) => { - validator.addSchema({ - $id: "address", - allOf: [ - { - maxLength: 42, - minLength: 42, - pattern: "^0x[0123456789a-fA-F]+$", - }, - ], - type: "string", - }); + validator.addSchema(keccak256Schemas.address); + validator.addSchema(blockSchemas.blockTag); validator.addSchema(action.schema); assert.undefined( diff --git a/packages/api-evm/source/actions/eth-get-code.ts b/packages/api-evm/source/actions/eth-get-code.ts index ec1409b29..f8cf308cc 100644 --- a/packages/api-evm/source/actions/eth-get-code.ts +++ b/packages/api-evm/source/actions/eth-get-code.ts @@ -15,7 +15,7 @@ export class EthGetCodeAction implements Contracts.Api.RPC.Action { maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "address" }, { enum: ["latest", "finalized", "safe"], type: "string" }], + prefixItems: [{ $ref: "address" }, { $ref: "blockTag" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-storage-at.test.ts b/packages/api-evm/source/actions/eth-get-storage-at.test.ts index f8c513958..b71679b4d 100644 --- a/packages/api-evm/source/actions/eth-get-storage-at.test.ts +++ b/packages/api-evm/source/actions/eth-get-storage-at.test.ts @@ -1,4 +1,7 @@ import { Identifiers } from "@mainsail/contracts"; +import { schemas as keccak256Schemas } from "@mainsail/crypto-address-keccak256"; +import { schemas as blockSchemas } from "@mainsail/crypto-block"; +import { schemas as cryptoValidationSchemas } from "@mainsail/crypto-validation"; import { Validator } from "@mainsail/validation"; import { describe, Sandbox } from "../../../test-framework/source"; @@ -28,22 +31,9 @@ describe<{ }); it("schema should be ok", ({ action, validator }) => { - validator.addSchema({ - $id: "address", - allOf: [ - { - maxLength: 42, - minLength: 42, - pattern: "^0x[0123456789a-fA-F]+$", - }, - ], - type: "string", - }); - validator.addSchema({ - $id: "prefixedHex", - pattern: "^0x[0-9a-f]+$", - type: "string", - }); + validator.addSchema(keccak256Schemas.address); + validator.addSchema(cryptoValidationSchemas.prefixedHex); + validator.addSchema(blockSchemas.blockTag); validator.addSchema(action.schema); assert.undefined( diff --git a/packages/api-evm/source/actions/eth-get-storage-at.ts b/packages/api-evm/source/actions/eth-get-storage-at.ts index 9766e1be7..830d3a2d0 100644 --- a/packages/api-evm/source/actions/eth-get-storage-at.ts +++ b/packages/api-evm/source/actions/eth-get-storage-at.ts @@ -1,8 +1,6 @@ import { inject, injectable, tagged } from "@mainsail/container"; import { Contracts, Identifiers } from "@mainsail/contracts"; -type BlockTag = "latest" | "earliest" | "pending"; - @injectable() export class EthGetStorageAtAction implements Contracts.Api.RPC.Action { @inject(Identifiers.Evm.Instance) @@ -20,12 +18,12 @@ export class EthGetStorageAtAction implements Contracts.Api.RPC.Action { prefixItems: [ { $ref: "address" }, { allOf: [{ $ref: "prefixedHex" }, { maxLength: 66, type: "string" }] }, - { enum: ["latest", "finalized", "safe"], type: "string" }, + { $ref: "blockTag" }, ], type: "array", }; - public async handle(parameters: [string, string, BlockTag]): Promise { + public async handle(parameters: [string, string, Contracts.Crypto.BlockTag]): Promise { const [address, slot] = parameters; return await this.evm.storageAt(address, BigInt(slot)); diff --git a/packages/api-evm/source/actions/eth-get-transaction-by-block-hash-and-index.ts b/packages/api-evm/source/actions/eth-get-transaction-by-block-hash-and-index.ts index b40d789ac..38e9d09f0 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-by-block-hash-and-index.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-by-block-hash-and-index.ts @@ -19,7 +19,7 @@ export class EthGetTransactionByBlockHashAndIndex implements Contracts.Api.RPC.A maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "prefixedHex" }, { $ref: "prefixedHex" }], // TODO: Use block id & limit sequence + prefixItems: [{ $ref: "prefixedBlockId" }, { $ref: "prefixedHex" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-transaction-by-block-number-and-index.ts b/packages/api-evm/source/actions/eth-get-transaction-by-block-number-and-index.ts index 7d005d013..94f8cdd23 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-by-block-number-and-index.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-by-block-number-and-index.ts @@ -19,7 +19,7 @@ export class EthGetTransactionByBlockNumberAndIndex implements Contracts.Api.RPC maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "prefixedHex" }, { $ref: "prefixedHex" }], // TODO: Limit sequence + prefixItems: [{ $ref: "prefixedHex" }, { $ref: "prefixedHex" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-transaction-by-hash.ts b/packages/api-evm/source/actions/eth-get-transaction-by-hash.ts index 341429a8d..7c21ef22b 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-by-hash.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-by-hash.ts @@ -19,7 +19,7 @@ export class EthGetTransactionByHash implements Contracts.Api.RPC.Action { maxItems: 1, minItems: 1, - prefixItems: [{ $ref: "prefixedHex" }], // TODO: Use transaction id + prefixItems: [{ $ref: "prefixedTransactionId" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-transaction-count.test.ts b/packages/api-evm/source/actions/eth-get-transaction-count.test.ts index 6c74bb7e6..bae712389 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-count.test.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-count.test.ts @@ -1,4 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; +import { schemas as keccak256Schemas } from "@mainsail/crypto-address-keccak256"; +import { schemas as blockSchemas } from "@mainsail/crypto-block"; import { Validator } from "@mainsail/validation"; import { describe, Sandbox } from "../../../test-framework/source"; @@ -34,17 +36,8 @@ describe<{ }); it("schema should be array with 0 parameters", ({ action, validator }) => { - validator.addSchema({ - $id: "address", - allOf: [ - { - maxLength: 42, - minLength: 42, - pattern: "^0x[0123456789a-fA-F]+$", - }, - ], - type: "string", - }); + validator.addSchema(keccak256Schemas.address); + validator.addSchema(blockSchemas.blockTag); validator.addSchema(action.schema); assert.undefined( diff --git a/packages/api-evm/source/actions/eth-get-transaction-count.ts b/packages/api-evm/source/actions/eth-get-transaction-count.ts index 997813129..a3cae141f 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-count.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-count.ts @@ -15,7 +15,7 @@ export class EthGetTransactionCount implements Contracts.Api.RPC.Action { maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "address" }, { enum: ["latest", "finalized", "safe"], type: "string" }], + prefixItems: [{ $ref: "address" }, { $ref: "blockTag" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-transaction-receipt.ts b/packages/api-evm/source/actions/eth-get-transaction-receipt.ts index 9d288d0c2..bc4631f4c 100644 --- a/packages/api-evm/source/actions/eth-get-transaction-receipt.ts +++ b/packages/api-evm/source/actions/eth-get-transaction-receipt.ts @@ -24,9 +24,7 @@ export class EthGetTransactionReceipt implements Contracts.Api.RPC.Action { maxItems: 1, minItems: 1, - prefixItems: [ - { $ref: "prefixedHex" }, // TODO: Extract transaction id - ], + prefixItems: [{ $ref: "prefixedTransactionId" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-uncle-by-block-hash-and-index.ts b/packages/api-evm/source/actions/eth-get-uncle-by-block-hash-and-index.ts index 672f67255..8887a6278 100644 --- a/packages/api-evm/source/actions/eth-get-uncle-by-block-hash-and-index.ts +++ b/packages/api-evm/source/actions/eth-get-uncle-by-block-hash-and-index.ts @@ -13,7 +13,7 @@ export class EthGetUncleByBlockHashAndIndex implements Contracts.Api.RPC.Action maxItems: 2, minItems: 2, - prefixItems: [{ $ref: "prefixedHex" }, { $ref: "prefixedHex" }], // TODO: Replace prefixedHex with prefixedBlockId + prefixItems: [{ $ref: "prefixedBlockId" }, { $ref: "prefixedHex" }], type: "array", }; diff --git a/packages/api-evm/source/actions/eth-get-uncle-count-by-block-hash.ts b/packages/api-evm/source/actions/eth-get-uncle-count-by-block-hash.ts index 02c629550..7461799d3 100644 --- a/packages/api-evm/source/actions/eth-get-uncle-count-by-block-hash.ts +++ b/packages/api-evm/source/actions/eth-get-uncle-count-by-block-hash.ts @@ -13,7 +13,7 @@ export class EthGetUncleCountByBlockHash implements Contracts.Api.RPC.Action { maxItems: 1, minItems: 1, - prefixItems: [{ $ref: "prefixedHex" }], // TODO: Replace prefixedHex with prefixedBlockId + prefixItems: [{ $ref: "prefixedBlockId" }], type: "array", }; diff --git a/packages/api-evm/source/actions/web3-sha3.test.ts b/packages/api-evm/source/actions/web3-sha3.test.ts index 659f46ab0..84705a6bf 100644 --- a/packages/api-evm/source/actions/web3-sha3.test.ts +++ b/packages/api-evm/source/actions/web3-sha3.test.ts @@ -1,5 +1,6 @@ import { Identifiers } from "@mainsail/contracts"; import { Validator } from "@mainsail/validation"; +import { schemas as cryptoValidationSchemas } from "@mainsail/crypto-validation"; import { describe, Sandbox } from "../../../test-framework/source"; import { Web3Sha3 } from "./index.js"; @@ -25,11 +26,7 @@ describe<{ }); it("schema should be ok", ({ action, validator }) => { - validator.addSchema({ - $id: "prefixedHex", - pattern: "^0x[0-9a-f]+$", - type: "string", - }); + validator.addSchema(cryptoValidationSchemas.prefixedHex); assert.equal(action.schema, { $id: `jsonRpc_web3_sha3`, diff --git a/packages/api-evm/source/index.ts b/packages/api-evm/source/index.ts index cf03a7290..8db374446 100644 --- a/packages/api-evm/source/index.ts +++ b/packages/api-evm/source/index.ts @@ -1,3 +1,2 @@ -export * as Schemas from "./schemas.js"; export * from "./server.js"; export * from "./service-provider.js"; diff --git a/packages/api-evm/source/schemas.ts b/packages/api-evm/source/schemas.ts deleted file mode 100644 index 9e8885c3f..000000000 --- a/packages/api-evm/source/schemas.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Joi from "joi"; - -export type SchemaObject = { - [x: string]: Joi.Schema | SchemaObject; -}; - -export const pagination = Joi.object({ - limit: Joi.number().integer().min(1).default(100).max(Joi.ref("$configuration.plugins.pagination.limit")), - page: Joi.number().integer().positive().default(1), -}); - -export const blockId = Joi.number().integer().min(0); - -export const orderBy = Joi.alternatives().try( - Joi.string().regex(/^[._a-z]{1,40}:(asc|desc)$/i), - Joi.array().items(Joi.string().regex(/^[._a-z]{1,40}:(asc|desc)$/i)), -); diff --git a/packages/api-evm/source/server.ts b/packages/api-evm/source/server.ts index 0c6a25588..0e20378bb 100644 --- a/packages/api-evm/source/server.ts +++ b/packages/api-evm/source/server.ts @@ -4,8 +4,6 @@ import { inject, injectable, tagged } from "@mainsail/container"; import { Identifiers } from "@mainsail/contracts"; import { Providers } from "@mainsail/kernel"; -import * as Schemas from "./schemas.js"; - @injectable() export class Server extends AbstractServer { @inject(Identifiers.ServiceProvider.Configuration) @@ -53,6 +51,6 @@ export class Server extends AbstractServer { } protected schemas(): any { - return Schemas; + return {}; } } diff --git a/packages/api-evm/source/service-provider.ts b/packages/api-evm/source/service-provider.ts index e80a5868d..83f941fa6 100644 --- a/packages/api-evm/source/service-provider.ts +++ b/packages/api-evm/source/service-provider.ts @@ -52,7 +52,6 @@ export class ServiceProvider extends AbstractServiceProvider { protected getPlugins(): any[] { const config = this.config().get("plugins"); - // @TODO: Implement RPC rate limiting & whitelist return [ { options: { diff --git a/packages/contracts/source/contracts/crypto/block.ts b/packages/contracts/source/contracts/crypto/block.ts index 8a68f257c..0c5e5ecd9 100644 --- a/packages/contracts/source/contracts/crypto/block.ts +++ b/packages/contracts/source/contracts/crypto/block.ts @@ -9,6 +9,7 @@ export interface BlockVerification { readonly containsMultiSignatures: boolean; } +export type BlockTag = "latest" | "finalized" | "safe"; export type BlockHeader = Exclude; export interface Block { diff --git a/packages/crypto-block/source/schemas.ts b/packages/crypto-block/source/schemas.ts index 7ff9d6513..df95bc0a7 100644 --- a/packages/crypto-block/source/schemas.ts +++ b/packages/crypto-block/source/schemas.ts @@ -1,6 +1,6 @@ import { AnySchemaObject } from "ajv"; -export const schemas: Record<"block" | "blockId" | "blockHeader", AnySchemaObject> = { +export const schemas: Record<"block" | "blockId" | "prefixedBlockId" | "blockTag" | "blockHeader", AnySchemaObject> = { block: { $id: "block", $ref: "blockHeader", @@ -57,4 +57,20 @@ export const schemas: Record<"block" | "blockId" | "blockHeader", AnySchemaObjec ], type: "string", }, + blockTag: { + $id: "blockTag", + enum: ["latest", "finalized", "safe"], + type: "string", + }, + prefixedBlockId: { + $id: "prefixedBlockId", + allOf: [ + { + $ref: "prefixedHex", + maxLength: 66, + minLength: 66, + }, + ], + type: "string", + }, }; diff --git a/packages/crypto-transaction/source/validation/schemas.ts b/packages/crypto-transaction/source/validation/schemas.ts index bf326de48..c4cc4f23e 100644 --- a/packages/crypto-transaction/source/validation/schemas.ts +++ b/packages/crypto-transaction/source/validation/schemas.ts @@ -6,6 +6,12 @@ const transactionId: SchemaObject = { type: "string", }; +const prefixedTransactionId: SchemaObject = { + $id: "prefixedTransactionId", + allOf: [{ maxLength: 66, minLength: 66 }, { $ref: "prefixedHex" }], + type: "string", +}; + const networkByte: SchemaObject = { $id: "networkByte", network: true, @@ -13,6 +19,7 @@ const networkByte: SchemaObject = { export const schemas = { networkByte, + prefixedTransactionId, transactionId, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0d4c5fa3..08561b9bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -331,6 +331,15 @@ importers: specifier: 17.12.2 version: 17.12.2 devDependencies: + '@mainsail/crypto-address-keccak256': + specifier: workspace:* + version: link:../crypto-address-keccak256 + '@mainsail/crypto-block': + specifier: workspace:* + version: link:../crypto-block + '@mainsail/crypto-validation': + specifier: workspace:* + version: link:../crypto-validation '@mainsail/validation': specifier: workspace:* version: link:../validation