Skip to main content
USDh is a standard ERC-20 on Ethereum mainnet. Most apps only need to hold and move it. Approved routes, such as aggregators, can also mint and redeem it for their users. This page describes the contract code live today (in force since 13 August 2026). Addresses are on Contracts.

Holding and moving USDh

  • Use the proxy address 0xbcFC42391e55484129191eDfcC766a2c6F9eb503. Never the implementation address behind it.
  • 6 decimals, like USDC. Read decimals() rather than hard-coding it.
  • Gasless approvals. EIP-2612 permit. The signing domain is name USDh, version 1, chain ID 1.
  • Gasless transfers. EIP-3009 transferWithAuthorization and receiveWithAuthorization, with a random 32-byte nonce and a valid-after and valid-before time window. Signatures from contract wallets such as Safes work through EIP-1271. An unused authorization can be cancelled with cancelAuthorization.

When a transfer can fail

Plan for these, so a failed transfer doesn’t break your app. A freeze never takes a balance. A frozen address keeps its USDh until it is unfrozen.

Minting and redeeming as an approved route

An approved route is a contract Hamilton has approved, after signing up, to mint and redeem for its users. To sign up, see How it works.
  • Approval is per calling address. Minting and redeeming are approved separately. The contract checks the address that calls it, not the one receiving USDh.
  • Mint. Approve the stablecoin to the USDh contract, then call mintWithStable(stable, stableAmount, to). USDh is minted to to, 1:1, in the same transaction. The accepted stablecoins are listed by supportedStables().
  • Redeem. Call redeemForStable(stable, usdhAmount, to). USDh is burned from the caller and the stablecoin is sent to to, 1:1.
  • Redemption limit. Each address has its own limit every 7 days, checked by effectiveRedeemCap(address). By default it is set to half the balance of the address USDh is minted to. If your contract mints to your users rather than to itself, ask Hamilton to set your limit, or redeeming fails with redeem cap not set.
  • No cap on minting with stablecoins. The daily ceiling applies only to minting against bank wires.

Events to watch

Go-live checklist

  1. You use the proxy address from Contracts.
  2. You read decimals() from the contract.
  3. Your app handles a paused system and a frozen address without breaking.
  4. You watch the timelock for scheduled changes to USDh.
  5. For approved routes: Hamilton has confirmed which of your addresses can mint and which can redeem.
  6. For approved routes: you have tested a small mint and a small redemption, and your redemption limit is set.
  7. For approved routes: your sanctions screening matches what your agreement with Hamilton requires.
Questions: legal@hamilton.xyz. Last updated: 9 November 2026