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,321 +1,321 @@
1
- import { assert, isHexString } from "../utils/index.js";
2
-
3
- import type { AbstractProvider, Subscriber } from "./abstract-provider.js";
4
- import type { EventFilter, OrphanFilter, ProviderEvent } from "./provider.js";
5
-
6
- function copy(obj: any): any {
7
- return JSON.parse(JSON.stringify(obj));
8
- }
9
-
10
- /**
11
- * Return the polling subscriber for common events.
12
- *
13
- * @_docloc: api/providers/abstract-provider
14
- */
15
- export function getPollingSubscriber(provider: AbstractProvider, event: ProviderEvent): Subscriber {
16
- if (event === "block") { return new PollingBlockSubscriber(provider); }
17
- if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); }
18
-
19
- assert(false, "unsupported polling event", "UNSUPPORTED_OPERATION", {
20
- operation: "getPollingSubscriber", info: { event }
21
- });
22
- }
23
-
24
- // @TODO: refactor this
25
-
26
- /**
27
- * A **PollingBlockSubscriber** polls at a regular interval for a change
28
- * in the block number.
29
- *
30
- * @_docloc: api/providers/abstract-provider
31
- */
32
- export class PollingBlockSubscriber implements Subscriber {
33
- #provider: AbstractProvider;
34
- #poller: null | number;
35
-
36
- #interval: number;
37
-
38
- // The most recent block we have scanned for events. The value -2
39
- // indicates we still need to fetch an initial block number
40
- #blockNumber: number;
41
-
42
- /**
43
- * Create a new **PollingBlockSubscriber** attached to %%provider%%.
44
- */
45
- constructor(provider: AbstractProvider) {
46
- this.#provider = provider;
47
- this.#poller = null;
48
- this.#interval = 4000;
49
-
50
- this.#blockNumber = -2;
51
- }
52
-
53
- /**
54
- * The polling interval.
55
- */
56
- get pollingInterval(): number { return this.#interval; }
57
- set pollingInterval(value: number) { this.#interval = value; }
58
-
59
- async #poll(): Promise<void> {
60
- try {
61
- const blockNumber = await this.#provider.getBlockNumber();
62
-
63
- // Bootstrap poll to setup our initial block number
64
- if (this.#blockNumber === -2) {
65
- this.#blockNumber = blockNumber;
66
- return;
67
- }
68
-
69
- // @TODO: Put a cap on the maximum number of events per loop?
70
-
71
- if (blockNumber !== this.#blockNumber) {
72
- for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {
73
- // We have been stopped
74
- if (this.#poller == null) { return; }
75
-
76
- await this.#provider.emit("block", b);
77
- }
78
-
79
- this.#blockNumber = blockNumber;
80
- }
81
-
82
- } catch (error) {
83
- // @TODO: Minor bump, add an "error" event to let subscribers
84
- // know things went awry.
85
- //console.log(error);
86
- }
87
-
88
- // We have been stopped
89
- if (this.#poller == null) { return; }
90
-
91
- this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
92
- }
93
-
94
- start(): void {
95
- if (this.#poller) { return; }
96
- this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
97
- this.#poll();
98
- }
99
-
100
- stop(): void {
101
- if (!this.#poller) { return; }
102
- this.#provider._clearTimeout(this.#poller);
103
- this.#poller = null;
104
- }
105
-
106
- pause(dropWhilePaused?: boolean): void {
107
- this.stop();
108
- if (dropWhilePaused) { this.#blockNumber = -2; }
109
- }
110
-
111
- resume(): void {
112
- this.start();
113
- }
114
- }
115
-
116
-
117
- /**
118
- * An **OnBlockSubscriber** can be sub-classed, with a [[_poll]]
119
- * implmentation which will be called on every new block.
120
- *
121
- * @_docloc: api/providers/abstract-provider
122
- */
123
- export class OnBlockSubscriber implements Subscriber {
124
- #provider: AbstractProvider;
125
- #poll: (b: number) => void;
126
- #running: boolean;
127
-
128
- /**
129
- * Create a new **OnBlockSubscriber** attached to %%provider%%.
130
- */
131
- constructor(provider: AbstractProvider) {
132
- this.#provider = provider;
133
- this.#running = false;
134
- this.#poll = (blockNumber: number) => {
135
- this._poll(blockNumber, this.#provider);
136
- }
137
- }
138
-
139
- /**
140
- * Called on every new block.
141
- */
142
- async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
143
- throw new Error("sub-classes must override this");
144
- }
145
-
146
- start(): void {
147
- if (this.#running) { return; }
148
- this.#running = true;
149
-
150
- this.#poll(-2);
151
- this.#provider.on("block", this.#poll);
152
- }
153
-
154
- stop(): void {
155
- if (!this.#running) { return; }
156
- this.#running = false;
157
-
158
- this.#provider.off("block", this.#poll);
159
- }
160
-
161
- pause(dropWhilePaused?: boolean): void { this.stop(); }
162
- resume(): void { this.start(); }
163
- }
164
-
165
- export class PollingBlockTagSubscriber extends OnBlockSubscriber {
166
- readonly #tag: string;
167
- #lastBlock: number;
168
-
169
- constructor(provider: AbstractProvider, tag: string) {
170
- super(provider);
171
- this.#tag = tag;
172
- this.#lastBlock = -2;
173
- }
174
-
175
- pause(dropWhilePaused?: boolean): void {
176
- if (dropWhilePaused) { this.#lastBlock = -2; }
177
- super.pause(dropWhilePaused);
178
- }
179
-
180
- async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
181
- const block = await provider.getBlock(this.#tag);
182
- if (block == null) { return; }
183
-
184
- if (this.#lastBlock === -2) {
185
- this.#lastBlock = block.number;
186
- } else if (block.number > this.#lastBlock) {
187
- provider.emit(this.#tag, block.number);
188
- this.#lastBlock = block.number;
189
- }
190
- }
191
- }
192
-
193
-
194
- /**
195
- * @_ignore:
196
- *
197
- * @_docloc: api/providers/abstract-provider
198
- */
199
- export class PollingOrphanSubscriber extends OnBlockSubscriber {
200
- #filter: OrphanFilter;
201
-
202
- constructor(provider: AbstractProvider, filter: OrphanFilter) {
203
- super(provider);
204
- this.#filter = copy(filter);
205
- }
206
-
207
- async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
208
- throw new Error("@TODO");
209
- console.log(this.#filter);
210
- }
211
- }
212
-
213
- /**
214
- * A **PollingTransactionSubscriber** will poll for a given transaction
215
- * hash for its receipt.
216
- *
217
- * @_docloc: api/providers/abstract-provider
218
- */
219
- export class PollingTransactionSubscriber extends OnBlockSubscriber {
220
- #hash: string;
221
-
222
- /**
223
- * Create a new **PollingTransactionSubscriber** attached to
224
- * %%provider%%, listening for %%hash%%.
225
- */
226
- constructor(provider: AbstractProvider, hash: string) {
227
- super(provider);
228
- this.#hash = hash;
229
- }
230
-
231
- async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
232
- const tx = await provider.getTransactionReceipt(this.#hash);
233
- if (tx) { provider.emit(this.#hash, tx); }
234
- }
235
- }
236
-
237
- /**
238
- * A **PollingEventSubscriber** will poll for a given filter for its logs.
239
- *
240
- * @_docloc: api/providers/abstract-provider
241
- */
242
- export class PollingEventSubscriber implements Subscriber {
243
- #provider: AbstractProvider;
244
- #filter: EventFilter;
245
- #poller: (b: number) => void;
246
-
247
- #running: boolean;
248
-
249
- // The most recent block we have scanned for events. The value -2
250
- // indicates we still need to fetch an initial block number
251
- #blockNumber: number;
252
-
253
- /**
254
- * Create a new **PollingTransactionSubscriber** attached to
255
- * %%provider%%, listening for %%filter%%.
256
- */
257
- constructor(provider: AbstractProvider, filter: EventFilter) {
258
- this.#provider = provider;
259
- this.#filter = copy(filter);
260
- this.#poller = this.#poll.bind(this);
261
- this.#running = false;
262
- this.#blockNumber = -2;
263
- }
264
-
265
- async #poll(blockNumber: number): Promise<void> {
266
- // The initial block hasn't been determined yet
267
- if (this.#blockNumber === -2) { return; }
268
-
269
- const filter = copy(this.#filter);
270
- filter.fromBlock = this.#blockNumber + 1;
271
- filter.toBlock = blockNumber;
272
-
273
- const logs = await this.#provider.getLogs(filter);
274
-
275
- // No logs could just mean the node has not indexed them yet,
276
- // so we keep a sliding window of 60 blocks to keep scanning
277
- if (logs.length === 0) {
278
- if (this.#blockNumber < blockNumber - 60) {
279
- this.#blockNumber = blockNumber - 60;
280
- }
281
- return;
282
- }
283
-
284
- for (const log of logs) {
285
- this.#provider.emit(this.#filter, log);
286
-
287
- // Only advance the block number when logs were found to
288
- // account for networks (like BNB and Polygon) which may
289
- // sacrifice event consistency for block event speed
290
- this.#blockNumber = log.blockNumber;
291
- }
292
- }
293
-
294
- start(): void {
295
- if (this.#running) { return; }
296
- this.#running = true;
297
-
298
- if (this.#blockNumber === -2) {
299
- this.#provider.getBlockNumber().then((blockNumber) => {
300
- this.#blockNumber = blockNumber;
301
- });
302
- }
303
- this.#provider.on("block", this.#poller);
304
- }
305
-
306
- stop(): void {
307
- if (!this.#running) { return; }
308
- this.#running = false;
309
-
310
- this.#provider.off("block", this.#poller);
311
- }
312
-
313
- pause(dropWhilePaused?: boolean): void {
314
- this.stop();
315
- if (dropWhilePaused) { this.#blockNumber = -2; }
316
- }
317
-
318
- resume(): void {
319
- this.start();
320
- }
321
- }
1
+ import { assert, isHexString } from "../utils/index.js";
2
+
3
+ import type { AbstractProvider, Subscriber } from "./abstract-provider.js";
4
+ import type { EventFilter, OrphanFilter, ProviderEvent } from "./provider.js";
5
+
6
+ function copy(obj: any): any {
7
+ return JSON.parse(JSON.stringify(obj));
8
+ }
9
+
10
+ /**
11
+ * Return the polling subscriber for common events.
12
+ *
13
+ * @_docloc: api/providers/abstract-provider
14
+ */
15
+ export function getPollingSubscriber(provider: AbstractProvider, event: ProviderEvent): Subscriber {
16
+ if (event === "block") { return new PollingBlockSubscriber(provider); }
17
+ if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); }
18
+
19
+ assert(false, "unsupported polling event", "UNSUPPORTED_OPERATION", {
20
+ operation: "getPollingSubscriber", info: { event }
21
+ });
22
+ }
23
+
24
+ // @TODO: refactor this
25
+
26
+ /**
27
+ * A **PollingBlockSubscriber** polls at a regular interval for a change
28
+ * in the block number.
29
+ *
30
+ * @_docloc: api/providers/abstract-provider
31
+ */
32
+ export class PollingBlockSubscriber implements Subscriber {
33
+ #provider: AbstractProvider;
34
+ #poller: null | number;
35
+
36
+ #interval: number;
37
+
38
+ // The most recent block we have scanned for events. The value -2
39
+ // indicates we still need to fetch an initial block number
40
+ #blockNumber: number;
41
+
42
+ /**
43
+ * Create a new **PollingBlockSubscriber** attached to %%provider%%.
44
+ */
45
+ constructor(provider: AbstractProvider) {
46
+ this.#provider = provider;
47
+ this.#poller = null;
48
+ this.#interval = 4000;
49
+
50
+ this.#blockNumber = -2;
51
+ }
52
+
53
+ /**
54
+ * The polling interval.
55
+ */
56
+ get pollingInterval(): number { return this.#interval; }
57
+ set pollingInterval(value: number) { this.#interval = value; }
58
+
59
+ async #poll(): Promise<void> {
60
+ try {
61
+ const blockNumber = await this.#provider.getBlockNumber();
62
+
63
+ // Bootstrap poll to setup our initial block number
64
+ if (this.#blockNumber === -2) {
65
+ this.#blockNumber = blockNumber;
66
+ return;
67
+ }
68
+
69
+ // @TODO: Put a cap on the maximum number of events per loop?
70
+
71
+ if (blockNumber !== this.#blockNumber) {
72
+ for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {
73
+ // We have been stopped
74
+ if (this.#poller == null) { return; }
75
+
76
+ await this.#provider.emit("block", b);
77
+ }
78
+
79
+ this.#blockNumber = blockNumber;
80
+ }
81
+
82
+ } catch (error) {
83
+ // @TODO: Minor bump, add an "error" event to let subscribers
84
+ // know things went awry.
85
+ //console.log(error);
86
+ }
87
+
88
+ // We have been stopped
89
+ if (this.#poller == null) { return; }
90
+
91
+ this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
92
+ }
93
+
94
+ start(): void {
95
+ if (this.#poller) { return; }
96
+ this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
97
+ this.#poll();
98
+ }
99
+
100
+ stop(): void {
101
+ if (!this.#poller) { return; }
102
+ this.#provider._clearTimeout(this.#poller);
103
+ this.#poller = null;
104
+ }
105
+
106
+ pause(dropWhilePaused?: boolean): void {
107
+ this.stop();
108
+ if (dropWhilePaused) { this.#blockNumber = -2; }
109
+ }
110
+
111
+ resume(): void {
112
+ this.start();
113
+ }
114
+ }
115
+
116
+
117
+ /**
118
+ * An **OnBlockSubscriber** can be sub-classed, with a [[_poll]]
119
+ * implmentation which will be called on every new block.
120
+ *
121
+ * @_docloc: api/providers/abstract-provider
122
+ */
123
+ export class OnBlockSubscriber implements Subscriber {
124
+ #provider: AbstractProvider;
125
+ #poll: (b: number) => void;
126
+ #running: boolean;
127
+
128
+ /**
129
+ * Create a new **OnBlockSubscriber** attached to %%provider%%.
130
+ */
131
+ constructor(provider: AbstractProvider) {
132
+ this.#provider = provider;
133
+ this.#running = false;
134
+ this.#poll = (blockNumber: number) => {
135
+ this._poll(blockNumber, this.#provider);
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Called on every new block.
141
+ */
142
+ async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
143
+ throw new Error("sub-classes must override this");
144
+ }
145
+
146
+ start(): void {
147
+ if (this.#running) { return; }
148
+ this.#running = true;
149
+
150
+ this.#poll(-2);
151
+ this.#provider.on("block", this.#poll);
152
+ }
153
+
154
+ stop(): void {
155
+ if (!this.#running) { return; }
156
+ this.#running = false;
157
+
158
+ this.#provider.off("block", this.#poll);
159
+ }
160
+
161
+ pause(dropWhilePaused?: boolean): void { this.stop(); }
162
+ resume(): void { this.start(); }
163
+ }
164
+
165
+ export class PollingBlockTagSubscriber extends OnBlockSubscriber {
166
+ readonly #tag: string;
167
+ #lastBlock: number;
168
+
169
+ constructor(provider: AbstractProvider, tag: string) {
170
+ super(provider);
171
+ this.#tag = tag;
172
+ this.#lastBlock = -2;
173
+ }
174
+
175
+ pause(dropWhilePaused?: boolean): void {
176
+ if (dropWhilePaused) { this.#lastBlock = -2; }
177
+ super.pause(dropWhilePaused);
178
+ }
179
+
180
+ async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
181
+ const block = await provider.getBlock(this.#tag);
182
+ if (block == null) { return; }
183
+
184
+ if (this.#lastBlock === -2) {
185
+ this.#lastBlock = block.number;
186
+ } else if (block.number > this.#lastBlock) {
187
+ provider.emit(this.#tag, block.number);
188
+ this.#lastBlock = block.number;
189
+ }
190
+ }
191
+ }
192
+
193
+
194
+ /**
195
+ * @_ignore:
196
+ *
197
+ * @_docloc: api/providers/abstract-provider
198
+ */
199
+ export class PollingOrphanSubscriber extends OnBlockSubscriber {
200
+ #filter: OrphanFilter;
201
+
202
+ constructor(provider: AbstractProvider, filter: OrphanFilter) {
203
+ super(provider);
204
+ this.#filter = copy(filter);
205
+ }
206
+
207
+ async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
208
+ throw new Error("@TODO");
209
+ console.log(this.#filter);
210
+ }
211
+ }
212
+
213
+ /**
214
+ * A **PollingTransactionSubscriber** will poll for a given transaction
215
+ * hash for its receipt.
216
+ *
217
+ * @_docloc: api/providers/abstract-provider
218
+ */
219
+ export class PollingTransactionSubscriber extends OnBlockSubscriber {
220
+ #hash: string;
221
+
222
+ /**
223
+ * Create a new **PollingTransactionSubscriber** attached to
224
+ * %%provider%%, listening for %%hash%%.
225
+ */
226
+ constructor(provider: AbstractProvider, hash: string) {
227
+ super(provider);
228
+ this.#hash = hash;
229
+ }
230
+
231
+ async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {
232
+ const tx = await provider.getTransactionReceipt(this.#hash);
233
+ if (tx) { provider.emit(this.#hash, tx); }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * A **PollingEventSubscriber** will poll for a given filter for its logs.
239
+ *
240
+ * @_docloc: api/providers/abstract-provider
241
+ */
242
+ export class PollingEventSubscriber implements Subscriber {
243
+ #provider: AbstractProvider;
244
+ #filter: EventFilter;
245
+ #poller: (b: number) => void;
246
+
247
+ #running: boolean;
248
+
249
+ // The most recent block we have scanned for events. The value -2
250
+ // indicates we still need to fetch an initial block number
251
+ #blockNumber: number;
252
+
253
+ /**
254
+ * Create a new **PollingTransactionSubscriber** attached to
255
+ * %%provider%%, listening for %%filter%%.
256
+ */
257
+ constructor(provider: AbstractProvider, filter: EventFilter) {
258
+ this.#provider = provider;
259
+ this.#filter = copy(filter);
260
+ this.#poller = this.#poll.bind(this);
261
+ this.#running = false;
262
+ this.#blockNumber = -2;
263
+ }
264
+
265
+ async #poll(blockNumber: number): Promise<void> {
266
+ // The initial block hasn't been determined yet
267
+ if (this.#blockNumber === -2) { return; }
268
+
269
+ const filter = copy(this.#filter);
270
+ filter.fromBlock = this.#blockNumber + 1;
271
+ filter.toBlock = blockNumber;
272
+
273
+ const logs = await this.#provider.getLogs(filter);
274
+
275
+ // No logs could just mean the node has not indexed them yet,
276
+ // so we keep a sliding window of 60 blocks to keep scanning
277
+ if (logs.length === 0) {
278
+ if (this.#blockNumber < blockNumber - 60) {
279
+ this.#blockNumber = blockNumber - 60;
280
+ }
281
+ return;
282
+ }
283
+
284
+ for (const log of logs) {
285
+ this.#provider.emit(this.#filter, log);
286
+
287
+ // Only advance the block number when logs were found to
288
+ // account for networks (like BNB and Polygon) which may
289
+ // sacrifice event consistency for block event speed
290
+ this.#blockNumber = log.blockNumber;
291
+ }
292
+ }
293
+
294
+ start(): void {
295
+ if (this.#running) { return; }
296
+ this.#running = true;
297
+
298
+ if (this.#blockNumber === -2) {
299
+ this.#provider.getBlockNumber().then((blockNumber) => {
300
+ this.#blockNumber = blockNumber;
301
+ });
302
+ }
303
+ this.#provider.on("block", this.#poller);
304
+ }
305
+
306
+ stop(): void {
307
+ if (!this.#running) { return; }
308
+ this.#running = false;
309
+
310
+ this.#provider.off("block", this.#poller);
311
+ }
312
+
313
+ pause(dropWhilePaused?: boolean): void {
314
+ this.stop();
315
+ if (dropWhilePaused) { this.#blockNumber = -2; }
316
+ }
317
+
318
+ resume(): void {
319
+ this.start();
320
+ }
321
+ }
@@ -1,11 +1,11 @@
1
-
2
- function getGlobal(): any {
3
- if (typeof self !== 'undefined') { return self; }
4
- if (typeof window !== 'undefined') { return window; }
5
- if (typeof global !== 'undefined') { return global; }
6
- throw new Error('unable to locate global object');
7
- };
8
-
9
- const _WebSocket = getGlobal().WebSocket;
10
-
11
- export { _WebSocket as WebSocket };
1
+
2
+ function getGlobal(): any {
3
+ if (typeof self !== 'undefined') { return self; }
4
+ if (typeof window !== 'undefined') { return window; }
5
+ if (typeof global !== 'undefined') { return global; }
6
+ throw new Error('unable to locate global object');
7
+ };
8
+
9
+ const _WebSocket = getGlobal().WebSocket;
10
+
11
+ export { _WebSocket as WebSocket };
@@ -1,3 +1,3 @@
1
- export { WebSocket } from "ws";
2
-
3
-
1
+ export { WebSocket } from "ws";
2
+
3
+