UTXOracle is a simple Python script [Attention: direct download link] that takes advantage of a surprising fact about the Bitcoin blockchain – by parsing on-chain data it’s possible to derive an approximate U.S. dollar price.

A graph of UTXO creation over time. Source: utxo.live

All of this is based on the chart above. The lines on the graph represent Bitcoin UTXOs of certain values.

If you look at the left-hand side at the BTC denominations, you’ll see that straight lines match up perfectly. Those represent the creation of UTXOs in exact round BTC denominations. The wavy lines are UTXOs being created with round fiat denominations.

All this is to say that a large percentage of Bitcoin transactions (~15%) create outputs with round denominations in fiat currencies, an obscure data quirk that allows software to make derivative assumptions about the economic activity they represent.

By finding the points where these wavy and straight lines intersect, one can ascertain a point in time when the fiat price of BTC was a round amount, and extrapolate to other points in time.

But while this may sound highly technical, and it is, the immediate result is something useful for every Bitcoiner, especially those who want to harness its decentralization – with UTXOracle, users who run a full node no longer need to rely on third-party exchange price data.

UTXOracle allows you to track the fiat price average solely with on-chain data, not only giving new abilities to Bitcoiners, but to its product builders as well. In short, it’s a big breakthrough we expect to manifest itself further in the years ahead.

Released today after some months of work, I had a chance to ask creator and developer Steve Jeffress a few questions about the project. The following discussion sheds further light on the software he released, and what might lie ahead:

SHINOBI: What gave you the insight into UTXO set amount distributions having this relationship with fiat price?

JEFFRESS: I’ve been rendering heat maps of the UTXO set for like 8 years now. I’ve always known the USD price was a clear emergent property of output patterns. I’ve known I could write the program for several years and finally got around to doing it.

SHINOBI: What are the limitations of the accuracy of UTXOracle?

JEFFRESS: Right now, the limits are $1,000 to $100,000 for the price, and I’ve only tested it back to July 26th, 2020. It’s also dependent on people continuing to transact in round amounts of US dollars.

SHINOBI: What kind of use cases do you see UTXOracle enabling?

JEFFRESS: I’m excited to see what people come up with. I’m happy if it encourages people to do more stuff with their own node. Anything that further decentralizes nodes is a super positive thing IMO. I just want to improve bitcoin.

SHINOBI: Can UTXOracle be gamed or manipulated?

JEFFRESS: Yes, certainly, however it would be costly to manipulate. You might even be able to estimate the price of manipulation. Clearly if this was used to settle contracts, the contracts would need to be far less than some estimated cost of manipulation

[One thing that Steve pointed out is the potential for delayed withdrawals to distort the accuracy of the model to a degree. For example, imagine you buy $50 of bitcoin on Coinbase and withdraw it. This type of behavior is a large driver of the data this model depends on. Imagine now if you buy $50 of bitcoin on Coinbase, but wait a week until you withdraw it. The price will be different than when you purchased it, meaning the on-chain output created will not accurately reflect the round amount in fiat it was when you purchased it.

This type of behavior could throw off the accuracy of the model, which is something to consider during a high fee environment when more people will adopt such behavior. The model could be adapted to account for this as long as larger value transfers that were economical still occurred in round fiat amounts on-chain. An algorithm could properly distinguish between those and lower value transactions that are throwing off the price model and weight the larger value transactions much higher than lower value transactions to account for the distortion.]

SHINOBI: Could this model be extended or made more accurate with other on-chain data?

JEFFRESS: Probably. though i think people should keep in mind trade offs between simplicity, accuracy, complexity, etc. For example, I’ve written the code to maximize understandability over efficiency. I could import libraries to make it more efficient, but I’ve chosen not to.

For a deeper dive on UTXOracle, read our feature guide.