From 27a80969e0f1e5253121ca07e1cf4d0c3ac3a046 Mon Sep 17 00:00:00 2001 From: Gianfranco Tasteri Date: Wed, 27 Sep 2023 19:00:46 -0300 Subject: [PATCH 1/5] WIP replacing MockERC20 with Runtime connected wrapper erc20 --- nabla/config.json | 14 +++-- nabla/test/TestableERC20Tests.ts | 90 ++++++++++++++++++++++++++++++++ nabla/test/backstop.ts | 27 ++++++++-- nabla/test/swapPool.ts | 9 +++- nabla/test/swaps.ts | 20 +++++-- src/actions/compileContract.ts | 2 +- 6 files changed, 149 insertions(+), 13 deletions(-) create mode 100644 nabla/test/TestableERC20Tests.ts diff --git a/nabla/config.json b/nabla/config.json index cfcf041..8e89a2d 100644 --- a/nabla/config.json +++ b/nabla/config.json @@ -1,5 +1,8 @@ { "contracts": { + "TestableERC20Wrapper": { + "path": "contracts/TestableERC20Wrapper.sol" + }, "Router": { "repository": "nablaContracts", "path": "contracts/src/core/Router.sol" @@ -50,7 +53,10 @@ "git": "https://github.com/0xamberhq/contracts.git", "branch": "feature/backstop-pool-coverage-ratio", "init": "yarn", - "importpaths": ["contracts/@chain/pendulum", "node_modules"] + "importpaths": [ + "contracts/@chain/pendulum", + "node_modules" + ] }, "pendulumWrappers": { "git": "https://github.com/pendulum-chain/pendulum-ink-wrapper", @@ -89,9 +95,9 @@ "buildFolder": "../target", "limits": { "gas": { - "refTime": "100000000000", - "proofSize": "10000000" + "refTime": "10000000000000000", + "proofSize": "10000000000000000" }, "storageDeposit": "10000000000000" } -} +} \ No newline at end of file diff --git a/nabla/test/TestableERC20Tests.ts b/nabla/test/TestableERC20Tests.ts new file mode 100644 index 0000000..18ba979 --- /dev/null +++ b/nabla/test/TestableERC20Tests.ts @@ -0,0 +1,90 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ + +import { TestContract, TestSuiteEnvironment } from "../../src/index"; +import { assertApproxEqAbs, assertApproxEqRel, assertEq, assertGt, assertLt, e } from "../../src/index"; + +const MAX_UINT256 = 2n ** 256n - 1n; + +const BOB = "6k6gXPB9idebCxqSJuqpjPaqfYLQbdLHhvsANH8Dg8GQN3tT"; + +export default async function (environment: TestSuiteEnvironment) { + const { + address, + unit, + milliUnit, + microUnit, + getContractByAddress, + vm, + tester, + constructors: { + newTestableERC20Wrapper, + }, + } = environment; + + function assertApproxEq(a: bigint, b: bigint, errorMessage: string): void { + if (a !== 0n && b !== 0n) { + assertApproxEqRel(a, b, 5n * 10n ** 15n, errorMessage); + } else { + assertApproxEqAbs(a, b, milliUnit(5), errorMessage); + } + } + + let router: TestContract; + let backstop: TestContract; + let swapPool1: TestContract; + let swapPool2: TestContract; + + const asset1 = await newTestableERC20Wrapper("TestNative", "TEST1", 12, [0], [0], [], []); + const asset2 = await newTestableERC20Wrapper("TestNonNative", "TEST2", 12, [1], [1], [], []); + + + const MINT_AMOUNT = unit(10000); + const BURN_AMOUNT = unit(10); + + + return { + async setUp() { + + }, + async testMintsNative() { + let totalSupplyBef = await asset1.totalSupply(); + await asset1.mint(BOB, MINT_AMOUNT); + let totalSupplyAft = await asset1.totalSupply(); + + assertEq(totalSupplyAft - totalSupplyBef, MINT_AMOUNT); + }, + + async testMintsTokensPallet() { + let totalSupplyBef = await asset2.totalSupply(); + let balanceBobBef = await asset2.balanceOf(BOB); + + await asset2.mint(BOB, MINT_AMOUNT); + + let totalSupplyAft = await asset2.totalSupply(); + let balanceBob = await asset2.balanceOf(BOB); + + assertEq(totalSupplyAft - totalSupplyBef, MINT_AMOUNT); + assertEq(balanceBob - balanceBobBef, MINT_AMOUNT); + }, + + async testBurnsNative() { + let totalSupplyBef = await asset1.totalSupply(); + await asset1.burn(BOB, BURN_AMOUNT); + let totalSupplyAft = await asset1.totalSupply(); + + assertEq(totalSupplyBef - totalSupplyAft, BURN_AMOUNT); + }, + + async testBurnsToken() { + let totalSupplyBef = await asset2.totalSupply(); + await asset2.burn(BOB, BURN_AMOUNT); + let totalSupplyAft = await asset2.totalSupply(); + + assertEq(totalSupplyBef - totalSupplyAft, BURN_AMOUNT); + }, + + + + }; +} \ No newline at end of file diff --git a/nabla/test/backstop.ts b/nabla/test/backstop.ts index c0af99b..39f7ab8 100644 --- a/nabla/test/backstop.ts +++ b/nabla/test/backstop.ts @@ -21,6 +21,7 @@ export default async function (environment: TestSuiteEnvironment) { newRouter, newTestableBackstopPool, newMockERC20, + newTestableERC20Wrapper, newMockOracle, newNablaCurve, newTestableSwapPool, @@ -41,9 +42,15 @@ export default async function (environment: TestSuiteEnvironment) { let swapPool1: TestContract; let swapPool2: TestContract; - const asset1 = await newMockERC20("Test Token 1", "TEST1"); - const asset2 = await newMockERC20("Test Token 2", "TEST2"); - const usd = await newMockERC20("Test Backstop Token", "USD"); + //const asset1 = await newMockERC20("Test Token 1", "TEST1"); + //const asset2 = await newMockERC20("Test Token 2", "TEST2"); + //const usd = await newMockERC20("Test Backstop Token", "USD"); + + //WE MUST ENSURE THAT INITIAL SUPPLY IS 0 + const usd = await newTestableERC20Wrapper("Test Backstop Token", "USD", 18, [1], [1], [], []); + const asset1 = await newTestableERC20Wrapper("TestNative", "TEST1", 18, [1], [2], [], []); + const asset2 = await newTestableERC20Wrapper("Test Token 2", "TEST2", 18, [1], [3], [], []); + const oracleUsd = await newMockOracle(address(usd), unit(1)); const oracle1 = await newMockOracle(address(asset1), unit(5)); @@ -118,17 +125,30 @@ export default async function (environment: TestSuiteEnvironment) { await backstop.addSwapPool(address(swapPool1), 0); await backstop.addSwapPool(address(swapPool2), 0); + + await asset1.burn(tester, await asset1.balanceOf(tester)); await asset1.mint(tester, MINT_AMOUNT); + + await asset2.burn(tester, await asset2.balanceOf(tester)); await asset2.mint(tester, MINT_AMOUNT); + + await usd.burn(tester, await usd.balanceOf(tester)); await usd.mint(tester, MINT_AMOUNT); vm.startPrank(BOB); await asset1.approve(address(swapPool1), MAX_UINT256); await asset2.approve(address(swapPool2), MAX_UINT256); await usd.approve(address(backstop), MAX_UINT256); + + await asset1.burn(BOB, await asset1.balanceOf(BOB)); await asset1.mint(BOB, MINT_AMOUNT); + + await asset2.burn(BOB, await asset2.balanceOf(BOB)); await asset2.mint(BOB, MINT_AMOUNT); + + await usd.burn(BOB, await usd.balanceOf(BOB)); await usd.mint(BOB, MINT_AMOUNT); + await swapPool1.deposit(MINT_AMOUNT); await swapPool2.deposit(MINT_AMOUNT); await backstop.deposit(MINT_AMOUNT); @@ -210,6 +230,7 @@ export default async function (environment: TestSuiteEnvironment) { }, async testImmediateBackstopWithdrawal() { + const [lpTokens, fee] = await backstop.deposit(unit(20)); const [reservesBefore, liabilitiesBefore] = await backstop.coverage(); const [simulatedPayout] = await backstop.simulateWithdrawal((lpTokens * 3n) / 4n); diff --git a/nabla/test/swapPool.ts b/nabla/test/swapPool.ts index 96764e4..780af68 100644 --- a/nabla/test/swapPool.ts +++ b/nabla/test/swapPool.ts @@ -15,7 +15,7 @@ export default async function (environment: TestSuiteEnvironment) { getContractByAddress, vm, tester, - constructors: { newMockERC20, newNablaCurve, newTestableSwapPool }, + constructors: { newMockERC20, newNablaCurve, newTestableSwapPool, newTestableERC20Wrapper }, } = environment; function assertApproxEq(a: bigint, b: bigint, errorMessage: string): void { @@ -46,17 +46,22 @@ export default async function (environment: TestSuiteEnvironment) { }; const nablaCurve = await newNablaCurve(0, e(0.01, 18)); - const asset = await newMockERC20("Test Token", "TEST"); + //const asset = await newMockERC20("Test Token", "TEST"); + const asset = await newTestableERC20Wrapper("Test Token", "TEST", 18, [1], [1], [], []); const pool = await newTestableSwapPool(address(asset), address(nablaCurve), 0, 0, 0, "Test LP Token", "LP"); return { async setUp() { await asset.approve(address(pool), MAX_UINT256); + + await asset.burn(tester, await asset.balanceOf(tester)); await asset.mint(tester, MINT_AMOUNT); // Important to deposit something before tests start, as first deposit // does not invoke usual _sharesToMint() logic, due to total supply being 0 + await asset.burn(CHARLIE, await asset.balanceOf(CHARLIE)); await asset.mint(CHARLIE, unit(1)); + vm.startPrank(CHARLIE); await asset.approve(address(pool), unit(1)); await pool.deposit(unit(1)); diff --git a/nabla/test/swaps.ts b/nabla/test/swaps.ts index 8d45b1a..0c9df08 100644 --- a/nabla/test/swaps.ts +++ b/nabla/test/swaps.ts @@ -24,7 +24,7 @@ export default async function (environment: TestSuiteEnvironment) { getContractByAddress, vm, tester, - constructors: { newRouter, newMockERC20, newSwapPool, newMockOracle, newNablaCurve }, + constructors: { newRouter, newMockERC20, newTestableERC20Wrapper, newSwapPool, newMockOracle, newNablaCurve }, } = environment; function assertApproxEq(a: bigint, b: bigint, errorMessage: string): void { @@ -94,8 +94,12 @@ export default async function (environment: TestSuiteEnvironment) { const router = await newRouter(); const treasury = FERDIE; - const asset1 = await newMockERC20("Test Token 1", "TEST1"); - const asset2 = await newMockERC20("Test Token 2", "TEST2"); + //const asset1 = await newMockERC20("Test Token 1", "TEST1"); + //const asset2 = await newMockERC20("Test Token 2", "TEST2"); + + const asset1 = await newTestableERC20Wrapper("Test Token 1", "TEST1", 18, [1], [2], [], []); + const asset2 = await newTestableERC20Wrapper("Test Token 2", "TEST2", 18, [1], [3], [], []); + const oracle1 = await newMockOracle(address(asset1), unit(1)); const oracle2 = await newMockOracle(address(asset2), unit(2)); @@ -132,8 +136,18 @@ export default async function (environment: TestSuiteEnvironment) { await router.registerPool(address(asset1), address(swapPool1)); await router.registerPool(address(asset2), address(swapPool2)); + await asset1.burn(tester, await asset1.balanceOf(tester)); await asset1.mint(tester, MINT_AMOUNT); + + await asset2.burn(tester, await asset2.balanceOf(tester)); await asset2.mint(tester, MINT_AMOUNT); + + await asset1.burn(treasury, await asset1.balanceOf(treasury)); + await asset2.burn(treasury, await asset2.balanceOf(treasury)); + + await asset1.burn(address(swapPool1), await asset1.balanceOf(address(swapPool1))); + + }, async testSwap() { diff --git a/src/actions/compileContract.ts b/src/actions/compileContract.ts index 8cda032..2cdfb53 100644 --- a/src/actions/compileContract.ts +++ b/src/actions/compileContract.ts @@ -60,7 +60,7 @@ async function actuallyCompileContract( updateContractStatus("compiling"); const solangResult = await runCommand([ - "../clones/solang/target/release/solang", + "/home/giannipop/root/pendulum/solang/target/release/solang", "compile", "--no-strength-reduce", // temporary fix for https://github.com/hyperledger/solang/issues/1507 "--target", From 480962f1bec92e28fbe3a76991a388d0742b7219 Mon Sep 17 00:00:00 2001 From: Gianfranco Tasteri Date: Fri, 29 Sep 2023 13:07:40 -0300 Subject: [PATCH 2/5] fix deadline issue in swap.ts test --- README.md | 1 + nabla/config.json | 2 +- nabla/test/backstop.ts | 5 --- nabla/test/swapPool.ts | 2 +- nabla/test/swaps.ts | 57 ++++++++++++++++++++++------------ src/actions/compileContract.ts | 2 +- 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 2b31b25..3af5983 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,4 @@ Alternatively you can use the parameter `local` instead of `foucoco`. This expec ``` brew install binaryen ``` + diff --git a/nabla/config.json b/nabla/config.json index 8e89a2d..050e436 100644 --- a/nabla/config.json +++ b/nabla/config.json @@ -1,7 +1,7 @@ { "contracts": { "TestableERC20Wrapper": { - "path": "contracts/TestableERC20Wrapper.sol" + "path": "testable-erc20-wrapper/TestableERC20Wrapper.sol" }, "Router": { "repository": "nablaContracts", diff --git a/nabla/test/backstop.ts b/nabla/test/backstop.ts index 39f7ab8..a116e2e 100644 --- a/nabla/test/backstop.ts +++ b/nabla/test/backstop.ts @@ -42,11 +42,6 @@ export default async function (environment: TestSuiteEnvironment) { let swapPool1: TestContract; let swapPool2: TestContract; - //const asset1 = await newMockERC20("Test Token 1", "TEST1"); - //const asset2 = await newMockERC20("Test Token 2", "TEST2"); - //const usd = await newMockERC20("Test Backstop Token", "USD"); - - //WE MUST ENSURE THAT INITIAL SUPPLY IS 0 const usd = await newTestableERC20Wrapper("Test Backstop Token", "USD", 18, [1], [1], [], []); const asset1 = await newTestableERC20Wrapper("TestNative", "TEST1", 18, [1], [2], [], []); const asset2 = await newTestableERC20Wrapper("Test Token 2", "TEST2", 18, [1], [3], [], []); diff --git a/nabla/test/swapPool.ts b/nabla/test/swapPool.ts index 780af68..07190c7 100644 --- a/nabla/test/swapPool.ts +++ b/nabla/test/swapPool.ts @@ -46,7 +46,7 @@ export default async function (environment: TestSuiteEnvironment) { }; const nablaCurve = await newNablaCurve(0, e(0.01, 18)); - //const asset = await newMockERC20("Test Token", "TEST"); + const asset = await newTestableERC20Wrapper("Test Token", "TEST", 18, [1], [1], [], []); const pool = await newTestableSwapPool(address(asset), address(nablaCurve), 0, 0, 0, "Test LP Token", "LP"); diff --git a/nabla/test/swaps.ts b/nabla/test/swaps.ts index 0c9df08..de3b8ac 100644 --- a/nabla/test/swaps.ts +++ b/nabla/test/swaps.ts @@ -27,6 +27,8 @@ export default async function (environment: TestSuiteEnvironment) { constructors: { newRouter, newMockERC20, newTestableERC20Wrapper, newSwapPool, newMockOracle, newNablaCurve }, } = environment; + const deadlineTime = Math.floor((Date.now() / 1000) + 10); + function assertApproxEq(a: bigint, b: bigint, errorMessage: string): void { if (a !== 0n && b !== 0n) { assertApproxEqRel(a, b, 5n * 10n ** 15n, errorMessage); @@ -72,7 +74,7 @@ export default async function (environment: TestSuiteEnvironment) { WITHDRAW_AMOUNT / 2n - LOW_SLIPPAGE, path, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); const balanceAfter = await asset2.balanceOf(tester); @@ -94,9 +96,6 @@ export default async function (environment: TestSuiteEnvironment) { const router = await newRouter(); const treasury = FERDIE; - //const asset1 = await newMockERC20("Test Token 1", "TEST1"); - //const asset2 = await newMockERC20("Test Token 2", "TEST2"); - const asset1 = await newTestableERC20Wrapper("Test Token 1", "TEST1", 18, [1], [2], [], []); const asset2 = await newTestableERC20Wrapper("Test Token 2", "TEST2", 18, [1], [3], [], []); @@ -124,30 +123,37 @@ export default async function (environment: TestSuiteEnvironment) { return { async setUp() { + + //cleaning mock tokens in standalone chain + await asset1.burn(tester, await asset1.balanceOf(tester)); + await asset2.burn(tester, await asset2.balanceOf(tester)); + + await asset1.burn(treasury, await asset1.balanceOf(treasury)); + await asset2.burn(treasury, await asset2.balanceOf(treasury)); + + await asset1.burn(address(swapPool1), await asset1.balanceOf(address(swapPool1))); + await asset1.burn(address(swapPool2), await asset1.balanceOf(address(swapPool2))); + + await asset2.burn(address(swapPool1), await asset2.balanceOf(address(swapPool1))); + await asset2.burn(address(swapPool2), await asset2.balanceOf(address(swapPool2))); + + await asset1.approve(address(router), MAX_UINT256); await asset2.approve(address(router), MAX_UINT256); await asset1.approve(address(swapPool1), MAX_UINT256); await asset2.approve(address(swapPool2), MAX_UINT256); + //set up await router.setPriceOracle(address(asset1), address(oracle1)); await router.setPriceOracle(address(asset2), address(oracle2)); await router.registerPool(address(asset1), address(swapPool1)); await router.registerPool(address(asset2), address(swapPool2)); - await asset1.burn(tester, await asset1.balanceOf(tester)); await asset1.mint(tester, MINT_AMOUNT); - - await asset2.burn(tester, await asset2.balanceOf(tester)); await asset2.mint(tester, MINT_AMOUNT); - await asset1.burn(treasury, await asset1.balanceOf(treasury)); - await asset2.burn(treasury, await asset2.balanceOf(treasury)); - - await asset1.burn(address(swapPool1), await asset1.balanceOf(address(swapPool1))); - - }, async testSwap() { @@ -180,12 +186,15 @@ export default async function (environment: TestSuiteEnvironment) { ((WITHDRAW_AMOUNT / 2n) * 98n) / 100n - LOW_SLIPPAGE, path, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); + + const balanceAfter = await asset2.balanceOf(tester); const treasuryAfter = await asset2.balanceOf(treasury); + const swapFees = quoteWithoutFee - quoteWithFee; const [, liabilitiesAfter] = await swapPool2.coverage(); @@ -242,7 +251,7 @@ export default async function (environment: TestSuiteEnvironment) { unit(10) - HIGH_SLIPPAGE, path1, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); const path2 = makePath(asset2, asset1); @@ -251,7 +260,7 @@ export default async function (environment: TestSuiteEnvironment) { unit(20) - HIGH_SLIPPAGE, path2, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); const [finalReserves, finalLiabilities] = await swapPool1.coverage(); @@ -302,37 +311,43 @@ export default async function (environment: TestSuiteEnvironment) { unit(10) - HIGH_SLIPPAGE, path1, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); const initialBalance1 = await asset1.balanceOf(tester); const initialBalance2 = await asset2.balanceOf(tester); + // Swap forward const [initialReserves, initialLiabilities] = await swapPool1.coverage(); const [initialReserves2, initialLiabilities2] = await swapPool2.coverage(); + const path2 = makePath(asset1, asset2); const [, forwardSwapOutput] = await router.swapExactTokensForTokens( unit(20), unit(10) - HIGH_SLIPPAGE, path2, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); + const path3 = makePath(asset2, asset1); + await router.swapExactTokensForTokens( forwardSwapOutput, unit(20) - HIGH_SLIPPAGE, path3, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); const [finalReserves, finalLiabilities] = await swapPool1.coverage(); + const [finalReserves2, finalLiabilities2] = await swapPool2.coverage(); + assertEq(finalLiabilities, initialLiabilities, "Liabilities must eventually be equal to initial ones"); assertEq(finalLiabilities2, initialLiabilities2, "Liabilities must eventually be equal to initial ones"); assertGt(finalReserves, (initialReserves * 99999n) / 100000n, "Reserves 1 must eventually be >= initially"); @@ -378,12 +393,14 @@ export default async function (environment: TestSuiteEnvironment) { assertTrue(await router.paused()); vm.expectRevert("Pausable: paused"); + + await router.swapExactTokensForTokens( WITHDRAW_AMOUNT, WITHDRAW_AMOUNT / 2n - LOW_SLIPPAGE, path, tester, - Math.floor(Date.now() / 1000) + deadlineTime ); await router.unpause(); diff --git a/src/actions/compileContract.ts b/src/actions/compileContract.ts index 2cdfb53..8cda032 100644 --- a/src/actions/compileContract.ts +++ b/src/actions/compileContract.ts @@ -60,7 +60,7 @@ async function actuallyCompileContract( updateContractStatus("compiling"); const solangResult = await runCommand([ - "/home/giannipop/root/pendulum/solang/target/release/solang", + "../clones/solang/target/release/solang", "compile", "--no-strength-reduce", // temporary fix for https://github.com/hyperledger/solang/issues/1507 "--target", From fe01d545fdcbf3d8312b86bf5be0d78cc87d09ba Mon Sep 17 00:00:00 2001 From: Gianfranco Tasteri Date: Fri, 6 Oct 2023 13:02:16 -0300 Subject: [PATCH 3/5] point to master for pendulumWrapper contracts --- nabla/config.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nabla/config.json b/nabla/config.json index 050e436..32854cd 100644 --- a/nabla/config.json +++ b/nabla/config.json @@ -1,6 +1,7 @@ { "contracts": { "TestableERC20Wrapper": { + "repository": "pendulumWrappers", "path": "testable-erc20-wrapper/TestableERC20Wrapper.sol" }, "Router": { @@ -60,7 +61,7 @@ }, "pendulumWrappers": { "git": "https://github.com/pendulum-chain/pendulum-ink-wrapper", - "branch": "32-support-latest-solang-version" + "branch": "master" } }, "networks": { From ec682a08f06673e1db5b2f637e13c87d7447d482 Mon Sep 17 00:00:00 2001 From: Gianfranco Tasteri Date: Mon, 9 Oct 2023 10:19:27 -0300 Subject: [PATCH 4/5] review comment fix --- nabla/test/TestableERC20Tests.ts | 40 +++++++++++++------------------- nabla/test/backstop.ts | 7 +++++- src/actions/compileContract.ts | 2 +- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/nabla/test/TestableERC20Tests.ts b/nabla/test/TestableERC20Tests.ts index 18ba979..3a7d549 100644 --- a/nabla/test/TestableERC20Tests.ts +++ b/nabla/test/TestableERC20Tests.ts @@ -22,21 +22,13 @@ export default async function (environment: TestSuiteEnvironment) { }, } = environment; - function assertApproxEq(a: bigint, b: bigint, errorMessage: string): void { - if (a !== 0n && b !== 0n) { - assertApproxEqRel(a, b, 5n * 10n ** 15n, errorMessage); - } else { - assertApproxEqAbs(a, b, milliUnit(5), errorMessage); - } - } - let router: TestContract; let backstop: TestContract; let swapPool1: TestContract; let swapPool2: TestContract; - const asset1 = await newTestableERC20Wrapper("TestNative", "TEST1", 12, [0], [0], [], []); - const asset2 = await newTestableERC20Wrapper("TestNonNative", "TEST2", 12, [1], [1], [], []); + const assetNative = await newTestableERC20Wrapper("TestNative", "TEST1", 12, [0], [0], [], []); + const token1 = await newTestableERC20Wrapper("TestNonNative", "TEST2", 12, [1], [1], [], []); const MINT_AMOUNT = unit(10000); @@ -48,38 +40,38 @@ export default async function (environment: TestSuiteEnvironment) { }, async testMintsNative() { - let totalSupplyBef = await asset1.totalSupply(); - await asset1.mint(BOB, MINT_AMOUNT); - let totalSupplyAft = await asset1.totalSupply(); + let totalSupplyBef = await assetNative.totalSupply(); + await assetNative.mint(BOB, MINT_AMOUNT); + let totalSupplyAft = await assetNative.totalSupply(); assertEq(totalSupplyAft - totalSupplyBef, MINT_AMOUNT); }, async testMintsTokensPallet() { - let totalSupplyBef = await asset2.totalSupply(); - let balanceBobBef = await asset2.balanceOf(BOB); + let totalSupplyBef = await token1.totalSupply(); + let balanceBobBef = await token1.balanceOf(BOB); - await asset2.mint(BOB, MINT_AMOUNT); + await token1.mint(BOB, MINT_AMOUNT); - let totalSupplyAft = await asset2.totalSupply(); - let balanceBob = await asset2.balanceOf(BOB); + let totalSupplyAft = await token1.totalSupply(); + let balanceBob = await token1.balanceOf(BOB); assertEq(totalSupplyAft - totalSupplyBef, MINT_AMOUNT); assertEq(balanceBob - balanceBobBef, MINT_AMOUNT); }, async testBurnsNative() { - let totalSupplyBef = await asset1.totalSupply(); - await asset1.burn(BOB, BURN_AMOUNT); - let totalSupplyAft = await asset1.totalSupply(); + let totalSupplyBef = await assetNative.totalSupply(); + await assetNative.burn(BOB, BURN_AMOUNT); + let totalSupplyAft = await assetNative.totalSupply(); assertEq(totalSupplyBef - totalSupplyAft, BURN_AMOUNT); }, async testBurnsToken() { - let totalSupplyBef = await asset2.totalSupply(); - await asset2.burn(BOB, BURN_AMOUNT); - let totalSupplyAft = await asset2.totalSupply(); + let totalSupplyBef = await token1.totalSupply(); + await token1.burn(BOB, BURN_AMOUNT); + let totalSupplyAft = await token1.totalSupply(); assertEq(totalSupplyBef - totalSupplyAft, BURN_AMOUNT); }, diff --git a/nabla/test/backstop.ts b/nabla/test/backstop.ts index a116e2e..4ac554c 100644 --- a/nabla/test/backstop.ts +++ b/nabla/test/backstop.ts @@ -43,7 +43,7 @@ export default async function (environment: TestSuiteEnvironment) { let swapPool2: TestContract; const usd = await newTestableERC20Wrapper("Test Backstop Token", "USD", 18, [1], [1], [], []); - const asset1 = await newTestableERC20Wrapper("TestNative", "TEST1", 18, [1], [2], [], []); + const asset1 = await newTestableERC20Wrapper("Test Token 1", "TEST1", 18, [1], [2], [], []); const asset2 = await newTestableERC20Wrapper("Test Token 2", "TEST2", 18, [1], [3], [], []); @@ -120,7 +120,12 @@ export default async function (environment: TestSuiteEnvironment) { await backstop.addSwapPool(address(swapPool1), 0); await backstop.addSwapPool(address(swapPool2), 0); + //we ensure that only the MINT_AMOUNT is on the required accounts by + //burning pre-existing balances. + //This is required since the assets are on the standalone testing + //chain and we cannot ensure in the test alone that the balances + //of these tokens is indeed 0 (a test could have run earlier) await asset1.burn(tester, await asset1.balanceOf(tester)); await asset1.mint(tester, MINT_AMOUNT); diff --git a/src/actions/compileContract.ts b/src/actions/compileContract.ts index 8cda032..2cdfb53 100644 --- a/src/actions/compileContract.ts +++ b/src/actions/compileContract.ts @@ -60,7 +60,7 @@ async function actuallyCompileContract( updateContractStatus("compiling"); const solangResult = await runCommand([ - "../clones/solang/target/release/solang", + "/home/giannipop/root/pendulum/solang/target/release/solang", "compile", "--no-strength-reduce", // temporary fix for https://github.com/hyperledger/solang/issues/1507 "--target", From b1e2938ba01c4d257e276539812b563a52ad79d4 Mon Sep 17 00:00:00 2001 From: Gianfranco Tasteri Date: Mon, 9 Oct 2023 10:51:01 -0300 Subject: [PATCH 5/5] comments and solang path reset --- nabla/test/TestableERC20Tests.ts | 5 ----- nabla/test/swapPool.ts | 7 +++++++ nabla/test/swaps.ts | 7 ++++++- src/actions/compileContract.ts | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/nabla/test/TestableERC20Tests.ts b/nabla/test/TestableERC20Tests.ts index 3a7d549..e8ea8fa 100644 --- a/nabla/test/TestableERC20Tests.ts +++ b/nabla/test/TestableERC20Tests.ts @@ -30,11 +30,9 @@ export default async function (environment: TestSuiteEnvironment) { const assetNative = await newTestableERC20Wrapper("TestNative", "TEST1", 12, [0], [0], [], []); const token1 = await newTestableERC20Wrapper("TestNonNative", "TEST2", 12, [1], [1], [], []); - const MINT_AMOUNT = unit(10000); const BURN_AMOUNT = unit(10); - return { async setUp() { @@ -75,8 +73,5 @@ export default async function (environment: TestSuiteEnvironment) { assertEq(totalSupplyBef - totalSupplyAft, BURN_AMOUNT); }, - - - }; } \ No newline at end of file diff --git a/nabla/test/swapPool.ts b/nabla/test/swapPool.ts index 07190c7..65d6bcf 100644 --- a/nabla/test/swapPool.ts +++ b/nabla/test/swapPool.ts @@ -59,6 +59,13 @@ export default async function (environment: TestSuiteEnvironment) { // Important to deposit something before tests start, as first deposit // does not invoke usual _sharesToMint() logic, due to total supply being 0 + + //we ensure that only the MINT_AMOUNT is on the required accounts by + //burning pre-existing balances. + + //This is required since the assets are on the standalone testing + //chain and we cannot ensure in the test alone that the balances + //of these tokens is indeed 0 (a test could have run earlier) await asset.burn(CHARLIE, await asset.balanceOf(CHARLIE)); await asset.mint(CHARLIE, unit(1)); diff --git a/nabla/test/swaps.ts b/nabla/test/swaps.ts index de3b8ac..e226658 100644 --- a/nabla/test/swaps.ts +++ b/nabla/test/swaps.ts @@ -124,7 +124,12 @@ export default async function (environment: TestSuiteEnvironment) { return { async setUp() { - //cleaning mock tokens in standalone chain + //we ensure that only the MINT_AMOUNT is on the required accounts by + //burning pre-existing balances. + + //This is required since the assets are on the standalone testing + //chain and we cannot ensure in the test alone that the balances + //of these tokens is indeed 0 (a test could have run earlier) await asset1.burn(tester, await asset1.balanceOf(tester)); await asset2.burn(tester, await asset2.balanceOf(tester)); diff --git a/src/actions/compileContract.ts b/src/actions/compileContract.ts index 2cdfb53..8cda032 100644 --- a/src/actions/compileContract.ts +++ b/src/actions/compileContract.ts @@ -60,7 +60,7 @@ async function actuallyCompileContract( updateContractStatus("compiling"); const solangResult = await runCommand([ - "/home/giannipop/root/pendulum/solang/target/release/solang", + "../clones/solang/target/release/solang", "compile", "--no-strength-reduce", // temporary fix for https://github.com/hyperledger/solang/issues/1507 "--target",