Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 037b116

Browse files
committed
add error when passing number to toWei, convert to string
1 parent 710c635 commit 037b116

File tree

3 files changed

+43
-35
lines changed

3 files changed

+43
-35
lines changed

packages/web3-utils/src/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,10 @@ var getUnitValue = function (unit) {
190190
var fromWei = function(number, unit) {
191191
unit = getUnitValue(unit);
192192

193+
if(!utils.isBN(number) && !_.isString(number)) {
194+
throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.');
195+
}
196+
193197
return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10);
194198
};
195199

@@ -218,6 +222,10 @@ var fromWei = function(number, unit) {
218222
var toWei = function(number, unit) {
219223
unit = getUnitValue(unit);
220224

225+
if(!utils.isBN(number) && !_.isString(number)) {
226+
throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.');
227+
}
228+
221229
return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10);
222230
};
223231

test/utils.fromWei.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ describe('lib/utils/utils', function () {
55
describe('fromWei', function () {
66
it('should return the correct value', function () {
77

8-
assert.equal(utils.fromWei(1000000000000000000, 'wei'), '1000000000000000000');
9-
assert.equal(utils.fromWei(1000000000000000000, 'kwei'), '1000000000000000');
10-
assert.equal(utils.fromWei(1000000000000000000, 'mwei'), '1000000000000');
11-
assert.equal(utils.fromWei(1000000000000000000, 'gwei'), '1000000000');
12-
assert.equal(utils.fromWei(1000000000000000000, 'szabo'), '1000000');
13-
assert.equal(utils.fromWei(1000000000000000000, 'finney'), '1000');
14-
assert.equal(utils.fromWei(1000000000000000000, 'ether'), '1');
15-
assert.equal(utils.fromWei(1000000000000000000, 'kether'), '0.001');
16-
assert.equal(utils.fromWei(1000000000000000000, 'grand'), '0.001');
17-
assert.equal(utils.fromWei(1000000000000000000, 'mether'), '0.000001');
18-
assert.equal(utils.fromWei(1000000000000000000, 'gether'), '0.000000001');
19-
assert.equal(utils.fromWei(1000000000000000000, 'tether'), '0.000000000001');
8+
assert.equal(utils.fromWei('1000000000000000000', 'wei'), '1000000000000000000');
9+
assert.equal(utils.fromWei('1000000000000000000', 'kwei'), '1000000000000000');
10+
assert.equal(utils.fromWei('1000000000000000000', 'mwei'), '1000000000000');
11+
assert.equal(utils.fromWei('1000000000000000000', 'gwei'), '1000000000');
12+
assert.equal(utils.fromWei('1000000000000000000', 'szabo'), '1000000');
13+
assert.equal(utils.fromWei('1000000000000000000', 'finney'), '1000');
14+
assert.equal(utils.fromWei('1000000000000000000', 'ether'), '1');
15+
assert.equal(utils.fromWei('1000000000000000000', 'kether'), '0.001');
16+
assert.equal(utils.fromWei('1000000000000000000', 'grand'), '0.001');
17+
assert.equal(utils.fromWei('1000000000000000000', 'mether'), '0.000001');
18+
assert.equal(utils.fromWei('1000000000000000000', 'gether'), '0.000000001');
19+
assert.equal(utils.fromWei('1000000000000000000', 'tether'), '0.000000000001');
2020
});
2121
});
2222
});

test/utils.toWei.js

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,30 @@ describe('lib/utils/utils', function () {
77
describe('toWei', function () {
88
it('should return the correct value', function () {
99

10-
assert.equal(utils.toWei(1, 'wei'), '1');
11-
assert.equal(utils.toWei(1, 'kwei'), '1000');
12-
assert.equal(utils.toWei(1, 'Kwei'), '1000');
13-
assert.equal(utils.toWei(1, 'babbage'), '1000');
14-
assert.equal(utils.toWei(1, 'mwei'), '1000000');
15-
assert.equal(utils.toWei(1, 'Mwei'), '1000000');
16-
assert.equal(utils.toWei(1, 'lovelace'), '1000000');
17-
assert.equal(utils.toWei(1, 'gwei'), '1000000000');
18-
assert.equal(utils.toWei(1, 'Gwei'), '1000000000');
19-
assert.equal(utils.toWei(1, 'shannon'), '1000000000');
20-
assert.equal(utils.toWei(1, 'szabo'), '1000000000000');
21-
assert.equal(utils.toWei(1, 'finney'), '1000000000000000');
22-
assert.equal(utils.toWei(1, 'ether'), '1000000000000000000');
23-
assert.equal(utils.toWei(1, 'kether'), '1000000000000000000000');
24-
assert.equal(utils.toWei(1, 'grand'), '1000000000000000000000');
25-
assert.equal(utils.toWei(1, 'mether'), '1000000000000000000000000');
26-
assert.equal(utils.toWei(1, 'gether'), '1000000000000000000000000000');
27-
assert.equal(utils.toWei(1, 'tether'), '1000000000000000000000000000000');
10+
assert.equal(utils.toWei('1', 'wei'), '1');
11+
assert.equal(utils.toWei('1', 'kwei'), '1000');
12+
assert.equal(utils.toWei('1', 'Kwei'), '1000');
13+
assert.equal(utils.toWei('1', 'babbage'), '1000');
14+
assert.equal(utils.toWei('1', 'mwei'), '1000000');
15+
assert.equal(utils.toWei('1', 'Mwei'), '1000000');
16+
assert.equal(utils.toWei('1', 'lovelace'), '1000000');
17+
assert.equal(utils.toWei('1', 'gwei'), '1000000000');
18+
assert.equal(utils.toWei('1', 'Gwei'), '1000000000');
19+
assert.equal(utils.toWei('1', 'shannon'), '1000000000');
20+
assert.equal(utils.toWei('1', 'szabo'), '1000000000000');
21+
assert.equal(utils.toWei('1', 'finney'), '1000000000000000');
22+
assert.equal(utils.toWei('1', 'ether'), '1000000000000000000');
23+
assert.equal(utils.toWei('1', 'kether'), '1000000000000000000000');
24+
assert.equal(utils.toWei('1', 'grand'), '1000000000000000000000');
25+
assert.equal(utils.toWei('1', 'mether'), '1000000000000000000000000');
26+
assert.equal(utils.toWei('1', 'gether'), '1000000000000000000000000000');
27+
assert.equal(utils.toWei('1', 'tether'), '1000000000000000000000000000000');
2828

29-
assert.equal(utils.toWei(1, 'kwei'), utils.toWei(1, 'femtoether'));
30-
assert.equal(utils.toWei(1, 'szabo'), utils.toWei(1, 'microether'));
31-
assert.equal(utils.toWei(1, 'finney'), utils.toWei(1, 'milliether'));
32-
assert.equal(utils.toWei(1, 'milli'), utils.toWei(1, 'milliether'));
33-
assert.equal(utils.toWei(1, 'milli'), utils.toWei(1000, 'micro'));
29+
assert.equal(utils.toWei('1', 'kwei'), utils.toWei('1', 'femtoether'));
30+
assert.equal(utils.toWei('1', 'szabo'), utils.toWei('1', 'microether'));
31+
assert.equal(utils.toWei('1', 'finney'), utils.toWei('1', 'milliether'));
32+
assert.equal(utils.toWei('1', 'milli'), utils.toWei('1', 'milliether'));
33+
assert.equal(utils.toWei('1', 'milli'), utils.toWei('1000', 'micro'));
3434

3535
assert.throws(function () {utils.toWei(1, 'wei1');}, Error);
3636
});

0 commit comments

Comments
 (0)