TIP-1006: Burn At for TIP-20 Tokens
Protocol Version: TBD
Status: In Review
Authors: Dan Robinson
Status: In Review
Authors: Dan Robinson
Abstract
This specification introduces aburnAt function to TIP-20 tokens, allowing holders of a new BURN_AT_ROLE to burn tokens from any address without transfer policy restrictions. This complements the existing burnBlocked function which is limited to burning from addresses blocked by the transfer policy.
Motivation
The existing TIP-20 burn mechanisms have the following limitations:burn()- Only burns from the caller’s own balance, requiresISSUER_ROLEburnBlocked()- Can burn from other addresses, but only if the target address is blocked by the transfer policy
crosschainBurn function proposed in ERC 7802).
The burnAt function provides this capability with appropriate access controls via a dedicated role.
Specification
New Role
A new role constant is added to TIP-20:DEFAULT_ADMIN_ROLE (same as other TIP-20 roles).
New Event
New Function
Behavior
- Access Control: Reverts with
Unauthorizedif caller does not haveBURN_AT_ROLE - Protected Addresses: Reverts with
ProtectedAddressiffromis:TIP_FEE_MANAGER_ADDRESS(0xfeEC000000000000000000000000000000000000)STABLECOIN_DEX_ADDRESS(0xDEc0000000000000000000000000000000000000)
- Balance Check: Reverts with
InsufficientBalanceiffromhas insufficient balance - No Policy Check: Unlike
burnBlocked, this function does NOT check transfer policy authorization - State Changes:
- Decrements
balanceOf[from]byamount - Decrements
_totalSupplybyamount - Updates reward accounting if
fromis opted into rewards
- Decrements
- Events: Emits
Transfer(from, address(0), amount)andBurnAt(from, amount)
Interface Addition
Invariants
- Role Required:
burnAtmust always revert if caller lacksBURN_AT_ROLE - Protected Addresses:
burnAtmust never succeed whenfromis a protected precompile address - Supply Conservation: After
burnAt(from, amount):totalSupplydecreases by exactlyamountbalanceOf[from]decreases by exactlyamount
- Balance Constraint:
burnAtmust revert ifamount > balanceOf[from] - Reward Accounting: If
fromis opted into rewards:- Pending rewards must be accrued to the reward recipient’s
rewardBalancebefore the balance changes from’srewardPerTokensnapshot must be synced toglobalRewardPerTokenoptedInSupplymust decrease byamount- Any previously accrued
rewardBalanceremains claimable
- Pending rewards must be accrued to the reward recipient’s
- Policy Independence:
burnAtmust succeed regardless of transfer policy status offrom