Erc-20

處理大數字的最佳實踐

  • March 1, 2022

我有 18 位十進制的 erc20 令牌,問題是如果我想傳輸 100k 令牌,javascript 無法處理,因為會有很多 0。

所以在智能合約中,我將所有的轉移函式覆蓋到這個

function transfer(address _toadr, uint256 _amount) override public returns (bool) {
   uint transferedAmount = _amount*10**18;
   uint balance =address(msg.sender).balance *10**18;
   require(balance >= transferedAmount);
   
   uint256 _teamFee = (transferedAmount / 100) * teamFee; 
   uint256 _marketingFee = (transferedAmount / 100) * marketingFee; 
   uint256 _rewardFee = (transferedAmount / 100) * rewardFee;
   uint256 _finalAmount = transferedAmount-(_teamFee+_marketingFee+_rewardFee);

   _transfer(msg.sender,team,_teamFee);
   _transfer(msg.sender,marketing,_marketingFee);
   _transfer(msg.sender,rewardpool,_rewardFee);
   _transfer(msg.sender,_toadr,_finalAmount);

   return true;
}

這樣做安全嗎?或者對此有最佳實踐嗎?

我聽說我們可以使用 web3.js 中的一些 utils,但是如果我使用 web3.js utils,我沒有找到比較 2 值的方法。

你應該使用一些BigNumber圖書館。web3jsBN為此:https ://web3js.readthedocs.io/en/v1.2.11/web3-utils.html#bn

BN您一起可以進行計算和與大數字的比較。你絕對不應該因為大數字而改變你的 Solidity。

引用自:https://ethereum.stackexchange.com/questions/122834