Encendí mi testrpc
e implementé un contrato simple de HelloWorld usando truffle
. Envío una transacción simple a mi contrato y registro el saldo de mi cuenta antes y después de la transacción. Desafortunadamente, esto no se suma al parámetro gasUsed que veo en la transacción.
contract HelloWorld {
uint public x;
function HelloWorld() {
x = 5;
}
function set_x(uint _x) returns(uint x) {
x = _x;
return x;
}
}
y mi 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")
})
Produce algo como esto:
{ 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
Parece que la diferencia en el saldo de mi cuenta ES la misma que la gasolina utilizada, solo que una magnitud diferente. Entonces, ¿estoy confundido? ¿Estos números están expresados en wei? Pensé que necesitaba multiplicar por el precio de la gasolina para ver cuánto afectaría la transacción al saldo de mi cuenta... ¿Cómo puedo obtener GasUsed para igualar la diferencia en el saldo de mi cuenta?
Puede configurar la red como desee en truffle.js
el archivo.
Uno de los parámetros es gasPrice
(el valor predeterminado es 100000000000)
web3.eth.gasPrice
devuelve 20000000000? ¿Y en qué magnitud se expresa? No puedo hacer que la diferencia en el saldo de mi cuenta sea de la misma magnitud que el gas usado...coinbase
/ miner
en un PR.toNumber()
en el BigNumbers
que está extrayendo de web3. He usado algo como esto para contabilizar con precisión el gas pagado en las pruebas en el testrpc (que debería ser independiente del precio real del gas). Es posible que necesite alguna traducción a la versión no prometida, pero ¿tal vez intentarlo y ver qué obtienes?Como se indicó anteriormente:
truffle usa un precio de gas diferente al de testRPC
Si realmente quiere usar web3.eth.gasPrice
como referencia en sus pruebas, mientras usa testRPC, puede forzar su propio precio de gas ejecutándolo con:
testrpc --g 100000000000
o0ragman0o
1
natsuki_2002
tjaden hess
eth.getTransaction
) mostrará el precio real del gas utilizadoFrangio
.toNumber()
a toda costa.