Meilleure façon d’effectuer une formule de conversion de jeton

arrière

Meilleure façon d’effectuer une formule de conversion de jeton


J’ai donc du mal à multiplier en Wei.

================================================== ===================== Voici la version courte:

Je veux multiplier 7000 éther par 1,25 pour obtenir 8750 éther comme résultat attendu.

================================================== =====================

Voici la version longue confusion:

J’ai un contrat intelligent qui tire la valeur USD de l’ETH puis effectue une conversion de la valeur USD à 75 cents sur le dollar et émet les jetons de manière appropriée.

Mon problème se multiplie à Wei.

J’aurais aimé faire tous les calculs dans Wei mais j’ai besoin d’une conversion en USD dans le cadre de la formule.

Je souhaite continuer à utiliser SafeMath dans les calculs.

Disons que j’ai 7 ETH envoyés au contrat Le prix ETH est de 1000 USD à l’époque, ce qui fait la valeur USD à 7000 Le taux de change est de 0,001 USD à ETH

Les jetons sont émis à 0,75 à 1 dollar, donc je multiplie par 1,25 pour obtenir les 8 750 jetons comme nombre final en mathématiques régulières

J’ai tout sauf la multiplication par 1,25

J’ai supposé que je multiplierais par 1250000000000000000 Wei pour 1,25, mais mon nombre final est trop élevé.

Quelle est la bonne façon d’effectuer ce calcul avec solidité?

Voici mon code:

 pragma solidity ^ 0.4 . 18 ; 

 import   "./SafeMath.sol" ; 
 import   "./Ownable.sol" ; 
 import   "./usingOraclize.sol" ; contract Test   is   Ownable ,  usingOraclize { 

   using   SafeMath   for  uint256 ; 

   uint   public   ETHUSDPriceUINT   =   1000000000000000000 ;   // this is a place holder for the Oraclize API call back variable 

   function   Test ( address _tokenAddress ,  address _multiSigAddress )   { 

   } 

   function  buyTokens ( string   _ETHprice )  payable returns ( uint )   { result =   _ETHprice ;   // provide the current price of ETH in USD 
       uint   ETHContributionInWei   =  msg . value ; 
       ETHUSDPriceUINT   =  parseInt ( result ,   2 );   // let's use two decimal points 
       uint  exchangeRate =   ETHUSDPriceUINT . div ( ETHUSDPriceUINT ); 
       uint  USD_Value =   ETHContributionInWei . mul ( ETHUSDPriceUINT ); 
       uint  tokenFactor =   1250000000000000000  wei ; 
       uint  numTokensIssued =  USD_Value . mul ( tokenFactor ); 

       return  numTokensIssued ; 

   } 

   function   ()  payable { 

   } 

 } 

Réponses


 smarx

Je veux multiplier 7000 éther par 1,25 pour obtenir 8750 éther comme résultat attendu.

 function  doit ()   public  pure returns ( uint256 )   { 
     return   7000  ether *   125   /   100 ; 
 } 


 Adam Kipnis

Je pense que c’est ce que vous cherchez

 function  convert ()  payable public  returns ( uint )   { 
   uint  exchange =   1000 ; 

   return   (( msg . value *  exchange )   *   5   /   4 )   /   ( 1  ether ); 
 } 


 MSwezey

C’est ainsi que je gère généralement la conversion des jetons USD -> Ether ->.

Le code ci-dessous n’est pas une fonction Solidity – mais des segments de code

 uint256 USD_CENT_PER_TOKEN // USD in cents as a whole integer so .50 cents would be 50 uint256 _usdPerEth // the usdPerEth rate incoming as a constructor parameter 

 // set via the constructor for the rate variable (assuing an Open Zeppelin based crowdsale) 
 // .mul(1e2) is used to convert whole dollars into cents - not required if value is already in cents 
 ( _usdPerEth . mul ( 1e2 )). div ( USD_CENT_PER_TOKEN ) 

 // used in the buy method uint256 tokenAmount =  msg . value . mul ( rate ); 

 

#(une, #de, #façon, Conversion, d’effectuer, formule, jeton, meilleure

 

yahoo

Laisser un commentaire

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