It can be sometimes useful for contracts to provably burn tez. One way they can do that is by sending the tez to an address to which clearly no one has the key.
- tz1burnburnburnburnburnburnburjAYjjX (as of today 4.2 tez have been burned there)
- tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU (the null address)
It’s also possible to create a smart-contract that simply eats the tez and never releases them.
The benefit of having a canonical approach, that is: have one, standard, way to burn tez is that block explorers can easily take it into account when measuring the supply.
There are roughly two ways to do this:
- Standardize on an address (e.g. tz1burnburnburnburnburnburnburjAYjjX)
- Introduce a
BURNopcode in Michelson that burns a given quantity of tez from the current balance
The former has the advantage of not requiring any protocol change, just a tzip. It has the disadvantage of being a bit costly in gas and “looking” like there’s an address with tez, even though they are clearly burned.
The latter has the advantage of being more gas sparing, but it would need to be part of a protocol upgrade and its semantic may need to be clarified. What does
BALANCE return if called after
BURN? Does it get applied at the end? Before the operations? As some sort of virtual operation?