es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué la tarifa de web3.eth.estimateGas es diferente a la de Metamask?

Utilicé web3.eth.estimateGas para calcular la comisión de una transacción con datos. Mi código a continuación:

var web3 = new Web3('https://bsc-dataseed1.binance.org:443');

var esGas;
web3.eth.estimateGas({
    "from": 'mi dirección',
    "nonce": 1,
    "to": 'dirección del contrato',
    "data": 'datos'
}).then((result) => {
    esGas = result; // siempre 81332 pero Metamask es 89465
});
var gasPrice;

web3.eth.getGasPrice(function(e, r) {
    gasPrice = r; // siempre 5 GWei como Metamask
});

Con el comando anterior, el resultado siempre es 0.00040666 mientras que con los mismos ‘datos’,

Pero usé Metamask, su resultado siempre es Cantidad máxima: 0.00044732 BNB

web3.utils.fromWei(gasPrice.toString(), 'ether') * esGas; // 0.00040666

¿Alguien puede ayudarme a explicar? ¿Y cómo calcular como Metamask? ¿O mi cálculo es seguro para enviar?

Muchas gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el cálculo utilizando web3.eth.estimateGas no siempre es preciso en comparación con la estimación de gas proporcionada por Metamask. Esto podría deberse a diferencias en cómo las dos plataformas calculan el gas para las transacciones.

    Para calcular la tarifa como Metamask, puedes utilizar la siguiente fórmula:

    tarifa = gasPrice * gasLimit

    donde gasPrice es el precio actual del gas en Wei (que ya has obtenido utilizando web3.eth.getGasPrice) y gasLimit es el gas estimado necesario para la transacción (que has obtenido utilizando web3.eth.estimateGas).

    Luego, puedes convertir la tarifa de Wei a BNB utilizando web3.utils.fromWei:

    tarifaBNB = web3.utils.fromWei(tarifa.toString(), 'ether')

    Ten en cuenta que la cantidad máxima de BNB que se puede enviar en una sola transacción es 0.00044732 BNB según el resultado de Metamask, por lo que debes asegurarte de que la tarifa calculada esté dentro de este límite antes de enviar la transacción.

    En resumen, para calcular la tarifa para una transacción utilizando Metamask:

    1. Obtén el precio actual del gas utilizando web3.eth.getGasPrice
    2. Estima el gas necesario para la transacción utilizando web3.eth.estimateGas
    3. Calcula la tarifa utilizando la fórmula tarifa = gasPrice * gasLimit
    4. Convierte la tarifa de Wei a BNB utilizando web3.utils.fromWei
    5. Asegúrate de que la tarifa calculada esté dentro del límite máximo de 0.00044732 BNB antes de enviar la transacción.

Comments are closed.