diff --git a/script/DeployMock.sol b/script/DeployMock.sol index ea30d03..cf412dc 100644 --- a/script/DeployMock.sol +++ b/script/DeployMock.sol @@ -1,14 +1,19 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.30; -import "../test/Deploy.sol"; -import "../src/IPartyPool.sol"; -import "../src/PartyPlanner.sol"; -import "../src/PartyPool.sol"; -import "../test/MockERC20.sol"; -import "@abdk/ABDKMath64x64.sol"; -import "forge-std/Script.sol"; import "forge-std/console2.sol"; +import {ABDKMath64x64} from "../lib/abdk-libraries-solidity/ABDKMath64x64.sol"; +import {CommonBase} from "../lib/forge-std/src/Base.sol"; +import {Script} from "../lib/forge-std/src/Script.sol"; +import {StdChains} from "../lib/forge-std/src/StdChains.sol"; +import {StdCheatsSafe} from "../lib/forge-std/src/StdCheats.sol"; +import {StdUtils} from "../lib/forge-std/src/StdUtils.sol"; +import {IERC20} from "../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20Metadata} from "../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {PartyPlanner} from "../src/PartyPlanner.sol"; +import {PartyPoolViewer} from "../src/PartyPoolViewer.sol"; +import {Deploy} from "../test/Deploy.sol"; +import {MockERC20} from "../test/MockERC20.sol"; contract DeployMock is Script { @@ -49,9 +54,9 @@ contract DeployMock is Script { mintAll(msg.sender, 10_000); // prepare initial deposits (10_000 units of each token, scaled by _bases) uint256[] memory initialDeposits = new uint256[](3); - initialDeposits[0] = _bases[0] * 10_000; - initialDeposits[1] = _bases[1] * 10_000; - initialDeposits[2] = _bases[2] * 10_000; + initialDeposits[0] = 10_000 * 10 ** IERC20Metadata(address(tokens[0])).decimals(); + initialDeposits[1] = 10_000 * 10 ** IERC20Metadata(address(tokens[1])).decimals(); + initialDeposits[2] = 10_000 * 10 ** IERC20Metadata(address(tokens[2])).decimals(); // approve factory to move initial deposits for (uint i = 0; i < tokens.length; i++) { IERC20(tokens[i]).approve(address(planner), initialDeposits[i]); @@ -94,9 +99,9 @@ contract DeployMock is Script { mintAll(msg.sender, 10_000); // prepare initial deposits (10_000 units of each token, scaled by _bases) initialDeposits = new uint256[](3); - initialDeposits[0] = _bases[0] * 10_000; - initialDeposits[1] = _bases[1] * 10_000; - initialDeposits[2] = _bases[2] * 10_000; + initialDeposits[0] = 10_000 * 10 ** IERC20Metadata(address(tokens[0])).decimals(); + initialDeposits[1] = 10_000 * 10 ** IERC20Metadata(address(tokens[1])).decimals(); + initialDeposits[2] = 10_000 * 10 ** IERC20Metadata(address(tokens[2])).decimals(); // approve factory to move initial deposits for (uint i = 0; i < tokens.length; i++) { IERC20(tokens[i]).approve(address(planner), initialDeposits[i]); @@ -106,7 +111,7 @@ contract DeployMock is Script { planner.newPool( 'Stablecoin Pool', 'STAP', - tokens, + IERC20[](tokens), _bases, ABDKMath64x64.divu(1, 10), ABDKMath64x64.divu(1,10000), @@ -137,8 +142,8 @@ contract DeployMock is Script { mintAll(msg.sender, 10_000); // prepare initial deposits (10_000 units of each token, scaled by _bases) initialDeposits = new uint256[](2); - initialDeposits[0] = _bases[0] * 10_000; - initialDeposits[1] = _bases[1] * 10_000; + initialDeposits[0] = 10_000 * 10 ** IERC20Metadata(address(tokens[0])).decimals(); + initialDeposits[1] = 10_000 * 10 ** IERC20Metadata(address(tokens[1])).decimals(); // approve factory to move initial deposits for (uint i = 0; i < tokens.length; i++) { IERC20(tokens[i]).approve(address(planner), initialDeposits[i]); @@ -148,7 +153,7 @@ contract DeployMock is Script { planner.newPool( 'Stable Pair', 'SPAIR', - tokens, + IERC20[](tokens), _bases, ABDKMath64x64.divu(8,10), // kappa = 0.8 _feePpm, diff --git a/src/IPartyPlanner.sol b/src/IPartyPlanner.sol index 19d2365..22d9dcf 100644 --- a/src/IPartyPlanner.sol +++ b/src/IPartyPlanner.sol @@ -1,10 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.30; +import {IERC20} from "../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; + import "./IPartyPool.sol"; import "./PartyPoolMintImpl.sol"; import "./PartyPoolSwapImpl.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title IPartyPlanner /// @notice Interface for factory contract for creating and tracking PartyPool instances diff --git a/src/IPartyPool.sol b/src/IPartyPool.sol index 4303cc9..a8bc3f1 100644 --- a/src/IPartyPool.sol +++ b/src/IPartyPool.sol @@ -26,6 +26,8 @@ interface IPartyPool is IERC20Metadata, IOwnable { // Events + event Killed(); + event Mint(address payer, address indexed receiver, uint256[] amounts, uint256 lpMinted); event Burn(address payer, address indexed receiver, uint256[] amounts, uint256 lpBurned); diff --git a/src/PartyPool.sol b/src/PartyPool.sol index 072101f..81cf726 100644 --- a/src/PartyPool.sol +++ b/src/PartyPool.sol @@ -162,6 +162,7 @@ contract PartyPool is PartyPoolBase, OwnableExternal, ERC20External, IPartyPool /// mint functionality, leaving only burns (withdrawals) working. function kill() external onlyOwner { _killed = true; + emit Killed(); } /* ----------------------