Skip to content

Commit 6e8c657

Browse files
authored
Yield forwarding for a Merkl Pool booster (#2678)
* add runlog to configure yield forwarding for a PB that is yet to be created * correct the salt
1 parent 444264b commit 6e8c657

4 files changed

Lines changed: 78 additions & 1 deletion

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity ^0.8.0;
3+
4+
// Setup
5+
import { SetupBase } from "./utils/Setup.sol";
6+
import { SetupSonic } from "./utils/Setup.sol";
7+
import { SetupMainnet } from "./utils/Setup.sol";
8+
9+
import { CrossChain } from "./utils/Addresses.sol";
10+
11+
// Foundry
12+
import { console } from "forge-std/console.sol";
13+
14+
contract Runlogs_2025_10_Mainnet is SetupMainnet {
15+
function run() public {
16+
_2025_10_01();
17+
//_2025_10_02();
18+
}
19+
20+
// ------------------------------------------------------------------
21+
// Oct 3, 2025 - Yield Forward to Computed Merkl Pool Booster
22+
// ------------------------------------------------------------------
23+
function _2025_10_01() internal {
24+
bytes memory campaignData =
25+
hex"b8fef900b383db2dbbf4458c7f46acf5b140f26d603a6d1829963f241b82510e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
26+
27+
vm.startBroadcast(strategist);
28+
29+
console.log("-----");
30+
console.log("strategist address", address(strategist));
31+
console.log("poolBoosterFactoryMerkl address", address(poolBoosterFactoryMerkl));
32+
33+
address poolBoosterAddress = poolBoosterFactoryMerkl.computePoolBoosterAddress({
34+
_campaignType: 45,
35+
_ammPoolAddress: CrossChain.MORPHO_BLUE,
36+
_campaignDuration: 7 days,
37+
campaignData: campaignData,
38+
_salt: uint256(keccak256(abi.encodePacked("Merkl Morpho PB OETH/USDC v1")))
39+
});
40+
41+
console.log("computed address", poolBoosterAddress);
42+
43+
// Run yield forward
44+
oeth.delegateYield(CrossChain.MORPHO_BLUE, poolBoosterAddress);
45+
vm.stopBroadcast();
46+
}
47+
48+
// ------------------------------------------------------------------
49+
// Oct 3+ TODO, 2025 - Create Merkl Pool Booster once Central Registry governance passes
50+
// ------------------------------------------------------------------
51+
function _2025_10_02() internal {
52+
bytes memory campaignData =
53+
hex"b8fef900b383db2dbbf4458c7f46acf5b140f26d603a6d1829963f241b82510e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
54+
55+
vm.startBroadcast(strategist);
56+
// Create the pool booster
57+
poolBoosterFactoryMerkl.createPoolBoosterMerkl({
58+
_campaignType: 45, // Incentivise Borrow rate of OETH/USDC
59+
_ammPoolAddress: CrossChain.MORPHO_BLUE,
60+
_campaignDuration: 7 days,
61+
campaignData: campaignData,
62+
_salt: uint256(keccak256(abi.encodePacked("Merkl Morpho PB OETH/USDC v1")))
63+
});
64+
65+
vm.stopBroadcast();
66+
}
67+
}

contracts/scripts/runlogs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ To convert a `broadcast-ready` into a Safe-compatible JSON file, use the forge s
2626

2727
In the `contracts` folder run:
2828
```bash
29-
forge script BroadcastConvertor contracts/broadcast/2025_09.sol/146/dry-run/
29+
forge script BroadcastConvertor --sig "run(string)" contracts/broadcast/2025_09.sol/146/dry-run/
3030
```
3131
> Note adjust the input accordingly:
3232
> first the path to the run file, but stop at the dry-run folder.

contracts/scripts/runlogs/utils/Addresses.sol

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ library Mainnet {
2727
// OETH Strategies
2828
address public constant OETH_WETH_CURVE_AMO = 0xba0e352AB5c13861C26e4E773e7a833C3A223FE6;
2929

30+
// Pool Booster
31+
address public constant POOL_BOOSTER_FACTORY_MERKL = 0x0FC66355B681503eFeE7741BD848080d809FD6db;
32+
address public constant POOL_BOOSTER_CENTRAL_REGISTRY = 0xAA8af8Db4B6a827B51786334d26349eb03569731;
33+
3034
// Other token
3135
address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
3236
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

contracts/scripts/runlogs/utils/Setup.sol

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ abstract contract SetupMainnet is Test, Script {
6363
OETHVaultValueChecker public oethVaultValueChecker =
6464
OETHVaultValueChecker(Mainnet.OETH_VAULT_VALUE_CHECKER);
6565

66+
// Pool Booster
67+
PoolBoosterFactoryMerkl public poolBoosterFactoryMerkl =
68+
PoolBoosterFactoryMerkl(Mainnet.POOL_BOOSTER_FACTORY_MERKL);
69+
PoolBoostCentralRegistry public poolBoosterCentralRegistry =
70+
PoolBoostCentralRegistry(Mainnet.POOL_BOOSTER_CENTRAL_REGISTRY);
71+
6672
// Interfaces
6773
IWETH9 public weth = IWETH9(Mainnet.WETH);
6874
ICurveStableSwapNG public oethWethCurvePool = ICurveStableSwapNG(Mainnet.OETH_WETH_CURVE_POOL);

0 commit comments

Comments
 (0)