From bd3bb4dbcd60b6eced1d555263d7e113c8e65abe Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 7 Apr 2022 18:53:18 +0200 Subject: [PATCH 01/11] remove unused variables --- .../pools/ssContracts/SideStaking.test.ts | 78 ++++++++++--------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index da626a4d..328033a6 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -27,17 +27,13 @@ import { describe('SideStaking unit test', () => { let factoryOwner: string - let nftOwner: string let user1: string let user2: string - let user3: string let initialBlock: number let sideStakingAddress: string let contracts: Addresses let pool: Pool let sideStaking: SideStaking - let dtAddress: string - let dtAddress2: string let poolAddress: string let erc20Token: string let erc20Contract: Contract @@ -48,10 +44,8 @@ describe('SideStaking unit test', () => { before(async () => { const accounts = await web3.eth.getAccounts() factoryOwner = accounts[0] - nftOwner = accounts[1] - user1 = accounts[2] - user2 = accounts[3] - user3 = accounts[4] + user1 = accounts[1] + user2 = accounts[2] }) it('should deploy contracts', async () => { @@ -127,7 +121,7 @@ describe('SideStaking unit test', () => { const ercParams: Erc20CreateParams = { templateIndex: 1, minter: factoryOwner, - paymentCollector: user3, + paymentCollector: user2, mpFeeAddress: factoryOwner, feeToken: '0x0000000000000000000000000000000000000000', cap: '1000000', @@ -164,11 +158,12 @@ describe('SideStaking unit test', () => { poolAddress = txReceipt.events.NewPool.returnValues.poolAddress erc20Contract = new web3.eth.Contract(ERC20Template.abi as AbiItem[], erc20Token) - // user2 has no dt1 - expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') + // user1 has no dt1 + expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal('0') sideStakingAddress = contracts.sideStakingAddress }) + it('#getRouter - should get Router address', async () => { expect(await sideStaking.getRouter(sideStakingAddress)).to.equal( contracts.routerAddress @@ -183,6 +178,7 @@ describe('SideStaking unit test', () => { ) ).to.equal(web3.utils.toWei('2000')) }) + it('#getDatatokenCurrentCirculatingSupply - should get datatoken supply in circulation ', async () => { expect( await sideStaking.getDatatokenCurrentCirculatingSupply( @@ -191,21 +187,25 @@ describe('SideStaking unit test', () => { ) ).to.equal(web3.utils.toWei('2000')) }) + it('#getBaseToken - should get baseToken address', async () => { expect(await sideStaking.getBaseToken(sideStakingAddress, erc20Token)).to.equal( contracts.daiAddress ) }) + it('#getPoolAddress - should get pool address', async () => { expect(await sideStaking.getPoolAddress(sideStakingAddress, erc20Token)).to.equal( poolAddress ) }) + it('#getPublisherAddress - should get publisher address', async () => { expect( await sideStaking.getPublisherAddress(sideStakingAddress, erc20Token) ).to.equal(factoryOwner) }) + it('#getBaseTokenBalance ', async () => { expect( await sideStaking.getBaseTokenBalance(sideStakingAddress, erc20Token) @@ -222,6 +222,7 @@ describe('SideStaking unit test', () => { '10000' ) }) + it('#getvestingLastBlock ', async () => { expect( await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) @@ -233,6 +234,7 @@ describe('SideStaking unit test', () => { await sideStaking.getvestingEndBlock(sideStakingAddress, erc20Token) ).to.equal((initialBlock + vestedBlocks).toString()) }) + it('#getvestingAmountSoFar ', async () => { expect( await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token) @@ -262,9 +264,9 @@ describe('SideStaking unit test', () => { it('#swapExactAmountIn - should swap', async () => { await daiContract.methods - .transfer(user2, web3.utils.toWei('1000')) + .transfer(user1, web3.utils.toWei('1000')) .send({ from: factoryOwner }) - await approve(web3, user2, contracts.daiAddress, poolAddress, '10') + await approve(web3, user1, contracts.daiAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.daiAddress, tokenOut: erc20Token, @@ -277,18 +279,18 @@ describe('SideStaking unit test', () => { } const tx = await pool.swapExactAmountIn( - user2, + user1, poolAddress, tokenInOutMarket, amountsInOutMaxFee ) - expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal( + expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal( tx.events.LOG_SWAP.returnValues.tokenAmountOut ) }) it('#swapExactAmountOut - should swap', async () => { - await approve(web3, user2, contracts.daiAddress, poolAddress, '100') + await approve(web3, user1, contracts.daiAddress, poolAddress, '100') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.daiAddress, tokenOut: erc20Token, @@ -300,7 +302,7 @@ describe('SideStaking unit test', () => { swapMarketFee: '0.1' } const tx = await pool.swapExactAmountOut( - user2, + user1, poolAddress, tokenInOutMarket, amountsInOutMaxFee @@ -308,15 +310,15 @@ describe('SideStaking unit test', () => { assert(tx != null) }) - it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { + it('#joinswapExternAmountIn- user1 should add liquidity, receiving LP tokens', async () => { const daiAmountIn = '100' const minBPTOut = '0.1' - await approve(web3, user2, contracts.daiAddress, poolAddress, '100', true) - expect(await allowance(web3, contracts.daiAddress, user2, poolAddress)).to.equal( + await approve(web3, user1, contracts.daiAddress, poolAddress, '100', true) + expect(await allowance(web3, contracts.daiAddress, user1, poolAddress)).to.equal( '100' ) const tx = await pool.joinswapExternAmountIn( - user2, + user1, poolAddress, daiAmountIn, minBPTOut @@ -332,12 +334,12 @@ describe('SideStaking unit test', () => { ) }) - it('#exitswapPoolAmountIn- user2 exit the pool receiving only DAI', async () => { + it('#exitswapPoolAmountIn- user1 exit the pool receiving only DAI', async () => { const BPTAmountIn = '0.5' const minDAIOut = '0.5' const tx = await pool.exitswapPoolAmountIn( - user2, + user1, poolAddress, BPTAmountIn, minDAIOut @@ -370,7 +372,7 @@ describe('SideStaking unit test', () => { const ercParams: Erc20CreateParams = { templateIndex: 1, minter: factoryOwner, - paymentCollector: user3, + paymentCollector: user2, mpFeeAddress: factoryOwner, feeToken: '0x0000000000000000000000000000000000000000', cap: '1000000', @@ -411,8 +413,8 @@ describe('SideStaking unit test', () => { poolAddress = txReceipt.events.NewPool.returnValues.poolAddress erc20Contract = new web3.eth.Contract(ERC20Template.abi as AbiItem[], erc20Token) - // user2 has no dt1 - expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') + // user1 has no dt1 + expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal('0') }) it('#getBaseTokenBalance ', async () => { @@ -431,6 +433,7 @@ describe('SideStaking unit test', () => { '10000' ) }) + it('#getvestingLastBlock ', async () => { expect( await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) @@ -442,6 +445,7 @@ describe('SideStaking unit test', () => { await sideStaking.getvestingEndBlock(sideStakingAddress, erc20Token) ).to.equal((initialBlock + vestedBlocks).toString()) }) + it('#getvestingAmountSoFar ', async () => { expect( await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token) @@ -472,10 +476,10 @@ describe('SideStaking unit test', () => { it('#swapExactAmountIn - should swap', async () => { const transferAmount = await amountToUnits(web3, contracts.usdcAddress, '1000') // 1000 USDC await usdcContract.methods - .transfer(user2, transferAmount) + .transfer(user1, transferAmount) .send({ from: factoryOwner }) - await approve(web3, user2, contracts.usdcAddress, poolAddress, '10') + await approve(web3, user1, contracts.usdcAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -487,18 +491,18 @@ describe('SideStaking unit test', () => { swapMarketFee: '0.1' } const tx = await pool.swapExactAmountIn( - user2, + user1, poolAddress, tokenInOutMarket, amountsInOutMaxFee ) - expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal( + expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal( tx.events.LOG_SWAP.returnValues.tokenAmountOut ) }) it('#swapExactAmountOut - should swap', async () => { - await approve(web3, user2, contracts.usdcAddress, poolAddress, '100') + await approve(web3, user1, contracts.usdcAddress, poolAddress, '100') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -510,7 +514,7 @@ describe('SideStaking unit test', () => { swapMarketFee: '0.1' } const tx = await pool.swapExactAmountOut( - user2, + user1, poolAddress, tokenInOutMarket, amountsInOutMaxFee @@ -519,13 +523,13 @@ describe('SideStaking unit test', () => { // console.log(tx.events) }) - it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { + it('#joinswapExternAmountIn- user1 should add liquidity, receiving LP tokens', async () => { const usdcAmountIn = '100' const minBPTOut = '0.1' - await approve(web3, user2, contracts.usdcAddress, poolAddress, '100', true) + await approve(web3, user1, contracts.usdcAddress, poolAddress, '100', true) const tx = await pool.joinswapExternAmountIn( - user2, + user1, poolAddress, usdcAmountIn, minBPTOut @@ -541,12 +545,12 @@ describe('SideStaking unit test', () => { ) }) - it('#exitswapPoolAmountIn- user2 exit the pool receiving only USDC', async () => { + it('#exitswapPoolAmountIn- user1 exit the pool receiving only USDC', async () => { const BPTAmountIn = '0.5' const minUSDCOut = '0.5' const tx = await pool.exitswapPoolAmountIn( - user2, + user1, poolAddress, BPTAmountIn, minUSDCOut From b9c9ad86ae62ec45e912c44b1f3c1c3688dee4c0 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 7 Apr 2022 19:02:18 +0200 Subject: [PATCH 02/11] remove abi imports --- test/unit/pools/ssContracts/SideStaking.test.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index 328033a6..bceacfa8 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -1,9 +1,7 @@ import { assert, expect } from 'chai' import { AbiItem } from 'web3-utils/types' import { Contract } from 'web3-eth-contract' -import SSContract from '@oceanprotocol/contracts/artifacts/contracts/pools/ssContracts/SideStaking.sol/SideStaking.json' import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json' -import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json' import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json' import { deployContracts, Addresses } from '../../../TestContractHandler' import { web3 } from '../../../config' @@ -53,11 +51,9 @@ describe('SideStaking unit test', () => { sideStakingAddress = contracts.sideStakingAddress // initialize Pool instance - pool = new Pool(web3, PoolTemplate.abi as AbiItem[]) - assert(pool != null) - // - sideStaking = new SideStaking(web3, SSContract.abi as AbiItem[]) - assert(sideStaking != null) + pool = new Pool(web3) + + sideStaking = new SideStaking(web3) daiContract = new web3.eth.Contract(MockERC20.abi as AbiItem[], contracts.daiAddress) @@ -95,11 +91,6 @@ describe('SideStaking unit test', () => { ) assert(parseInt(allowCheck) >= 10000) - console.log( - await usdcContract.methods.decimals().call(), - 'USDC DECIMALS IN THIS TEST' - ) - await amountToUnits(web3, contracts.usdcAddress, '20') }) @@ -520,7 +511,6 @@ describe('SideStaking unit test', () => { amountsInOutMaxFee ) assert(tx != null) - // console.log(tx.events) }) it('#joinswapExternAmountIn- user1 should add liquidity, receiving LP tokens', async () => { From f71834f4938b7c44fd58cb38e46e6c799582b7c1 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 7 Apr 2022 19:10:12 +0200 Subject: [PATCH 03/11] refactor dai and usdc checks --- .../pools/ssContracts/SideStaking.test.ts | 112 +++++++++--------- 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index bceacfa8..50616657 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -28,7 +28,6 @@ describe('SideStaking unit test', () => { let user1: string let user2: string let initialBlock: number - let sideStakingAddress: string let contracts: Addresses let pool: Pool let sideStaking: SideStaking @@ -48,7 +47,6 @@ describe('SideStaking unit test', () => { it('should deploy contracts', async () => { contracts = await deployContracts(web3, factoryOwner) - sideStakingAddress = contracts.sideStakingAddress // initialize Pool instance pool = new Pool(web3) @@ -56,11 +54,11 @@ describe('SideStaking unit test', () => { sideStaking = new SideStaking(web3) daiContract = new web3.eth.Contract(MockERC20.abi as AbiItem[], contracts.daiAddress) - usdcContract = new web3.eth.Contract( MockERC20.abi as AbiItem[], contracts.usdcAddress ) + await approve( web3, factoryOwner, @@ -68,6 +66,18 @@ describe('SideStaking unit test', () => { contracts.erc721FactoryAddress, '2000' ) + + assert( + parseInt( + await allowance( + web3, + contracts.daiAddress, + factoryOwner, + contracts.erc721FactoryAddress + ) + ) >= 2000 + ) + await approve( web3, factoryOwner, @@ -76,22 +86,16 @@ describe('SideStaking unit test', () => { '10000' ) - let allowCheck = await allowance( - web3, - contracts.daiAddress, - factoryOwner, - contracts.erc721FactoryAddress + assert( + parseInt( + await allowance( + web3, + contracts.usdcAddress, + factoryOwner, + contracts.erc721FactoryAddress + ) + ) >= 10000 ) - assert(parseInt(allowCheck) >= 2000) - allowCheck = await allowance( - web3, - contracts.usdcAddress, - factoryOwner, - contracts.erc721FactoryAddress - ) - assert(parseInt(allowCheck) >= 10000) - - await amountToUnits(web3, contracts.usdcAddress, '20') }) describe('Test a pool with DAI (18 Decimals)', () => { @@ -151,12 +155,10 @@ describe('SideStaking unit test', () => { erc20Contract = new web3.eth.Contract(ERC20Template.abi as AbiItem[], erc20Token) // user1 has no dt1 expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal('0') - - sideStakingAddress = contracts.sideStakingAddress }) it('#getRouter - should get Router address', async () => { - expect(await sideStaking.getRouter(sideStakingAddress)).to.equal( + expect(await sideStaking.getRouter(contracts.sideStakingAddress)).to.equal( contracts.routerAddress ) }) @@ -180,55 +182,50 @@ describe('SideStaking unit test', () => { }) it('#getBaseToken - should get baseToken address', async () => { - expect(await sideStaking.getBaseToken(sideStakingAddress, erc20Token)).to.equal( - contracts.daiAddress - ) + expect( + await sideStaking.getBaseToken(contracts.sideStakingAddress, erc20Token) + ).to.equal(contracts.daiAddress) }) it('#getPoolAddress - should get pool address', async () => { - expect(await sideStaking.getPoolAddress(sideStakingAddress, erc20Token)).to.equal( - poolAddress - ) + expect( + await sideStaking.getPoolAddress(contracts.sideStakingAddress, erc20Token) + ).to.equal(poolAddress) }) it('#getPublisherAddress - should get publisher address', async () => { expect( - await sideStaking.getPublisherAddress(sideStakingAddress, erc20Token) + await sideStaking.getPublisherAddress(contracts.sideStakingAddress, erc20Token) ).to.equal(factoryOwner) }) it('#getBaseTokenBalance ', async () => { expect( - await sideStaking.getBaseTokenBalance(sideStakingAddress, erc20Token) + await sideStaking.getBaseTokenBalance(contracts.sideStakingAddress, erc20Token) ).to.equal('0') }) - // it('#getDatatokenBalance ', async () => { - // expect( - // await sideStaking.getDatatokenBalance(sideStakingAddress, erc20Token) - // ).to.equal('997999.9999999999') - // }) it('#getvestingAmount ', async () => { - expect(await sideStaking.getvestingAmount(sideStakingAddress, erc20Token)).to.equal( - '10000' - ) + expect( + await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) + ).to.equal('10000') }) it('#getvestingLastBlock ', async () => { expect( - await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingLastBlock(contracts.sideStakingAddress, erc20Token) ).to.equal(initialBlock.toString()) }) it('#getvestingEndBlock ', async () => { expect( - await sideStaking.getvestingEndBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingEndBlock(contracts.sideStakingAddress, erc20Token) ).to.equal((initialBlock + vestedBlocks).toString()) }) it('#getvestingAmountSoFar ', async () => { expect( - await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token) + await sideStaking.getvestingAmountSoFar(contracts.sideStakingAddress, erc20Token) ).to.equal('0') }) @@ -237,7 +234,7 @@ describe('SideStaking unit test', () => { const tx = await sideStaking.getVesting( factoryOwner, - sideStakingAddress, + contracts.sideStakingAddress, erc20Token ) const collector = await erc20Contract.methods.getPaymentCollector().call() @@ -246,10 +243,12 @@ describe('SideStaking unit test', () => { erc20Token, await erc20Contract.methods.balanceOf(collector).call() ) - ).to.equal(await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token)) + ).to.equal( + await sideStaking.getvestingAmountSoFar(contracts.sideStakingAddress, erc20Token) + ) expect( - await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingLastBlock(contracts.sideStakingAddress, erc20Token) ).to.equal((await web3.eth.getBlockNumber()).toString()) }) @@ -410,36 +409,31 @@ describe('SideStaking unit test', () => { it('#getBaseTokenBalance ', async () => { expect( - await sideStaking.getBaseTokenBalance(sideStakingAddress, erc20Token) + await sideStaking.getBaseTokenBalance(contracts.sideStakingAddress, erc20Token) ).to.equal('0') }) - // it('#getDatatokenBalance ', async () => { - // expect( - // await sideStaking.getDatatokenBalance(sideStakingAddress, erc20Token) - // ).to.equal('997999.9999999999') - // }) it('#getvestingAmount ', async () => { - expect(await sideStaking.getvestingAmount(sideStakingAddress, erc20Token)).to.equal( - '10000' - ) + expect( + await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) + ).to.equal('10000') }) it('#getvestingLastBlock ', async () => { expect( - await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingLastBlock(contracts.sideStakingAddress, erc20Token) ).to.equal(initialBlock.toString()) }) it('#getvestingEndBlock ', async () => { expect( - await sideStaking.getvestingEndBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingEndBlock(contracts.sideStakingAddress, erc20Token) ).to.equal((initialBlock + vestedBlocks).toString()) }) it('#getvestingAmountSoFar ', async () => { expect( - await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token) + await sideStaking.getvestingAmountSoFar(contracts.sideStakingAddress, erc20Token) ).to.equal('0') }) @@ -448,7 +442,7 @@ describe('SideStaking unit test', () => { const tx = await sideStaking.getVesting( factoryOwner, - sideStakingAddress, + contracts.sideStakingAddress, erc20Token ) const collector = await erc20Contract.methods.getPaymentCollector().call() @@ -457,10 +451,12 @@ describe('SideStaking unit test', () => { erc20Token, await erc20Contract.methods.balanceOf(collector).call() ) - ).to.equal(await sideStaking.getvestingAmountSoFar(sideStakingAddress, erc20Token)) + ).to.equal( + await sideStaking.getvestingAmountSoFar(contracts.sideStakingAddress, erc20Token) + ) expect( - await sideStaking.getvestingLastBlock(sideStakingAddress, erc20Token) + await sideStaking.getvestingLastBlock(contracts.sideStakingAddress, erc20Token) ).to.equal((await web3.eth.getBlockNumber()).toString()) }) From b7d5f66d6cf9de7298316919cfaf026ba0fb8765 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 7 Apr 2022 19:24:16 +0200 Subject: [PATCH 04/11] refactor constants --- .../pools/ssContracts/SideStaking.test.ts | 119 +++++++++--------- 1 file changed, 59 insertions(+), 60 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index 50616657..87af2052 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -12,7 +12,8 @@ import { NftFactory, NftCreateData, Pool, - unitsToAmount + unitsToAmount, + ZERO_ADDRESS } from '../../../../src' import { SideStaking } from '../../../../src/pools/ssContracts/SideStaking' import { @@ -36,13 +37,50 @@ describe('SideStaking unit test', () => { let erc20Contract: Contract let daiContract: Contract let usdcContract: Contract - const vestedBlocks = 2500000 + + const DAI_AMOUNT = 2000 + const USDC_AMOUNT = 10000 + const VESTED_BLOCKS = 2500000 + const VESTING_AMOUNT = '10000' + const CAP_AMOUNT = '1000000' + const NFT_NAME = '72120Bundle' + const NFT_SYMBOL = '72Bundle' + const NFT_TOKEN_URI = 'https://oceanprotocol.com/nft/' + const ERC20_NAME = 'ERC20B1' + const ERC20_SYMBOL = 'ERC20DT1Symbol' + const FEE_ZERO = '0' + + const NFT_DATA: NftCreateData = { + name: NFT_NAME, + symbol: NFT_SYMBOL, + templateIndex: 1, + tokenURI: NFT_TOKEN_URI, + transferable: true, + owner: factoryOwner + } + + const ERC_PARAMS: Erc20CreateParams = { + templateIndex: 1, + minter: factoryOwner, + paymentCollector: user2, + mpFeeAddress: factoryOwner, + feeToken: ZERO_ADDRESS, + cap: CAP_AMOUNT, + feeAmount: FEE_ZERO, + name: ERC20_NAME, + symbol: ERC20_SYMBOL + } before(async () => { const accounts = await web3.eth.getAccounts() factoryOwner = accounts[0] user1 = accounts[1] user2 = accounts[2] + + NFT_DATA.owner = factoryOwner + ERC_PARAMS.minter = factoryOwner + ERC_PARAMS.paymentCollector = user2 + ERC_PARAMS.mpFeeAddress = factoryOwner }) it('should deploy contracts', async () => { @@ -64,7 +102,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.daiAddress, contracts.erc721FactoryAddress, - '2000' + DAI_AMOUNT.toString() ) assert( @@ -75,7 +113,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= 2000 + ) >= DAI_AMOUNT ) await approve( @@ -83,7 +121,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.usdcAddress, contracts.erc721FactoryAddress, - '10000' + USDC_AMOUNT.toString() ) assert( @@ -94,7 +132,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= 10000 + ) >= USDC_AMOUNT ) }) @@ -104,27 +142,6 @@ describe('SideStaking unit test', () => { // we prepare transaction parameters objects const nftFactory = new NftFactory(contracts.erc721FactoryAddress, web3) - const nftData: NftCreateData = { - name: '72120Bundle', - symbol: '72Bundle', - templateIndex: 1, - tokenURI: 'https://oceanprotocol.com/nft/', - transferable: true, - owner: factoryOwner - } - - const ercParams: Erc20CreateParams = { - templateIndex: 1, - minter: factoryOwner, - paymentCollector: user2, - mpFeeAddress: factoryOwner, - feeToken: '0x0000000000000000000000000000000000000000', - cap: '1000000', - feeAmount: '0', - name: 'ERC20B1', - symbol: 'ERC20DT1Symbol' - } - const poolParams: PoolCreationParams = { ssContract: contracts.sideStakingAddress, baseTokenAddress: contracts.daiAddress, @@ -134,8 +151,8 @@ describe('SideStaking unit test', () => { poolTemplateAddress: contracts.poolTemplateAddress, rate: '1', baseTokenDecimals: 18, - vestingAmount: '10000', - vestedBlocks: vestedBlocks, + vestingAmount: VESTING_AMOUNT, + vestedBlocks: VESTED_BLOCKS, initialBaseTokenLiquidity: '2000', swapFeeLiquidityProvider: '0.001', swapFeeMarketRunner: '0.001' @@ -143,8 +160,8 @@ describe('SideStaking unit test', () => { const txReceipt = await nftFactory.createNftErc20WithPool( factoryOwner, - nftData, - ercParams, + NFT_DATA, + ERC_PARAMS, poolParams ) @@ -208,7 +225,7 @@ describe('SideStaking unit test', () => { it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal('10000') + ).to.equal(VESTING_AMOUNT) }) it('#getvestingLastBlock ', async () => { @@ -220,7 +237,7 @@ describe('SideStaking unit test', () => { it('#getvestingEndBlock ', async () => { expect( await sideStaking.getvestingEndBlock(contracts.sideStakingAddress, erc20Token) - ).to.equal((initialBlock + vestedBlocks).toString()) + ).to.equal((initialBlock + VESTED_BLOCKS).toString()) }) it('#getvestingAmountSoFar ', async () => { @@ -257,11 +274,13 @@ describe('SideStaking unit test', () => { .transfer(user1, web3.utils.toWei('1000')) .send({ from: factoryOwner }) await approve(web3, user1, contracts.daiAddress, poolAddress, '10') + const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.daiAddress, tokenOut: erc20Token, marketFeeAddress: factoryOwner } + const amountsInOutMaxFee: AmountsInMaxFee = { tokenAmountIn: '10', minAmountOut: '1', @@ -274,6 +293,7 @@ describe('SideStaking unit test', () => { tokenInOutMarket, amountsInOutMaxFee ) + expect(await erc20Contract.methods.balanceOf(user1).call()).to.equal( tx.events.LOG_SWAP.returnValues.tokenAmountOut ) @@ -350,27 +370,6 @@ describe('SideStaking unit test', () => { // we prepare transaction parameters objects const nftFactory = new NftFactory(contracts.erc721FactoryAddress, web3) - const nftData: NftCreateData = { - name: '72120Bundle', - symbol: '72Bundle', - templateIndex: 1, - tokenURI: 'https://oceanprotocol.com/nft/', - transferable: true, - owner: factoryOwner - } - - const ercParams: Erc20CreateParams = { - templateIndex: 1, - minter: factoryOwner, - paymentCollector: user2, - mpFeeAddress: factoryOwner, - feeToken: '0x0000000000000000000000000000000000000000', - cap: '1000000', - feeAmount: '0', - name: 'ERC20B1', - symbol: 'ERC20DT1Symbol' - } - const poolParams: PoolCreationParams = { ssContract: contracts.sideStakingAddress, baseTokenAddress: contracts.usdcAddress, @@ -380,8 +379,8 @@ describe('SideStaking unit test', () => { poolTemplateAddress: contracts.poolTemplateAddress, rate: '1', baseTokenDecimals: await usdcContract.methods.decimals().call(), - vestingAmount: '10000', - vestedBlocks: 2500000, + vestingAmount: VESTING_AMOUNT, + vestedBlocks: VESTED_BLOCKS, initialBaseTokenLiquidity: await unitsToAmount( web3, contracts.usdcAddress, @@ -393,8 +392,8 @@ describe('SideStaking unit test', () => { const txReceipt = await nftFactory.createNftErc20WithPool( factoryOwner, - nftData, - ercParams, + NFT_DATA, + ERC_PARAMS, poolParams ) @@ -416,7 +415,7 @@ describe('SideStaking unit test', () => { it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal('10000') + ).to.equal(VESTING_AMOUNT) }) it('#getvestingLastBlock ', async () => { @@ -428,7 +427,7 @@ describe('SideStaking unit test', () => { it('#getvestingEndBlock ', async () => { expect( await sideStaking.getvestingEndBlock(contracts.sideStakingAddress, erc20Token) - ).to.equal((initialBlock + vestedBlocks).toString()) + ).to.equal((initialBlock + VESTED_BLOCKS).toString()) }) it('#getvestingAmountSoFar ', async () => { From e3de1919823ecefb8bba84cff05aa86b749080c4 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Tue, 12 Apr 2022 11:32:14 +0200 Subject: [PATCH 05/11] update SideStaking import --- test/unit/pools/ssContracts/SideStaking.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index 87af2052..abf38d3a 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -12,10 +12,10 @@ import { NftFactory, NftCreateData, Pool, + SideStaking, unitsToAmount, ZERO_ADDRESS } from '../../../../src' -import { SideStaking } from '../../../../src/pools/ssContracts/SideStaking' import { Erc20CreateParams, PoolCreationParams, From 689823d28196566c203997e352d24e04b16e7f2e Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 14 Apr 2022 09:17:44 +0200 Subject: [PATCH 06/11] uncomment and fix broken tests --- test/unit/pools/ssContracts/SideStaking.test.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index abf38d3a..fc768f4a 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -222,6 +222,12 @@ describe('SideStaking unit test', () => { ).to.equal('0') }) + it('#getDatatokenBalance ', async () => { + expect( + await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) + ).to.equal(((Math.pow(2, 256) - 1) / Math.pow(10, 18)).toString()) + }) + it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) @@ -412,6 +418,12 @@ describe('SideStaking unit test', () => { ).to.equal('0') }) + it('#getDatatokenBalance ', async () => { + expect( + await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) + ).to.equal(((Math.pow(2, 256) - 1) / Math.pow(10, 18)).toString()) + }) + it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) From 604ede0ee8eb88d9f9b137e798e12cb04ea098fd Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 28 Apr 2022 17:50:13 +0200 Subject: [PATCH 07/11] simplify constants --- .../pools/ssContracts/SideStaking.test.ts | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index fc768f4a..136fb354 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -38,37 +38,28 @@ describe('SideStaking unit test', () => { let daiContract: Contract let usdcContract: Contract - const DAI_AMOUNT = 2000 - const USDC_AMOUNT = 10000 const VESTED_BLOCKS = 2500000 const VESTING_AMOUNT = '10000' - const CAP_AMOUNT = '1000000' - const NFT_NAME = '72120Bundle' - const NFT_SYMBOL = '72Bundle' - const NFT_TOKEN_URI = 'https://oceanprotocol.com/nft/' - const ERC20_NAME = 'ERC20B1' - const ERC20_SYMBOL = 'ERC20DT1Symbol' - const FEE_ZERO = '0' - const NFT_DATA: NftCreateData = { - name: NFT_NAME, - symbol: NFT_SYMBOL, + const nftData: NftCreateData = { + name: '72120Bundle', + symbol: '72Bundle', templateIndex: 1, - tokenURI: NFT_TOKEN_URI, + tokenURI: 'https://oceanprotocol.com/nft/', transferable: true, owner: factoryOwner } - const ERC_PARAMS: Erc20CreateParams = { + const ercParams: Erc20CreateParams = { templateIndex: 1, minter: factoryOwner, paymentCollector: user2, mpFeeAddress: factoryOwner, feeToken: ZERO_ADDRESS, - cap: CAP_AMOUNT, - feeAmount: FEE_ZERO, - name: ERC20_NAME, - symbol: ERC20_SYMBOL + cap: '1000000', + feeAmount: '0', + name: 'ERC20B1', + symbol: 'ERC20DT1Symbol' } before(async () => { @@ -77,10 +68,10 @@ describe('SideStaking unit test', () => { user1 = accounts[1] user2 = accounts[2] - NFT_DATA.owner = factoryOwner - ERC_PARAMS.minter = factoryOwner - ERC_PARAMS.paymentCollector = user2 - ERC_PARAMS.mpFeeAddress = factoryOwner + nftData.owner = factoryOwner + ercParams.minter = factoryOwner + ercParams.paymentCollector = user2 + ercParams.mpFeeAddress = factoryOwner }) it('should deploy contracts', async () => { @@ -102,7 +93,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.daiAddress, contracts.erc721FactoryAddress, - DAI_AMOUNT.toString() + '2000' ) assert( @@ -113,7 +104,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= DAI_AMOUNT + ) >= 2000 ) await approve( @@ -121,7 +112,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.usdcAddress, contracts.erc721FactoryAddress, - USDC_AMOUNT.toString() + '10000' ) assert( @@ -132,7 +123,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= USDC_AMOUNT + ) >= 10000 ) }) @@ -160,8 +151,8 @@ describe('SideStaking unit test', () => { const txReceipt = await nftFactory.createNftErc20WithPool( factoryOwner, - NFT_DATA, - ERC_PARAMS, + nftData, + ercParams, poolParams ) @@ -398,8 +389,8 @@ describe('SideStaking unit test', () => { const txReceipt = await nftFactory.createNftErc20WithPool( factoryOwner, - NFT_DATA, - ERC_PARAMS, + nftData, + ercParams, poolParams ) From 1e3e36d00090ec7ad3ae6db4a50fa4cec286a07a Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 12 May 2022 17:56:23 +0200 Subject: [PATCH 08/11] fix linting errors --- test/unit/pools/ssContracts/SideStaking.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index 9ba71fa0..f67a6cf1 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -222,9 +222,9 @@ describe('SideStaking unit test', () => { }) it('#getvestingAmount ', async () => { - expect(await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token)).to.equal( - '0' - ) + expect( + await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) + ).to.equal('0') }) it('#getvestingLastBlock ', async () => { @@ -389,9 +389,9 @@ describe('SideStaking unit test', () => { }) it('#getvestingAmount ', async () => { - expect(await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token)).to.equal( - '0' - ) + expect( + await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) + ).to.equal('0') }) it('#getvestingLastBlock ', async () => { From 2ccc35819f248971992b884f5d01115e2c93729e Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Tue, 17 May 2022 18:07:20 +0200 Subject: [PATCH 09/11] fix calculation error --- .../pools/ssContracts/SideStaking.test.ts | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index f67a6cf1..c48a78c4 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -1,6 +1,7 @@ import { assert, expect } from 'chai' import { AbiItem } from 'web3-utils/types' import { Contract } from 'web3-eth-contract' +import BigNumber from 'bignumber.js' import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json' import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json' import { deployContracts, Addresses } from '../../../TestContractHandler' @@ -40,6 +41,7 @@ describe('SideStaking unit test', () => { const VESTED_BLOCKS = 2500000 const VESTING_AMOUNT = '10000' + const BASE_TOKEN_LIQUIDITY = 2000 const nftData: NftCreateData = { name: '72120Bundle', @@ -95,7 +97,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.daiAddress, contracts.erc721FactoryAddress, - '2000' + BASE_TOKEN_LIQUIDITY.toString() ) assert( @@ -106,7 +108,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= 2000 + ) >= BASE_TOKEN_LIQUIDITY ) await approve( @@ -114,7 +116,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.usdcAddress, contracts.erc721FactoryAddress, - '10000' + BASE_TOKEN_LIQUIDITY.toString() ) assert( @@ -125,7 +127,7 @@ describe('SideStaking unit test', () => { factoryOwner, contracts.erc721FactoryAddress ) - ) >= 10000 + ) >= BASE_TOKEN_LIQUIDITY ) }) @@ -146,7 +148,7 @@ describe('SideStaking unit test', () => { baseTokenDecimals: 18, vestingAmount: VESTING_AMOUNT, vestedBlocks: VESTED_BLOCKS, - initialBaseTokenLiquidity: '2000', + initialBaseTokenLiquidity: BASE_TOKEN_LIQUIDITY.toString(), swapFeeLiquidityProvider: '0.001', swapFeeMarketRunner: '0.001' } @@ -179,7 +181,7 @@ describe('SideStaking unit test', () => { contracts.sideStakingAddress, erc20Token ) - ).to.equal(web3.utils.toWei('2000')) + ).to.equal(web3.utils.toWei(BASE_TOKEN_LIQUIDITY.toString())) }) it('#getDatatokenCurrentCirculatingSupply - should get datatoken supply in circulation ', async () => { @@ -188,7 +190,7 @@ describe('SideStaking unit test', () => { contracts.sideStakingAddress, erc20Token ) - ).to.equal(web3.utils.toWei('2000')) + ).to.equal(web3.utils.toWei(BASE_TOKEN_LIQUIDITY.toString())) }) it('#getBaseToken - should get baseToken address', async () => { @@ -217,14 +219,23 @@ describe('SideStaking unit test', () => { it('#getDatatokenBalance ', async () => { expect( - await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) - ).to.equal(((Math.pow(2, 256) - 1) / Math.pow(10, 18)).toString()) + await ( + await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) + ).toString() + ).to.equal( + new BigNumber(2) + .exponentiatedBy(256) + .minus(1) + .dividedBy(new BigNumber(10).exponentiatedBy(18)) + .minus(BASE_TOKEN_LIQUIDITY) + .toString() + ) }) it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal('0') + ).to.equal(VESTING_AMOUNT) }) it('#getvestingLastBlock ', async () => { @@ -354,7 +365,11 @@ describe('SideStaking unit test', () => { initialBaseTokenLiquidity: await unitsToAmount( web3, contracts.usdcAddress, - await amountToUnits(web3, contracts.usdcAddress, '2000') + await amountToUnits( + web3, + contracts.usdcAddress, + BASE_TOKEN_LIQUIDITY.toString() + ) ), swapFeeLiquidityProvider: '0.001', swapFeeMarketRunner: '0.001' @@ -384,14 +399,23 @@ describe('SideStaking unit test', () => { it('#getDatatokenBalance ', async () => { expect( - await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) - ).to.equal(((Math.pow(2, 256) - 1) / Math.pow(10, 18)).toString()) + await ( + await sideStaking.getDatatokenBalance(contracts.sideStakingAddress, erc20Token) + ).toString() + ).to.equal( + new BigNumber(2) + .exponentiatedBy(256) + .minus(1) + .dividedBy(new BigNumber(10).exponentiatedBy(18)) + .minus(BASE_TOKEN_LIQUIDITY) + .toString() + ) }) it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal('0') + ).to.equal(VESTING_AMOUNT) }) it('#getvestingLastBlock ', async () => { From f13850a0a8d644e43047a2e9df6dc0fe14e60f67 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Tue, 17 May 2022 18:21:20 +0200 Subject: [PATCH 10/11] fix getvestingAmount error --- test/unit/pools/ssContracts/SideStaking.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index c48a78c4..af2d292f 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -235,7 +235,7 @@ describe('SideStaking unit test', () => { it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal(VESTING_AMOUNT) + ).to.equal('0') }) it('#getvestingLastBlock ', async () => { @@ -415,7 +415,7 @@ describe('SideStaking unit test', () => { it('#getvestingAmount ', async () => { expect( await sideStaking.getvestingAmount(contracts.sideStakingAddress, erc20Token) - ).to.equal(VESTING_AMOUNT) + ).to.equal('0') }) it('#getvestingLastBlock ', async () => { From 623238882e5b6861219868c6640e2e4e8fda0cd7 Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Mon, 23 May 2022 15:55:07 +0200 Subject: [PATCH 11/11] initialize accounts with null --- test/unit/pools/ssContracts/SideStaking.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index af2d292f..687df98d 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -49,14 +49,14 @@ describe('SideStaking unit test', () => { templateIndex: 1, tokenURI: 'https://oceanprotocol.com/nft/', transferable: true, - owner: factoryOwner + owner: null } const ercParams: Erc20CreateParams = { templateIndex: 1, - minter: factoryOwner, - paymentCollector: user2, - mpFeeAddress: factoryOwner, + minter: null, + paymentCollector: null, + mpFeeAddress: null, feeToken: ZERO_ADDRESS, cap: '1000000', feeAmount: '0',