diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 10c3a86..ef67fe1 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -35,5 +35,5 @@ jobs: - name: compile contracts run: npx hardhat compile - - name: deploy simulation - run: npx hardhat run ./scripts/deploy.ts \ No newline at end of file + - name: deployment and testing + run: npx hardhat test \ No newline at end of file diff --git a/README.md b/README.md index 5aa7071..3bd3028 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@ npm i ## Truffle dashboard deployment ```console -truffle dashboard +npx hardhat run ./scripts/fileImport.ts ``` ```console -npx hardhat run ./scripts/fileImport.ts +truffle dashboard ``` ```console diff --git a/hardhat.config.ts b/hardhat.config.ts index 133784a..97cde9f 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -7,7 +7,7 @@ import "solidity-coverage" const config: HardhatUserConfig = { defaultNetwork: "hardhat", solidity: { - version: "0.8.21", + version: "0.8.19", settings: { evmVersion: "byzantium", optimizer: { diff --git a/package-lock.json b/package-lock.json index 5159b03..6a0c2b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "integrate-v3", "version": "0.0.1", + "hasInstallScript": true, "license": "ISC", "dependencies": { "tsconfig-paths": "^4.2.0" @@ -19,7 +20,7 @@ "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.2", "@openzeppelin/contracts": "^4.8.3", - "@poolzfinance/poolz-helper-v2": "^2.2.1", + "@poolzfinance/poolz-helper-v2": "^2.2.2", "@trivago/prettier-plugin-sort-imports": "^4.0.0", "@truffle/dashboard-hardhat-plugin": "0.2.7", "@typechain/ethers-v5": "^10.1.1", @@ -2038,9 +2039,9 @@ } }, "node_modules/@poolzfinance/poolz-helper-v2": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@poolzfinance/poolz-helper-v2/-/poolz-helper-v2-2.2.1.tgz", - "integrity": "sha512-XmYg8iXRubK1f7wsifJ88+K3XS5eCi1WNLjXSjJrXK7QjBr6yu5UmAu62Kzv1gcjbTisheaze3s65k495A8vFA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@poolzfinance/poolz-helper-v2/-/poolz-helper-v2-2.2.2.tgz", + "integrity": "sha512-/hPZN4shG9fvo+Zvlli87WOPcu/52ubS2DQowxZvtrAQnyIrrILKS1ld3oLc0LWfD0SvbsrItCcWpY6FqVwyRQ==", "dev": true, "dependencies": { "@ethersproject/bignumber": "^5.7.0", diff --git a/package.json b/package.json index fc8f113..c214aa4 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "integrate-v3", "version": "0.0.1", - "description": "Contract for creating fixed price lunch", + "description": "Deploying and testing Poolz contracts", "main": "index.js", "scripts": { "test": "npx hardhat test", + "postinstall": "npx hardhat run ./scripts/fileImport.ts", "menu": "npx hardhat compile && .\\scripts\\separate-scripts.bat", "testnet": "npx hardhat compile && npx ts-node ./scripts/testnet.ts" }, @@ -16,8 +17,6 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.2", - "@openzeppelin/contracts": "^4.8.3", - "@poolzfinance/poolz-helper-v2": "^2.2.1", "@trivago/prettier-plugin-sort-imports": "^4.0.0", "@truffle/dashboard-hardhat-plugin": "0.2.7", "@typechain/ethers-v5": "^10.1.1", @@ -43,6 +42,8 @@ "ts-generator": "^0.1.1", "ts-node": "^10.9.1", "typechain": "^8.1.1", + "@openzeppelin/contracts": "^4.8.3", + "@poolzfinance/poolz-helper-v2": "^2.2.2", "typescript": "^4.9.3" }, "dependencies": { diff --git a/scripts/utility/builders.ts b/scripts/utility/builders.ts index cf8b431..c173e6f 100644 --- a/scripts/utility/builders.ts +++ b/scripts/utility/builders.ts @@ -1,9 +1,9 @@ -import { Wallet } from "ethers" -import { gasLimit, gasPrice, amount } from "./constants" import { SimpleBuilder, SimpleRefundBuilder, ERC20Token, VaultManager } from "../../typechain-types" -import { getSignature } from "./creation" -import { BuilderState } from "../../typechain-types" +import { BuilderState } from "../../typechain-types/contracts/LockDealNFT/contracts/Builders/SimpleBuilder/SimpleBuilder" +import { gasLimit, gasPrice, amount } from "./constants" import { finishTime } from "./constants" +import { getSignature } from "./creation" +import { Wallet } from "ethers" const sendData: BuilderState.BuilderStruct = { userPools: [ diff --git a/test/TokenVaultId.ts b/test/TokenVaultId.ts new file mode 100644 index 0000000..0d5feaf --- /dev/null +++ b/test/TokenVaultId.ts @@ -0,0 +1,154 @@ +import { getSignature } from "../scripts/utility/creation" +import { BuilderState } from "../typechain-types/contracts/LockDealNFT/contracts/Builders/SimpleRefundBuilder/SimpleRefundBuilder" +import { + VaultManager, + LockDealNFT, + DealProvider, + LockDealProvider, + TimedDealProvider, + RefundProvider, + SimpleRefundBuilder, + CollateralProvider, + ERC20Token, +} from "../typechain-types" +import { time } from "@nomicfoundation/hardhat-network-helpers" +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers" +import { deploy } from "../scripts/utility/deployment" +import { BigNumber, Wallet } from "ethers" +import { ethers } from "hardhat" +import { expect } from "chai" + +describe("Token Vault Id", function () { + let vaultManager: VaultManager + let lockDealNFT: LockDealNFT + let dealProvider: DealProvider + let lockProvider: LockDealProvider + let timedProvider: TimedDealProvider + let collateralProvider: CollateralProvider + let refundProvider: RefundProvider + let simpleRefundBuilder: SimpleRefundBuilder + let token: ERC20Token + let mainCoin: ERC20Token + let tempToken: ERC20Token + let tempToken2: ERC20Token + const tokenVaultId = 2 + const mainCoinVaultId = 3 + let poolId: BigNumber + let startTime: number + let finishTime: number + let params: [BigNumber, number, number, BigNumber, number] + let receiver: SignerWithAddress + let addresses: string[] + const ONE_DAY = 86400 + const amount = ethers.utils.parseUnits("1", 18) + let user: Wallet + + before(async () => { + ;[receiver] = await ethers.getSigners() + user = receiver as unknown as Wallet + vaultManager = (await deploy("VaultManager")) as VaultManager + lockDealNFT = (await deploy("LockDealNFT", vaultManager.address, "")) as LockDealNFT + dealProvider = (await deploy("DealProvider", lockDealNFT.address)) as DealProvider + lockProvider = (await deploy("LockDealProvider", lockDealNFT.address, dealProvider.address)) as LockDealProvider + timedProvider = (await deploy( + "TimedDealProvider", + lockDealNFT.address, + lockProvider.address + )) as TimedDealProvider + collateralProvider = (await deploy( + "CollateralProvider", + lockDealNFT.address, + dealProvider.address + )) as CollateralProvider + refundProvider = (await deploy( + "RefundProvider", + lockDealNFT.address, + collateralProvider.address + )) as RefundProvider + token = (await deploy("ERC20Token", "Token", "TOKEN")) as ERC20Token + mainCoin = (await deploy("ERC20Token", "MainCoin", "USDT")) as ERC20Token + tempToken = (await deploy("ERC20Token", "Token1", "TOKEN1")) as ERC20Token + tempToken2 = (await deploy("ERC20Token", "Token2", "TOKEN2")) as ERC20Token + simpleRefundBuilder = (await deploy( + "SimpleRefundBuilder", + lockDealNFT.address, + refundProvider.address, + collateralProvider.address + )) as SimpleRefundBuilder + await vaultManager.setTrustee(lockDealNFT.address) + + await lockDealNFT.setApprovedContract(dealProvider.address, true) + await lockDealNFT.setApprovedContract(lockProvider.address, true) + await lockDealNFT.setApprovedContract(timedProvider.address, true) + await lockDealNFT.setApprovedContract(collateralProvider.address, true) + await lockDealNFT.setApprovedContract(refundProvider.address, true) + await lockDealNFT.setApprovedContract(simpleRefundBuilder.address, true) + await token.approve(vaultManager.address, amount.mul(100)) + await mainCoin.approve(vaultManager.address, amount.mul(100)) + await lockDealNFT.approvePoolTransfers(true) + console.log("\n") + }) + + beforeEach(async () => { + poolId = await lockDealNFT.totalSupply() + startTime = (await time.latest()) + ONE_DAY // plus 1 day + finishTime = startTime + 7 * ONE_DAY // plus 7 days from `startTime` + const mainCoinAmount = amount.div(2) + addresses = [receiver.address, token.address, mainCoin.address, timedProvider.address] + params = [amount, startTime, finishTime, mainCoinAmount, finishTime] + }) + + it("should create 4 vaults", async () => { + await vaultManager["createNewVault(address)"](tempToken.address) + await vaultManager["createNewVault(address)"](tempToken2.address) + await vaultManager["createNewVault(address)"](token.address) + await vaultManager["createNewVault(address)"](mainCoin.address) + expect(await vaultManager.vaultIdToTokenAddress(0)).to.equal(tempToken.address) + expect(await vaultManager.vaultIdToTokenAddress(1)).to.equal(tempToken2.address) + expect(await vaultManager.vaultIdToTokenAddress(tokenVaultId)).to.equal(token.address) + expect(await vaultManager.vaultIdToTokenAddress(mainCoinVaultId)).to.equal(mainCoin.address) + }) + + it("checking vaultIds by creating RefundProvider NFT", async () => { + const tokenSignature = await getSignature(user, vaultManager, token, token.address, amount) + const mainCoinsignature = await getSignature(user, vaultManager, token, mainCoin.address, amount.div(2)) + await refundProvider.connect(user).createNewRefundPool(addresses, params, tokenSignature, mainCoinsignature) + expect(await lockDealNFT.poolIdToVaultId(poolId)).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(1))).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(2))).to.equal(mainCoinVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(3))).to.equal(mainCoinVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(4))).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(5))).to.equal(mainCoinVaultId) + }) + + it("checking vaultIds by creating simple refund builder NFTs", async () => { + const addresses = [timedProvider.address, token.address, mainCoin.address] + const userData = _createUsers(amount.toString(), `2`) + const params: string[][] = [ + [amount.toString(), finishTime.toString()], + [startTime.toString(), finishTime.toString()], + ] + const tokenSignature = await getSignature(user, vaultManager, token, token.address, amount.mul(2)) + const mainCoinsignature = await getSignature(user, vaultManager, token, mainCoin.address, amount) + await simpleRefundBuilder + .connect(user) + .buildMassPools(addresses, userData, params, tokenSignature, mainCoinsignature) + expect(await lockDealNFT.poolIdToVaultId(poolId)).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(1))).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(2))).to.equal(mainCoinVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(3))).to.equal(mainCoinVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(4))).to.equal(tokenVaultId) + expect(await lockDealNFT.poolIdToVaultId(poolId.add(5))).to.equal(mainCoinVaultId) + }) + + function _createUsers(amount: string, userCount: string): BuilderState.BuilderStruct { + const pools = [] + const length = parseInt(userCount) + // Create signers + for (let i = 0; i < length; ++i) { + pools.push({ user: user.address, amount: amount }) + } + const totalAmount = ethers.BigNumber.from(amount).mul(length) + return { userPools: pools, totalAmount: totalAmount } + } +})