赞
踩
本以太坊教程主要是介绍:搭建一个开发环境、编写编译一个智能合约。
以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(“以太虚拟机” Ethereum Virtual Machine)来处理点对点合约。
以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin,受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹得以开始发展。目前以太币是市值第二高的加密货币,仅次于比特币。
以太坊区块链有 2 个主要组件:
1. 数据存储:网络中每笔交易都存储在区块链上。当你部署合约时,就是一笔交易。当你执行合约功能时,也是另一笔交易。所有的这些交易都是公开的,每个人都可以看到并进行验证。这个数据永远也无法篡改。为了确保网络中的所有节点都有着同一份数据拷贝,并且没有向区块链中写入任何的无效数据,以太坊使用一个叫做工作量证明的算法来保证网络安全。
2. 代码:就数据的层面而言,区块链就是存储交易。在以太坊的世界里,你可以通过一个叫 Solidity 的语言编写逻辑/应用代码(也就是智能合约)。然后用 solidity 编译器将代码编译为以太坊字节码,并将字节码部署到区块链上(也有一些其他的语言可以写合约,不过 solidity 是到目前为止用得最多也是相对更容易的选择)。所以,以太坊不仅仅会存储交易数据,它还会存储和执行智能合约代码。
可以简单的理解以太坊区块链的作用就是存储数据和代码,并在 EVM(Ethereum Virtual Machine,以太坊虚拟机)中执行代码。
为了进行以太坊开发,你应该对以下语言/技术有基本了解:
为了构建以太坊去中心化应用即Dapp(Decentralized application),以太坊有一个非常方便的 JavaScript 库即 web3.js,你也可以在一些 js 框架中直接引入该库构建应用,比如 react,angular,vue 等。
以太坊教程示例中,我们将会构建一个简单的去中心化投票应用。所谓去中心化应用,就是一个不只存在于某一中心化服务器上的应用。在网络中成百上千的电脑上,会运行着非常多的应用副本,这使得它几乎不可能出现宕机的情况。你将会构建一个投票应用,在这个应用中,你可以初始化参与选举的候选者,并对候选者投票,而这些投票将会被记录在区块链上。你将会经历编写投票合约,部署到区块链并与之交互的整个过程。你将会了解什么是一个合约,将合约部署到区块链上并与之交互意味着什么。
本质上,区块链就像是一个分布式数据库,这个数据库维护了一个不断增长的记录链表。如果熟悉关系型数据库,你应该知道一张表里有很多行的数据。现在,对数据进行批(batch)量处理(比如每批 100 行),并将每个处理的批次相连。就可以形成一个区块链了!在区块链里,每个批次的数据就叫一个块(block),块里的每一行就叫一笔交易(transaction)。
现在,你对以太坊已经有了基本了解,我们可以开始构建投票的 dapp 了。这将会加强你对以太坊的认识,并且初略了解以太坊的功能。
示例是 Ubuntu 16.04 下的学习环境搭建,你只需要成功安装了 nodejs 和 npm,就可以继续项目的下一步了。
我们通过 npm 安装 ganache 和 web3 包来为以太坊教程提供支撑。我们也需要安装 solc来编译合约。
下面是安装过程:
点击(此处)折叠或打开
点击(此处)折叠或打开
为了便于测试,ganache 默认会创建 10 个账户,每个账户有 100 个以太。如果你还不懂什么是账户,把它想象成存钱的银行账户就可以了(以太(Ether,ETH)就是以太坊生态系统中的 钱/货币)。你需要用这个账户创建交易,发送/接收以太。
如果你还没有安装 homebrew,请按照 https://brew.sh/ 的指示安装 homebrew。homebrew 是一个包管理器,它可以帮助我们安装开发所需的所有其他软件。按照下面的指示安装所有其他所需的包。
点击(此处)折叠或打开
我们通过 npm 安装 ganache 和 web3 包。我们也需要安装 solc 来编译合约。
如果安装成功,运行命令node_modules/.bin/ganache-cli,应该能够看到右图所示的输出。
点击(此处)折叠或打开
为了便于测试,ganache 默认会创建 10 个账户,每个账户有 100 个以太。如果你还不懂什么是以太坊账户,把它想象成存钱的银行账户就可以了(以太(Ether, ETH)就是以太坊生态系统中的钱/货币)。你需要用这个账户创建交易,发送/接收以太。
现在已经安装好 ganache 并运行,我们将会开始编写第一个以太坊智能合约。
我们会使用 solidity 编程语言来编写合约。如果你熟悉面向对象编程,学习用 solidity 写合约应该非常简单。我们会写一个叫做 Voting 的合约(可以把合约看成是面对对象编程语言的一个类),这个合约有以下内容:
当你把合约部署到区块链的时候,就会调用构造函数,并只调用一次。与 web 世界里每次部署代码都会覆盖旧代码不同,在区块链上部署的合约是不可改变的,也就是说,如果你更新合约并再次部署,旧的合约仍然会在区块链上存在,并且数据仍在。新的部署将会创建合约的一个新的实例。
点击(此处)折叠或打开
将右侧代码拷贝到一个叫做 Voting.sol 的文件中,并保存到 chapter1 目录下面。
代码和解释
你也会注意到每个函数有个可见性说明符(visibility specifier)(比如本例中的 public)。这意味着,函数可以从合约外调用。如果你不想要其他任何人调用这个函数,你可以把它设置为私有(private)函数。如果你不指定可见性,编译器会抛出一个警告。最近 solidity 编译器进行了一些改进,如果用户忘记了对私有函数进行标记导致了外部可以调用私有函数,编译器会捕获这个问题。 这里 可以看到所有的可见性说明符。
你也会在一些函数上看到一个修饰符 view。它通常用来告诉编译器函数是只读的(也就是说,调用该函数,区块链状态并不会更新)。所有的修饰符都可以在 这里 看到。
我们将会使用上一节安装的 solc 库来编译代码。如果你还记得的话,之前我们提到过 web3js 是一个库,它能够让你通过 RPC 与区块链进行交互。我们将会在 node 控制台里用这个库部署合约,并与区块链进行交互。
首先,在终端中运行 node 进入 node 控制台,初始化 web3 对象,并向区块链查询获取所有的账户。
确保与此同时 ganache 已经在另一个窗口中运行
为了编译合约,先从 Voting.sol 中加载代码并绑定到一个 string 类型的变量,然后像下边这样对合约进行编译。
点击(此处)折叠或打开
当你成功地编译好合约,打印 compiledCode 对象(直接在 node 控制台输入 compiledCode 就可以看到内容),你会注意到有两个重要的字段,它们很重要,你必须要理解:
教程参考汇智网的DAPP开发入门教程,如果大家等不及博客更新,也可以直接访问这个以太坊教程。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30465631/viewspace-2154940/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30465631/viewspace-2154940/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。