It is difficult to send an unsolicited message to a Bitcoin address, where a communication channel is yet to be established
No existing solution results in a message which is reasonably noticable to an unexpecting recipient. By sending a custom transaction we can enscribe a message into the blockchain which is easily noticeable in a block explorer.
Messages using the BTCMessage tool are relatively expensive & public, and therefore are not effective means of communication. But sometimes they can be useful:
These messages should not be sent often, as the message's unspendable transaction outputs (UTXO) increase the blockchain size. However, with currently over 65,000,000 unspent UTXOs, including likely millions of lost private keys; the ocassional message will have little impact. Spammers already use their own tools for scams & ads via custom adresses and dusting.
How it works
Creating such long vanity addresses legitimately is essentially impossible. Instead we can forge one.
Bitcoin addresses are only valid if they have a valid checksum, meaning that it's highly likely any selected 34 characters will not be a valid address. To forge an address we instead:
Decide upon the text we wish to include in our address.
Pad the address up to 33 characters.
Convert this base58 address back into bytes.
Recalculate the checksum from the first 21 bytes, and use it to overwrite the last 4 bytes.
Convert the address bytes back to base58 format.
Any other reason you wish to attempt to communicate with an address.
The checksum uses the first 21 bytes of the address, hashes it twice with SHA256 and then takes the first 4 bytes of this hash; which will comprise the last 4 bytes of our address.
This is an optional message header which identifies the transaction as a message, I own this address so might get a few cents from each message.
I am currently searching for a vanity address "1BTCMessage...", which for a case insensitive match will take ~70 days on my GTX 970. I'm using shorter ones until I find a match, or a better solution.
Before 2015, there was no standard for how inputs outputs of Bitcoin transactions should be ordered. As a result, wallets could often have discenable fingerprints based on how they composed transactions.
BIP0069 introduced a standard for ordering where outputs are first ordered by amount, and then secondly by the `scriptPubKeys` byte arrays.
We use this to our advantage to order our message, by using ascending output amounts our message will display in the correct order.