cnblogsArticle icon indicating copy to clipboard operation
cnblogsArticle copied to clipboard

从零开始学习以太坊编程(二)-- Smart Contract & GAS &GETH

Open chokcoco opened this issue 6 years ago • 1 comments

本文接上篇文章。从零开始学习以太坊编程(一)-- 环境准备与基础知识

好的技术文章很难写,简单地介绍原理让大家都能懂的,也就仅仅只能局限于知道个原理,浮于表面。直接细读源码的,看似深入,实际上容易让人乏味,食之无味,枯燥的很,直接会把 90% 的人挡在门外。

我期望我的产出即是阳春白雪,又可如下里巴人,门外汉看得下去,凑个热闹学点基础,专业人士也可以从中学到很多东西。也希望大家多多支持。

OK,下面开始正文。

阅读本文,你需要:

  1. 最好你是程序员,或者有一点点编程基础;
  2. 对软件的系统/架构以及数据结构稍微有所了解;
  3. 提前了解一下 merkle tree 的基本概念?

本文将会是基础知识以及代码的混搭风格串讲。

智能合约(Smart Contract)

早些时候,BTC 诞生之初。是没有智能合约这一说的,也就是我们传统所说的区块链1.0时代。

区块链1.0是以比特币为代表的分布式(去中心化)的数字货币数字货币应用。其场景包括支付、流通等货币职能。

区块链1.0的其中一个重大局限在于,只满足数字货币的交易和支付功能使得该应用不能被大范围地普及到生活中,给日常生活带来的益处十分有限,区块链的概念也难以深入人心。

直到 ETH 的出现,对智能合约的普及(也就是我们常说的区块链2.0时代)改变了区块链技术仅能类似 BTC 这样作为货币的局限。

智能合约并非 ETH 首创,只是由 ETH 发扬光大。 智能合约是 1990 年代由尼克萨博提出的理念,几乎与互联网同龄。由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境。

通俗的说,所谓智能合约,其实就是一段代码,它按照编写者设定的那样,运行在类似以太坊 ETH 这样的平台公链之上。

合约规定了什么时候达成什么条件执行什么,类似以太坊这样的平台为这段代码提供了一些重要的报障:

  • 每个合约的唯一标识
  • 合约的不可变性;
  • 确定性操作;
  • 合约的分布式;
  • 随时可验证合约状态等。

由于区块链的特性(去中心化的、天生可以为智能合约提供可信的执行环境),使得它与智能合约完美契合。

智能合约非常强大且有魅力。

GAS!GAS!

OK,我们都知道,在使用 ETH 钱包转账的时候,每一笔都需要一笔矿工费。Why?

原因在于,转账行为本质上其实也是执行一段代码,用我们上文介绍所言,就是一条智能合约。

而在 ETH 平台上,每执行一条智能合约,都是需要消耗一定的 GAS 的。

怎么理解呢?智能合约在网络的各个节点上平稳运行,其实每时每刻都是在经历大量的计算(也就是我们常说的挖矿计算行为),而执行计算是需要花费金钱的,目的在于避免 DDoS 攻击,在 ETH 平台中花费的就是 GAS。在以太坊虚拟机(EVM)中的每个不同粒度级别的操作都需要花费一定量的 GAS 来执行。

OK,那么我们在使用钱包转账的时候,矿工费可以由我们自己调节。这表明 GAS 的价格是由市场决定,类似于比特币的交易费用。如果您支付更高的 GAS 价格,节点将优先处理您的交易。

EVM -- Go Ethereum

好的,讲到这里,下面的内容将会越来越专业。上面提到了一下 EVM,即是以太坊虚拟机。

以太坊虚拟机 EVM 是智能合约的运行环境。它是一个完全独立的沙盒,合约代码在 EVM 内部运行,对外是完全隔离的。

为此,为了验证及测试编写的智能合约,我们需要下载以太坊虚拟机,亦就是 Go Ethereum。

Go Ethereum

Go Ethereum 是以太坊区块链项目的三个原始实现(以及 c++ 和 python )之一,使用 Go 语言实现,完全开源并使用开源协议 GNU LGPL v3 许可。 Geth 是其简称,也是可执行程序的默认名称。

接下来,我们可以在官方下载 Geth

image

这里我用的 windows 系统,所以选择 Geth 1.8.2 for Windows 。下载完成好,点击运行安装,勾选上 Geth 以及 Development tools

image

OK,得到如下目录文件夹。

image

在该文件夹下,打开命令行,输入 geth ,查看是否安装成功,如果展示如下信息,表示成功:

image

最后

至此,所有相关环境都已经搭建完毕。下一节开始,将进入真正的编程环节。:)

任何技术问题交流,或者有志学习 ETH 编程的,可以加 Q 群交流:互联网区块链技术交流 -- 483931379

chokcoco avatar Mar 20 '18 15:03 chokcoco