Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions contracts/scripts/runlogs/2025_10.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

// Setup
import { SetupBase } from "./utils/Setup.sol";
import { SetupSonic } from "./utils/Setup.sol";
import { SetupMainnet } from "./utils/Setup.sol";

import { CrossChain } from "./utils/Addresses.sol";

// Foundry
import { console } from "forge-std/console.sol";

contract Runlogs_2025_10_Mainnet is SetupMainnet {
function run() public {
_2025_10_01();
//_2025_10_02();
}

// ------------------------------------------------------------------
// Oct 3, 2025 - Yield Forward to Computed Merkl Pool Booster
// ------------------------------------------------------------------
function _2025_10_01() internal {
bytes memory campaignData =
hex"b8fef900b383db2dbbf4458c7f46acf5b140f26d603a6d1829963f241b82510e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

vm.startBroadcast(strategist);

console.log("-----");
console.log("strategist address", address(strategist));
console.log("poolBoosterFactoryMerkl address", address(poolBoosterFactoryMerkl));

address poolBoosterAddress = poolBoosterFactoryMerkl.computePoolBoosterAddress({
_campaignType: 45,
_ammPoolAddress: CrossChain.MORPHO_BLUE,
_campaignDuration: 7 days,
campaignData: campaignData,
_salt: uint256(keccak256(abi.encodePacked("Merkl Morpho PB OETH/USDC v1")))
});

console.log("computed address", poolBoosterAddress);

// Run yield forward
oeth.delegateYield(CrossChain.MORPHO_BLUE, poolBoosterAddress);
vm.stopBroadcast();
}

// ------------------------------------------------------------------
// Oct 3+ TODO, 2025 - Create Merkl Pool Booster once Central Registry governance passes
// ------------------------------------------------------------------
function _2025_10_02() internal {
bytes memory campaignData =
hex"b8fef900b383db2dbbf4458c7f46acf5b140f26d603a6d1829963f241b82510e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

vm.startBroadcast(strategist);
// Create the pool booster
poolBoosterFactoryMerkl.createPoolBoosterMerkl({
_campaignType: 45, // Incentivise Borrow rate of OETH/USDC
_ammPoolAddress: CrossChain.MORPHO_BLUE,
_campaignDuration: 7 days,
campaignData: campaignData,
_salt: uint256(keccak256(abi.encodePacked("Merkl Morpho PB OETH/USDC v1")))
});

vm.stopBroadcast();
}
}
2 changes: 1 addition & 1 deletion contracts/scripts/runlogs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ To convert a `broadcast-ready` into a Safe-compatible JSON file, use the forge s

In the `contracts` folder run:
```bash
forge script BroadcastConvertor contracts/broadcast/2025_09.sol/146/dry-run/
forge script BroadcastConvertor --sig "run(string)" contracts/broadcast/2025_09.sol/146/dry-run/
```
> Note adjust the input accordingly:
> first the path to the run file, but stop at the dry-run folder.
Expand Down
4 changes: 4 additions & 0 deletions contracts/scripts/runlogs/utils/Addresses.sol
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ library Mainnet {
// OETH Strategies
address public constant OETH_WETH_CURVE_AMO = 0xba0e352AB5c13861C26e4E773e7a833C3A223FE6;

// Pool Booster
address public constant POOL_BOOSTER_FACTORY_MERKL = 0x0FC66355B681503eFeE7741BD848080d809FD6db;
address public constant POOL_BOOSTER_CENTRAL_REGISTRY = 0xAA8af8Db4B6a827B51786334d26349eb03569731;

// Other token
address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
Expand Down
6 changes: 6 additions & 0 deletions contracts/scripts/runlogs/utils/Setup.sol
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ abstract contract SetupMainnet is Test, Script {
OETHVaultValueChecker public oethVaultValueChecker =
OETHVaultValueChecker(Mainnet.OETH_VAULT_VALUE_CHECKER);

// Pool Booster
PoolBoosterFactoryMerkl public poolBoosterFactoryMerkl =
PoolBoosterFactoryMerkl(Mainnet.POOL_BOOSTER_FACTORY_MERKL);
PoolBoostCentralRegistry public poolBoosterCentralRegistry =
PoolBoostCentralRegistry(Mainnet.POOL_BOOSTER_CENTRAL_REGISTRY);

// Interfaces
IWETH9 public weth = IWETH9(Mainnet.WETH);
ICurveStableSwapNG public oethWethCurvePool = ICurveStableSwapNG(Mainnet.OETH_WETH_CURVE_POOL);
Expand Down
Loading