Repository navigation
Redeem & Bridge OETHb fees to FeeSplitter - #3035
Open
shahthepro wants to merge 3 commits into
Open
shahthepro wants to merge 3 commits into
shahthepro wants to merge 3 commits into
Conversation
naddison36
reviewed
Oct 20, 2026
| // slither-disable-next-line reentrancy-events | ||
| function requestWithdrawal(uint256 oethbAmount) external onlyOperator { | ||
| require(!hasPendingRequest, "Request pending"); | ||
| require(oethbAmount > 0, "Invalid amount"); |
Collaborator
There was a problem hiding this comment.
Could we enforce a minimum withdrawal of 1 ether (1 OETHb) so each batch is well above the CCIP fee? This would prevent a compromised operator from repeatedly bridging dust and draining the Safe’s ETH through fees.
| vault.withdrawalRequests(requestId), | ||
| vault.withdrawalClaimDelay(), | ||
| ]); | ||
| const claimableAt = Number(request.timestamp) + delay.toNumber(); |
Collaborator
There was a problem hiding this comment.
Could we check request.claimed here and throw an error instructing the fee Safe to call clearPendingRequest()? Otherwise, a request claimed directly on the vault is reported as “waiting” indefinitely, and automation silently stops opening new requests.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Base OETHb fees still mint to the 1-of-3 fee Safe
0xBB077E71…(the Base vault'strusteeAddress, 20% fee). Today we swap and bridge them manually. This automates it: the fees are redeemed 1:1 for WETH and bridged to the mainnet FeeSplitter, where they follow the OUSD/OETH fees to xOGN.BaseFeeBridgeModuleis a Safe module on the fee Safe, operated by Talos:requestWithdrawal(amount)opens a vault async withdrawal (1:1 burn).claimAndBridge()claims it and sends only the WETH the claim paid out over CCIP to the FeeSplitter (0xbbE5…0464).clearPendingRequest()(Safe only) is the recovery path if an owner claims the request directly on the vault.vault.asset().withdrawalClaimDelay(600s) plus queue liquidity.bridgeBaseFeesaction is checked daily and sends a tx only when there's work:Queue pending liquidity).--min-inted only whenbridgeFee()≤--max-fee-bps` (default 100) of the amount.The CCIP fee is flat at about 0.019 ETH per message, so that threshold is about 2 OETHb today.--dryrunis supported. The sched (45 10 * * *).setXOGNRewardRatechange. The OGN CoW harvester already sells WETH. The OGN it buys arrives through CoW settlement, so the ratesetter counts it as buyback income, not as a donation.
base/007needs no governance. No Vault or OToken change. The fee Safe already holds the fees, so a module on it was enough. Re-pointing a role or adding aperipheral contract wasn't needed.
Required ops, in this order
FeeSplitter.addAsset(WETH, 0.125e18). Without it, bridged WETH is not distributed and only a Governorrescuegets it out.enableModule(<module>), and keep some ETH there for CCbridge_base_feesin Talos.Talos impact
007deploys only the newBaseFeeBridgeModule, recorded asBaseFeeBrid using it is the newbridgeBaseFees, which reads the address from thedescriptormake deploy-basewrites and uses an inline ABI. No pinned addresses orabi/*.jsonchange, and no existing action is affected.talos-actions-inventory.mdis regenerated, which also adds theousdSusdeV4Rebalance` entry missing sincTesting
receiver, fee payment, recovery after a direct claim, and access control. ithdrawalVault` that mirrors VaultCore's queue structs and liquidity logic.
Queue pending liquidity.addAsset(WETH)thendistribute()moved the WETH to thepnpm test:tasks, typecheck and lint pass.