我已经为测试目的建立了一个专用的POA Ethereum网络。从这个链接:煤气是否在PoA网络中燃烧?,它说气体将在网络中流通(即反馈给签名者的帐户)。然而,在我的情况下,似乎有些气体确实消失了.
我设置了两个节点,其中0xb8fd21c7427a7208e34ecce2e70deb6453009a81作为签名者,0x72f233e8ec0550734361a4c8f2a944eab855af8a作为另一个节点。它们的初始余额都是5e+24:
> eth.getBalance(eth.accounts[0])
5e+24
> eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
5e+24我连接到node2,然后尝试将一个零值的事务发送给签名者,如下所示:
eth.sendTransaction({
...... to: '0xb8fd21c7427a7208e34ecce2e70deb6453009a81',
...... from: eth.accounts[0],
...... value: 0
...... });然后得到如下结果:
> eth.getBalance(eth.accounts[0])
4.999999999978976845715e+24
> eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
5.000000000021e+24似乎从节点中扣除了气体,并将其添加回签名者。
然后,我试图连接到签名者,并发送类似的事务如下:
eth.sendTransaction({
...... to: '0x72f233e8ec0550734361a4c8f2a944eab855af8a',
...... from: eth.accounts[0],
...... value: 0
...... });所得结果如下:
> eth.getBalance(eth.accounts[0])
5.000000000020999999853e+24
> eth.getBalance('0x72f233e8ec0550734361a4c8f2a944eab855af8a')
4.999999999978976845715e+24据观察,签字人的平衡略有下降。在这种情况下,有什么我怀念的“消失的”乙醚作为气体吗?谢谢你的帮助。
更新1:创世纪更新,试图降低分配余额以简化输出,更新后的genesis.json如下:
{
"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收据如下:
{
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
并检查节点的余额:
eth.getBalance('0xb8fd21c7427a7208e34ecce2e70deb6453009a81')
4999998887252861000
eth.getBalance('0x72f233e8ec0550734361a4c8f2a944eab855af8a')
5000000000000000000看来,花费在汽油上的ETH并没有添加到签字人的地址中。但与此同时,它们的总和并不像预期的那样: expected:5000000000000000000 reality:5000021000000000000不确定我的配置是否错了,签名者变成了其他地址。因此,我试图更新我的发现,看看我是否错误地配置它。
非常感谢!
发布于 2023-04-10 10:56:29
您的观察“消失了”的交易费用,这是与发送交易。即使在POA网络中,交易费用仍然被用来激励验证者将交易包含在它们正在封闭的块中。
在您的例子中,签名者也是验证器,因此事务费最终会返还给签名者。
在第一个事务中,您将以太从非签名节点发送到签名节点,事务费用将从非签名节点中扣除并发送回签名节点。由于这个原因,非签字人节点的平衡下降,签名者节点的平衡上升。
在第二个事务中,您将以太从签名节点发送到非签名节点,事务费用由签名节点支付,但也会接收回验证器。签字人的余额略有差异,原因是在计算和加回交易费用时出现舍入错误。
为核实消失的以太是否应支付交易费用,请检查交易使用的天然气和天然气价格,以确定以太在天然气上的花费和从账户余额中扣除的以太是否相符。为此,可以使用以下命令:
1:通过tx哈希获取事务处理收据
let receipt = eth.getTransactionReceipt("<tx_hash>")2:计算乙醚在气体中的消耗
var used= receipt.gasUsed;
var price= eth.getTransaction("<tx_hash>").gasPrice;
var ethSpentOnGas = used* price;3:现在比较一下用在汽油上的Eth和从帐户余额中扣除的Eth。
console.log("eth spent on the gas:", ethSpentOnGas);我希望这能澄清你的疑问。
https://ethereum.stackexchange.com/questions/148737
复制相似问题