Skip to content

Commit

Permalink
Merge pull request #42 from neodaoist/neo/hyp-93-enhance-deploy-script
Browse files Browse the repository at this point in the history
🚀 Enhance deploy script
  • Loading branch information
neodaoist authored Dec 3, 2023
2 parents 6f6fe29 + a5534e0 commit d2b2d19
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 22 deletions.
11 changes: 6 additions & 5 deletions .env.template
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
# Authentication (DO NOT COMMIT)
PRIVATE_KEY=XYZ
DEPLOYER_ADDRESS=XYZ

# Node Provider
API_KEY_INFURA="XYZ"

# Etherscan
API_KEY_ETHERSCAN="XYZ"
API_KEY_ARBISCAN="XYZ"
API_KEY_OPTIMISTIC_ETHERSCAN="XYZ"
API_KEY_BASESCAN="XYZ"
API_KEY_POLYGONSCAN="XYZ"
ETHERSCAN_API_KEY="XYZ"
ARBISCAN_API_KEY="XYZ"
OPTISCAN_API_KEY="XYZ"
BASESCAN_API_KEY="XYZ"
POLYGONSCAN_API_KEY="XYZ"

# Deploy Parameters
SALT="XYZ"
24 changes: 12 additions & 12 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@ out = "docs"
repository = "https://github.com/neodaoist/clarity"

[etherscan]
# ethereum = { key = "${API_KEY_ETHERSCAN}" }
# sepolia = { key = "${API_KEY_ETHERSCAN}" }
# ethereum = { key = "${ETHERSCAN_API_KEY}" }
# sepolia = { key = "${ETHERSCAN_API_KEY}" }
# arbitrum = { key = "${API_KEY_ARBISCAN}" }
# arbitrum_goerli = { key = "${API_KEY_ARBISCAN}" }
# optimism = { key = "${API_KEY_OPTIMISTIC_ETHERSCAN}" }
# optimism_goerli = { key = "${API_KEY_OPTIMISTIC_ETHERSCAN}" }
# base = { key = "${API_KEY_BASESCAN}" }
# base_goerli = { key = "${API_KEY_BASESCAN}" }
# polygon = { key = "${API_KEY_POLYGONSCAN}" }
# polygon_mumbai = { key = "${API_KEY_POLYGONSCAN}" }
# optimism = { key = "${OPTISCAN_API_KEY}" }
# optimism_goerli = { key = "${OPTISCAN_API_KEY}" }
# base = { key = "${BASESCAN_API_KEY}" }
# base_goerli = { key = "${BASESCAN_API_KEY}" }
# polygon = { key = "${POLYGONSCAN_API_KEY}" }
# polygon_mumbai = { key = "${POLYGONSCAN_API_KEY}" }

[rpc_endpoints]
localhost = "http://localhost:8545"
Expand All @@ -63,7 +63,7 @@ arbitrum = "https://arbitrum-mainnet.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
arbitrum_goerli = "https://arbitrum-goerli.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
optimism = "https://optimism-mainnet.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
optimism_goerli = "https://optimism-goerli.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
base = "https://base-mainnet.g.alchemy.com/v2/{API_KEY_ALCHEMY}"
base_goerli = "https://base-goerli.g.alchemy.com/v2/{API_KEY_ALCHEMY}"
polygon = "https://polygon-mainnet.g.alchemy.com/v2/{API_KEY_ALCHEMY}"
polygon_mumbai = "https://polygon-mumbai.g.alchemy.com/v2/{API_KEY_ALCHEMY}"
base = "https://base-mainnet.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
base_goerli = "https://base-goerli.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
polygon = "https://polygon-mainnet.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
polygon_mumbai = "https://polygon-mumbai.g.alchemy.com/v2/${API_KEY_ALCHEMY}"
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import {Script, console2} from "forge-std/Script.sol";
// Contracts
import {ClarityMarkets} from "../src/ClarityMarkets.sol";

// forge script ./script/ClarityMarketsDeploy.s.sol --broadcast
// forge script ./script/BasicDeploy.s.sol --broadcast
// forge verify-contract ADDRESS ./src/ClarityMarkets.sol:ClarityMarkets --chain 84531 --watch

contract ClarityMarketsScript is Script {
contract BasicDeployScript is Script {
function run() public {
bytes32 nacl = keccak256(abi.encodePacked(vm.envString("SALT")));
uint256 pk = vm.envUint("PRIVATE_KEY");
Expand Down
114 changes: 114 additions & 0 deletions script/DeployWithMocks.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

// External Script Helpers
import {Script, console2} from "forge-std/Script.sol";

// External Test Interfaces
import {IERC20} from "forge-std/interfaces/IERC20.sol";

// Test Contracts
import {MockERC20} from "../test/util/MockERC20.sol";

// Contracts
import {ClarityMarkets} from "../src/ClarityMarkets.sol";

// forge script ./script/DeployWithMocks.s.sol --broadcast --slow
// forge verify-contract WETH_ADDRESS ./test/util/MockERC20.sol:MockERC20 --constructor-args $(cast abi-encode "constructor(string,string,uint256)" "WETH Like" "WETH" 18) --chain 84531 --watch
// forge verify-contract WBTC_ADDRESS ./test/util/MockERC20.sol:MockERC20 --constructor-args $(cast abi-encode "constructor(string,string,uint256)" "WBTC Like" "WBTC" 8) --chain 84531 --watch
// forge verify-contract FRAX_ADDRESS ./test/util/MockERC20.sol:MockERC20 --constructor-args $(cast abi-encode "constructor(string,string,uint256)" "FRAX Like" "FRAX" 18) --chain 84531 --watch
// forge verify-contract USDC_ADDRESS ./test/util/MockERC20.sol:MockERC20 --constructor-args $(cast abi-encode "constructor(string,string,uint256)" "USDC Like" "USDC" 6) --chain 84531 --watch
// forge verify-contract DCP_ADDRESS ./src/ClarityMarkets.sol:ClarityMarkets --chain 84531 --watch

/// @dev This script deploys ClarityMarkets and 4 mock assets, then writes some
/// ETH and BTC options for testing (1 expiry * 5 strikes * call and put).
contract DeployWithMocksScript is Script {
/////////

// 👩‍💻 configure expiry and strikes
uint32 private constant nextFriday = 1_702_040_400;
uint256 private constant ethAtmStrike = 2200;
uint256 private constant ethOptionChainIncrement = 100;
uint256 private constant btcAtmStrike = 40_000;
uint256 private constant btcOptionChainIncrement = 1000;

function run() public {
// 🔧 load env variables
string memory rpc = vm.rpcUrl("base_goerli");
uint256 pk = vm.envUint("PRIVATE_KEY");
address me = vm.envAddress("DEPLOYER_ADDRESS");
bytes32 nacl = keccak256(abi.encodePacked(vm.envString("SALT")));

vm.createSelectFork(rpc);
vm.startBroadcast(pk);

// 🤫 deploy mock assets
MockERC20 WETHLIKE = new MockERC20{salt: nacl}("WETH Like", "WETH", 18);
MockERC20 WBTCLIKE = new MockERC20{salt: nacl}("WBTC Like", "WBTC", 8);
MockERC20 FRAXLIKE = new MockERC20{salt: nacl}("FRAX Like", "FRAX", 18);
MockERC20 USDCLIKE = new MockERC20{salt: nacl}("USDC Like", "USDC", 6);

// 💰 mint myself a million
WETHLIKE.mint(me, 1e6 * 1e18);
WBTCLIKE.mint(me, 1e6 * 1e8);
FRAXLIKE.mint(me, 1e6 * 1e18);
USDCLIKE.mint(me, 1e6 * 1e6);

// 🏯 deploy the DCP
ClarityMarkets clarity = new ClarityMarkets{salt: nacl}();

// ✍️ write some options
uint256[] memory ethStrikes = new uint256[](5);
ethStrikes[0] = ethAtmStrike - (ethOptionChainIncrement * 2);
ethStrikes[1] = ethAtmStrike - ethOptionChainIncrement;
ethStrikes[2] = ethAtmStrike;
ethStrikes[3] = ethAtmStrike + ethOptionChainIncrement;
ethStrikes[4] = ethAtmStrike + (ethOptionChainIncrement * 2);
uint256[] memory btcStrikes = new uint256[](5);
btcStrikes[0] = btcAtmStrike - (btcOptionChainIncrement * 2);
btcStrikes[1] = btcAtmStrike - btcOptionChainIncrement;
btcStrikes[2] = btcAtmStrike;
btcStrikes[3] = btcAtmStrike + btcOptionChainIncrement;
btcStrikes[4] = btcAtmStrike + (btcOptionChainIncrement * 2);
WETHLIKE.approve(address(clarity), type(uint256).max);
WBTCLIKE.approve(address(clarity), type(uint256).max);
FRAXLIKE.approve(address(clarity), type(uint256).max);
USDCLIKE.approve(address(clarity), type(uint256).max);
for (uint256 i = 0; i < ethStrikes.length; i++) {
clarity.writeNewCall({
baseAsset: address(WETHLIKE),
quoteAsset: address(FRAXLIKE),
expiry: nextFriday,
strike: ethStrikes[i] * 1e18, // FRAX decimals
allowEarlyExercise: true,
optionAmount: 1e6 // Clarity decimals
});
clarity.writeNewPut({
baseAsset: address(WETHLIKE),
quoteAsset: address(FRAXLIKE),
expiry: nextFriday,
strike: ethStrikes[i] * 1e18,
allowEarlyExercise: true,
optionAmount: 1e6
});
clarity.writeNewCall({
baseAsset: address(WBTCLIKE),
quoteAsset: address(USDCLIKE),
expiry: nextFriday,
strike: btcStrikes[i] * 1e6, // USDC decimals
allowEarlyExercise: true,
optionAmount: 1e6
});
clarity.writeNewPut({
baseAsset: address(WBTCLIKE),
quoteAsset: address(USDCLIKE),
expiry: nextFriday,
strike: btcStrikes[i] * 1e6,
allowEarlyExercise: true,
optionAmount: 1e6
});
}

vm.stopBroadcast();
}
}
3 changes: 0 additions & 3 deletions src/ClarityMarkets.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

// TEMP
import {console2} from "forge-std/console2.sol";

// Interfaces
import {IClearingPool} from "./interface/IClearingPool.sol";
import {IOptionMarkets} from "./interface/IOptionMarkets.sol";
Expand Down

0 comments on commit d2b2d19

Please sign in to comment.