区块链投票系统怎么样? 2019-03-15 18:43:07      来源: 先行区块链(http://www.xianxingqkl.com)       浏览:111次     作者:light

  先行区块链投票系统怎么样?区块链系统开发需要学会任意一种语言,如Python,Ruby,Java。前端开发语言:HTML/CSS/JavaScript。

区块链投票系统怎么样?

  用户可以在不可信(trustless分布环境中对特定候选人投票,构建一个去中心化的Decentralized投票系统。利用这个投票系统。每次投票都会被记录在区块链上:

  所谓去中心化应用,就是一个不存在中心服务器应用。网络中成百上千的电脑上,都可以运行该应用的副本,这使得它几乎不可能呈现宕机的情况。

  基于区块链的投票是完全去中心化的因此无须任何中心化机构的存在

  之所以选择投票作为我第一个区块链应用,因为集体决策尤其是投票机制 以太坊的一个核心的价值主张。

  另一个原因在于,投票是很多复杂的去中心化应用的基础构件,所以我选择了投票应用作为学习区块链应用开发的第一个项目。

  初识区块链

  如果你熟悉关系型数据库,就应该知道一张数据表里可以包括很多行数据记录。例如,下面的数据表中包括了6条交易记录:

  实质上,区块链首先就是一个分布式(Distributed数据库,这个数据库维护了一个不断增长的记录列表。现在让我对数据进行批量(batch存储,比方每批 100行,并将各存储批次连接起来,不是就像一条链?

  区块链里,多个数据记录组成的批次就被称为块(block块里的每一行数据记录就被称为交易(transaction

  最开始的那个块,通常被称为创世块(genesiblock不指向任何其他块。

  不可篡改性

  区块链的一个显著特点是数据一旦写入链中,就不可篡改重写。

  保守的关系型数据库中,可以很容易地更新一条数据记录。但是区块链中,一旦数据写入就无法再更新了因此,区块链是一直增长的

  那么,区块链是如何实现数据的不可篡改特性?

  这首先得益于哈希(Hash函数 如果你还没接触过哈希函数,无妨将它视为一个数字指纹的计算函数:输入任意长度的内容,输出定长的码流(指纹)哈希函数的一个重要特性就是输入的任何一点微小变化,都会 导致输出的改变。因此可以将哈希值作为内容的指纹来使用。

  由于区块链里的每个块都存储有前一个块内容的哈希值,因此如果有任何块的内容被篡改,被篡改的块之后所有块的哈希值也会随之改变,这样我就很容易检测出区块链的各块是否被篡改了

  去中心化的挑战

  一旦完全去中心化,网络上就会存在大量的区块链副本(即:全节点)很多事情都会变得比之前中心化应用环境复杂的多,例如:

  如何保证所有副本都已同步到最新状态?

  如何保证所有交易都被广播到所有运行和维护区块链副本的节点计算机上?

  如何防止恶意参与者篡改区块链

  通过与经典的C/S架构的对比,将逐步理解去中心化应用的核心思路,并掌握如何构建以太坊上的去中心化应用。

区块链投票系统怎么样?

  C/S架构以服务器为中心

  理解去中心化应用架构的最好方法,就是将它与熟悉的Client/Server架构进行对比。如果你一个web开发者,应该对下图很了解,这是一个典型的Client/Server架构:

  一个典型web应用的服务端通常由 JavaRubyPython等等语言实现。前端代码由 HTML/CSS/JavaScript实现。然后将整个应用托管在云端,比方 A WSGooglCloudPlatformHeroku.。或者放在租用的一个VPS主机上。

  用户通过客户端(Client与 web应用(Server进行交互。典型的客户端包括浏览器、命令行工具(curlwget等)或者是A PI访问代码。注意在这种架构中,总是存在一个(或一组)中心化的web服务器,所有的客户端都需要 与这一(组)服务器进行交互。当一个客户端向服务器发出请求时,服务器处置该请求,与数据库/缓存进行交互,读/写/更新数据库,然后向客户端返回响应。

  这是熟悉的中心化架构。

  去中心化架构相互平等的节点

  下图给出了基于以太坊的去中心化应用架构:

  应该已经注意到每个客户端(浏览器)都是与各自的节点应用实例进行交互,而不是向一个中心化的服务器请求服务。

  一个理想的去中心化环境中,每个想要跟DA pp交互的人,都需要在计算机或手机上面运行 一个的完整区块链节点 简言之,每个人都运行一个全节点。这意味着,能够真正使用一个 去中心化应用之前,用户不得不下载整个区块链。

  不过我并非生活在一个乌托邦里,期待每个用户都先运行一个全节点,然后再使用你应用是不现实的但是去中心化背后的核心思想,就是不依赖于中心化的服务器。所以,区块链社区已经呈现了一些解决方案,例如提供公共区块链节点的Infura以及浏览器插件Metamask等。通过这些方案,就不需要花费大量的硬盘、内存和时间去下载并运行完整的区块链节点,同时也可以利用去中心化 优点。将会以后的课程中对这些解决方案分别进行评测。

  以太坊世界计算机

  以太坊是一种区块链的实现。以太坊网络中,众多的节点相互连接,构成了以太坊网络:

  以太坊节点软件提供两个核心功能:数据存储、合约代码执行。

  每个以太坊全节点中,都保管有完整的区块链数据。以太坊不只将交易数据保管在链上,编译后合约代码同样也保存在链上。

  以太坊全节点中,同时还提供了一个虚拟机来执行合约代码。

  交易数据

  以太坊中每笔交易都存储在区块链上。当你安排合约时,一次部署就是一笔交易。当你为候选者投票时,一次投票又是另一笔交易。所有的这些交易都是公开的每个人都可以看到并进行验证。这个数据永远也无法篡改。

  为了确保网络中的所有节点都有着同一份数据拷贝,并且没有向数据库中写入任何无效数据,以太坊目前使用工作量证明POWProofOfWork算法来保证网络平安,即通过矿工挖矿(Mining来达成共识(Consensus将数据同步到所有节点。

  工作量证明不是达成共识的唯一算法,挖矿也不是区块链的唯一选择。现在只需要了解,共识是指各节点数据实现了一致,POW只是众多用于建立共识的算法中的一种,这种算法需要通过矿工的挖矿来实现非可信环境下的可信交易。共识是目的POW手段。

  合约代码

  以太坊不仅仅在链上存储交易数据,还可以在链上存储合约代码。

  数据库层面,区块链的作用就是存储交易数据。那么给候选者投票、或者检索投票结果的逻辑放在哪儿呢?以太坊的世界里,可以使用Solidity语言来编写业务逻辑/应用代码(也就是合约:Contract然后将合约代码编译为以太坊字节码,并将字节码部署到区块链上:

  编写合约代码也可以使用其他语言,不过Solidity目前为止最流行的选择。

  以太坊虚拟机

  以太坊区块链不只存储数据和代码,每个节点中还包括一个虚拟机(EVMEthereumVirtualMachine来执行 合约代码 听起来就像计算机操作系统。

  事实上,这一点是以太坊区别于比特币(Bitcoin最核心的一点:虚拟机的存在使区块链迈入了2.0时代,也让区块链第一次成为应用开发者友好的平台。

  JS开发库

  为了便于构建基于webDA pp以太坊还提供了一个非常方便的JavaScript库web3.js封装了以太坊节点的A PI协议,从而让开发者可以轻松地连接到区块链节点而不用编写繁琐的RPC协议包。所以,可以在常用的JS框架 比方 reactjsangularj等)中直接引入该库来构建去中心化应用。

上一篇:区块链支付系统:全球贸易发展先驱

下一篇:农牧场鱼塘游戏区块链系统开发

本文链接:http://www.xianxingqkl.com/news/80.html