UNPKG

@etherspot/remote-signer

Version:

Etherspot Permissioned Signer SDK - signs the UserOp with SessionKey and sends it to the Bundler

1 lines 17.5 kB
{"version":3,"sources":["../../src/sdk/types/bignumber.ts"],"sourcesContent":["\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardless.\n *\n */\n\nimport BN from \"bn.js\";\n\nexport const version = \"logger/5.7.0\";\n\nexport interface Hexable {\n toHexString(): string;\n}\n\nimport { isHex, isBytes } from \"viem\";\nimport { Logger } from \"./bignumber-logger\";\nimport { hexlifyValue } from \"../common/utils/hexlify\";\nimport { Bytes } from \"./common-types\";\n\nconst logger = new Logger(version);\n\nconst _constructorGuard = { };\n\nconst MAX_SAFE = 0x1fffffffffffff;\n\n\nexport type BigNumberish = BigNumber | Bytes | bigint | string | number;\n\nexport function isBigNumberish(value: any): value is BigNumberish {\n return (value != null) && (\n BigNumber.isBigNumber(value) ||\n (typeof(value) === \"number\" && (value % 1) === 0) ||\n (typeof(value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n isHex(value) ||\n (typeof(value) === \"bigint\") ||\n isBytes(value)\n );\n}\n\n// Only warn about passing 10 into radix once\nlet _warnedToStringRadix = false;\n\nexport class BigNumber implements Hexable {\n readonly _hex: string;\n readonly _isBigNumber: boolean;\n\n constructor(constructorGuard: any, hex: string) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot call constructor directly; use BigNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new (BigNumber)\"\n });\n }\n\n this._hex = hex;\n this._isBigNumber = true;\n\n Object.freeze(this);\n }\n\n fromTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).fromTwos(value));\n }\n\n toTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).toTwos(value));\n }\n\n abs(): BigNumber {\n if (this._hex[0] === \"-\") {\n return BigNumber.from(this._hex.substring(1));\n }\n return this;\n }\n\n add(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).add(toBN(other)));\n }\n\n sub(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).sub(toBN(other)));\n }\n\n div(other: BigNumberish): BigNumber {\n const o = BigNumber.from(other);\n if (o.isZero()) {\n throwFault(\"division-by-zero\", \"div\");\n }\n return toBigNumber(toBN(this).div(toBN(other)));\n }\n\n mul(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).mul(toBN(other)));\n }\n\n mod(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"division-by-zero\", \"mod\");\n }\n return toBigNumber(toBN(this).umod(value));\n }\n\n pow(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"negative-power\", \"pow\");\n }\n return toBigNumber(toBN(this).pow(value));\n }\n\n and(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"and\");\n }\n return toBigNumber(toBN(this).and(value));\n }\n\n or(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"or\");\n }\n return toBigNumber(toBN(this).or(value));\n }\n\n xor(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"xor\");\n }\n return toBigNumber(toBN(this).xor(value));\n }\n\n mask(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"mask\");\n }\n return toBigNumber(toBN(this).maskn(value));\n }\n\n shl(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shl\");\n }\n return toBigNumber(toBN(this).shln(value));\n }\n\n shr(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shr\");\n }\n return toBigNumber(toBN(this).shrn(value));\n }\n\n eq(other: BigNumberish): boolean {\n return toBN(this).eq(toBN(other));\n }\n\n lt(other: BigNumberish): boolean {\n return toBN(this).lt(toBN(other));\n }\n\n lte(other: BigNumberish): boolean {\n return toBN(this).lte(toBN(other));\n }\n\n gt(other: BigNumberish): boolean {\n return toBN(this).gt(toBN(other));\n }\n\n gte(other: BigNumberish): boolean {\n return toBN(this).gte(toBN(other));\n }\n\n isNegative(): boolean {\n return (this._hex[0] === \"-\");\n }\n\n isZero(): boolean {\n return toBN(this).isZero();\n }\n\n toNumber(): number {\n try {\n return toBN(this).toNumber();\n } catch (error) {\n throwFault(\"overflow\", \"toNumber\", this.toString());\n }\n return null;\n }\n\n toBigInt(): bigint {\n try {\n return BigInt(this.toString());\n } catch (e) { }\n\n return logger.throwError(\"this platform does not support BigInt\", Logger.errors.UNSUPPORTED_OPERATION, {\n value: this.toString()\n });\n }\n\n toString(): string {\n // Lots of people expect this, which we do not support, so check (See: #889)\n if (arguments.length > 0) {\n if (arguments[0] === 10) {\n if (!_warnedToStringRadix) {\n _warnedToStringRadix = true;\n logger.warn(\"BigNumber.toString does not accept any parameters; base-10 is assumed\");\n }\n } else if (arguments[0] === 16) {\n logger.throwError(\"BigNumber.toString does not accept any parameters; use bigNumber.toHexString()\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n } else {\n logger.throwError(\"BigNumber.toString does not accept parameters\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n }\n }\n return toBN(this).toString(10);\n }\n\n toHexString(): string {\n return this._hex;\n }\n\n toJSON(key?: string): any {\n return { type: \"BigNumber\", hex: this.toHexString() };\n }\n\n static from(value: any): BigNumber {\n if (value instanceof BigNumber) { return value; }\n\n if (typeof(value) === \"string\") {\n if (value.match(/^-?0x[0-9a-f]+$/i)) {\n return new BigNumber(_constructorGuard, toHex(value));\n }\n\n if (value.match(/^-?[0-9]+$/)) {\n return new BigNumber(_constructorGuard, toHex(new BN(value)));\n }\n\n return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n }\n\n if (typeof(value) === \"number\") {\n if (value % 1) {\n throwFault(\"underflow\", \"BigNumber.from\", value);\n }\n\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n throwFault(\"overflow\", \"BigNumber.from\", value);\n }\n\n return BigNumber.from(String(value));\n }\n\n const anyValue = <any>value;\n\n if (typeof(anyValue) === \"bigint\") {\n return BigNumber.from(anyValue.toString());\n }\n\n if (isBytes(anyValue)) {\n return BigNumber.from(hexlifyValue(anyValue));\n }\n\n if (anyValue) {\n\n // Hexable interface (takes priority)\n if (anyValue.toHexString) {\n const hex = anyValue.toHexString();\n if (typeof(hex) === \"string\") {\n return BigNumber.from(hex);\n }\n\n } else {\n // For now, handle legacy JSON-ified values (goes away in v6)\n let hex = anyValue._hex;\n\n // New-form JSON\n if (hex == null && anyValue.type === \"BigNumber\") {\n hex = anyValue.hex;\n }\n\n if (typeof(hex) === \"string\") {\n if (isHex(hex) || (hex[0] === \"-\" && isHex(hex.substring(1)))) {\n return BigNumber.from(hex);\n }\n }\n }\n }\n\n return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n\n }\n\n static isBigNumber(value: any): value is BigNumber {\n return !!(value && value._isBigNumber);\n }\n}\n\n// Normalize the hex string\nfunction toHex(value: string | BN): string {\n\n // For BN, call on the hex string\n if (typeof(value) !== \"string\") {\n return toHex(value.toString(16));\n }\n\n // If negative, prepend the negative sign to the normalized positive value\n if (value[0] === \"-\") {\n // Strip off the negative sign\n value = value.substring(1);\n\n // Cannot have multiple negative signs (e.g. \"--0x04\")\n if (value[0] === \"-\") { \n throw new Error(`invalid hex value: ${value}`);\n }\n\n // Call toHex on the positive component\n value = toHex(value);\n\n // Do not allow \"-0x00\"\n if (value === \"0x00\") { return value; }\n\n // Negate the value\n return \"-\" + value;\n }\n\n // Add a \"0x\" prefix if missing\n if (value.substring(0, 2) !== \"0x\") { value = \"0x\" + value; }\n\n // Normalize zero\n if (value === \"0x\") { return \"0x00\"; }\n\n // Make the string even length\n if (value.length % 2) { value = \"0x0\" + value.substring(2); }\n\n // Trim to smallest even-length string\n while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n value = \"0x\" + value.substring(4);\n }\n\n return value;\n}\n\nfunction toBigNumber(value: BN): BigNumber {\n return BigNumber.from(toHex(value));\n}\n\nfunction toBN(value: BigNumberish): BN {\n const hex = BigNumber.from(value).toHexString();\n if (hex[0] === \"-\") {\n return (new BN(\"-\" + hex.substring(3), 16));\n }\n return new BN(hex.substring(2), 16);\n}\n\n// value should have no prefix\nexport function _base36To16(value: string): string {\n return (new BN(value, 36)).toString(16);\n}\n\n// value should have no prefix\nexport function _base16To36(value: string): string {\n return (new BN(value, 16)).toString(36);\n}\n\n\nexport function throwFault(fault: string, operation: string, value?: any): never {\n const params: any = { fault: fault, operation: operation };\n if (value != null) { params.value = value; }\n\n return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);\n}"],"mappings":"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","names":[]}