主页 > imtoken客户端 > 干货 | 以太坊中的账户、交易、Gas 和 Block Gas Limit

干货 | 以太坊中的账户、交易、Gas 和 Block Gas Limit

imtoken客户端 2023-01-17 03:32:11

以太坊交易类型_以太坊币交易官方网站_以太坊期货即将上线交易

(友情提示:微信公众号不允许文章带超链接,为获得最佳效果,请点击【阅读原文】查看文章中的超链接)

本文旨在帮助人们了解以太坊网络上的一些基本概念和系统,包括账户系统、gas、矿工在区块大小设置机制中的作用等。

什么是账户?

外部账户与合同账户

以太坊中有两种类型的账户:

这种区别将在即将到来的 Metropolis 升级中消失。

外部账户

外部拥有的帐户具有以下特征:

合约账户

合约账户具有以下特点:

以太坊区块链上的所有操作都由账户发送的交易激活。 合约账户每收到一笔交易,交易自带的参数就会成为代码运行的输入值。 合约代码将由以太坊虚拟机 (EVM) 在参与网络的每个节点上运行,作为对其新区块的验证。

什么是交易和消息?

贸易

以太坊币交易官方网站_以太坊交易类型_以太坊期货即将上线交易

以太坊中使用术语“交易”来指代存储消息的签名数据包从一个外部拥有的帐户发送到区块链上的另一个帐户的过程。

交易包括:

信息

合约有能力向其他合约发送“消息”。 消息是一个永远不会序列化的虚拟对象,只存在于以太坊执行环境中。 它们可以理解为函数调用(function calls)。

消息包括:

一般来说,一条消息就像一笔交易,只不过它不是由外部账户生成,而是由合约账户生成。 当在合约正在执行的代码中执行 CALL 或 DELEGATECALL 两个命令时,会生成一条消息。 消息有时被称为“内部交易”。 与交易类似,消息指示接收账户运行其代码。 因此,合约账户可以与其他合约账户建立关系,就像外部账户一样。 很多人误用交易这个词来指代新闻,所以也许新闻这个词因为社区的共识,已经逐渐退出大家的视野,不再使用了。

什么是气体?

以太坊在区块链之上实现了一个运行环境,称为以太坊虚拟机 (EVM)。 参与网络的每个节点都将运行 EVM 作为块验证协议的一部分。 他们验证区块中包含的每笔交易,并在 EVM 中运行交易触发的代码。 每个网络中的所有完整节点都执行相同的计算并存储相同的值。 合约执行会在所有节点重复多次,使得合约执行的消耗非常昂贵,所以这也鼓励大家不要把可以链下执行的操作放到区块链上。 对于每个执行的命令,都会有一个特定的成本,以气体为单位计算。 合约可用的每个命令都将具有相应的气体值。 这里列出了一些命令的耗气量。

交易消耗的gas和gas

每笔交易都需要包括一个 gas 限额(有时称为 startGas)和交易愿意为每单位 gas 支付的费用。 矿工可以选择打包这些交易并收取这些费用。 在现实中,今天所有的交易最终都是由矿工选择的,但是用户选择支付的交易手续费会影响交易打包的等待时间。 如果交易由于计算,包括原始消息和一些触发的其他消息,需要小于或等于设置的gas limit,那么交易将被处理。 如果总耗气量超过gas limit,所有操作将被还原,但交易成立,交易费仍由矿工收取。 区块链将显示交易已尝试完成,但由于没有提供足够的气体,所有合约命令都被还原。 因此,交易中未使用的多余gas将以以太币的形式返回给交易发起方。 因为 gas 消耗通常只是一个粗略的估计,许多用户会多付 gas 以确保他们的交易被接受。 这很好,因为多余的气体将退还给您。

估算事务消耗

交易的交易费用由两个因素组成:

以太坊币交易官方网站_以太坊期货即将上线交易_以太坊交易类型

交易费 = gasUsed * gasPrice

使用的气体

EVM 中的每个命令都设置了相应的耗气量值。 gasUsed是所有执行命令的gas消耗值之和。

如果你想估计gasUsed,你可以使用这个estimateGas API

汽油价格

一个用户可以构建并签署一个交易,但是每个用户都可以设置他们想要使用的 gasPrice,甚至可以设置为 0。但是,以太坊客户端的 Frontier 版本默认的 gasPrice 为 0.05e12 wei。 矿工为了利润最大化,如果大量交易使用默认的gasPrice 0.05e12 wei,矿工基本很难接受低gasPrice的交易,更不用说0gasPrice的交易了。

交易手续费案例

经许可,我将使用 MyEtherWallet 团队的这个示例并借用他们的分析。 请参考他们关于气体的介绍。 他们还有一个小页面,您可以在其中将以太币转换为气体计数的小单位。

你可以把gasLimit理解为你的汽车油箱的上限。 同时,gasPrice 被理解为石油的价格。

对于汽车,汽油可能是每升(单位)2.5 美元(价格)。 在以太坊中,每个气体(单位)为 20 GWei(价格)。 为了加满你的“油箱”,需要 10 升 2.50 美元的油 = 25 美元。 同样,20 GWei 的 21000 gas = 0.00042 ETH。

因此,总交易费用将为 0.00042 ETH。

发送代币通常会消耗大约 50,000 到 100,000 gas,因此总交易费用会增加 0.001 到 0.002 ETH。

以太坊币交易官方网站_以太坊期货即将上线交易_以太坊交易类型

什么是“区块气体限制”?

区块gas limit是单个区块允许的最大gas量,可以用来决定一个区块可以打包多少笔交易。 例如,我们有 5 笔交易,gas limit 分别为 10、20、30、40 和 50。如果区块 gas limit 为 100,那么前 4 笔交易可以成功打包到这个区块中。 矿工有权决定将哪些交易包含在区块中。 因此,另一个矿工可以选择将最后两笔交易包含到这个区块 (50+40) 中,然后包含第一笔交易 (10)。 如果您尝试打包一个将使用超过当前区块 gas 限制的交易,该交易将被网络拒绝,您的以太坊客户端将报告错误“交易超出区块 gas 限制”。 以下示例来自 Ethereum StackExhcange 帖子。

当前区块的gas limit为4,712,357 gas,数据来自ethstats.net,也就是说一个区块大约可以塞入224笔转账交易(gas limit为21000)(出块时间在15-20秒左右波动) . 该协议允许每个区块的矿工调整区块气体限制,任意增加或减少 1/2024 (0.0976%)。

谁来决定

区块的气体限制由网络上的矿工决定。 与可调整的区块 gas limit 协议不同,它有一个默认的挖矿策略,即大多数客户端默认的最小区块 gas limit 为 4,712,388。

区块 gas limit 是如何改变的

以太坊上的矿工需要使用挖矿软件,例如ethminer。 它将连接到 geth 或 Parity Ethereum 客户端。 Geth 和 Pairty 都有允许矿工更改配置的选项。 以下是 geth 挖矿命令行选项以及奇偶校验选项。

什么是以太坊网络上的“DoS”攻击?

最近的一些评论表明,以太坊网络正在慢慢变慢以太坊交易类型,变得拥堵甚至无法使用。 这些评论将这种减速过程称为对以太坊网络的“DoS”攻击。 当以太坊网络上始终存在完整的区块并且网络上有大量交易待处理时,就会发生所谓的 DoS 情况。 同时,矿工有权根据交易手续费选择打包哪些交易。 如果此时队列中(交易池中)有几千笔交易等待打包,可能会导致数小时的交易异常延迟。 DDoS 可以是恶意的也可以是非恶意的。

恶意拒绝服务

去年秋天,以太坊遭到某人或某个团体的攻击,制造了大量垃圾交易。 以下博客中描述了该攻击:

攻击者通过在他们的智能合约中反复的调用某些命令来让客户端难以处理这些计算,但是这些命令都只消耗少量的gas所以调用起来十分廉价。

以太坊期货即将上线交易_以太坊币交易官方网站_以太坊交易类型

在这次攻击中,矿工被要求将 gas limit 降低到 150 万,后来在另一起事件中将其更改为 200 万。 还有其他几起事件要求矿工在网络受到攻击时降低区块气体限制。

非恶意拒绝服务

非恶意 DoS 实际上是当网络面临大量交易并且处理交易需要比平时更多的时间。 由于最近 ICO 的流行,以太坊网络多次被交易填满。 我们在 Infura 的朋友就此写了一篇技术分析文章。

为什么区块填充时区块gas limit不会自动调整?

主要原因:矿工没有使用gas limit动态调整的功能。

以太坊协议中有一种机制允许矿工投票决定 gas limit,因此无需硬分叉即可调整区块大小。 最初,该机制与另一种默认策略绑定,即矿工默认投票使区块 gas 上限至少为 470 万,并且趋向于最近 1024 个区块的 gas 使用量的 1.5 倍。 这允许块大小根据需要自动增加,并且还有一个可用于防止垃圾交易的限制。

如“恶意 DoS”部分所述,历史上曾发生过几次攻击以太坊交易类型,矿工不得不使用非默认设置来帮助降低攻击的影响。 但现在的问题是,攻击后池没有将设置更改回默认值。 大约一个月前,矿工被要求更改 gas limit 和 gas price 设置以再次添加 gas limit 动态调整功能。 由于最近的代币销售热潮,许多区块被填满,区块链交易受阻。

ETH Gas Station 是一个网站,人们可以在其中查看最新的区块 gas 限制设置。

矿工需要做什么来解决这个问题?

矿工可以在 Geth 或 Parity 客户端更改设置,重新启动动态 gas limit 调整。 注意:这些设置是在这个 Reddit 线程中找到的,实际上可以设置得更高(参见这个线程)。

盖思

推荐设置

以太坊交易类型_以太坊币交易官方网站_以太坊期货即将上线交易

--gasprice 4000000000 --targetgaslimit 4712388

解释

--targetgaslimit 目标 gas limit 设置要开采的区块的人工目标 gas floor(默认值:“4712388”) --gasprice 开采交易可接受的最低 gas 价格(默认值:“20000000000”)。 注意:gasprice 列在 wei 中。

平价

推荐设置

--gas-floor-target 4712388 --gas-cap 9000000 --gasprice 4000000000

解释

--gas-floor-target 密封新块时每个块的目标气体量(默认值:4700000)。

--gas-cap 由于交易量,我们将每个区块的气体限制提高多少的上限(默认值:6283184)。

--gasprice 为接受挖矿的交易支付的每个 GAS 的最低 Wei 数额。 注:gasprice 以 wei 为单位列出。 注 2:--gasprice 是一个“遗留选项”

额外的挖矿设置选项

查看 CLI 选项页面,了解矿工还可以如何调整优化设置。

资源和进一步阅读

原文链接: