【产品经理学技术】一个产品经理的区块链学习指南(四)

Posted by zhang on

本文主要列举下一些产品经理应该知道的以太坊的基础概念:以太坊虚拟机、合约(智能合约)

在上几周的文章里,我们知道了一个名叫「以太坊」的区块链网络,以及我之所以对其感兴趣的原因:「以太坊」为普通的开发人员提供了构建任意复杂的区块链(分布式、互相不可信、抗屏蔽、防宕机)程序成为可能。

从实质上讲,「以太坊」将区块链的底层操作进行了封装,使其抽象化。同时,可以让人们使用高级编程语言操作区块链。

在实际学习过程中,为了更好的理解区块链技术以及「以太坊」平台,作为一个文科生(不要笑,我真的是文科生!),我决定在「以太坊网络」搞一些东西。实践出真知嘛,在实际操作的过程中学习一些它的机制。不过,似乎这并不是一个好主意——我体会到的文科生的无助,看不懂啊/(ㄒoㄒ)/~~

幸好,完成的百度和 Google 帮助了我。通过查看官方文档以及在Stack Overflow、Segmentfault、Github 这些程序员「同X 交友」网站里反复查找,终于让开发环境在我的虚拟机中工作了,并且成功建立四个「以太坊」的私有链节点,形成了一个私有测试网络。

不过写代码并不是我的专业,作为产品经理我们也不用实际去写代码。所以这篇文章,主要对一些概念和方法进行说明,并不会实际涉及到代码层面的东西。毕竟我们不能抢程序猿小哥的饭吃。另外要强调的是,这些内容均来自于以太坊的官方文档,我仅仅是做了整理而已。

ok,废话不在说了。进入正题。

「以太坊」网络的左右护法:以太坊虚拟机和P2P(点对点)网络

「以太坊」为了实现可以通过一些对用户比较友好的方式来开发区块链程序,构建了一个「Ethereum Virtual Machine」(EVM,以太坊虚拟机)。虚拟机就是一种抽象化的计算机,我们可以把它理解成是一个翻译器——它可以理解高级编程语言的指令和逻辑顺序,并根据所在机器的系统和硬件情况,将其翻译成计算机能听得懂的「低级语言」。开发者只需要维护一套代码,即可实现「以太坊」网络上的不同硬件环境、不同操作系统的节点都可以运行的「以太坊」 DAPPs,不用为每一种硬件组合、每一种操作系统去编写不同的代码。这并不是「以太坊」的首创,Java 就有 Java 虚拟机(JVM)。

至于P2P(点对点)网络,并不是个人网络借贷哈。看过「快播」的同学都知道应该都知道 P2P 网络,学名叫「对等网络协议」,是区块链技术的底层基础。「以太坊」也不例外,它的底层网络也会由一个各个节点都运行着 EVM 的 P2P 网络来实现,并且确保每个节点可以处理相同的指令,确保对任何特定交易的一致性。

Account(账户)

在《一个产品经理的区块链学习指南(三)》中,我提到了「比特币」网络中,是以 UTXOs 为中心的,通俗一点说「比特币」网络纯粹是一个关于交易的列表,同时只有两种状态,这使得「比特币」网络在实际应用中异常困难。而「以太坊」则是建立在 Account(账户)概念上的,「以太坊」追踪每个账户的状态,「以太坊」区块链上的所有状态转换都是账户间价值和信息的转移。

在「以太坊」中,账户被分为两种:

  • 外部账户(EOAs): 一个由人类通过私钥来控制的账户,没有相关代码,有 Ether(以太币)余额,发送交易(以太币交易)或触发合约代码;
  • 合约账户:只能由外部账户来激活,由这个「合约账户」的「智能合约」代码来控制,有 Ether(以太币)余额,也可以触发其它的合约账户。在「以太坊」网络中存在。

如果你想参与到「以太坊」网络中来,首先你要拥有一个用户账户和操作这个账户的密钥,这些账户就是外部账户(EOAs)。一旦拥有了 EOA,你就可以与其他 EOA 或者合约账户来进行交易了。

合约账户

外部账户大家很好理解,大家可以类比目前互联网应用的账户体系。

而「合约账户」则比较特殊,它包含了执行特定功能的代码,该代码「存活」在以太坊网络中。一旦达成触发条件,「合约账户」就会被 EOAs 或者其他的合约账户触发,内含的代码会由网络中的每个参与节点上的 EVM 执行。这就是智能合约。

智能合约

之前的文章里也提到过「智能合约」这个概念。我们可以理解成是通过「真·不用中间商赚差价」的方式来实现价值交换。一般创建「智能合约」的步骤如下:

  1. 建立包含规则以及基于这些规则的制定操作的合约账户,比如:如果 A事件为真,则执行 B。
  2. 利用高级语言编写合同,目前的高级语言主要有 Solidity(类似于 JavaScript,目前最受欢迎的以太坊编程语言)和 Serpent(类似 Python)。并将合同在「以太坊」网络部署。
  3. 一旦部署,合约获得一个公钥地址,用于达成合同并触发其代码执行。
  4. 另外,一旦只能合约被部署到以太坊区块链中,即使创建它的 EOA 也不能修改。(区块链只能增,查,不能删,改。)

一个简单的智能合约就是一个没有任何第三方参与的托管账户。合约参与方可以商定一套资金分配的规则,创建和编写智能合约,并将其部署在以太坊区块链上。一旦标准/规则得到满足,合同就可以把资金分配给适当的各方。

Ether(以太币)

和「比特币」网络一样,在交易中「以太坊」用户必须向网络缴纳一定量的交易费用,这样的设计是一是为了促进「矿工」的工作积极性,二也可以避免无关紧要或者恶意运算任务的干扰。

在「以太坊」中,交易费用用 Ether (以太币)的形式来支付。

「以太币」的单位

虽然我们一直再说「你有几个以太坊」,但是「以太币」的单位并不是个。它最小的单位叫做「wei」,这是「以太坊」网络的默认单位,然后每1000进一个单位。1 ether(即1个以太币)=1e18 wei(10的18次方 wei),一般常用的单位是 eth,Gwei(1e9 wei) 和 wei
以太币单位换算表

没有币就不能玩了么?

那么如果没有 Ether ,还想进行「以太坊」网络的实验,可以使用 Modern 测试网或者自己部署私有测试网络。

Modern 测试网是个公开的「以太坊」替代测试网,可以通过挖矿或者直接获取的方式,获取一些测试币。

至于如何架设私有测试网络,太技术了,有空再说。下一篇来说说如何在以太坊区块链上进行账户交易,和到底什么是 Gas 以及EVM 中消耗的费用问题。