An example of usage IPFS in Ethereum Smart Contracts
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app Add support for IPFS Companion Jun 25, 2018
contracts Provide a function for checking price of post adding Jun 18, 2018
migrations Optimize cost of adding a blogpost Jun 12, 2018
scripts Set the minimum confirmations number Jun 18, 2018
.babelrc Init app Jun 8, 2018
.gitattributes Init Jun 6, 2018
.gitignore Init app Jun 8, 2018
.soliumignore Add required libraries Jun 8, 2018
.soliumrc.json
README.md
package-lock.json Update package-lock.json Jun 18, 2018
package.json
truffle-config.js Create POC frontend Jun 8, 2018
truffle.js Provide a script for adding post Jun 18, 2018
wallet-config.json Provide a script for adding post Jun 18, 2018

README.md

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.