quantumcoin 6.14.2 → 6.14.5

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 (317) hide show
  1. package/CHANGELOG.md +442 -442
  2. package/FUNDING.json +10 -10
  3. package/LICENSE.md +21 -21
  4. package/README.md +132 -142
  5. package/SECURITY.md +34 -34
  6. package/dist/README.md +22 -22
  7. package/dist/quantumcoin.js +1127 -1324
  8. package/dist/quantumcoin.js.map +1 -1
  9. package/dist/quantumcoin.min.js +1 -1
  10. package/dist/quantumcoin.umd.js +1128 -1327
  11. package/dist/quantumcoin.umd.js.map +1 -1
  12. package/dist/quantumcoin.umd.min.js +1 -1
  13. package/dist/wordlists-extra.js +1 -1
  14. package/dist/wordlists-extra.js.map +1 -1
  15. package/dist/wordlists-extra.min.js +1 -1
  16. package/lib.commonjs/README.md +16 -16
  17. package/lib.commonjs/_version.js +1 -1
  18. package/lib.commonjs/crypto/signature.d.ts +3 -76
  19. package/lib.commonjs/crypto/signature.d.ts.map +1 -1
  20. package/lib.commonjs/crypto/signature.js +15 -199
  21. package/lib.commonjs/crypto/signature.js.map +1 -1
  22. package/lib.commonjs/crypto/signing-key.d.ts +1 -1
  23. package/lib.commonjs/crypto/signing-key.d.ts.map +1 -1
  24. package/lib.commonjs/crypto/signing-key.js +19 -10
  25. package/lib.commonjs/crypto/signing-key.js.map +1 -1
  26. package/lib.commonjs/package.json +12 -12
  27. package/lib.commonjs/providers/provider-jsonrpc.d.ts +0 -1
  28. package/lib.commonjs/providers/provider-jsonrpc.d.ts.map +1 -1
  29. package/lib.commonjs/providers/provider-jsonrpc.js +0 -1
  30. package/lib.commonjs/providers/provider-jsonrpc.js.map +1 -1
  31. package/lib.commonjs/quantumcoin.d.ts +2 -0
  32. package/lib.commonjs/quantumcoin.d.ts.map +1 -1
  33. package/lib.commonjs/quantumcoin.js +11 -5
  34. package/lib.commonjs/quantumcoin.js.map +1 -1
  35. package/lib.commonjs/transaction/address.d.ts.map +1 -1
  36. package/lib.commonjs/transaction/address.js +8 -3
  37. package/lib.commonjs/transaction/address.js.map +1 -1
  38. package/lib.commonjs/transaction/transaction.d.ts.map +1 -1
  39. package/lib.commonjs/transaction/transaction.js +7 -40
  40. package/lib.commonjs/transaction/transaction.js.map +1 -1
  41. package/lib.commonjs/wallet/json-keystore.d.ts.map +1 -1
  42. package/lib.commonjs/wallet/json-keystore.js +7 -7
  43. package/lib.commonjs/wallet/json-keystore.js.map +1 -1
  44. package/lib.commonjs/wallet/wallet.d.ts.map +1 -1
  45. package/lib.commonjs/wallet/wallet.js +2 -2
  46. package/lib.commonjs/wallet/wallet.js.map +1 -1
  47. package/lib.esm/README.md +16 -16
  48. package/lib.esm/_version.js +1 -1
  49. package/lib.esm/crypto/signature.d.ts +3 -76
  50. package/lib.esm/crypto/signature.d.ts.map +1 -1
  51. package/lib.esm/crypto/signature.js +16 -202
  52. package/lib.esm/crypto/signature.js.map +1 -1
  53. package/lib.esm/crypto/signing-key.d.ts +1 -1
  54. package/lib.esm/crypto/signing-key.d.ts.map +1 -1
  55. package/lib.esm/crypto/signing-key.js +20 -9
  56. package/lib.esm/crypto/signing-key.js.map +1 -1
  57. package/lib.esm/package.json +12 -12
  58. package/lib.esm/providers/provider-jsonrpc.d.ts +0 -1
  59. package/lib.esm/providers/provider-jsonrpc.d.ts.map +1 -1
  60. package/lib.esm/providers/provider-jsonrpc.js +0 -1
  61. package/lib.esm/providers/provider-jsonrpc.js.map +1 -1
  62. package/lib.esm/quantumcoin.d.ts +2 -0
  63. package/lib.esm/quantumcoin.d.ts.map +1 -1
  64. package/lib.esm/quantumcoin.js +6 -0
  65. package/lib.esm/quantumcoin.js.map +1 -1
  66. package/lib.esm/transaction/address.d.ts.map +1 -1
  67. package/lib.esm/transaction/address.js +8 -2
  68. package/lib.esm/transaction/address.js.map +1 -1
  69. package/lib.esm/transaction/transaction.d.ts.map +1 -1
  70. package/lib.esm/transaction/transaction.js +7 -40
  71. package/lib.esm/transaction/transaction.js.map +1 -1
  72. package/lib.esm/wallet/json-keystore.d.ts.map +1 -1
  73. package/lib.esm/wallet/json-keystore.js +11 -5
  74. package/lib.esm/wallet/json-keystore.js.map +1 -1
  75. package/lib.esm/wallet/wallet.d.ts.map +1 -1
  76. package/lib.esm/wallet/wallet.js +3 -1
  77. package/lib.esm/wallet/wallet.js.map +1 -1
  78. package/package.json +6 -5
  79. package/rollup.config.mjs +50 -50
  80. package/src.ts/_version.ts +1 -1
  81. package/src.ts/abi/abi-coder.ts +237 -237
  82. package/src.ts/abi/bytes32.ts +45 -45
  83. package/src.ts/abi/coders/abstract-coder.ts +541 -541
  84. package/src.ts/abi/coders/address.ts +36 -36
  85. package/src.ts/abi/coders/anonymous.ts +29 -29
  86. package/src.ts/abi/coders/array.ts +199 -199
  87. package/src.ts/abi/coders/boolean.ts +27 -27
  88. package/src.ts/abi/coders/bytes.ts +43 -43
  89. package/src.ts/abi/coders/fixed-bytes.ts +37 -37
  90. package/src.ts/abi/coders/null.ts +28 -28
  91. package/src.ts/abi/coders/number.ts +63 -63
  92. package/src.ts/abi/coders/string.ts +29 -29
  93. package/src.ts/abi/coders/tuple.ts +69 -69
  94. package/src.ts/abi/fragments.ts +1617 -1617
  95. package/src.ts/abi/index.ts +41 -41
  96. package/src.ts/abi/interface.ts +1271 -1271
  97. package/src.ts/abi/typed.ts +796 -796
  98. package/src.ts/address/address.ts +148 -148
  99. package/src.ts/address/checks.ts +123 -123
  100. package/src.ts/address/contract-address.ts +80 -80
  101. package/src.ts/address/index.ts +57 -57
  102. package/src.ts/constants/addresses.ts +8 -8
  103. package/src.ts/constants/hashes.ts +7 -7
  104. package/src.ts/constants/index.ts +16 -16
  105. package/src.ts/constants/numbers.ts +35 -35
  106. package/src.ts/constants/strings.ts +16 -16
  107. package/src.ts/contract/contract.ts +1120 -1120
  108. package/src.ts/contract/factory.ts +143 -143
  109. package/src.ts/contract/index.ts +31 -31
  110. package/src.ts/contract/types.ts +236 -236
  111. package/src.ts/contract/wrappers.ts +225 -225
  112. package/src.ts/crypto/crypto-browser.ts +64 -64
  113. package/src.ts/crypto/crypto.ts +4 -4
  114. package/src.ts/crypto/hmac.ts +51 -51
  115. package/src.ts/crypto/index.ts +59 -59
  116. package/src.ts/crypto/keccak.ts +54 -54
  117. package/src.ts/crypto/pbkdf2.ts +55 -55
  118. package/src.ts/crypto/random.ts +36 -36
  119. package/src.ts/crypto/ripemd160.ts +43 -43
  120. package/src.ts/crypto/scrypt.ts +114 -114
  121. package/src.ts/crypto/sha2.ts +78 -78
  122. package/src.ts/crypto/signature.ts +145 -349
  123. package/src.ts/crypto/signing-key.ts +126 -118
  124. package/src.ts/hash/authorization.ts +38 -38
  125. package/src.ts/hash/id.ts +17 -17
  126. package/src.ts/hash/index.ts +18 -18
  127. package/src.ts/hash/message.ts +51 -51
  128. package/src.ts/hash/namehash.ts +101 -101
  129. package/src.ts/hash/solidity.ts +117 -117
  130. package/src.ts/hash/typed-data.ts +658 -658
  131. package/src.ts/index.ts +12 -12
  132. package/src.ts/providers/abstract-provider.ts +1761 -1761
  133. package/src.ts/providers/abstract-signer.ts +314 -314
  134. package/src.ts/providers/community.ts +49 -49
  135. package/src.ts/providers/contracts.ts +42 -42
  136. package/src.ts/providers/default-provider.ts +96 -96
  137. package/src.ts/providers/ens-resolver.ts +606 -606
  138. package/src.ts/providers/format.ts +320 -320
  139. package/src.ts/providers/formatting.ts +418 -418
  140. package/src.ts/providers/index.ts +125 -125
  141. package/src.ts/providers/network.ts +327 -327
  142. package/src.ts/providers/pagination.ts +8 -8
  143. package/src.ts/providers/plugin-fallback.ts +35 -35
  144. package/src.ts/providers/plugins-network.ts +281 -281
  145. package/src.ts/providers/provider-browser.ts +334 -334
  146. package/src.ts/providers/provider-fallback.ts +801 -801
  147. package/src.ts/providers/provider-ipcsocket-browser.ts +3 -3
  148. package/src.ts/providers/provider-ipcsocket.ts +81 -81
  149. package/src.ts/providers/provider-jsonrpc.ts +1334 -1335
  150. package/src.ts/providers/provider-socket.ts +352 -352
  151. package/src.ts/providers/provider-websocket.ts +103 -103
  152. package/src.ts/providers/provider.ts +2136 -2136
  153. package/src.ts/providers/signer-noncemanager.ts +98 -98
  154. package/src.ts/providers/signer.ts +166 -166
  155. package/src.ts/providers/subscriber-connection.ts +74 -74
  156. package/src.ts/providers/subscriber-filterid.ts +199 -199
  157. package/src.ts/providers/subscriber-polling.ts +321 -321
  158. package/src.ts/providers/ws-browser.ts +11 -11
  159. package/src.ts/providers/ws.ts +3 -3
  160. package/src.ts/quantumcoin.ts +219 -211
  161. package/src.ts/thirdparty.d.ts +16 -16
  162. package/src.ts/transaction/accesslist.ts +43 -43
  163. package/src.ts/transaction/address.ts +35 -31
  164. package/src.ts/transaction/authorization.ts +14 -14
  165. package/src.ts/transaction/index.ts +51 -51
  166. package/src.ts/transaction/transaction.ts +1349 -1379
  167. package/src.ts/utils/base58.ts +73 -73
  168. package/src.ts/utils/base64-browser.ts +25 -25
  169. package/src.ts/utils/base64.ts +56 -56
  170. package/src.ts/utils/data.ts +199 -199
  171. package/src.ts/utils/errors.ts +793 -793
  172. package/src.ts/utils/events.ts +105 -105
  173. package/src.ts/utils/fetch.ts +970 -970
  174. package/src.ts/utils/fixednumber.ts +643 -643
  175. package/src.ts/utils/geturl-browser.ts +81 -81
  176. package/src.ts/utils/geturl.ts +134 -134
  177. package/src.ts/utils/index.ts +95 -95
  178. package/src.ts/utils/maths.ts +240 -240
  179. package/src.ts/utils/properties.ts +60 -60
  180. package/src.ts/utils/rlp-decode.ts +104 -104
  181. package/src.ts/utils/rlp-encode.ts +64 -64
  182. package/src.ts/utils/rlp.ts +20 -20
  183. package/src.ts/utils/units.ts +91 -91
  184. package/src.ts/utils/utf8.ts +325 -325
  185. package/src.ts/utils/uuid.ts +36 -36
  186. package/src.ts/wallet/base-wallet.ts +160 -160
  187. package/src.ts/wallet/index.ts +32 -32
  188. package/src.ts/wallet/json-keystore.ts +108 -106
  189. package/src.ts/wallet/utils.ts +147 -147
  190. package/src.ts/wallet/wallet.ts +138 -139
  191. package/src.ts/wordlists/bit-reader.ts +35 -35
  192. package/src.ts/wordlists/decode-owl.ts +58 -58
  193. package/src.ts/wordlists/decode-owla.ts +33 -33
  194. package/src.ts/wordlists/generation/encode-latin.ts +370 -370
  195. package/src.ts/wordlists/index.ts +26 -26
  196. package/src.ts/wordlists/lang-cz.ts +33 -33
  197. package/src.ts/wordlists/lang-en.ts +33 -33
  198. package/src.ts/wordlists/lang-es.ts +35 -35
  199. package/src.ts/wordlists/lang-fr.ts +34 -34
  200. package/src.ts/wordlists/lang-it.ts +33 -33
  201. package/src.ts/wordlists/lang-ja.ts +181 -181
  202. package/src.ts/wordlists/lang-ko.ts +104 -104
  203. package/src.ts/wordlists/lang-pt.ts +34 -34
  204. package/src.ts/wordlists/lang-zh.ts +112 -112
  205. package/src.ts/wordlists/wordlist-owl.ts +77 -77
  206. package/src.ts/wordlists/wordlist-owla.ts +41 -41
  207. package/src.ts/wordlists/wordlist.ts +59 -59
  208. package/src.ts/wordlists/wordlists-browser.ts +8 -8
  209. package/src.ts/wordlists/wordlists-extra.ts +9 -9
  210. package/src.ts/wordlists/wordlists.ts +38 -38
  211. package/dist/quantumcoin.min.js'.gz' +0 -0
  212. package/dist/quantumcoin.umd.min.js'.gz' +0 -0
  213. package/dist/wordlists-extra.min.js'.gz' +0 -0
  214. package/lib.commonjs/providers/provider-alchemy.d.ts +0 -50
  215. package/lib.commonjs/providers/provider-alchemy.d.ts.map +0 -1
  216. package/lib.commonjs/providers/provider-alchemy.js +0 -151
  217. package/lib.commonjs/providers/provider-alchemy.js.map +0 -1
  218. package/lib.commonjs/providers/provider-ankr.d.ts +0 -61
  219. package/lib.commonjs/providers/provider-ankr.d.ts.map +0 -1
  220. package/lib.commonjs/providers/provider-ankr.js +0 -137
  221. package/lib.commonjs/providers/provider-ankr.js.map +0 -1
  222. package/lib.commonjs/providers/provider-blockscout.d.ts +0 -59
  223. package/lib.commonjs/providers/provider-blockscout.d.ts.map +0 -1
  224. package/lib.commonjs/providers/provider-blockscout.js +0 -145
  225. package/lib.commonjs/providers/provider-blockscout.js.map +0 -1
  226. package/lib.commonjs/providers/provider-chainstack.d.ts +0 -46
  227. package/lib.commonjs/providers/provider-chainstack.d.ts.map +0 -1
  228. package/lib.commonjs/providers/provider-chainstack.js +0 -102
  229. package/lib.commonjs/providers/provider-chainstack.js.map +0 -1
  230. package/lib.commonjs/providers/provider-cloudflare.d.ts +0 -14
  231. package/lib.commonjs/providers/provider-cloudflare.d.ts.map +0 -1
  232. package/lib.commonjs/providers/provider-cloudflare.js +0 -26
  233. package/lib.commonjs/providers/provider-cloudflare.js.map +0 -1
  234. package/lib.commonjs/providers/provider-etherscan.d.ts +0 -147
  235. package/lib.commonjs/providers/provider-etherscan.d.ts.map +0 -1
  236. package/lib.commonjs/providers/provider-etherscan.js +0 -587
  237. package/lib.commonjs/providers/provider-etherscan.js.map +0 -1
  238. package/lib.commonjs/providers/provider-infura.d.ts +0 -101
  239. package/lib.commonjs/providers/provider-infura.d.ts.map +0 -1
  240. package/lib.commonjs/providers/provider-infura.js +0 -206
  241. package/lib.commonjs/providers/provider-infura.js.map +0 -1
  242. package/lib.commonjs/providers/provider-pocket.d.ts +0 -54
  243. package/lib.commonjs/providers/provider-pocket.d.ts.map +0 -1
  244. package/lib.commonjs/providers/provider-pocket.js +0 -109
  245. package/lib.commonjs/providers/provider-pocket.js.map +0 -1
  246. package/lib.commonjs/providers/provider-quicknode.d.ts +0 -59
  247. package/lib.commonjs/providers/provider-quicknode.d.ts.map +0 -1
  248. package/lib.commonjs/providers/provider-quicknode.js +0 -163
  249. package/lib.commonjs/providers/provider-quicknode.js.map +0 -1
  250. package/lib.commonjs/wallet/hdwallet.d.ts +0 -248
  251. package/lib.commonjs/wallet/hdwallet.d.ts.map +0 -1
  252. package/lib.commonjs/wallet/hdwallet.js +0 -505
  253. package/lib.commonjs/wallet/hdwallet.js.map +0 -1
  254. package/lib.commonjs/wallet/json-crowdsale.d.ts +0 -27
  255. package/lib.commonjs/wallet/json-crowdsale.d.ts.map +0 -1
  256. package/lib.commonjs/wallet/json-crowdsale.js +0 -60
  257. package/lib.commonjs/wallet/json-crowdsale.js.map +0 -1
  258. package/lib.commonjs/wallet/mnemonic.d.ts +0 -65
  259. package/lib.commonjs/wallet/mnemonic.d.ts.map +0 -1
  260. package/lib.commonjs/wallet/mnemonic.js +0 -169
  261. package/lib.commonjs/wallet/mnemonic.js.map +0 -1
  262. package/lib.commonjs/wallet/seedwallet.d.ts +0 -4
  263. package/lib.commonjs/wallet/seedwallet.d.ts.map +0 -1
  264. package/lib.commonjs/wallet/seedwallet.js +0 -8
  265. package/lib.commonjs/wallet/seedwallet.js.map +0 -1
  266. package/lib.esm/providers/provider-alchemy.d.ts +0 -50
  267. package/lib.esm/providers/provider-alchemy.d.ts.map +0 -1
  268. package/lib.esm/providers/provider-alchemy.js +0 -147
  269. package/lib.esm/providers/provider-alchemy.js.map +0 -1
  270. package/lib.esm/providers/provider-ankr.d.ts +0 -61
  271. package/lib.esm/providers/provider-ankr.d.ts.map +0 -1
  272. package/lib.esm/providers/provider-ankr.js +0 -133
  273. package/lib.esm/providers/provider-ankr.js.map +0 -1
  274. package/lib.esm/providers/provider-blockscout.d.ts +0 -59
  275. package/lib.esm/providers/provider-blockscout.d.ts.map +0 -1
  276. package/lib.esm/providers/provider-blockscout.js +0 -141
  277. package/lib.esm/providers/provider-blockscout.js.map +0 -1
  278. package/lib.esm/providers/provider-chainstack.d.ts +0 -46
  279. package/lib.esm/providers/provider-chainstack.d.ts.map +0 -1
  280. package/lib.esm/providers/provider-chainstack.js +0 -98
  281. package/lib.esm/providers/provider-chainstack.js.map +0 -1
  282. package/lib.esm/providers/provider-cloudflare.d.ts +0 -14
  283. package/lib.esm/providers/provider-cloudflare.d.ts.map +0 -1
  284. package/lib.esm/providers/provider-cloudflare.js +0 -22
  285. package/lib.esm/providers/provider-cloudflare.js.map +0 -1
  286. package/lib.esm/providers/provider-etherscan.d.ts +0 -147
  287. package/lib.esm/providers/provider-etherscan.d.ts.map +0 -1
  288. package/lib.esm/providers/provider-etherscan.js +0 -584
  289. package/lib.esm/providers/provider-etherscan.js.map +0 -1
  290. package/lib.esm/providers/provider-infura.d.ts +0 -101
  291. package/lib.esm/providers/provider-infura.d.ts.map +0 -1
  292. package/lib.esm/providers/provider-infura.js +0 -201
  293. package/lib.esm/providers/provider-infura.js.map +0 -1
  294. package/lib.esm/providers/provider-pocket.d.ts +0 -54
  295. package/lib.esm/providers/provider-pocket.d.ts.map +0 -1
  296. package/lib.esm/providers/provider-pocket.js +0 -105
  297. package/lib.esm/providers/provider-pocket.js.map +0 -1
  298. package/lib.esm/providers/provider-quicknode.d.ts +0 -59
  299. package/lib.esm/providers/provider-quicknode.d.ts.map +0 -1
  300. package/lib.esm/providers/provider-quicknode.js +0 -159
  301. package/lib.esm/providers/provider-quicknode.js.map +0 -1
  302. package/lib.esm/wallet/hdwallet.d.ts +0 -248
  303. package/lib.esm/wallet/hdwallet.d.ts.map +0 -1
  304. package/lib.esm/wallet/hdwallet.js +0 -498
  305. package/lib.esm/wallet/hdwallet.js.map +0 -1
  306. package/lib.esm/wallet/json-crowdsale.d.ts +0 -27
  307. package/lib.esm/wallet/json-crowdsale.d.ts.map +0 -1
  308. package/lib.esm/wallet/json-crowdsale.js +0 -55
  309. package/lib.esm/wallet/json-crowdsale.js.map +0 -1
  310. package/lib.esm/wallet/mnemonic.d.ts +0 -65
  311. package/lib.esm/wallet/mnemonic.d.ts.map +0 -1
  312. package/lib.esm/wallet/mnemonic.js +0 -165
  313. package/lib.esm/wallet/mnemonic.js.map +0 -1
  314. package/lib.esm/wallet/seedwallet.d.ts +0 -4
  315. package/lib.esm/wallet/seedwallet.d.ts.map +0 -1
  316. package/lib.esm/wallet/seedwallet.js +0 -4
  317. package/lib.esm/wallet/seedwallet.js.map +0 -1
@@ -1,148 +1,148 @@
1
- import { keccak256 } from "../crypto/index.js";
2
- import { getBytes, assertArgument } from "../utils/index.js";
3
-
4
- const BN_0 = BigInt(0);
5
- const BN_36 = BigInt(36);
6
-
7
- function getChecksumAddress(address: string): string {
8
- // if (!isHexString(address, 32)) {
9
- // logger.throwArgumentError("invalid address", "address", address);
10
- // }
11
-
12
- address = address.toLowerCase();
13
-
14
- const chars = address.substring(2).split("");
15
-
16
- const expanded = new Uint8Array(64);
17
- for (let i = 0; i < 64; i++) {
18
- expanded[i] = chars[i].charCodeAt(0);
19
- }
20
-
21
- const hashed = getBytes(keccak256(expanded));
22
-
23
- for (let i = 0; i < 64; i += 2) {
24
- if ((hashed[i >> 1] >> 4) >= 8) {
25
- chars[i] = chars[i].toUpperCase();
26
- }
27
- if ((hashed[i >> 1] & 0x0f) >= 8) {
28
- chars[i + 1] = chars[i + 1].toUpperCase();
29
- }
30
- }
31
-
32
- return "0x" + chars.join("");
33
- }
34
-
35
- // See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
36
-
37
- // Create lookup table
38
- const ibanLookup: { [character: string]: string } = { };
39
- for (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }
40
- for (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }
41
-
42
- // How many decimal digits can we process? (for 64-bit float, this is 15)
43
- // i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));
44
- const safeDigits = 15;
45
-
46
- function ibanChecksum(address: string): string {
47
- address = address.toUpperCase();
48
- address = address.substring(4) + address.substring(0, 2) + "00";
49
-
50
- let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join("");
51
-
52
- // Javascript can handle integers safely up to 15 (decimal) digits
53
- while (expanded.length >= safeDigits){
54
- let block = expanded.substring(0, safeDigits);
55
- expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
56
- }
57
-
58
- let checksum = String(98 - (parseInt(expanded, 10) % 97));
59
- while (checksum.length < 2) { checksum = "0" + checksum; }
60
-
61
- return checksum;
62
- };
63
-
64
- const Base36 = (function() {;
65
- const result: Record<string, bigint> = { };
66
- for (let i = 0; i < 36; i++) {
67
- const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i];
68
- result[key] = BigInt(i);
69
- }
70
- return result;
71
- })();
72
-
73
- function fromBase36(value: string): bigint {
74
- value = value.toLowerCase();
75
-
76
- let result = BN_0;
77
- for (let i = 0; i < value.length; i++) {
78
- result = result * BN_36 + Base36[value[i]];
79
- }
80
- return result;
81
- }
82
-
83
- /**
84
- * Returns a normalized and checksumed address for %%address%%.
85
- * This accepts non-checksum addresses, checksum addresses formats.
86
- *
87
- * The checksum in Ethereum uses the capitalization (upper-case
88
- * vs lower-case) of the characters within an address to encode
89
- * its checksum, which offers, on average, a checksum of 15-bits.
90
- *
91
- * If %%address%% contains both upper-case and lower-case, it is
92
- * assumed to already be a checksum address and its checksum is
93
- * validated, and if the address fails its expected checksum an
94
- * error is thrown.
95
- *
96
- * If you wish the checksum of %%address%% to be ignore, it should
97
- * be converted to lower-case (i.e. ``.toLowercase()``) before
98
- * being passed in. This should be a very rare situation though,
99
- * that you wish to bypass the safegaurds in place to protect
100
- * against an address that has been incorrectly copied from another
101
- * source.
102
- *
103
- * @example:
104
- * // Adds the checksum (via upper-casing specific letters)
105
- * getAddress("0x8ba1f109551bd432803012645ac136ddd64dba72")
106
- * //_result:
107
- *
108
- * // Converts ICAP address and adds checksum
109
- * getAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36");
110
- * //_result:
111
- *
112
- * // Throws an error if an address contains mixed case,
113
- * // but the checksum fails
114
- * getAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72")
115
- * //_error:
116
- */
117
- export function getAddress(address: string): string {
118
-
119
- assertArgument(typeof(address) === "string", "invalid address", "address", address);
120
-
121
- if (address.match(/^(0x)?[0-9a-fA-F]{64}$/)) {
122
-
123
- // Missing the 0x prefix
124
- if (!address.startsWith("0x")) { address = "0x" + address; }
125
-
126
- const result = getChecksumAddress(address);
127
-
128
- // It is a checksummed address with a bad checksum
129
- assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address,
130
- "bad address checksum", "address", address);
131
-
132
- return result;
133
- }
134
-
135
- // Maybe ICAP? (we only support direct mode)
136
- if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
137
- // It is an ICAP address with a bad checksum
138
- assertArgument(address.substring(2, 4) === ibanChecksum(address), "bad icap checksum", "address", address);
139
-
140
- let result = fromBase36(address.substring(4)).toString(16);
141
- while (result.length < 64) { result = "0" + result; }
142
- return getChecksumAddress("0x" + result);
143
- }
144
-
145
- assertArgument(false, "invalid address", "address", address);
146
- }
147
-
148
-
1
+ import { keccak256 } from "../crypto/index.js";
2
+ import { getBytes, assertArgument } from "../utils/index.js";
3
+
4
+ const BN_0 = BigInt(0);
5
+ const BN_36 = BigInt(36);
6
+
7
+ function getChecksumAddress(address: string): string {
8
+ // if (!isHexString(address, 32)) {
9
+ // logger.throwArgumentError("invalid address", "address", address);
10
+ // }
11
+
12
+ address = address.toLowerCase();
13
+
14
+ const chars = address.substring(2).split("");
15
+
16
+ const expanded = new Uint8Array(64);
17
+ for (let i = 0; i < 64; i++) {
18
+ expanded[i] = chars[i].charCodeAt(0);
19
+ }
20
+
21
+ const hashed = getBytes(keccak256(expanded));
22
+
23
+ for (let i = 0; i < 64; i += 2) {
24
+ if ((hashed[i >> 1] >> 4) >= 8) {
25
+ chars[i] = chars[i].toUpperCase();
26
+ }
27
+ if ((hashed[i >> 1] & 0x0f) >= 8) {
28
+ chars[i + 1] = chars[i + 1].toUpperCase();
29
+ }
30
+ }
31
+
32
+ return "0x" + chars.join("");
33
+ }
34
+
35
+ // See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
36
+
37
+ // Create lookup table
38
+ const ibanLookup: { [character: string]: string } = { };
39
+ for (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }
40
+ for (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }
41
+
42
+ // How many decimal digits can we process? (for 64-bit float, this is 15)
43
+ // i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));
44
+ const safeDigits = 15;
45
+
46
+ function ibanChecksum(address: string): string {
47
+ address = address.toUpperCase();
48
+ address = address.substring(4) + address.substring(0, 2) + "00";
49
+
50
+ let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join("");
51
+
52
+ // Javascript can handle integers safely up to 15 (decimal) digits
53
+ while (expanded.length >= safeDigits){
54
+ let block = expanded.substring(0, safeDigits);
55
+ expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
56
+ }
57
+
58
+ let checksum = String(98 - (parseInt(expanded, 10) % 97));
59
+ while (checksum.length < 2) { checksum = "0" + checksum; }
60
+
61
+ return checksum;
62
+ };
63
+
64
+ const Base36 = (function() {;
65
+ const result: Record<string, bigint> = { };
66
+ for (let i = 0; i < 36; i++) {
67
+ const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i];
68
+ result[key] = BigInt(i);
69
+ }
70
+ return result;
71
+ })();
72
+
73
+ function fromBase36(value: string): bigint {
74
+ value = value.toLowerCase();
75
+
76
+ let result = BN_0;
77
+ for (let i = 0; i < value.length; i++) {
78
+ result = result * BN_36 + Base36[value[i]];
79
+ }
80
+ return result;
81
+ }
82
+
83
+ /**
84
+ * Returns a normalized and checksumed address for %%address%%.
85
+ * This accepts non-checksum addresses, checksum addresses formats.
86
+ *
87
+ * The checksum in Ethereum uses the capitalization (upper-case
88
+ * vs lower-case) of the characters within an address to encode
89
+ * its checksum, which offers, on average, a checksum of 15-bits.
90
+ *
91
+ * If %%address%% contains both upper-case and lower-case, it is
92
+ * assumed to already be a checksum address and its checksum is
93
+ * validated, and if the address fails its expected checksum an
94
+ * error is thrown.
95
+ *
96
+ * If you wish the checksum of %%address%% to be ignore, it should
97
+ * be converted to lower-case (i.e. ``.toLowercase()``) before
98
+ * being passed in. This should be a very rare situation though,
99
+ * that you wish to bypass the safegaurds in place to protect
100
+ * against an address that has been incorrectly copied from another
101
+ * source.
102
+ *
103
+ * @example:
104
+ * // Adds the checksum (via upper-casing specific letters)
105
+ * getAddress("0x8ba1f109551bd432803012645ac136ddd64dba72")
106
+ * //_result:
107
+ *
108
+ * // Converts ICAP address and adds checksum
109
+ * getAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36");
110
+ * //_result:
111
+ *
112
+ * // Throws an error if an address contains mixed case,
113
+ * // but the checksum fails
114
+ * getAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72")
115
+ * //_error:
116
+ */
117
+ export function getAddress(address: string): string {
118
+
119
+ assertArgument(typeof(address) === "string", "invalid address", "address", address);
120
+
121
+ if (address.match(/^(0x)?[0-9a-fA-F]{64}$/)) {
122
+
123
+ // Missing the 0x prefix
124
+ if (!address.startsWith("0x")) { address = "0x" + address; }
125
+
126
+ const result = getChecksumAddress(address);
127
+
128
+ // It is a checksummed address with a bad checksum
129
+ assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address,
130
+ "bad address checksum", "address", address);
131
+
132
+ return result;
133
+ }
134
+
135
+ // Maybe ICAP? (we only support direct mode)
136
+ if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
137
+ // It is an ICAP address with a bad checksum
138
+ assertArgument(address.substring(2, 4) === ibanChecksum(address), "bad icap checksum", "address", address);
139
+
140
+ let result = fromBase36(address.substring(4)).toString(16);
141
+ while (result.length < 64) { result = "0" + result; }
142
+ return getChecksumAddress("0x" + result);
143
+ }
144
+
145
+ assertArgument(false, "invalid address", "address", address);
146
+ }
147
+
148
+
@@ -1,123 +1,123 @@
1
- import { assert, assertArgument } from "../utils/index.js";
2
-
3
- import { getAddress } from "./address.js";
4
-
5
- import type { Addressable, AddressLike, NameResolver } from "./index.js";
6
-
7
-
8
- /**
9
- * Returns true if %%value%% is an object which implements the
10
- * [[Addressable]] interface.
11
- *
12
- * @example:
13
- * // Wallets and AbstractSigner sub-classes
14
- * isAddressable(Wallet.createRandom())
15
- * //_result:
16
- *
17
- * // Contracts
18
- * contract = new Contract("dai.tokens.ethers.eth", [ ], provider)
19
- * isAddressable(contract)
20
- * //_result:
21
- */
22
- export function isAddressable(value: any): value is Addressable {
23
- return (value && typeof(value.getAddress) === "function");
24
- }
25
-
26
- /**
27
- * Returns true if %%value%% is a valid address.
28
- *
29
- * @example:
30
- * // Valid address
31
- * isAddress("0x8ba1f109551bD432803012645Ac136ddd64DBA72")
32
- * //_result:
33
- *
34
- * // Valid ICAP address
35
- * isAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36")
36
- * //_result:
37
- *
38
- * // Invalid checksum
39
- * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBa72")
40
- * //_result:
41
- *
42
- * // Invalid ICAP checksum
43
- * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72")
44
- * //_result:
45
- *
46
- * // Not an address (an ENS name requires a provided and an
47
- * // asynchronous API to access)
48
- * isAddress("ricmoo.eth")
49
- * //_result:
50
- */
51
- export function isAddress(value: any): value is string {
52
- try {
53
- getAddress(value);
54
- return true;
55
- } catch (error) { }
56
- return false;
57
- }
58
-
59
- async function checkAddress(target: any, promise: Promise<null | string>): Promise<string> {
60
- const result = await promise;
61
- if (result == null || result === "0x0000000000000000000000000000000000000000") {
62
- assert(typeof(target) !== "string", "unconfigured name", "UNCONFIGURED_NAME", { value: target });
63
- assertArgument(false, "invalid AddressLike value; did not resolve to a value address", "target", target);
64
- }
65
- return getAddress(result);
66
- }
67
-
68
- /**
69
- * Resolves to an address for the %%target%%, which may be any
70
- * supported address type, an [[Addressable]] or a Promise which
71
- * resolves to an address.
72
- *
73
- * If an ENS name is provided, but that name has not been correctly
74
- * configured a [[UnconfiguredNameError]] is thrown.
75
- *
76
- * @example:
77
- * addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F"
78
- *
79
- * // Addresses are return synchronously
80
- * resolveAddress(addr, provider)
81
- * //_result:
82
- *
83
- * // Address promises are resolved asynchronously
84
- * resolveAddress(Promise.resolve(addr))
85
- * //_result:
86
- *
87
- * // ENS names are resolved asynchronously
88
- * resolveAddress("dai.tokens.ethers.eth", provider)
89
- * //_result:
90
- *
91
- * // Addressable objects are resolved asynchronously
92
- * contract = new Contract(addr, [ ])
93
- * resolveAddress(contract, provider)
94
- * //_result:
95
- *
96
- * // Unconfigured ENS names reject
97
- * resolveAddress("nothing-here.ricmoo.eth", provider)
98
- * //_error:
99
- *
100
- * // ENS names require a NameResolver object passed in
101
- * // (notice the provider was omitted)
102
- * resolveAddress("nothing-here.ricmoo.eth")
103
- * //_error:
104
- */
105
- export function resolveAddress(target: AddressLike, resolver?: null | NameResolver): string | Promise<string> {
106
-
107
- if (typeof(target) === "string") {
108
- if (target.match(/^0x[0-9a-f]{64}$/i)) { return getAddress(target); }
109
-
110
- assert(resolver != null, "ENS resolution requires a provider",
111
- "UNSUPPORTED_OPERATION", { operation: "resolveName" });
112
-
113
- return checkAddress(target, resolver.resolveName(target));
114
-
115
- } else if (isAddressable(target)) {
116
- return checkAddress(target, target.getAddress());
117
-
118
- } else if (target && typeof(target.then) === "function") {
119
- return checkAddress(target, target);
120
- }
121
-
122
- assertArgument(false, "unsupported addressable value", "target", target);
123
- }
1
+ import { assert, assertArgument } from "../utils/index.js";
2
+
3
+ import { getAddress } from "./address.js";
4
+
5
+ import type { Addressable, AddressLike, NameResolver } from "./index.js";
6
+
7
+
8
+ /**
9
+ * Returns true if %%value%% is an object which implements the
10
+ * [[Addressable]] interface.
11
+ *
12
+ * @example:
13
+ * // Wallets and AbstractSigner sub-classes
14
+ * isAddressable(Wallet.createRandom())
15
+ * //_result:
16
+ *
17
+ * // Contracts
18
+ * contract = new Contract("dai.tokens.ethers.eth", [ ], provider)
19
+ * isAddressable(contract)
20
+ * //_result:
21
+ */
22
+ export function isAddressable(value: any): value is Addressable {
23
+ return (value && typeof(value.getAddress) === "function");
24
+ }
25
+
26
+ /**
27
+ * Returns true if %%value%% is a valid address.
28
+ *
29
+ * @example:
30
+ * // Valid address
31
+ * isAddress("0x8ba1f109551bD432803012645Ac136ddd64DBA72")
32
+ * //_result:
33
+ *
34
+ * // Valid ICAP address
35
+ * isAddress("XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36")
36
+ * //_result:
37
+ *
38
+ * // Invalid checksum
39
+ * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBa72")
40
+ * //_result:
41
+ *
42
+ * // Invalid ICAP checksum
43
+ * isAddress("0x8Ba1f109551bD432803012645Ac136ddd64DBA72")
44
+ * //_result:
45
+ *
46
+ * // Not an address (an ENS name requires a provided and an
47
+ * // asynchronous API to access)
48
+ * isAddress("ricmoo.eth")
49
+ * //_result:
50
+ */
51
+ export function isAddress(value: any): value is string {
52
+ try {
53
+ getAddress(value);
54
+ return true;
55
+ } catch (error) { }
56
+ return false;
57
+ }
58
+
59
+ async function checkAddress(target: any, promise: Promise<null | string>): Promise<string> {
60
+ const result = await promise;
61
+ if (result == null || result === "0x0000000000000000000000000000000000000000") {
62
+ assert(typeof(target) !== "string", "unconfigured name", "UNCONFIGURED_NAME", { value: target });
63
+ assertArgument(false, "invalid AddressLike value; did not resolve to a value address", "target", target);
64
+ }
65
+ return getAddress(result);
66
+ }
67
+
68
+ /**
69
+ * Resolves to an address for the %%target%%, which may be any
70
+ * supported address type, an [[Addressable]] or a Promise which
71
+ * resolves to an address.
72
+ *
73
+ * If an ENS name is provided, but that name has not been correctly
74
+ * configured a [[UnconfiguredNameError]] is thrown.
75
+ *
76
+ * @example:
77
+ * addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F"
78
+ *
79
+ * // Addresses are return synchronously
80
+ * resolveAddress(addr, provider)
81
+ * //_result:
82
+ *
83
+ * // Address promises are resolved asynchronously
84
+ * resolveAddress(Promise.resolve(addr))
85
+ * //_result:
86
+ *
87
+ * // ENS names are resolved asynchronously
88
+ * resolveAddress("dai.tokens.ethers.eth", provider)
89
+ * //_result:
90
+ *
91
+ * // Addressable objects are resolved asynchronously
92
+ * contract = new Contract(addr, [ ])
93
+ * resolveAddress(contract, provider)
94
+ * //_result:
95
+ *
96
+ * // Unconfigured ENS names reject
97
+ * resolveAddress("nothing-here.ricmoo.eth", provider)
98
+ * //_error:
99
+ *
100
+ * // ENS names require a NameResolver object passed in
101
+ * // (notice the provider was omitted)
102
+ * resolveAddress("nothing-here.ricmoo.eth")
103
+ * //_error:
104
+ */
105
+ export function resolveAddress(target: AddressLike, resolver?: null | NameResolver): string | Promise<string> {
106
+
107
+ if (typeof(target) === "string") {
108
+ if (target.match(/^0x[0-9a-f]{64}$/i)) { return getAddress(target); }
109
+
110
+ assert(resolver != null, "ENS resolution requires a provider",
111
+ "UNSUPPORTED_OPERATION", { operation: "resolveName" });
112
+
113
+ return checkAddress(target, resolver.resolveName(target));
114
+
115
+ } else if (isAddressable(target)) {
116
+ return checkAddress(target, target.getAddress());
117
+
118
+ } else if (target && typeof(target.then) === "function") {
119
+ return checkAddress(target, target);
120
+ }
121
+
122
+ assertArgument(false, "unsupported addressable value", "target", target);
123
+ }