星鉴网>技术干货>通过实际部署应用程序来学习Web 3.0:动手实践(IPFS +以太坊)

通过实际部署应用程序来学习Web 3.0:动手实践(IPFS +以太坊)

2018/11/3 15:50:47 1218人阅读

【导读】 “分布式网络”或“Web 3.0”现因其将给当今行业带来的革命性变革已俨然成为流行语。但是我们中有多少人真正了解Web 3.0呢?

“分布式网络”或“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来使用不同的账号进行投票。


这是一个完整的分布式应用程序。


如果你喜欢这个教程,请进行分享。


如果你有任何疑问,可以在评论中留言,或者给我发邮件:niharika.3297@gmail.com

5

参与讨论

登录后参加评论......

全部评论 0

作者

返回顶部