区块链区块链系统教程

以太坊搭建去中心化的投票系统(一)开发前准备

2018-06-05  本文已影响11人  豆瓣奶茶

原文链接:http://skycoin.top/index.php/archives/18/

1、以太坊介绍

image.png

右图,每个客户端(浏览器)与应用实例进行交互。这意味着,在一个理想的去中心化世界中,每个想要跟 dapp(去中心化应用)交互的人,将需要在他们的计算机/手机等等上面运行一个的完整区块链副本(简言之,每个人都运行一个全节点)。这意味着,在能够真正使用一个应用之前,你必须去下载整个区块链。不过我们并非生活在一个理想世界,期待每个人运行一个全节点来使用一个应用是不太现实的。但是去中心化背后的思想,就是不依赖于一个单一/中心化的服务器。所以,社区想出了一些方案(托管区块链的服务器, metamask 等等),通过这些方案,你就不需要花费大量的硬盘和内存下载运行一个完整的区块链副本,同时不损于去中心化。我们将会以后的课程中对这些方式进行评测。

那么,以太坊区块链到底是什么?区块链有 2 个主要组件:

  1. 数据库:网络中每笔交易都存储在区块链上。当你部署合约时,就是一笔交易。当你为候选者投票时,又是另一笔交易。所有的这些交易都是公开的,每个人都可以看到并进行验证。这个数据永远也无法篡改。为了确保网络中的所有节点都有着同一份数据拷贝,并且没有向数据库中写入任何的无效数据,以太坊使用一个叫做工作量证明的算法来保证网络安全。(http://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use)
  2. 代码:就数据库的层面而言,区块链就是存储交易。那么给候选者投票,检索所有投票的逻辑放在哪儿呢?在以太坊的世界里,你可以通过一个叫 <u style="box-sizing: border-box;">Solidity</u> 的语言编写逻辑/应用代码(也就是合约)。然后用 solidity 编译器将代码编译为以太坊字节码,并将字节码部署到区块链上(也有一些其他的语言可以写合约,不过 solidity 是到目前为止用得最多也是相对更容易的选择)。所以,以太坊不仅仅会存储交易,它还会存储和执行合约代码。

基本上,区块链就是存储数据和代码,并在 EVM(Ethereum Virtual Machine,以太坊虚拟机)中执行代码。为了构建基于 web 的 Dapp,以太坊也有一个非常方便的 JavaScript 库,叫做 web3.js,它可以连接到区块链节点。所以,你可以在一些有名的 js 框架,比如 reactjs,angularjs 等等中直接引入该库构建应用

开发准备

准备一

image.png
  1. 我们首先安装一个叫做 ganache的模拟区块链,能够让我们的程序在开发环境中运行。
  2. 写一个合约并部署到 ganache 上。
  3. 然后我们会通过命令行和网页与 ganache 进行交互。

从图中可以看到,与区块链进行通信的方式是通过 RPC(Remote Procedure Call)。web3js 是一个 JavaScript 库,它抽象出了所有的 RPC 调用,以便于你可以通过 JavaScript 与区块链进行交互。另一个好处是,web3js 能够让你使用你最喜欢的 JavaScript 框架构建非常棒的 web 应用。

准备二

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_7.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt-get install nodejs
node --version
v7.4.0
npm --version
4.0.5
mkdir -p ethereum_voting_dapp/chapter1
cd ethereum_voting_dapp/chapter1
npm install ganache-cli web3@0.20.1 solc
node_modules/.bin/ganache-cli

output

Ganache CLI v6.0.3 (ganache-core: 2.0.2)

Available Accounts
==================
(0) 0x5c252a0c0475f9711b56ab160a1999729eccce97
(1) 0x353d310bed379b2d1df3b727645e200997016ba3
(2) 0xa3ddc09b5e49d654a43e161cae3f865261cabd23
(3) 0xa8a188c6d97ec8cf905cc1dd1cd318e887249ec5
(4) 0xc0aa5f8b79db71335dacc7cd116f357d7ecd2798
(5) 0xda695959ff85f0581ca924e549567390a0034058
(6) 0xd4ee63452555a87048dcfe2a039208d113323790
(7) 0xc60c8a7b752d38e35e0359e25a2e0f6692b10d14
(8) 0xba7ec95286334e8634e89760fab8d2ec1226bf42
(9) 0x208e02303fe29be3698732e92ca32b88d80a2d36

Private Keys
==================
(0) a6de9563d3db157ed9926a993559dc177be74a23fd88ff5776ff0505d21fed2b
(1) 17f71d31360fbafbc90cad906723430e9694daed3c24e1e9e186b4e3ccf4d603
(2) ad2b90ce116945c11eaf081f60976d5d1d52f721e659887fcebce5c81ee6ce99
(3) 68e2288df55cbc3a13a2953508c8e0457e1e71cd8ae62f0c78c3a5c929f35430
(4) 9753b05bd606e2ffc65a190420524f2efc8b16edb8489e734a607f589f0b67a8
(5) 6e8e8c468cf75fd4de0406a1a32819036b9fa64163e8be5bb6f7914ac71251cc
(6) c287c82e2040d271b9a4e071190715d40c0b861eb248d5a671874f3ca6d978a9
(7) cec41ef9ccf6cb3007c759bf3fce8ca485239af1092065aa52b703fd04803c9d
(8) c890580206f0bbea67542246d09ab4bef7eeaa22c3448dcb7253ac2414a5362a
(9) eb8841a5ae34ff3f4248586e73fcb274a7f5dd2dc07b352d2c4b71132b3c73f0

HD Wallet
==================
Mnemonic:   cancel better shock lady capable main crunch alcohol derive alarm duck umbrella
Base HD Path: m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

如果你用的是基于 rpm 的发行版,就应该用的是 yum 而不是 apt-get。只要你成功安装了 nodejsnpm,就可以继续项目的下一步了。

正如上一节提到的,我们必须通过 npm 安装 ganache 和 web3 包。我们也需要安装 solc来编译合约。

如果安装成功,运行命令node_modules/.bin/ganache-cli,应该能够看到右图所示的输出。

为了便于测试,ganache 默认会创建 10 个账户,每个账户有 100 个以太。如果你还不懂什么是账户,把它想象成存钱的银行账户就可以了(以太(Ether,ETH)就是以太坊生态系统中的 钱/货币)。你需要用这个账户创建交易,发送/接收以太。在本课程的第 2 部分,我们将会详细介绍如何创建一个账户。

你也可以安装 GUI 版本的 ganache 而不是命令行版本,在这里下载 GUI 版本:http://truffleframework.com/ganache/

原文链接:http://skycoin.top/index.php/archives/18/

上一篇下一篇

猜你喜欢

热点阅读