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,98 +1,98 @@
1
- import { defineProperties } from "../utils/index.js";
2
- import { AbstractSigner } from "./abstract-signer.js";
3
-
4
- import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
5
-
6
- import type {
7
- BlockTag, Provider, TransactionRequest, TransactionResponse
8
- } from "./provider.js";
9
- import type { Signer } from "./signer.js";
10
-
11
-
12
- /**
13
- * A **NonceManager** wraps another [[Signer]] and automatically manages
14
- * the nonce, ensuring serialized and sequential nonces are used during
15
- * transaction.
16
- */
17
- export class NonceManager extends AbstractSigner {
18
- /**
19
- * The Signer being managed.
20
- */
21
- signer!: Signer;
22
-
23
- #noncePromise: null | Promise<number>;
24
- #delta: number;
25
-
26
- /**
27
- * Creates a new **NonceManager** to manage %%signer%%.
28
- */
29
- constructor(signer: Signer) {
30
- super(signer.provider);
31
- defineProperties<NonceManager>(this, { signer });
32
-
33
- this.#noncePromise = null;
34
- this.#delta = 0;
35
- }
36
-
37
- async getAddress(): Promise<string> {
38
- return this.signer.getAddress();
39
- }
40
-
41
- connect(provider: null | Provider): NonceManager {
42
- return new NonceManager(this.signer.connect(provider));
43
- }
44
-
45
- async getNonce(blockTag?: BlockTag): Promise<number> {
46
- if (blockTag === "pending") {
47
- if (this.#noncePromise == null) {
48
- this.#noncePromise = super.getNonce("pending");
49
- }
50
-
51
- const delta = this.#delta;
52
- return (await this.#noncePromise) + delta;
53
- }
54
-
55
- return super.getNonce(blockTag);
56
- }
57
-
58
- /**
59
- * Manually increment the nonce. This may be useful when managng
60
- * offline transactions.
61
- */
62
- increment(): void {
63
- this.#delta++;
64
- }
65
-
66
- /**
67
- * Resets the nonce, causing the **NonceManager** to reload the current
68
- * nonce from the blockchain on the next transaction.
69
- */
70
- reset(): void {
71
- this.#delta = 0;
72
- this.#noncePromise = null;
73
- }
74
-
75
- async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {
76
- const noncePromise = this.getNonce("pending");
77
- this.increment();
78
-
79
- tx = await this.signer.populateTransaction(tx);
80
- tx.nonce = await noncePromise;
81
-
82
- // @TODO: Maybe handle interesting/recoverable errors?
83
- // Like don't increment if the tx was certainly not sent
84
- return await this.signer.sendTransaction(tx);
85
- }
86
-
87
- signTransaction(tx: TransactionRequest): Promise<string> {
88
- return this.signer.signTransaction(tx);
89
- }
90
-
91
- signMessage(message: string | Uint8Array): Promise<string> {
92
- return this.signer.signMessage(message);
93
- }
94
-
95
- signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
96
- return this.signer.signTypedData(domain, types, value);
97
- }
98
- }
1
+ import { defineProperties } from "../utils/index.js";
2
+ import { AbstractSigner } from "./abstract-signer.js";
3
+
4
+ import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
5
+
6
+ import type {
7
+ BlockTag, Provider, TransactionRequest, TransactionResponse
8
+ } from "./provider.js";
9
+ import type { Signer } from "./signer.js";
10
+
11
+
12
+ /**
13
+ * A **NonceManager** wraps another [[Signer]] and automatically manages
14
+ * the nonce, ensuring serialized and sequential nonces are used during
15
+ * transaction.
16
+ */
17
+ export class NonceManager extends AbstractSigner {
18
+ /**
19
+ * The Signer being managed.
20
+ */
21
+ signer!: Signer;
22
+
23
+ #noncePromise: null | Promise<number>;
24
+ #delta: number;
25
+
26
+ /**
27
+ * Creates a new **NonceManager** to manage %%signer%%.
28
+ */
29
+ constructor(signer: Signer) {
30
+ super(signer.provider);
31
+ defineProperties<NonceManager>(this, { signer });
32
+
33
+ this.#noncePromise = null;
34
+ this.#delta = 0;
35
+ }
36
+
37
+ async getAddress(): Promise<string> {
38
+ return this.signer.getAddress();
39
+ }
40
+
41
+ connect(provider: null | Provider): NonceManager {
42
+ return new NonceManager(this.signer.connect(provider));
43
+ }
44
+
45
+ async getNonce(blockTag?: BlockTag): Promise<number> {
46
+ if (blockTag === "pending") {
47
+ if (this.#noncePromise == null) {
48
+ this.#noncePromise = super.getNonce("pending");
49
+ }
50
+
51
+ const delta = this.#delta;
52
+ return (await this.#noncePromise) + delta;
53
+ }
54
+
55
+ return super.getNonce(blockTag);
56
+ }
57
+
58
+ /**
59
+ * Manually increment the nonce. This may be useful when managng
60
+ * offline transactions.
61
+ */
62
+ increment(): void {
63
+ this.#delta++;
64
+ }
65
+
66
+ /**
67
+ * Resets the nonce, causing the **NonceManager** to reload the current
68
+ * nonce from the blockchain on the next transaction.
69
+ */
70
+ reset(): void {
71
+ this.#delta = 0;
72
+ this.#noncePromise = null;
73
+ }
74
+
75
+ async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {
76
+ const noncePromise = this.getNonce("pending");
77
+ this.increment();
78
+
79
+ tx = await this.signer.populateTransaction(tx);
80
+ tx.nonce = await noncePromise;
81
+
82
+ // @TODO: Maybe handle interesting/recoverable errors?
83
+ // Like don't increment if the tx was certainly not sent
84
+ return await this.signer.sendTransaction(tx);
85
+ }
86
+
87
+ signTransaction(tx: TransactionRequest): Promise<string> {
88
+ return this.signer.signTransaction(tx);
89
+ }
90
+
91
+ signMessage(message: string | Uint8Array): Promise<string> {
92
+ return this.signer.signMessage(message);
93
+ }
94
+
95
+ signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
96
+ return this.signer.signTypedData(domain, types, value);
97
+ }
98
+ }
@@ -1,166 +1,166 @@
1
-
2
- import type { Addressable, NameResolver } from "../address/index.js";
3
- import type {
4
- AuthorizationRequest, TypedDataDomain, TypedDataField
5
- } from "../hash/index.js";
6
- import type { Authorization, TransactionLike } from "../transaction/index.js";
7
-
8
- import type { ContractRunner } from "./contracts.js";
9
- import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js";
10
-
11
- /**
12
- * A Signer represents an account on the Ethereum Blockchain, and is most often
13
- * backed by a private key represented by a mnemonic or residing on a Hardware Wallet.
14
- *
15
- * The API remains abstract though, so that it can deal with more advanced exotic
16
- * Signing entities, such as Smart Contract Wallets or Virtual Wallets (where the
17
- * private key may not be known).
18
- */
19
- export interface Signer extends Addressable, ContractRunner, NameResolver {
20
-
21
- /**
22
- * The [[Provider]] attached to this Signer (if any).
23
- */
24
- provider: null | Provider;
25
-
26
- /**
27
- * Returns a new instance of this Signer connected to //provider// or detached
28
- * from any Provider if null.
29
- */
30
- connect(provider: null | Provider): Signer;
31
-
32
-
33
- ////////////////////
34
- // State
35
-
36
- /**
37
- * Get the address of the Signer.
38
- */
39
- getAddress(): Promise<string>;
40
-
41
- /**
42
- * Gets the next nonce required for this Signer to send a transaction.
43
- *
44
- * @param blockTag - The blocktag to base the transaction count on, keep in mind
45
- * many nodes do not honour this value and silently ignore it [default: ``"latest"``]
46
- */
47
- getNonce(blockTag?: BlockTag): Promise<number>;
48
-
49
-
50
- ////////////////////
51
- // Preparation
52
-
53
- /**
54
- * Prepares a {@link TransactionRequest} for calling:
55
- * - resolves ``to`` and ``from`` addresses
56
- * - if ``from`` is specified , check that it matches this Signer
57
- *
58
- * @param tx - The call to prepare
59
- */
60
- populateCall(tx: TransactionRequest): Promise<TransactionLike<string>>;
61
-
62
- /**
63
- * Prepares a {@link TransactionRequest} for sending to the network by
64
- * populating any missing properties:
65
- * - resolves ``to`` and ``from`` addresses
66
- * - if ``from`` is specified , check that it matches this Signer
67
- * - populates ``nonce`` via ``signer.getNonce("pending")``
68
- * - populates ``gasLimit`` via ``signer.estimateGas(tx)``
69
- * - populates ``chainId`` via ``signer.provider.getNetwork()``
70
- * - populates ``type`` and relevant fee data for that type (``gasPrice``
71
- * for legacy transactions, ``maxFeePerGas`` for EIP-1559, etc)
72
- *
73
- * @note Some Signer implementations may skip populating properties that
74
- * are populated downstream; for example JsonRpcSigner defers to the
75
- * node to populate the nonce and fee data.
76
- *
77
- * @param tx - The call to prepare
78
- */
79
- populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>>;
80
-
81
-
82
- ////////////////////
83
- // Execution
84
-
85
- /**
86
- * Estimates the required gas required to execute //tx// on the Blockchain. This
87
- * will be the expected amount a transaction will require as its ``gasLimit``
88
- * to successfully run all the necessary computations and store the needed state
89
- * that the transaction intends.
90
- *
91
- * Keep in mind that this is **best efforts**, since the state of the Blockchain
92
- * is in flux, which could affect transaction gas requirements.
93
- *
94
- * @throws UNPREDICTABLE_GAS_LIMIT A transaction that is believed by the node to likely
95
- * fail will throw an error during gas estimation. This could indicate that it
96
- * will actually fail or that the circumstances are simply too complex for the
97
- * node to take into account. In these cases, a manually determined ``gasLimit``
98
- * will need to be made.
99
- */
100
- estimateGas(tx: TransactionRequest): Promise<bigint>;
101
-
102
- /**
103
- * Evaluates the //tx// by running it against the current Blockchain state. This
104
- * cannot change state and has no cost in ether, as it is effectively simulating
105
- * execution.
106
- *
107
- * This can be used to have the Blockchain perform computations based on its state
108
- * (e.g. running a Contract's getters) or to simulate the effect of a transaction
109
- * before actually performing an operation.
110
- */
111
- call(tx: TransactionRequest): Promise<string>;
112
-
113
- /**
114
- * Resolves an ENS Name to an address.
115
- */
116
- resolveName(name: string): Promise<null | string>;
117
-
118
-
119
- ////////////////////
120
- // Signing
121
-
122
- /**
123
- * Signs %%tx%%, returning the fully signed transaction. This does not
124
- * populate any additional properties within the transaction.
125
- */
126
- signTransaction(tx: TransactionRequest): Promise<string>;
127
-
128
- /**
129
- * Sends %%tx%% to the Network. The ``signer.populateTransaction(tx)``
130
- * is called first to ensure all necessary properties for the
131
- * transaction to be valid have been popualted first.
132
- */
133
- sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;
134
-
135
- /**
136
- * Signs an [[link-eip-191]] prefixed personal message.
137
- *
138
- * If the %%message%% is a string, it is signed as UTF-8 encoded bytes. It is **not**
139
- * interpretted as a [[BytesLike]]; so the string ``"0x1234"`` is signed as six
140
- * characters, **not** two bytes.
141
- *
142
- * To sign that example as two bytes, the Uint8Array should be used
143
- * (i.e. ``new Uint8Array([ 0x12, 0x34 ])``).
144
- */
145
- signMessage(message: string | Uint8Array): Promise<string>;
146
-
147
- /**
148
- * Signs the [[link-eip-712]] typed data.
149
- */
150
- signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
151
-
152
- /**
153
- * Prepares an [[AuthorizationRequest]] for authorization by
154
- * populating any missing properties:
155
- * - resolves ``address`` (if an Addressable or ENS name)
156
- * - populates ``nonce`` via ``signer.getNonce("pending")``
157
- * - populates ``chainId`` via ``signer.provider.getNetwork()``
158
- */
159
- populateAuthorization(auth: AuthorizationRequest): Promise<AuthorizationRequest>;
160
-
161
- /**
162
- * Signs an %%authorization%% to be used in [[link-eip-7702]]
163
- * transactions.
164
- */
165
- authorize(authorization: AuthorizationRequest): Promise<Authorization>;
166
- }
1
+
2
+ import type { Addressable, NameResolver } from "../address/index.js";
3
+ import type {
4
+ AuthorizationRequest, TypedDataDomain, TypedDataField
5
+ } from "../hash/index.js";
6
+ import type { Authorization, TransactionLike } from "../transaction/index.js";
7
+
8
+ import type { ContractRunner } from "./contracts.js";
9
+ import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js";
10
+
11
+ /**
12
+ * A Signer represents an account on the Ethereum Blockchain, and is most often
13
+ * backed by a private key represented by a mnemonic or residing on a Hardware Wallet.
14
+ *
15
+ * The API remains abstract though, so that it can deal with more advanced exotic
16
+ * Signing entities, such as Smart Contract Wallets or Virtual Wallets (where the
17
+ * private key may not be known).
18
+ */
19
+ export interface Signer extends Addressable, ContractRunner, NameResolver {
20
+
21
+ /**
22
+ * The [[Provider]] attached to this Signer (if any).
23
+ */
24
+ provider: null | Provider;
25
+
26
+ /**
27
+ * Returns a new instance of this Signer connected to //provider// or detached
28
+ * from any Provider if null.
29
+ */
30
+ connect(provider: null | Provider): Signer;
31
+
32
+
33
+ ////////////////////
34
+ // State
35
+
36
+ /**
37
+ * Get the address of the Signer.
38
+ */
39
+ getAddress(): Promise<string>;
40
+
41
+ /**
42
+ * Gets the next nonce required for this Signer to send a transaction.
43
+ *
44
+ * @param blockTag - The blocktag to base the transaction count on, keep in mind
45
+ * many nodes do not honour this value and silently ignore it [default: ``"latest"``]
46
+ */
47
+ getNonce(blockTag?: BlockTag): Promise<number>;
48
+
49
+
50
+ ////////////////////
51
+ // Preparation
52
+
53
+ /**
54
+ * Prepares a {@link TransactionRequest} for calling:
55
+ * - resolves ``to`` and ``from`` addresses
56
+ * - if ``from`` is specified , check that it matches this Signer
57
+ *
58
+ * @param tx - The call to prepare
59
+ */
60
+ populateCall(tx: TransactionRequest): Promise<TransactionLike<string>>;
61
+
62
+ /**
63
+ * Prepares a {@link TransactionRequest} for sending to the network by
64
+ * populating any missing properties:
65
+ * - resolves ``to`` and ``from`` addresses
66
+ * - if ``from`` is specified , check that it matches this Signer
67
+ * - populates ``nonce`` via ``signer.getNonce("pending")``
68
+ * - populates ``gasLimit`` via ``signer.estimateGas(tx)``
69
+ * - populates ``chainId`` via ``signer.provider.getNetwork()``
70
+ * - populates ``type`` and relevant fee data for that type (``gasPrice``
71
+ * for legacy transactions, ``maxFeePerGas`` for EIP-1559, etc)
72
+ *
73
+ * @note Some Signer implementations may skip populating properties that
74
+ * are populated downstream; for example JsonRpcSigner defers to the
75
+ * node to populate the nonce and fee data.
76
+ *
77
+ * @param tx - The call to prepare
78
+ */
79
+ populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>>;
80
+
81
+
82
+ ////////////////////
83
+ // Execution
84
+
85
+ /**
86
+ * Estimates the required gas required to execute //tx// on the Blockchain. This
87
+ * will be the expected amount a transaction will require as its ``gasLimit``
88
+ * to successfully run all the necessary computations and store the needed state
89
+ * that the transaction intends.
90
+ *
91
+ * Keep in mind that this is **best efforts**, since the state of the Blockchain
92
+ * is in flux, which could affect transaction gas requirements.
93
+ *
94
+ * @throws UNPREDICTABLE_GAS_LIMIT A transaction that is believed by the node to likely
95
+ * fail will throw an error during gas estimation. This could indicate that it
96
+ * will actually fail or that the circumstances are simply too complex for the
97
+ * node to take into account. In these cases, a manually determined ``gasLimit``
98
+ * will need to be made.
99
+ */
100
+ estimateGas(tx: TransactionRequest): Promise<bigint>;
101
+
102
+ /**
103
+ * Evaluates the //tx// by running it against the current Blockchain state. This
104
+ * cannot change state and has no cost in ether, as it is effectively simulating
105
+ * execution.
106
+ *
107
+ * This can be used to have the Blockchain perform computations based on its state
108
+ * (e.g. running a Contract's getters) or to simulate the effect of a transaction
109
+ * before actually performing an operation.
110
+ */
111
+ call(tx: TransactionRequest): Promise<string>;
112
+
113
+ /**
114
+ * Resolves an ENS Name to an address.
115
+ */
116
+ resolveName(name: string): Promise<null | string>;
117
+
118
+
119
+ ////////////////////
120
+ // Signing
121
+
122
+ /**
123
+ * Signs %%tx%%, returning the fully signed transaction. This does not
124
+ * populate any additional properties within the transaction.
125
+ */
126
+ signTransaction(tx: TransactionRequest): Promise<string>;
127
+
128
+ /**
129
+ * Sends %%tx%% to the Network. The ``signer.populateTransaction(tx)``
130
+ * is called first to ensure all necessary properties for the
131
+ * transaction to be valid have been popualted first.
132
+ */
133
+ sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;
134
+
135
+ /**
136
+ * Signs an [[link-eip-191]] prefixed personal message.
137
+ *
138
+ * If the %%message%% is a string, it is signed as UTF-8 encoded bytes. It is **not**
139
+ * interpretted as a [[BytesLike]]; so the string ``"0x1234"`` is signed as six
140
+ * characters, **not** two bytes.
141
+ *
142
+ * To sign that example as two bytes, the Uint8Array should be used
143
+ * (i.e. ``new Uint8Array([ 0x12, 0x34 ])``).
144
+ */
145
+ signMessage(message: string | Uint8Array): Promise<string>;
146
+
147
+ /**
148
+ * Signs the [[link-eip-712]] typed data.
149
+ */
150
+ signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
151
+
152
+ /**
153
+ * Prepares an [[AuthorizationRequest]] for authorization by
154
+ * populating any missing properties:
155
+ * - resolves ``address`` (if an Addressable or ENS name)
156
+ * - populates ``nonce`` via ``signer.getNonce("pending")``
157
+ * - populates ``chainId`` via ``signer.provider.getNetwork()``
158
+ */
159
+ populateAuthorization(auth: AuthorizationRequest): Promise<AuthorizationRequest>;
160
+
161
+ /**
162
+ * Signs an %%authorization%% to be used in [[link-eip-7702]]
163
+ * transactions.
164
+ */
165
+ authorize(authorization: AuthorizationRequest): Promise<Authorization>;
166
+ }