51

As I understand it, smart contracts are currently immortal by default. Does this mean that I could create a contract that happened to contain an encoded form of baby photos and have it stored forever? If not, what prevents it?

4 Answers 4

40

Nothing prevents it. 5 months ago, I demonstrated storing audio (a very highly compressed mp3 file) in the blockchain. And it's still there and being replicated by every full node today! Only 3.5kB and I had to pay quite a bit of ether, but still cool!

Check out Freakiest thing ever - the blockchain now has a voice! thread at Reddit.

To make this answer last the test of time (if something happens to the above link), here is the relevant command to run in your terminal:

geth --exec "eth.getTransaction('0xbb8ee9866ee67277986b6f40775469c7a674810ce99dce3caff0d1117c8dcdac').input" console | xxd -p -r | mpg321 -

A smarter way uses the storage only as a hash as other answers have said, use StorJ, IPFS, etc., because then you can store more off the blockchain and link to it.

5
  • 1
    That is awesome! It took me awhile to actually get the data and play it, geth didn't seem to think the address existed, xxd wasn't installed, mpg321 wasn't in the official repos, so I had to find it on a blockchain explorer site, install xxd, and then use ffplay, and it was all worth it XD.
    – Shelvacu
    Jan 23, 2016 at 7:44
  • shelvacu: Great to hear! Glad you had a bit of fun with it, I know I did. :) I had the first functional contract on the Ethereum blockchain.
    – linagee
    Jan 23, 2016 at 7:48
  • 1
    Nothing prevents it....except the extraordinarily high costs compared to any other solution. Please mention in your answer that people shouldn't actually do this--as mentioned IPFS is a much better way to have some data stored forever without bloating the Ethereum blockchain. And in fact, if people wait for projects such as Swarm to be completed, they will be able to pay less than the cost of the blockchain storage method into a contract that will ensure the same thing. Jan 23, 2016 at 20:01
  • 2
    How much did you pay? Jan 24, 2016 at 5:33
  • 1
    @MatíasInsaurralde I've heard $0.25 on Reddit.
    – sidney
    May 23, 2016 at 8:53
32

The primary things "stopping you" would be:

  1. Block gas limits which are currently "voted on" by miners
  2. Amount of gas you would need to pay to store your data

Things like baby photos are going to be, at minimum, 600kB uncompressed. I am not incredibly familiar with image compression, so we will just work with the 600kB figure for the sake of example.

A transaction sending 46kB of compressed text consumed 1,720,210 gas and cost 0.0860105 Ether ($0.074 USD) at the end of October 2015. The price since then for Ether will continue to rise/fall, but ignoring that for a moment, let's do the math:

Storing the 600 kB image would cost 13 times more gas to store, so 22,362,821 gas would be consumed for a cost of $0.96 (if priced from Oct. 2015). The current block gas limit is 3,141,592 gas which is much less than the required amount to process the image in 1 transaction.

So it is possible to store images on the Ethereum blockchain, but a much cheaper solution would be to store a reference to that image (like a URL) to permanently store where the image is kept, granted that is not as useful as permanent storage. In the future, IPFS will likely be able to store data indefinately once they nail down an incentive system for people to store the data. Then it is just a matter of storing the IPFS hash that points to the image.

12

Its technically possible, there are some apps do the same as well.

  1. http://storj.io
  2. http://filecoin.io
  3. Scaling Blockchain-based Data Stores
11

The data types that can be stored are limited, so storing baby photos would take a lot of code to map it to the available types. Plus of course you need to pay Ether to the contract to use its storage, so it's not free.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.