Once stored, it cannot be deleted, so be careful. Continue reading below to understand why I've chosen this imagery.

This is an fun experiment to demonstrate that it is possible to store arbitrary data forever, including images, on the Ethereum blockchain at a very low cost and very easily, as transaction input data. Once stored, it cannot be deleted, so be careful. Continue reading below to understand why I've chosen this imagery.

Images, TX data and exchange rate are fetched real-time via the Etherscan and Cryptocompare APIs.

About the experiment

Why boobs? Immutability is a double-edged sword. Transaction data stays forever, which is good. But a wicked mind could leverage immutability to store harmful images or texts about a third party FOREVER, with the goal of inflicting social damage.

Once stored, it is irreversible. And it interferes with the Right to be forgotten.

Think about a spiteful vengeance in the context of a lovers' spat or a relationship break-up. That's why I've used artistic boobs, as a fun analogy.

How? Ethereum transactions can include input data, encoded as a hexadecimal. Storing data in smart contracts is expensive and prohibitive. But transaction input data is cheap. Storing these images cost almost less than $1 each.

To understand these transactions in more detail, continue reading below.

The steps This experiment was performed as follows:

Initial transfer: I transferred a small amount of ETH to an address I control. Its only purpose is to be spent as gas. Process images: After spending 1 hour online looking for graceful boobs, I cropped and compressed 4 images. I saved them as non-progressive jpegs. The difficulty was to strike a balance between keeping the boob distinguishable and creating lighter images to save on gas. Hex dump: Using the xxd -p command on macOS, I created hex dumps of each image. Transactions: The TXs needed to carry the hex dump as input data, so I crafted the transactions appropriately. Gas: I adjusted the gas in accordance with the number of input bytes of each image hex dump. Sign & broadcast: Using MyEtherWallet (never use links to go to MEW, always type it yourself in the address bar to avoid phishing attacks), I signed and broadcast the TX to the network, once per image/TX. Cleanup: Once all transactions were confirmed to my satisfaction, I transferred the remaining ETH out of that account. The balance is now 0, but the boobs will stay forever on the blockchain.

How this page was built This page is built with Preact and Tachyons.css.

It has no backend and it hits the etherscan.io and Cryptocompare APIs directly. So if the data doesn't load, there's probably something wrong with those services, or your IP/browser/network has been blacklisted.

I've used the Window.btoa function in conjunction with String.fromCharCode to convert the hex data coming back from the GETH proxy at etherscan.io. Nothing fancy.

This site is a Progressive Web Application, so if you have a modern Android phone and are using Chrome, you'll be prompted to install it to your home screen. That way, you can return to browse boobies easily with just one tap! Woohoo!

Want other boobs to be featured? Send a transaction to this address: 0x65630100a5864fb94cd998b6d4c2ca2acba14127

Set the input data to the hex-encoded jpeg image. Only non-obscene images will be featured.

If you enjoyed this experiment, feel free to send extra ETH inside that transaction as a donation ;-)