1. 程式人生 > >通過實際部署應用程式來學習Web 3.0:動手實踐(IPFS +以太坊)

通過實際部署應用程式來學習Web 3.0:動手實踐(IPFS +以太坊)

“分散式網路”或“Web 3.0”現因其將給當今行業帶來的革命性變革已儼然成為流行語。但是我們中有多少人真正瞭解Web 3.0呢?

在本文中,我會對Web 3.0的顯著特點進行介紹。在獲得對Web 3.0的基本瞭解之後,我們將一起在IPFS上部署應用程式。該應用程式具有一份Solidity智慧合約能夠在以太坊虛擬機器上執行。以太坊+ IPFS的組合能夠使應用程式真正地實現分散式。

那我們開始吧!

為什麼Web3.0對我們來說如此重要?

Web 1.0是網際網路的誕生,那時候網際網路上的大多數呈現都是靜態的。在Web1.0中沒有任何互動性。使用者在網路中保持完全匿名,隱私保持完整,那是因為在其中沒有發生任何重大交易。網際網路是靜止的!這情況是我們今天無法想象的。然後在20世紀90年代進入Web 2.0。Web 2.0引發了像Alphabet、亞馬遜、微軟等巨頭的崛起。在Web2.0中人們網際網路上的互動暴增,但是人的隱私資訊卻得不到保障。

任何東西在網際網路上都不是私密並且受到保護的。

Web 3.0通過使使用者完全掌控自己的資料,來促使使用者拿回屬於自己的隱私權。Web 3.0支援的是民主而不是少數巨頭的壟斷。Web 3.0是分散式的而不是中心化的。從Web 2.0→Web 3.0的轉變將是循序漸進的,轉變不會在一夜之間就完成。加快這項程序最佳方法就是提高使用者的意識:當用戶的需求發生變化時,當前的業務要求也將發生變化。使用者需要意識到他們是他們資料的掌控者!如果有人能用他們的資料來賺錢,那個人也應該是他們自己。

如果你使用免費產品;那你就會成為產品。
在這裡插入圖片描述
在這裡插入圖片描述
Web3.0的特點

→沒有中心控制:谷歌,微軟,亞馬遜等公司將無法再控制您的資料。任何政府機構都無法遮蔽網站和限制服務。像以太坊這樣的區塊鏈將會不斷增加。簡而言之,再也沒有“中間商”。

→資料所有權:使用者將重新獲得對資料的完全控制權並且使用者的資料將具有加密安全性。目前,亞馬遜和Facebook等大公司擁有大量資料庫,可儲存價值數十億美元的資訊以改善其服務。

→大幅度減少黑客攻擊和資料洩露:由於資料將進行分散式地儲存,黑客將很難找到一個黑進系統的切入點。

→互動性:應用程式將能夠脫離裝置變得容易定製化,支援在智慧手機、電視、汽車、微波爐和智慧感測器上執行。目前,應用程式是特定用於作業系統中的,並且通常僅限於單個作業系統。例如,許多Android加密貨幣錢包在IOS系統上不可用,這對使用多個裝置的消費者帶來了不便。這種情況還增加了開發人員軟體多次迭代和更新所需要的費用。

→不限制區塊鏈:財富和其他數字資產可以在世界任何地方之間進行快速,高效地轉移。

→不間斷的服務:大幅減少帳戶暫停和DDoS,因為沒有單點故障,服務中斷將被降低至最小。資料將儲存在分散式節點上以避免發生冗餘,同時資料會有多個備份以防止伺服器故障或佔用。

檢視網際網路區塊鏈基金會了解更多資訊!

現在是實踐學習的時間啦!

為了節省文章的閱讀時間和篇幅,我已經準備好了基本程式碼。首先,從我的Github頁面中git clone倉庫。

在這裡插入圖片描述

niharrs/Blockchain-Voting
Blockchain-Voting - Powered by Ethereumgithub.com

這是一個基本的使用者意向調查應用程式,用來在《Friends》和《How I met your mother》之間舉行投票比賽(這兩個是非常著名的美國電視節目)。我個人喜歡《Friends》!

為了應用程式的順利執行,請確保安裝了以下內容:

  1. NodeJS
  2. Truffle Framework
  3. Ganache
    4.Chrome的Metamask外掛

確保GANACHE在這期間一直保持執行。

要執行該應用程式,請開啟控制檯並輸入以下命令:
$ npm install
$ truffle migrate --reset
$ npm run dev
第一個命令將從package.json檔案安裝必要的安裝包。

第二個命令在EVM上部署智慧合約。

第三個命令將啟用localhost伺服器。

您應該在螢幕上看到類似下面的內容:

在這裡插入圖片描述

讓我們來看看在Contracts資料夾中的智慧合約Election.sol:

pragma solidity ^0.4.2;

contract Election {
//Model candidate
struct Candidate {
uint id;
string name;
uint voteCount;
}
//Store accounts that voted
mapping(address => bool) public voters;
//Store candidates
mapping(uint => Candidate) public candidates; //Key Value pair
//Fetch candidates
//Store candidate count
uint public candidatesCount;

//Voted event
event votedEvent (uint indexed _candidateId);

function Election() public {
addCandidate(“Friends”);
addCandidate(“How I Met Your Mother”);
}

function addCandidate (string _name) private {
candidatesCount++;
candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
}

function vote (uint _candidateId) public {
//Require that they haven’t voted before
require(!voters[msg.sender]);
//Require a valid candidate
require(_candidateId > 0 && _candidateId <= candidatesCount);
//Record voter has voted
voters[msg.sender] = true;
//Update candidate vote count
candidates[_candidateId].voteCount++;
//Trigger voted event
votedEvent(_candidateId);
}
}
現在這個應用程式的問題在於它託管在中心化的localhost上。

解決的方式是把這個應用程式轉移到IPFS網路上。

為此,首先你應該安裝IPFS。

然後在你的終端上執行以下命令:

$ ipfs init
$ ipfs daemon

現在我們需要將JSON合同檔案和Src資料夾放在一個名為Dist的獨立資料夾中 。開始建立。

為此,請執行以下命令(如果您使用的是MacOS,則能夠順利執行),否則你可以試試手動執行。

$ mkdir dist
$ rsync -r src/ dist/
$ rsync -r build/contracts/ dist/

現在我們需要為IPFS節點進行叢集。

$ ipfs swarm peers

現在我們終於將Dist檔案新增到了IPFS上。

$ ipfs add -r dist/

複製dist的雜湊值,那是此列表中的最後一個。現在我們需要釋出雜湊。

$ ipfs name publish QmaikVh9TuP3QCZwi4efAgHxRUniQzhNz5yN7b3KggALsc
$ ipfs name publish {hash}
這條命令大概會耗時一分鐘。

現在登入IPFS上的我們的應用程式吧!

使用您的Web瀏覽器登入:gateway.ipfs.io/ipfs/{hash}

對於我來說是登入:
gateway.ipfs.io/ipfs/QmaikVh9TuP3QCZwi4efAgHxRUniQzhNz5yN7b3KggALsc

你看到的頁面應該是這樣的(耐心一點):

在這裡插入圖片描述

現在投票吧!

我投了《Friends》,因為我覺得非常好看!

如果您想要使用我的應用程式,請到以下地址進行投票:
https://gateway.ipfs.io/ipfs/QmaikVh9TuP3QCZwi4efAgHxRUniQzhNz5yN7b3KggALsc/ : 投票連結!

你可以通過MetaMask和 Ganache來使用不同的賬號進行投票。

這是一個完整的分散式應用程式。

如果你喜歡這個教程,請進行分享。

如果你有任何疑問,可以在評論中留言,或者給我發郵件:[email protected]