Skip to content

Migrate OLD_MKR Balance to MKR Balance

  • Level: Intermediate
  • Estimated Time: 15 minutes
  • Last Updated: 2025-08-19

In April 2016, MakerDAO deployed the first version of the MKR token (“OLD_MKR”). In December 2017, a new MKR token contract was deployed alongside the launch of Single-Collateral Dai and Maker Governance contracts.

This guide walks holders of the original OLD_MKR tokens through migrating their balance to the current MKR token. The original migration UI at makerdao.com/redeem has been sunset, but the process remains fully available via Etherscan by interacting directly with the relevant contracts.

  • Understand the historical context of the MKR token migration
  • Check your OLD_MKR balance using Etherscan
  • Successfully redeem OLD_MKR tokens for current MKR tokens
  • Verify the completion of your token migration
  • Basic familiarity with calling contract functions on Etherscan
  • A wallet containing OLD_MKR tokens (deployed April 2016)
  • ETH for gas fees on Ethereum mainnet (typically 0.01–0.02 ETH is sufficient)
  • Access to your wallet on Etherscan (e.g., MetaMask, WalletConnect)

Before starting, review these contract addresses. Always verify addresses from multiple trusted sources before interacting:

An Application Binary Interface (ABI) tells tools like Etherscan how to encode and decode function calls for a smart contract. Because the OLD_MKR token contract is not verified on Etherscan (the token predates Etherscan’s contract-verification feature!), you must supply an ABI so Etherscan can render the contract’s functions and enable reads/writes to the OLD_MKR token and the Redeemer contracts.

The OLD_MKR token was built using an early MakerDAO token library. While the original source code is not publicly verified on Etherscan, the Redeemer UI source code on GitHub documents the same contract addresses and can be used for cross-verification.

  • Only interact with contracts on Ethereum mainnet that you have independently verified.
  • Never paste sensitive keys or seed phrases into any website. Etherscan only requires wallet signatures via your wallet provider.
  • Double‑check that allowances and amounts match your intended full balance before submitting transactions.
  • Only approve the official Redeemer as the spender: 0x642ae78fafbb8032da552d619ad43f1d81e4dd7c. Approving any other contract can grant it permission to transfer your OLD_MKR and lead to irreversible loss. Verify the spender address character‑by‑character before signing. If you made a mistake, promptly revoke the approval using Etherscan’s Token Approval Checker: https://etherscan.io/tokenapprovalchecker

Because the OLD_MKR contract is not verified on Etherscan, you must add its ABI manually so Etherscan can render its functions.

  1. Sign in to Etherscan and open Contract Custom ABI.
  2. Select Add.
  3. In the Add a new custom ABI modal, enter:
    • Title: OLD_MKR Token
    • Address: 0xc66ea802717bfb9833400264dd12c2bceaa34a6d
    • Custom ABI: paste the standard ERC‑20 ABI below (defines transfer, approve, balanceOf, etc.)
[
{
"constant": false,
"inputs": [
{ "name": "_spender", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "approve",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "_from", "type": "address" },
{ "name": "_to", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "transferFrom",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "name": "_owner", "type": "address" }],
"name": "balanceOf",
"outputs": [{ "name": "balance", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "_to", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "transfer",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "name": "_owner", "type": "address" },
{ "name": "_spender", "type": "address" }
],
"name": "allowance",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]
Etherscan Add Custom ABI form for OLD_MKR

The contract page now shows Read Custom and Write Custom tabs you can use to interact with the OLD_MKR token.

Before proceeding, determine your exact OLD_MKR balance. Etherscan returns balances in wei (1 OLD_MKR = 10^18 wei).

  1. Open Read Custom.
  2. Expand balanceOf.
  3. Enter your wallet address in _owner (address).
  4. Select Query.

Record the wei value returned. Example: 1563619176000000000000 (equals 1,563.619176 OLD_MKR).

Note: You must use the full wei amount in the next step.

Etherscan Read Custom showing balanceOf for OLD_MKR

This step authorizes the Redeemer contract to transfer your OLD_MKR on your behalf—a standard ERC‑20 allowance flow.

  1. Open Write Custom.
  2. Expand approve.
  3. _spender (address): 0x642ae78fafbb8032da552d619ad43f1d81e4dd7c (Redeemer)
  4. _value (uint256): enter your exact balance (in wei) from Step 2.
  5. Connect your wallet if needed, then select Write to submit.

Important: The Redeemer requires an allowance equal to your entire OLD_MKR balance. Partial allowances will cause redeem() to fail.

Wait for the approval transaction to confirm before continuing.

With the allowance set, execute the migration.

  1. Open Write Contract on the Redeemer.
  2. Expand redeem.
  3. Connect your wallet if needed and select Write.

What happens: the Redeemer transfers your OLD_MKR from your wallet and sends you an equivalent amount of current MKR in a single transaction at a 1:1 rate.

After the redemption confirms, verify receipt of MKR:

  1. Visit the MKR token on Etherscan.
  2. Search for your wallet address.
  3. Confirm your MKR balance matches your prior OLD_MKR amount.

Your MKR can now be upgraded to SKY.

  • “Insufficient allowance”: redeem() requires an allowance ≥ your full OLD_MKR balance. Repeat Step 3 with the full wei amount.
  • “Out of gas”: Increase your gas limit. Redemption typically uses 130,351 gas.
  • “Contract execution reverted”: Common causes include no OLD_MKR balance, an already redeemed balance, or an unconfirmed approval.
  • Can’t see OLD_MKR balance: Ensure the custom ABI was added correctly and that you’re querying the correct address.
  • MKR not visible in wallet: Add MKR by contract address 0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2.

Visit the Upgrade MKR to SKY portal for details on upgrading MKR to SKY. Additional background is available in the SKY Token and Governance Upgrade guide.

Released into the public domain (CC0 1.0 Universal) – trademarks remain with their owners; no warranty. See full license.