mirror of
https://github.com/status-im/MyCrypto.git
synced 2025-01-09 18:45:38 +00:00
67b2e6491c
* Refactor BaseNode to be an interface INode * Initial contract commit * Remove redundant fallback ABI function * First working iteration of Contract generator to be used in ENS branch * Hide abi to clean up logging output * Strip 0x prefix from output decode * Handle unnamed output params * Implement ability to supply output mappings to ABI functions * Fix null case in outputMapping * Add flow typing * Add .call method to functions * Partial commit for type refactor * Temp contract type fix -- waiting for NPM modularization * Remove empty files * Cleanup contract * Add call request to node interface * Fix output mapping types * Revert destructuring overboard * Add sendCallRequest to rpcNode class and add typing * Use enum for selecting ABI methods * Add transaction capability to contracts * Cleanup privaite/public members * Remove broadcasting step from a contract transaction * Cleanup uneeded types * Refactor ens-base to typescript and add typings for ENS smart contracts * Migrate ens-name-search to TS * Add IResolveDomainRequest * Fix rest of TSC errors * Add definition file for bn.js * Remove types-bn * Fix some typings * 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 * Split different ENS modes into their own components * Fix Abi typedef * Remove redundant moment type package * Add Aux helper component * Split out resolve components * Make 'to' parameter optional * Change import type * Change typing to be base domain request * Split handling of resolving into object handler * Fix countdown component * Adjust element spacing * Implement reveal search functionality * Add unit display for highest bidder * Fill out forbidden/NYA modes * ENS wallet component skeleton * Clean up prop handling in UnitDisplay * Change instanceof to typeof check, change boolean of displayBalance * Add ENS wallet component * Cleanup spacing * Convert ConfModal for bidding in ENS * Make ui component for placing bids * Fix destructure in placeBid * Pass through entire wallet * Remove text center * Display inline notification ENS isValid & add some ENS tests * Add export of Aux * Reformat with prettier * progress... * Add ENSUnlockLayout * Add RevealBid component * organize NameResolve components * Merge ENS with transaction-refactor changes * Fix address resolution * Update styles * convert ens name to lowercase before checking * Add overflow-y:scroll to table * update ens snapshots & tests * cast 'undefined' state argument as any for testing * clean up components * Connect unitconverter to redux state * remove unnecessary type assertion * fix spinner size * remove old bidmodal * validate bidmask before opening modal * progress... * Update styles * Add saga / actions for placing a bid * Update types & clean up dead code * Delete old test * Dispatch PlaceBidRequested acitons * Progress commit -- get ENS bidding ready for tx generation via sagas * Seperate ENS action creators and types * Add reducer & actions for ENS fields * Add preliminary sagas for bid mask and bid value * Initial commit * Add loading indicator * Remove some bidding components * Revert bidding files * Remove more bidding code * Remove rest of bidding code * Fix ENS error message * Revert value saga changes * Remove error param from setting 'To' field * Fix existing ENS test * Cleanup address resolution, remove dead code * Remove error messages from unimplemented ENS * Fix last character being not set bug * Remove error state from Meta * Rename isGenesisAddress to isCreationAddress
541 lines
9.1 KiB
TypeScript
541 lines
9.1 KiB
TypeScript
declare module 'bn.js' {
|
|
import { Buffer } from 'buffer';
|
|
|
|
type Endianness = 'le' | 'be';
|
|
type IPrimeName = 'k256' | 'p224' | 'p192' | 'p25519';
|
|
class RedBN {
|
|
redAdd(b: RedBN): RedBN;
|
|
redIAdd(b: RedBN): RedBN;
|
|
redSub(b: RedBN): RedBN;
|
|
redISub(b: RedBN): RedBN;
|
|
redShl(num: number): RedBN;
|
|
redMul(b: RedBN): RedBN;
|
|
redIMul(b: RedBN): RedBN;
|
|
redSqr(): RedBN;
|
|
redISqr(): RedBN;
|
|
/**
|
|
* @description square root modulo reduction context's prime
|
|
*/
|
|
redSqrt(): RedBN;
|
|
/**
|
|
* @description modular inverse of the number
|
|
*/
|
|
redInvm(): RedBN;
|
|
redNeg(): RedBN;
|
|
/**
|
|
* @description modular exponentiation
|
|
*/
|
|
redPow(b: RedBN): RedBN;
|
|
fromRed(): BN;
|
|
}
|
|
|
|
// FIXME: not sure how to specify the reduction context here
|
|
interface IReductionContext {
|
|
m: number;
|
|
prime: object;
|
|
[key: string]: any;
|
|
}
|
|
|
|
export default class BN {
|
|
constructor(
|
|
number: number | string | number[] | Buffer | BN,
|
|
base?: number,
|
|
endian?: Endianness
|
|
);
|
|
/**
|
|
* @description create a reduction context
|
|
*/
|
|
|
|
static red(reductionContext: BN | IPrimeName): IReductionContext;
|
|
/**
|
|
* @description create a reduction context with the Montgomery trick.
|
|
*/
|
|
|
|
static mont(num: BN): IReductionContext;
|
|
/**
|
|
* @description Convert number to red
|
|
*/
|
|
|
|
/**
|
|
* @description returns true if the supplied object is a BN.js instance
|
|
*/
|
|
|
|
static isBN(b: object): boolean;
|
|
|
|
toRed(reductionContext: IReductionContext): RedBN;
|
|
/**
|
|
* @description clone number
|
|
*/
|
|
|
|
clone(): BN;
|
|
|
|
/**
|
|
* @description convert to base-string and pad with zeroes
|
|
*/
|
|
|
|
toString(base?: number | 'hex', length?: number): string;
|
|
|
|
/**
|
|
* @description convert to Javascript Number (limited to 53 bits)
|
|
*/
|
|
|
|
toNumber(): number;
|
|
|
|
/**
|
|
* @description convert to JSON compatible hex string (alias of toString(16))
|
|
*/
|
|
|
|
toJSON(): string;
|
|
|
|
/**
|
|
* @description convert to byte Array, and optionally zero pad to length, throwing if already exceeding
|
|
*/
|
|
|
|
toArray(endian?: Endianness, length?: number): number[];
|
|
|
|
/**
|
|
* @description convert to an instance of `type`, which must behave like an Array
|
|
*/
|
|
toArrayLike(
|
|
ArrayType: Buffer | Array<any>,
|
|
endian?: Endianness,
|
|
length?: number
|
|
): Buffer | Array<any>;
|
|
|
|
/**
|
|
* @description convert to Node.js Buffer (if available). For compatibility with browserify and similar tools, use this instead: a.toArrayLike(Buffer, endian, length)
|
|
*/
|
|
toBuffer(endian?: Endianness, length?: number): Buffer;
|
|
|
|
/**
|
|
* @description get number of bits occupied
|
|
*/
|
|
|
|
bitLength(): number;
|
|
|
|
/**
|
|
* @description return number of less-significant consequent zero bits (example: 1010000 has 4 zero bits)
|
|
*/
|
|
|
|
zeroBits(): number;
|
|
|
|
/**
|
|
* @description return number of bytes occupied
|
|
*/
|
|
|
|
byteLength(): number;
|
|
|
|
/**
|
|
* @description true if the number is negative
|
|
*/
|
|
|
|
isNeg(): boolean;
|
|
|
|
/**
|
|
* @description no comments
|
|
*/
|
|
|
|
isEven(): boolean;
|
|
|
|
/**
|
|
* @description no comments
|
|
*/
|
|
|
|
isOdd(): boolean;
|
|
|
|
/**
|
|
* @description no comments
|
|
*/
|
|
|
|
isZero(): boolean;
|
|
|
|
/**
|
|
* @description compare numbers and return `-1 (a < b)`, `0 (a == b)`, or `1 (a > b)` depending on the comparison result
|
|
*/
|
|
|
|
cmp(b: BN): -1 | 0 | 1;
|
|
|
|
/**
|
|
* @description compare numbers and return `-1 (a < b)`, `0 (a == b)`, or `1 (a > b)` depending on the comparison result
|
|
*/
|
|
|
|
ucmp(b: BN): -1 | 0 | 1;
|
|
|
|
/**
|
|
* @description compare numbers and return `-1 (a < b)`, `0 (a == b)`, or `1 (a > b)` depending on the comparison result
|
|
*/
|
|
|
|
cmpn(b: number): -1 | 0 | 1;
|
|
|
|
/**
|
|
* @description a less than b
|
|
*/
|
|
|
|
lt(b: BN): boolean;
|
|
|
|
/**
|
|
* @description a less than b
|
|
*/
|
|
|
|
ltn(b: number): boolean;
|
|
|
|
/**
|
|
* @description a less than or equals b
|
|
*/
|
|
|
|
lte(b: BN): boolean;
|
|
|
|
/**
|
|
* @description a less than or equals b
|
|
*/
|
|
|
|
lten(b: number): boolean;
|
|
|
|
/**
|
|
* @description a greater than b
|
|
*/
|
|
|
|
gt(b: BN): boolean;
|
|
|
|
/**
|
|
* @description a greater than b
|
|
*/
|
|
|
|
gtn(b: number): boolean;
|
|
|
|
/**
|
|
* @description a greater than or equals b
|
|
*/
|
|
|
|
gte(b: BN): boolean;
|
|
|
|
/**
|
|
* @description a greater than or equals b
|
|
*/
|
|
|
|
gten(b: number): boolean;
|
|
|
|
/**
|
|
* @description a equals b
|
|
*/
|
|
|
|
eq(b: BN): boolean;
|
|
|
|
/**
|
|
* @description a equals b
|
|
*/
|
|
|
|
eqn(b: number): boolean;
|
|
|
|
/**
|
|
* @description convert to two's complement representation, where width is bit width
|
|
*/
|
|
|
|
toTwos(width: number): BN;
|
|
|
|
/**
|
|
* @description convert from two's complement representation, where width is the bit width
|
|
*/
|
|
|
|
fromTwos(width: number): BN;
|
|
|
|
/**
|
|
* @description negate sign
|
|
*/
|
|
|
|
neg(): BN;
|
|
|
|
/**
|
|
* @description negate sign
|
|
*/
|
|
|
|
ineg(): BN;
|
|
|
|
/**
|
|
* @description absolute value
|
|
*/
|
|
|
|
abs(): BN;
|
|
|
|
/**
|
|
* @description absolute value
|
|
*/
|
|
|
|
iabs(): BN;
|
|
|
|
/**
|
|
* @description addition
|
|
*/
|
|
|
|
add(b: BN): BN;
|
|
/**
|
|
* @description addition
|
|
*/
|
|
|
|
iadd(b: BN): BN;
|
|
|
|
/**
|
|
* @description addition
|
|
*/
|
|
|
|
addn(b: number): BN;
|
|
/**
|
|
* @description addition
|
|
*/
|
|
|
|
iaddn(b: number): BN;
|
|
|
|
/**
|
|
* @description subtraction
|
|
*/
|
|
|
|
sub(b: BN): BN;
|
|
/**
|
|
* @description subtraction
|
|
*/
|
|
|
|
isub(b: BN): BN;
|
|
/**
|
|
* @description subtraction
|
|
*/
|
|
|
|
subn(b: number): BN;
|
|
/**
|
|
* @description subtraction
|
|
*/
|
|
|
|
isubn(b: number): BN;
|
|
|
|
/**
|
|
* @description multiply
|
|
*/
|
|
|
|
mul(b: BN): BN;
|
|
/**
|
|
* @description multiply
|
|
*/
|
|
|
|
imul(b: BN): BN;
|
|
/**
|
|
* @description multiply
|
|
*/
|
|
|
|
muln(b: number): BN;
|
|
/**
|
|
* @description multiply
|
|
*/
|
|
|
|
imuln(b: number): BN;
|
|
|
|
/**
|
|
* @description square
|
|
*/
|
|
sqr(): BN;
|
|
/**
|
|
* @description square
|
|
*/
|
|
isqr(): BN;
|
|
|
|
/**
|
|
* @description raise `a` to the power of `b`
|
|
*/
|
|
|
|
pow(b: BN): BN;
|
|
|
|
/**
|
|
* @description divide
|
|
*/
|
|
div(b: BN): BN;
|
|
/**
|
|
* @description divide
|
|
*/
|
|
divn(b: number): BN;
|
|
/**
|
|
* @description divide
|
|
*/
|
|
idivn(b: number): BN;
|
|
|
|
/**
|
|
* @description reduct
|
|
*/
|
|
|
|
mod(b: BN): BN;
|
|
/**
|
|
* @description reduct
|
|
*/
|
|
|
|
umod(b: BN): BN;
|
|
/**
|
|
* @description reduct
|
|
*/
|
|
|
|
modn(b: number): number; //API consistency https://github.com/indutny/bn.js/pull/130
|
|
|
|
/**
|
|
* @description rounded division
|
|
*/
|
|
|
|
divRound(b: BN): BN;
|
|
|
|
/**
|
|
* @description or
|
|
*/
|
|
|
|
or(b: BN): BN;
|
|
/**
|
|
* @description or
|
|
*/
|
|
|
|
ior(b: BN): BN;
|
|
/**
|
|
* @description or
|
|
*/
|
|
|
|
uor(b: BN): BN;
|
|
/**
|
|
* @description or
|
|
*/
|
|
|
|
iuor(b: BN): BN;
|
|
|
|
/**
|
|
* @description and
|
|
*/
|
|
|
|
and(b: BN): BN;
|
|
/**
|
|
* @description and
|
|
*/
|
|
|
|
iand(b: BN): BN;
|
|
/**
|
|
* @description and
|
|
*/
|
|
|
|
uand(b: BN): BN;
|
|
/**
|
|
* @description and
|
|
*/
|
|
|
|
iuand(b: BN): BN;
|
|
/**
|
|
* @description and (NOTE: `andln` is going to be replaced with `andn` in future)
|
|
*/
|
|
|
|
andln(b: number): BN;
|
|
/**
|
|
* @description xor
|
|
*/
|
|
|
|
xor(b: BN): BN;
|
|
|
|
/**
|
|
* @description xor
|
|
*/
|
|
|
|
ixor(b: BN): BN;
|
|
/**
|
|
* @description xor
|
|
*/
|
|
|
|
uxor(b: BN): BN;
|
|
/**
|
|
* @description xor
|
|
*/
|
|
|
|
iuxor(b: BN): BN;
|
|
/**
|
|
* @description set specified bit to 1
|
|
*/
|
|
|
|
setn(b: number): BN;
|
|
/**
|
|
* @description shift left
|
|
*/
|
|
|
|
shln(b: number): BN;
|
|
/**
|
|
* @description shift left
|
|
*/
|
|
|
|
ishln(b: number): BN;
|
|
/**
|
|
* @description shift left
|
|
*/
|
|
|
|
ushln(b: number): BN;
|
|
/**
|
|
* @description shift left
|
|
*/
|
|
|
|
iushln(b: number): BN;
|
|
/**
|
|
* @description shift right
|
|
*/
|
|
|
|
shrn(b: number): BN;
|
|
|
|
/**
|
|
* @description shift right
|
|
*/
|
|
|
|
ishrn(b: number): BN;
|
|
/**
|
|
* @description shift right
|
|
*/
|
|
|
|
ushrn(b: number): BN;
|
|
/**
|
|
* @description shift right
|
|
*/
|
|
|
|
iushrn(b: number): BN;
|
|
/**
|
|
* @description test if specified bit is set
|
|
*/
|
|
|
|
testn(b: number): boolean;
|
|
/**
|
|
* @description clear bits with indexes higher or equal to `b`
|
|
*/
|
|
|
|
maskn(b: number): BN;
|
|
/**
|
|
* @description clear bits with indexes higher or equal to `b`
|
|
*/
|
|
|
|
imaskn(b: number): BN;
|
|
/**
|
|
* @description add `1 << b` to the number
|
|
*/
|
|
|
|
bincn(b: number): BN;
|
|
/**
|
|
* @description not (for the width specified by `w`)
|
|
*/
|
|
|
|
notn(w: number): BN;
|
|
/**
|
|
* @description not (for the width specified by `w`)
|
|
*/
|
|
|
|
inotn(w: number): BN;
|
|
|
|
/**
|
|
* @description GCD
|
|
*/
|
|
|
|
gcd(b: BN): BN;
|
|
/**
|
|
* @description Extended GCD results `({ a: ..., b: ..., gcd: ... })`
|
|
*/
|
|
|
|
egcd(b: BN): { a: BN; b: BN; gcd: BN };
|
|
/**
|
|
* @description inverse `a` modulo `b`
|
|
*/
|
|
|
|
invm(b: BN): BN;
|
|
}
|
|
}
|