<p>Most Bitcoin addresses are derived using public key cryptography, so in the same way that our wallet can use a private key to sign a transaction that spends some BTC, it can also use a private key to sign an arbitrary message (in this case, a message that says "I own this address!").</p>

<p>As example: By using the private key that controls a funded bitcoin address, you can prove that you own the coins stored at that address (or at least, you can prove that you have knowledge of the private key that can spend them). Lets say <code>Address X</code> has 1 BTC, and so you create a message that reads <em>'<code>Address X</code> is controlled by Takwon'</em>, and then sign that message using the private key for <code>Address X</code>. You can now pass this signed message to someone, and they can verify that you do indeed have knowledge of that private key. </p>

<p>This post has info about how to create a signed message using <code>bitcoin-cli</code>:
<a href="https://bitcoin.stackexchange.com/questions/16720/how-to-sign-a-message-using-bitcoin-private-key">How to sign a message using Bitcoin private key?</a></p>

<p>This post has info about how to verify a signed message using <code>bitcoin-cli</code>:
<a href="https://bitcoin.stackexchange.com/questions/4137/how-can-i-verify-a-signed-message">How can I verify a signed message?</a></p>

<p>This post has info about the nature of the signed message - to be absolutely sure that someone owns the address in question, <em>you</em> should provide a message that they will sign. 
<a href="https://bitcoin.stackexchange.com/questions/81115/if-someone-wanted-to-pretend-to-be-satoshi-by-posting-a-fake-signature-to-defrau">If someone wanted to pretend to be Satoshi by posting a fake signature to defraud people how could they?</a></p>

<blockquote>
  <p>And is/could this be done without actually revealing which coins/parts of coins you control? Only that you have X amount of BTC in your wallet.dat?</p>
</blockquote>

<p>The method above reveals which address(es) you control to anyone that is verifying the signed message(s). I am unaware of any method that would allow you to prove ownership of some amount of coin, without revealing which specific UTXOs constitute those funds. Perhaps there is some fancy ZKP math which could be done on a UTXO set commitment to accomplish this, but as far as I know no such thing has been developed for Bitcoin at this time (and, perhaps it is not possible, I'll leave that to the cryptographic experts to explain in more detail). </p>

CC BY-SA 4.0
2020-03-19T20:39:13.470Z
2020-03-19T20:39:13.470Z
chytrik
<p>I want to know if there is some Bitcoin Core-supported feature where it takes the current amount in your wallet.dat and dumps it in such a way that another person can take the data and verify that you own X amount of Bitcoin, obviously without giving up the private keys/control of the coins, and somehow tying them to an arbitrary string, such as a real name, nickname, e-mail address, greeting of some kind, etc.</p>

<p>If this is possible, how is it done and how does it work on a technical level?</p>

<p>And is/could this be done without actually revealing <em>which</em> coins/parts of coins you control? Only that you have X amount of BTC in your wallet.dat?</p>

<p>And how easy is it to <em>verify</em> this "public coin proof" blob of cryptic characters? One might guess that most people would just look at the amount of Bitcoin on this "receipt", that greeting text, and the encryption-looking text following it and assume that it must be the right person, without actually feeding it into Bitcoin Core. So it should be very simple to verify, such as being able to drag and drop the file/image into a Bitcoin Core GUI window and immediately get a "Correct: X BTC" alert box pop-up, or a "Could not verify proof blob." error message.</p>

<bitcoin-core><proof-of-solvency>
Is there some way to safely prove that you control a certain number of Bitcoin?
Takwon
# Is there some way to safely prove that you control a certain number of Bitcoin?

(Asked by: username_0 on 2020-03-19)

I want to know if there is some Bitcoin Core-supported feature where it takes the current amount in your wallet.dat and dumps it in such a way that another person can take the data and verify that you own X amount of Bitcoin, obviously without giving up the private keys/control of the coins, and somehow tying them to an arbitrary string, such as a real name, nickname, e-mail address, greeting of some kind, etc.

If this is possible, how is it done and how does it work on a technical level?

And is/could this be done without actually revealing *which* coins/parts of coins you control? Only that you have X amount of BTC in your wallet.dat?

And how easy is it to *verify* this "public coin proof" blob of cryptic characters? One might guess that most people would just look at the amount of Bitcoin on this "receipt", that greeting text, and the encryption-looking text following it and assume that it must be the right person, without actually feeding it into Bitcoin Core. So it should be very simple to verify, such as being able to drag and drop the file/image into a Bitcoin Core GUI window and immediately get a "Correct: X BTC" alert box pop-up, or a "Could not verify proof blob." error message.

**Tags:** bitcoin-core, proof-of-solvency


---

## 1 answers

### Answer by username_1 on 2020-03-19. Score: 2

Most Bitcoin addresses are derived using public key cryptography, so in the same way that our wallet can use a private key to sign a transaction that spends some BTC, it can also use a private key to sign an arbitrary message (in this case, a message that says "I own this address!").

As example: By using the private key that controls a funded bitcoin address, you can prove that you own the coins stored at that address (or at least, you can prove that you have knowledge of the private key that can spend them). Lets say `Address X` has 1 BTC, and so you create a message that reads *'`Address X` is controlled by username_0'*, and then sign that message using the private key for `Address X`. You can now pass this signed message to someone, and they can verify that you do indeed have knowledge of that private key.

This post has info about how to create a signed message using `bitcoin-cli`:
[How to sign a message using Bitcoin private key?](https://bitcoin.stackexchange.com/questions/16720/how-to-sign-a-message-using-bitcoin-private-key)

This post has info about how to verify a signed message using `bitcoin-cli`:
[How can I verify a signed message?](https://bitcoin.stackexchange.com/questions/4137/how-can-i-verify-a-signed-message)

This post has info about the nature of the signed message - to be absolutely sure that someone owns the address in question, *you* should provide a message that they will sign.
[If someone wanted to pretend to be Satoshi by posting a fake signature to defraud people how could they?](https://bitcoin.stackexchange.com/questions/81115/if-someone-wanted-to-pretend-to-be-satoshi-by-posting-a-fake-signature-to-defrau)

> And is/could this be done without actually revealing which coins/parts of coins you control? Only that you have X amount of BTC in your wallet.dat?

The method above reveals which address(es) you control to anyone that is verifying the signed message(s). I am unaware of any method that would allow you to prove ownership of some amount of coin, without revealing which specific UTXOs constitute those funds. Perhaps there is some fancy ZKP math which could be done on a UTXO set commitment to accomplish this, but as far as I know no such thing has been developed for Bitcoin at this time (and, perhaps it is not possible, I'll leave that to the cryptographic experts to explain in more detail).


---

