Solidity

交易中使用的氣體與賬戶餘額不同的問題匹配

  • September 27, 2017

我已經啟動testrpc並部署了一個簡單的 HelloWorld 合約,使用truffle. 我向我的合約發送了一個簡單的交易,並在交易前後記錄了我的賬戶餘額。不幸的是,這不符合我在交易中看到的 gasUsed 參數。

contract HelloWorld {

   uint public x;   

   function HelloWorld() {
       x = 5;
   }

   function set_x(uint _x) returns(uint x) {
       x = _x;
       return x;
   }

}

還有我的 javascript

var HelloWorld = artifacts.require("./HelloWorld.sol");

module.exports = function(callback) {}

from_wei = web3._extend.utils.fromWei

var account1 = web3.eth.accounts[0]; 
var start_balance = web3.eth.getBalance(account1).toNumber();

HelloWorld.deployed().then(function(instance) {

   return instance.set_x(500)

}).then(function(tx) {

   console.log(tx)
   var new_balance = web3.eth.getBalance(account1).toNumber();

   console.log(start_balance + " initial balance");
   console.log(new_balance + " balance after transaction");
   console.log((start_balance - new_balance) + " difference");
   console.log(from_wei(start_balance - new_balance) + " difference (from_wei) ?");
   console.log(web3.eth.gasPrice.toNumber() + " gas price")

})

輸出如下內容:

{ tx: '0x1a2876b330618c75c7e264becbee75c491b47b5a17a0f9f9fe7fb124f0e93113',
 receipt:
  { transactionHash: '0x1a2876b330618c75c7e264becbee75c491b47b5a17a0f9f9fe7fb124f0e93113',
    transactionIndex: 0,
    blockHash: '0xf30134cac3be167d6053a21953b87010ce7145ccb36775e76d38458dddfa81b9',
    blockNumber: 16,
    gasUsed: 21736,
    cumulativeGasUsed: 21736,
    contractAddress: null,
    logs: [] },
 logs: [] }
99939363900000000000 initial balance
99937190300000000000 balance after transaction
2173600000000000 difference
0.0021736 difference (from_wei) ?
20000000000 gas price

看起來我賬戶餘額的差異與使用的氣體相同,只是幅度不同。所以我很困惑?這些數字是用wei表示的嗎?我想我需要乘以汽油價格才能看到交易會對我的賬戶餘額產生多大影響……?我怎樣才能讓 GasUsed 等於我賬戶餘額的差額?

您可以根據需要在truffle.js文件中配置網路。

其中一個參數是gasPrice(預設為 100000000000)

文件

testrpc將交易的 gas 價格硬編碼為0x01,至少截至4727b40

引用自:https://ethereum.stackexchange.com/questions/13821