Skip to content

Commit

Permalink
support notarizing transactions for token transfers factory
Browse files Browse the repository at this point in the history
  • Loading branch information
popenta committed Jul 9, 2024
1 parent 2a46daf commit 96e79d5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 13 deletions.
58 changes: 50 additions & 8 deletions src/transactionsFactories/transferTransactionsFactory.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
Expand All @@ -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 });

Expand Down
6 changes: 1 addition & 5 deletions src/transactionsFactories/transferTransactionsFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 96e79d5

Please sign in to comment.