From 7bcb508438fb9bc3c59cf93221e1b5e8eba1644d Mon Sep 17 00:00:00 2001 From: Sebastijan K <58827427+sebastijankuzner@users.noreply.github.com> Date: Thu, 5 May 2022 15:39:43 +0200 Subject: [PATCH 1/6] fix(crypto): walletVote schema is public key (#4663) --- packages/crypto/src/validation/schemas.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/crypto/src/validation/schemas.ts b/packages/crypto/src/validation/schemas.ts index 064bf0a723..75a69934f5 100644 --- a/packages/crypto/src/validation/schemas.ts +++ b/packages/crypto/src/validation/schemas.ts @@ -39,7 +39,7 @@ export const schemas = { walletVote: { $id: "walletVote", - allOf: [{ type: "string", pattern: "^[+|-][a-zA-Z0-9]{66}$" }, { transform: ["toLowerCase"] }], + allOf: [{ type: "string", pattern: "^[+|-][a-fA-F0-9]{66}$" }, { transform: ["toLowerCase"] }], }, username: { From 60049a1fa5b1f8cc40e2862a69b82a180a0211bc Mon Sep 17 00:00:00 2001 From: Sebastijan K <58827427+sebastijankuzner@users.noreply.github.com> Date: Tue, 31 May 2022 10:02:17 +0200 Subject: [PATCH 2/6] fix(core): remove unused bip38 flag (#4666) --- packages/core/src/commands/config-forger.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/commands/config-forger.ts b/packages/core/src/commands/config-forger.ts index f167fe441c..84438d3a70 100644 --- a/packages/core/src/commands/config-forger.ts +++ b/packages/core/src/commands/config-forger.ts @@ -38,7 +38,6 @@ export class Command extends Commands.Command { this.definition .setFlag("token", "The name of the token.", Joi.string().default("ark")) .setFlag("network", "The name of the network.", Joi.string().valid(...Object.keys(Networks))) - .setFlag("bip38", "", Joi.string()) .setFlag("bip39", "A delegate plain text passphrase. Referred to as BIP39.", Joi.string()) .setFlag("password", "A custom password that encrypts the BIP39. Referred to as BIP38.", Joi.string()) .setFlag( From d3a547795111509020a93a7bd131880a3f879fc3 Mon Sep 17 00:00:00 2001 From: ItsANameToo <35610748+ItsANameToo@users.noreply.github.com> Date: Tue, 14 Jun 2022 14:13:55 +0200 Subject: [PATCH 3/6] chore: update codeowners (#4673) --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index b3f9a66177..2806a81385 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @faustbrian @air1one @rainydio @sebastijankuzner +* @itsanametoo @sebastijankuzner From 4e6d4bb631ba14a84e5b51e087ad93e12e9e73ce Mon Sep 17 00:00:00 2001 From: Sebastijan K <58827427+sebastijankuzner@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:27:21 +0200 Subject: [PATCH 4/6] Disable fast update (#4671) --- ...00000-disable-fastupdate-on-gin-indexes.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/core-database/src/migrations/20220606000000-disable-fastupdate-on-gin-indexes.ts diff --git a/packages/core-database/src/migrations/20220606000000-disable-fastupdate-on-gin-indexes.ts b/packages/core-database/src/migrations/20220606000000-disable-fastupdate-on-gin-indexes.ts new file mode 100644 index 0000000000..0c0c444d7a --- /dev/null +++ b/packages/core-database/src/migrations/20220606000000-disable-fastupdate-on-gin-indexes.ts @@ -0,0 +1,21 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class DisableFastupdateOnGinIndexes20220606000000 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DROP INDEX IF EXISTS transactions_asset; + DROP INDEX IF EXISTS transactions_asset_payments; + CREATE INDEX transactions_asset ON transactions USING GIN(asset) WITH (fastupdate = off); + CREATE INDEX transactions_asset_payments ON transactions USING GIN ((asset->'payments')) WITH (fastupdate = off); + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DROP INDEX IF EXISTS transactions_asset; + DROP INDEX IF EXISTS transactions_asset_payments; + CREATE INDEX transactions_asset ON transactions USING GIN(asset); + CREATE INDEX transactions_asset_payments ON transactions USING GIN ((asset->'payments')); + `); + } +} From 5e718ed0161bbfdc51cbc4a383a1936e3d8481a5 Mon Sep 17 00:00:00 2001 From: Sebastijan K <58827427+sebastijankuzner@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:36:21 +0200 Subject: [PATCH 5/6] fix(crypto): Reduce allocated buffer size for transaction serialization (#4670) * Dynamic buffer size calculation * Fix tests * Lint --- __tests__/unit/crypto/blocks/block.test.ts | 6 +++--- packages/crypto/src/transactions/serializer.ts | 12 +++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/__tests__/unit/crypto/blocks/block.test.ts b/__tests__/unit/crypto/blocks/block.test.ts index c4d337961e..01f65585f0 100644 --- a/__tests__/unit/crypto/blocks/block.test.ts +++ b/__tests__/unit/crypto/blocks/block.test.ts @@ -16,7 +16,7 @@ const { outlookTable } = configManager.getPreset("mainnet").exceptions; beforeEach(() => configManager.setFromPreset("devnet")); -afterEach(() => jest.resetAllMocks()); +afterEach(() => jest.clearAllMocks()); describe("Block", () => { const data = { @@ -135,7 +135,7 @@ describe("Block", () => { jest.spyOn(configManager, "getMilestone").mockImplementation((height) => ({ block: { version: 0, - maxTransactions: 200, + maxTransactions: dummyBlock.numberOfTransactions, maxPayload: dummyBlockSize - 1, }, reward: 200000000, @@ -150,7 +150,7 @@ describe("Block", () => { jest.spyOn(configManager, "getMilestone").mockImplementation((height) => ({ block: { version: 0, - maxTransactions: 200, + maxTransactions: dummyBlock.numberOfTransactions, maxPayload: dummyBlockSize, }, reward: 200000000, diff --git a/packages/crypto/src/transactions/serializer.ts b/packages/crypto/src/transactions/serializer.ts index 49191b6674..1f444f88ee 100644 --- a/packages/crypto/src/transactions/serializer.ts +++ b/packages/crypto/src/transactions/serializer.ts @@ -28,9 +28,15 @@ export class Serializer { * Serializes the given transaction according to AIP11. */ public static serialize(transaction: ITransaction, options: ISerializeOptions = {}): Buffer { - const buff: ByteBuffer = new ByteBuffer( - Buffer.alloc(configManager.getMilestone(configManager.getHeight()).block?.maxPayload ?? 8192), - ); + let size = 83886; + const maxPayload = configManager.getMilestone(configManager.getHeight()).block?.maxPayload; + const maxTransactions = configManager.getMilestone(configManager.getHeight()).block?.maxTransactions; + + if (maxPayload && maxTransactions) { + size = Math.floor(maxPayload / maxTransactions) * 2; + } + + const buff: ByteBuffer = new ByteBuffer(Buffer.alloc(size)); this.serializeCommon(transaction.data, buff); this.serializeVendorField(transaction, buff); From f947aa1f4eda010aacd8dd7415cc3f9a5bf8dbea Mon Sep 17 00:00:00 2001 From: Sebastijan K <58827427+sebastijankuzner@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:36:37 +0200 Subject: [PATCH 6/6] fix(core-database): convert vendorField query parameter to buffer (#4672) * Convert vendor field to bufffer * Fix test --- __tests__/unit/core-database/transaction-filter.test.ts | 2 +- packages/core-database/src/transaction-filter.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/unit/core-database/transaction-filter.test.ts b/__tests__/unit/core-database/transaction-filter.test.ts index 04668f37bf..7fa6155b82 100644 --- a/__tests__/unit/core-database/transaction-filter.test.ts +++ b/__tests__/unit/core-database/transaction-filter.test.ts @@ -374,7 +374,7 @@ describe("TransactionFilter.getExpression", () => { expect(expression).toEqual({ property: "vendorField", op: "like", - pattern: "%pattern%", + pattern: Buffer.from("%pattern%", "utf-8"), }); }); }); diff --git a/packages/core-database/src/transaction-filter.ts b/packages/core-database/src/transaction-filter.ts index ef7c0e1c78..b2ae216744 100644 --- a/packages/core-database/src/transaction-filter.ts +++ b/packages/core-database/src/transaction-filter.ts @@ -82,7 +82,7 @@ export class TransactionFilter implements Contracts.Database.TransactionFilter { }); case "vendorField": return handleOrCriteria(criteria.vendorField!, async (c) => { - return { property: "vendorField", op: "like", pattern: c }; + return { property: "vendorField", op: "like", pattern: Buffer.from(c, "utf-8") }; }); case "amount": return handleOrCriteria(criteria.amount!, async (c) => {