首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >私人POA气体问题

私人POA气体问题
EN

Ethereum用户
提问于 2023-04-10 04:56:27
回答 1查看 56关注 0票数 2

我已经为测试目的建立了一个专用的POA Ethereum网络。从这个链接:煤气是否在PoA网络中燃烧?,它说气体将在网络中流通(即反馈给签名者的帐户)。然而,在我的情况下,似乎有些气体确实消失了.

我设置了两个节点,其中0xb8fd21c7427a7208e34ecce2e70deb6453009a81作为签名者,0x72f233e8ec0550734361a4c8f2a944eab855af8a作为另一个节点。它们的初始余额都是5e+24

代码语言:javascript
复制
> eth.getBalance(eth.accounts[0])
5e+24
> eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
5e+24

我连接到node2,然后尝试将一个零值的事务发送给签名者,如下所示:

代码语言:javascript
复制
eth.sendTransaction({
...... to: '0xb8fd21c7427a7208e34ecce2e70deb6453009a81',
...... from: eth.accounts[0],
...... value: 0
...... });

然后得到如下结果:

代码语言:javascript
复制
> eth.getBalance(eth.accounts[0])
4.999999999978976845715e+24
> eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
5.000000000021e+24

似乎从节点中扣除了气体,并将其添加回签名者。

然后,我试图连接到签名者,并发送类似的事务如下:

代码语言:javascript
复制
eth.sendTransaction({
...... to: '0x72f233e8ec0550734361a4c8f2a944eab855af8a',
...... from: eth.accounts[0],
...... value: 0
...... });

所得结果如下:

代码语言:javascript
复制
> eth.getBalance(eth.accounts[0])
5.000000000020999999853e+24
> eth.getBalance('0x72f233e8ec0550734361a4c8f2a944eab855af8a')
4.999999999978976845715e+24

据观察,签字人的平衡略有下降。在这种情况下,有什么我怀念的“消失的”乙醚作为气体吗?谢谢你的帮助。

更新1:创世纪更新,试图降低分配余额以简化输出,更新后的genesis.json如下:

代码语言:javascript
复制
{
  "config": {
    "chainId": 12345,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "muirGlacierBlock": 0,
    "berlinBlock": 0,
    "londonBlock": 0,
    "arrowGlacierBlock": 0,
    "grayGlacierBlock": 0,
    "clique": {
      "period": 5,
      "epoch": 30000
    }
  },
  "difficulty": "1",
  "gasLimit": "800000000",
  "extradata": "0x0000000000000000000000000000000000000000000000000000000000000000b8fd21c7427a7208e34ecce2e70deb6453009a810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "alloc": {
    "b8fd21c7427a7208e34ecce2e70deb6453009a81": { "balance": "5000000000000000000000000" },
    "72f233e8ec0550734361a4c8f2a944eab855af8a": { "balance": "5000000000000000000000000" }
  }
}

我试着限制他们两个都是5 5ETH。然后,我连接到node1 (预期的签名者),将零值的事务发送到node2。tx收据如下:

代码语言:javascript
复制
{
  blockHash: "0x78d94ccafc57233337d4e3e9fb3cc6ef9c308839aff97d5055e4ed69b6d73b8f",
  blockNumber: 22,
  contractAddress: null,
  cumulativeGasUsed: 21000,
  effectiveGasPrice: 1052987959,
  from: "0xb8fd21c7427a7208e34ecce2e70deb6453009a81",
  gasUsed: 21000,
  logs: [],
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  status: "0x1",
  to: "0x72f233e8ec0550734361a4c8f2a944eab855af8a",
  transactionHash: "0xf2cdb757f1c143df1ec474920905d2f69bea15f9f4376893da19b1833c273f82",
  transactionIndex: 0,
  type: "0x2"
}

我按照Naveed Ali的回答记录ethSpentOnGas并获得以下值:22112747139000

并检查节点的余额:

代码语言:javascript
复制
eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
4999998887252861000
eth.getBalance('0x72f233e8ec0550734361a4c8f2a944eab855af8a')
5000000000000000000

看来,花费在汽油上的ETH并没有添加到签字人的地址中。但与此同时,它们的总和并不像预期的那样: expected:5000000000000000000 reality:5000021000000000000不确定我的配置是否错了,签名者变成了其他地址。因此,我试图更新我的发现,看看我是否错误地配置它。

非常感谢!

EN

回答 1

Ethereum用户

发布于 2023-04-10 10:56:29

您的观察“消失了”的交易费用,这是与发送交易。即使在POA网络中,交易费用仍然被用来激励验证者将交易包含在它们正在封闭的块中。

在您的例子中,签名者也是验证器,因此事务费最终会返还给签名者。

在第一个事务中,您将以太从非签名节点发送到签名节点,事务费用将从非签名节点中扣除并发送回签名节点。由于这个原因,非签字人节点的平衡下降,签名者节点的平衡上升。

在第二个事务中,您将以太从签名节点发送到非签名节点,事务费用由签名节点支付,但也会接收回验证器。签字人的余额略有差异,原因是在计算和加回交易费用时出现舍入错误。

为核实消失的以太是否应支付交易费用,请检查交易使用的天然气和天然气价格,以确定以太在天然气上的花费和从账户余额中扣除的以太是否相符。为此,可以使用以下命令:

1:通过tx哈希获取事务处理收据

代码语言:javascript
复制
let receipt = eth.getTransactionReceipt("<tx_hash>")

2:计算乙醚在气体中的消耗

代码语言:javascript
复制
var used= receipt.gasUsed;
var price= eth.getTransaction("<tx_hash>").gasPrice;
var ethSpentOnGas = used* price;

3:现在比较一下用在汽油上的Eth和从帐户余额中扣除的Eth。

代码语言:javascript
复制
console.log("eth spent on the gas:", ethSpentOnGas);

我希望这能澄清你的疑问。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/148737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档