admin管理员组

文章数量:1530051

课程介绍

无论在科技圈还是金融圈,“区块链”俨然成了最热的词汇。2016年,区块链写入了国家的十三五规划中;2017年,央行基于区块链技术的数字票据交易平台测试成功;同年,工信部发布了首个区块链参考架构标准。
经过2017年如火如荼的投资盛宴,区块链开始逐渐走向应用落地,业内都在积极探索使用场景。如金融领域的资产贸易、支付系统、金融服务,其他领域的电子商务、社交通讯、游戏娱乐等等。同时,BAT、迅雷、小米、网易等互联网龙头企业纷纷加入研发队伍中。
正如移动互联网兴起之时一样,区块链 DApp 应用市场初期肯定会有一波红利期。对此有兴趣的开发者,不可错过。


以太坊是现阶段业内生态最好的公链,本达人课的内容将基于以太坊平台,共包含四大部分:


第一部分(第 01-02 课),介绍以太坊相关概念及开发环境的准备,包括以太坊节点、EVM 虚拟机、Gas 机制及开发测试用的私有链 Ganache。


第二部分(第 03-05 课),从编写简单的 Hello world 合约入手,学习智能合约的开发、编译、部署及网页与智能合约的交互,并学习通过 Truffle 开发框架快速构建 DApp 应用,及如何将合约部署到 Ropsten 测试网和主网。


第三部分(第 06-07 课),基于对 Solidity 语法的深入学习,来实现目前市场上最流行的空投合约,加深对智能合约开发的理解与应用,全方位提升您的技术实力与思维方式。

第四部分(第 08 课),开发实现以太坊钱包转入、转出功能,初步了解以太坊钱包的基础功能。

作者简介

旷文杰,资深 PHP 开发,曾就职于阿里巴巴旗下美妆电商平台。现在区块链领域深耕,在某区块链创业公司任技术经理,对以太坊智能合约有较深入的研究。热爱技术交流,常在个人博客上分享技术心得。

课程内容
第01课:理解以太坊相关概念

2009年比特币开创了去中心化加密货币的先河,同时也诞生了具有划时代意义的区块链技术。分布式数据存储、点对点传输、共识机制、加密算法等计算机技术组成了新型应用模式。然而比特币也并不完美,它只能当作支付手段,无法围绕它建立应用生态。所以业内称比特币为区块链1.0。

2013年,俄罗斯90后 Vitalik Buterin 在基于比特币的区块链技术基础之上,提出了以太坊平台。一个开源的、图灵完备的、有智能合约功能的、下一代加密货币与去中心化应用平台。 经过近五年的时间发展,以太坊已经成为业内公认的最好的公链之一,围绕它的生态建设已经初具规模。我们称之为区块链2.0。

本达人课基于以太坊平台,快速带领大家学习以太坊智能合约的开发,并掌握去中心化应用的开发、编译、部署的完整过程。在开始之前,本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领大家轻松入门。

以太坊

以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。

有没有感到和 iOS、Android 平台有点类似?

在区块链1.0时代,我们如果需要编写区块链应用需要先从 Github 上 Download 一份比特币源码,然后修改底层代码如网络协议、共识机制、加密算法等等,再发布到网络中。2013、2014年的很多山寨币就是这样产生的,改一改比特币的代码,甚至是调整其中的某些参数就造出了一个新的应用、新的币种。

而以太坊平台,是对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只需专注于应用本身,而不用关注底层技术的具体实现,从而大大降低了难度。我们可以简单的理解,以太坊平台提供了很多模块让用户来搭建应用。如果将搭建应用比作造房子,那么以太坊就提供了地基、墙面、屋顶、地板等模块。用户只需像搭积木一样就可以把房子搭起来,而且房子的布局、装饰等等都是可以随意组装的。因此,在以太坊平台上可以快速建立去中心化应用,并且成本也更低。

目前围绕以太坊已经形成了一个较为完善的开发生态圈:社区支持、开发框架、开发工具等等。

以太坊客户端(节点)

一个以太坊客户端就是一个以太坊节点。它提供账户管理、数字资产管理、挖矿、转账、智能合约的部署和执行等等功能。对于我们开发者来说,它就是一个开发者工具。

需要注意的是,在区块链网络中是没有中心服务器的。所有以太坊节点组成了以太坊的整个区块链网络,每个节点都在无时无刻同步区块数据。

如上图所示(图片来自网络),左边是去中心化的网络,右边是中心化网络。我们举个不恰当的例子来加深理解。在浏览器——服务器架构中,服务器是中心化的,所有的动态数据都保存在服务器端。如果服务器发生故障,则所有的浏览器端都无法正常访问应用。而在区块链的去中心化网络中,所有的节点都会保存相同的数据,任意节点发生故障,都不影响整个区块链数据的写入与读取。

Geth 是典型的以太坊客户端。Geth 这个名字是 Go Ethereum 开源项目的简称。它是基于 Go 语言开发且实现了 Ethereum 协议的客户端软件。

Geth 提供了一个交互式命令控制台,通过命令来操作以太坊的各种功能(API)。

Geth 会一直同步以太坊区块链上的所有数据。目前 fast 同步模式下,数据量已经有近 70G;full 同步模式下,已经达到了几百 G。

在开发过程中,我们推荐使用以太坊区块链的私有链 Ganache (只有几百 M),免去同步以太坊全部区块数据的麻烦。在后续的文章中会介绍 Ganache。

账户

以太坊中账户分为两类:

  • 外部账户(EOA)

    该类账户被公钥——私钥对控制(用户),没有关联任何代码。 外部账户的地址由公钥衍生而来。

  • 合约账户(CA)

    该类账户为智能合约分配的账户,被合约代码控制且有代码与之关联。 智能合约的部署会把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址就是合约账户。

合约账户存储了代码,外部账户则没有。除了这点之外,这两类账户对于以太坊虚拟机(EVM)来说都是一样的。

如上图所示,外部账户与外部账户之间交易仅仅是转账。但是外部账户到合约账户,是可以激活各种操作的。

智能合约

网络上关于智能合约的解释都很晦涩。我们可以简单的理解为在区块链上,由事件驱动、以代码形式存在、可执行的特殊交易合同。它是代码与数据的集合,是以太坊的核心。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等场景。同时,智能合约在其他行业中的应用场景同样值得期待。

目前除数字货币之外,真正落地的应用还不多,业内各方都在积极探索使用场景和可落地应用。和移动互联网刚兴起之时,各行各业的 App 如雨后春笋般爆发一样,去中心化应用的市场在初期肯定有一个红利期。大家可抓住这波机会。

Solidity

Solidity 是一门和 JavaScript 类似的编程语言,文件扩展名以 .sol 结尾。它用于智能合约的开发,并能编译成以太坊虚拟机(EVM)字节码,部署到以太坊底层区块链网络上。

以太坊虚拟机(EVM)

EVM 即以太坊虚拟机,全称是 Ethereum Virtual Machine。它是以太坊智能合约的运行环境。

  • EVM 是由以太坊节点提供。每个以太坊节点中都包含 EVM。
  • Solidity 之于 EVM,就像 Java 跟 JVM 的关系一样。
  • 以太坊虚拟机是一个隔离的环境,在 EVM 内部运行的代码跟外部没有联系。

EVM 运行在以太坊节点上,当我们把合约部署到以太坊区块链网络上之后,合约就可以在以太坊网络中运行了。

合约编译

以太坊虚拟机上运行的是合约的字节码,类似于汇编语言。这就需要我们在部署之前先对合约进行编译,转换成字节码。

推荐使用 solc 编译器。

合约部署

合约部署就是将编译好的合约字节码,通过外部账号以发送交易的形式部署到以太坊区块链网络上。由实际矿工出块之后,才会真正部署成功。

合约运行

合约部署后,当需要调用这个智能合约的方法时,只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在 EVM 中执行了。

Gas

Gas 即矿工费。以太坊上每笔交易的执行(被矿工打包)都会被收取一定数量的 Gas。Gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当 EVM 执行交易时,Gas 将按照特定规则被逐渐消耗,无论执行到什么位置,一旦 Gas 被耗尽,将会触发一个 out of gas 异常。当前调用帧所做的所有状态修改都将被回滚。如果执行结束,还有gas剩余,这些 Gas 将会返还给发送账户。因此,我们需要一个有以太币余额的外部账户,来为发起的交易支付 Gas。

如果没有这个限制,就会出现无法停止(如:死循环)的合约来阻塞以太坊区块链网络。

Gas 可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量、类型、占用的内存等等),所需的 Gas 就越多。Gas 的最小单位是 wei:

1eth=$10^{18}$wei=$10^{9}$gwei

GasLimit:愿意支付矿工费的上限。 GasPrice:矿工费单价。

gas = GasLimit * GasPrice

去中

本文标签: 以太合约智能