From 96e79d566dbf1bb976e6f8e5b1235c2d64da996b Mon Sep 17 00:00:00 2001 From: Alexandru Popenta Date: Tue, 9 Jul 2024 10:55:46 +0300 Subject: [PATCH] support notarizing transactions for token transfers factory --- .../transferTransactionsFactory.spec.ts | 58 ++++++++++++++++--- .../transferTransactionsFactory.ts | 6 +- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/src/transactionsFactories/transferTransactionsFactory.spec.ts b/src/transactionsFactories/transferTransactionsFactory.spec.ts index 3e354b13..1296be14 100644 --- a/src/transactionsFactories/transferTransactionsFactory.spec.ts +++ b/src/transactionsFactories/transferTransactionsFactory.spec.ts @@ -117,16 +117,17 @@ describe("test transfer transactions factory", function () { transaction.data.toString(), "MultiESDTNFTTransfer@8049d639e5a6980d1cd2392abcce41029cda74a1563523a202f09641cc2618f8@02@4e46542d313233343536@0a@01@544553542d393837363534@01@01", ); + + const secondTransaction = transferFactory.createTransactionForTransfer({ + sender: alice, + receiver: bob, + tokenTransfers: [firstTransfer, secondTransfer], + }); + + assert.deepEqual(transaction, secondTransaction); }); it("should fail to create transaction for token transfers", async () => { - assert.throws(() => { - transferFactory.createTransactionForTransfer({ - sender: alice, - receiver: bob, - }); - }, "No native token amount or token transfers provided"); - assert.throws(() => { const nft = new Token({ identifier: "NFT-123456", nonce: 10n }); const transfer = new TokenTransfer({ token: nft, amount: 1n }); @@ -140,7 +141,48 @@ describe("test transfer transactions factory", function () { }, "Can't set data field when sending esdt tokens"); }); - it("should create 'Transaction' for token transfers", async () => { + it("should create transaction for native transfers", async () => { + const transaction = transferFactory.createTransactionForTransfer({ + sender: alice, + receiver: bob, + nativeAmount: 1000000000000000000n, + }); + + assert.equal(transaction.sender, alice.toBech32()); + assert.equal(transaction.receiver, bob.toBech32()); + assert.equal(transaction.value.valueOf(), 1000000000000000000n); + assert.equal(transaction.gasLimit.valueOf(), 50000n); + }); + + it("should create transaction for native transfers and set data field", async () => { + const transaction = transferFactory.createTransactionForTransfer({ + sender: alice, + receiver: bob, + nativeAmount: 1000000000000000000n, + data: Buffer.from("hello"), + }); + + assert.equal(transaction.sender, alice.toBech32()); + assert.equal(transaction.receiver, bob.toBech32()); + assert.equal(transaction.value.valueOf(), 1000000000000000000n); + assert.equal(transaction.gasLimit.valueOf(), 57500n); + assert.deepEqual(transaction.data, Buffer.from("hello")); + }); + + it("should create transaction for notarizing", async () => { + const transaction = transferFactory.createTransactionForTransfer({ + sender: alice, + receiver: bob, + data: Buffer.from("hello"), + }); + + assert.equal(transaction.sender, alice.toBech32()); + assert.equal(transaction.receiver, bob.toBech32()); + assert.equal(transaction.gasLimit.valueOf(), 57500n); + assert.deepEqual(transaction.data, Buffer.from("hello")); + }); + + it("should create transaction for token transfers", async () => { const firstNft = new Token({ identifier: "NFT-123456", nonce: 10n }); const firstTransfer = new TokenTransfer({ token: firstNft, amount: 1n }); diff --git a/src/transactionsFactories/transferTransactionsFactory.ts b/src/transactionsFactories/transferTransactionsFactory.ts index 68eacac9..834fa6dd 100644 --- a/src/transactionsFactories/transferTransactionsFactory.ts +++ b/src/transactionsFactories/transferTransactionsFactory.ts @@ -155,15 +155,11 @@ export class TransferTransactionsFactory { let tokenTransfers = options.tokenTransfers ? [...options.tokenTransfers] : []; const numberOfTokens = tokenTransfers.length; - if (!nativeAmount && numberOfTokens === 0) { - throw new ErrBadUsage("No native token amount or token transfers provided"); - } - if (numberOfTokens && options.data?.length) { throw new ErrBadUsage("Can't set data field when sending esdt tokens"); } - if (nativeAmount && numberOfTokens === 0) { + if ((nativeAmount && numberOfTokens === 0) || options.data) { return this.createTransactionForNativeTokenTransfer({ sender: options.sender, receiver: options.receiver,