A public key allows you to receive bitcoin transactions and is a unique path generated by your wallet’s seed phrase. It’s a cryptographic code that’s paired with a private key. When you generate a public key, anyone can send transactions to the public key; however, you need the private key to “unlock” them and prove that you own the bitcoin received in the transaction.
The public key comprises a unique text string or QR code that bitcoin wallets generate and any other bitcoin wallet would understand.
You may have seen websites or social media accounts sharing their public address as a payment method, and if you’ve paid a public address, you’d know that it’s merely an account address, and you would set the amount that is transferred.
Adding parameters to your public key.
But that isn’t always the case; savvy bitcoiners can customise their public keys to add a specific amount they wish to accept to that wallet before sharing it with another user. All you need to do is add a few simple text parameters before and after the public key, and bitcoin wallets will recognise the commands and act accordingly.
Suppose you’ve never used a preset invoice before, but you expect someone to pay you 100 000 satoshis, or you want your donation amount for a specific address to be 100 000 satoshis; you can specify that amount so that bitcoin wallets understand and prompt the payer with the set value.
These commands work on both the bitcoin base chain and the Liquid Network. Once you generate the address, all you need to do is set the network you’re using before the public address and the amount you wish to accept at the end of the public address.
- Network command – bitcoin: or liquidnetwork:
- Public key address
Creating set amount invoices in Green wallet.
If you feel uncomfortable with adding additional text strings to a bitcoin address, then you could have the wallet do it for you. Wallets like BlockStream’s Green wallet allow you to customise your bitcoin public addresses to include a “Request Amount” before you send off your address or QR code.
To access this feature, open your wallet and select the receive option; below the wallet address, there is a “more options” feature; tap it and select the Request amount.
You will be taken to another screen where you can set the amount of bitcoin you wish to receive with this specific address. This can make it easier for those who are going to pay you, saving them time in typing in the amount or any confusion or miscommunication in the amount that needs to be paid.
Once you’ve set the amount you wish to receive, select “Ok”, and the wallet will reconfigure the public address for you with the additional parameters and update the QR code with the additional information.
On-chain address with a set amount
Once you create the payment invoice, it should generate a string of text that looks like the one below. This is an example using a public key to our bitcoin wallet set to the amount of 100 000 satoshis or 0.001 BTC.
Liquid Network address with a set amount
If you intend to receive funds via the Liquid network, you can repeat the same process as above, but in the Liquid wallet in Blockstream green. The example below is a public key to our Liquid wallet set to the amount of 100 000 L-satoshis or 0.001 L-BTC.
A payment invoice QR code
Once you have your preset amount attached to your public key, the simplest way to receive a payment is to share your QR code or the text string with the user who wishes to pay you. The payer can scan the QR code or paste in the text string, and the wallet will recognise the bitcoin or Liquid Network address along with the pre-set amount.
The payer would only need to sign the transaction, and it’s done; this lowers the friction to paying and may help increase your conversion rate when making a sale or accepting a donation.
For static payments
If you’re looking to request payments on a static web page or checkout page where you already know the set price and don’t have to keep track of payments and match them to actions, then you can use any of the following examples.
A text example
Since it’s a simple text string with additional parameters, you can embed it in HTML, and display your payment links as a bit of text on a page, text with emojis, or anything you like, so go wild. To give you an idea of what I mean, below are a few examples where we’ve embedded the address into different formats.
A button example
If text links aren’t eye-catching enough and you want the user to engage, or you’re a more mobile-heavy traffic site, then buttons might be a better option than anchor text links.
An image example
If you prefer a more creative call to action, you can embed the links in any image on your site too.
Note: You can also use this method of payment markups with the Lightning network. To find out more, check out our guide on Lighting payment links.
The pros of custom invoicing.
- It makes it easier for payers to settle.
- Set amounts make it harder for chain analysis to spot unique payments for tracking.
- The method works better on the Liquid Network, where confidential payments hide amounts on-chain.
- Addresses do not expire like the Lightning network, so users can always repeat payments.
The cons of custom invoicing.
- Set amounts can make it harder for you to match payments if needed.
- It encourages address reuse, where anyone can see how much money flows into that address.
- Users might not be used to this feature and either cancel when they see a preset amount or pay by accident as a step they are used to is removed from the flow.
- Supported some bitcoin or Liquid wallets. (UX gets a little wonky depending on your wallet)
Do you take self-custody of your stack?
If you’re new to bitcoin and have not ventured down the self-custody rabbit hole, what is stopping you? If you’re already self-sovereign, how has the experience been since you took hold of your funds? Let us know in the comments down below. We’re always keen to hear from bitcoiners from around the world.