Testing this function:
function withdrawAll ()
public
stopInEmergency () {
if (!msg.sender.send(12 finney)) {
throw;
}
}
My truffle test:
it("Should let correct payouts and withdrawals", function(done) {
var my_contract = My15.deployed();
var unit = "finney";
const user_6_initialBalance = web3.eth.getBalance(user_6);
var user_6_gas_cost = 0;
return my_contract.withdrawAll ({from: user_6});
.then(function(tx_id){
user_6_gas_cost = web3.eth.getTransactionReceipt(tx_id).gasUsed * web3.eth.gasPrice;
const user_6_finalBalance = web3.eth.getBalance(user_6);
const withdrawn = web3.toWei(12, unit);
const recieved = user_6_finalBalance - user_6_initialBalance;
const diff = withdrawn - recieved;
console.log('gasPrice: ', web3.eth.gasPrice.toString(10));
console.log('withdrawn: ', web3.fromWei(withdrawn, unit));
console.log('recieved: ', web3.fromWei(recieved, unit));
console.log("gas cost: ", web3.fromWei(user_6_gas_cost, unit));
console.log('diff: ', web3.fromWei(diff, unit));
}).then(function(){
done();
}).catch(done);
});
When running testrpc –g 1
gasPrice: 1
withdrawn: 12
recieved: 9.127600000008192
gas comission: 0.000000000028724
diff: 2.872399999991808
When running testrpc –g 100000000000
gasPrice: 100000000000
withdrawn: 12
recieved: 9.127600000008192
gas comission: 2.8724
diff: 2.872399999991808
Why doesn't gas price influence the amount user_6 receives?
Best Answer
In your example you are using the network gas price and you should use the transaction gas price.
If you do not set the gasPrice in a transaction it will use a default value (with testrpc appears to be 100 Gwei). It will not use the network gas price (returned by web3.eth.gasPrice). You have to explicitely set the gas price you want.