Rebasing & Smart Contracts

If you are using a multi-sig wallet or another smart contract wishing to participate in the rebasing aspect of OUSD or OETH you must call the rebaseOptIn() function. This only applies to smart contracts as standard EOA wallets are enrolled automatically.

Multi-sig wallets or other smart contracts must call rebaseOptIn() to earn yield.

By default, OUSD and OETH held on smart contracts will not participate in the rebasing nature of the token and will forfeit any yield unless the smart contract explicitly opts in. This increases the composability of these coins within DeFi as many protocols weren't designed with the expectation that balances might change without an account-specific event being emitted. To other DeFi protocols, OUSD and OETH work just like any other normal, well-behaved ERC-20 until you ask it to change. This is a particularly useful attribute for automated market makers (AMMs) like Uniswap, which break when the number of tokens held changes unexpectedly.

Smart contracts must explicitly opt-in to receive yield via the rebasing mechanism. This fixes the issue with the expanding supply on AMMs while still allowing multi-sig wallets and other smart contracts the opportunity to still participate and earn yield.

If you are deploying a contract and intend to call rebaseOptIn()to earn yield, you cannot call it from the contract's constructor. The contract must be deployed before it can be called.

Safe users

Safe users are encouraged to use the Origin dapp which will prompt you to opt-in to receiving yield. If you are using the "Old" Gnosis Wallet or another contract-based wallet, you will need the proxy contract address and the corresponding ABI. Once you add those, you will be able to call the rebaseOptIn() function to opt into receiving yield via rebasing or rebaseOptOut() to turn it off again.

Governance opt-in

OGN governance is able to whitelist specific addresses to receive yield. Based on the on-chain proposal executed on 12/26/23, OGN governance now has the ability to remotely opt-in third-party smart contracts for integration purposes, with a Rebase Opt-In Proposal. More information can be found on the proposal Snapshot and Discord forum discussion.

This allows for integrations with other DeFi protocols that have immutable contracts or are otherwise unable to opt-in to yield themselves.

Yield Forwarding (Coming Soon)

Yield Forwarding gives OGN governance the ability to forward yield during a rebase from a source address to a target address. Yield forwarding represents a one-to-one relationship between the source and target address. This means that a source address is unable to forward yield to more than one address and a target address is unable to receive forwarded yield from more than one source. The typical use case of Yield Forwarding is to forward yield earned from deposited assets in AMMs or other DeFi protocols to smart contracts that unlock new functionality for that earned yield.

Yield Forwarding does not have an impact on any existing or ongoing balances of OUSD or OETH held by a target address. This means that a target address could receive a rebase on existing balances, along with receiving forwarded yield from a source address.

If you'd like to propose an idea for a target contract or discuss a Yield Forwarding proposal, feel free to start a conversation in our Discord. Proposals to enable Yield Forwarding for a source address can be made using theRebase Opt-In Proposal.

Checking rebase status

If you are unsure whether or not a particular address will receive yield, you can use a public getter function on the OUSD or OETH contract to check its status.

rebaseState(address)

This function returns an integer indicating the current opt-in status independent of what type of wallet the address belongs to.

rebaseState
Smart contract
Externally-owned account

0 - NotSet

Does not receive yield

Receives yield

1 - StdNonRebasing

Does not receive yield

Does not receive yield

2 - StdRebasing

Receives yield

Receives yield

3 - YieldDelegationSource

Does not receive yield

Does not receive yield

4 - YieldDelegationTarget

Receives yield

Receives yield

The Yield Forwarding features that will enable the YieldDelegation options for rebaseState are pending contract upgrades and will be available soon.

Last updated