Files
lmsr-amm/script/DeployMock.sol
2025-09-15 15:15:12 -04:00

68 lines
2.1 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.30;
import "forge-std/Script.sol";
import "forge-std/console2.sol";
import "@abdk/ABDKMath64x64.sol";
import "../test/MockERC20.sol";
import "../src/IPartyPool.sol";
import "../src/PartyPool.sol";
contract DeployMock is Script {
address constant devAccount0 = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266;
// private key 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356
address constant devAccount7 = 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955;
address constant deployer = devAccount0;
function run() public {
vm.startBroadcast();
// create mock tokens
usxd = new MockERC20('Joke Currency', 'USXD', 6);
fusd = new MockERC20('Fake USD', 'FUSD', 6);
dive = new MockERC20('DAI Virtually Equal', 'DIVE', 18);
string memory name = 'Mock Pool';
string memory symbol = 'MP';
address[] memory tokens = new address[](3);
tokens[0] = address(usxd);
tokens[1] = address(fusd);
tokens[2] = address(dive);
uint256[] memory _bases = new uint256[](3);
_bases[0] = 10**6;
_bases[1] = 10**6;
_bases[2] = 10**18;
int128 _tradeFrac = ABDKMath64x64.divu(1, 10);
int128 _targetSlippage = ABDKMath64x64.divu(1,10000);
uint256 _feePpm = 100;
IPartyPool pool = new PartyPool(name, symbol, tokens, _bases, _tradeFrac, _targetSlippage, _feePpm, _feePpm);
// initial mint
mintAll(address(pool), 10_000);
pool.mint(deployer, deployer, 0, 0);
// give tokens to dev7
mintAll(devAccount7, 1_000_000);
vm.stopBroadcast();
console2.log('\nPartyPool', address(pool));
console2.log(' USXD', address(usxd));
console2.log(' FUSD', address(fusd));
console2.log(' DIVE', address(dive));
}
MockERC20 private usxd;
MockERC20 private fusd;
MockERC20 private dive;
function mintAll(address who, uint256 amount) internal {
usxd.mint(who, amount * 1e6);
fusd.mint(who, amount * 1e6);
dive.mint(who, amount * 1e18);
}
}