0
votes

Comment estimez-vous la limite de gaz actuelle avant d'envoyer une transaction?

Plus précisément, je souhaite que mon node.js puisse envoyer un jeton ERC721 à un autre portefeuille. Parfois, le prix de l'essence est élevé et ma transaction reste bloquée pendant des heures. Dans ces cas, j'aimerais que mon node.js utilise plus de gaz pour envoyer le jeton à temps.

J'ai essayé d'obtenir la limite de gaz du dernier bloc, mais elle semble toujours beaucoup trop basse.

var count = web3.eth.getTransactionCount (expéditeur);

  var rawTransaction;

  var block = web3.eth.getBlock("latest");
  var currGas = block.gasLimit;
  currGas = currGas.toString(16);
  currGas = '0x' + currGas;

  if(isSending){
    rawTransaction = {
        "from": sender,
        "nonce": web3.toHex(count),
        "gasPrice": currGas,
        "gasLimit": "0x3A980",
        "to": skyDropContract,
        "value": "0x0",          
        "data": myContractABI.startGame.getData(index, {from: sender}),
        "chainId": 0x01
    };
  }

J'utilise web3@0.20.0 mais web3@0.20.0 peux changer de version si j'en ai vraiment besoin. Existe-t-il un moyen d'estimer le coût de ma transaction avant de l'envoyer? Je pourrais même dépasser de 1 gWei le coût estimé actuel.


1 commentaires

Il semble que vous confondez les limites et les prix du gaz. Vous obtenez la limite de gaz du bloc et essayez de l'utiliser comme prix de l'essence. La limite de gaz de bloc est la quantité de gaz pouvant être utilisée au total par toutes les transactions d'un bloc. Le prix du gaz correspond au nombre de wei par unité de gaz que vous êtes prêt à payer pour que votre transaction soit exploitée.


3 Réponses :


1
votes

vous pouvez essayer des estimategas avec web3 1.0

myContract.methods.startGame(index)
    .estimateGas(
        {
            from: _from,
            gasPrice: _gasPrice
        }, function(error, estimatedGas) {
        }
    )
});


0 commentaires

0
votes

gasLimit fait référence à la quantité maximale de gaz qui peut être dépensée. Vous pouvez obtenir et réutiliser le dernier bloc total gasLimit en appelant quelque chose comme ceci:

web3.eth.getBlock("latest").gasLimit

Mais en pratique, lorsque vous créez des transactions, pensez à gasLimit comme au montant maximum ( en wei ) que vous êtes prêt à payer.

C'est un mécanisme de protection pour vous, car il vous évite de dépenser tout votre éther si l'exécution a des coûts trop élevés.

Et c'est une fonction de sécurité EVM pour éviter de rester bloqué en cours d'exécution, car si l'exécution atteignait le gasLimit de coûts, elle s'arrêterait et ne restait pas bloquée.

Donc, pour le développement, vous pouvez simplement réutiliser la dernière limite de bloc ou utiliser des quantités élevées. Mais comme vous souhaitez déployer quoi que ce soit, améliorez vos estimations et vous aurez une meilleure idée de la quantité de gaz que vous êtes prêt à payer, au maximum.


0 commentaires

0
votes

Espérons que ce qui suit aidera:

var block = await web3js.eth.getBlock("latest");
var gasLimit = block.gasLimit/block.transactions.length;


0 commentaires