入门篇(一)理解区块链原理与以太坊的运行机制

前言

本篇文章记录着自己接触区块链,学习以太坊的一些笔记以及自己的学习路径,让跟我一样刚学习的人,更容易地学习区块链技术。学完下面部分内容,我们会把左脚迈进区块链开发的大门,理清区块链世界的核心术语,以及入门以太坊开发需要掌握的基本概念,以及这些概念之间的连接关系。读完这篇,你将创建并拥有自己的以太坊钱包,完成第一笔转账交易,并且拿到价值$10000的测试资金。

1、区块链简明发展史:比特币?以太坊?EOS?

2、区块链核心概念:什么是账户?什么是交易?什么是区块?什么是区块链?什么是区块高度?什么是区块时间?

3、以太坊核心概念:什么是以太坊网络?与以太坊网络交互的几种方式?

4、什么是以太坊账户?账户的基本要素?怎么创建账户?怎么使用钱包(Metamask)?

5、如何为我们的账户充值价值$10000的测试资金?

6、什么是钱包助记词(Mnemonic Phrases)?什么是HD钱包?解决了什么问题?有什么好处?

7、以太坊转账基本常识?如何查看账户状态?如何查看交易状态?为什么交易会有延迟?

8、什么是汽油Gas?为什么会有Gas?Gas的作用是什么?

1、区块链简明发展史:比特币?以太坊?EOS?

1.1 比特币

在解释比特币之前,先来看看比特币的增值有多么恐怖!如果你在2017年初花了1w块钱买比特币,2017年底已经变成10w了!如果你在2013年花1w块钱买比特币,2017年底已经变成100w了!

比特币是一种全球化的数字货币,不像人民币一样能看到实物,他就是存在于互联网上的货币。

其实我们现在的货币已经开始数字化了。现在出门吃喝玩乐买东西都不需要带现金,只要有微信或者支付宝就行了。

比特币就做的更彻底一点,完全不存在现金,你的钱都存在一个类似支付宝的钱包APP里,想要支付或者转账,直接在APP上操作就行,操作流程跟支付宝也没差太多,非常方便。

比特币是一个网名叫中本聪的哥们发明的,这哥们简直就是一个活雷锋,做好事不留名,大家只知道他的网名,但是没人知道中本聪在现实社会到底是谁。

比特币系统被大家称为革命性的发明,中本聪甚至被提名2016年诺贝尔经济学奖的候选人。甚至有人猜测他是未来世界的人,哈哈哈哈!说了这么多,大家只要知道:比特币是一种数字货币,是一个叫中本聪的哥们发明的,比特币跟你存在支付宝里的钱是类似的,可以用来买东西,可以很方便的转账。

1.2 以太坊

可以把以太坊视为大型计算机。但是其运行速度特别慢,大约比普通计算机慢5到100倍,而且成本非常昂贵。“以太坊计算机"与90年代罕见的智能手机的功能差不多,因此它的能力是有限的。

为什么说以太坊是全球性计算机呢?让我们来看到它的运行原理。

像其他区块链一样,以太坊需要数千人在他们的计算机上运行软件,从而驱动整个网络。网络中的每个节点(计算机)都运行着以太坊虚拟机(EVM)。可以把EVM视为一种操作系统,用于理解并执行以太坊特定编程语言编写的软件。以太坊虚拟机执行的软件或应用被称为“智能合约"。

要在这台全球性计算机上进行操作,你需要付费。但是,并不是使用美元、英镑等常规货币进行支付。而是使用网络原生的加密货币进行支付,即以太币(ether)。以太币与比特币几乎完全相同,除了前者还可以用于在以太坊执行智能合约的支付。

个人和智能合约都被视为以太坊的用户。无论人类用户做什么,智能合约也可以做。

1.3 EOS

EOS可以理解为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统。EOS是EOS软件引入的一种新的区块链架构,旨在实现分布式应用的性能扩展。注意,它并不是像比特币和以太坊那样是货币,而是基于EOS软件项目之上发布的代币,被称为区块链3.0。

EOS的主要特点如下:

1.EOS有点类似于微软的windows平台,通过创建一个对开发者友好的区块链底层平台,支持多个应用同时运行,为开发dAPP提供底层的模板。

2.EOS通过并行链和DPOS的方式解决了延迟和数据吞吐量的难题,EOS是每秒可以上千级别的处理量,而比特币每秒7笔左右,以太坊是每秒30-40笔;

3.EOS是没有手续费的,普通受众群体更广泛。EOS上开发dApp,需要用到的网络和计算资源是按照开发者拥有的EOS的比例分配的。当你拥有了EOS的话,就相当于拥有了计算机资源,随着DAPP的开发,你可以将手里的EOS租赁给别人使用,单从这一点来说EOS也具有广泛的价值。简单来说,就是你拥有了EOS,就相当于拥有了一套房租给别人收房租,或者说拥有了一块地租给别人建房。

2、区块链核心概念:什么是账户?什么是交易?什么是区块?什么是区块链?什么是区块高度?什么是区块时间?

2.1 账户

在区块链中有一个重要的概念就是账户(Account)。账户以地址为索引,地址由公钥衍生而来,取公钥的最后20字节。

2.2 交易

以比特币的交易为例,区块链的交易并不是通常意义上的一手交钱一手交货的交易,而是转账。如果每一笔转账都需要构造一笔交易数据会比较笨拙,为了使得价值易于组合与分割,比特币的交易被设计为可以纳入多个输入和输出,即一笔交易可以转账给多个人。从生成到在网络中传播,再到通过工作量证明、整个网络节点验证,最终记录到区块链,就是区块链交易的整个生命周期。

2.3 区块

区块链由一个个区块组成。数据通过载体形成文件,永久记录在数字货币网络上。我们把这个载体称之为区块(block),每一个区块就是一个数据库,无数的区块链接起来,就形成区块链。新的区块被添加到链的末端,数据一旦书写,就很难修改或删除。区块很像数据库的记录,每次写入数据,就是创建一个区块。

区块表达了区块链里面数据关系的最终呈现形式,一条记录,无论它是什么信息,最终它(或它的检索信息)都要被放置在一个区块中。而区块与区块之间,是一个“链表”的数据关系,会编程的人都知道什么是链表,就是后一个数据中存在指向前一个数据的索引键。因此,区块链上的任何两个数据永远可以通过这些索引键最终连在一起,数据无法逃离这个逻辑。

比特币的每个数据区块一般包含区块头(header)和区块体(Body)两部分。区块头封装了前一个区块的散列值(Prev_Hash)、时间戳(Timestamp)、随机数(Nonce)、Merkle树的根植(Tx_Root)和当前区块的散列值等信息。区块体中则主要包含交易计数和交易详情。

2.4 区块链

区块链是中本聪发明的比特币使用的底层技术架构。它本身是一串连接的数据区块,区块之间的连接指针是区块头散列指针,他们是使用密码学散列算法生成的。

简单地说,区块链就是一个数据库。它是包含特定数据,并不断增长的数据库。区块链具有很强大的性能:

  1. 一旦数据存储在数据库中,就永远不会被修改或删除。区块链上的每条记录都是永久不变的。

  2. 维护该数据库的不是个人或组织; 而是数千人在维护,并且每个人都有自己的数据库副本。

那么,怎样保持每个人的数据库副本同步呢? 假设网络中有十个人,每个人都有空文件夹和一个空白页面。每当有人在网络中进行了重要操作,比如转移资金等,他们就会将此广播给网络中的每个人。

每个人都在页面上进行记录,直到页面填满。当填满时,每个人需要通过解决数学难题来对页面内容进行确认。解决数学难题可以确保每个人的页面都具有相同的内容,并且永远不会被修改。率先完成的人将获得一定数量的加密货币。

一旦页面被确认就会被添加到文件夹中,接着出现新的页面,继续持续这个过程。

随着时间的推移,包含着重要记录(交易)的页面(块)会被添加到文件夹(链),从而形成数据库(区块链)。

区块链可用于存储任何类型的数据,当中的数据具有一定价值。

2.5 区块高度

所谓块的高度,是区块高度的简称。区块通过规则链接在一起构成了区块链,创始区块默认高度为0,其后一个区块高度为1,以此类推(区块链的规则是系统只认可长度最长的区块链条)。举例:某一个区块的高度为386357,意味着从创世区块到当前的这个区块最长的链条区块数为386357+1个。区块高度可以用来识别区块在区块链中的位置,并据此找到和这个区块相关的所有基础属性和交易记录。

2.6 区块时间

区块链通过时间戳保证每个区块依次顺序相连。时间戳使区块链上每一笔数据都具有时间标记。简单来说,时间戳证明了区块链上什么时候发生了什么事情,且任何人无法篡改。时间戳在区块链中扮演公证人的角色,而且比传统的公证制度更为可信,因为区块链上记录的信息无法被任何人以任何方式修改。

3、以太坊核心概念:什么是以太坊网络?与以太坊网络交互的几种方式?

3.1 以太坊网络

基于以太坊项目,以太坊团队目前运营了一条公开的区块链平台——以太坊网络。智能合约开发者使用官方提供的工具和以太坊专用应用开发语言 Solidity,可以很容易开发出运行在以太坊网络上的“去中心化”应用(Decentralized Application,DApp)。这些应用将运行在以太坊的虚拟机(Ethereum Virtual Machine,EVM)里。用户通过以太币(Ether)来购买燃料(Gas),维持所部署应用的运行。

3.2 交互方式

主要使用电子钱包或DApp。

4、什么是以太坊账户?账户的基本要素?怎么创建账户?怎么使用钱包(Metamask)?

4.1 以太坊账户

在以太坊系统中存在两种类型的账户,分别是外部账号(Externally Owned Account,EOA)和合约账户。

外部账户一般简称为“账户”,它们都是由人创建的,可以存储以太币,是由公钥和私钥控制的账户。

合约账户是由外部账户创建的账户。

4.2 账户的基本要素

以太坊中这两种账户统称为“状态对象”(存储状态)。其中外部账户存储以太币余额状态,而合约账户除了余额还有智能合约及其变量的状态。通过交易的执行,这些状态对象发生变化,而Merkle树哟用于索引和验证状态对象的更新。一个以太坊的账户包含四个部分:

  • 该地址的交易的次数(nonce),它是由用于保障每笔交易能切只能被处理一次的计数器,有效避免重放(replay)攻击。

  • 账户目前的以太币余额。

  • 账户的合约二进制代码(合约账户)。

  • 账户的存储(默认为空)。

4.2.1 外部账户

外部账户(EOA)由私钥来控制,是由用户实际控制的账户。每个外部账户拥有一对公私钥,这对密钥用于签署交易,它的地址由公钥决定。外部账户不能包含以太坊虚拟机(EVM)代码。一个外部账户具有以下特性:

  • 拥有一定的账户余额、可以发送交易、通过私钥控制,以及没有相关联的代码。

4.2.2 合约账户

合约账户是一个包含合约代码的账户。合约账户不是由私钥文件直接控制,而是由合约代码控制。合约账户的地址是由合约创建时合约创建者的地址,以及该地址发出的交易共同计算得出的。一个合约账户具有下列特性:

  • 拥有一定的以太币余额。

  • 有相关联的代码,代码通过交易或者其他合约发送的调用来激活。

  • 当合约被执行时,只能操作合约账户拥有的特定存储。

  • 合约账户和普通账户最大的不同就是它还存有智能合约。

4.3 怎么创建账户

用户可以使用Geth指令或者钱包创建一个外部账户。这里举例说明Geth方式,生成一个账户地址的过程主要有三步:

  • 设置账户的私钥,也就是通常意义的用户密码。

  • 使用加密算法得出相应的账户地址。

  • 根据公钥得出相应的账户地址。

4.4 怎么使用钱包(Metamask)

MetaMask是一款基于浏览器插件的以太坊轻钱包,不需要下载,只要在浏览器中添加对应的扩展程序即可,非常轻量级,使用起来也非常方便。目前支持chrome,firefox,Opera等浏览器,也可以用官方推荐的Brave浏览器。

5、如何为我们的账户充值价值$10000的测试资金?

网上很多测试水龙头可以获取测试资金,这里以Metamask为例,如下图通过“存入”入口可以看到有“测试水管”,进入跳转到指定页,可以多次获取测试资金。
入门篇(一)理解区块链原理与以太坊的运行机制_第1张图片

6、什么是钱包助记词(Mnemonic Phrases)?什么是HD钱包?解决了什么问题?有什么好处?

6.1 钱包助记词

拥有数字货币资产的人都知道,私钥的备份是非常重要的,有私钥就拥有该私钥对应账户上的所有资产。一般来说私钥都有 256 位,以 64 个字母数字构成的 16 进制字符串表示。直接抄录这 64 个字母数字是很容易搞错的。

助记词是明文私钥的另一种表现形式, 最早是由 BIP39 提案提出, 其目的是为了帮助用户记忆复杂的私钥 (64位的哈希值)。助记词一般由12、15、18、21个单词构成, 这些单词都取自一个固定词库, 其生成顺序也是按照一定算法而来, 所以用户没必要担心随便输入 12 个单词就会生成一个地址。虽然助记词和 Keystore 都可以作为私钥的另一种表现形式, 但与 Keystore 不同的是, 助记词是未经加密的私钥, 没有任何安全性可言, 任何人得到了你的助记词, 可以不费吹灰之力的夺走你的资产。

6.2 什么是HD钱包?解决了什么问题?有什么好处?

HD 钱包是目前常用的确定性钱包 ,HD 是 Hierarchical Deterministic(分层确定性)的缩写。所谓分层,就是一个大公司可以为每个子部门分别生成不同的私钥,子部门还可以再管理子子部门的私钥,每个部门可以看到所有子部门里的币,也可以花这里面的币。也可以只给会计人员某个层级的公钥,让他可以看见这个部门及子部门的收支记录,但不能花里面的钱,使得财务管理更方便了。

分层确定性的概念早在 BIP32 提案提出。根据比特币核心开发者 Gregory Maxwell 的原始描述和讨论,Pieter Wuille 在2012 年 02月 11日整理完善提交 BIP32 。直到 2016年 6月 15 日 才被合并到 Bitcoin Core,目前几乎所有的钱包服务商都整合了该协议。BIP32 是 HD 钱包的核心提案,通过种子来生成主私钥,然后派生海量的子私钥和地址,但是种子是一串很长的随机数,不利于记录,所以我们用算法将种子转化为一串助记词 (Mnemonic),方便保存记录,这就是 BIP39,它扩展了 HD 钱包种子的生成算法。BIP43 对 BIP32 树结构增加了子索引标识 purpose 的扩展 m/purpose’/ * 。 BIP44 是在 BIP43 和 BIP32 的基础上增加多币种,通过 HD 钱包派生多个地址,可以同时管理主网和测试网的比特币,BIP44 提出了5层的路径建议,如下:

m/purpse'/coin_type'/account'/change/address_index,

BIP44的规则使得 HD 钱包非常强大,用户只需要保存一个种子,就能控制所有币种,所有账户的钱包。

7、以太坊转账基本常识?如何查看账户状态?如何查看交易状态?为什么交易会有延迟?

7.1 以太坊交易的基本概念

"交易"这个术语,在传统经济学领域里,一般被理解为“物物兑换”或者是“钱物兑换”。

在以太坊里,最直观的理解就是:从一个账户发送到区块链上的另一个账户,包含消息和签名的数据包。

包含如下内容:

\cdot 发送者的签名。

\cdot 接收的地址。

\cdot 转移数字货币量等内容。

这些内容,我们可以通过查看转账交易,能得到相应信息,后文将说明查看方法。

以太坊有非常多的计量单位:Finney,Szabo,Gwei,Mwei,Kwei 和 Wei,其中人们常用的单位是Gwei。

详细换算表见下图。

入门篇(一)理解区块链原理与以太坊的运行机制_第2张图片
汇率:1Ether=10^18wei

具体的汇率查询,可以查看以下网站:

https://jin10086.github.io/etherconverter/

计算交易费用前,我们需要先了解两个名词的含义:

GasLimit值

这代表了这个交易的执行最多被允许使用的计算步骤,一般使用默认值即可,无需调整。

GasPrice值

代表了交易发送者愿意支付的gas费用,可以自行设置。支付的费用越多,打包速度越高。

7.2 交易费用如何计算

计算交易费用有一个公式:Gas=Gas limit(限制)*Gas Price(价格)

以下图为例,如果想要普通和低速,设置1.5-1.6的gas费就可以了,如果想要高速在2分钟之内被打包,那需要给到近2倍的价格—3。

每次交易之前,可以查询以下网站来确认需要设置的Gasprice:

https://ethgasstation.info/

入门篇(一)理解区块链原理与以太坊的运行机制_第3张图片
任何交易都需要消耗gas,但是交易失败会扣除较少的费用。

例如下面这比交易,设置的是153Gwei,Gas limit40000
入门篇(一)理解区块链原理与以太坊的运行机制_第4张图片

7.3 如何查询你的交易

无论是在任何钱包进行交易,每笔交易都会产出一个TxHash,

你可以在https://etherscan.io,查询你的交易状态,

以metamask上为例,下图是交易的记录
入门篇(一)理解区块链原理与以太坊的运行机制_第5张图片
随意点击一笔交易记录,可以查看该交易的状态。

状态有pending,success,faild三种,pending就是正在确认中,success已经成功,faild就是失败,
入门篇(一)理解区块链原理与以太坊的运行机制_第6张图片
论哪种转态都会扣除一定的燃油费,在实际支付的燃油费中可以查看。

8、什么是汽油Gas?为什么会有Gas?Gas的作用是什么?

8.1 概要

当你听到gas时,是在讨论两个东西:

  • Gas Limit
  • Gas Price 交易费计算就是Gas Limit*Gas Price。大家说“Gas”时,一般所值得是“Gas Limit”你可以把gas limit看成是汽车所需多少升燃油。把gas price看成是燃油单价。对于汽车,每升(unit)汽油 ¥6.46 (price)对于以太坊,每gas( unit) 是 20 GWEI (price)

继续想,就是:

  • 10升汽油就是 ¥64.6
  • 21000 个 gas 就是 20*21000 GWEI= 420000 GWEI= 0.00042 ETH,也就是说本次交易手续为 0.00042 Ether。发送Token一般需要 ~50000 gas 到 ~100000 gas ,因此交易手续费增加到 0.001 ETH - 0.002 ETH。

其中以太坊ETH到GWEI的转换关系是,这些多是以太币的计算单位:

  • Kwei(Babbage) = 10^{3} Wei

  • Mwei(Lovelace) = 10^{6} Wei

  • Gwei(Shannon) = 10^{9} Wei

  • Microether(Szabo) = 10^{12} Wei

  • Milliether(Finney) = 10^{15} Wei

  • Ether = 10^{18} Wei

8.2 Gas

Gas 是以太坊中一种特定的命名,表示执行一个操作所需要的多少计算工作。 比如要执行一次加密Keccak256将消耗30gas。在以太坊中每个操作动作都有对应的gas。更多内容可查看What is gas (StackExchange)。

一般交易需要花费多少gas则取决于此完成此交易过程中的所执行的操作的累计gas。

8.3 Gas Limit

这个 gas limit之所以称之为limit是因为它代表的是你将为此次交易所支付的每单位gas的最大费用。以避免合约中的错误引起不可预计的开销,合约执行进入一个计算死循环就势必会1ETH…10ETH直至耗尽你的余额。

然而,一笔交易所必须支付的gas量已经在区块中通过该交易已执行的代码数记录。如果你不想支出太多在gas上,设置底的gas limit 是没有太多帮助的。你必须支付足够的gas已开销本交易所必要的计算资源,否则将出现一个 Out of Gas的错误。即使交易失败,你也必须为已占用的计算资源所支付手续费。

未使用的gas将在交易后返回给你。比如你发送 1 ETH 到另一个账户B,设置 gas limit 为 400000,将有 400000 - 21000 返回给你。然而如果你是发送 1 ETH 到一个合约且交易失败(说,投票已截止),400000 都会被用掉,没啥返还给你。

21000 是标准转账交易的gas limit。

8.4 Gas Price

如果你想让交易花费更少,你能够做的是降低你愿意支付的gas单价。这个价格会此交易影响的确认速度。

正常情况下:

  • 50 GWEI Gas Price 几乎总能将你的交易放到下一个区块。

  • 20 GWEI 通常会把它放到未来的几个区块中。

  • 8 GWEI 通常会在未来几分钟内放入区块。

8.5 提高gas price就能快速打包确认?降低gas price就会难以被确认?

交易手续费将归属于挖出本本区块的矿工。当矿工挖矿时,他需要决定哪些交易放入到区块中。可以不包含任何交易,也可以随机选择交易。为了鼓励让矿工将你的交易放入区块,你会考虑将燃油单价设置得足够高,已确保能优先放入区块。但这还是一厢情愿,这个最终取决于矿工。

大部分矿工遵循一个简单策略,将接受到的交易按燃油单价从高到底排列,依次放入区块中直到塞满区块,或者直到以低于矿工所设置的燃油单价底限。

设得足够高的燃油单价交易会在下一个区块中。如果你着急,高燃油单价会使得你的交易排在别人前面。如果不着急,你只需设置一个足够让矿工包含你交易的燃油单价即可。

你可能感兴趣的:(区块链,区块链)