@xylabs/eth-address 2.13.18 → 2.13.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/EthAddress.d.cts +1 -2
- package/dist/browser/EthAddress.d.cts.map +1 -1
- package/dist/browser/EthAddress.d.mts +1 -2
- package/dist/browser/EthAddress.d.mts.map +1 -1
- package/dist/browser/EthAddress.d.ts +1 -2
- package/dist/browser/EthAddress.d.ts.map +1 -1
- package/dist/browser/index.cjs +5 -21
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +5 -11
- package/dist/browser/index.js.map +1 -1
- package/dist/node/EthAddress.d.cts +1 -2
- package/dist/node/EthAddress.d.cts.map +1 -1
- package/dist/node/EthAddress.d.mts +1 -2
- package/dist/node/EthAddress.d.mts.map +1 -1
- package/dist/node/EthAddress.d.ts +1 -2
- package/dist/node/EthAddress.d.ts.map +1 -1
- package/dist/node/index.cjs +5 -21
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +5 -11
- package/dist/node/index.js.map +1 -1
- package/package.json +3 -4
- package/src/EthAddress.ts +7 -15
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/index.ts
|
|
@@ -46,8 +36,7 @@ var ellipsize = (value, length = 2) => {
|
|
|
46
36
|
|
|
47
37
|
// src/EthAddress.ts
|
|
48
38
|
var import_assert = require("@xylabs/assert");
|
|
49
|
-
var
|
|
50
|
-
var import_keccak256 = __toESM(require("keccak256"), 1);
|
|
39
|
+
var import_ethers = require("ethers");
|
|
51
40
|
|
|
52
41
|
// src/padHex.ts
|
|
53
42
|
var padHex = (hex, byteCount) => {
|
|
@@ -74,8 +63,8 @@ var EthAddress = class _EthAddress {
|
|
|
74
63
|
}
|
|
75
64
|
static fromString(value, base = 16) {
|
|
76
65
|
if (value) {
|
|
77
|
-
const
|
|
78
|
-
return new _EthAddress(
|
|
66
|
+
const bi = base === 16 ? BigInt(value.startsWith("0x") ? value : `0x${value}`) : BigInt(value);
|
|
67
|
+
return new _EthAddress(bi);
|
|
79
68
|
}
|
|
80
69
|
}
|
|
81
70
|
static parse(value, base) {
|
|
@@ -94,7 +83,7 @@ var EthAddress = class _EthAddress {
|
|
|
94
83
|
} else {
|
|
95
84
|
inAddress = address;
|
|
96
85
|
}
|
|
97
|
-
return this.address
|
|
86
|
+
return this.address === inAddress.address;
|
|
98
87
|
}
|
|
99
88
|
return false;
|
|
100
89
|
}
|
|
@@ -116,12 +105,7 @@ var EthAddress = class _EthAddress {
|
|
|
116
105
|
toString(checksum, chainId) {
|
|
117
106
|
if (checksum) {
|
|
118
107
|
const strippedAddress = this.toHex();
|
|
119
|
-
|
|
120
|
-
let checksumAddress = "0x";
|
|
121
|
-
for (let i = 0; i < strippedAddress.length; i++) {
|
|
122
|
-
checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? strippedAddress[i].toUpperCase() : strippedAddress[i];
|
|
123
|
-
}
|
|
124
|
-
return checksumAddress;
|
|
108
|
+
return (0, import_ethers.getAddress)(chainId !== void 0 ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`);
|
|
125
109
|
}
|
|
126
110
|
return `0x${this.toHex()}`;
|
|
127
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export * from './ellipsize'\nexport * from './EthAddress'\nexport * from './padHex'\n","export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export * from './ellipsize'\nexport * from './EthAddress'\nexport * from './padHex'\n","export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport { getAddress } from 'ethers'\n\nimport { ellipsize } from './ellipsize'\nimport { padHex } from './padHex'\n\nexport const isEthAddress = (obj: { type: string }) => obj?.type === EthAddress.type\n\nexport class EthAddress {\n static readonly type = 'EthAddress'\n\n type = EthAddress.type\n\n private address: bigint\n\n private constructor(address: bigint) {\n this.address = address\n }\n\n static fromString(value?: string, base = 16) {\n if (value) {\n const bi = base === 16 ? BigInt(value.startsWith('0x') ? value : `0x${value}`) : BigInt(value)\n return new EthAddress(bi)\n }\n }\n\n static parse(value: unknown, base?: number) {\n if (typeof value === 'string') {\n return this.fromString(value, base)\n }\n }\n\n static validate(address: string) {\n return /^(0x)?[0-9a-f]{40}$/i.test(address)\n }\n\n equals(address?: EthAddress | string | null): boolean {\n if (address) {\n let inAddress: EthAddress\n if (typeof address === 'string') {\n inAddress = assertEx(EthAddress.fromString(address), 'Bad Address')\n } else {\n inAddress = address\n }\n return this.address === inAddress.address\n }\n return false\n }\n\n toBigNumber() {\n return this.address\n }\n\n toHex() {\n return padHex(this.address.toString(16), 20)\n }\n\n toJSON(): string {\n return `0x${this.toHex()}`\n }\n\n toLowerCaseString() {\n return this.toString().toLowerCase()\n }\n\n toShortString(length = 2) {\n return `0x${ellipsize(this.toHex(), length)}`\n }\n\n toString(checksum?: boolean, chainId?: string) {\n if (checksum) {\n const strippedAddress = this.toHex()\n return getAddress(chainId !== undefined ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`)\n }\n return `0x${this.toHex()}`\n }\n\n validate() {\n return EthAddress.validate(this.toString())\n }\n}\n","const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport { padHex }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,YAAY,CAAC,OAAe,SAAS,MAAM;AACtD,QAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AACnC,QAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,QAAQ,MAAM,MAAM;AAC7D,SAAO,GAAG,KAAK,MAAM,KAAK;AAC5B;;;ACJA,oBAAyB;AACzB,oBAA2B;;;ACD3B,IAAM,SAAS,CAAC,KAAa,cAAuB;AAClD,MAAI,SAAS;AACb,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,aAAS,IAAI,GAAG;AAAA,EAClB;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS,IAAI,WAAW;AACpC,eAAS,KAAK,MAAM;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;;;ADLO,IAAM,eAAe,CAAC,QAA0B,KAAK,SAAS,WAAW;AAEzE,IAAM,aAAN,MAAM,YAAW;AAAA,EACtB,OAAgB,OAAO;AAAA,EAEvB,OAAO,YAAW;AAAA,EAEV;AAAA,EAEA,YAAY,SAAiB;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW,OAAgB,OAAO,IAAI;AAC3C,QAAI,OAAO;AACT,YAAM,KAAK,SAAS,KAAK,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,IAAI,OAAO,KAAK;AAC7F,aAAO,IAAI,YAAW,EAAE;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,OAAgB,MAAe;AAC1C,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK,WAAW,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,SAAiB;AAC/B,WAAO,uBAAuB,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAA+C;AACpD,QAAI,SAAS;AACX,UAAI;AACJ,UAAI,OAAO,YAAY,UAAU;AAC/B,wBAAY,wBAAS,YAAW,WAAW,OAAO,GAAG,aAAa;AAAA,MACpE,OAAO;AACL,oBAAY;AAAA,MACd;AACA,aAAO,KAAK,YAAY,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACN,WAAO,OAAO,KAAK,QAAQ,SAAS,EAAE,GAAG,EAAE;AAAA,EAC7C;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,SAAS,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,cAAc,SAAS,GAAG;AACxB,WAAO,KAAK,UAAU,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,EAC7C;AAAA,EAEA,SAAS,UAAoB,SAAkB;AAC7C,QAAI,UAAU;AACZ,YAAM,kBAAkB,KAAK,MAAM;AACnC,iBAAO,0BAAW,YAAY,SAAY,GAAG,OAAO,KAAK,eAAe,KAAK,KAAK,eAAe,EAAE;AAAA,IACrG;AACA,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,WAAW;AACT,WAAO,YAAW,SAAS,KAAK,SAAS,CAAC;AAAA,EAC5C;AACF;","names":[]}
|
package/dist/browser/index.js
CHANGED
|
@@ -7,8 +7,7 @@ var ellipsize = (value, length = 2) => {
|
|
|
7
7
|
|
|
8
8
|
// src/EthAddress.ts
|
|
9
9
|
import { assertEx } from "@xylabs/assert";
|
|
10
|
-
import {
|
|
11
|
-
import keccak256 from "keccak256";
|
|
10
|
+
import { getAddress } from "ethers";
|
|
12
11
|
|
|
13
12
|
// src/padHex.ts
|
|
14
13
|
var padHex = (hex, byteCount) => {
|
|
@@ -35,8 +34,8 @@ var EthAddress = class _EthAddress {
|
|
|
35
34
|
}
|
|
36
35
|
static fromString(value, base = 16) {
|
|
37
36
|
if (value) {
|
|
38
|
-
const
|
|
39
|
-
return new _EthAddress(
|
|
37
|
+
const bi = base === 16 ? BigInt(value.startsWith("0x") ? value : `0x${value}`) : BigInt(value);
|
|
38
|
+
return new _EthAddress(bi);
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
static parse(value, base) {
|
|
@@ -55,7 +54,7 @@ var EthAddress = class _EthAddress {
|
|
|
55
54
|
} else {
|
|
56
55
|
inAddress = address;
|
|
57
56
|
}
|
|
58
|
-
return this.address
|
|
57
|
+
return this.address === inAddress.address;
|
|
59
58
|
}
|
|
60
59
|
return false;
|
|
61
60
|
}
|
|
@@ -77,12 +76,7 @@ var EthAddress = class _EthAddress {
|
|
|
77
76
|
toString(checksum, chainId) {
|
|
78
77
|
if (checksum) {
|
|
79
78
|
const strippedAddress = this.toHex();
|
|
80
|
-
|
|
81
|
-
let checksumAddress = "0x";
|
|
82
|
-
for (let i = 0; i < strippedAddress.length; i++) {
|
|
83
|
-
checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? strippedAddress[i].toUpperCase() : strippedAddress[i];
|
|
84
|
-
}
|
|
85
|
-
return checksumAddress;
|
|
79
|
+
return getAddress(chainId !== void 0 ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`);
|
|
86
80
|
}
|
|
87
81
|
return `0x${this.toHex()}`;
|
|
88
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport { getAddress } from 'ethers'\n\nimport { ellipsize } from './ellipsize'\nimport { padHex } from './padHex'\n\nexport const isEthAddress = (obj: { type: string }) => obj?.type === EthAddress.type\n\nexport class EthAddress {\n static readonly type = 'EthAddress'\n\n type = EthAddress.type\n\n private address: bigint\n\n private constructor(address: bigint) {\n this.address = address\n }\n\n static fromString(value?: string, base = 16) {\n if (value) {\n const bi = base === 16 ? BigInt(value.startsWith('0x') ? value : `0x${value}`) : BigInt(value)\n return new EthAddress(bi)\n }\n }\n\n static parse(value: unknown, base?: number) {\n if (typeof value === 'string') {\n return this.fromString(value, base)\n }\n }\n\n static validate(address: string) {\n return /^(0x)?[0-9a-f]{40}$/i.test(address)\n }\n\n equals(address?: EthAddress | string | null): boolean {\n if (address) {\n let inAddress: EthAddress\n if (typeof address === 'string') {\n inAddress = assertEx(EthAddress.fromString(address), 'Bad Address')\n } else {\n inAddress = address\n }\n return this.address === inAddress.address\n }\n return false\n }\n\n toBigNumber() {\n return this.address\n }\n\n toHex() {\n return padHex(this.address.toString(16), 20)\n }\n\n toJSON(): string {\n return `0x${this.toHex()}`\n }\n\n toLowerCaseString() {\n return this.toString().toLowerCase()\n }\n\n toShortString(length = 2) {\n return `0x${ellipsize(this.toHex(), length)}`\n }\n\n toString(checksum?: boolean, chainId?: string) {\n if (checksum) {\n const strippedAddress = this.toHex()\n return getAddress(chainId !== undefined ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`)\n }\n return `0x${this.toHex()}`\n }\n\n validate() {\n return EthAddress.validate(this.toString())\n }\n}\n","const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport { padHex }\n"],"mappings":";AAAO,IAAM,YAAY,CAAC,OAAe,SAAS,MAAM;AACtD,QAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AACnC,QAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,QAAQ,MAAM,MAAM;AAC7D,SAAO,GAAG,KAAK,MAAM,KAAK;AAC5B;;;ACJA,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;;;ACD3B,IAAM,SAAS,CAAC,KAAa,cAAuB;AAClD,MAAI,SAAS;AACb,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,aAAS,IAAI,GAAG;AAAA,EAClB;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS,IAAI,WAAW;AACpC,eAAS,KAAK,MAAM;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;;;ADLO,IAAM,eAAe,CAAC,QAA0B,KAAK,SAAS,WAAW;AAEzE,IAAM,aAAN,MAAM,YAAW;AAAA,EACtB,OAAgB,OAAO;AAAA,EAEvB,OAAO,YAAW;AAAA,EAEV;AAAA,EAEA,YAAY,SAAiB;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW,OAAgB,OAAO,IAAI;AAC3C,QAAI,OAAO;AACT,YAAM,KAAK,SAAS,KAAK,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,IAAI,OAAO,KAAK;AAC7F,aAAO,IAAI,YAAW,EAAE;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,OAAgB,MAAe;AAC1C,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK,WAAW,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,SAAiB;AAC/B,WAAO,uBAAuB,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAA+C;AACpD,QAAI,SAAS;AACX,UAAI;AACJ,UAAI,OAAO,YAAY,UAAU;AAC/B,oBAAY,SAAS,YAAW,WAAW,OAAO,GAAG,aAAa;AAAA,MACpE,OAAO;AACL,oBAAY;AAAA,MACd;AACA,aAAO,KAAK,YAAY,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACN,WAAO,OAAO,KAAK,QAAQ,SAAS,EAAE,GAAG,EAAE;AAAA,EAC7C;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,SAAS,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,cAAc,SAAS,GAAG;AACxB,WAAO,KAAK,UAAU,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,EAC7C;AAAA,EAEA,SAAS,UAAoB,SAAkB;AAC7C,QAAI,UAAU;AACZ,YAAM,kBAAkB,KAAK,MAAM;AACnC,aAAO,WAAW,YAAY,SAAY,GAAG,OAAO,KAAK,eAAe,KAAK,KAAK,eAAe,EAAE;AAAA,IACrG;AACA,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,WAAW;AACT,WAAO,YAAW,SAAS,KAAK,SAAS,CAAC;AAAA,EAC5C;AACF;","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from '@xylabs/bignumber';
|
|
2
1
|
export declare const isEthAddress: (obj: {
|
|
3
2
|
type: string;
|
|
4
3
|
}) => boolean;
|
|
@@ -11,7 +10,7 @@ export declare class EthAddress {
|
|
|
11
10
|
static parse(value: unknown, base?: number): EthAddress | undefined;
|
|
12
11
|
static validate(address: string): boolean;
|
|
13
12
|
equals(address?: EthAddress | string | null): boolean;
|
|
14
|
-
toBigNumber():
|
|
13
|
+
toBigNumber(): bigint;
|
|
15
14
|
toHex(): string;
|
|
16
15
|
toJSON(): string;
|
|
17
16
|
toLowerCaseString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EthAddress.d.ts","sourceRoot":"","sources":["../../src/EthAddress.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAAkC,CAAA;AAEpF,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAe;IAEnC,IAAI,SAAkB;IAEtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,SAAK;IAO3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAarD,WAAW;IAIX,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,iBAAiB;IAIjB,aAAa,CAAC,MAAM,SAAI;IAIxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAQ7C,QAAQ;CAGT"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/index.ts
|
|
@@ -46,8 +36,7 @@ var ellipsize = (value, length = 2) => {
|
|
|
46
36
|
|
|
47
37
|
// src/EthAddress.ts
|
|
48
38
|
var import_assert = require("@xylabs/assert");
|
|
49
|
-
var
|
|
50
|
-
var import_keccak256 = __toESM(require("keccak256"), 1);
|
|
39
|
+
var import_ethers = require("ethers");
|
|
51
40
|
|
|
52
41
|
// src/padHex.ts
|
|
53
42
|
var padHex = (hex, byteCount) => {
|
|
@@ -74,8 +63,8 @@ var EthAddress = class _EthAddress {
|
|
|
74
63
|
}
|
|
75
64
|
static fromString(value, base = 16) {
|
|
76
65
|
if (value) {
|
|
77
|
-
const
|
|
78
|
-
return new _EthAddress(
|
|
66
|
+
const bi = base === 16 ? BigInt(value.startsWith("0x") ? value : `0x${value}`) : BigInt(value);
|
|
67
|
+
return new _EthAddress(bi);
|
|
79
68
|
}
|
|
80
69
|
}
|
|
81
70
|
static parse(value, base) {
|
|
@@ -94,7 +83,7 @@ var EthAddress = class _EthAddress {
|
|
|
94
83
|
} else {
|
|
95
84
|
inAddress = address;
|
|
96
85
|
}
|
|
97
|
-
return this.address
|
|
86
|
+
return this.address === inAddress.address;
|
|
98
87
|
}
|
|
99
88
|
return false;
|
|
100
89
|
}
|
|
@@ -116,12 +105,7 @@ var EthAddress = class _EthAddress {
|
|
|
116
105
|
toString(checksum, chainId) {
|
|
117
106
|
if (checksum) {
|
|
118
107
|
const strippedAddress = this.toHex();
|
|
119
|
-
|
|
120
|
-
let checksumAddress = "0x";
|
|
121
|
-
for (let i = 0; i < strippedAddress.length; i++) {
|
|
122
|
-
checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? strippedAddress[i].toUpperCase() : strippedAddress[i];
|
|
123
|
-
}
|
|
124
|
-
return checksumAddress;
|
|
108
|
+
return (0, import_ethers.getAddress)(chainId !== void 0 ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`);
|
|
125
109
|
}
|
|
126
110
|
return `0x${this.toHex()}`;
|
|
127
111
|
}
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export * from './ellipsize'\nexport * from './EthAddress'\nexport * from './padHex'\n","export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export * from './ellipsize'\nexport * from './EthAddress'\nexport * from './padHex'\n","export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport { getAddress } from 'ethers'\n\nimport { ellipsize } from './ellipsize'\nimport { padHex } from './padHex'\n\nexport const isEthAddress = (obj: { type: string }) => obj?.type === EthAddress.type\n\nexport class EthAddress {\n static readonly type = 'EthAddress'\n\n type = EthAddress.type\n\n private address: bigint\n\n private constructor(address: bigint) {\n this.address = address\n }\n\n static fromString(value?: string, base = 16) {\n if (value) {\n const bi = base === 16 ? BigInt(value.startsWith('0x') ? value : `0x${value}`) : BigInt(value)\n return new EthAddress(bi)\n }\n }\n\n static parse(value: unknown, base?: number) {\n if (typeof value === 'string') {\n return this.fromString(value, base)\n }\n }\n\n static validate(address: string) {\n return /^(0x)?[0-9a-f]{40}$/i.test(address)\n }\n\n equals(address?: EthAddress | string | null): boolean {\n if (address) {\n let inAddress: EthAddress\n if (typeof address === 'string') {\n inAddress = assertEx(EthAddress.fromString(address), 'Bad Address')\n } else {\n inAddress = address\n }\n return this.address === inAddress.address\n }\n return false\n }\n\n toBigNumber() {\n return this.address\n }\n\n toHex() {\n return padHex(this.address.toString(16), 20)\n }\n\n toJSON(): string {\n return `0x${this.toHex()}`\n }\n\n toLowerCaseString() {\n return this.toString().toLowerCase()\n }\n\n toShortString(length = 2) {\n return `0x${ellipsize(this.toHex(), length)}`\n }\n\n toString(checksum?: boolean, chainId?: string) {\n if (checksum) {\n const strippedAddress = this.toHex()\n return getAddress(chainId !== undefined ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`)\n }\n return `0x${this.toHex()}`\n }\n\n validate() {\n return EthAddress.validate(this.toString())\n }\n}\n","const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport { padHex }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,YAAY,CAAC,OAAe,SAAS,MAAM;AACtD,QAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AACnC,QAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,QAAQ,MAAM,MAAM;AAC7D,SAAO,GAAG,KAAK,MAAM,KAAK;AAC5B;;;ACJA,oBAAyB;AACzB,oBAA2B;;;ACD3B,IAAM,SAAS,CAAC,KAAa,cAAuB;AAClD,MAAI,SAAS;AACb,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,aAAS,IAAI,GAAG;AAAA,EAClB;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS,IAAI,WAAW;AACpC,eAAS,KAAK,MAAM;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;;;ADLO,IAAM,eAAe,CAAC,SAA0B,2BAAK,UAAS,WAAW;AAEzE,IAAM,aAAN,MAAM,YAAW;AAAA,EACtB,OAAgB,OAAO;AAAA,EAEvB,OAAO,YAAW;AAAA,EAEV;AAAA,EAEA,YAAY,SAAiB;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW,OAAgB,OAAO,IAAI;AAC3C,QAAI,OAAO;AACT,YAAM,KAAK,SAAS,KAAK,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,IAAI,OAAO,KAAK;AAC7F,aAAO,IAAI,YAAW,EAAE;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,OAAgB,MAAe;AAC1C,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK,WAAW,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,SAAiB;AAC/B,WAAO,uBAAuB,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAA+C;AACpD,QAAI,SAAS;AACX,UAAI;AACJ,UAAI,OAAO,YAAY,UAAU;AAC/B,wBAAY,wBAAS,YAAW,WAAW,OAAO,GAAG,aAAa;AAAA,MACpE,OAAO;AACL,oBAAY;AAAA,MACd;AACA,aAAO,KAAK,YAAY,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACN,WAAO,OAAO,KAAK,QAAQ,SAAS,EAAE,GAAG,EAAE;AAAA,EAC7C;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,SAAS,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,cAAc,SAAS,GAAG;AACxB,WAAO,KAAK,UAAU,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,EAC7C;AAAA,EAEA,SAAS,UAAoB,SAAkB;AAC7C,QAAI,UAAU;AACZ,YAAM,kBAAkB,KAAK,MAAM;AACnC,iBAAO,0BAAW,YAAY,SAAY,GAAG,OAAO,KAAK,eAAe,KAAK,KAAK,eAAe,EAAE;AAAA,IACrG;AACA,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,WAAW;AACT,WAAO,YAAW,SAAS,KAAK,SAAS,CAAC;AAAA,EAC5C;AACF;","names":[]}
|
package/dist/node/index.js
CHANGED
|
@@ -7,8 +7,7 @@ var ellipsize = (value, length = 2) => {
|
|
|
7
7
|
|
|
8
8
|
// src/EthAddress.ts
|
|
9
9
|
import { assertEx } from "@xylabs/assert";
|
|
10
|
-
import {
|
|
11
|
-
import keccak256 from "keccak256";
|
|
10
|
+
import { getAddress } from "ethers";
|
|
12
11
|
|
|
13
12
|
// src/padHex.ts
|
|
14
13
|
var padHex = (hex, byteCount) => {
|
|
@@ -35,8 +34,8 @@ var EthAddress = class _EthAddress {
|
|
|
35
34
|
}
|
|
36
35
|
static fromString(value, base = 16) {
|
|
37
36
|
if (value) {
|
|
38
|
-
const
|
|
39
|
-
return new _EthAddress(
|
|
37
|
+
const bi = base === 16 ? BigInt(value.startsWith("0x") ? value : `0x${value}`) : BigInt(value);
|
|
38
|
+
return new _EthAddress(bi);
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
static parse(value, base) {
|
|
@@ -55,7 +54,7 @@ var EthAddress = class _EthAddress {
|
|
|
55
54
|
} else {
|
|
56
55
|
inAddress = address;
|
|
57
56
|
}
|
|
58
|
-
return this.address
|
|
57
|
+
return this.address === inAddress.address;
|
|
59
58
|
}
|
|
60
59
|
return false;
|
|
61
60
|
}
|
|
@@ -77,12 +76,7 @@ var EthAddress = class _EthAddress {
|
|
|
77
76
|
toString(checksum, chainId) {
|
|
78
77
|
if (checksum) {
|
|
79
78
|
const strippedAddress = this.toHex();
|
|
80
|
-
|
|
81
|
-
let checksumAddress = "0x";
|
|
82
|
-
for (let i = 0; i < strippedAddress.length; i++) {
|
|
83
|
-
checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? strippedAddress[i].toUpperCase() : strippedAddress[i];
|
|
84
|
-
}
|
|
85
|
-
return checksumAddress;
|
|
79
|
+
return getAddress(chainId !== void 0 ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`);
|
|
86
80
|
}
|
|
87
81
|
return `0x${this.toHex()}`;
|
|
88
82
|
}
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/ellipsize.ts","../../src/EthAddress.ts","../../src/padHex.ts"],"sourcesContent":["export const ellipsize = (value: string, length = 2) => {\n const part1 = value.slice(0, length)\n const part2 = value.slice(value.length - length, value.length)\n return `${part1}...${part2}`\n}\n","import { assertEx } from '@xylabs/assert'\nimport { getAddress } from 'ethers'\n\nimport { ellipsize } from './ellipsize'\nimport { padHex } from './padHex'\n\nexport const isEthAddress = (obj: { type: string }) => obj?.type === EthAddress.type\n\nexport class EthAddress {\n static readonly type = 'EthAddress'\n\n type = EthAddress.type\n\n private address: bigint\n\n private constructor(address: bigint) {\n this.address = address\n }\n\n static fromString(value?: string, base = 16) {\n if (value) {\n const bi = base === 16 ? BigInt(value.startsWith('0x') ? value : `0x${value}`) : BigInt(value)\n return new EthAddress(bi)\n }\n }\n\n static parse(value: unknown, base?: number) {\n if (typeof value === 'string') {\n return this.fromString(value, base)\n }\n }\n\n static validate(address: string) {\n return /^(0x)?[0-9a-f]{40}$/i.test(address)\n }\n\n equals(address?: EthAddress | string | null): boolean {\n if (address) {\n let inAddress: EthAddress\n if (typeof address === 'string') {\n inAddress = assertEx(EthAddress.fromString(address), 'Bad Address')\n } else {\n inAddress = address\n }\n return this.address === inAddress.address\n }\n return false\n }\n\n toBigNumber() {\n return this.address\n }\n\n toHex() {\n return padHex(this.address.toString(16), 20)\n }\n\n toJSON(): string {\n return `0x${this.toHex()}`\n }\n\n toLowerCaseString() {\n return this.toString().toLowerCase()\n }\n\n toShortString(length = 2) {\n return `0x${ellipsize(this.toHex(), length)}`\n }\n\n toString(checksum?: boolean, chainId?: string) {\n if (checksum) {\n const strippedAddress = this.toHex()\n return getAddress(chainId !== undefined ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`)\n }\n return `0x${this.toHex()}`\n }\n\n validate() {\n return EthAddress.validate(this.toString())\n }\n}\n","const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport { padHex }\n"],"mappings":";AAAO,IAAM,YAAY,CAAC,OAAe,SAAS,MAAM;AACtD,QAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AACnC,QAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,QAAQ,MAAM,MAAM;AAC7D,SAAO,GAAG,KAAK,MAAM,KAAK;AAC5B;;;ACJA,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;;;ACD3B,IAAM,SAAS,CAAC,KAAa,cAAuB;AAClD,MAAI,SAAS;AACb,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB,aAAS,IAAI,GAAG;AAAA,EAClB;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS,IAAI,WAAW;AACpC,eAAS,KAAK,MAAM;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;;;ADLO,IAAM,eAAe,CAAC,SAA0B,2BAAK,UAAS,WAAW;AAEzE,IAAM,aAAN,MAAM,YAAW;AAAA,EACtB,OAAgB,OAAO;AAAA,EAEvB,OAAO,YAAW;AAAA,EAEV;AAAA,EAEA,YAAY,SAAiB;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW,OAAgB,OAAO,IAAI;AAC3C,QAAI,OAAO;AACT,YAAM,KAAK,SAAS,KAAK,OAAO,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,IAAI,OAAO,KAAK;AAC7F,aAAO,IAAI,YAAW,EAAE;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,MAAM,OAAgB,MAAe;AAC1C,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK,WAAW,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,SAAiB;AAC/B,WAAO,uBAAuB,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAA+C;AACpD,QAAI,SAAS;AACX,UAAI;AACJ,UAAI,OAAO,YAAY,UAAU;AAC/B,oBAAY,SAAS,YAAW,WAAW,OAAO,GAAG,aAAa;AAAA,MACpE,OAAO;AACL,oBAAY;AAAA,MACd;AACA,aAAO,KAAK,YAAY,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ;AACN,WAAO,OAAO,KAAK,QAAQ,SAAS,EAAE,GAAG,EAAE;AAAA,EAC7C;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,SAAS,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,cAAc,SAAS,GAAG;AACxB,WAAO,KAAK,UAAU,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,EAC7C;AAAA,EAEA,SAAS,UAAoB,SAAkB;AAC7C,QAAI,UAAU;AACZ,YAAM,kBAAkB,KAAK,MAAM;AACnC,aAAO,WAAW,YAAY,SAAY,GAAG,OAAO,KAAK,eAAe,KAAK,KAAK,eAAe,EAAE;AAAA,IACrG;AACA,WAAO,KAAK,KAAK,MAAM,CAAC;AAAA,EAC1B;AAAA,EAEA,WAAW;AACT,WAAO,YAAW,SAAS,KAAK,SAAS,CAAC;AAAA,EAC5C;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -38,9 +38,8 @@
|
|
|
38
38
|
"esm"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@xylabs/assert": "~2.13.
|
|
42
|
-
"
|
|
43
|
-
"keccak256": "^1.0.6"
|
|
41
|
+
"@xylabs/assert": "~2.13.20",
|
|
42
|
+
"ethers": "^6.9.0"
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
45
|
"@xylabs/ts-scripts-yarn3": "^3.2.10",
|
|
@@ -56,6 +55,6 @@
|
|
|
56
55
|
"url": "https://github.com/xylabs/sdk-js.git"
|
|
57
56
|
},
|
|
58
57
|
"sideEffects": false,
|
|
59
|
-
"version": "2.13.
|
|
58
|
+
"version": "2.13.20",
|
|
60
59
|
"type": "module"
|
|
61
60
|
}
|
package/src/EthAddress.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import {
|
|
3
|
-
import keccak256 from 'keccak256'
|
|
2
|
+
import { getAddress } from 'ethers'
|
|
4
3
|
|
|
5
4
|
import { ellipsize } from './ellipsize'
|
|
6
5
|
import { padHex } from './padHex'
|
|
@@ -12,16 +11,16 @@ export class EthAddress {
|
|
|
12
11
|
|
|
13
12
|
type = EthAddress.type
|
|
14
13
|
|
|
15
|
-
private address:
|
|
14
|
+
private address: bigint
|
|
16
15
|
|
|
17
|
-
private constructor(address:
|
|
16
|
+
private constructor(address: bigint) {
|
|
18
17
|
this.address = address
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
static fromString(value?: string, base = 16) {
|
|
22
21
|
if (value) {
|
|
23
|
-
const
|
|
24
|
-
return new EthAddress(
|
|
22
|
+
const bi = base === 16 ? BigInt(value.startsWith('0x') ? value : `0x${value}`) : BigInt(value)
|
|
23
|
+
return new EthAddress(bi)
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
|
|
@@ -43,7 +42,7 @@ export class EthAddress {
|
|
|
43
42
|
} else {
|
|
44
43
|
inAddress = address
|
|
45
44
|
}
|
|
46
|
-
return this.address
|
|
45
|
+
return this.address === inAddress.address
|
|
47
46
|
}
|
|
48
47
|
return false
|
|
49
48
|
}
|
|
@@ -71,14 +70,7 @@ export class EthAddress {
|
|
|
71
70
|
toString(checksum?: boolean, chainId?: string) {
|
|
72
71
|
if (checksum) {
|
|
73
72
|
const strippedAddress = this.toHex()
|
|
74
|
-
|
|
75
|
-
let checksumAddress = '0x'
|
|
76
|
-
|
|
77
|
-
for (let i = 0; i < strippedAddress.length; i++) {
|
|
78
|
-
checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? strippedAddress[i].toUpperCase() : strippedAddress[i]
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return checksumAddress
|
|
73
|
+
return getAddress(chainId !== undefined ? `${chainId}0x${strippedAddress}` : `0x${strippedAddress}`)
|
|
82
74
|
}
|
|
83
75
|
return `0x${this.toHex()}`
|
|
84
76
|
}
|