@hyperlane-xyz/utils 3.10.0 → 3.10.1-beta0

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.
Files changed (113) hide show
  1. package/README.md +20 -0
  2. package/dist/addresses.d.ts +42 -0
  3. package/dist/addresses.d.ts.map +1 -0
  4. package/dist/addresses.js +292 -0
  5. package/dist/addresses.js.map +1 -0
  6. package/dist/addresses.test.d.ts +2 -0
  7. package/dist/addresses.test.d.ts.map +1 -0
  8. package/dist/addresses.test.js +44 -0
  9. package/dist/addresses.test.js.map +1 -0
  10. package/dist/amount.d.ts +45 -0
  11. package/dist/amount.d.ts.map +1 -0
  12. package/dist/amount.js +114 -0
  13. package/dist/amount.js.map +1 -0
  14. package/dist/amount.test.d.ts +2 -0
  15. package/dist/amount.test.d.ts.map +1 -0
  16. package/dist/amount.test.js +46 -0
  17. package/dist/amount.test.js.map +1 -0
  18. package/dist/arrays.d.ts +8 -0
  19. package/dist/arrays.d.ts.map +1 -0
  20. package/dist/arrays.js +11 -0
  21. package/dist/arrays.js.map +1 -0
  22. package/dist/async.d.ts +56 -0
  23. package/dist/async.d.ts.map +1 -0
  24. package/dist/async.js +110 -0
  25. package/dist/async.js.map +1 -0
  26. package/dist/base58.d.ts +5 -0
  27. package/dist/base58.d.ts.map +1 -0
  28. package/dist/base58.js +15 -0
  29. package/dist/base58.js.map +1 -0
  30. package/dist/base64.d.ts +3 -0
  31. package/dist/base64.d.ts.map +1 -0
  32. package/dist/base64.js +25 -0
  33. package/dist/base64.js.map +1 -0
  34. package/dist/big-numbers.d.ts +50 -0
  35. package/dist/big-numbers.d.ts.map +1 -0
  36. package/dist/big-numbers.js +80 -0
  37. package/dist/big-numbers.js.map +1 -0
  38. package/dist/big-numbers.test.d.ts +2 -0
  39. package/dist/big-numbers.test.d.ts.map +1 -0
  40. package/dist/big-numbers.test.js +96 -0
  41. package/dist/big-numbers.test.js.map +1 -0
  42. package/dist/calldata.d.ts +3 -0
  43. package/dist/calldata.d.ts.map +1 -0
  44. package/dist/calldata.js +4 -0
  45. package/dist/calldata.js.map +1 -0
  46. package/dist/checkpoints.d.ts +5 -0
  47. package/dist/checkpoints.d.ts.map +1 -0
  48. package/dist/checkpoints.js +24 -0
  49. package/dist/checkpoints.js.map +1 -0
  50. package/dist/domains.d.ts +2 -0
  51. package/dist/domains.d.ts.map +1 -0
  52. package/dist/domains.js +6 -0
  53. package/dist/domains.js.map +1 -0
  54. package/dist/env.d.ts +2 -0
  55. package/dist/env.d.ts.map +1 -0
  56. package/dist/env.js +11 -0
  57. package/dist/env.js.map +1 -0
  58. package/dist/ids.d.ts +20 -0
  59. package/dist/ids.d.ts.map +1 -0
  60. package/dist/ids.js +42 -0
  61. package/dist/ids.js.map +1 -0
  62. package/dist/index.d.ts +23 -23
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +23 -146
  65. package/dist/index.js.map +1 -1
  66. package/dist/logging.d.ts +21 -0
  67. package/dist/logging.d.ts.map +1 -0
  68. package/dist/logging.js +91 -0
  69. package/dist/logging.js.map +1 -0
  70. package/dist/math.d.ts +5 -0
  71. package/dist/math.d.ts.map +1 -0
  72. package/dist/math.js +18 -0
  73. package/dist/math.js.map +1 -0
  74. package/dist/messages.d.ts +21 -0
  75. package/dist/messages.d.ts.map +1 -0
  76. package/dist/messages.js +52 -0
  77. package/dist/messages.js.map +1 -0
  78. package/dist/multisig.d.ts +4 -0
  79. package/dist/multisig.d.ts.map +1 -0
  80. package/dist/multisig.js +53 -0
  81. package/dist/multisig.js.map +1 -0
  82. package/dist/objects.d.ts +19 -0
  83. package/dist/objects.d.ts.map +1 -0
  84. package/dist/objects.js +95 -0
  85. package/dist/objects.js.map +1 -0
  86. package/dist/sets.d.ts +4 -0
  87. package/dist/sets.d.ts.map +1 -0
  88. package/dist/sets.js +24 -0
  89. package/dist/sets.js.map +1 -0
  90. package/dist/src/types.d.ts +1 -2
  91. package/dist/src/types.d.ts.map +1 -1
  92. package/dist/src/types.js.map +1 -1
  93. package/dist/strings.d.ts +7 -0
  94. package/dist/strings.d.ts.map +1 -0
  95. package/dist/strings.js +43 -0
  96. package/dist/strings.js.map +1 -0
  97. package/dist/typeof.d.ts +3 -0
  98. package/dist/typeof.d.ts.map +1 -0
  99. package/dist/typeof.js +7 -0
  100. package/dist/typeof.js.map +1 -0
  101. package/dist/types.d.ts +88 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +22 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/validation.d.ts +2 -0
  106. package/dist/validation.d.ts.map +1 -0
  107. package/dist/validation.js +6 -0
  108. package/dist/validation.js.map +1 -0
  109. package/dist/validator.d.ts +17 -0
  110. package/dist/validator.d.ts.map +1 -0
  111. package/dist/validator.js +43 -0
  112. package/dist/validator.js.map +1 -0
  113. package/package.json +13 -8
package/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # Hyperlane Utils
2
+
3
+ A collection of various utilities and types for building applications with Hyperlane.
4
+ Typically not used directly but through the [Hyperlane SDK](https://www.npmjs.com/package/@hyperlane-xyz/sdk) instead.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ # Install with NPM
10
+ npm install @hyperlane-xyz/utils
11
+
12
+ # Or with Yarn
13
+ yarn add @hyperlane-xyz/utils
14
+ ```
15
+
16
+ Note, this package uses [ESM Modules](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#pure-esm-package)
17
+
18
+ ## License
19
+
20
+ Apache 2.0
@@ -0,0 +1,42 @@
1
+ import { Address, HexString, ProtocolType } from './types.js';
2
+ export declare function isAddressEvm(address: Address): boolean;
3
+ export declare function isAddressSealevel(address: Address): boolean;
4
+ export declare function isAddressCosmos(address: Address): boolean;
5
+ export declare function getAddressProtocolType(address: Address): ProtocolType.Ethereum | ProtocolType.Sealevel | ProtocolType.Cosmos | undefined;
6
+ export declare function isAddress(address: Address): boolean;
7
+ export declare function isValidAddressEvm(address: Address): boolean;
8
+ export declare function isValidAddressSealevel(address: Address): boolean;
9
+ export declare function isValidAddressCosmos(address: Address): boolean;
10
+ export declare function isValidAddress(address: Address, protocol?: ProtocolType): boolean;
11
+ export declare function normalizeAddressEvm(address: Address): string;
12
+ export declare function normalizeAddressSealevel(address: Address): string;
13
+ export declare function normalizeAddressCosmos(address: Address): string;
14
+ export declare function normalizeAddress(address: Address, protocol?: ProtocolType): string;
15
+ export declare function eqAddressEvm(a1: Address, a2: Address): boolean;
16
+ export declare function eqAddressSol(a1: Address, a2: Address): boolean;
17
+ export declare function eqAddressCosmos(a1: Address, a2: Address): boolean;
18
+ export declare function eqAddress(a1: Address, a2: Address): boolean;
19
+ export declare function isValidTransactionHashEvm(input: string): boolean;
20
+ export declare function isValidTransactionHashSealevel(input: string): boolean;
21
+ export declare function isValidTransactionHashCosmos(input: string): boolean;
22
+ export declare function isValidTransactionHash(input: string, protocol: ProtocolType): boolean;
23
+ export declare function isZeroishAddress(address: Address): boolean;
24
+ export declare function shortenAddress(address: Address, capitalize?: boolean): string;
25
+ export declare function capitalizeAddress(address: Address): string;
26
+ export declare function addressToBytes32Evm(address: Address): string;
27
+ export declare function bytes32ToAddress(bytes32: HexString): Address;
28
+ export declare function addressToBytesEvm(address: Address): Uint8Array;
29
+ export declare function addressToBytesSol(address: Address): Uint8Array;
30
+ export declare function addressToBytesCosmos(address: Address): Uint8Array;
31
+ export declare function addressToBytes(address: Address, protocol?: ProtocolType): Uint8Array;
32
+ export declare function addressToByteHexString(address: string, protocol?: ProtocolType): string;
33
+ export declare function addressToBytes32(address: Address, protocol?: ProtocolType): string;
34
+ export declare function bytesToBytes32(bytes: Uint8Array): string;
35
+ export declare function bytesToAddressEvm(bytes: Uint8Array): Address;
36
+ export declare function bytesToAddressSol(bytes: Uint8Array): Address;
37
+ export declare function bytesToAddressCosmos(bytes: Uint8Array, prefix: string): Address;
38
+ export declare function bytesToProtocolAddress(bytes: Uint8Array, toProtocol: ProtocolType, prefix?: string): string;
39
+ export declare function convertToProtocolAddress(address: string, protocol: ProtocolType, prefix?: string): string;
40
+ export declare function ensure0x(hexstr: string): string;
41
+ export declare function strip0x(hexstr: string): string;
42
+ //# sourceMappingURL=addresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { fromBech32, normalizeBech32, toBech32 } from '@cosmjs/encoding';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { utils as ethersUtils } from 'ethers';
4
+ import { isNullish } from './typeof.js';
5
+ import { ProtocolType } from './types.js';
6
+ import { assert } from './validation.js';
7
+ const EVM_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
8
+ const SEALEVEL_ADDRESS_REGEX = /^[a-zA-Z0-9]{36,44}$/;
9
+ const HEX_BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/;
10
+ // https://github.com/cosmos/cosmos-sdk/blob/84c33215658131d87daf3c629e909e12ed9370fa/types/coin.go#L601C17-L601C44
11
+ const COSMOS_DENOM_PATTERN = `[a-zA-Z][a-zA-Z0-9]{2,127}`;
12
+ // https://en.bitcoin.it/wiki/BIP_0173
13
+ const BECH32_ADDRESS_PATTERN = `[a-zA-Z]{1,83}1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38,58}`;
14
+ const COSMOS_ADDRESS_REGEX = new RegExp(`^${BECH32_ADDRESS_PATTERN}$`);
15
+ const IBC_DENOM_REGEX = new RegExp(`^ibc/([A-Fa-f0-9]{64})$`);
16
+ const COSMOS_FACTORY_TOKEN_REGEX = new RegExp(`^factory/(${BECH32_ADDRESS_PATTERN})/${COSMOS_DENOM_PATTERN}$`);
17
+ const EVM_TX_HASH_REGEX = /^0x([A-Fa-f0-9]{64})$/;
18
+ const SEALEVEL_TX_HASH_REGEX = /^[a-zA-Z1-9]{88}$/;
19
+ const COSMOS_TX_HASH_REGEX = /^(0x)?[A-Fa-f0-9]{64}$/;
20
+ const EVM_ZEROISH_ADDRESS_REGEX = /^(0x)?0*$/;
21
+ const SEALEVEL_ZEROISH_ADDRESS_REGEX = /^1+$/;
22
+ const COSMOS_ZEROISH_ADDRESS_REGEX = /^[a-z]{1,10}?1[0]+$/;
23
+ export function isAddressEvm(address) {
24
+ return EVM_ADDRESS_REGEX.test(address);
25
+ }
26
+ export function isAddressSealevel(address) {
27
+ return SEALEVEL_ADDRESS_REGEX.test(address);
28
+ }
29
+ export function isAddressCosmos(address) {
30
+ return (COSMOS_ADDRESS_REGEX.test(address) ||
31
+ IBC_DENOM_REGEX.test(address) ||
32
+ COSMOS_FACTORY_TOKEN_REGEX.test(address));
33
+ }
34
+ export function getAddressProtocolType(address) {
35
+ if (!address)
36
+ return undefined;
37
+ if (isAddressEvm(address)) {
38
+ return ProtocolType.Ethereum;
39
+ }
40
+ else if (isAddressCosmos(address)) {
41
+ return ProtocolType.Cosmos;
42
+ }
43
+ else if (isAddressSealevel(address)) {
44
+ return ProtocolType.Sealevel;
45
+ }
46
+ else {
47
+ return undefined;
48
+ }
49
+ }
50
+ export function isAddress(address) {
51
+ return !!getAddressProtocolType(address);
52
+ }
53
+ function routeAddressUtil(fns, param, fallback, protocol) {
54
+ protocol ||= getAddressProtocolType(param);
55
+ if (protocol && fns[protocol])
56
+ return fns[protocol](param);
57
+ else if (!isNullish(fallback))
58
+ return fallback;
59
+ else
60
+ throw new Error(`Unsupported protocol ${protocol}`);
61
+ }
62
+ // Slower than isAddressEvm above but actually validates content and checksum
63
+ export function isValidAddressEvm(address) {
64
+ // Need to catch because ethers' isAddress throws in some cases (bad checksum)
65
+ try {
66
+ const isValid = address && ethersUtils.isAddress(address);
67
+ return !!isValid;
68
+ }
69
+ catch (error) {
70
+ return false;
71
+ }
72
+ }
73
+ // Slower than isAddressSealevel above but actually validates content and checksum
74
+ export function isValidAddressSealevel(address) {
75
+ try {
76
+ const isValid = address && new PublicKey(address).toBase58();
77
+ return !!isValid;
78
+ }
79
+ catch (error) {
80
+ return false;
81
+ }
82
+ }
83
+ // Slower than isAddressCosmos above but actually validates content and checksum
84
+ export function isValidAddressCosmos(address) {
85
+ try {
86
+ const isValid = address &&
87
+ (IBC_DENOM_REGEX.test(address) ||
88
+ COSMOS_FACTORY_TOKEN_REGEX.test(address) ||
89
+ fromBech32(address));
90
+ return !!isValid;
91
+ }
92
+ catch (error) {
93
+ return false;
94
+ }
95
+ }
96
+ export function isValidAddress(address, protocol) {
97
+ return routeAddressUtil({
98
+ [ProtocolType.Ethereum]: isValidAddressEvm,
99
+ [ProtocolType.Sealevel]: isValidAddressSealevel,
100
+ [ProtocolType.Cosmos]: isValidAddressCosmos,
101
+ }, address, false, protocol);
102
+ }
103
+ export function normalizeAddressEvm(address) {
104
+ if (isZeroishAddress(address))
105
+ return address;
106
+ try {
107
+ return ethersUtils.getAddress(address);
108
+ }
109
+ catch (error) {
110
+ return address;
111
+ }
112
+ }
113
+ export function normalizeAddressSealevel(address) {
114
+ if (isZeroishAddress(address))
115
+ return address;
116
+ try {
117
+ return new PublicKey(address).toBase58();
118
+ }
119
+ catch (error) {
120
+ return address;
121
+ }
122
+ }
123
+ export function normalizeAddressCosmos(address) {
124
+ if (isZeroishAddress(address))
125
+ return address;
126
+ try {
127
+ return normalizeBech32(address);
128
+ }
129
+ catch (error) {
130
+ return address;
131
+ }
132
+ }
133
+ export function normalizeAddress(address, protocol) {
134
+ return routeAddressUtil({
135
+ [ProtocolType.Ethereum]: normalizeAddressEvm,
136
+ [ProtocolType.Sealevel]: normalizeAddressSealevel,
137
+ [ProtocolType.Cosmos]: normalizeAddressCosmos,
138
+ }, address, address, protocol);
139
+ }
140
+ export function eqAddressEvm(a1, a2) {
141
+ return normalizeAddressEvm(a1) === normalizeAddressEvm(a2);
142
+ }
143
+ export function eqAddressSol(a1, a2) {
144
+ return normalizeAddressSealevel(a1) === normalizeAddressSealevel(a2);
145
+ }
146
+ export function eqAddressCosmos(a1, a2) {
147
+ return normalizeAddressCosmos(a1) === normalizeAddressCosmos(a2);
148
+ }
149
+ export function eqAddress(a1, a2) {
150
+ const p1 = getAddressProtocolType(a1);
151
+ const p2 = getAddressProtocolType(a2);
152
+ if (p1 !== p2)
153
+ return false;
154
+ return routeAddressUtil({
155
+ [ProtocolType.Ethereum]: (_a1) => eqAddressEvm(_a1, a2),
156
+ [ProtocolType.Sealevel]: (_a1) => eqAddressSol(_a1, a2),
157
+ [ProtocolType.Cosmos]: (_a1) => eqAddressCosmos(_a1, a2),
158
+ }, a1, false, p1);
159
+ }
160
+ export function isValidTransactionHashEvm(input) {
161
+ return EVM_TX_HASH_REGEX.test(input);
162
+ }
163
+ export function isValidTransactionHashSealevel(input) {
164
+ return SEALEVEL_TX_HASH_REGEX.test(input);
165
+ }
166
+ export function isValidTransactionHashCosmos(input) {
167
+ return COSMOS_TX_HASH_REGEX.test(input);
168
+ }
169
+ export function isValidTransactionHash(input, protocol) {
170
+ if (protocol === ProtocolType.Ethereum) {
171
+ return isValidTransactionHashEvm(input);
172
+ }
173
+ else if (protocol === ProtocolType.Sealevel) {
174
+ return isValidTransactionHashSealevel(input);
175
+ }
176
+ else if (protocol === ProtocolType.Cosmos) {
177
+ return isValidTransactionHashCosmos(input);
178
+ }
179
+ else {
180
+ return false;
181
+ }
182
+ }
183
+ export function isZeroishAddress(address) {
184
+ return (EVM_ZEROISH_ADDRESS_REGEX.test(address) ||
185
+ SEALEVEL_ZEROISH_ADDRESS_REGEX.test(address) ||
186
+ COSMOS_ZEROISH_ADDRESS_REGEX.test(address));
187
+ }
188
+ export function shortenAddress(address, capitalize) {
189
+ if (!address)
190
+ return '';
191
+ if (address.length < 8)
192
+ return address;
193
+ const normalized = normalizeAddress(address);
194
+ const shortened = normalized.substring(0, 5) +
195
+ '...' +
196
+ normalized.substring(normalized.length - 4);
197
+ return capitalize ? capitalizeAddress(shortened) : shortened;
198
+ }
199
+ export function capitalizeAddress(address) {
200
+ if (address.startsWith('0x'))
201
+ return '0x' + address.substring(2).toUpperCase();
202
+ else
203
+ return address.toUpperCase();
204
+ }
205
+ export function addressToBytes32Evm(address) {
206
+ return ethersUtils
207
+ .hexZeroPad(ethersUtils.hexStripZeros(address), 32)
208
+ .toLowerCase();
209
+ }
210
+ // For EVM addresses only, kept for backwards compatibility and convenience
211
+ export function bytes32ToAddress(bytes32) {
212
+ return ethersUtils.getAddress(bytes32.slice(-40));
213
+ }
214
+ export function addressToBytesEvm(address) {
215
+ const addrBytes32 = addressToBytes32Evm(address);
216
+ return Buffer.from(strip0x(addrBytes32), 'hex');
217
+ }
218
+ export function addressToBytesSol(address) {
219
+ return new PublicKey(address).toBytes();
220
+ }
221
+ export function addressToBytesCosmos(address) {
222
+ return fromBech32(address).data;
223
+ }
224
+ export function addressToBytes(address, protocol) {
225
+ const bytes = routeAddressUtil({
226
+ [ProtocolType.Ethereum]: addressToBytesEvm,
227
+ [ProtocolType.Sealevel]: addressToBytesSol,
228
+ [ProtocolType.Cosmos]: addressToBytesCosmos,
229
+ }, address, new Uint8Array(), protocol);
230
+ assert(bytes.length && !bytes.every((b) => b == 0), 'address bytes must not be empty');
231
+ return bytes;
232
+ }
233
+ export function addressToByteHexString(address, protocol) {
234
+ return ensure0x(Buffer.from(addressToBytes(address, protocol)).toString('hex'));
235
+ }
236
+ export function addressToBytes32(address, protocol) {
237
+ // If the address is already bytes32, just return, avoiding a regression
238
+ // where an already bytes32 address cannot be categorized as a protocol address.
239
+ if (HEX_BYTES32_REGEX.test(ensure0x(address)))
240
+ return ensure0x(address);
241
+ const bytes = addressToBytes(address, protocol);
242
+ return bytesToBytes32(bytes);
243
+ }
244
+ export function bytesToBytes32(bytes) {
245
+ if (bytes.length > 32) {
246
+ throw new Error('bytes must be 32 bytes or less');
247
+ }
248
+ // This 0x-prefixes the hex string
249
+ return ethersUtils.hexZeroPad(ensure0x(Buffer.from(bytes).toString('hex')), 32);
250
+ }
251
+ export function bytesToAddressEvm(bytes) {
252
+ return bytes32ToAddress(Buffer.from(bytes).toString('hex'));
253
+ }
254
+ export function bytesToAddressSol(bytes) {
255
+ return new PublicKey(bytes).toBase58();
256
+ }
257
+ export function bytesToAddressCosmos(bytes, prefix) {
258
+ if (!prefix)
259
+ throw new Error('Prefix required for Cosmos address');
260
+ return toBech32(prefix, bytes);
261
+ }
262
+ export function bytesToProtocolAddress(bytes, toProtocol, prefix) {
263
+ assert(bytes.length && !bytes.every((b) => b == 0), 'address bytes must not be empty');
264
+ if (toProtocol === ProtocolType.Ethereum) {
265
+ return bytesToAddressEvm(bytes);
266
+ }
267
+ else if (toProtocol === ProtocolType.Sealevel) {
268
+ return bytesToAddressSol(bytes);
269
+ }
270
+ else if (toProtocol === ProtocolType.Cosmos) {
271
+ return bytesToAddressCosmos(bytes, prefix);
272
+ }
273
+ else {
274
+ throw new Error(`Unsupported protocol for address ${toProtocol}`);
275
+ }
276
+ }
277
+ export function convertToProtocolAddress(address, protocol, prefix) {
278
+ const currentProtocol = getAddressProtocolType(address);
279
+ if (!currentProtocol)
280
+ throw new Error(`Unknown address protocol for ${address}`);
281
+ if (currentProtocol === protocol)
282
+ return address;
283
+ const addressBytes = addressToBytes(address, currentProtocol);
284
+ return bytesToProtocolAddress(addressBytes, protocol, prefix);
285
+ }
286
+ export function ensure0x(hexstr) {
287
+ return hexstr.startsWith('0x') ? hexstr : `0x${hexstr}`;
288
+ }
289
+ export function strip0x(hexstr) {
290
+ return hexstr.startsWith('0x') ? hexstr.slice(2) : hexstr;
291
+ }
292
+ //# sourceMappingURL=addresses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addresses.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.test.d.ts","sourceRoot":"","sources":["../src/addresses.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { expect } from 'chai';
2
+ import { addressToBytes, bytesToProtocolAddress, isZeroishAddress, } from './addresses.js';
3
+ import { ProtocolType } from './types.js';
4
+ const ETH_ZERO_ADDR = '0x0000000000000000000000000000000000000000';
5
+ const ETH_NON_ZERO_ADDR = '0x0000000000000000000000000000000000000001';
6
+ const COS_ZERO_ADDR = 'cosmos1000';
7
+ const COS_NON_ZERO_ADDR = 'neutron1jyyjd3x0jhgswgm6nnctxvzla8ypx50tew3ayxxwkrjfxhvje6kqzvzudq';
8
+ const SOL_ZERO_ADDR = '111111';
9
+ const SOL_NON_ZERO_ADDR = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
10
+ // TODO increase address utility test coverage
11
+ describe('Address utilities', () => {
12
+ describe('isZeroishAddress', () => {
13
+ it('Identifies 0-ish addresses', () => {
14
+ expect(isZeroishAddress('0x')).to.be.true;
15
+ expect(isZeroishAddress(ETH_ZERO_ADDR)).to.be.true;
16
+ expect(isZeroishAddress(COS_ZERO_ADDR)).to.be.true;
17
+ expect(isZeroishAddress(SOL_ZERO_ADDR)).to.be.true;
18
+ });
19
+ it('Identifies non-0-ish addresses', () => {
20
+ expect(isZeroishAddress(ETH_NON_ZERO_ADDR)).to.be.false;
21
+ expect(isZeroishAddress(COS_NON_ZERO_ADDR)).to.be.false;
22
+ expect(isZeroishAddress(SOL_NON_ZERO_ADDR)).to.be.false;
23
+ });
24
+ });
25
+ describe('addressToBytes', () => {
26
+ it('Converts addresses to bytes', () => {
27
+ expect(addressToBytes(ETH_NON_ZERO_ADDR).length).to.equal(32);
28
+ });
29
+ it('Rejects zeroish addresses', () => {
30
+ expect(() => addressToBytes(ETH_ZERO_ADDR)).to.throw(Error);
31
+ expect(() => addressToBytes(COS_ZERO_ADDR)).to.throw(Error);
32
+ expect(() => addressToBytes(SOL_ZERO_ADDR)).to.throw(Error);
33
+ });
34
+ });
35
+ describe('bytesToProtocolAddress', () => {
36
+ it('Converts bytes to address', () => {
37
+ expect(bytesToProtocolAddress(addressToBytes(ETH_NON_ZERO_ADDR), ProtocolType.Ethereum)).to.equal(ETH_NON_ZERO_ADDR);
38
+ });
39
+ it('Rejects zeroish addresses', () => {
40
+ expect(() => bytesToProtocolAddress(new Uint8Array([0, 0, 0]), ProtocolType.Ethereum)).to.throw(Error);
41
+ });
42
+ });
43
+ });
44
+ //# sourceMappingURL=addresses.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.test.js","sourceRoot":"","sources":["../src/addresses.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { BigNumber } from 'bignumber.js';
2
+ /**
3
+ * Convert the given Wei value to Ether value
4
+ * @param value The value to convert.
5
+ * @returns Converted value in string type.
6
+ */
7
+ export declare function fromWei(value: BigNumber.Value | null | undefined, decimals?: number): string;
8
+ /**
9
+ * Convert the given Wei value to Ether value,
10
+ * round to set number of decimals with a minimum floor, configured per token
11
+ * @param value The value to convert.
12
+ * @param decimals
13
+ * @returns Converted value in string type.
14
+ */
15
+ export declare function fromWeiRounded(value: BigNumber.Value | null | undefined, decimals?: number, displayDecimals?: number): string;
16
+ /**
17
+ * Convert the given value to Wei value
18
+ * @param value The value to convert.
19
+ * @returns Converted value in string type.
20
+ */
21
+ export declare function toWei(value: BigNumber.Value | null | undefined, decimals?: number): string;
22
+ /**
23
+ * Try to parse the given value into BigNumber.js BigNumber
24
+ * @param value The value to parse.
25
+ * @returns Parsed value in BigNumber.js BigNumber type.
26
+ */
27
+ export declare function tryParseAmount(value: BigNumber.Value | null | undefined): BigNumber | null;
28
+ /**
29
+ * Checks if an amount is equal of nearly equal to balance within a small margin of error
30
+ * Necessary because amounts in the UI are often rounded
31
+ * @param amount1 The amount to compare.
32
+ * @param amount2 The amount to compare.
33
+ * @returns true/false.
34
+ */
35
+ export declare function eqAmountApproximate(amount1: BigNumber.Value, amount2: BigNumber.Value, maxDifference: BigNumber.Value): boolean;
36
+ /**
37
+ * Converts a value with `fromDecimals` decimals to a value with `toDecimals` decimals.
38
+ * Incurs a loss of precision when `fromDecimals` > `toDecimals`.
39
+ * @param fromDecimals The number of decimals `value` has.
40
+ * @param toDecimals The number of decimals to convert `value` to.
41
+ * @param value The value to convert.
42
+ * @returns `value` represented with `toDecimals` decimals in string type.
43
+ */
44
+ export declare function convertDecimals(fromDecimals: number, toDecimals: number, value: BigNumber.Value): string;
45
+ //# sourceMappingURL=amount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../src/amount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzC;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,SAAyB,GAChC,MAAM,CAKR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,SAAyB,EACjC,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAOR;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CACnB,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,SAAyB,GAChC,MAAM,CAmBR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,GACxC,SAAS,GAAG,IAAI,CASlB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,aAAa,EAAE,SAAS,CAAC,KAAK,GAC7B,OAAO,CAGT;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,CAAC,KAAK,GACrB,MAAM,CAgBR"}
package/dist/amount.js ADDED
@@ -0,0 +1,114 @@
1
+ import { formatUnits, parseUnits } from '@ethersproject/units';
2
+ import { BigNumber } from 'bignumber.js';
3
+ const DEFAULT_DISPLAY_DECIMALS = 4;
4
+ const DEFAULT_TOKEN_DECIMALS = 18;
5
+ /**
6
+ * Convert the given Wei value to Ether value
7
+ * @param value The value to convert.
8
+ * @returns Converted value in string type.
9
+ */
10
+ export function fromWei(value, decimals = DEFAULT_TOKEN_DECIMALS) {
11
+ if (!value)
12
+ return (0).toString();
13
+ const valueString = value.toString(10).trim();
14
+ const flooredValue = BigNumber(valueString).toFixed(0, BigNumber.ROUND_FLOOR);
15
+ return parseFloat(formatUnits(flooredValue, decimals)).toString();
16
+ }
17
+ /**
18
+ * Convert the given Wei value to Ether value,
19
+ * round to set number of decimals with a minimum floor, configured per token
20
+ * @param value The value to convert.
21
+ * @param decimals
22
+ * @returns Converted value in string type.
23
+ */
24
+ export function fromWeiRounded(value, decimals = DEFAULT_TOKEN_DECIMALS, displayDecimals) {
25
+ if (!value)
26
+ return '0';
27
+ const flooredValue = BigNumber(value).toFixed(0, BigNumber.ROUND_FLOOR);
28
+ const amount = BigNumber(formatUnits(flooredValue, decimals));
29
+ if (amount.isZero())
30
+ return '0';
31
+ displayDecimals ??= amount.gte(10000) ? 2 : DEFAULT_DISPLAY_DECIMALS;
32
+ return amount.toFixed(displayDecimals, BigNumber.ROUND_FLOOR);
33
+ }
34
+ /**
35
+ * Convert the given value to Wei value
36
+ * @param value The value to convert.
37
+ * @returns Converted value in string type.
38
+ */
39
+ export function toWei(value, decimals = DEFAULT_TOKEN_DECIMALS) {
40
+ if (!value)
41
+ return BigNumber(0).toString();
42
+ // First convert to a BigNumber, and then call `toString` with the
43
+ // explicit radix 10 such that the result is formatted as a base-10 string
44
+ // and not in scientific notation.
45
+ const valueBN = BigNumber(value);
46
+ const valueString = valueBN.toString(10).trim();
47
+ const components = valueString.split('.');
48
+ if (components.length === 1) {
49
+ return parseUnits(valueString, decimals).toString();
50
+ }
51
+ else if (components.length === 2) {
52
+ const trimmedFraction = components[1].substring(0, decimals);
53
+ return parseUnits(`${components[0]}.${trimmedFraction}`, decimals).toString();
54
+ }
55
+ else {
56
+ throw new Error(`Cannot convert ${valueString} to wei`);
57
+ }
58
+ }
59
+ /**
60
+ * Try to parse the given value into BigNumber.js BigNumber
61
+ * @param value The value to parse.
62
+ * @returns Parsed value in BigNumber.js BigNumber type.
63
+ */
64
+ export function tryParseAmount(value) {
65
+ try {
66
+ if (!value)
67
+ return null;
68
+ const parsed = BigNumber(value);
69
+ if (!parsed || parsed.isNaN() || !parsed.isFinite())
70
+ return null;
71
+ else
72
+ return parsed;
73
+ }
74
+ catch (error) {
75
+ return null;
76
+ }
77
+ }
78
+ /**
79
+ * Checks if an amount is equal of nearly equal to balance within a small margin of error
80
+ * Necessary because amounts in the UI are often rounded
81
+ * @param amount1 The amount to compare.
82
+ * @param amount2 The amount to compare.
83
+ * @returns true/false.
84
+ */
85
+ export function eqAmountApproximate(amount1, amount2, maxDifference) {
86
+ // Is difference btwn amounts less than maxDifference
87
+ return BigNumber(amount1).minus(amount2).abs().lte(maxDifference);
88
+ }
89
+ /**
90
+ * Converts a value with `fromDecimals` decimals to a value with `toDecimals` decimals.
91
+ * Incurs a loss of precision when `fromDecimals` > `toDecimals`.
92
+ * @param fromDecimals The number of decimals `value` has.
93
+ * @param toDecimals The number of decimals to convert `value` to.
94
+ * @param value The value to convert.
95
+ * @returns `value` represented with `toDecimals` decimals in string type.
96
+ */
97
+ export function convertDecimals(fromDecimals, toDecimals, value) {
98
+ const amount = BigNumber(value);
99
+ if (fromDecimals === toDecimals)
100
+ return amount.toString(10);
101
+ else if (fromDecimals > toDecimals) {
102
+ const difference = fromDecimals - toDecimals;
103
+ return amount
104
+ .div(BigNumber(10).pow(difference))
105
+ .integerValue(BigNumber.ROUND_FLOOR)
106
+ .toString(10);
107
+ }
108
+ // fromDecimals < toDecimals
109
+ else {
110
+ const difference = toDecimals - fromDecimals;
111
+ return amount.times(BigNumber(10).pow(difference)).toString(10);
112
+ }
113
+ }
114
+ //# sourceMappingURL=amount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount.js","sourceRoot":"","sources":["../src/amount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=amount.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount.test.d.ts","sourceRoot":"","sources":["../src/amount.test.ts"],"names":[],"mappings":""}