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", 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..a31faa1af 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.toBech32() || 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