主页 > imtoken市场打不开 > 科学:以太坊中的账户、交易、Gas 和 Block Gas 限制

科学:以太坊中的账户、交易、Gas 和 Block Gas 限制

imtoken市场打不开 2023-03-03 06:32:20

本文主要介绍科普:以太坊账户、交易、Gas和区块Gas Limit的相关信息,希望这篇关于以太坊账户、交易、Gas和区块Gas Limit的文章,可以帮助小伙伴们有更深入的了解了解以太坊。

ETH(以太坊)以太坊钱包基本概念介绍:

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

科普:以太坊中的账户、交易、Gas 和区块 Gas Limit

什么是帐户?外部拥有的帐户与合同帐户

以太坊有两种账户

这种区别将在即将到来的 Metropolis 升级中抽象出来。

外部拥有的帐户

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

合约账户

合约账户具有以下特点:

p>

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

什么是事务和消息?交易

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

交易包括:

此邮件的收件人

证明发送者打算通过区块链将消息发送给接收者的签名

p>

值字段 - 发送方到接收方的 wei (ether/10^18)) 数量

一个可选的数据字段来存储发送到合约的消息

一个 GASLIMIT 值,表示该事务允许使用的最大计算步数

一个 GASPRICE 值,代表交易的发送者愿意支付的 gas 费用。一个单位 Gas 代表基本指令的执行,例如计算步骤。

消息

合约可以向其他合约发送“消息”。消息是存在于以太坊执行环境中的永不串行且唯一的虚拟对象。可以理解为函数调用。

一条消息包括:

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

什么是气体?

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

gas和交易gas消耗

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

预计交易消耗

一笔交易的交易费用包括两个因素:

gasUsed:交易消耗的gas总量

gasPrice:本次交易中每单位gas的价格(以太币)

交易费 = gasUsed * gasPrice

用过的气体

每个EVM中的命令全部设置为对应的gas消耗值。 gasUsed是所有执行命令的gas消耗值之和。

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

汽油价格

一个用户可以构造和签署一个交易,但是每个用户可以单独设置你想使用的gasPrice,甚至可以为0。但是,以太坊客户端的Frontier版本有一个默认的gasPrice,即0.05e12 伟。为了矿工的收益最大化,如果大量交易使用默认的gasPrice,即0.05e12 wei,那么矿工基本上很难接受低gasPrice的交易,更不用说0gasPrice的交易了.

交易费用案例

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

您可以将 gasLimit 视为汽车油箱的上限。同时gasPrice被理解为油价。

对于汽车,汽油价格可能是每升(单位)$2.5(价格)。在以太坊中,即每 gas(单位)20 GWei(价格)。要填充您的“油箱”,10 升 $2.5 油 = 25 美元。同样,21000 20 GWei 的 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 limit的交易被打包,交易会被网络拒绝,你的以太坊客户端会报错“transaction超过block gas limit”。以下例子来自以太坊StackExhcange的帖子。

当前区块的gas limit是4,712,357 gas,数据来自ethstats.net,也就是说大约有224个转账交易(gas limit是21000)可以塞进一个区块(出块时间大约15-20秒波动)。该协议允许每个区块的矿工调整区块gas限制,正负1/2024(0.0976%)。

谁来决定

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

区块气体限制是如何改变的

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

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

最近有评论称以太坊网络正在慢慢变慢现在中国还能交易以太坊吗,变得拥挤甚至无法使用。这些评论将这种放缓称为对以太坊网络的“DoS”攻击。所谓的 DoS 情况发生在有完整的块并且网络上有大量交易未决时。同时,矿工有权根据交易手续费选择打包哪些交易。如果此时队列中(事务池中)有数千个事务正在等待打包,那么就有可能出现几个小时的异常事务延迟。 DDoS 可以是恶意的,也可以是非恶意的。

恶意拒绝服务

去年秋天,以太坊被某人或某个团体攻击,通过创建大量垃圾邮件交易。以下博客中描述了这种攻击:

攻击者在他们的智能合约中反复调用某些命令,使客户端难以处理这些计算,但这些命令只消耗少量的气体,而且调用起来非常便宜。

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

非恶意 DoS

非恶意 DoS 是指网络面临大量交易,处理交易需要比平时更多的时间。由于 ICO 的流行,以太坊网络最近多次充满交易。 Infura 的朋友为此写了一篇技术分析文章。

为什么块满时不自动调整块气上限?主要原因:矿工不具备动态调整gas限制的能力。

以太坊协议中有一种机制允许矿工通过投票来决定gas限制,因此无需硬分叉即可调整块大小。最初,该机制与另一个默认策略相关联,即矿工投票默认区块 Gas 限制至少为 470 万,并且往往是最后 1024 个区块的 Gas 使用量的 1.5 倍。这允许块大小根据需求自动增加,同时还具有可用于防止垃圾邮件的限制。

如“恶意 DoS”部分所述,历史上曾有过矿工因攻击而不得不使用非默认设置来帮助减少攻击影响的情况。但现在的问题是,矿池在攻击后没有将设置改回默认设置。大约一个月前,矿工被要求更改 gas 限制和 gas 价格设置,以再次添加动态 gas 限制调整。由于最近代币销售的爆炸式增长,许多区块被填满,区块链交易被阻止。

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

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

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

Geth 推荐设置

--gasprice 4000000000 --targetgaslimit 4712388

解释

--targetgaslimit 目标气体限制为要开采的区块设置人工目标气体下限(默认值:“4712388”)--gasprice 为挖掘交易接受的最低气体价格(默认值:“20000000000”)。注:gasprice以wei为单位。

奇偶校验推荐设置

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

解释

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

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

--gasprice 每个 GAS 支付的最低 Wei 金额,用于接受挖矿的交易。注:gasprice 以 wei 为单位。注 2:--gasprice 是“传统选项”

其他挖矿设置选项

您可以参考 CLI 选项页面现在中国还能交易以太坊吗,了解矿工如何调整优化设置。

以上是科普:以太坊中的账户、交易、Gas和区块Gas Limit的详细信息。更多关于以太坊的信息,请关注Scripting Home的其他相关文章!

本站温馨提示:投资存在风险,入市需谨慎。此内容不作为投资和财务建议讨论。

标签:Block GasLimit gas 交易账户 Ethereum