From 206d6caf5ba5c9f73aee87e5735f38dd3ad34541 Mon Sep 17 00:00:00 2001 From: danielailie Date: Thu, 30 Jan 2025 16:34:51 +0200 Subject: [PATCH] Fix integration tests --- src/abi/interaction.local.net.spec.ts | 42 +++++--------- src/abi/smartContract.local.net.spec.ts | 56 ++++++++----------- .../smartContractResults.local.net.spec.ts | 13 ++--- 3 files changed, 42 insertions(+), 69 deletions(-) diff --git a/src/abi/interaction.local.net.spec.ts b/src/abi/interaction.local.net.spec.ts index 7169a517..95c4122d 100644 --- a/src/abi/interaction.local.net.spec.ts +++ b/src/abi/interaction.local.net.spec.ts @@ -38,17 +38,17 @@ describe("test smart contract interactor", function () { }); const bytecode = await promises.readFile("src/testdata/answer.wasm"); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const deployTransaction = factory.createTransactionForDeploy(alice.address, { bytecode: bytecode, gasLimit: 3000000n, }); - deployTransaction.nonce = BigInt(alice.nonce.valueOf()); + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const transactionCompletionAwaiter = new TransactionWatcher({ getTransaction: async (hash: string) => { @@ -85,11 +85,9 @@ describe("test smart contract interactor", function () { function: "getUltimateAnswer", gasLimit: 3000000n, }); - transaction.nonce = BigInt(alice.nonce.valueOf()); + transaction.nonce = alice.getNonceThenIncrement(); transaction.signature = alice.signTransaction(transaction); - alice.incrementNonce(); - await provider.sendTransaction(transaction); // Execute, and wait for execution @@ -98,11 +96,9 @@ describe("test smart contract interactor", function () { function: "getUltimateAnswer", gasLimit: 3000000n, }); - transaction.nonce = BigInt(alice.nonce.valueOf()); + transaction.nonce = alice.getNonceThenIncrement(); transaction.signature = alice.signTransaction(transaction); - alice.incrementNonce(); - const executeTxHash = await provider.sendTransaction(transaction); transactionOnNetwork = await transactionCompletionAwaiter.awaitCompleted(executeTxHash); const executeResponse = queryController.parseExecute(transactionOnNetwork); @@ -124,7 +120,7 @@ describe("test smart contract interactor", function () { }); let network = await provider.getNetworkConfig(); - + alice.nonce = (await provider.getAccount(alice.address)).nonce; // Deploy the contract let deployTransaction = await prepareDeployment({ contract: contract, @@ -266,17 +262,17 @@ describe("test smart contract interactor", function () { const parser = new SmartContractTransactionsOutcomeParser({ abi: abiRegistry }); const bytecode = await promises.readFile("src/testdata/counter.wasm"); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const deployTransaction = factory.createTransactionForDeploy(alice.address, { bytecode: bytecode, gasLimit: 3000000n, }); - deployTransaction.nonce = BigInt(alice.nonce.valueOf()); + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const transactionCompletionAwaiter = new TransactionWatcher({ getTransaction: async (hash: string) => { @@ -300,12 +296,10 @@ describe("test smart contract interactor", function () { function: "increment", gasLimit: 3000000n, }); - incrementTransaction.nonce = BigInt(alice.nonce.valueOf()); + incrementTransaction.nonce = alice.getNonceThenIncrement(); incrementTransaction.signature = alice.signTransaction(incrementTransaction); - alice.incrementNonce(); - // Query "get()" const query = queryController.createQuery({ contract: contractAddress, @@ -327,11 +321,9 @@ describe("test smart contract interactor", function () { function: "decrement", gasLimit: 3000000n, }); - decrementTransaction.nonce = alice.nonce; + decrementTransaction.nonce = alice.getNonceThenIncrement(); decrementTransaction.signature = alice.signTransaction(decrementTransaction); - alice.incrementNonce(); - await provider.sendTransaction(decrementTransaction); decrementTransaction.nonce = alice.nonce; @@ -347,6 +339,7 @@ describe("test smart contract interactor", function () { let abiRegistry = await loadAbiRegistry("src/testdata/lottery-esdt.abi.json"); let parser = new SmartContractTransactionsOutcomeParser({ abi: abiRegistry }); + alice.nonce = (await provider.getAccount(alice.address)).nonce; let network = await provider.getNetworkConfig(); @@ -363,12 +356,11 @@ describe("test smart contract interactor", function () { bytecode: bytecode, gasLimit: 100000000n, }); - deployTransaction.nonce = alice.nonce; + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const transactionCompletionAwaiter = new TransactionWatcher({ getTransaction: async (hash: string) => { @@ -388,11 +380,9 @@ describe("test smart contract interactor", function () { arguments: ["lucky", "EGLD", 1, null, null, 1, null, null], gasLimit: 30000000n, }); - startTransaction.nonce = alice.nonce; + startTransaction.nonce = alice.getNonceThenIncrement(); startTransaction.signature = alice.signTransaction(startTransaction); - alice.incrementNonce(); - const startTxHash = await provider.sendTransaction(startTransaction); transactionOnNetwork = await transactionCompletionAwaiter.awaitCompleted(startTxHash); let response = parser.parseExecute({ transactionOnNetwork }); @@ -406,11 +396,9 @@ describe("test smart contract interactor", function () { arguments: ["lucky"], gasLimit: 5000000n, }); - lotteryStatusTransaction.nonce = alice.nonce; + lotteryStatusTransaction.nonce = alice.getNonceThenIncrement(); lotteryStatusTransaction.signature = alice.signTransaction(lotteryStatusTransaction); - alice.incrementNonce(); - const statusTxHash = await provider.sendTransaction(lotteryStatusTransaction); transactionOnNetwork = await transactionCompletionAwaiter.awaitCompleted(statusTxHash); response = parser.parseExecute({ transactionOnNetwork }); @@ -425,11 +413,9 @@ describe("test smart contract interactor", function () { arguments: ["lucky"], gasLimit: 5000000n, }); - lotteryInfoTransaction.nonce = alice.nonce; + lotteryInfoTransaction.nonce = alice.getNonceThenIncrement(); lotteryInfoTransaction.signature = alice.signTransaction(lotteryInfoTransaction); - alice.incrementNonce(); - const infoTxHash = await provider.sendTransaction(lotteryInfoTransaction); transactionOnNetwork = await transactionCompletionAwaiter.awaitCompleted(infoTxHash); response = parser.parseExecute({ transactionOnNetwork }); diff --git a/src/abi/smartContract.local.net.spec.ts b/src/abi/smartContract.local.net.spec.ts index cec28ed1..2deb81da 100644 --- a/src/abi/smartContract.local.net.spec.ts +++ b/src/abi/smartContract.local.net.spec.ts @@ -54,49 +54,49 @@ describe("test on local testnet", function () { const factory = new SmartContractTransactionsFactory({ config: config }); const bytecode = await promises.readFile("src/testdata/counter.wasm"); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const deployTransaction = factory.createTransactionForDeploy(alice.address, { bytecode: bytecode, gasLimit: 4000000n, }); - deployTransaction.nonce = BigInt(alice.nonce.valueOf()); + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const smartContractCallTransaction = factory.createTransactionForExecute(alice.address, { contract: contractAddress, function: "increment", gasLimit: 4000000n, }); - smartContractCallTransaction.nonce = alice.nonce; + smartContractCallTransaction.nonce = alice.getNonceThenIncrement(); smartContractCallTransaction.signature = alice.signTransaction(smartContractCallTransaction); - alice.incrementNonce(); - const simulateOne = factory.createTransactionForExecute(alice.address, { function: "increment", contract: contractAddress, gasLimit: 200000n, }); - - simulateOne.nonce = alice.nonce; + simulateOne.nonce = alice.getNonceThenIncrement(); simulateOne.signature = alice.signTransaction(simulateOne); - alice.incrementNonce(); - const simulateTwo = factory.createTransactionForExecute(alice.address, { function: "foobar", contract: contractAddress, gasLimit: 700000n, }); - - simulateTwo.nonce = alice.nonce; + simulateTwo.nonce = alice.getNonceThenIncrement(); simulateTwo.signature = alice.signTransaction(simulateTwo); - alice.incrementNonce(); + const simulateThree = factory.createTransactionForExecute(alice.address, { + function: "foobar", + contract: contractAddress, + gasLimit: 700000n, + }); + simulateThree.nonce = alice.getNonceThenIncrement(); + simulateThree.signature = alice.signTransaction(simulateThree); // Broadcast & execute const deployTxHash = await provider.sendTransaction(deployTransaction); @@ -128,39 +128,35 @@ describe("test on local testnet", function () { const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config }); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const bytecode = await promises.readFile("src/testdata/counter.wasm"); const deployTransaction = factory.createTransactionForDeploy(alice.address, { bytecode: bytecode, gasLimit: 3000000n, }); - deployTransaction.nonce = alice.nonce; + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const firstScCallTransaction = factory.createTransactionForExecute(alice.address, { contract: contractAddress, function: "increment", gasLimit: 3000000n, }); - firstScCallTransaction.nonce = alice.nonce; + firstScCallTransaction.nonce = alice.getNonceThenIncrement(); firstScCallTransaction.signature = alice.signTransaction(firstScCallTransaction); - alice.incrementNonce(); - const secondScCallTransaction = factory.createTransactionForExecute(alice.address, { contract: contractAddress, function: "increment", gasLimit: 3000000n, }); - secondScCallTransaction.nonce = alice.nonce; + secondScCallTransaction.nonce = alice.getNonceThenIncrement(); secondScCallTransaction.signature = alice.signTransaction(secondScCallTransaction); - alice.incrementNonce(); - // Broadcast & execute const deployTxHash = await provider.sendTransaction(deployTransaction); const firstScCallHash = await provider.sendTransaction(firstScCallTransaction); @@ -198,6 +194,7 @@ describe("test on local testnet", function () { const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config }); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const bytecode = await promises.readFile("src/testdata/erc20.wasm"); const deployTransaction = factory.createTransactionForDeploy(alice.address, { @@ -205,11 +202,10 @@ describe("test on local testnet", function () { gasLimit: 50000000n, arguments: [new U32Value(10000)], }); - deployTransaction.nonce = alice.nonce; + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const transactionMintBob = factory.createTransactionForExecute(alice.address, { contract: contractAddress, @@ -217,22 +213,18 @@ describe("test on local testnet", function () { gasLimit: 9000000n, arguments: [new AddressValue(bob.address), new U32Value(1000)], }); - transactionMintBob.nonce = alice.nonce; + transactionMintBob.nonce = alice.getNonceThenIncrement(); transactionMintBob.signature = alice.signTransaction(transactionMintBob); - alice.incrementNonce(); - const transactionMintCarol = factory.createTransactionForExecute(alice.address, { contract: contractAddress, function: "transferToken", gasLimit: 9000000n, arguments: [new AddressValue(carol.address), new U32Value(1500)], }); - transactionMintCarol.nonce = alice.nonce; + transactionMintCarol.nonce = alice.getNonceThenIncrement(); transactionMintCarol.signature = alice.signTransaction(transactionMintCarol); - alice.incrementNonce(); - // Broadcast & execute const deployTxHash = await provider.sendTransaction(deployTransaction); const mintBobTxHash = await provider.sendTransaction(transactionMintBob); @@ -289,6 +281,7 @@ describe("test on local testnet", function () { TransactionWatcher.DefaultTimeout = 50000; let network = await provider.getNetworkConfig(); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const config = new TransactionsFactoryConfig({ chainID: network.chainID }); const factory = new SmartContractTransactionsFactory({ config: config }); @@ -299,12 +292,11 @@ describe("test on local testnet", function () { bytecode: bytecode, gasLimit: 50000000n, }); - deployTransaction.nonce = alice.nonce; + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const startTransaction = factory.createTransactionForExecute(alice.address, { contract: contractAddress, @@ -322,11 +314,9 @@ describe("test on local testnet", function () { OptionalValue.newMissing(), ], }); - startTransaction.nonce = alice.nonce; + startTransaction.nonce = alice.getNonceThenIncrement(); startTransaction.signature = alice.signTransaction(startTransaction); - alice.incrementNonce(); - // Broadcast & execute const deployTx = await provider.sendTransaction(deployTransaction); const startTx = await provider.sendTransaction(startTransaction); diff --git a/src/abi/smartContractResults.local.net.spec.ts b/src/abi/smartContractResults.local.net.spec.ts index e78bfd1f..1361cafa 100644 --- a/src/abi/smartContractResults.local.net.spec.ts +++ b/src/abi/smartContractResults.local.net.spec.ts @@ -33,6 +33,7 @@ describe("fetch transactions from local testnet", function () { TransactionWatcher.DefaultTimeout = 50000; let network = await provider.getNetworkConfig(); + alice.nonce = (await provider.getAccount(alice.address)).nonce; // Deploy let contract = new SmartContract({}); @@ -54,11 +55,9 @@ describe("fetch transactions from local testnet", function () { caller: alice.address, }); - transactionIncrement.nonce = alice.nonce; + transactionIncrement.nonce = alice.getNonceThenIncrement(); transactionIncrement.signature = alice.signTransaction(transactionIncrement); - alice.incrementNonce(); - // Broadcast & execute const txHashDeploy = await provider.sendTransaction(transactionDeploy); const txHashIncrement = await provider.sendTransaction(transactionIncrement); @@ -88,27 +87,25 @@ describe("fetch transactions from local testnet", function () { const factory = new SmartContractTransactionsFactory({ config: config }); const bytecode = await promises.readFile("src/testdata/counter.wasm"); + alice.nonce = (await provider.getAccount(alice.address)).nonce; const deployTransaction = factory.createTransactionForDeploy(alice.address, { bytecode: bytecode, gasLimit: 3000000n, }); - deployTransaction.nonce = alice.nonce; + deployTransaction.nonce = alice.getNonceThenIncrement(); deployTransaction.signature = alice.signTransaction(deployTransaction); const contractAddress = SmartContract.computeAddress(alice.address, alice.nonce); - alice.incrementNonce(); const smartContractCallTransaction = factory.createTransactionForExecute(alice.address, { contract: contractAddress, function: "increment", gasLimit: 3000000n, }); - smartContractCallTransaction.nonce = alice.nonce; + smartContractCallTransaction.nonce = alice.getNonceThenIncrement(); smartContractCallTransaction.signature = alice.signTransaction(smartContractCallTransaction); - alice.incrementNonce(); - // Broadcast & execute const deployTxHash = await provider.sendTransaction(deployTransaction); const callTxHash = await provider.sendTransaction(smartContractCallTransaction);