Unable to call contract function from web3 with big number as parameter
Solution 1
I tried sending the parameter as String and it worked.
Posting this answer, so might be helpful for somebody.
Solution 2
I'm using BigInt in my Truffle UnitTest
it('should return correct balances when transfer', async () => {
const receiver = accounts[2];
const balanceOfOwner = await contractInstance.balanceOf.call(owner);
assert.equal(balanceOfOwner, totalSupply * 10 ** decimals, 'Total balance');
const sendAmount = 69 * 10 ** decimals;
await contractInstance.transfer(receiver, BigInt(sendAmount), {
from: owner,
});
const balanceOfReceiver = await contractInstance.balanceOf.call(receiver);
assert.equal(balanceOfReceiver, sendAmount, 'Received sendAmount');
assert.equal(
await contractInstance.balanceOf.call(owner),
balanceOfOwner - sendAmount,
'Decreased to'
);
});
Fariha Abbasi
Updated on June 05, 2022Comments
-
Fariha Abbasi almost 2 years
Hi I am trying to call a custom function of a contract that expects a parameter of unit256.
Im calling this function from web3 with this value as parameter: 10000000000000000000 (10 with 18 zeros) As soon as this call is hit by web3, I faced following Big number error:
Error: overflow (fault="overflow", operation="BigNumber.from", value=10000000000000000000, code=NUMERIC_FAULT, version=bignumber/5.0.0-beta.138)
Does any one know the cause?
Here is the function of the contract I'm calling:
function lock( address tokenAddress, uint256 amount )
and here is the web3 code snippet:
Contract.methods.lock(0x57AA33D53351eA4BF00C6F10c816B3037E268b7a, 10000000000000000000, ).send({ from: accounts[0], gasLimit: 500000, value: 0 });
I tried the same function with small values for amount and it worked e.g. 1(with 18 zeros)
-
a.t. over 2 yearsI got this error on running a waffle test:
expect(await vrfContract.getHardcodedUintNumber()).to.be.equal(18446205110165755834005948204546580960626098221936403173208959885300094367089);
and was a bit confused by the answer as I thought (and think) it implied: "return theuint256
as a string from the function", even though, in my case, it should return a uint256. However, putting the expected number in double quotes resolved (as a string) it:expect(await vrfContract.getHardcodedUintNumber()).to.be.equal("18446205110165755834005948204546580960626098221936403173208959885300094367089");
-
zozzancs about 2 yearsthank you, I can't believe a simple toString() would solve this, I spent couple of hours on this :)
-
Davide Arcinotti about 2 yearsI don't understand what is the resolution you are suggesting