以太坊知识点及相关概念介绍

以太坊概念

        以太坊是支持智能合约功能的去中心化网络平台。这句话有智能合约、去中心化网络2个关键词,理解了这2个关键词基本上理解了以太坊。

        说到去中心化网络,不得不先说一说中心化网络。中心化网络是指有一个中心服务器,所有数据存储在中心服务器上,应用程序之间不是直接联系,而是通过中心服务器作为中介间接联系。去中心化网络是指没有中心服务器,数据存储在各个节点(节点先理解为是存储数据的计算机,在“9.节点概念”章节详细介绍),且各个节点存储的数据是相同的,节点间可以直接相互联系,应用程序通过节点作为中介间接联系。

        智能合约是开发者发布到以太坊网络中的代码片段,像手机App后端代码、PC客户端后端代码、浏览器网站后端代码等,不同的是智能合约运行在去中心化网络(即以太坊网络)中,而后者(后者是指手机app后端代码、PC客户端后端代码和浏览器网页后端代码)运行在中心化网络中;智能合约存储在节点上,后者存储在中心服务器上;智能合约是公开的,任何人都可以调用,而后者只能由开发者或其指定的人员才可调用。

区块和区块链概念

        说到以太坊不得不说说区块和区块链。以太坊网络中交易量巨大,因此需要分批处理,处理结果会形成一个区块,每个区块通常包含数十至数百笔交易(交易在“5.交易概念”章节详细介绍)和一些其他数据。

        接下来说说区块链,从形式上说,区块链是区块的序列,即由下一区块引用上一区块的哈希,将区块链接起来形成一条链,这条链被称为区块链;从存储上说,由于区块记录着交易和其他数据,区块链是由区块串联而成,因此区块链记录着以太坊上所有数据,又因为区块链是公开的,任何人都可以访问,因此可以将区块链理解为公共数据库。区块链存储在每个节点上。

以太币概念

        以太币是以太坊上的原生加密货币,维持着以太坊网络的运行。如用以太币奖励区块提议者或作为执行智能合约的费用等(提议者在“10.验证者和区块提议者概念”章节详细介绍,费用在“6.Gas费用概念”章节详细介绍)

        以太币单位换算:1 ETH = 10^9 Gwei = 10^18Wei

账户概念

         以太坊账户和银行卡账户一样,有账号和密码,记录着余额和其他信息,只是以太坊账户没有实体卡。以太坊账户用于存储以太币和智能合约,发送和接受以太币,与以太坊网络中的智能合约进行交互。

以太坊账户和银行卡账户的比较

密码和账号

银行卡账户

以太坊账户

密码的获取

在办理银行卡时,输入的6位数字。

可由自己使用加密算法生成,是一个32字节的十六进制字符,在以太坊网络中,密码被称为私钥(注:将密码直接称为私钥是不合适的,现阶段先理解为私钥即是密码)。

账号的获取

在办理银行卡时,选择的实体银行卡上的数字即是账号。

由私钥生成,是一个20字节的十六进制字符。在以太坊网络中,账号被称为账户地址。

        账户地址是使用椭圆曲线数字签名算法生成私钥,然后由私钥生成公钥,再然后对公钥做Keccak-256哈希,最后截取哈希后20字节并在前面添加0x,即获得账户地址。如:0x30A48586ab3e030799c021E9dD07A27584b6e663。

下面是使用GO语言生成私钥、公钥和账户地址

        以太坊账户分为外部账户和合约账户。外部账户是私人的,只有私钥的拥有者才可支配账户的余额,就像银行卡账户一样,只有拥有银行卡密码的人员才可支配银行卡余额。开发人员将智能合约部署到以太坊网络后,系统会为此合约生成一个账户,这个账户即是合约账户,合约账户记录着合约信息。

账户数据结构介绍

名称

介绍

address

是指账户地址。

nonce

概念:

是指计数器,记录从账户发送交易的数量。

作用:

确保每笔交易只处理一次,防止重放攻击。

重放攻击:

举例解释重放攻击:Alice向Bob转账1ETH,该交易被打包区块后,Bob收到1ETH,但是任何人都可以看到这笔交易,然后复制黏贴,重复提交给以太坊网络,会造成Alice重复向Bob转账1ETH,这种情况即为重放攻击。

nonce如何防止重放攻击:

账户nonce是从0开始,每发生一笔交易,则账户nonce加1。在交易数据结构中,也有一个nonce字段,交易nonce同步当前账户nonce值。例如:发生第一笔交易,则交易nonce为0,账户nonce加1,值为1;发生第二笔交易,则交易nonce为1,账户nonce加1,值为2。若此时发生了重放攻击,而重放攻击的交易nonce是1,但账户nonce是2,则会提示“nonce too low"。

balance

记录账户以太坊余额。

account storage

记录智能合约的状态变量。如:记录上述“记录学生语文和数学成绩”智能合约中的name、ChineseGrades和MathGrades变量。

account storage用于合约账户,对于外部账户存储为空。

EVM code

高级语言(如:Solidity语言)是方便开发者理解,但在以太坊虚拟机中运行的是字节码。字节码是指高级语言代码编译后生成的十六进制序列,记录着合约的信息,像合约中的函数和事件等都记录在字节码中。 这字节码会在合约部署成功后记录在EVM code空间中。

EVM code用于合约账户,对于外部账户存储为空。

EVM code存储字节码后不可更改。

storage hash

称为存储哈希,是指account storage的Merkle Patricia trie 根节点。

code hash

是EVM code字节码的keccak-256哈希。

        nonce、balance、storage hash、code hash的集合被称为账户状态。所有以太坊账户的账户状态集合被称为世界状态。在后续介绍中提到的世界状态改变,实际上是指以太坊网络中新增了账户、账户余额balance改变或account storage中的状态变量改变。

交易概念

        交易是指由外部账户发起,带有数字签名,会改变世界状态,并且需要支付交易费用的行为。例如:Alice向Bob转账1ETH,则由Alice账户发起,为保证此交易来自Alice需要使用Alice的私钥对这次转账进行签名,并将Alice账户余额减1ETH,在Bob账户余额加1ETH,则两个账户余额的改变即发生了世界状态改变,此次转账Alice还需要支付大概4200000Gwei费用。

        以太坊有3中不同类型的交易:

  • 常规交易:从一个账户向另一个账户转账。
  • 合约部署交易:将智能合约部署到以太坊网络,如同app后端代码部署到服务器一样,只不过合约部署交易和常规交易一样需要数字签名、支付费用,并且为智能合约新增一个账户。
  • 执行合约交易:将智能合约部署到以太坊后,用户就可以执行合约,若执行的合约改变了世界状态,则此次执行行为被称为执行合约交易,例如:“记录学生语文和数学成绩”智能合约,用户执行录入成绩函数,这录入成绩即为执行合约交易。用户执行获取成绩函数,没有改变世界状态,不能称获取成绩为执行合约交易。

Gas费用概念

        由于以太坊每笔交易都需要计算机算力,因此每笔交易都需要付费,正如车辆需要汽油一样,在以太坊网络中这种费用被称为Gas费用(又称燃料费)。Gas费用用以太币支付,以Gwei为单位。

        Gas费用计算公式=基础费+小费=燃料单位*基础费价格+燃料单位*小费价格:

  • 燃料单位:不同的交易需要不同的计算量,这个计算量被称为燃料单位(常用Gas或GasUserd表示),燃料单位是由以太坊网络按照燃料费计算规则计算而得。例如:以太币转账需要21000单位。
  • 基础费:基础费是交易加入区块的底价,这笔费用最后被销毁并退出流通。
  • 基础费价格:是通过当前区块的前一区块计算出来的。
  • 小费:为激励验证者(验证者在“10.验证者和区块提议者概念”章节详细介绍)将交易添加到区块中,用户给验证者一笔小费是必要的,小费越高,交易越容易被添加到区块中。
  • 小费价格(又称Gas价格或Gas数量):用户自己设置的,是指你愿意为每燃料单位支付的以太币。

        例如:Alice向Bob转账1ETH,转账的燃料单位为21000单位,如果基础费价格是190Gwei,小费价格设置为10Gwei。则燃料费为21000 * 190Gwei + 21000 * 10Gwei = 3990000Gwei + 210000Gwei = 0.00399ETH + 0.00021 = 0.0042ETH。最后会在Alice账户扣除1.0042ETH,Bob账户增加1ETH,0.00399 ETH作为基础费被销毁退出流通,验证者获得0.00021 ETH小费。

最高费用

        为了防止交易花费的以太币过多,用户针对某笔交易可以设置最多愿意支付多少以太币,这儿设置的以太币被称为最高费用(常用maxFeePerGas表示)。交易完成后,会退还给交易发送人最高费用与Gas费用之间的差额。若用户设置的最高费用低于Gas费用,则交易将会失败,但交易已发生计算,因而费用不会被退回。

燃料限额

        为防止交易花费的以太币过多的另一种方法是设置燃料限额。燃料限额(常用GasLimit表示)是指在交易中你愿意消耗的最大燃料单位。

        例如:标准以太币转账需要的燃料单位是21,000单位。如果设置的燃料限额是50,000单位,交易完成后以太坊虚拟机将消耗21,000单位,你将收到剩余的29,000单位。 然而,如果你设置的燃料限额太少,比如说,对于简单的以太币转账,设置燃料限额为20,000单位,以太坊虚拟机将消耗20,000单位燃料并尝试完成交易,但不会完成。 然后,以太坊虚拟机回滚所有变化,但由于以太坊虚拟机已经完成了价值20,000单位燃料的工作,这些燃料就被消耗了,并不会返回给你。

节点概念

        节点是指安装并运行执行客户端和共识客户端的计算机。以太坊网络的去中心化就是所有节点共同实现的,节点间可以相互通信,用于传播交易和区块等信息。截至到2022年12月31日分布在世界各地的以太坊节点总共有5011个,其中有4个节点位于中国,分别是中国移动节点、中国电信节点、阿里巴巴节点和华为节点。

        执行客户端和共识客户端是两种PC客户端软件,两者合称为以太坊客户端,节点间的相互通信,实际上是以太坊客户端间的相互通信。以太坊客户端实现了以太坊协议,不同的以太坊客户端,即使编写以太坊客户端的编程语言不尽相同,只要他们遵从以太坊协议,他们既可以在以太坊网络上实现通信。

        执行客户端、共识客户端和验证客户端的作用:

  • 执行客户端:侦听网络中广播的新交易,存放交易池(交易池在“11.交易池概念”章节详细介绍)、运行以太坊虚拟机(太坊虚拟机在“12.太坊虚拟机(EVM)概念”章节详细介绍),改变世界状态,保存区块链,提供使用户查询以太坊数据、提交交易和部署智能合约的方法等功能。
  • 共识客户端:接受来自其他节点的区块,通过共识算法(共识算法在“13.权益证明(PoS)共识机制概念”章节详细介绍)实现各个节点数据达成一致,验证区块,将区块添加到区块链上等作用
  • 验证客户端:是共识客户端的可选附加组件,需要质押32ETH才可运行此客户端。使节点有资格被选中来产生新区块。

验证者和区块提议者概念

        验证者是指能够运行验证客户端的节点。在以太坊网络中,由其中一个验证者产生区块,其他验证者验证这个区块,产生区块的验证者被称为区块提议者。区块提议者是从验证者中随机选中的,由于区块每12秒产生一个,因此每12秒会选中一个验证者作为区块提议者。

交易池概念

        由于以太坊网络中交易量是巨大的,同一时间内区块提议者不可能把所有交易添加到区块中,因此需要储存器存储未添加到区块中的交易,这个存储器被称为交易池。交易池位于执行客户端中。

以太坊虚拟机(EVM)概念

        以太坊虚拟机(EVM)是一个虚拟计算机,用于执行智能合约代码,如Java虚拟机一样。以太坊虚拟机(EVM)能够改变账户状态。

        结合统计工资StatisticsSalary智能合约来了解以太坊虚拟机(EVM)如何运行:统计工资StatisticsSalary智能合约部署到以太坊网络后,会生成一个合约地址address N,总工资totalSalary状态变量存储在account storage中,累加工资accumulateSalary函数和获取总工资getTotalSalary函数以字节码的形式存储在EVM code空间中,当用户输入5000调用累加工资accumulateSalary函数时,EVM code空间中的累加工资accumulateSalary函数、account storage中的总工资totalSalary状态变量和输入的数据5000被引入到以太坊虚拟机(EVM)中进行totalSalary + _salary = 0 + 50000计算,计算结果更新到新账户状态M+1下的account storage中。

权益证明(PoS)共识机制概念

        我们所说的共识,是指达成了广泛的一致。比如,一群人去看电影, 如果他们对看《大话西游》电影没有任何异议,那么就可以说共识达成了。 如果存在异议,那么他们就必须通过某种方法决定看哪一部电影。对于以太坊区块链来说,达成共识意味着全网络中至少 66% 的节点就以太坊网络的世界状态达成一致。

        权益证明(PoS)共识机制作用:

  • 区块提议者基于权益证明创建区块:权益证明由验证者完成,验证者通过质押32ETH参与到系统中。 系统将随机选择一位验证者来创建新区块,并将它们分享到网络从而获得奖励。
  • 防御女巫攻击:女巫攻击是指一个用户或用户群体假装成许多验证者。攻击者若试图控制整条区块链,就必须控制51%的验证者,那就必须质押51%个验证者所需要质押的以太币,这是需要花费很多很多的钱。
  • 链选择(又称分叉选择):在以太坊网络中,通常只有一条链,但由于网络延迟和不诚实的行为,可能导致某一区块下有多个子链(如下图区块N-3),为解决此问题,会使用权益证明共识机制选择出一条正确的子链作为区块链。

去中心化应用(DAPP)概念

        去中心化应用(DAPP)是指在以太坊网络上构建的应用程序,是由智能合约和前端用户界面构成。像在中心化网络中构建的手机App、PC客户端、浏览器网站等由后端代码和前端用户界面构成。

以太坊助记词概念

        由于以太坊私钥是由很长的字符组成,且无规律,不易记忆,解决方案是将私钥映射为12个单词(目前最常用的是映射为12个单词,也有映射为15、18、21或24个单词的),如下图:

        助记词就是私钥,且助记词和私钥是一一对应的,通过助记词可以推导出私钥,通过私钥也可以推导出助记词,因此助记词和私钥都不要泄露,否则会造成财产损失。

以太坊钱包概念

        上面讲到以太坊助记词为方便记忆私钥而生,若一个用户有多个外部账户,则每个外部账户对应有一个私钥,每个私钥会衍射出一个助记词,用户记住这么多的助记词也是困难的,这就需要一个管理以太坊账户的应用程序,这个应用程序叫做以太坊钱包,以太坊钱包也提供查询余额和转账等功能。目前使用较为广泛的以太坊钱包是MetaMask (MetaMask官网:https://metamask.io/)。

        以太坊钱包会以一个账户的私钥为原始私钥,由原始私钥衍射出助记词,并且原始私钥可以生成多个子私钥,因此只需要记住原始私钥的助记词就可管理原始私钥和子私钥对应的账户。

以太坊交易流程总体介绍

1、提交交易

        用户在本地通过去中心化应用程序(DAPP)或以太坊钱包提交交易。

        所提交的交易包括下列信息:

  • 发送者账户地址(from):提交交易的外部账户地址。
  • 接收地址(to):若是常规交易,则接收地址是收款者的外部账户地址;若是合约部署交易,则接收地址为空;若是执行合约交易,则接收地址是所调用的智能合约合约账户地址。
  • 签名(signature):发送者的私钥签名,确保发送者已授权此交易。
  • 交易数量(nonce):从发送者账户发送的交易数量。
  • 交易金额(value):发送者向接收者转移的以太币金额(单位为wei)。
  • 数据(data):任意可选字段,一般为智能合约字节码或包含了调用智能合约的相应函数及其参数(在“Solidity编程语言基础知识”教程中详细介绍)
  • 最大燃料单位(gasLimit):交易可以消耗的最大数量的燃料单位,若交易的实际燃料单位超过最大燃料单位时,则导致交易失败。
  • 最大小费(maxPriorityFeePerGas):愿意支付给验证者的最大小费,若交易的实际小费超过最大小费时,则导致交易失败。
  • 最大燃料费(maxFeePerGas):愿意为交易支付的最大燃料费,若交易的实际小费和实际基础费之和大于最大燃料费时,则导致交易失败。

2、广播交易

        DAPP和以太坊钱包提交交易后,一般情况下有近距离的节点接受交易,接受交易后,此节点验证交易的签名、验证发送者账号的余额能否支付转账金额和燃料费、nonce是否为发送者账户的交易数等。验证合法后,此节点将交易打包到自己的交易池中,并将交易广播给其他节点,其他节点验证交易并加入交易池。

3、打包区块

        在每个时隙(12秒为一个时隙)中,以太坊网络会随机选择一个验证者作为区块提议者,区块提议者根据不同的交易执行不同操作:

  • 普通交易,接收地址(to)为外部账户。

        每笔普通交易,会发生以太币转移和燃料费消耗,使交易双方的余额balance改变,改变账户状态和世界状态,且会生成交易收据。

  • 合约部署交易,接收地址(to)为空。

        对于合约部署交易,以太坊虚拟机(EVM)根据发送者账户地址(from)和交易数量(nonce)生成合约地址,并将数据(data)中的智能合约字节码存储在新生成合约地址的EVM code空间中。合约部署交易生成了新的合约地址,改变了世界状态。

  • 执行合约交易,接收地址(to)为合约账户。

        对于执行合约交易,以太坊虚拟机(EVM)从世界状态中获取接收地址(to)存储在EVM code空间中的智能合约字节码和存储在Account State trie中的状态变量,并执行数据(data)中的函数,执行后将会改变状态变量,从而改变了账户状态和世界状态。

        区块提议者执行交易后,会将交易、状态变量和收据等信息打包到区块中。

4、广播区块

        区块生成区块后,将区块广播到以太坊网络中。

5、验证并执行

        其他验证者获取以太坊网络中的区块,并再次执行区块中包含的交易,用以验证区块提议者提交的区块是否有误。若验证无误,区块提议者和其他验证者将该区块添加到自己存储的区块链中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值