Skip to main content

MigrationProposalHelper

Git Source

Inherits: Owned

forge-lint: disable-start(mixed-case-function,mixed-case-variable)

Single-use contract to execute OHM v1 migration to OHM v2 and burn

State Variables

TREASURY

address public constant TREASURY = 0x31F8Cc382c9898b273eff4e0b7626a6987C846E8

MIGRATOR

address public constant MIGRATOR = 0x184f3FAd8618a6F458C16bae63F70C426fE784B3

STAKING

address public constant STAKING = 0xB63cac384247597756545b500253ff8E607a8020

GOHM

address public constant GOHM = 0x0ab87046fBb341D058F17CBC4c1133F25a20a52f

OHMV1

address public constant OHMV1 = 0x383518188C0C6d7730D91b2c03a03C837814a899

OHMV2

address public constant OHMV2 = 0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5

BURNER

address public immutable BURNER

TEMPOHM

address public immutable TEMPOHM

ADMIN

Admin address that can update the OHM v1 migration limit

address public immutable ADMIN

OHMv1ToMigrate

Maximum amount of OHM v1 to migrate (1e9 decimals)

uint256 public OHMv1ToMigrate

MIGRATION_CATEGORY

bytes32 public constant MIGRATION_CATEGORY = "migration"

isActivated

True if the activation has been performed

bool public isActivated = false

Functions

constructor

constructor(address owner_, address admin_, address burner_, address tempOHM_, uint256 OHMv1ToMigrate_)
Owned(owner_);

_onlyOwnerOrAdmin

function _onlyOwnerOrAdmin() internal view;

onlyOwnerOrAdmin

Modifier to restrict access to owner or admin

modifier onlyOwnerOrAdmin() ;

setOHMv1ToMigrate

Set the maximum OHM v1 to migrate

Only callable by owner or admin. Updates the migration limit.

function setOHMv1ToMigrate(uint256 maxOHMv1_) external onlyOwnerOrAdmin;

Parameters

NameTypeDescription
maxOHMv1_uint256The new maximum OHM v1 amount (1e9 decimals)

rescue

Rescue accidentally sent tokens

Only callable by owner or admin. Sweeps entire token balance to caller.

function rescue(IERC20 token_) external onlyOwnerOrAdmin;

Parameters

NameTypeDescription
token_IERC20The ERC20 token to rescue

getTempOHMToDeposit

Calculate the amount of tempOHM to deposit

This is based on the OHMv1ToMigrate amount, converted to 1e18 decimals

function getTempOHMToDeposit() public view returns (uint256);

activate

Executes the migration process

This function assumes:

  • The "burner_admin" role has been granted to this contract
  • The caller (owner) has approved tempOHM to this contract
  • The caller (owner) has tempOHM balance Any tempOHM in excess of OHMv1ToMigrate * 1e9 will be burned. This is intentional: tempOHM has no utility after migration completes. This function reverts if:
  • The caller is not the owner
  • The function has already been run
function activate() external onlyOwner;

_depositTempOHMToTreasury

Transfer all tempOHM from owner and deposit the calculated amount to treasury

Transfers ALL tempOHM from owner but deposits only getTempOHMToDeposit(). Excess is burned by _burnExcess() (tempOHM has no post-migration utility).

function _depositTempOHMToTreasury() internal returns (uint256 ohmV1Minted);

Returns

NameTypeDescription
ohmV1Minteduint256The amount of OHM v1 minted from the deposit

_migrateOHMv1ToGOHM

Migrate OHMv1 to gOHM via migrator

function _migrateOHMv1ToGOHM(uint256 ohmV1Amount) internal;

Parameters

NameTypeDescription
ohmV1Amountuint256The amount of OHM v1 to migrate

_burnExcess

Burn any excess tempOHM and OHM v1 remaining after migration

Intentional cleanup: tempOHM has no utility after gOHM migration. Also burns any OHM v1 left from partial migration failures.

function _burnExcess() internal;

_unstakeAndBurn

Unstake gOHM to OHMv2 and burn

function _unstakeAndBurn() internal;

Events

Activated

event Activated(address caller);

OHMv1ToMigrateUpdated

event OHMv1ToMigrateUpdated(uint256 newMax);

Rescued

event Rescued(address indexed token, address indexed to, uint256 amount);

Errors

AlreadyActivated

error AlreadyActivated();

InvalidParams

error InvalidParams(string reason);

Unauthorized

error Unauthorized();