<p>I think that the address you generate is plausibly unspendable but not provably. I can imagine that by tweaking a Plutus validator script with a lot of time and computing power you could generate a spendable script that compiles to some regular byte pattern hash that you can than pretend to have derived from an expression such as the one in your example. (Though, a repeating pattern of a two digit number for 128 bytes would probably be impossible to tweak.)</p>
<p>I haven't read the article but the easiest way to get an unspendable script address would be to take an unspendable Plutus validator script (like the one that always evaluates to 'false') and use its script address. This would be verifiable. Even better would be a script that allows cumulating funds so that you can re-use the UTxO and only have to pay the min-Ada once.</p>
<p>This being said, I don't think that these dead-end burn-UTxOs are a sustainable solution. They pollute the ledger and bind Ada. In the long term they inevitably get too expensive. The better solution is to design the currency policy of your token in such a way that tokens can always be burned. This requires the policy to be written in Plutus.</p>

CC BY-SA 4.0
2022-01-13T00:45:14.887Z
as I know all the computing power of the world for hundreds of times the age of the universe is not enough to crack it, but yes, this is what I'm looking for: a verifiable and credible way to do it... I will take a look at the policy written in Plutus, it may be the best solution afterall. Thank you.
Andrea Bravetti
CC BY-SA 4.0
2022-01-13T07:47:35.613Z
You are right, the tweaking is impossible. So it rather comes down to how believable it is that you took the hash at random and did not use the hash of a spendable script (which is very believable here). I will edit the response.
Jey
CC BY-SA 4.0
2022-01-12T22:02:26.307Z
2022-01-12T22:18:04.697Z
2022-01-12T22:18:04.697Z
Jey
<p>Really a burn address is quite simple to make on a practical level. If you accept the script address then all you have to do is write a smart contract with a validator that can never be validated but is still acceptable to the standers of the chain.</p>
<p>So put some condition like the current block is the geniuses block and your good to go. This is beacuse of sequential nature of the block chain.</p>
<p>Now when vasil comes out people can easily lool up the specific address and when a decomplier comes out they can verify the contract on chain.</p>
<p>But until then there is still some degree of trust required that you sent the wright contract to the chain.</p>

CC BY-SA 4.0
2022-06-12T14:35:08.953Z
2022-06-12T14:35:08.953Z
KryptoKing
<p>I need to generate a Proof-of-Burn address for a project I'm working on.</p>
<p>I'm almost sure I can generate a valid &quot;unspendable&quot; address myself but I don't know how to make it verifiable and if there is a verified utility that can generate such an address.</p>
<p>I tried to read and understand this:</p>
<p><a href="https://iohk.io/en/research/library/papers/proof-of-burn" rel="nofollow noreferrer">https://iohk.io/en/research/library/papers/proof-of-burn</a></p>
<p>This is a nice read, but I'm not sure I can fully understand any aspect of it.</p>
<p>For example this simple script I made create what I think is an &quot;unspendable&quot; address:</p>
<pre><code>$ bech32 addr_xvk &lt;&lt;&lt; $(for i in {1..64}; do printf &quot;20&quot;; done) | \
&gt; cardano-address address payment --network-tag 1
addr1vxh2sv3tkgzkyhenvzrleamqj2dvtgxqah56gnhfc32depske34z3
</code></pre>
<p>And it's valid, it works, and I can also add some my own text at the beginning to make it unique, instead of 64 spaces...</p>
<p>But is it acceptable as a verifiable Proof-of-Burn address?</p>
<p>Is there any generally approved way to generate a Proof-of-Burn address on Cardano?</p>

CC BY-SA 4.0
2022-01-12T18:08:52.963Z
Maybe off-topic, but out of curiosity, what do you want to burn? Ada or some native assets ? Third party policy or own policy ?
Jey
CC BY-SA 4.0
2022-01-12T19:58:53.343Z
My token https://pool.pm/bebb83cd0f8bc52c2d2e22bfec9e5f06005be7d545a5d4637d434336.goad, sadly with minUTxOValue of ADA each time but this is another problem... The policy will be locked at the time of project start. https://pool.pm/policy/bebb83cd0f8bc52c2d2e22bfec9e5f06005be7d545a5d4637d434336
Andrea Bravetti
<burn><formal-verification><verification>
How to generate a verifiable Proof-of-Burn address
# How to generate a verifiable Proof-of-Burn address

(Asked by: username_0 on 2022-01-12)

I need to generate a Proof-of-Burn address for a project I'm working on.
I'm almost sure I can generate a valid "unspendable" address myself but I don't know how to make it verifiable and if there is a verified utility that can generate such an address.
I tried to read and understand this:
https://iohk.io/en/research/library/papers/proof-of-burn
This is a nice read, but I'm not sure I can fully understand any aspect of it.
For example this simple script I made create what I think is an "unspendable" address:
$ bech32 addr_xvk <<< $(for i in {1..64}; do printf "20"; done) | \
> cardano-address address payment --network-tag 1
addr1vxh2sv3tkgzkyhenvzrleamqj2dvtgxqah56gnhfc32depske34z3

And it's valid, it works, and I can also add some my own text at the beginning to make it unique, instead of 64 spaces...
But is it acceptable as a verifiable Proof-of-Burn address?
Is there any generally approved way to generate a Proof-of-Burn address on Cardano?

**Tags:** burn, formal-verification, verification
> **Comments:**
> **username_1**: Maybe off-topic, but out of curiosity, what do you want to burn? Ada or some native assets ? Third party policy or own policy ?  
> **username_0**: My token https://pool.pm/bebb83cd0f8bc52c2d2e22bfec9e5f06005be7d545a5d4637d434336.goad, sadly with minUTxOValue of ADA each time but this is another problem... The policy will be locked at the time of project start. https://pool.pm/policy/bebb83cd0f8bc52c2d2e22bfec9e5f06005be7d545a5d4637d434336  

---

## 2 answers

### Answer by username_1 on 2022-01-12. Score: 1

I think that the address you generate is plausibly unspendable but not provably. I can imagine that by tweaking a Plutus validator script with a lot of time and computing power you could generate a spendable script that compiles to some regular byte pattern hash that you can than pretend to have derived from an expression such as the one in your example. (Though, a repeating pattern of a two digit number for 128 bytes would probably be impossible to tweak.)

I haven't read the article but the easiest way to get an unspendable script address would be to take an unspendable Plutus validator script (like the one that always evaluates to 'false') and use its script address. This would be verifiable. Even better would be a script that allows cumulating funds so that you can re-use the UTxO and only have to pay the min-Ada once.

This being said, I don't think that these dead-end burn-UTxOs are a sustainable solution. They pollute the ledger and bind Ada. In the long term they inevitably get too expensive. The better solution is to design the currency policy of your token in such a way that tokens can always be burned. This requires the policy to be written in Plutus.

> **Comments:**
> **username_0**: as I know all the computing power of the world for hundreds of times the age of the universe is not enough to crack it, but yes, this is what I'm looking for: a verifiable and credible way to do it... I will take a look at the policy written in Plutus, it may be the best solution afterall. Thank you.  
> **username_1**: You are right, the tweaking is impossible. So it rather comes down to how believable it is that you took the hash at random and did not use the hash of a spendable script (which is very believable here). I will edit the response.  

---

### Answer by username_2 on 2022-06-12. Score: 0

Really a burn address is quite simple to make on a practical level. If you accept the script address then all you have to do is write a smart contract with a validator that can never be validated but is still acceptable to the standers of the chain.

So put some condition like the current block is the geniuses block and your good to go. This is beacuse of sequential nature of the block chain.

Now when vasil comes out people can easily lool up the specific address and when a decomplier comes out they can verify the contract on chain.

But until then there is still some degree of trust required that you sent the wright contract to the chain.


---

