Home / Wiki / S / Smart Contract Upgradeability

Smart Contract Upgradeability

Cryptocurrency and Digital AssetsUpdated 15 Nov 2026

Smart contract upgradeability is a design property that lets the code governing a smart contract be replaced after deployment without changing the address that users and other contracts interact with, and without losing balances or other stored data. On most blockchains, code is fixed once deployed. Upgradeability works around this by separating where the data lives from where the logic lives. Developers use it to fix bugs, add features and respond to new legal requirements.

The feature involves a trade-off. Immutability is one of the main reasons people trust a smart contract: nobody, including its author, can change the rules. An upgradeable contract gives up part of that assurance in exchange for the ability to repair and adapt, and it moves trust to whoever controls the upgrade. The arrangements for that control are the subject of smart contract governance.

01

How upgrades work

The most common approach on Ethereum and compatible chains is the proxy pattern. Users interact with a small proxy contract that holds the data and the balance. The proxy contains almost no logic of its own. Instead it stores the address of a separate implementation contract and forwards each call to it, using a low-level operation called delegatecall that runs the implementation's code against the proxy's storage. To upgrade, an authorised account changes the stored address so that it points to a new implementation. The proxy's address, and everything stored in it, stays the same.

Several standard variants exist:

  • Transparent proxy. The upgrade function sits in the proxy, and calls from the administrator are handled differently from calls by ordinary users, so that the two cannot collide.
  • UUPS proxy. The upgrade function sits in the implementation contract, which makes the proxy cheaper to use but means a faulty implementation can remove the ability to upgrade.
  • Beacon proxy. Many proxies read the implementation address from one shared beacon contract, so that all of them can be upgraded in a single transaction.
  • Diamond pattern. One proxy routes different functions to different implementation contracts, which allows very large systems to be upgraded piece by piece.

Other approaches avoid proxies. A project can deploy a new version and ask users to migrate, or keep data in a separate storage contract that successive logic contracts are permitted to write to.

02

Technical risks

Upgradeable designs add their own classes of error. The new implementation must use the proxy's storage in a layout compatible with the old one; if variables are reordered or retyped, existing data is misread, a fault known as a storage collision. Because a proxy cannot use an ordinary constructor, set-up is done by an initialiser function, and an initialiser left unprotected can be called by an attacker to seize control. Implementation contracts that can be destroyed or reinitialised have caused funds to be frozen. For these reasons each new version normally undergoes a fresh smart contract audit, and standard, widely reviewed libraries are preferred over custom proxy code. A flaw of this kind is a typical route to a bug exploit.

03

Control of the upgrade key

Whoever can upgrade a contract can, in principle, replace it with code that does anything, including transferring every user's assets. The upgrade right is therefore the most sensitive permission in the system. If it rests with a single admin key, theft or misuse of that key compromises everything. Common safeguards are:

  • Holding the right in a multi-signature wallet that requires several independent approvals.
  • Routing upgrades through a timelock, which publishes a pending change and delays it, giving users time to review it or withdraw.
  • Placing the decision with token holders who vote through a decentralized autonomous organization.
  • Separating a fast, limited power to pause from the slower power to upgrade.
  • Renouncing the upgrade right altogether once the code is mature, which makes the contract permanent.

Several large losses in decentralized finance have followed from compromised upgrade keys or malicious upgrades, and risk assessments of protocols routinely ask who can upgrade, with how many signatures and after what delay.

04

Use by regulated issuers

For issuers of stablecoins and tokenised assets, upgradeability is close to a requirement. The major fiat-backed stablecoins are deployed behind proxies, which has allowed their issuers to add functions and correct defects over time. A token that represents a regulated instrument, such as tokenised fund units or tokenized securities, must be able to follow changes in law, apply court orders and recover from operational mistakes, and features such as token allowlisting are often introduced or revised through upgrades.

Institutions treat an upgrade as a controlled change, similar to a software release in a core system. This means documented approval, testing on a separate network, independent review, custody of upgrade keys under the firm's wallet governance policy, and notice to holders and regulators where required. Investors and custodians, for their part, review the upgrade arrangements as part of due diligence on a token.

05

Criticism

Critics describe an upgradeable contract as a back door: the published code offers no guarantee if it can be replaced tomorrow. Marketing a protocol as decentralised while a small team holds the upgrade key is a recurring complaint, and regulators have cited such control when assessing whether a project has an identifiable responsible party. Defenders reply that immutable contracts with serious bugs have also caused large losses, and that disclosed, constrained upgrade powers are a reasonable middle course.

Last updated 15 Nov 2026