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.
Learning Objectives
Section titled âLearning Objectivesâ- 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
Prerequisites
Section titled âPrerequisitesâ- 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)
Contract Addresses
Section titled âContract AddressesâBefore starting, review these contract addresses. Always verify addresses from multiple trusted sources before interacting:
-
OLD_MKR Token: 0xc66ea802717bfb9833400264dd12c2bceaa34a6d
-
MKR Token: 0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2
-
Redeemer (OLD_MKR to MKR): 0x642ae78fafbb8032da552d619ad43f1d81e4dd7c
-
SKY Token: 0x56072C95FAA701256059aa122697B133aDEd9279
-
Converter (MKR to SKY): 0xA1Ea1bA18E88C381C724a75F23a130420C403f9a
Important Information
Section titled âImportant InformationâWhat is an ABI?
Section titled âWhat is an ABI?â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.
Technical Context
Section titled âTechnical Contextâ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.
Security Reminders
Section titled âSecurity Remindersâ- 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
Step 1: Setup Custom ABI on Etherscan
Section titled âStep 1: Setup Custom ABI on EtherscanâBecause the OLD_MKR contract is not verified on Etherscan, you must add its ABI manually so Etherscan can render its functions.
- Sign in to Etherscan and open Contract Custom ABI.
- Select Add.
- 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.)
- Title:
[ { "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" }]
The contract page now shows Read Custom and Write Custom tabs you can use to interact with the OLD_MKR token.
Step 2: Check Your OLD_MKR Balance
Section titled âStep 2: Check Your OLD_MKR BalanceâBefore proceeding, determine your exact OLD_MKR balance. Etherscan returns balances in wei (1 OLD_MKR = 10^18 wei).
- Open Read Custom.
- Expand
balanceOf. - Enter your wallet address in
_owner (address). - 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.
Step 3: Approve the Redeemer Contract
Section titled âStep 3: Approve the Redeemer ContractâThis step authorizes the Redeemer contract to transfer your OLD_MKR on your behalfâa standard ERCâ20 allowance flow.
- Open Write Custom.
- Expand
approve. _spender (address):0x642ae78fafbb8032da552d619ad43f1d81e4dd7c(Redeemer)_value (uint256): enter your exact balance (in wei) from Step 2.- 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.
Step 4: Execute the Redemption
Section titled âStep 4: Execute the RedemptionâWith the allowance set, execute the migration.
- Open Write Contract on the Redeemer.
- Expand
redeem. - 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.
Step 5: Verify Your MKR Balance
Section titled âStep 5: Verify Your MKR BalanceâAfter the redemption confirms, verify receipt of MKR:
- Visit the MKR token on Etherscan.
- Search for your wallet address.
- Confirm your MKR balance matches your prior OLD_MKR amount.
Your MKR can now be upgraded to SKY.
Troubleshooting
Section titled âTroubleshootingâCommon Issues and Solutions
Section titled âCommon Issues and SolutionsâTransaction Failures
Section titled âTransaction Failuresâ- â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.
Verification Issues
Section titled âVerification Issuesâ- 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.
Next Steps
Section titled âNext Stepsâ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.
Resources
Section titled âResourcesâ Released into the public domain (CC0Â 1.0 Universal) â trademarks remain with their owners; no warranty. See full license.