Рубрики
Без рубрики

Руки на: Начните с Infura и IPF на Ethereum

Niharika Singh Build On: Начните с Infura и IPF на Ethereumwhy Infura? Есть много болевых точек, с которыми сталкиваются блокчан, которые могут быть решены инфурой и / или межпланетной файловой системой (IPF), в какой-то степени. Это основные задачи: это дорого

Автор оригинала: FreeCodeCamp Community Member.

Нихарика Сингх

Почему инфура?

Есть много болевых точек, с которыми сталкиваются Blockchain, который может быть решен инфурой и/или межпланетной файловой системой (IPFS) в некоторой степени. Это основные задачи:

  1. Это дорого хранить данные о блокчане Ethereum
  2. Трудно настроить клиент Ethereum GETH
  3. Трудно масштабировать инфраструктуру

Если вы используете Infuro, доступ к сети Ethereum и IPFS становится намного быстрее. Он больше не занимает часы, чтобы синхронизировать клиента GETH, который использует огромный кусок памяти и пропускной способности, а весь блокчан загружается.

Вот несколько других преимуществ, которые приходят с использованием Infura:

  • Огромное количество данных может быть сохранена на IPFS, а только хэш файла может быть сохранен на Ethereum.
  • Infura обеспечивает безопасный, надежный, масштабируемый и простой в использовании API для доступа к сети Ethereum и IPFS. Разработчики не должны беспокоиться о инфраструктуре узла Ethereum или узла IPFS. Это заботится о инфузии.
  • Infura предоставляет TLS с поддержкой общественных конечных точек.
  • Код переносимо по интерфейсу Ethereum с использованием JSON RPC, Web3.
  • Инфура практически является швейцарским армейским ножом разработчика, а также спасает команду развертывания из ада проблем масштабируемости.
  • И, наконец, инфура доверяется:

DAPP Описание

Наш DAPP примет файл в качестве ввода от пользователя и загружает его на IPF, вызывая договор Ethereum. Хэш файла будет храниться на Ethereum.

Это процесс, который мы пройдем:

  1. Принять файл в качестве ввода
  2. Конвертировать файл в буфер
  3. Загрузить буфер для IPFS
  4. Хэш Хэш файла, возвращаемый IPFS
  5. Получить адрес метамаска пользователя Ethereum адрес
  6. Пользователь подтверждает транзакцию до Ethereum через метамаск
  7. HASH IPFS написан на Ethereum

Технический стек вовлечен

  • Реагировать – Либлиотека передней конечной
  • Солидность – язык, используемый для создания интеллектуальных контрактов, которые запускаются на Ethereum
  • IPFS – децентрализованное хранение
  • Инфура -Api доступ к сети Ethereum и IPFS

Давайте код!

Установите следующие зависимости:

$ npm i -g create-react-app$ npm install react-bootstrap$ npm install fs-extra$ npm install ipfs-api$ npm install web3

После того, как вы закончите, запустите следующую команду на вашем CLI, чтобы создать образец React Project. Я назову свой проект IPFS Отказ

$ create-react-app ipfs

Разверните умный контракт на ropsten testnet

. Сделайте, что вы на ropsten Testnet на метамаске.

Чтобы развернуть умный контракт, нам нужен эфир. Чтобы получить эфир для ropsten testnet, перейдите в https://faucet.metamask.io/ Отказ

Развернуть умный контракт, перейдите в https://remix.ethereum.org Отказ

pragma solidity ^0.4.17;
contract Contract { string ipfsHash;  function setHash(string x) public {   ipfsHash = x; } function getHash() public view returns (string x) {   return ipfsHash; }
}

Сохранить адрес Smart Contract. Мой это: 0x610dd75057738b73e3f17a9d607db16a44f962f1

Также сохраните бинарный интерфейс приложения (ABI) в JSON. Его можно найти на вкладке «Compile», под «деталями».

Мой следующий:

[ {  "constant": false,  "inputs": [   {    "name": "x",    "type": "string"   }  ],  "name": "sendHash",  "outputs": [],  "payable": false,  "stateMutability": "nonpayable",  "type": "function" }, {  "constant": true,  "inputs": [],  "name": "getHash",  "outputs": [   {    "name": "x",    "type": "string"   }  ],  "payable": false,  "stateMutability": "view",  "type": "function" }]

В каталоге «IPFS/SRC» создайте следующие файлы: web3.js , IPFS.JS и storehash.js Отказ

Файл 1 – web3.js

import Web3 from 'web3';
const web3 = new Web3(window.web3.currentProvider);
export default web3;

Файл 2 – Storehash.js

import web3 from './web3';
//Your contract addressconst address = '0x610dd75057738b73e3f17a9d607db16a44f962f1';
//Your contract ABIconst abi = [ {  "constant": false,  "inputs": [   {    "name": "x",    "type": "string"   }  ],  "name": "sendHash",  "outputs": [],  "payable": false,  "stateMutability": "nonpayable",  "type": "function" }, {  "constant": true,  "inputs": [],  "name": "getHash",  "outputs": [   {    "name": "x",    "type": "string"   }  ],  "payable": false,  "stateMutability": "view",  "type": "function" }]
export default new web3.eth.Contract(abi, address);

Файл 3 – IPFS.JS

const IPFS = require('ipfs-api');const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' });
export default ipfs;

Редактировать – index.js.

import React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './App';import registerServiceWorker from './registerServiceWorker';import 'bootstrap/dist/css/bootstrap.min.css';
ReactDOM.render(, document.getElementById('root'));registerServiceWorker();

Файл 4 – App.js

import React, { Component } from 'react';import web3 from './web3';import ipfs from './ipfs';import storehash from './storehash';import { Button } from 'reactstrap';
class App extends Component {
state = {      ipfsHash:null,      buffer:'',      ethAddress:'',      transactionHash:'',      txReceipt: ''    };
//Take file input from usercaptureFile =(event) => {        event.stopPropagation()        event.preventDefault()        const file = event.target.files[0]        let reader = new window.FileReader()        reader.readAsArrayBuffer(file)        reader.onloadend = () => this.convertToBuffer(reader)      };
//Convert the file to buffer to store on IPFS convertToBuffer = async(reader) => {      //file is converted to a buffer for upload to IPFS        const buffer = await Buffer.from(reader.result);      //set this buffer-using es6 syntax        this.setState({buffer});    };
//ES6 async functiononClick = async () => {try{        this.setState({blockNumber:"waiting.."});        this.setState({gasUsed:"waiting..."});
await web3.eth.getTransactionReceipt(this.state.transactionHash, (err, txReceipt)=>{          console.log(err,txReceipt);          this.setState({txReceipt});        });      }catch(error){      console.log(error);    }}
onSubmit = async (event) => {      event.preventDefault();
//bring in user's metamask account address      const accounts = await web3.eth.getAccounts();    //obtain contract address from storehash.js      const ethAddress= await storehash.options.address;      this.setState({ethAddress});    //save document to IPFS,return its hash#, and set hash# to state      await ipfs.add(this.state.buffer, (err, ipfsHash) => {        console.log(err,ipfsHash);        //setState by setting ipfsHash to ipfsHash[0].hash        this.setState({ ipfsHash:ipfsHash[0].hash });        // call Ethereum contract method "sendHash" and .send IPFS hash to etheruem contract        //return the transaction hash from the ethereum contract        storehash.methods.sendHash(this.state.ipfsHash).send({          from: accounts[0]        }, (error, transactionHash) => {          console.log(transactionHash);          this.setState({transactionHash});        });      })    };
render() {
return (        

Ethereum and IPFS using Infura


Choose file to send to IPFS



Tx Receipt Category Values
                                      IPFS Hash stored on Ethereum                     :                     {this.state.ipfsHash}                                                        Ethereum Contract Address                     :                     {this.state.ethAddress}                                                        Tx #                      :                     {this.state.transactionHash}                                                           
); }}export default App;

И это все!

Доступ к вашему DAPP в Localhost: 3000. Загрузите файл, и вы увидите генерацию хеша. Чтобы убедиться, что ваш файл загружен, доступа к нему через шлюз IPFS. Убедитесь, что вы принимаете запрашивания метамаска.

Доступ к файлу по адресу: https://gateway.ipfs.io/ipfs/your ipfs hash

Мой на: https://gateway.ipfs.io/ipfs/qmbyizshlirdfzhms75tdrrdivkaxkvbclpxzjb5k34a31.

Чтобы узнать больше о IPF, см. Мои другие статьи:

Узнайте, делая: хорошее и простое введение в межпланетарную файловую систему Грунтовка на IPFS Medium.freecodeCamp.org IPFS? И меркле лес? W H AT IPFS? HA cknoon.com.

Спасибо за чтение. Если вам понравилось, пожалуйста, хлопайте! Следуй за мной в Twitter @ niharika3297