Comment puis-je définir correctement le gaz / la valeur pour envoyer une transaction avec web3.js?

Shamoon

Comment puis-je définir correctement le gaz / la valeur pour envoyer une transaction avec web3.js?


Mon code est:

 function  sendEth ( fromAddress ,  secret ,  toAddress ,  amount )   { 
   let  params =   { to :  toAddress , from :  fromAddress , value :  web3 . utils . toWei ( amount +   '' ,   'ether' ) 
   }; console . log ( params ); 

   return   Promise . all ([ web3 . eth . estimateGas ( params ),  web3 . eth . getGasPrice ()]) 
     . then (( response )   =>   { 
       const  estimatedGas =  response [ 0 ]; 
       const  gasPrice =  response [ 1 ]; params . gas =  estimatedGas ; params . gasPrice =  web3 . utils . toWei ( 1.1   *  gasPrice +   '' );   // Use 10% more gas than recommended params . value =  web3 . utils . toWei ( params . value -  params . gas *  params . gasPrice +   '' ); 

       return  web3 . eth . accounts . signTransaction ( params ,  secret ); 
     }) 
     . then (( signedTx )   =>   { 
       return  web3 . eth . sendSignedTransaction ( signedTx . rawTransaction ); 
     }); 
 } 

Mais je reçois une erreur:

   Error :   while  converting number to string ,  invalid number value '-1.1549989999999999e+23' ,  should be a number matching (^-?[ 0 - 9. ]+). 

Réponses


 Ismael

Javascript ne prend pas en charge les nombres avec une précision arbitraire qui sont requis lors du calcul avec des valeurs d’éther (l’éther a 18 décimales!).

Web3 v1.0, il encapsulera les valeurs numériques dans les objets bn.js. Au lieu d’utiliser des opérateurs mathématiques réguliers (+, -, *, /, etc.), vous devez utiliser des méthodes arithmétiques de bn.js:

Au lieu de a * b + c vous devez faire a.mul(b).add(c) . Pour convertir au format bn.js, web3 fournit la fonction web3.utils.toBN() .

Par exemple, vos calculs de gaz peuvent être effectués comme ceci:

 params . gasPrice =  web3 . utils . toBN ( gasPrice ) 
     . mul ( web3 . utils . toBN ( 11 )) 
     . div ( web3 . utils . toBN ( 10 ));    // gasPrice * 1.1 params . value =  web3 . utils . toBN ( params . value ) 
     . sub ( web3 . utils . toBN ( params . gas ). mul ( web3 . utils . toBN ( params . gasPrice ) 
         ) 
     );       // value - (gas * gasPrice) 

Shamoon

Il n’y a aucun moyen de faire directement times 1.1 ?

 

/, #(une, #la, #pour, avec, comment, correctement, définir, envoyer, gaz, Le, Puis-je, transaction, valeur, web3.js?

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *