Exit with compound claim
1
Goal
Redeem s0xBTC, claim rewards, swap rewards to underlying, exit as WBTC.
2
Steps (conceptual)
Redeem s0xBTC → 0xBTC
Claim ORBT rewards
Swap ORBT → 0xBTC (external DEX)
Swap 0xBTC → WBTC (send to user)
Example (conceptual):
function exitWithRewards(uint256 shares) external {
address[] memory targets = new address[](4);
bytes[] memory datas = new bytes[](4);
// Step 1: Redeem s0xBTC → 0xBTC
targets[0] = address(sOxBTC);
datas[0] = abi.encodeWithSelector(
IERC4626.redeem.selector,
shares,
address(upm),
msg.sender
);
// Step 2: Claim ORBT rewards
targets[1] = address(sOxBTC);
datas[1] = abi.encodeWithSelector(
sOxAsset.claimRewards.selector,
address(upm)
);
// Step 3: Swap ORBT → 0xBTC (dex)
targets[2] = address(dex);
datas[2] = abi.encodeWithSelector(
DEX.swap.selector,
address(ORBT),
address(zeroXBTC),
orbtBalance,
0
);
// Step 4: Swap 0xBTC → WBTC
uint256 totalZeroXBTC = zeroXBTC.balanceOf(address(upm));
targets[3] = address(orbitUCE);
datas[3] = abi.encodeWithSelector(
OrbitUCE.swapExactIn.selector,
address(zeroXBTC),
address(WBTC),
totalZeroXBTC,
msg.sender,
0
);
upm.doBatchCalls(targets, datas);
}Last updated