diff --git a/package-lock.json b/package-lock.json index 5430da97c..187949585 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "protobufjs": "7.2.4" }, "devDependencies": { - "@multiversx/sdk-network-providers": "2.2.0", + "@multiversx/sdk-network-providers": "2.3.0", "@multiversx/sdk-wallet": "4.2.0", "@types/assert": "1.4.6", "@types/chai": "4.2.11", @@ -570,29 +570,18 @@ } }, "node_modules/@multiversx/sdk-network-providers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-network-providers/-/sdk-network-providers-2.2.0.tgz", - "integrity": "sha512-2n/+7Ap6S9rJGTiX38GCZ2TmY9zQ1U7o1DwnWpHNRJRxArSN/xzLrbcSKy8InMyc+4A+VHf5pV0Pk8NdPV6++w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-network-providers/-/sdk-network-providers-2.3.0.tgz", + "integrity": "sha512-dY7HI3rMgHHulxY9XR/O6/tCWji6ZvkuetW0NmLUjFnfOtkIdnhUzQ0u5wZaMN0SeuJIWf1QPZEsiGN82ilfTQ==", "dev": true, "dependencies": { - "axios": "1.6.1", + "axios": "1.6.5", "bech32": "1.1.4", "bignumber.js": "9.0.1", "buffer": "6.0.3", "json-bigint": "1.0.0" } }, - "node_modules/@multiversx/sdk-network-providers/node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/@multiversx/sdk-transaction-decoder": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@multiversx/sdk-transaction-decoder/-/sdk-transaction-decoder-1.0.2.tgz", @@ -6059,29 +6048,16 @@ "dev": true }, "@multiversx/sdk-network-providers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-network-providers/-/sdk-network-providers-2.2.0.tgz", - "integrity": "sha512-2n/+7Ap6S9rJGTiX38GCZ2TmY9zQ1U7o1DwnWpHNRJRxArSN/xzLrbcSKy8InMyc+4A+VHf5pV0Pk8NdPV6++w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-network-providers/-/sdk-network-providers-2.3.0.tgz", + "integrity": "sha512-dY7HI3rMgHHulxY9XR/O6/tCWji6ZvkuetW0NmLUjFnfOtkIdnhUzQ0u5wZaMN0SeuJIWf1QPZEsiGN82ilfTQ==", "dev": true, "requires": { - "axios": "1.6.1", + "axios": "1.6.5", "bech32": "1.1.4", "bignumber.js": "9.0.1", "buffer": "6.0.3", "json-bigint": "1.0.0" - }, - "dependencies": { - "axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "dev": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - } } }, "@multiversx/sdk-transaction-decoder": { diff --git a/package.json b/package.json index 83fcc1c63..436bef898 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "protobufjs": "7.2.4" }, "devDependencies": { - "@multiversx/sdk-network-providers": "2.2.0", + "@multiversx/sdk-network-providers": "2.3.0", "@multiversx/sdk-wallet": "4.2.0", "@types/assert": "1.4.6", "@types/chai": "4.2.11", diff --git a/src/smartcontracts/smartContract.local.net.spec.ts b/src/smartcontracts/smartContract.local.net.spec.ts index 0635c076f..e6f9d9852 100644 --- a/src/smartcontracts/smartContract.local.net.spec.ts +++ b/src/smartcontracts/smartContract.local.net.spec.ts @@ -10,6 +10,11 @@ import { ResultsParser } from "./resultsParser"; import { SmartContract } from "./smartContract"; import { AddressValue, BigUIntValue, OptionalValue, OptionValue, TokenIdentifierValue, U32Value } from "./typesystem"; import { BytesValue } from "./typesystem/bytes"; +import { TransactionsFactoryConfig } from "../transactionsFactories/transactionsFactoryConfig"; +import { SmartContractTransactionsFactory } from "../transactionsFactories/smartContractTransactionsFactory"; +import { TokenComputer } from "../tokens"; +import { promises } from "fs"; +import { TransactionComputer } from "../transaction"; describe("test on local testnet", function () { let alice: TestWallet, bob: TestWallet, carol: TestWallet; @@ -85,12 +90,12 @@ describe("test on local testnet", function () { await provider.sendTransaction(transactionDeploy); await provider.sendTransaction(transactionIncrement); - await watcher.awaitCompleted(transactionDeploy); + await watcher.awaitCompleted(transactionDeploy.getHash().hex()); let transactionOnNetwork = await provider.getTransaction(transactionDeploy.getHash().hex()); let bundle = resultsParser.parseUntypedOutcome(transactionOnNetwork); assert.isTrue(bundle.returnCode.isSuccess()); - await watcher.awaitCompleted(transactionIncrement); + await watcher.awaitCompleted(transactionIncrement.getHash().hex()); transactionOnNetwork = await provider.getTransaction(transactionIncrement.getHash().hex()); bundle = resultsParser.parseUntypedOutcome(transactionOnNetwork); assert.isTrue(bundle.returnCode.isSuccess()); @@ -150,9 +155,9 @@ describe("test on local testnet", function () { await provider.sendTransaction(transactionIncrementFirst); await provider.sendTransaction(transactionIncrementSecond); - await watcher.awaitCompleted(transactionDeploy); - await watcher.awaitCompleted(transactionIncrementFirst); - await watcher.awaitCompleted(transactionIncrementSecond); + await watcher.awaitCompleted(transactionDeploy.getHash().hex()); + await watcher.awaitCompleted(transactionIncrementFirst.getHash().hex()); + await watcher.awaitCompleted(transactionIncrementSecond.getHash().hex()); // Check counter let query = contract.createQuery({ func: new ContractFunction("get") }); @@ -212,9 +217,9 @@ describe("test on local testnet", function () { await provider.sendTransaction(transactionMintBob); await provider.sendTransaction(transactionMintCarol); - await watcher.awaitCompleted(transactionDeploy); - await watcher.awaitCompleted(transactionMintBob); - await watcher.awaitCompleted(transactionMintCarol); + await watcher.awaitCompleted(transactionDeploy.getHash().hex()); + await watcher.awaitCompleted(transactionMintBob.getHash().hex()); + await watcher.awaitCompleted(transactionMintCarol.getHash().hex()); // Query state, do some assertions let query = contract.createQuery({ func: new ContractFunction("totalSupply") }); @@ -294,8 +299,8 @@ describe("test on local testnet", function () { await provider.sendTransaction(transactionDeploy); await provider.sendTransaction(transactionStart); - await watcher.awaitAllEvents(transactionDeploy, ["SCDeploy"]); - await watcher.awaitAnyEvent(transactionStart, ["completedTxEvent"]); + await watcher.awaitAllEvents(transactionDeploy.getHash().hex(), ["SCDeploy"]); + await watcher.awaitAnyEvent(transactionStart.getHash().hex(), ["completedTxEvent"]); // Let's check the SCRs let transactionOnNetwork = await provider.getTransaction(transactionDeploy.getHash().hex()); @@ -325,4 +330,51 @@ describe("test on local testnet", function () { queryResponse = await provider.queryContract(query); assert.equal(decodeUnsignedNumber(queryResponse.getReturnDataParts()[0]), 0); }); + + it("counter: should deploy and call using the SmartContractFactory", async function () { + this.timeout(80000); + + TransactionWatcher.DefaultPollingInterval = 5000; + TransactionWatcher.DefaultTimeout = 50000; + + const network = await provider.getNetworkConfig(); + await alice.sync(provider); + + const transactionComputer = new TransactionComputer(); + const config = new TransactionsFactoryConfig(network.ChainID); + const factory = new SmartContractTransactionsFactory({ config: config, tokenComputer: new TokenComputer() }); + + let bytecode = await promises.readFile("src/testdata/counter.wasm"); + + const deployTransaction = factory.createTransactionForDeploy({ + sender: alice.address, + bytecode: bytecode, + gasLimit: 3000000n, + }); + deployTransaction.nonce = BigInt(alice.account.nonce.valueOf()); + deployTransaction.signature = await alice.signer.sign( + Buffer.from(transactionComputer.computeBytesForSigning(deployTransaction)), + ); + + const deployTxHash = await provider.sendTransaction(deployTransaction); + await watcher.awaitCompleted(deployTxHash); + + const contractAddress = SmartContract.computeAddress(alice.address, alice.account.nonce); + + alice.account.incrementNonce(); + + const smartContractCallTransaction = factory.createTransactionForExecute({ + sender: alice.address, + contract: contractAddress, + functionName: "increment", + gasLimit: 2000000n, + }); + smartContractCallTransaction.nonce = BigInt(alice.account.nonce.valueOf()); + smartContractCallTransaction.signature = await alice.signer.sign( + Buffer.from(transactionComputer.computeBytesForSigning(smartContractCallTransaction)), + ); + + const scCallTxHash = await provider.sendTransaction(smartContractCallTransaction); + await watcher.awaitCompleted(scCallTxHash); + }); }); diff --git a/src/smartcontracts/smartContract.spec.ts b/src/smartcontracts/smartContract.spec.ts index 0cb481044..23ad37018 100644 --- a/src/smartcontracts/smartContract.spec.ts +++ b/src/smartcontracts/smartContract.spec.ts @@ -64,7 +64,7 @@ describe("test contract", () => { await Promise.all([ provider.mockTransactionTimeline(deployTransaction, [new Wait(40), new TransactionStatus("pending"), new Wait(40), new TransactionStatus("executed"), new MarkCompleted()]), - watcher.awaitCompleted(deployTransaction) + watcher.awaitCompleted(deployTransaction.getHash().hex()) ]); assert.isTrue((await provider.getTransactionStatus(hash)).isExecuted()); @@ -118,8 +118,8 @@ describe("test contract", () => { await Promise.all([ provider.mockTransactionTimeline(callTransactionOne, [new Wait(40), new TransactionStatus("pending"), new Wait(40), new TransactionStatus("executed"), new MarkCompleted()]), provider.mockTransactionTimeline(callTransactionTwo, [new Wait(40), new TransactionStatus("pending"), new Wait(40), new TransactionStatus("executed"), new MarkCompleted()]), - watcher.awaitCompleted(callTransactionOne), - watcher.awaitCompleted(callTransactionTwo) + watcher.awaitCompleted(callTransactionOne.getHash().hex()), + watcher.awaitCompleted(callTransactionTwo.getHash().hex()) ]); assert.isTrue((await provider.getTransactionStatus(hashOne)).isExecuted()); @@ -159,7 +159,7 @@ describe("test contract", () => { await Promise.all([ provider.mockTransactionTimeline(deployTransaction, [new Wait(40), new TransactionStatus("pending"), new Wait(40), new TransactionStatus("executed"), new MarkCompleted()]), - watcher.awaitCompleted(deployTransaction) + watcher.awaitCompleted(deployTransaction.getHash().hex()) ]); assert.isTrue((await provider.getTransactionStatus(hash)).isExecuted()); diff --git a/src/smartcontracts/smartContractResults.local.net.spec.ts b/src/smartcontracts/smartContractResults.local.net.spec.ts index 6f0ef8802..885cb12f5 100644 --- a/src/smartcontracts/smartContractResults.local.net.spec.ts +++ b/src/smartcontracts/smartContractResults.local.net.spec.ts @@ -58,8 +58,8 @@ describe("fetch transactions from local testnet", function () { await provider.sendTransaction(transactionDeploy); await provider.sendTransaction(transactionIncrement); - await watcher.awaitCompleted(transactionDeploy); - await watcher.awaitCompleted(transactionIncrement); + await watcher.awaitCompleted(transactionDeploy.getHash().hex()); + await watcher.awaitCompleted(transactionIncrement.getHash().hex()); let transactionOnNetworkDeploy = await provider.getTransaction(transactionDeploy.getHash().hex()); let transactionOnNetworkIncrement = await provider.getTransaction(transactionIncrement.getHash().hex()); diff --git a/src/testutils/contractController.ts b/src/testutils/contractController.ts index 3fed66f79..1d1b7ca19 100644 --- a/src/testutils/contractController.ts +++ b/src/testutils/contractController.ts @@ -24,7 +24,7 @@ export class ContractController { Logger.info(`ContractController.deploy [begin]: transaction = ${transaction.getHash()}`); await this.provider.sendTransaction(transaction); - let transactionOnNetwork = await this.transactionCompletionAwaiter.awaitCompleted(transaction); + let transactionOnNetwork = await this.transactionCompletionAwaiter.awaitCompleted(transaction.getHash().hex()); let bundle = this.parser.parseUntypedOutcome(transactionOnNetwork); Logger.info(`ContractController.deploy [end]: transaction = ${transaction.getHash()}, return code = ${bundle.returnCode}`); @@ -37,7 +37,7 @@ export class ContractController { interaction.check(); await this.provider.sendTransaction(transaction); - let transactionOnNetwork = await this.transactionCompletionAwaiter.awaitCompleted(transaction); + let transactionOnNetwork = await this.transactionCompletionAwaiter.awaitCompleted(transaction.getHash().hex()); let bundle = this.parser.parseOutcome(transactionOnNetwork, interaction.getEndpoint()); Logger.info(`ContractController.execute [end]: function = ${interaction.getFunction()}, transaction = ${transaction.getHash()}, return code = ${bundle.returnCode}`); diff --git a/src/testutils/networkProviders.ts b/src/testutils/networkProviders.ts index 736a9bedb..48071d3f3 100644 --- a/src/testutils/networkProviders.ts +++ b/src/testutils/networkProviders.ts @@ -8,7 +8,7 @@ import { ITransactionStatus, } from "../interfaceOfNetwork"; import { Query } from "../smartcontracts/query"; -import { Transaction } from "../transaction"; +import { Transaction, TransactionNext } from "../transaction"; export function createLocalnetProvider(): INetworkProvider { return new ProxyNetworkProvider("http://localhost:7950", { timeout: 5000 }); @@ -23,7 +23,7 @@ export interface INetworkProvider { getAccount(address: IAddress): Promise; getTransaction(txHash: string, withProcessStatus?: boolean): Promise; getTransactionStatus(txHash: string): Promise; - sendTransaction(tx: Transaction): Promise; + sendTransaction(tx: Transaction | TransactionNext): Promise; simulateTransaction(tx: Transaction): Promise; queryContract(query: Query): Promise; } diff --git a/src/tokenOperations/tokenOperationsFactory.test.net.spec.ts b/src/tokenOperations/tokenOperationsFactory.test.net.spec.ts index b93095b8a..05a4dfc03 100644 --- a/src/tokenOperations/tokenOperationsFactory.test.net.spec.ts +++ b/src/tokenOperations/tokenOperationsFactory.test.net.spec.ts @@ -682,7 +682,7 @@ describe("test factory on testnet", function () { await provider.sendTransaction(transaction); console.log(`Sent transaction [${tag}]: ${transaction.getHash().hex()}`); - const transactionOnNetwork = await watcher.awaitCompleted(transaction); + const transactionOnNetwork = await watcher.awaitCompleted(transaction.getHash().hex()); return transactionOnNetwork; } }); diff --git a/src/transaction.local.net.spec.ts b/src/transaction.local.net.spec.ts index 56fa581ec..fcab10cae 100644 --- a/src/transaction.local.net.spec.ts +++ b/src/transaction.local.net.spec.ts @@ -4,9 +4,12 @@ import { Logger } from "./logger"; import { loadTestWallets, TestWallet } from "./testutils"; import { createLocalnetProvider } from "./testutils/networkProviders"; import { TokenTransfer } from "./tokenTransfer"; -import { Transaction } from "./transaction"; +import { Transaction, TransactionComputer } from "./transaction"; import { TransactionPayload } from "./transactionPayload"; import { TransactionWatcher } from "./transactionWatcher"; +import { TransactionsFactoryConfig } from "./transactionsFactories/transactionsFactoryConfig"; +import { NextTransferTransactionsFactory } from "./transactionsFactories/transferTransactionsFactory"; +import { TokenComputer } from "./tokens"; describe("test transaction", function () { let alice: TestWallet, bob: TestWallet; @@ -20,7 +23,9 @@ describe("test transaction", function () { let provider = createLocalnetProvider(); let watcher = new TransactionWatcher({ - getTransaction: async (hash: string) => { return await provider.getTransaction(hash, true) } + getTransaction: async (hash: string) => { + return await provider.getTransaction(hash, true); + }, }); let network = await provider.getNetworkConfig(); @@ -34,7 +39,7 @@ describe("test transaction", function () { receiver: bob.address, value: TokenTransfer.egldFromAmount(42), gasLimit: network.MinGasLimit, - chainID: network.ChainID + chainID: network.ChainID, }); let transactionTwo = new Transaction({ @@ -42,7 +47,7 @@ describe("test transaction", function () { receiver: bob.address, value: TokenTransfer.egldFromAmount(43), gasLimit: network.MinGasLimit, - chainID: network.ChainID + chainID: network.ChainID, }); transactionOne.setNonce(alice.account.nonce); @@ -55,8 +60,8 @@ describe("test transaction", function () { await provider.sendTransaction(transactionOne); await provider.sendTransaction(transactionTwo); - await watcher.awaitCompleted(transactionOne); - await watcher.awaitCompleted(transactionTwo); + await watcher.awaitCompleted(transactionOne.getHash().hex()); + await watcher.awaitCompleted(transactionTwo.getHash().hex()); await bob.sync(provider); let newBalanceOfBob = new BigNumber(bob.account.balance.toString()); @@ -69,7 +74,9 @@ describe("test transaction", function () { let provider = createLocalnetProvider(); let watcher = new TransactionWatcher({ - getTransaction: async (hash: string) => { return await provider.getTransaction(hash, true) } + getTransaction: async (hash: string) => { + return await provider.getTransaction(hash, true); + }, }); let network = await provider.getNetworkConfig(); @@ -83,13 +90,13 @@ describe("test transaction", function () { receiver: bob.address, value: TokenTransfer.egldFromAmount(42), gasLimit: network.MinGasLimit, - chainID: network.ChainID + chainID: network.ChainID, }); transactionOne.setNonce(alice.account.nonce); await signTransaction({ transaction: transactionOne, wallet: alice }); await provider.sendTransaction(transactionOne); - await watcher.awaitCompleted(transactionOne); + await watcher.awaitCompleted(transactionOne.getHash().hex()); await bob.sync(provider); let newBalanceOfBob = new BigNumber(bob.account.balance.toString()); @@ -110,7 +117,7 @@ describe("test transaction", function () { gasLimit: 70000, receiver: alice.address, value: TokenTransfer.egldFromAmount(1000), - chainID: network.ChainID + chainID: network.ChainID, }); let transactionTwo = new Transaction({ @@ -119,7 +126,7 @@ describe("test transaction", function () { gasLimit: 70000, receiver: alice.address, value: TokenTransfer.egldFromAmount(1000000), - chainID: network.ChainID + chainID: network.ChainID, }); transactionOne.setNonce(alice.account.nonce); @@ -132,7 +139,47 @@ describe("test transaction", function () { Logger.trace(JSON.stringify(await provider.simulateTransaction(transactionTwo), null, 4)); }); - async function signTransaction(options: { transaction: Transaction, wallet: TestWallet }) { + it("should create transaction using the NextTokenTransferFactory", async function () { + this.timeout(70000); + + const provider = createLocalnetProvider(); + const watcher = new TransactionWatcher({ + getTransaction: async (hash: string) => { + return await provider.getTransaction(hash, true); + }, + }); + + const network = await provider.getNetworkConfig(); + + const config = new TransactionsFactoryConfig(network.ChainID); + const factory = new NextTransferTransactionsFactory(config, new TokenComputer()); + + await alice.sync(provider); + await bob.sync(provider); + const initialBalanceOfBob = new BigNumber(bob.account.balance.toString()); + + const transaction = factory.createTransactionForNativeTokenTransfer({ + sender: alice.address, + receiver: bob.address, + nativeAmount: 42000000000000000000n, + }); + transaction.nonce = BigInt(alice.account.nonce.valueOf()); + + const transactionComputer = new TransactionComputer(); + transaction.signature = await alice.signer.sign( + Buffer.from(transactionComputer.computeBytesForSigning(transaction)), + ); + + const txHash = await provider.sendTransaction(transaction); + await watcher.awaitCompleted(txHash); + + await bob.sync(provider); + const newBalanceOfBob = new BigNumber(bob.account.balance.toString()); + + assert.deepEqual(TokenTransfer.egldFromAmount(42).valueOf(), newBalanceOfBob.minus(initialBalanceOfBob)); + }); + + async function signTransaction(options: { transaction: Transaction; wallet: TestWallet }) { const transaction = options.transaction; const wallet = options.wallet; diff --git a/src/transactionWatcher.spec.ts b/src/transactionWatcher.spec.ts index 92646cc47..058df41e9 100644 --- a/src/transactionWatcher.spec.ts +++ b/src/transactionWatcher.spec.ts @@ -23,7 +23,7 @@ describe("test transactionWatcher", () => { await Promise.all([ provider.mockTransactionTimelineByHash(hash, [new Wait(40), new TransactionStatus("pending"), new Wait(40), new TransactionStatus("executed"), new MarkCompleted()]), - watcher.awaitCompleted(dummyTransaction) + watcher.awaitCompleted(dummyTransaction.getHash().hex()) ]); assert.isTrue((await provider.getTransactionStatus(hash.hex())).isExecuted()); diff --git a/src/transactionWatcher.ts b/src/transactionWatcher.ts index b2fa2ec21..bd518d4e1 100644 --- a/src/transactionWatcher.ts +++ b/src/transactionWatcher.ts @@ -6,13 +6,6 @@ import { Logger } from "./logger"; export type PredicateIsAwaitedStatus = (status: ITransactionStatus) => boolean; -/** - * Internal interface: a transaction, as seen from the perspective of a {@link TransactionWatcher}. - */ -interface ITransaction { - getHash(): { hex(): string; } -} - /** * TransactionWatcher allows one to continuously watch (monitor), by means of polling, the status of a given transaction. */ @@ -52,10 +45,11 @@ export class TransactionWatcher { /** * Waits until the transaction reaches the "pending" status. + * @param txHash The hex-encoded transaction hash */ - public async awaitPending(transaction: ITransaction): Promise { + public async awaitPending(txHash: string): Promise { const isPending = (transaction: ITransactionOnNetwork) => transaction.status.isPending(); - const doFetch = async () => await this.fetcher.getTransaction(transaction.getHash().hex()); + const doFetch = async () => await this.fetcher.getTransaction(txHash); const errorProvider = () => new ErrExpectedTransactionStatusNotReached(); return this.awaitConditionally( @@ -67,8 +61,9 @@ export class TransactionWatcher { /** * Waits until the transaction is completely processed. + * @param txHash The hex-encoded transaction hash */ - public async awaitCompleted(transaction: ITransaction): Promise { + public async awaitCompleted(txHash: string): Promise { const isCompleted = (transactionOnNetwork: ITransactionOnNetwork) => { if (transactionOnNetwork.isCompleted === undefined) { throw new ErrIsCompletedFieldIsMissingOnTransaction(); @@ -76,7 +71,7 @@ export class TransactionWatcher { return transactionOnNetwork.isCompleted }; - const doFetch = async () => await this.fetcher.getTransaction(transaction.getHash().hex()); + const doFetch = async () => await this.fetcher.getTransaction(txHash); const errorProvider = () => new ErrExpectedTransactionStatusNotReached(); return this.awaitConditionally( @@ -86,14 +81,14 @@ export class TransactionWatcher { ); } - public async awaitAllEvents(transaction: ITransaction, events: string[]): Promise { + public async awaitAllEvents(txHash: string, events: string[]): Promise { const foundAllEvents = (transactionOnNetwork: ITransactionOnNetwork) => { const allEventIdentifiers = this.getAllTransactionEvents(transactionOnNetwork).map(event => event.identifier); const allAreFound = events.every(event => allEventIdentifiers.includes(event)); return allAreFound; }; - const doFetch = async () => await this.fetcher.getTransaction(transaction.getHash().hex()); + const doFetch = async () => await this.fetcher.getTransaction(txHash); const errorProvider = () => new ErrExpectedTransactionEventsNotFound(); return this.awaitConditionally( @@ -103,14 +98,14 @@ export class TransactionWatcher { ); } - public async awaitAnyEvent(transaction: ITransaction, events: string[]): Promise { + public async awaitAnyEvent(txHash: string, events: string[]): Promise { const foundAnyEvent = (transactionOnNetwork: ITransactionOnNetwork) => { const allEventIdentifiers = this.getAllTransactionEvents(transactionOnNetwork).map(event => event.identifier); const anyIsFound = events.find(event => allEventIdentifiers.includes(event)) != undefined; return anyIsFound; }; - const doFetch = async () => await this.fetcher.getTransaction(transaction.getHash().hex()); + const doFetch = async () => await this.fetcher.getTransaction(txHash); const errorProvider = () => new ErrExpectedTransactionEventsNotFound(); return this.awaitConditionally( @@ -120,8 +115,8 @@ export class TransactionWatcher { ); } - public async awaitOnCondition(transaction: ITransaction, condition: (data: ITransactionOnNetwork) => boolean): Promise { - const doFetch = async () => await this.fetcher.getTransaction(transaction.getHash().hex()); + public async awaitOnCondition(txHash: string, condition: (data: ITransactionOnNetwork) => boolean): Promise { + const doFetch = async () => await this.fetcher.getTransaction(txHash); const errorProvider = () => new ErrExpectedTransactionStatusNotReached(); return this.awaitConditionally( diff --git a/src/transactionsFactories/delegationTransactionsFactory.spec.ts b/src/transactionsFactories/delegationTransactionsFactory.spec.ts index 465f48071..f84d88d52 100644 --- a/src/transactionsFactories/delegationTransactionsFactory.spec.ts +++ b/src/transactionsFactories/delegationTransactionsFactory.spec.ts @@ -28,6 +28,7 @@ describe("test delegation transactions factory", function () { assert.deepEqual(transaction.data, Buffer.from("createNewDelegationContract@010f0cf064dd59200000@0a")); assert.equal(transaction.gasLimit, 60126500n); assert.equal(transaction.value, value); + assert.equal(transaction.chainID, config.chainID); }); it("should create 'TransactionNext' for adding nodes", async function () { diff --git a/src/transactionsFactories/index.ts b/src/transactionsFactories/index.ts index 79cd9a638..6aa272608 100644 --- a/src/transactionsFactories/index.ts +++ b/src/transactionsFactories/index.ts @@ -1,4 +1,5 @@ export * from "./delegationTransactionsFactory"; +export * from "./relayedTransactionsFactory"; export * from "./smartContractTransactionsFactory"; export * from "./tokenManagementTransactionsFactory"; export * from "./transactionsFactoryConfig"; diff --git a/src/transactionsFactories/transactionNextBuilder.ts b/src/transactionsFactories/transactionNextBuilder.ts index e1c8b0496..ec37ec884 100644 --- a/src/transactionsFactories/transactionNextBuilder.ts +++ b/src/transactionsFactories/transactionNextBuilder.ts @@ -61,7 +61,7 @@ export class TransactionNextBuilder { gasLimit: gasLimit, value: this.amount || 0n, data: data.valueOf(), - chainID: this.config.toString(), + chainID: this.config.chainID, }); } } diff --git a/src/transactionsFactories/transferTransactionsFactory.ts b/src/transactionsFactories/transferTransactionsFactory.ts index 70d1d4a84..226e238ed 100644 --- a/src/transactionsFactories/transferTransactionsFactory.ts +++ b/src/transactionsFactories/transferTransactionsFactory.ts @@ -23,6 +23,7 @@ interface TokenComputer { /** * Use this class to create transactions for native token transfers (EGLD) or custom tokens transfers (ESDT/NTF/MetaESDT). + * This name is only temporary, the class will be renamed to `TransferTransactionsFactory`. */ export class NextTransferTransactionsFactory { private readonly config: IConfig; diff --git a/src/transactionsOutcomeParsers/index.ts b/src/transactionsOutcomeParsers/index.ts new file mode 100644 index 000000000..55d945b5b --- /dev/null +++ b/src/transactionsOutcomeParsers/index.ts @@ -0,0 +1,2 @@ +export * from "./resources"; +export * from "./tokenManagementTransactionsOutcomeParser";