From 12da165f234e5f7c67124aecd346768faac870ad Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 16 Jan 2025 13:36:35 +0200 Subject: [PATCH 1/6] Add support for Array6 --- src/smartcontracts/typesystem/typeMapper.spec.ts | 1 + src/smartcontracts/typesystem/typeMapper.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/smartcontracts/typesystem/typeMapper.spec.ts b/src/smartcontracts/typesystem/typeMapper.spec.ts index 130d511b6..6d53aa7dd 100644 --- a/src/smartcontracts/typesystem/typeMapper.spec.ts +++ b/src/smartcontracts/typesystem/typeMapper.spec.ts @@ -66,6 +66,7 @@ describe("test mapper", () => { it("should map arrays", () => { testArrayMapping("array2", 2, new BigUIntType()); testArrayMapping("array2", 2, new U32Type()); + testArrayMapping("array6", 6, new U8Type()); testArrayMapping("array8", 8, new BigUIntType()); testArrayMapping("array48", 48, new U8Type()); testArrayMapping("array256", 256, new BigUIntType()); diff --git a/src/smartcontracts/typesystem/typeMapper.ts b/src/smartcontracts/typesystem/typeMapper.ts index 8eebdf5f8..1d6fc13e3 100644 --- a/src/smartcontracts/typesystem/typeMapper.ts +++ b/src/smartcontracts/typesystem/typeMapper.ts @@ -69,6 +69,7 @@ export class TypeMapper { // Known-length arrays. // TODO: Handle these in typeExpressionParser! ["array2", (...typeParameters: Type[]) => new ArrayVecType(2, typeParameters[0])], + ["array6", (...typeParameters: Type[]) => new ArrayVecType(6, typeParameters[0])], ["array8", (...typeParameters: Type[]) => new ArrayVecType(8, typeParameters[0])], ["array16", (...typeParameters: Type[]) => new ArrayVecType(16, typeParameters[0])], ["array20", (...typeParameters: Type[]) => new ArrayVecType(20, typeParameters[0])], From fb99316a2021b26991e14d94c412c6623906568e Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 16 Jan 2025 13:38:29 +0200 Subject: [PATCH 2/6] Bump versions and fix high vulnerabilities --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75b731163..bb8cc2ca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@multiversx/sdk-core", - "version": "13.16.0", + "version": "13.17.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@multiversx/sdk-core", - "version": "13.16.0", + "version": "13.17.0", "license": "MIT", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", @@ -1511,9 +1511,9 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -6371,9 +6371,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", diff --git a/package.json b/package.json index 8d91ddebc..309c55e98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-core", - "version": "13.16.0", + "version": "13.17.0", "description": "MultiversX SDK for JavaScript and TypeScript", "author": "MultiversX", "homepage": "https://multiversx.com", From 6c4f73101b90e0443e5b57bf49ebd254700b2626 Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 23 Jan 2025 15:42:45 +0200 Subject: [PATCH 3/6] Fix send relayed transaction --- .../providers.dev.net.spec.ts | 38 +++++++++++++++++++ src/networkProviders/transactions.ts | 5 +++ 2 files changed, 43 insertions(+) diff --git a/src/networkProviders/providers.dev.net.spec.ts b/src/networkProviders/providers.dev.net.spec.ts index e8a4804ab..428a5d692 100644 --- a/src/networkProviders/providers.dev.net.spec.ts +++ b/src/networkProviders/providers.dev.net.spec.ts @@ -1,7 +1,9 @@ import { AxiosHeaders } from "axios"; import { assert } from "chai"; import { Address } from "../address"; +import { loadTestWallet } from "../testutils"; import { MockQuery } from "../testutils/dummyQuery"; +import { TransactionComputer } from "../transactionComputer"; import { ApiNetworkProvider } from "./apiNetworkProvider"; import { INetworkProvider, ITransactionNext } from "./interface"; import { ProxyNetworkProvider } from "./proxyNetworkProvider"; @@ -192,6 +194,42 @@ describe("test network providers on devnet: Proxy and API", function () { proxyResponse.decimals = 0; } + it("should be able to send transaction with relayer", async function () { + this.timeout(5000); + const grace = await loadTestWallet("grace"); + const relayer = await loadTestWallet("alice"); + const transactionComputer = new TransactionComputer(); + const nonce = (await apiProvider.getAccount(grace.getAddress())).nonce; + const transaction: ITransactionNext = { + receiver: grace.getAddress().bech32(), + sender: grace.getAddress().bech32(), + gasPrice: BigInt(1000000000), + gasLimit: BigInt(150000), + chainID: "D", + version: 1, + nonce: BigInt(nonce), + relayer: relayer.getAddress(), + value: BigInt(1), + senderUsername: "", + receiverUsername: "", + guardian: "", + guardianSignature: new Uint8Array(), + options: 0, + data: new Uint8Array(), + signature: new Uint8Array(), + relayerSignature: new Uint8Array(), + }; + transaction.signature = await grace.signer.sign(transactionComputer.computeBytesForSigning(transaction)); + + const buffer = transactionComputer.computeBytesForSigning(transaction); + + const signature = await relayer.signer.sign(Buffer.from(buffer)); + transaction.relayerSignature = signature; + + const hash = await proxyProvider.sendTransaction(transaction); + assert.isNotNull(hash); + }); + it("should be able to send transaction(s)", async function () { this.timeout(5000); diff --git a/src/networkProviders/transactions.ts b/src/networkProviders/transactions.ts index 232691315..1d4396964 100644 --- a/src/networkProviders/transactions.ts +++ b/src/networkProviders/transactions.ts @@ -28,6 +28,11 @@ export function prepareTransactionForBroadcasting(transaction: ITransaction | IT version: transaction.version, options: transaction.options, guardian: transaction.guardian || undefined, + relayer: transaction.relayer.bech32() || undefined, + relayerSignature: + transaction.relayerSignature.length === 0 + ? undefined + : Buffer.from(transaction.relayerSignature).toString("hex"), signature: Buffer.from(transaction.signature).toString("hex"), guardianSignature: transaction.guardianSignature.length === 0 From 39293457520149efff4912ee8b315ede3f301ba3 Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 23 Jan 2025 15:43:34 +0200 Subject: [PATCH 4/6] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb8cc2ca2..28ac6bdd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@multiversx/sdk-core", - "version": "13.17.0", + "version": "13.17.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@multiversx/sdk-core", - "version": "13.17.0", + "version": "13.17.1", "license": "MIT", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", diff --git a/package.json b/package.json index 309c55e98..fa4d76b4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-core", - "version": "13.17.0", + "version": "13.17.1", "description": "MultiversX SDK for JavaScript and TypeScript", "author": "MultiversX", "homepage": "https://multiversx.com", From 8ea804512663f19afc992c81f9b77a92e00d5995 Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 23 Jan 2025 15:51:27 +0200 Subject: [PATCH 5/6] Update bech32 Method --- src/networkProviders/transactions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/networkProviders/transactions.ts b/src/networkProviders/transactions.ts index 1d4396964..a31faa1af 100644 --- a/src/networkProviders/transactions.ts +++ b/src/networkProviders/transactions.ts @@ -28,7 +28,7 @@ export function prepareTransactionForBroadcasting(transaction: ITransaction | IT version: transaction.version, options: transaction.options, guardian: transaction.guardian || undefined, - relayer: transaction.relayer.bech32() || undefined, + relayer: transaction.relayer.toBech32() || undefined, relayerSignature: transaction.relayerSignature.length === 0 ? undefined From ce865e8ef59cc326d2e16b2ad34bf09e377e11c9 Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 30 Jan 2025 10:04:32 +0200 Subject: [PATCH 6/6] Add relayer fields --- src/core/transactionOnNetwork.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/transactionOnNetwork.ts b/src/core/transactionOnNetwork.ts index 1d5cc96c3..5d6cbafc6 100644 --- a/src/core/transactionOnNetwork.ts +++ b/src/core/transactionOnNetwork.ts @@ -28,6 +28,11 @@ export function prepareTransactionForBroadcasting(transaction: Transaction): any transaction.guardianSignature.length === 0 ? undefined : Buffer.from(transaction.guardianSignature).toString("hex"), + relayer: transaction.relayer.isEmpty() ? undefined : transaction.relayer.toBech32(), + relayerSignature: + transaction.relayerSignature.length === 0 + ? undefined + : Buffer.from(transaction.relayerSignature).toString("hex"), }; }