Many people I’ve talked to around the Ordinals ecosystem have amassed quite the impressive collection of assets over the past few months.
The two most common places they store their Ordinals are Xverse and Unisat. I think both are phenomenal hot wallets. They do a superb job of integrating across the ecosystem and offer slick user experiences and interfaces.
However, many jpeg enjooyers inevitably start to ask themselves the question: “How can I maintain better security and more control over my assets?” Fortunately, there’s a solution sitting out there for those who don’t want to run a full node. But many of you have also seen the warnings about the dangers of using it…
Sparrow is a fantastic solution that can augment hot wallets - but it requires a deeper understanding of Bitcoin and Ordinals. Once you have that in your toolkit though, you’re going to be slinging UTXOs around the mempool like a pro!
Before I dive into exactly how to pad and send Ordinals & BRC-20s with Sparrow, I want to quickly review how Ordinals and Bitcoin work.
The Ordinals protocol inscribes data to an individual satoshi (sat). Remember that a sat is the smallest denomination of Bitcoin at 0.0000001 BTC. But the actual “thing” you receive when you get an Ordinal is a collection of sats called a UTXO (unspent transaction output). When you receive a UTXO with an Ordinal inscribed on it, the inscription is (almost always) on the first sat of the UTXO.
For example, if we take a look at the first OMB inscription, we see that it has an output value of 8335 and an offset of 0. The output value means that the UTXO containing the inscribed sat has 8335 sats, and the offset of 0 means that the actual inscription is on the first sat of the UTXO. As long as you have that first sat, you have the Ordinal!
The base element of Bitcoin is UTXOs. Using the analogy of digital gold, you can think literally think of UTXOs like physical gold bars. If you want to send part of a gold bar to me, you’re going to have to physically cut that bar in 2 pieces. You would slice a piece off, give it to me, and keep what’s left.
Similarly, let’s say you have a 100k sat UTXO, and you want to send 40k sats to me. You’d split that 100k UTXO into two new UTXOs with 40k and 60k sats respectively. You’d send me the 40k sats UTXO, and you’d keep the remaining 60k for yourself. If you want a more in-depth explanation of the UTXO model, check out River’s explainer on the topic.
When the Ordinals protocol started, most inscriptions were initially created with 10,000 sats. Back then when network fees were 5 sats/vB, it only cost ~500 sats to send an inscription. To send an inscription on a 10,000 sat UTXO, you would just break it into two UTXOs: a UTXO of the first 9,500 sats with the inscription on the first sat, and a UTXO with the last 500 sats for the miners fee. As long as the first sat of the 10,000 sat UTXO was the first sat of the 9,500 sat UTXO, everything would be gucci with the Ordinals protocol.
However, now Bitcoin network fees range from 40 sats/vB to 400 sats/vB. Most inscriptions will no longer be able to pay the miner fees from the UTXO that the inscription is on. Wallets like Xverse and Unisat will handle this mechanic for you - but in Sparrow, you have to take care of this on your own. Fortunately, that’s what this guide is all about!
If you haven’t already, please go read the Ordinals handbook on using Sparrow wallet. I’ll wait…
Okay! Now that you’ve gotten distracted, checked some floor prices, and come back to this article without fully reading the Ordinals Handbook → Here it is again: READ THIS FIRST!!!
Now we’re ready to actually walk through padding existing UTXOs and spending multiple UTXOs.
The most important thing to remember as we go through this example is the Golden Rule of Bitcoin: First sat in, first sat out.
If you keep that in mind throughout this whole process, you’re GMI.
If you read the Ordinals Handbook, you’ve already done this!
In the example below, I’m going to send a Loot Inscription (378 sats) by using sats from my Spendable Sats (120,000 sats).
The “Label” can be anything. It’s just used for internal bookkeeping.
The “Amount” field is identical to the output value of inscriptions we talked about earlier.
** Something important to note here is that on Bitcoin wallets there is something known as a dust limit. Right now, many wallets impose a dust limit of 546 sats. Sparrow is not one of those, but Unisat and others are. So if you send something to Unisat with 500 sats (like I do in this example), then Unisat will force you to pad it back up to 546 if you send it again.
!!!! THE IMAGE BELOW WILL CAUSE ME TO LOSE MY LOOT ORDINAL BY SENDING IT TO A MINER!!!!
Why? Because Ordinals operate in a first in first out fashion. If I submit this transaction, the 378 sats of the Loot UTXO are going to be appended to the fee (see image below).
The logic will be as follows:
Take the first 500 sats of the Spendable Sats UTXO and put them into the Text Txn UTXO.
Take the next 113,332 sats from the Spendable Sats UTXO and send them to the next Change Address in Sparrow
Take the last 6,178 sats from the Spendable Sats UTXO and then append the 378 sats of the Loot Inscription UTXO to create the 6,556 sats Fee UTXO
Now my inscription is located on the 379th sat of the UTXO you sent off to the miners as a fee. Definitely NOT what I wanted.
Remember the the Golden Rule of Bitcoin: First sat in, first sat out. Well, I need to make sure my inscription is the first input AND output to the transaction.
Sparrow is a bit janky when it comes to this. You can just retype things in the “Label” field to cause the input order to flip-flop. Do this until the inscription you are trying to send appears as the first input to the transaction.
As you can see in the image below, now my Loot UTXO is the first input and the Test Txn UTXO is the first output. This means that the 378 sats of my Loot UTXO will be the first 378 sats of Test Txn’s UTXO. Thus, my Loot inscription is on the first sat of the Test Txn UTXO I’m sending - exactly what I want!
Even after I hit “Create Transaction” SPARROW IS STILL TRYING TO TRICK ME! As you can see below, Sparrow was sneaky and rearranged the order of the output UTXOs when I hit “Create Transaction”.
You need to X out of this screen and keep hitting “Create Transaction” until you get it such that Text Txn is the first UTXO of the output options. Once you get it looking like the image below, you're all set.
Hit “Finalize Transaction for Signing”, and once again make sure the order remains the same. I've never seen it change here, but still double check.
You’ve done it!
So in summary, I just padded my 378 sat Loot Inscription UTXO up to 500 sats. It's now above the dust limit (for Sparrow) and should be accepted by most nodes. If I wanted to pad it further, all I would have needed to do is change the “Amount” field when I was creating the transaction.
The two most important things to remember are:
Bitcoin operates on a first in - first out system.
Inscriptions (should almost always) sit on the first sat of a UTXO.
So as long as your inscription is on the first UTXO to go in, and the UTXO you want to send is the first one to come out, you should be all set!
Barring importing your wallet to Unisat (which defeats the whole point of using Sparrow) you may now be asking yourself how to get these BRC-20s out of Sparrow???
Before you actually do anything, make sure you’ve read Domo’s Gitbook explaining how BRC-20s work. A little bit of reading can go a long way to making sure you understand how transfers actually function in this protocol.
The most important thing to remember is that every time an address receives a new valid BRC-20, a new transfer inscription must be created in order validly send your BRC-20 balance to a new address. That means there are two UTXOs involved in any transfer:
The initial mint/transfer inscription that an address received
The new transfer inscription created to send to a new address
The second UTXO is what you ultimately send off, while the first will remain in your wallet. The figure below from Domo’s Gitbook provides a good visualization
Now let’s get down to brass tax on how to handle this situation in Sparrow:
What is most important here is that you use a service that does not send this inscription through an intermediary wallet. It needs to be inscribed directly into your address.
Your new transfer inscription is almost certainly going to have 546 sats (right at the dust limit). To send it, you’re going to need to follow the guide above regarding how to spend multiple UTXOs from Sparrow :)
After that, you should have a valid BRC-20 in a wallet outside of Sparrow!
Q: What happens if I sent the original transfer/mint inscription out of my Sparrow wallet instead of inscribing a new transfer function to send?
Just send back the original transfer/mint inscription and then proceed to Step 1 above! This will restore your valid BRC-20 balance at the original address. Make sure that you get at least 1 confirmation that your original transfer/mint inscription is back in the wallet before inscribing the transfer function.
Q: What if I inscribed a transfer function to a different wallet I sent the original transfer/mint inscription to?
Consider the following case:
Original transfer/mint inscription of 1,000 $X was received in wallet A
The original transfer/mint inscription was sent to wallet B before a valid transfer inscription was created in wallet A
Wallet B DOES NOT HAVE a valid BRC-20 balance on it because wallet A did not inscribe and send a new transfer. Thus, the available balance of $X in wallet B is 0, so any transfer inscription created in Wallet B is invalid.
Unfortunately if you inscribed a transfer function to Wallet B, then it’s just 546 spendable sats now. Send it to your Sparrow Wallet and use it to cover future fees!
Sparrow is a great wallet that gives you extensive control over your UTXOs. It can serve as a cold wallet solution while options like Unisat and Xverse can function as great hot wallets. As long as you understand the fundamentals of Bitcoin and Ordinals, you should feel comfortable operating Sparrow!