@gzeoneth/gov-tracker 0.4.0 → 0.5.0-alpha.fix-refresh.e8078c3

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 (271) hide show
  1. package/README.md +95 -11
  2. package/dist/abis-json.d.ts +2315 -0
  3. package/dist/abis-json.d.ts.map +1 -0
  4. package/dist/abis-json.js +3207 -0
  5. package/dist/abis-json.js.map +1 -0
  6. package/dist/abis.d.ts +12 -7
  7. package/dist/abis.d.ts.map +1 -1
  8. package/dist/abis.js +32 -1
  9. package/dist/abis.js.map +1 -1
  10. package/dist/calldata/decoder.d.ts.map +1 -1
  11. package/dist/calldata/decoder.js +33 -28
  12. package/dist/calldata/decoder.js.map +1 -1
  13. package/dist/calldata/parameter-decoder.d.ts.map +1 -1
  14. package/dist/calldata/parameter-decoder.js +19 -25
  15. package/dist/calldata/parameter-decoder.js.map +1 -1
  16. package/dist/calldata/retryable-ticket.d.ts +2 -2
  17. package/dist/calldata/retryable-ticket.d.ts.map +1 -1
  18. package/dist/calldata/retryable-ticket.js +17 -12
  19. package/dist/calldata/retryable-ticket.js.map +1 -1
  20. package/dist/calldata/signature-lookup.js +5 -4
  21. package/dist/calldata/signature-lookup.js.map +1 -1
  22. package/dist/cli/cli.js +112 -20
  23. package/dist/cli/cli.js.map +1 -1
  24. package/dist/cli/lib/cli.d.ts +4 -2
  25. package/dist/cli/lib/cli.d.ts.map +1 -1
  26. package/dist/cli/lib/cli.js +34 -18
  27. package/dist/cli/lib/cli.js.map +1 -1
  28. package/dist/cli/lib/election-check.d.ts.map +1 -1
  29. package/dist/cli/lib/election-check.js +2 -1
  30. package/dist/cli/lib/election-check.js.map +1 -1
  31. package/dist/cli/lib/json-state.js +1 -1
  32. package/dist/cli/lib/json-state.js.map +1 -1
  33. package/dist/cli/tui/components/StageProgress.js +1 -1
  34. package/dist/cli/tui/components/StageProgress.js.map +1 -1
  35. package/dist/cli/tui/components/StageRow.d.ts.map +1 -1
  36. package/dist/cli/tui/components/StageRow.js +15 -20
  37. package/dist/cli/tui/components/StageRow.js.map +1 -1
  38. package/dist/cli/tui/components/VotingStats.d.ts.map +1 -1
  39. package/dist/cli/tui/components/VotingStats.js +2 -1
  40. package/dist/cli/tui/components/VotingStats.js.map +1 -1
  41. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -1
  42. package/dist/cli/tui/hooks/useCache.js +2 -1
  43. package/dist/cli/tui/hooks/useCache.js.map +1 -1
  44. package/dist/cli/tui/hooks/useElectionData.d.ts.map +1 -1
  45. package/dist/cli/tui/hooks/useElectionData.js +3 -2
  46. package/dist/cli/tui/hooks/useElectionData.js.map +1 -1
  47. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -1
  48. package/dist/cli/tui/hooks/useNavigation.js +2 -3
  49. package/dist/cli/tui/hooks/useNavigation.js.map +1 -1
  50. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -1
  51. package/dist/cli/tui/hooks/useProposals.js +26 -36
  52. package/dist/cli/tui/hooks/useProposals.js.map +1 -1
  53. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -1
  54. package/dist/cli/tui/hooks/useStageCalldata.js +2 -1
  55. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -1
  56. package/dist/cli/tui/utils/index.d.ts +7 -7
  57. package/dist/cli/tui/utils/index.d.ts.map +1 -1
  58. package/dist/cli/tui/utils/index.js +18 -13
  59. package/dist/cli/tui/utils/index.js.map +1 -1
  60. package/dist/cli/tui/utils/markdown-parser.d.ts +5 -0
  61. package/dist/cli/tui/utils/markdown-parser.d.ts.map +1 -1
  62. package/dist/cli/tui/utils/markdown-parser.js +16 -0
  63. package/dist/cli/tui/utils/markdown-parser.js.map +1 -1
  64. package/dist/cli/tui/utils/navigation.d.ts +1 -0
  65. package/dist/cli/tui/utils/navigation.d.ts.map +1 -1
  66. package/dist/cli/tui/utils/navigation.js +9 -5
  67. package/dist/cli/tui/utils/navigation.js.map +1 -1
  68. package/dist/cli/tui/utils/proposal-detail-helpers.js +6 -6
  69. package/dist/cli/tui/utils/proposal-detail-helpers.js.map +1 -1
  70. package/dist/cli/tui/utils/stage-status.d.ts +4 -0
  71. package/dist/cli/tui/utils/stage-status.d.ts.map +1 -1
  72. package/dist/cli/tui/utils/stage-status.js +47 -1
  73. package/dist/cli/tui/utils/stage-status.js.map +1 -1
  74. package/dist/cli/tui/utils/time.d.ts +4 -4
  75. package/dist/cli/tui/utils/time.d.ts.map +1 -1
  76. package/dist/cli/tui/utils/time.js +13 -11
  77. package/dist/cli/tui/utils/time.js.map +1 -1
  78. package/dist/cli/tui/views/CalldataView.d.ts.map +1 -1
  79. package/dist/cli/tui/views/CalldataView.js +3 -2
  80. package/dist/cli/tui/views/CalldataView.js.map +1 -1
  81. package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -1
  82. package/dist/cli/tui/views/DescriptionView.js +4 -2
  83. package/dist/cli/tui/views/DescriptionView.js.map +1 -1
  84. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -1
  85. package/dist/cli/tui/views/ElectionView.js +4 -9
  86. package/dist/cli/tui/views/ElectionView.js.map +1 -1
  87. package/dist/constants.d.ts +54 -23
  88. package/dist/constants.d.ts.map +1 -1
  89. package/dist/constants.js +78 -21
  90. package/dist/constants.js.map +1 -1
  91. package/dist/data/bundled-cache.json +652 -20
  92. package/dist/data/delegate-cache.json +118014 -0
  93. package/dist/deduplication.d.ts.map +1 -1
  94. package/dist/deduplication.js +34 -54
  95. package/dist/deduplication.js.map +1 -1
  96. package/dist/delegates/cache.d.ts +44 -0
  97. package/dist/delegates/cache.d.ts.map +1 -0
  98. package/dist/delegates/cache.js +202 -0
  99. package/dist/delegates/cache.js.map +1 -0
  100. package/dist/delegates/index.d.ts +13 -0
  101. package/dist/delegates/index.d.ts.map +1 -0
  102. package/dist/delegates/index.js +32 -0
  103. package/dist/delegates/index.js.map +1 -0
  104. package/dist/delegates/indexer.d.ts +32 -0
  105. package/dist/delegates/indexer.d.ts.map +1 -0
  106. package/dist/delegates/indexer.js +191 -0
  107. package/dist/delegates/indexer.js.map +1 -0
  108. package/dist/delegates/queries.d.ts +30 -0
  109. package/dist/delegates/queries.d.ts.map +1 -0
  110. package/dist/delegates/queries.js +79 -0
  111. package/dist/delegates/queries.js.map +1 -0
  112. package/dist/discovery/governor-discovery.d.ts +21 -1
  113. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  114. package/dist/discovery/governor-discovery.js +47 -13
  115. package/dist/discovery/governor-discovery.js.map +1 -1
  116. package/dist/discovery/timelock-discovery.d.ts.map +1 -1
  117. package/dist/discovery/timelock-discovery.js +27 -30
  118. package/dist/discovery/timelock-discovery.js.map +1 -1
  119. package/dist/election/contracts.d.ts.map +1 -1
  120. package/dist/election/contracts.js +4 -1
  121. package/dist/election/contracts.js.map +1 -1
  122. package/dist/election/details.d.ts.map +1 -1
  123. package/dist/election/details.js +7 -3
  124. package/dist/election/details.js.map +1 -1
  125. package/dist/election/index.d.ts +3 -1
  126. package/dist/election/index.d.ts.map +1 -1
  127. package/dist/election/index.js +12 -1
  128. package/dist/election/index.js.map +1 -1
  129. package/dist/election/params.d.ts.map +1 -1
  130. package/dist/election/params.js +14 -28
  131. package/dist/election/params.js.map +1 -1
  132. package/dist/election/participants.d.ts.map +1 -1
  133. package/dist/election/participants.js +21 -26
  134. package/dist/election/participants.js.map +1 -1
  135. package/dist/election/proposal-ids.js +19 -22
  136. package/dist/election/proposal-ids.js.map +1 -1
  137. package/dist/election/status.d.ts +28 -1
  138. package/dist/election/status.d.ts.map +1 -1
  139. package/dist/election/status.js +116 -3
  140. package/dist/election/status.js.map +1 -1
  141. package/dist/election/write.d.ts +132 -0
  142. package/dist/election/write.d.ts.map +1 -0
  143. package/dist/election/write.js +184 -0
  144. package/dist/election/write.js.map +1 -0
  145. package/dist/governance/index.d.ts +5 -0
  146. package/dist/governance/index.d.ts.map +1 -0
  147. package/dist/governance/index.js +28 -0
  148. package/dist/governance/index.js.map +1 -0
  149. package/dist/governance/read.d.ts +50 -0
  150. package/dist/governance/read.d.ts.map +1 -0
  151. package/dist/governance/read.js +194 -0
  152. package/dist/governance/read.js.map +1 -0
  153. package/dist/governance/write.d.ts +54 -0
  154. package/dist/governance/write.d.ts.map +1 -0
  155. package/dist/governance/write.js +132 -0
  156. package/dist/governance/write.js.map +1 -0
  157. package/dist/index.d.ts +40 -21
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +149 -15
  160. package/dist/index.js.map +1 -1
  161. package/dist/simulation/index.d.ts +4 -1
  162. package/dist/simulation/index.d.ts.map +1 -1
  163. package/dist/simulation/index.js +5 -1
  164. package/dist/simulation/index.js.map +1 -1
  165. package/dist/simulation/simulation-data.d.ts +33 -2
  166. package/dist/simulation/simulation-data.d.ts.map +1 -1
  167. package/dist/simulation/simulation-data.js +68 -24
  168. package/dist/simulation/simulation-data.js.map +1 -1
  169. package/dist/simulation/tenderly-payloads.d.ts +107 -0
  170. package/dist/simulation/tenderly-payloads.d.ts.map +1 -0
  171. package/dist/simulation/tenderly-payloads.js +103 -0
  172. package/dist/simulation/tenderly-payloads.js.map +1 -0
  173. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  174. package/dist/stages/l2-to-l1-message.js +43 -63
  175. package/dist/stages/l2-to-l1-message.js.map +1 -1
  176. package/dist/stages/proposal-queued.js.map +1 -1
  177. package/dist/stages/retryables.d.ts.map +1 -1
  178. package/dist/stages/retryables.js +10 -9
  179. package/dist/stages/retryables.js.map +1 -1
  180. package/dist/stages/timelock.d.ts +43 -3
  181. package/dist/stages/timelock.d.ts.map +1 -1
  182. package/dist/stages/timelock.js +170 -53
  183. package/dist/stages/timelock.js.map +1 -1
  184. package/dist/stages/utils.d.ts +56 -1
  185. package/dist/stages/utils.d.ts.map +1 -1
  186. package/dist/stages/utils.js +146 -30
  187. package/dist/stages/utils.js.map +1 -1
  188. package/dist/tracker/bundled-cache.d.ts +136 -0
  189. package/dist/tracker/bundled-cache.d.ts.map +1 -0
  190. package/dist/tracker/bundled-cache.js +207 -0
  191. package/dist/tracker/bundled-cache.js.map +1 -0
  192. package/dist/tracker/checkpoint-helpers.d.ts +34 -1
  193. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -1
  194. package/dist/tracker/checkpoint-helpers.js +83 -8
  195. package/dist/tracker/checkpoint-helpers.js.map +1 -1
  196. package/dist/tracker/discovery.d.ts +3 -0
  197. package/dist/tracker/discovery.d.ts.map +1 -1
  198. package/dist/tracker/discovery.js +59 -34
  199. package/dist/tracker/discovery.js.map +1 -1
  200. package/dist/tracker/pipeline.d.ts +3 -10
  201. package/dist/tracker/pipeline.d.ts.map +1 -1
  202. package/dist/tracker/pipeline.js +18 -32
  203. package/dist/tracker/pipeline.js.map +1 -1
  204. package/dist/tracker/query.d.ts +1 -0
  205. package/dist/tracker/query.d.ts.map +1 -1
  206. package/dist/tracker/query.js +54 -41
  207. package/dist/tracker/query.js.map +1 -1
  208. package/dist/tracker/state.d.ts +3 -2
  209. package/dist/tracker/state.d.ts.map +1 -1
  210. package/dist/tracker/state.js +5 -4
  211. package/dist/tracker/state.js.map +1 -1
  212. package/dist/tracker.d.ts +33 -11
  213. package/dist/tracker.d.ts.map +1 -1
  214. package/dist/tracker.js +76 -43
  215. package/dist/tracker.js.map +1 -1
  216. package/dist/types/config.d.ts +39 -3
  217. package/dist/types/config.d.ts.map +1 -1
  218. package/dist/types/delegates.d.ts +55 -0
  219. package/dist/types/delegates.d.ts.map +1 -0
  220. package/dist/types/delegates.js +9 -0
  221. package/dist/types/delegates.js.map +1 -0
  222. package/dist/types/election.d.ts +23 -0
  223. package/dist/types/election.d.ts.map +1 -1
  224. package/dist/types/index.d.ts +3 -2
  225. package/dist/types/index.d.ts.map +1 -1
  226. package/dist/types/index.js.map +1 -1
  227. package/dist/types/simulation.d.ts +2 -2
  228. package/dist/types/simulation.d.ts.map +1 -1
  229. package/dist/types/tracking.d.ts +2 -2
  230. package/dist/types/tracking.d.ts.map +1 -1
  231. package/dist/utils/chain.d.ts +5 -1
  232. package/dist/utils/chain.d.ts.map +1 -1
  233. package/dist/utils/chain.js +7 -0
  234. package/dist/utils/chain.js.map +1 -1
  235. package/dist/utils/formatters.d.ts +2 -6
  236. package/dist/utils/formatters.d.ts.map +1 -1
  237. package/dist/utils/formatters.js +9 -12
  238. package/dist/utils/formatters.js.map +1 -1
  239. package/dist/utils/log-filters.js +1 -1
  240. package/dist/utils/log-filters.js.map +1 -1
  241. package/dist/utils/logger.d.ts +2 -0
  242. package/dist/utils/logger.d.ts.map +1 -1
  243. package/dist/utils/logger.js +2 -0
  244. package/dist/utils/logger.js.map +1 -1
  245. package/dist/utils/multicall.d.ts +0 -1
  246. package/dist/utils/multicall.d.ts.map +1 -1
  247. package/dist/utils/rpc-utils.d.ts +5 -0
  248. package/dist/utils/rpc-utils.d.ts.map +1 -1
  249. package/dist/utils/rpc-utils.js +9 -1
  250. package/dist/utils/rpc-utils.js.map +1 -1
  251. package/dist/utils/stage-metadata.d.ts +19 -0
  252. package/dist/utils/stage-metadata.d.ts.map +1 -1
  253. package/dist/utils/stage-metadata.js +44 -0
  254. package/dist/utils/stage-metadata.js.map +1 -1
  255. package/dist/utils/timing.d.ts +3 -10
  256. package/dist/utils/timing.d.ts.map +1 -1
  257. package/dist/utils/timing.js +9 -22
  258. package/dist/utils/timing.js.map +1 -1
  259. package/package.json +7 -3
  260. package/dist/cli/tui/utils/calldata-formatter.d.ts +0 -7
  261. package/dist/cli/tui/utils/calldata-formatter.d.ts.map +0 -1
  262. package/dist/cli/tui/utils/calldata-formatter.js +0 -14
  263. package/dist/cli/tui/utils/calldata-formatter.js.map +0 -1
  264. package/dist/cli/tui/utils/stage-formatter.d.ts +0 -7
  265. package/dist/cli/tui/utils/stage-formatter.d.ts.map +0 -1
  266. package/dist/cli/tui/utils/stage-formatter.js +0 -13
  267. package/dist/cli/tui/utils/stage-formatter.js.map +0 -1
  268. package/dist/cli/tui/utils/text.d.ts +0 -7
  269. package/dist/cli/tui/utils/text.d.ts.map +0 -1
  270. package/dist/cli/tui/utils/text.js +0 -12
  271. package/dist/cli/tui/utils/text.js.map +0 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![codecov](https://codecov.io/gh/gzeoneth/gov-tracker/graph/badge.svg?token=2WVH8Z82TE)](https://codecov.io/gh/gzeoneth/gov-tracker)
5
5
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
6
6
 
7
- Track and execute Arbitrum DAO governance proposal lifecycle stages and Security Council elections.
7
+ Track and execute Arbitrum DAO governance proposal lifecycle stages, Security Council elections, and delegate participation.
8
8
 
9
9
  ## Installation
10
10
 
@@ -15,26 +15,22 @@ yarn add @gzeoneth/gov-tracker ethers@^5.8.0
15
15
  ## Quick Start
16
16
 
17
17
  ```typescript
18
- import { ethers } from "ethers";
19
- import { createTracker, findExecutableStage, ADDRESSES } from "@gzeoneth/gov-tracker";
18
+ import { createTracker, findExecutableStage } from "@gzeoneth/gov-tracker";
20
19
 
21
- // Use StaticJsonRpcProvider for better performance
20
+ // Accepts RPC URLs directly (or ethers Provider objects)
22
21
  const tracker = createTracker({
23
- l2Provider: new ethers.providers.StaticJsonRpcProvider(process.env.ARB1_RPC),
24
- l1Provider: new ethers.providers.StaticJsonRpcProvider(process.env.ETH_RPC),
25
- novaProvider: new ethers.providers.StaticJsonRpcProvider(process.env.NOVA_RPC),
22
+ l2Provider: process.env.ARB1_RPC, // URL string or Provider
23
+ l1Provider: process.env.ETH_RPC,
24
+ novaProvider: process.env.NOVA_RPC,
26
25
  cachePath: "./gov-tracker-cache.json",
27
26
  });
28
27
 
29
- // Track from transaction hash
28
+ // Track from transaction hash (auto-detects proposal type)
30
29
  const results = await tracker.trackByTxHash("0x...");
31
30
  for (const stage of results[0].stages) {
32
31
  console.log(`${stage.type}: ${stage.status}`);
33
32
  }
34
33
 
35
- // Or track from governor
36
- const result = await tracker.trackFromGovernor(ADDRESSES.CONSTITUTIONAL_GOVERNOR, proposalId);
37
-
38
34
  // Execute ready stages
39
35
  const readyStage = findExecutableStage(results[0].stages);
40
36
  if (readyStage) {
@@ -59,6 +55,76 @@ if (readyStage) {
59
55
 
60
56
  Statuses: `NOT_STARTED`, `PENDING`, `READY`, `COMPLETED`, `FAILED`, `SKIPPED`
61
57
 
58
+ ## Voting & Write Actions
59
+
60
+ Prepare-only functions return `PreparedTransaction` objects — `{ to, data, value, chain, chainId, description }` plus optional `operationId` / `hashValidation` — and you always sign and send yourself.
61
+
62
+ ```typescript
63
+ import { ethers } from "ethers";
64
+ import {
65
+ prepareCastVote,
66
+ prepareCastVoteWithReason,
67
+ VOTE_SUPPORT,
68
+ prepareNomineeElectionVote,
69
+ prepareContenderRegistration,
70
+ NOMINEE_ELECTION_GOVERNOR_ABI,
71
+ ADDRESSES,
72
+ } from "@gzeoneth/gov-tracker";
73
+
74
+ // Governor proposal vote
75
+ const tx = prepareCastVote(proposalId, VOTE_SUPPORT.FOR, "constitutional");
76
+ await signer.sendTransaction(tx);
77
+
78
+ // Vote with on-chain reason
79
+ const tx2 = prepareCastVoteWithReason(proposalId, VOTE_SUPPORT.AGAINST, "Insufficient detail");
80
+
81
+ // Security Council nominee vote (castVoteWithReasonAndParams)
82
+ const tx3 = prepareNomineeElectionVote(proposalId, nomineeAddress, votes);
83
+
84
+ // Contender registration (two-phase: sign EIP-712 typed data, then submit)
85
+ // governorName MUST match the governor's on-chain name() value (EIP-712 domain)
86
+ const governor = new ethers.Contract(
87
+ ADDRESSES.ELECTION_NOMINEE_GOVERNOR,
88
+ NOMINEE_ELECTION_GOVERNOR_ABI,
89
+ l2Provider
90
+ );
91
+ const governorName: string = await governor.name();
92
+ const { typedData, buildTransaction } = prepareContenderRegistration(governorName, proposalId);
93
+ const signature = await signer._signTypedData(typedData.domain, typedData.types, typedData.message);
94
+ await signer.sendTransaction(buildTransaction(signature));
95
+ ```
96
+
97
+ See [API Reference](./docs/API.md#governance-vote-preparation) and [Examples](./docs/EXAMPLES.md#voting) for details.
98
+
99
+ ## Delegates
100
+
101
+ Indexed ARB delegate registry with cached voting power and live queries:
102
+
103
+ ```typescript
104
+ import {
105
+ loadBundledDelegateCache,
106
+ getTopDelegates,
107
+ getDelegateRankInfo,
108
+ queryDelegatesNotVoted,
109
+ } from "@gzeoneth/gov-tracker";
110
+
111
+ // Load bundled cache (sync, no RPC)
112
+ const cache = loadBundledDelegateCache();
113
+ const top10 = getTopDelegates(cache, 10);
114
+
115
+ // O(1) rank lookup
116
+ const info = getDelegateRankInfo(cache, "0x1234...");
117
+ console.log(`Rank ${info?.rank}, voting power ${info?.votingPower}`);
118
+
119
+ // Live: find top delegates who haven't voted yet on an active proposal
120
+ const notVoted = await queryDelegatesNotVoted(l2Provider, proposalId, "constitutional", {
121
+ limit: 10,
122
+ maxDelegatesToCheck: 100,
123
+ });
124
+ ```
125
+
126
+ Build or refresh the cache via CLI: `npx @gzeoneth/gov-tracker delegates`.
127
+
62
128
  ## CLI
63
129
 
64
130
  ```bash
@@ -97,6 +163,12 @@ npx @gzeoneth/gov-tracker ui
97
163
 
98
164
  # Track election creation tx (auto-switches to election view)
99
165
  npx @gzeoneth/gov-tracker track 0x82a0baf3...
166
+
167
+ # Build or refresh delegate cache from live RPC
168
+ npx @gzeoneth/gov-tracker delegates # Incremental update
169
+ npx @gzeoneth/gov-tracker delegates --force # Rebuild from genesis
170
+ npx @gzeoneth/gov-tracker delegates --min-power 1000 \
171
+ --output ./my-delegates.json # Custom filters/output
100
172
  ```
101
173
 
102
174
  **Shorthands:** `-v` (verbose), `-p` (prepare), `-w` (write), `-i` (inspect)
@@ -177,6 +249,18 @@ PRIVATE_KEY=0x... # For execution
177
249
 
178
250
  The CLI warns when using default public RPCs. For production, set these environment variables.
179
251
 
252
+ ### RPC Provider Recommendations
253
+
254
+ For reliable operation, especially during election tracking which makes many RPC calls:
255
+
256
+ | Chain | Recommended Providers |
257
+ |-------|----------------------|
258
+ | Ethereum | [Alchemy](https://www.alchemy.com/), [Infura](https://infura.io/), [ethereum.publicnode.com](https://ethereum.publicnode.com/) |
259
+ | Arbitrum One | [Alchemy](https://www.alchemy.com/), [arb1.arbitrum.io/rpc](https://arb1.arbitrum.io/rpc), [arbitrum.publicnode.com](https://arbitrum.publicnode.com/) |
260
+ | Arbitrum Nova | [nova.arbitrum.io/rpc](https://nova.arbitrum.io/rpc) |
261
+
262
+ **Note:** Some public RPCs like `cloudflare-eth.com` may return `-32603` internal errors during high load. If you experience intermittent failures, try switching to a dedicated provider.
263
+
180
264
  ## Security & Privacy
181
265
 
182
266
  **External API Lookups**: When decoding calldata, unknown function selectors are looked up via [4byte.directory](https://www.4byte.directory/). To disable: