本文将从什么是大宗、什么是交易、什么是智能合约、ERC20转让的本质以及ETH与ERC20转让的区别等角度系统介绍ETH。
什么是街区?
首先,我们来讨论一下什么是区块。相信大家对街区还是有一定了解的。区块链是一个板块像链条一样连接在一起。
那么ETH的块是什么呢?
作为一名以太网用户,我们应该了解以太网模块的一些组件。比如这个块的高度,唯一哈希值,父块的哈希值,块出来那一刻的时间戳,挖出这个块的矿工的地址,这个块的块大小,消耗了多少瓦斯等等。这些概念很简单,看名字就知道是什么意思,这里就不赘述了。
接下来,我们将重点讨论以下挖掘收入和三级块地址的概念。
1.1关于采矿收入
首先是采矿收入。矿工们不停地耗费大量的电力来计算下一个区块,以便在每个区块都出了区块时获得奖励。这些都是真的ETH,矿工通过出售挖掘出来的ETH获利。
这里每个区块的奖励主要由三部分组成,即区块奖励、收费收入和三级区块奖励。
1.2出块奖励
出块奖励是指每产生一个新块,挖出这个块的矿工就可以获得奖励(爆块奖励)。共识里专门写了这个收益,修改这个固定收益需要硬叉升级。
到现在,这个固定收益已经换了三次了。首先是代号为“Frontier”的初始ETH主网版本。从0的高度开始,每块的加成是5ETH。
在437万块的高度,随着代号为“拜占庭”的硬叉升级,每块的奖励从5ETH降为3ETH。
最新的变化是第728万个“君士坦丁堡”硬叉的升级,每块的加成从3ETH降低到2ETH。到现在,每件的奖励一直是2ETH。
其次是手续费收入。这部分的定义就简单多了,就是这一块所有交易费用的总和。
1.3三等奖
最后一部分是三级奖金。这里需要明白的是,每个区块最多可以包含两个三级加值,或者根本不包含。
并且每包含一个三级区块,可以获得1/32的出块奖励。以每个区块的出块奖励为例,那么每个三级区块都包含在内,就可以得到2的1/32,即0.0625 2ETH。如果包含两个三级嵌段,则为0.125 ETH。
1.4第三块地址
介绍完开采收益,我们再来了解一下刚刚提到的三级区块的概念。这里有一张图,可以帮助你清楚的理解布洛克大叔的概念。
ETH目前是PoW的挖矿模式,所以可能会出现两个矿工在很短的时间内同时获得新块的情况。这时新的块中会有一个因为有点慢或者节点连接不好没有及时广播而失效。
在BTC网络中,这种无效的新块被称为孤儿块,BTC的孤儿块没有收入。ETH的去块速度比BTC高很多,也就是孤立块的概率高很多。为了避免矿工拼命挖,变成孤块没有任何收益的情况,ETH引入了三级块的概念。
如图,1高块之后生成两个2高块,其中绿色块成为真正的2高块,而黄色块将有被废弃的危险。此时,后面的3高块将包括这个黄色块作为它自己的第三块。布洛克叔叔这个名字也很形象。叔叔是他父亲的兄弟。身高块会得到额外的第三块奖励,因为它包含了第三块。
同时,这个三级街区的矿工地址也会获得奖励。具体奖励金额与三级块的高度和三级块的高度有关。公式是三级方块的高度加8(这个字符是8,不是一天),减去三级方块的高度,再乘以每个方块的奖励,最后除以8。以刚才图中所示的情况为例。三级块的高度为2,出块的高度为3,即2加8减3,乘以2,最后除以8得到1.75 ETH。从这个公式可以看出,三级块最多只能是上述八个高度以内的块。
什么是交易?
了解了区块之后,我们再来了解一下交易。该交易是区块链分散式分类账中的一项具体记录。
主要由交易的Hash、块的高度、时间戳、From和To地址、交易涉及的ETH金额组成,后面是输入、Nonce、交易费用等属性。
前三个哈希,高度,时间戳很好理解,看名字就知道什么意思了。所以我们重点来看以下几个概念。
2.1发件人、收件人地址和金额
作为一个分散的账簿,转账是最基本的功能。我们可以把每一笔交易看作一次ETH转账,一次转账由汇款人、收款人和转账金额组成,其中对应From、To地址和ETH金额。
“发件人”地址是发起交易的地址。收件人地址可以是普通用户地址或合同地址。如果是普通用户地址,交易就是简单的ETH转账。如果是合约地址,那就是比较复杂的合约调用。最终的ETH金额是本次ETH转账涉及的转账金额。
作为支持智能合约的公链,ETH在发送交易时可以填充额外的输入数据,其中输入数据是调用合约时的调用参数。当然,如果这是普通的ETH转账交易,那么输入为空。理论上,这里输入的内容可以随意填写,只要前面那部分数据能正确调用契约即可。
开发项目时有邀请佣金的功能。为了最大程度降低用户感知,该功能是在发送Swap、下单等交易时,在正确输入内容的末尾添加用户的邀请码实现的。
我们来介绍一下Nonce。所谓Nonce就是From地址的交易顺序,本质上就是这个From地址发送的打包交易的总数。具有相同From地址的事务必须以Nonce顺序打包。
这里出现了一个问题。如果前一个随机数没有被打包,那么后一个随机数将永远不会被打包。因为这个用户发的交易费太低了,交易很长时间没有打包,用户不断发新的交易,然后用户就会奇怪为什么我发的交易费那么高还是不能打包。原因是用户前面的交易费用太低,挡住了后面的所有交易。此时,前面被阻塞的事务应该被加速或取消,后面被阻塞的事务将被依次打包。
这里提到的交易加速和取消功能也是通过Nonce实现的。在一个交易打包之前,Nonce可以重复发送,只要新发送的交易的气价高于原来的,就可以覆盖原来的交易。通常新交易的气价比原来高10%以上,具体要求由节点配置决定。
2.2如何计算交易费用
在解释如何计算交易费之前,先介绍几个基本概念。
首先是气体,这是EVM在执行指令时需要消耗的资源。气限和用气量分别表示用户发送交易时预计消耗的气量,以及执行交易时实际消耗的气量。如果在执行交易之前用完了Gas限制,交易将会失败。最后是气价,表示用户愿意购买多少ETH一个单位的气。
了解了这些基本概念,我们就可以得出每笔交易的手续费是怎么来的,计算方法也很简单,就是gassused乘以气价。
比如一个ETH转需要消耗21000气,用户愿意支付120的价格,其中120的单位是Gwei,一个Gwei就是10 -9次方ETH,那么用户需要支付21000乘以120除以10-9次方,就是0.00252 ETH。
特别是合同调用越复杂,气耗越高,矿方会优先考虑手续费较高的打包交易。
什么是智能合约?
3.1以太坊虚拟机
在介绍智能合约之前,我们需要了解一下EVM,即以太坊虚拟机。我们知道ETH是一个区块链,是一个去中心化的项目,所以我们可以把EVM理解为一台运行在ETH这个去中心化的项目中的超级计算机,它负责收集用户的气体,然后执行存储在块中的代码。
这里提到的块中存储的代码是智能合约。
ETH可以实现各种逻辑。比如CoinEx去年投资的OneSwap就是基于ETH的去中心化交易所。在计算机世界里,如果要实现各种逻辑,就需要编写各种代码,这里的代码就是智能合约。
3.2智能合同
智能合约存储在块中,智能合约的地址相当于存储在块中的代码的调用入口。通过契约地址,方便的通过事务调用想要调用的智能契约,实现预期的功能。
在这里,以手机为比喻,BTC网络相当于一个功能机。从最初的设计来看,只能实现转账等特定功能,而ETH网络相当于一部智能手机,可以通过不同的智能合约实现各种功能,这里的智能合约相当于ETH智能手机上的一个APP。
ERC20转移的本质
我们知道,ERC20令牌实际上是一个智能合约,ERC20指的是这种智能合约的通用规范。那么我们从智能合约的角度来理解ERC20转让的本质。
就像我刚才说的,智能合约本质上是存储在块中的代码,所以我们先来看看ERC20合约的代码。这里,只截取传输部分的逻辑。代码很简单,相信非技术的朋友也能看懂。
首先,我们看到第二行,这里定义了一个事件。它的中文名字叫Event,作用是告诉用户这段代码里发生了什么。这里定义的是转移事件。顾名思义,表示一种转移行为的发生。这个转账事件有三个参数,用于通知用户汇款人的地址、收款人的地址和转账金额。
再往下就是ERC20合约转让功能的完整实现。这个转账函数只有两个参数,收款人的地址和转账金额,没有汇款人的地址,因为汇款人的地址不需要特别声明,这个转账函数的调用者就是汇款人的地址,也就是代码中的msg.sender。
首先这个函数会判断发送方余额是否足够,要求转账金额不能是负数,必须是大于0的数,否则返回False表示转账失败。
判断条件通过后,转移逻辑正式开始。逻辑很简单。首先,从发送方的余额中减去转账金额,然后将转账金额添加到接收方的余额中。ERC20转账本质上就是这么简单,发送方余额减去转账金额,接收方余额加上转账金额。然后发送这个转移事件,最后返回True表示转移成功。
我们来看看ERC20合约的传递函数是怎么调用的。还记得刚才介绍交易的时候提到,如果交易是契约调用,那么交易的To地址就是被调用的契约地址。事务中还有一个输入属性,是调用契约时的调用参数。
上图是ERC20传递函数的一个调用参数,可以分为三个部分,我在这里用红色线段隔开了。第一个短字符表示传递函数的摘要。一个智能合约可能有多个功能,每个功能的摘要都不一样,所以可以通过这个摘要来指定合约中的不同功能。这个长串代表一个地址,它是传递函数的第一个参数,——,接收者的地址。最后一个长串代表一个数字,就是转账的金额。
下图是浏览器根据上面的原始输入数据解析出来的,帮助用户清楚的看到调用了哪些函数,每个参数是什么。
ERC20转账交易打包成功后,我们可以在交易明细中找到这样一个转账事件。通过这个转账事件,我们可以看到尾号619的地址向尾号9b0的地址转了这么多硬币,这里显示的数字需要除以Token的精度才是真实的转账金额。这个令牌是精度为18位的1,所以这个数字代表7200个1。
最后,我们可以通过这个转移事件分析出最终的ERC20转移记录,即一个尾号为619的地址,转移7200个1到一个尾号为9b0的地址。
以上是从智能合约角度分析的一个ERC20转让的本质。
ETH和ERC20传输的区别
我们最后总结一下ETH转移和ERC20转移的区别。
前面说过,每一笔交易自然都是ETH转账,即使是合约调用,也可以理解为ETH转账,只不过收件人地址不是普通用户地址,而是智能合约地址,转账金额可能是0。
另外还有一种情况叫内部交易,也可能是ETH转账。例如,在智能合同的执行过程中发生了以太网传输,这反映在内部交易中。
ERC20转让要简单得多,本质上是一个称为ERC20合同转让的事件。
ETH,你学会了吗?
关于CoinEx智能链
CoinEx智能链(CSC)是CoinEx公链团队为去中心化金融打造的去中心化高效公链,具有以下特点:
与以太坊生态完美兼容:CSC基于以太坊虚拟机(EVM)打造。开发者可以用成熟的开发工具很容易地将Dapp移植到CSC上,用户也可以很容易地接入CSC网络。极高的效率和极低的交易成本:CSC使用POS共识协议实现秒级块释放时间,支持极高的TPS,保持低交易成本。封锁节点不需要权限:CSC最多支持101个封锁节点,根据CET承诺数量确定,无需集中机构审核,网络更加分散。