Я запустил свой 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;
}
}
И мой джаваскрипт
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
Похоже, что разница в балансе моего счета такая же, как и в использованном газе, только в другом размере. Значит я запутался? Эти числа выражены в вэй? Я думал, что мне нужно умножить на цену газа, чтобы увидеть, насколько транзакция повлияет на баланс моего счета...? Как я могу заставить GasUsed сравняться с разницей в балансе моего счета?
Вы можете настроить сеть по своему усмотрению в truffle.js
файле.
Один из параметров gasPrice
(по умолчанию 100000000000)
web3.eth.gasPrice
возвращает 20000000000? И в какой величине она выражается? Я не могу добиться, чтобы разница в балансе моего счета была такой же величины, как использованный газ...coinbase
/ miner
в PR.toNumber()
файла BigNumbers
, который вы извлекаете из web3. Я использовал что-то подобное для точного учета газа, уплаченного в тестах на testrpc (который не должен зависеть от фактической цены на газ). Возможно, потребуется некоторый перевод на необещанную версию, но, может быть, попробовать и посмотреть, что получится?Как указано выше:
трюфель использует другой gasPrice, чем testRPC
Если вы действительно хотите использовать web3.eth.gasPrice
его в качестве эталона в своих тестах, при использовании testRPC вы можете форсировать его собственный gasPrice, запустив его с помощью:
testrpc --g 100000000000
о0рагман0о
1
Нацуки_2002
Тьяден Хесс
eth.getTransaction
) покажет фактическую использованную цену на газ.франджо
.toNumber()
любой ценой.