diff --git a/package-lock.json b/package-lock.json index 5f22efdc..90590dc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@multiversx/sdk-core", - "version": "14.2.8", + "version": "14.2.9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@multiversx/sdk-core", - "version": "14.2.8", + "version": "14.2.9", "license": "MIT", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", @@ -2004,6 +2004,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", @@ -2604,13 +2619,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "optional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -6965,6 +6982,18 @@ "es-errors": "^1.3.0" } }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "optional": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, "es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", @@ -7393,13 +7422,15 @@ } }, "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, diff --git a/package.json b/package.json index d5a130c1..a93e045d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-core", - "version": "14.2.8", + "version": "14.2.9", "description": "MultiversX SDK for JavaScript and TypeScript", "author": "MultiversX", "homepage": "https://multiversx.com", diff --git a/src/multisig/multisigTransactionsFactory.spec.ts b/src/multisig/multisigTransactionsFactory.spec.ts index 068a05dd..d93e7aee 100644 --- a/src/multisig/multisigTransactionsFactory.spec.ts +++ b/src/multisig/multisigTransactionsFactory.spec.ts @@ -174,6 +174,30 @@ describe("test multisig transactions factory", function () { ); }); + it("should create transaction for propose transfer execute with EGLD send", function () { + const senderAddress = Address.newFromBech32("erd1spyavw0956vq68xj8y4tenjpq2wd5a9p2c6j8gsz7ztyrnpxrruqzu66jx"); + + const multisigContractAddress = Address.newFromBech32( + "erd1qqqqqqqqqqqqqpgq0rffvv4vk9vesqplv9ws55fxzdfaspqa8cfszy2hms", + ); + const amount = 1000000000000000000n; // 1 EGLD + const transaction = factory.createTransactionForProposeTransferExecute(senderAddress, { + multisigContract: multisigContractAddress, + gasLimit: 60_000_000n, + nativeTokenAmount: amount, + to: multisigContractAddress, + }); + + assert.instanceOf(transaction, Transaction); + assert.equal(transaction.sender.toBech32(), senderAddress.toBech32()); + assert.equal(transaction.receiver.toBech32(), multisigContractAddress.toBech32()); + assert.equal(transaction.chainID, config.chainID); + assert.deepEqual( + transaction.data.toString(), + "proposeTransferExecute@0000000000000000050078d29632acb15998003f615d0a51261353d8041d3e13@0de0b6b3a7640000@", + ); + }); + it("should create transaction for propose transfer execute ESDT", function () { const senderAddress = Address.newFromBech32("erd1spyavw0956vq68xj8y4tenjpq2wd5a9p2c6j8gsz7ztyrnpxrruqzu66jx"); const destinationContract = Address.newFromBech32( diff --git a/src/multisig/multisigTransactionsFactory.ts b/src/multisig/multisigTransactionsFactory.ts index c2997776..cf25aee2 100644 --- a/src/multisig/multisigTransactionsFactory.ts +++ b/src/multisig/multisigTransactionsFactory.ts @@ -124,14 +124,18 @@ export class MultisigTransactionsFactory { sender: Address, options: resources.ProposeTransferExecuteInput, ): Transaction { - const gasOption = new U64Value(options.optGasLimit ?? 0n); - const input = ProposeTransferExecuteContractInput.newFromTransferExecuteInput({ - multisig: options.multisigContract, - to: options.to, - functionName: options.functionName, - arguments: options.functionArguments, - abi: options.abi, - }); + const gasOption = options.optGasLimit ? new U64Value(options.optGasLimit) : null; + let functionCall = []; + if (options.functionName) { + const input = ProposeTransferExecuteContractInput.newFromTransferExecuteInput({ + multisig: options.multisigContract, + to: options.to, + functionName: options.functionName, + arguments: options.functionArguments, + abi: options.abi, + }); + functionCall = input.functionCall; + } return this.smartContractFactory.createTransactionForExecute(sender, { contract: options.multisigContract, @@ -141,7 +145,7 @@ export class MultisigTransactionsFactory { new AddressValue(options.to), new BigUIntValue(options.nativeTokenAmount), new OptionValue(new OptionType(new U64Type()), gasOption), - VariadicValue.fromItems(...input.functionCall.map((value) => new BytesValue(value))), + VariadicValue.fromItems(...functionCall.map((value) => new BytesValue(value))), ], }); } diff --git a/src/multisig/proposeTransferExecuteContractInput.ts b/src/multisig/proposeTransferExecuteContractInput.ts index 6c89b6cb..3ae252f3 100644 --- a/src/multisig/proposeTransferExecuteContractInput.ts +++ b/src/multisig/proposeTransferExecuteContractInput.ts @@ -21,7 +21,7 @@ export class ProposeTransferExecuteContractInput { multisig: Address; to: Address; functionName: string; - arguments: any[]; + arguments?: any[]; optGasLimit?: bigint; abi?: Abi; }): ProposeTransferExecuteContractInput { diff --git a/src/multisig/resources.ts b/src/multisig/resources.ts index 660fb7eb..edc9ee73 100644 --- a/src/multisig/resources.ts +++ b/src/multisig/resources.ts @@ -39,8 +39,8 @@ export type ProposeTransferExecuteInput = MultisigContractInput & { to: Address; nativeTokenAmount: bigint; optGasLimit?: bigint; - functionName: string; - functionArguments: any[]; + functionName?: string; + functionArguments?: any[]; abi?: Abi; };