Skip to content

tooploox/ipfs-eth-database

Repository files navigation

IPFS in Ethereum Smart Contracts

This is a simple blog application that is a proof of concept of connecting Ethereum's smart contracts to JSON database stored on IPFS. The communication is based on Oraclize service.

How to run?

Prepare a blog contract

First you have to deploy a contract.

Here is an example how to deploy to Rinkeby testnet via infura node.

Set your mnemonic in wallet-config.json.

Run migrations:

 truffle migrate --network rinkeby-infura --reset

You should see the address of the contract:

Blog: 0x461192ab19b0a963a77fdc8dea5ee9ac4287ff31

We have to set this address in app/blog/config/blog.json file.

Install IPFS

You have to have your own IPFS node that will store the database. Installation process is described here.

After installation we can run the daemon:

ipfs daemon

Run the server

Install npm dependencies:

npm install

and run the server

./node_modules/.bin/parcel app/index.html

Prepare blogposts

Each blogpost is stored in JSON object that consists of two attributes: title and content.

Let's prepare two blogposts.

echo '{"title":"Title of the first post", "content": "This is the awesome content!"}' > post_1.json
echo '{"title":"Title of the second post", "content": "This is the most awesome content!"}' > post_2.json

And we have to add them to IPFS as follows:

ipfs add post_1.json; ipfs add post_2.json

You should see two hashes (addresses) of the files:

added QmU2yr8CQfrd26Yghjx2xGdg8ZdmRKRSwcD7eBgpvL91xf post_1.json
added QmRPdMo8HEoSWSPXg1NxvLPcDNdL7YocvhXdYHjGQaXmfC post_2.json

You should be able to read the files by ipfs cat command or by a public gateway:

ipfs cat QmU2yr8CQfrd26Yghjx2xGdg8ZdmRKRSwcD7eBgpvL91xf

{"title":"Title of the first post", "content": "This is the awesome content!"}
curl http://ipfs.io/ipfs/QmU2yr8CQfrd26Yghjx2xGdg8ZdmRKRSwcD7eBgpvL91xf

{"title":"Title of the first post", "content": "This is the awesome content!"}

Keep the hashes for the next step.

Now we can add our blogposts using following command:

node scripts/add-blog-post.js <FILE_ADDRESS>

In our case:

node scripts/add-blog-post.js QmU2yr8CQfrd26Yghjx2xGdg8ZdmRKRSwcD7eBgpvL91xf
node scripts/add-blog-post.js QmRPdMo8HEoSWSPXg1NxvLPcDNdL7YocvhXdYHjGQaXmfC

Then you should see the link to your blog

Your blog is available here:
http://localhost:1234/#/u/0x351944e0d307d536737de4c6f07382548437fb53

Now we can open the link above and check if our blog works properly.