0

I am confused with the use of large numbers in solidity, ethereum. I have some doubts please help me with them.

1) I am not able to represent the value of p using p.toNumber() but can represent it when I use p.toString(). where p is

uint256 p = msg.value

2) myToken.transfer(acc[3], 100000000000000000000, {from:acc[0]})

I am not not able to transfer a large number of tokens like in the above it says { Error: invalid number value (arg="_value", coderType="uint256", value=100000000000000000000)

3)not able to set the initial supply with

module.exports = function(deployer) { deployer.deploy(DappToken, 1000000000000000000000)

but when I use "" it works, I am not able to understand the reason behind any of these but I think it's the same, please help

I assure you that the rest of the code is fine and works well for small numbers.

thanks.

1

In Javascript, the maximum safe integer is 2^53-1.

So you should generally avoid using numbers like 100000000000000000000.

For example, in your code, you should change this:

myToken.transfer(acc[3], 100000000000000000000, {from:acc[0]})

To this:

myToken.transfer(acc[3], "100000000000000000000", {from:acc[0]})

In addition to that, the usage of toNumber() is also unsafe, as you have noticed yourself.

When you call from the off-chain an on-chain function which returns uint256, you get a BigNumber object. If this object represents a number smaller than Number.MAX_SAFE_INTEGER, then it is safe to use toNumber() on it. But since you do not know that for sure, you should avoid using toNumber().

Also, please note that it is better to use toFixed() than toString(), because the latter may return the scientific notation of the number (e.g. 1+e18), which may give you unexpected problems when you later use it in other contexts.

  • what if I want to use transfer that much value of tokens . and what should I do if I want to send 1000ether then what should I do, it does not process when I use 1000000000000000000000. – Yash Shukla Feb 10 at 7:11
  • @YashShukla: What part did you not get when I wrote that you should use strings instead of integers for values larger than 2^53-1??? In fact, even according to your own "admittion" (at the bottom of your question), you seem to have noticed that yourself, so I don't quite understand why you keep asking it. – goodvibration Feb 10 at 7:14
  • Can you help me with this please really stuck here ethereum.stackexchange.com/questions/67008/… – Yash Shukla Feb 13 at 16:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.