Erc-20
處理大數字的最佳實踐
我有 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。