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,352 +1,352 @@
1
- /**
2
- * Generic long-lived socket provider.
3
- *
4
- * Sub-classing notes
5
- * - a sub-class MUST call the `_start()` method once connected
6
- * - a sub-class MUST override the `_write(string)` method
7
- * - a sub-class MUST call `_processMessage(string)` for each message
8
- *
9
- * @_subsection: api/providers/abstract-provider:Socket Providers [about-socketProvider]
10
- */
11
-
12
- import { UnmanagedSubscriber } from "./abstract-provider.js";
13
- import { assert, assertArgument, makeError } from "../utils/index.js";
14
- import { JsonRpcApiProvider } from "./provider-jsonrpc.js";
15
-
16
- import type { Subscriber, Subscription } from "./abstract-provider.js";
17
- import type { EventFilter } from "./provider.js";
18
- import type {
19
- JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult
20
- } from "./provider-jsonrpc.js";
21
- import type { Networkish } from "./network.js";
22
-
23
-
24
- type JsonRpcSubscription = {
25
- method: string,
26
- params: {
27
- result: any,
28
- subscription: string
29
- }
30
- };
31
-
32
- /**
33
- * A **SocketSubscriber** uses a socket transport to handle events and
34
- * should use [[_emit]] to manage the events.
35
- */
36
- export class SocketSubscriber implements Subscriber {
37
- #provider: SocketProvider;
38
-
39
- #filter: string;
40
-
41
- /**
42
- * The filter.
43
- */
44
- get filter(): Array<any> { return JSON.parse(this.#filter); }
45
-
46
- #filterId: null | Promise<string |number>;
47
- #paused: null | boolean;
48
-
49
- #emitPromise: null | Promise<void>;
50
-
51
- /**
52
- * Creates a new **SocketSubscriber** attached to %%provider%% listening
53
- * to %%filter%%.
54
- */
55
- constructor(provider: SocketProvider, filter: Array<any>) {
56
- this.#provider = provider;
57
- this.#filter = JSON.stringify(filter);
58
- this.#filterId = null;
59
- this.#paused = null;
60
- this.#emitPromise = null;
61
- }
62
-
63
- start(): void {
64
- this.#filterId = this.#provider.send("eth_subscribe", this.filter).then((filterId) => {;
65
- this.#provider._register(filterId, this);
66
- return filterId;
67
- });
68
- }
69
-
70
- stop(): void {
71
- (<Promise<number>>(this.#filterId)).then((filterId) => {
72
- if (this.#provider.destroyed) { return; }
73
- this.#provider.send("eth_unsubscribe", [ filterId ]);
74
- });
75
- this.#filterId = null;
76
- }
77
-
78
- // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs
79
- // and resume
80
- pause(dropWhilePaused?: boolean): void {
81
- assert(dropWhilePaused, "preserve logs while paused not supported by SocketSubscriber yet",
82
- "UNSUPPORTED_OPERATION", { operation: "pause(false)" });
83
- this.#paused = !!dropWhilePaused;
84
- }
85
-
86
- resume(): void {
87
- this.#paused = null;
88
- }
89
-
90
- /**
91
- * @_ignore:
92
- */
93
- _handleMessage(message: any): void {
94
- if (this.#filterId == null) { return; }
95
- if (this.#paused === null) {
96
- let emitPromise: null | Promise<void> = this.#emitPromise;
97
- if (emitPromise == null) {
98
- emitPromise = this._emit(this.#provider, message);
99
- } else {
100
- emitPromise = emitPromise.then(async () => {
101
- await this._emit(this.#provider, message);
102
- });
103
- }
104
- this.#emitPromise = emitPromise.then(() => {
105
- if (this.#emitPromise === emitPromise) {
106
- this.#emitPromise = null;
107
- }
108
- });
109
- }
110
- }
111
-
112
- /**
113
- * Sub-classes **must** override this to emit the events on the
114
- * provider.
115
- */
116
- async _emit(provider: SocketProvider, message: any): Promise<void> {
117
- throw new Error("sub-classes must implemente this; _emit");
118
- }
119
- }
120
-
121
- /**
122
- * A **SocketBlockSubscriber** listens for ``newHeads`` events and emits
123
- * ``"block"`` events.
124
- */
125
- export class SocketBlockSubscriber extends SocketSubscriber {
126
- /**
127
- * @_ignore:
128
- */
129
- constructor(provider: SocketProvider) {
130
- super(provider, [ "newHeads" ]);
131
- }
132
-
133
- async _emit(provider: SocketProvider, message: any): Promise<void> {
134
- provider.emit("block", parseInt(message.number));
135
- }
136
- }
137
-
138
- /**
139
- * A **SocketPendingSubscriber** listens for pending transacitons and emits
140
- * ``"pending"`` events.
141
- */
142
- export class SocketPendingSubscriber extends SocketSubscriber {
143
-
144
- /**
145
- * @_ignore:
146
- */
147
- constructor(provider: SocketProvider) {
148
- super(provider, [ "newPendingTransactions" ]);
149
- }
150
-
151
- async _emit(provider: SocketProvider, message: any): Promise<void> {
152
- provider.emit("pending", message);
153
- }
154
- }
155
-
156
- /**
157
- * A **SocketEventSubscriber** listens for event logs.
158
- */
159
- export class SocketEventSubscriber extends SocketSubscriber {
160
- #logFilter: string;
161
-
162
- /**
163
- * The filter.
164
- */
165
- get logFilter(): EventFilter { return JSON.parse(this.#logFilter); }
166
-
167
- /**
168
- * @_ignore:
169
- */
170
- constructor(provider: SocketProvider, filter: EventFilter) {
171
- super(provider, [ "logs", filter ]);
172
- this.#logFilter = JSON.stringify(filter);
173
- }
174
-
175
- async _emit(provider: SocketProvider, message: any): Promise<void> {
176
- provider.emit(this.logFilter, provider._wrapLog(message, provider._network));
177
- }
178
- }
179
-
180
- /**
181
- * A **SocketProvider** is backed by a long-lived connection over a
182
- * socket, which can subscribe and receive real-time messages over
183
- * its communication channel.
184
- */
185
- export class SocketProvider extends JsonRpcApiProvider {
186
- #callbacks: Map<number, { payload: JsonRpcPayload, resolve: (r: any) => void, reject: (e: Error) => void }>;
187
-
188
- // Maps each filterId to its subscriber
189
- #subs: Map<number | string, SocketSubscriber>;
190
-
191
- // If any events come in before a subscriber has finished
192
- // registering, queue them
193
- #pending: Map<number | string, Array<any>>;
194
-
195
- /**
196
- * Creates a new **SocketProvider** connected to %%network%%.
197
- *
198
- * If unspecified, the network will be discovered.
199
- */
200
- constructor(network?: Networkish, _options?: JsonRpcApiProviderOptions) {
201
- // Copy the options
202
- const options = Object.assign({ }, (_options != null) ? _options: { });
203
-
204
- // Support for batches is generally not supported for
205
- // connection-base providers; if this changes in the future
206
- // the _send should be updated to reflect this
207
- assertArgument(options.batchMaxCount == null || options.batchMaxCount === 1,
208
- "sockets-based providers do not support batches", "options.batchMaxCount", _options);
209
- options.batchMaxCount = 1;
210
-
211
- // Socket-based Providers (generally) cannot change their network,
212
- // since they have a long-lived connection; but let people override
213
- // this if they have just cause.
214
- if (options.staticNetwork == null) { options.staticNetwork = true; }
215
-
216
- super(network, options);
217
- this.#callbacks = new Map();
218
- this.#subs = new Map();
219
- this.#pending = new Map();
220
- }
221
-
222
- // This value is only valid after _start has been called
223
- /*
224
- get _network(): Network {
225
- if (this.#network == null) {
226
- throw new Error("this shouldn't happen");
227
- }
228
- return this.#network.clone();
229
- }
230
- */
231
-
232
- _getSubscriber(sub: Subscription): Subscriber {
233
- switch (sub.type) {
234
- case "close":
235
- return new UnmanagedSubscriber("close");
236
- case "block":
237
- return new SocketBlockSubscriber(this);
238
- case "pending":
239
- return new SocketPendingSubscriber(this);
240
- case "event":
241
- return new SocketEventSubscriber(this, sub.filter);
242
- case "orphan":
243
- // Handled auto-matically within AbstractProvider
244
- // when the log.removed = true
245
- if (sub.filter.orphan === "drop-log") {
246
- return new UnmanagedSubscriber("drop-log");
247
- }
248
- }
249
- return super._getSubscriber(sub);
250
- }
251
-
252
- /**
253
- * Register a new subscriber. This is used internalled by Subscribers
254
- * and generally is unecessary unless extending capabilities.
255
- */
256
- _register(filterId: number | string, subscriber: SocketSubscriber): void {
257
- this.#subs.set(filterId, subscriber);
258
- const pending = this.#pending.get(filterId);
259
- if (pending) {
260
- for (const message of pending) {
261
- subscriber._handleMessage(message);
262
- }
263
- this.#pending.delete(filterId);
264
- }
265
- }
266
-
267
- async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {
268
- // WebSocket provider doesn't accept batches
269
- assertArgument(!Array.isArray(payload), "WebSocket does not support batch send", "payload", payload);
270
-
271
- // @TODO: stringify payloads here and store to prevent mutations
272
-
273
- // Prepare a promise to respond to
274
- const promise = new Promise((resolve, reject) => {
275
- this.#callbacks.set(payload.id, { payload, resolve, reject });
276
- });
277
-
278
- // Wait until the socket is connected before writing to it
279
- await this._waitUntilReady();
280
-
281
- // Write the request to the socket
282
- await this._write(JSON.stringify(payload));
283
-
284
- return <Array<JsonRpcResult | JsonRpcError>>[ await promise ];
285
- }
286
-
287
- // Sub-classes must call this once they are connected
288
- /*
289
- async _start(): Promise<void> {
290
- if (this.#ready) { return; }
291
-
292
- for (const { payload } of this.#callbacks.values()) {
293
- await this._write(JSON.stringify(payload));
294
- }
295
-
296
- this.#ready = (async function() {
297
- await super._start();
298
- })();
299
- }
300
- */
301
-
302
- /**
303
- * Sub-classes **must** call this with messages received over their
304
- * transport to be processed and dispatched.
305
- */
306
- async _processMessage(message: string): Promise<void> {
307
- const result = <JsonRpcResult | JsonRpcError | JsonRpcSubscription>(JSON.parse(message));
308
-
309
- if (result && typeof(result) === "object" && "id" in result) {
310
- const callback = this.#callbacks.get(result.id);
311
- if (callback == null) {
312
- this.emit("error", makeError("received result for unknown id", "UNKNOWN_ERROR", {
313
- reasonCode: "UNKNOWN_ID",
314
- result
315
- }));
316
- return;
317
- }
318
- this.#callbacks.delete(result.id);
319
-
320
- callback.resolve(result);
321
-
322
- } else if (result && result.method === "eth_subscription") {
323
- const filterId = result.params.subscription;
324
- const subscriber = this.#subs.get(filterId);
325
- if (subscriber) {
326
- subscriber._handleMessage(result.params.result);
327
- } else {
328
- let pending = this.#pending.get(filterId);
329
- if (pending == null) {
330
- pending = [ ];
331
- this.#pending.set(filterId, pending);
332
- }
333
- pending.push(result.params.result);
334
- }
335
-
336
- } else {
337
- this.emit("error", makeError("received unexpected message", "UNKNOWN_ERROR", {
338
- reasonCode: "UNEXPECTED_MESSAGE",
339
- result
340
- }));
341
- return;
342
- }
343
- }
344
-
345
- /**
346
- * Sub-classes **must** override this to send %%message%% over their
347
- * transport.
348
- */
349
- async _write(message: string): Promise<void> {
350
- throw new Error("sub-classes must override this");
351
- }
352
- }
1
+ /**
2
+ * Generic long-lived socket provider.
3
+ *
4
+ * Sub-classing notes
5
+ * - a sub-class MUST call the `_start()` method once connected
6
+ * - a sub-class MUST override the `_write(string)` method
7
+ * - a sub-class MUST call `_processMessage(string)` for each message
8
+ *
9
+ * @_subsection: api/providers/abstract-provider:Socket Providers [about-socketProvider]
10
+ */
11
+
12
+ import { UnmanagedSubscriber } from "./abstract-provider.js";
13
+ import { assert, assertArgument, makeError } from "../utils/index.js";
14
+ import { JsonRpcApiProvider } from "./provider-jsonrpc.js";
15
+
16
+ import type { Subscriber, Subscription } from "./abstract-provider.js";
17
+ import type { EventFilter } from "./provider.js";
18
+ import type {
19
+ JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult
20
+ } from "./provider-jsonrpc.js";
21
+ import type { Networkish } from "./network.js";
22
+
23
+
24
+ type JsonRpcSubscription = {
25
+ method: string,
26
+ params: {
27
+ result: any,
28
+ subscription: string
29
+ }
30
+ };
31
+
32
+ /**
33
+ * A **SocketSubscriber** uses a socket transport to handle events and
34
+ * should use [[_emit]] to manage the events.
35
+ */
36
+ export class SocketSubscriber implements Subscriber {
37
+ #provider: SocketProvider;
38
+
39
+ #filter: string;
40
+
41
+ /**
42
+ * The filter.
43
+ */
44
+ get filter(): Array<any> { return JSON.parse(this.#filter); }
45
+
46
+ #filterId: null | Promise<string |number>;
47
+ #paused: null | boolean;
48
+
49
+ #emitPromise: null | Promise<void>;
50
+
51
+ /**
52
+ * Creates a new **SocketSubscriber** attached to %%provider%% listening
53
+ * to %%filter%%.
54
+ */
55
+ constructor(provider: SocketProvider, filter: Array<any>) {
56
+ this.#provider = provider;
57
+ this.#filter = JSON.stringify(filter);
58
+ this.#filterId = null;
59
+ this.#paused = null;
60
+ this.#emitPromise = null;
61
+ }
62
+
63
+ start(): void {
64
+ this.#filterId = this.#provider.send("eth_subscribe", this.filter).then((filterId) => {;
65
+ this.#provider._register(filterId, this);
66
+ return filterId;
67
+ });
68
+ }
69
+
70
+ stop(): void {
71
+ (<Promise<number>>(this.#filterId)).then((filterId) => {
72
+ if (this.#provider.destroyed) { return; }
73
+ this.#provider.send("eth_unsubscribe", [ filterId ]);
74
+ });
75
+ this.#filterId = null;
76
+ }
77
+
78
+ // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs
79
+ // and resume
80
+ pause(dropWhilePaused?: boolean): void {
81
+ assert(dropWhilePaused, "preserve logs while paused not supported by SocketSubscriber yet",
82
+ "UNSUPPORTED_OPERATION", { operation: "pause(false)" });
83
+ this.#paused = !!dropWhilePaused;
84
+ }
85
+
86
+ resume(): void {
87
+ this.#paused = null;
88
+ }
89
+
90
+ /**
91
+ * @_ignore:
92
+ */
93
+ _handleMessage(message: any): void {
94
+ if (this.#filterId == null) { return; }
95
+ if (this.#paused === null) {
96
+ let emitPromise: null | Promise<void> = this.#emitPromise;
97
+ if (emitPromise == null) {
98
+ emitPromise = this._emit(this.#provider, message);
99
+ } else {
100
+ emitPromise = emitPromise.then(async () => {
101
+ await this._emit(this.#provider, message);
102
+ });
103
+ }
104
+ this.#emitPromise = emitPromise.then(() => {
105
+ if (this.#emitPromise === emitPromise) {
106
+ this.#emitPromise = null;
107
+ }
108
+ });
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Sub-classes **must** override this to emit the events on the
114
+ * provider.
115
+ */
116
+ async _emit(provider: SocketProvider, message: any): Promise<void> {
117
+ throw new Error("sub-classes must implemente this; _emit");
118
+ }
119
+ }
120
+
121
+ /**
122
+ * A **SocketBlockSubscriber** listens for ``newHeads`` events and emits
123
+ * ``"block"`` events.
124
+ */
125
+ export class SocketBlockSubscriber extends SocketSubscriber {
126
+ /**
127
+ * @_ignore:
128
+ */
129
+ constructor(provider: SocketProvider) {
130
+ super(provider, [ "newHeads" ]);
131
+ }
132
+
133
+ async _emit(provider: SocketProvider, message: any): Promise<void> {
134
+ provider.emit("block", parseInt(message.number));
135
+ }
136
+ }
137
+
138
+ /**
139
+ * A **SocketPendingSubscriber** listens for pending transacitons and emits
140
+ * ``"pending"`` events.
141
+ */
142
+ export class SocketPendingSubscriber extends SocketSubscriber {
143
+
144
+ /**
145
+ * @_ignore:
146
+ */
147
+ constructor(provider: SocketProvider) {
148
+ super(provider, [ "newPendingTransactions" ]);
149
+ }
150
+
151
+ async _emit(provider: SocketProvider, message: any): Promise<void> {
152
+ provider.emit("pending", message);
153
+ }
154
+ }
155
+
156
+ /**
157
+ * A **SocketEventSubscriber** listens for event logs.
158
+ */
159
+ export class SocketEventSubscriber extends SocketSubscriber {
160
+ #logFilter: string;
161
+
162
+ /**
163
+ * The filter.
164
+ */
165
+ get logFilter(): EventFilter { return JSON.parse(this.#logFilter); }
166
+
167
+ /**
168
+ * @_ignore:
169
+ */
170
+ constructor(provider: SocketProvider, filter: EventFilter) {
171
+ super(provider, [ "logs", filter ]);
172
+ this.#logFilter = JSON.stringify(filter);
173
+ }
174
+
175
+ async _emit(provider: SocketProvider, message: any): Promise<void> {
176
+ provider.emit(this.logFilter, provider._wrapLog(message, provider._network));
177
+ }
178
+ }
179
+
180
+ /**
181
+ * A **SocketProvider** is backed by a long-lived connection over a
182
+ * socket, which can subscribe and receive real-time messages over
183
+ * its communication channel.
184
+ */
185
+ export class SocketProvider extends JsonRpcApiProvider {
186
+ #callbacks: Map<number, { payload: JsonRpcPayload, resolve: (r: any) => void, reject: (e: Error) => void }>;
187
+
188
+ // Maps each filterId to its subscriber
189
+ #subs: Map<number | string, SocketSubscriber>;
190
+
191
+ // If any events come in before a subscriber has finished
192
+ // registering, queue them
193
+ #pending: Map<number | string, Array<any>>;
194
+
195
+ /**
196
+ * Creates a new **SocketProvider** connected to %%network%%.
197
+ *
198
+ * If unspecified, the network will be discovered.
199
+ */
200
+ constructor(network?: Networkish, _options?: JsonRpcApiProviderOptions) {
201
+ // Copy the options
202
+ const options = Object.assign({ }, (_options != null) ? _options: { });
203
+
204
+ // Support for batches is generally not supported for
205
+ // connection-base providers; if this changes in the future
206
+ // the _send should be updated to reflect this
207
+ assertArgument(options.batchMaxCount == null || options.batchMaxCount === 1,
208
+ "sockets-based providers do not support batches", "options.batchMaxCount", _options);
209
+ options.batchMaxCount = 1;
210
+
211
+ // Socket-based Providers (generally) cannot change their network,
212
+ // since they have a long-lived connection; but let people override
213
+ // this if they have just cause.
214
+ if (options.staticNetwork == null) { options.staticNetwork = true; }
215
+
216
+ super(network, options);
217
+ this.#callbacks = new Map();
218
+ this.#subs = new Map();
219
+ this.#pending = new Map();
220
+ }
221
+
222
+ // This value is only valid after _start has been called
223
+ /*
224
+ get _network(): Network {
225
+ if (this.#network == null) {
226
+ throw new Error("this shouldn't happen");
227
+ }
228
+ return this.#network.clone();
229
+ }
230
+ */
231
+
232
+ _getSubscriber(sub: Subscription): Subscriber {
233
+ switch (sub.type) {
234
+ case "close":
235
+ return new UnmanagedSubscriber("close");
236
+ case "block":
237
+ return new SocketBlockSubscriber(this);
238
+ case "pending":
239
+ return new SocketPendingSubscriber(this);
240
+ case "event":
241
+ return new SocketEventSubscriber(this, sub.filter);
242
+ case "orphan":
243
+ // Handled auto-matically within AbstractProvider
244
+ // when the log.removed = true
245
+ if (sub.filter.orphan === "drop-log") {
246
+ return new UnmanagedSubscriber("drop-log");
247
+ }
248
+ }
249
+ return super._getSubscriber(sub);
250
+ }
251
+
252
+ /**
253
+ * Register a new subscriber. This is used internalled by Subscribers
254
+ * and generally is unecessary unless extending capabilities.
255
+ */
256
+ _register(filterId: number | string, subscriber: SocketSubscriber): void {
257
+ this.#subs.set(filterId, subscriber);
258
+ const pending = this.#pending.get(filterId);
259
+ if (pending) {
260
+ for (const message of pending) {
261
+ subscriber._handleMessage(message);
262
+ }
263
+ this.#pending.delete(filterId);
264
+ }
265
+ }
266
+
267
+ async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {
268
+ // WebSocket provider doesn't accept batches
269
+ assertArgument(!Array.isArray(payload), "WebSocket does not support batch send", "payload", payload);
270
+
271
+ // @TODO: stringify payloads here and store to prevent mutations
272
+
273
+ // Prepare a promise to respond to
274
+ const promise = new Promise((resolve, reject) => {
275
+ this.#callbacks.set(payload.id, { payload, resolve, reject });
276
+ });
277
+
278
+ // Wait until the socket is connected before writing to it
279
+ await this._waitUntilReady();
280
+
281
+ // Write the request to the socket
282
+ await this._write(JSON.stringify(payload));
283
+
284
+ return <Array<JsonRpcResult | JsonRpcError>>[ await promise ];
285
+ }
286
+
287
+ // Sub-classes must call this once they are connected
288
+ /*
289
+ async _start(): Promise<void> {
290
+ if (this.#ready) { return; }
291
+
292
+ for (const { payload } of this.#callbacks.values()) {
293
+ await this._write(JSON.stringify(payload));
294
+ }
295
+
296
+ this.#ready = (async function() {
297
+ await super._start();
298
+ })();
299
+ }
300
+ */
301
+
302
+ /**
303
+ * Sub-classes **must** call this with messages received over their
304
+ * transport to be processed and dispatched.
305
+ */
306
+ async _processMessage(message: string): Promise<void> {
307
+ const result = <JsonRpcResult | JsonRpcError | JsonRpcSubscription>(JSON.parse(message));
308
+
309
+ if (result && typeof(result) === "object" && "id" in result) {
310
+ const callback = this.#callbacks.get(result.id);
311
+ if (callback == null) {
312
+ this.emit("error", makeError("received result for unknown id", "UNKNOWN_ERROR", {
313
+ reasonCode: "UNKNOWN_ID",
314
+ result
315
+ }));
316
+ return;
317
+ }
318
+ this.#callbacks.delete(result.id);
319
+
320
+ callback.resolve(result);
321
+
322
+ } else if (result && result.method === "eth_subscription") {
323
+ const filterId = result.params.subscription;
324
+ const subscriber = this.#subs.get(filterId);
325
+ if (subscriber) {
326
+ subscriber._handleMessage(result.params.result);
327
+ } else {
328
+ let pending = this.#pending.get(filterId);
329
+ if (pending == null) {
330
+ pending = [ ];
331
+ this.#pending.set(filterId, pending);
332
+ }
333
+ pending.push(result.params.result);
334
+ }
335
+
336
+ } else {
337
+ this.emit("error", makeError("received unexpected message", "UNKNOWN_ERROR", {
338
+ reasonCode: "UNEXPECTED_MESSAGE",
339
+ result
340
+ }));
341
+ return;
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Sub-classes **must** override this to send %%message%% over their
347
+ * transport.
348
+ */
349
+ async _write(message: string): Promise<void> {
350
+ throw new Error("sub-classes must override this");
351
+ }
352
+ }