为什么以太坊交易是 (startingBalance - endBalance) > (gasUsed * gasPrice)?

Why is (startingBalance - endBalance) > (gasUsed * gasPrice) for an Ethereum transaction?

我正在尝试在 truffle 框架中编写 javascript 测试,以验证移动资金的交易后以太币余额的变化。

我想排除 gas 费用,这样我就可以确定余额变化的确切金额。

以下是我试图确定在 gas 上花费的 eth 数量的方法:

let startingBalance = await web3.eth.getBalance(me);
let tx = await contract.method.sendTransaction({from: me, gasPrice: 1});
let endBalance = await web3.eth.getBalance(me);
let receipt = await web3.eth.getTransactionReceipt(tx);
await (startingBalance - endBalance).should.be.equal(receipt.gasUsed);

我的推理是,因为:

receipt.gasUsed 应该等于余额变化。

但是 运行 针对 testrpc,测试抱怨余额减少了 2000 左右,比 gasUsed * gasPrice 略多。

是否还有其他因素可能导致 ETH 余额变化?

谢谢!

我不会信任 testrpc。在测试网上 运行 尝试你的代码

startingBalanceendBalanceBigNumber 个对象。将您的测试更改为

await (startingBalance.minus(endBalance)).should.be.equal(receipt.gasUsed);