MyCrypto/spec/libs/nodes/rpc/rpc.spec.ts
HenryNguyen5 8fe664c171 Replace bignumber.js with bn.js (#319)
* Add definition file for bn.js

* Remove types-bn

* make isBN a static property

* progress commit -- swap out bignumber.js for bn.js

* Swap out bignumber for bn in vendor

* Change modn to number return

* Start to strip out units lib for a string manipulation based lib

* Convert codebase to only base units

* Get rid of useless component

* Handle only wei in values

* Use unit conversion in sidebar

* Automatically strip hex prefix, and  handle decimal edge case

* Handle base 16 wei in transactions

* Make a render callback component for dealing with unit conversion

* Switch contracts to use bn.js, and get transaction values from signedTx instead of state

* Get send transaction  working with bn.js

* Remove redundant hex stripping,  return base value of tokens

* Cleanup unit file

* Re-implement toFixed for strings

* Use formatNumber in codebase

* Cleanup code

* Undo package test changes

* Update snapshot and remove console logs

* Use TokenValue / Wei more consistently where applicable

* Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible

* Clean up prop handling in UnitDisplay

* Change instanceof to typeof check, change boolean of displayBalance

* Fix tsc errors

* Fix token row displaying wrong decimals

* Fix deterministic modal token display

* Handle hex and non hex strings automatically in BN conversion

* Fix handling of strings and numbers for BN

* add web3 fixes & comments

* Display short balances on deterministic modals

* add more tests, fix rounding

* Add spacer to balance sidebar network name

* Fix tsc error
2017-11-12 11:45:52 -08:00

42 lines
1.4 KiB
TypeScript

// Ref: https://github.com/ethereum/wiki/wiki/JSON-RPC
import { hexEncodeQuantity, hexEncodeData } from 'libs/nodes/rpc/utils';
import BN from 'bn.js';
// 0x41 (65 in decimal)
// 0x400 (1024 in decimal)
// WRONG: 0x (should always have at least one digit - zero is "0x0")
// WRONG: 0x0400 (no leading zeroes allowed)
// WRONG: ff (must be prefixed 0x)
describe('hexEncodeQuantity', () => {
it('convert dec to hex', () => {
expect(hexEncodeQuantity(new BN(65))).toEqual('0x41');
});
it('should strip leading zeroes', () => {
expect(hexEncodeQuantity(new BN(1024))).toEqual('0x400');
});
it('should handle zeroes correctly', () => {
expect(hexEncodeQuantity(new BN(0))).toEqual('0x0');
});
});
// 0x41 (size 1, "A")
// 0x004200 (size 3, "\0B\0")
// 0x (size 0, "")
// WRONG: 0xf0f0f (must be even number of digits)
// WRONG: 004200 (must be prefixed 0x)
describe('hexEncodeData', () => {
it('encode data to hex', () => {
expect(hexEncodeData(Buffer.from('A'))).toEqual('0x41');
});
it('should not strip leading zeroes', () => {
expect(hexEncodeData(Buffer.from('\0B\0'))).toEqual('0x004200');
});
it('should handle zero length data correctly', () => {
expect(hexEncodeData(Buffer.from(''))).toEqual('0x');
});
it('Can take strings as an input', () => {
expect(hexEncodeData('0xFEED')).toEqual('0xfeed');
expect(hexEncodeData('FEED')).toEqual('0x46454544');
});
});