viem 0.0.1-cjs.10 → 0.0.1-sushi.26

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 (532) hide show
  1. package/contract/package.json +4 -0
  2. package/dist/call-ac509982.d.ts +23 -0
  3. package/dist/chain-c4ccb458.d.ts +5 -0
  4. package/dist/{rpc-b77c5aee.d.ts → chain-f16512e8.d.ts} +97 -17
  5. package/dist/chains.d.ts +1303 -74
  6. package/dist/chains.js +81 -85
  7. package/dist/chains.js.map +1 -0
  8. package/dist/chains.mjs +121 -125
  9. package/dist/chains.mjs.map +1 -0
  10. package/dist/chunk-2PFNLP3F.js +192 -0
  11. package/dist/chunk-2PFNLP3F.js.map +1 -0
  12. package/dist/chunk-5ND4P6QL.mjs +192 -0
  13. package/dist/chunk-5ND4P6QL.mjs.map +1 -0
  14. package/dist/{chunk-5ZBNF5WM.js → chunk-NXCI5KQC.js} +769 -359
  15. package/dist/chunk-NXCI5KQC.js.map +1 -0
  16. package/dist/{chunk-HLVCJ7RV.mjs → chunk-O7T5NQLB.mjs} +484 -477
  17. package/dist/chunk-O7T5NQLB.mjs.map +1 -0
  18. package/dist/{chunk-2FDH6XP5.mjs → chunk-SD5X7F4U.mjs} +777 -367
  19. package/dist/chunk-SD5X7F4U.mjs.map +1 -0
  20. package/dist/{chunk-46ZFLVHC.js → chunk-UTL6F7UN.js} +519 -512
  21. package/dist/chunk-UTL6F7UN.js.map +1 -0
  22. package/dist/contract-9e76e561.d.ts +166 -0
  23. package/dist/contract.d.ts +123 -0
  24. package/dist/contract.js +53 -0
  25. package/dist/contract.js.map +1 -0
  26. package/dist/contract.mjs +53 -0
  27. package/dist/contract.mjs.map +1 -0
  28. package/dist/createClient-68ee4bb4.d.ts +62 -0
  29. package/dist/createPublicClient-b732194e.d.ts +19 -0
  30. package/dist/createTestClient-dedf321e.d.ts +34 -0
  31. package/dist/createWalletClient-75813d83.d.ts +30 -0
  32. package/dist/decodeErrorResult-0b934d23.d.ts +16 -0
  33. package/dist/{eip1193-020a6f13.d.ts → eip1193-6f9ba163.d.ts} +12 -9
  34. package/dist/ens.d.ts +82 -0
  35. package/dist/ens.js +216 -0
  36. package/dist/ens.js.map +1 -0
  37. package/dist/ens.mjs +216 -0
  38. package/dist/ens.mjs.map +1 -0
  39. package/dist/getAbiItem-c8e6e7d4.d.ts +97 -0
  40. package/dist/index.d.ts +128 -33
  41. package/dist/index.js +240 -244
  42. package/dist/index.js.map +1 -0
  43. package/dist/index.mjs +257 -261
  44. package/dist/index.mjs.map +1 -0
  45. package/dist/public.d.ts +353 -0
  46. package/dist/public.js +58 -0
  47. package/dist/public.js.map +1 -0
  48. package/dist/public.mjs +58 -0
  49. package/dist/public.mjs.map +1 -0
  50. package/dist/readContract-4f6e2692.d.ts +10 -0
  51. package/dist/rpc-a5a7f376.d.ts +121 -0
  52. package/dist/sendTransaction-e713f90c.d.ts +12 -0
  53. package/dist/test.d.ts +161 -0
  54. package/dist/test.js +264 -0
  55. package/dist/test.js.map +1 -0
  56. package/dist/test.mjs +264 -0
  57. package/dist/test.mjs.map +1 -0
  58. package/dist/transactionReceipt-2a86c7c7.d.ts +26 -0
  59. package/dist/transactionRequest-c7794f5e.d.ts +15 -0
  60. package/dist/utils/index.d.ts +238 -24
  61. package/dist/utils/index.js +27 -2
  62. package/dist/utils/index.js.map +1 -0
  63. package/dist/utils/index.mjs +30 -5
  64. package/dist/utils/index.mjs.map +1 -0
  65. package/dist/wallet.d.ts +42 -0
  66. package/dist/wallet.js +24 -0
  67. package/dist/wallet.js.map +1 -0
  68. package/dist/wallet.mjs +24 -0
  69. package/dist/wallet.mjs.map +1 -0
  70. package/dist/watchEvent-c346c12d.d.ts +41 -0
  71. package/dist/window.d.ts +3 -2
  72. package/dist/window.js +1 -1
  73. package/dist/window.js.map +1 -0
  74. package/dist/window.mjs +1 -0
  75. package/dist/window.mjs.map +1 -0
  76. package/ens/package.json +4 -0
  77. package/package.json +40 -72
  78. package/src/_test/abis.ts +1420 -0
  79. package/src/_test/bench.ts +15 -0
  80. package/src/_test/constants.ts +63 -0
  81. package/src/_test/generated.ts +128 -0
  82. package/src/_test/globalSetup.ts +11 -0
  83. package/src/_test/index.ts +25 -0
  84. package/src/_test/setup.ts +8 -0
  85. package/src/_test/utils.ts +155 -0
  86. package/src/actions/ens/getEnsAddress.bench.ts +26 -0
  87. package/src/actions/ens/getEnsAddress.test.ts +97 -0
  88. package/src/actions/ens/getEnsAddress.ts +122 -0
  89. package/src/actions/ens/getEnsName.bench.ts +30 -0
  90. package/src/actions/ens/getEnsName.test.ts +101 -0
  91. package/src/actions/ens/getEnsName.ts +106 -0
  92. package/src/actions/ens/index.test.ts +12 -0
  93. package/src/actions/ens/index.ts +3 -0
  94. package/src/actions/index.test.ts +81 -0
  95. package/src/actions/index.ts +182 -0
  96. package/src/actions/public/call.bench.ts +48 -0
  97. package/src/actions/public/call.test.ts +99 -0
  98. package/src/actions/public/call.ts +97 -0
  99. package/src/actions/public/createBlockFilter.bench.ts +11 -0
  100. package/src/actions/public/createBlockFilter.test.ts +9 -0
  101. package/src/actions/public/createBlockFilter.ts +14 -0
  102. package/src/actions/public/createContractEventFilter.test.ts +119 -0
  103. package/src/actions/public/createContractEventFilter.ts +69 -0
  104. package/src/actions/public/createEventFilter.test.ts +277 -0
  105. package/src/actions/public/createEventFilter.ts +93 -0
  106. package/src/actions/public/createPendingTransactionFilter.bench.ts +11 -0
  107. package/src/actions/public/createPendingTransactionFilter.test.ts +9 -0
  108. package/src/actions/public/createPendingTransactionFilter.ts +14 -0
  109. package/src/actions/public/estimateGas.bench.ts +46 -0
  110. package/src/actions/public/estimateGas.test.ts +92 -0
  111. package/src/actions/public/estimateGas.ts +61 -0
  112. package/src/actions/public/getBalance.test.ts +83 -0
  113. package/src/actions/public/getBalance.ts +37 -0
  114. package/src/actions/public/getBlock.bench.ts +28 -0
  115. package/src/actions/public/getBlock.test.ts +575 -0
  116. package/src/actions/public/getBlock.ts +65 -0
  117. package/src/actions/public/getBlockNumber.bench.ts +28 -0
  118. package/src/actions/public/getBlockNumber.test.ts +27 -0
  119. package/src/actions/public/getBlockNumber.ts +32 -0
  120. package/src/actions/public/getBlockTransactionCount.bench.ts +15 -0
  121. package/src/actions/public/getBlockTransactionCount.test.ts +57 -0
  122. package/src/actions/public/getBlockTransactionCount.ts +52 -0
  123. package/src/actions/public/getBytecode.test.ts +27 -0
  124. package/src/actions/public/getBytecode.ts +32 -0
  125. package/src/actions/public/getChainId.bench.ts +15 -0
  126. package/src/actions/public/getChainId.test.ts +8 -0
  127. package/src/actions/public/getChainId.ts +7 -0
  128. package/src/actions/public/getFeeHistory.bench.ts +18 -0
  129. package/src/actions/public/getFeeHistory.test.ts +137 -0
  130. package/src/actions/public/getFeeHistory.ts +44 -0
  131. package/src/actions/public/getFilterChanges.bench.ts +13 -0
  132. package/src/actions/public/getFilterChanges.test.ts +383 -0
  133. package/src/actions/public/getFilterChanges.ts +23 -0
  134. package/src/actions/public/getFilterLogs.test.ts +297 -0
  135. package/src/actions/public/getFilterLogs.ts +20 -0
  136. package/src/actions/public/getGasPrice.bench.ts +19 -0
  137. package/src/actions/public/getGasPrice.test.ts +8 -0
  138. package/src/actions/public/getGasPrice.ts +15 -0
  139. package/src/actions/public/getLogs.test.ts +306 -0
  140. package/src/actions/public/getLogs.ts +84 -0
  141. package/src/actions/public/getStorageAt.test.ts +34 -0
  142. package/src/actions/public/getStorageAt.ts +32 -0
  143. package/src/actions/public/getTransaction.bench.ts +33 -0
  144. package/src/actions/public/getTransaction.test.ts +311 -0
  145. package/src/actions/public/getTransaction.ts +95 -0
  146. package/src/actions/public/getTransactionConfirmations.test.ts +69 -0
  147. package/src/actions/public/getTransactionConfirmations.ts +38 -0
  148. package/src/actions/public/getTransactionCount.test.ts +56 -0
  149. package/src/actions/public/getTransactionCount.ts +34 -0
  150. package/src/actions/public/getTransactionReceipt.bench.ts +33 -0
  151. package/src/actions/public/getTransactionReceipt.test.ts +179 -0
  152. package/src/actions/public/getTransactionReceipt.ts +34 -0
  153. package/src/actions/public/index.test.ts +43 -0
  154. package/src/actions/public/index.ts +146 -0
  155. package/src/actions/public/multicall.test.ts +452 -0
  156. package/src/actions/public/multicall.ts +108 -0
  157. package/src/actions/public/readContract.test.ts +328 -0
  158. package/src/actions/public/readContract.ts +73 -0
  159. package/src/actions/public/simulateContract.bench.ts +41 -0
  160. package/src/actions/public/simulateContract.test.ts +410 -0
  161. package/src/actions/public/simulateContract.ts +91 -0
  162. package/src/actions/public/uninstallFilter.bench.ts +13 -0
  163. package/src/actions/public/uninstallFilter.test.ts +65 -0
  164. package/src/actions/public/uninstallFilter.ts +17 -0
  165. package/src/actions/public/waitForTransactionReceipt.test.ts +322 -0
  166. package/src/actions/public/waitForTransactionReceipt.ts +170 -0
  167. package/src/actions/public/watchBlockNumber.test.ts +166 -0
  168. package/src/actions/public/watchBlockNumber.ts +79 -0
  169. package/src/actions/public/watchBlocks.test.ts +210 -0
  170. package/src/actions/public/watchBlocks.ts +114 -0
  171. package/src/actions/public/watchContractEvent.test.ts +305 -0
  172. package/src/actions/public/watchContractEvent.ts +108 -0
  173. package/src/actions/public/watchEvent.test.ts +195 -0
  174. package/src/actions/public/watchEvent.ts +95 -0
  175. package/src/actions/public/watchPendingTransactions.test.ts +116 -0
  176. package/src/actions/public/watchPendingTransactions.ts +74 -0
  177. package/src/actions/test/dropTransaction.test.ts +34 -0
  178. package/src/actions/test/dropTransaction.ts +17 -0
  179. package/src/actions/test/getAutomine.test.ts +14 -0
  180. package/src/actions/test/getAutomine.ts +11 -0
  181. package/src/actions/test/getTxpoolContent.test.ts +45 -0
  182. package/src/actions/test/getTxpoolContent.ts +7 -0
  183. package/src/actions/test/getTxpoolStatus.test.ts +41 -0
  184. package/src/actions/test/getTxpoolStatus.ts +12 -0
  185. package/src/actions/test/impersonateAccount.test.ts +26 -0
  186. package/src/actions/test/impersonateAccount.ts +17 -0
  187. package/src/actions/test/increaseTime.test.ts +18 -0
  188. package/src/actions/test/increaseTime.ts +17 -0
  189. package/src/actions/test/index.test.ts +38 -0
  190. package/src/actions/test/index.ts +77 -0
  191. package/src/actions/test/inspectTxpool.test.ts +50 -0
  192. package/src/actions/test/inspectTxpool.ts +7 -0
  193. package/src/actions/test/mine.test.ts +20 -0
  194. package/src/actions/test/mine.ts +16 -0
  195. package/src/actions/test/removeBlockTimestampInterval.test.ts +23 -0
  196. package/src/actions/test/removeBlockTimestampInterval.ts +7 -0
  197. package/src/actions/test/reset.test.ts +19 -0
  198. package/src/actions/test/reset.ts +18 -0
  199. package/src/actions/test/revert.test.ts +39 -0
  200. package/src/actions/test/revert.ts +14 -0
  201. package/src/actions/test/sendUnsignedTransaction.test.ts +52 -0
  202. package/src/actions/test/sendUnsignedTransaction.ts +19 -0
  203. package/src/actions/test/setAutomine.test.ts +14 -0
  204. package/src/actions/test/setAutomine.ts +8 -0
  205. package/src/actions/test/setBalance.test.ts +29 -0
  206. package/src/actions/test/setBalance.ts +20 -0
  207. package/src/actions/test/setBlockGasLimit.test.ts +21 -0
  208. package/src/actions/test/setBlockGasLimit.ts +17 -0
  209. package/src/actions/test/setBlockTimestampInterval.test.ts +23 -0
  210. package/src/actions/test/setBlockTimestampInterval.ts +16 -0
  211. package/src/actions/test/setCode.test.ts +26 -0
  212. package/src/actions/test/setCode.ts +19 -0
  213. package/src/actions/test/setCoinbase.test.ts +11 -0
  214. package/src/actions/test/setCoinbase.ts +17 -0
  215. package/src/actions/test/setIntervalMining.test.ts +30 -0
  216. package/src/actions/test/setIntervalMining.ts +16 -0
  217. package/src/actions/test/setLoggingEnabled.test.ts +10 -0
  218. package/src/actions/test/setLoggingEnabled.ts +8 -0
  219. package/src/actions/test/setMinGasPrice.test.ts +22 -0
  220. package/src/actions/test/setMinGasPrice.ts +17 -0
  221. package/src/actions/test/setNextBlockBaseFeePerGas.test.ts +23 -0
  222. package/src/actions/test/setNextBlockBaseFeePerGas.ts +17 -0
  223. package/src/actions/test/setNextBlockTimestamp.test.ts +19 -0
  224. package/src/actions/test/setNextBlockTimestamp.ts +17 -0
  225. package/src/actions/test/setNonce.test.ts +28 -0
  226. package/src/actions/test/setNonce.ts +20 -0
  227. package/src/actions/test/setRpcUrl.test.ts +9 -0
  228. package/src/actions/test/setRpcUrl.ts +8 -0
  229. package/src/actions/test/setStorageAt.test.ts +36 -0
  230. package/src/actions/test/setStorageAt.ts +26 -0
  231. package/src/actions/test/snapshot.test.ts +18 -0
  232. package/src/actions/test/snapshot.ts +7 -0
  233. package/src/actions/test/stopImpersonatingAccount.test.ts +29 -0
  234. package/src/actions/test/stopImpersonatingAccount.ts +17 -0
  235. package/src/actions/wallet/addChain.test.ts +14 -0
  236. package/src/actions/wallet/addChain.ts +21 -0
  237. package/src/actions/wallet/deployContract.test.ts +55 -0
  238. package/src/actions/wallet/deployContract.ts +38 -0
  239. package/src/actions/wallet/getAccounts.test.ts +22 -0
  240. package/src/actions/wallet/getAccounts.ts +7 -0
  241. package/src/actions/wallet/getPermissions.test.ts +24 -0
  242. package/src/actions/wallet/getPermissions.ts +9 -0
  243. package/src/actions/wallet/index.test.ts +21 -0
  244. package/src/actions/wallet/index.ts +36 -0
  245. package/src/actions/wallet/requestAccounts.test.ts +13 -0
  246. package/src/actions/wallet/requestAccounts.ts +7 -0
  247. package/src/actions/wallet/requestPermissions.test.ts +26 -0
  248. package/src/actions/wallet/requestPermissions.ts +19 -0
  249. package/src/actions/wallet/sendTransaction.bench.ts +57 -0
  250. package/src/actions/wallet/sendTransaction.test.ts +440 -0
  251. package/src/actions/wallet/sendTransaction.ts +77 -0
  252. package/src/actions/wallet/signMessage.test.ts +61 -0
  253. package/src/actions/wallet/signMessage.ts +35 -0
  254. package/src/actions/wallet/switchChain.test.ts +21 -0
  255. package/src/actions/wallet/switchChain.ts +19 -0
  256. package/src/actions/wallet/watchAsset.test.ts +40 -0
  257. package/src/actions/wallet/watchAsset.ts +16 -0
  258. package/src/actions/wallet/writeContract.test.ts +84 -0
  259. package/src/actions/wallet/writeContract.ts +47 -0
  260. package/src/chains.test.ts +439 -0
  261. package/src/chains.ts +99 -0
  262. package/src/clients/createClient.test.ts +295 -0
  263. package/src/clients/createClient.ts +81 -0
  264. package/src/clients/createPublicClient.test.ts +165 -0
  265. package/src/clients/createPublicClient.ts +49 -0
  266. package/src/clients/createTestClient.test.ts +145 -0
  267. package/src/clients/createTestClient.ts +72 -0
  268. package/src/clients/createWalletClient.test.ts +121 -0
  269. package/src/clients/createWalletClient.ts +54 -0
  270. package/src/clients/index.test.ts +19 -0
  271. package/src/clients/index.ts +31 -0
  272. package/src/clients/transports/createTransport.test.ts +58 -0
  273. package/src/clients/transports/createTransport.ts +48 -0
  274. package/src/clients/transports/custom.test.ts +98 -0
  275. package/src/clients/transports/custom.ts +34 -0
  276. package/src/clients/transports/fallback.test.ts +393 -0
  277. package/src/clients/transports/fallback.ts +58 -0
  278. package/src/clients/transports/http.test.ts +109 -0
  279. package/src/clients/transports/http.ts +51 -0
  280. package/src/clients/transports/index.test.ts +15 -0
  281. package/src/clients/transports/index.ts +17 -0
  282. package/src/clients/transports/webSocket.test.ts +164 -0
  283. package/src/clients/transports/webSocket.ts +118 -0
  284. package/src/constants/abis.test.ts +53 -0
  285. package/src/constants/abis.ts +44 -0
  286. package/src/constants/index.test.ts +14 -0
  287. package/src/constants/index.ts +3 -0
  288. package/src/constants/solidity.test.ts +41 -0
  289. package/src/constants/solidity.ts +35 -0
  290. package/src/contract.test.ts +32 -0
  291. package/src/contract.ts +68 -0
  292. package/src/ens.test.ts +15 -0
  293. package/src/ens.ts +8 -0
  294. package/src/errors/abi.test.ts +81 -0
  295. package/src/errors/abi.ts +254 -0
  296. package/src/errors/address.test.ts +14 -0
  297. package/src/errors/address.ts +9 -0
  298. package/src/errors/base.test.ts +114 -0
  299. package/src/errors/base.ts +57 -0
  300. package/src/errors/block.test.ts +24 -0
  301. package/src/errors/block.ts +18 -0
  302. package/src/errors/chain.test.ts +46 -0
  303. package/src/errors/chain.ts +33 -0
  304. package/src/errors/contract.test.ts +233 -0
  305. package/src/errors/contract.ts +178 -0
  306. package/src/errors/data.ts +20 -0
  307. package/src/errors/encoding.ts +60 -0
  308. package/src/errors/index.ts +82 -0
  309. package/src/errors/log.ts +8 -0
  310. package/src/errors/request.test.ts +330 -0
  311. package/src/errors/request.ts +163 -0
  312. package/src/errors/rpc.test.ts +87 -0
  313. package/src/errors/rpc.ts +113 -0
  314. package/src/errors/transaction.test.ts +83 -0
  315. package/src/errors/transaction.ts +54 -0
  316. package/src/errors/transport.test.ts +11 -0
  317. package/src/errors/transport.ts +12 -0
  318. package/src/index.test.ts +116 -0
  319. package/src/index.ts +132 -0
  320. package/src/public.test.ts +36 -0
  321. package/src/public.ts +76 -0
  322. package/src/test.test.ts +38 -0
  323. package/src/test.ts +52 -0
  324. package/src/types/block.ts +71 -0
  325. package/src/types/chain.ts +6 -0
  326. package/src/types/contract.ts +497 -0
  327. package/src/types/eip1193.ts +1041 -0
  328. package/src/types/fee.ts +47 -0
  329. package/src/types/filter.ts +8 -0
  330. package/src/types/formatter.ts +23 -0
  331. package/src/types/index.ts +84 -0
  332. package/src/types/log.ts +22 -0
  333. package/src/types/misc.ts +5 -0
  334. package/src/types/multicall.ts +82 -0
  335. package/src/types/rpc.ts +35 -0
  336. package/src/types/transaction.ts +145 -0
  337. package/src/types/utils.ts +88 -0
  338. package/src/types/window.ts +9 -0
  339. package/src/utils/abi/decodeAbi.bench.ts +135 -0
  340. package/src/utils/abi/decodeAbi.test.ts +1614 -0
  341. package/src/utils/abi/decodeAbi.ts +300 -0
  342. package/src/utils/abi/decodeDeployData.test.ts +151 -0
  343. package/src/utils/abi/decodeDeployData.ts +44 -0
  344. package/src/utils/abi/decodeErrorResult.test.ts +230 -0
  345. package/src/utils/abi/decodeErrorResult.ts +45 -0
  346. package/src/utils/abi/decodeEventLog.test.ts +542 -0
  347. package/src/utils/abi/decodeEventLog.ts +107 -0
  348. package/src/utils/abi/decodeFunctionData.test.ts +138 -0
  349. package/src/utils/abi/decodeFunctionData.ts +32 -0
  350. package/src/utils/abi/decodeFunctionResult.test.ts +333 -0
  351. package/src/utils/abi/decodeFunctionResult.ts +57 -0
  352. package/src/utils/abi/encodeAbi.bench.ts +163 -0
  353. package/src/utils/abi/encodeAbi.test.ts +1447 -0
  354. package/src/utils/abi/encodeAbi.ts +273 -0
  355. package/src/utils/abi/encodeDeployData.test.ts +124 -0
  356. package/src/utils/abi/encodeDeployData.ts +40 -0
  357. package/src/utils/abi/encodeErrorResult.test.ts +192 -0
  358. package/src/utils/abi/encodeErrorResult.ts +47 -0
  359. package/src/utils/abi/encodeEventTopics.test.ts +345 -0
  360. package/src/utils/abi/encodeEventTopics.ts +75 -0
  361. package/src/utils/abi/encodeFunctionData.test.ts +138 -0
  362. package/src/utils/abi/encodeFunctionData.ts +42 -0
  363. package/src/utils/abi/encodeFunctionResult.test.ts +279 -0
  364. package/src/utils/abi/encodeFunctionResult.ts +41 -0
  365. package/src/utils/abi/formatAbiItem.test.ts +335 -0
  366. package/src/utils/abi/formatAbiItem.ts +41 -0
  367. package/src/utils/abi/formatAbiItemWithArgs.test.ts +291 -0
  368. package/src/utils/abi/formatAbiItemWithArgs.ts +27 -0
  369. package/src/utils/abi/getAbiItem.test.ts +547 -0
  370. package/src/utils/abi/getAbiItem.ts +95 -0
  371. package/src/utils/abi/index.test.ts +24 -0
  372. package/src/utils/abi/index.ts +48 -0
  373. package/src/utils/address/getAddress.bench.ts +22 -0
  374. package/src/utils/address/getAddress.test.ts +46 -0
  375. package/src/utils/address/getAddress.ts +28 -0
  376. package/src/utils/address/getContractAddress.bench.ts +20 -0
  377. package/src/utils/address/getContractAddress.test.ts +78 -0
  378. package/src/utils/address/getContractAddress.ts +59 -0
  379. package/src/utils/address/index.test.ts +17 -0
  380. package/src/utils/address/index.ts +16 -0
  381. package/src/utils/address/isAddress.test.ts +10 -0
  382. package/src/utils/address/isAddress.ts +10 -0
  383. package/src/utils/address/isAddressEqual.test.ts +55 -0
  384. package/src/utils/address/isAddressEqual.ts +6 -0
  385. package/src/utils/buildRequest.test.ts +428 -0
  386. package/src/utils/buildRequest.ts +72 -0
  387. package/src/utils/chain.test.ts +43 -0
  388. package/src/utils/chain.ts +8 -0
  389. package/src/utils/contract/extractFunctionParts.test.ts +109 -0
  390. package/src/utils/contract/extractFunctionParts.ts +27 -0
  391. package/src/utils/contract/getContractError.test.ts +282 -0
  392. package/src/utils/contract/getContractError.ts +58 -0
  393. package/src/utils/contract/index.test.ts +15 -0
  394. package/src/utils/contract/index.ts +8 -0
  395. package/src/utils/data/concat.test.ts +35 -0
  396. package/src/utils/data/concat.ts +34 -0
  397. package/src/utils/data/index.test.ts +23 -0
  398. package/src/utils/data/index.ts +13 -0
  399. package/src/utils/data/isBytes.test.ts +9 -0
  400. package/src/utils/data/isBytes.ts +7 -0
  401. package/src/utils/data/isHex.test.ts +13 -0
  402. package/src/utils/data/isHex.ts +5 -0
  403. package/src/utils/data/pad.bench.ts +30 -0
  404. package/src/utils/data/pad.test.ts +367 -0
  405. package/src/utils/data/pad.ts +53 -0
  406. package/src/utils/data/size.test.ts +18 -0
  407. package/src/utils/data/size.ts +13 -0
  408. package/src/utils/data/slice.test.ts +203 -0
  409. package/src/utils/data/slice.ts +60 -0
  410. package/src/utils/data/trim.bench.ts +34 -0
  411. package/src/utils/data/trim.test.ts +175 -0
  412. package/src/utils/data/trim.ts +33 -0
  413. package/src/utils/encoding/decodeBytes.bench.ts +40 -0
  414. package/src/utils/encoding/decodeBytes.test.ts +144 -0
  415. package/src/utils/encoding/decodeBytes.ts +63 -0
  416. package/src/utils/encoding/decodeHex.bench.ts +24 -0
  417. package/src/utils/encoding/decodeHex.test.ts +167 -0
  418. package/src/utils/encoding/decodeHex.ts +76 -0
  419. package/src/utils/encoding/decodeRlp.bench.ts +34 -0
  420. package/src/utils/encoding/decodeRlp.test.ts +350 -0
  421. package/src/utils/encoding/decodeRlp.ts +121 -0
  422. package/src/utils/encoding/encodeBytes.bench.ts +29 -0
  423. package/src/utils/encoding/encodeBytes.test.ts +676 -0
  424. package/src/utils/encoding/encodeBytes.ts +59 -0
  425. package/src/utils/encoding/encodeHex.bench.ts +49 -0
  426. package/src/utils/encoding/encodeHex.test.ts +232 -0
  427. package/src/utils/encoding/encodeHex.ts +104 -0
  428. package/src/utils/encoding/encodeRlp.bench.ts +54 -0
  429. package/src/utils/encoding/encodeRlp.test.ts +254 -0
  430. package/src/utils/encoding/encodeRlp.ts +48 -0
  431. package/src/utils/encoding/index.test.ts +32 -0
  432. package/src/utils/encoding/index.ts +36 -0
  433. package/src/utils/ens/index.test.ts +14 -0
  434. package/src/utils/ens/index.ts +7 -0
  435. package/src/utils/ens/labelhash.test.ts +55 -0
  436. package/src/utils/ens/labelhash.ts +16 -0
  437. package/src/utils/ens/namehash.test.ts +65 -0
  438. package/src/utils/ens/namehash.ts +28 -0
  439. package/src/utils/ens/normalize.bench.ts +14 -0
  440. package/src/utils/ens/normalize.test.ts +35 -0
  441. package/src/utils/ens/normalize.ts +14 -0
  442. package/src/utils/ens/packetToBytes.test.ts +11 -0
  443. package/src/utils/ens/packetToBytes.ts +29 -0
  444. package/src/utils/formatters/block.bench.ts +51 -0
  445. package/src/utils/formatters/block.test.ts +115 -0
  446. package/src/utils/formatters/block.ts +37 -0
  447. package/src/utils/formatters/extract.test.ts +14 -0
  448. package/src/utils/formatters/extract.ts +18 -0
  449. package/src/utils/formatters/feeHistory.test.ts +66 -0
  450. package/src/utils/formatters/feeHistory.ts +12 -0
  451. package/src/utils/formatters/format.test.ts +93 -0
  452. package/src/utils/formatters/format.ts +90 -0
  453. package/src/utils/formatters/index.test.ts +27 -0
  454. package/src/utils/formatters/index.ts +34 -0
  455. package/src/utils/formatters/log.test.ts +79 -0
  456. package/src/utils/formatters/log.ts +12 -0
  457. package/src/utils/formatters/transaction.test.ts +271 -0
  458. package/src/utils/formatters/transaction.ts +63 -0
  459. package/src/utils/formatters/transactionReceipt.bench.ts +73 -0
  460. package/src/utils/formatters/transactionReceipt.test.ts +151 -0
  461. package/src/utils/formatters/transactionReceipt.ts +63 -0
  462. package/src/utils/formatters/transactionRequest.bench.ts +29 -0
  463. package/src/utils/formatters/transactionRequest.test.ts +237 -0
  464. package/src/utils/formatters/transactionRequest.ts +56 -0
  465. package/src/utils/hash/getEventSignature.test.ts +61 -0
  466. package/src/utils/hash/getEventSignature.ts +4 -0
  467. package/src/utils/hash/getFunctionSignature.test.ts +22 -0
  468. package/src/utils/hash/getFunctionSignature.ts +5 -0
  469. package/src/utils/hash/hashFunction.test.ts +65 -0
  470. package/src/utils/hash/hashFunction.ts +12 -0
  471. package/src/utils/hash/index.test.ts +13 -0
  472. package/src/utils/hash/index.ts +5 -0
  473. package/src/utils/hash/keccak256.test.ts +59 -0
  474. package/src/utils/hash/keccak256.ts +21 -0
  475. package/src/utils/index.test.ts +111 -0
  476. package/src/utils/index.ts +142 -0
  477. package/src/utils/observe.test.ts +176 -0
  478. package/src/utils/observe.ts +66 -0
  479. package/src/utils/poll.test.ts +127 -0
  480. package/src/utils/poll.ts +42 -0
  481. package/src/utils/promise/index.test.ts +14 -0
  482. package/src/utils/promise/index.ts +3 -0
  483. package/src/utils/promise/withCache.test.ts +97 -0
  484. package/src/utils/promise/withCache.ts +73 -0
  485. package/src/utils/promise/withRetry.test.ts +231 -0
  486. package/src/utils/promise/withRetry.ts +61 -0
  487. package/src/utils/promise/withTimeout.test.ts +37 -0
  488. package/src/utils/promise/withTimeout.ts +39 -0
  489. package/src/utils/rpc.test.ts +990 -0
  490. package/src/utils/rpc.ts +294 -0
  491. package/src/utils/stringify.test.ts +13 -0
  492. package/src/utils/stringify.ts +5 -0
  493. package/src/utils/uid.ts +14 -0
  494. package/src/utils/unit/constants.test.ts +22 -0
  495. package/src/utils/unit/constants.ts +12 -0
  496. package/src/utils/unit/formatEther.test.ts +75 -0
  497. package/src/utils/unit/formatEther.ts +6 -0
  498. package/src/utils/unit/formatGwei.test.ts +32 -0
  499. package/src/utils/unit/formatGwei.ts +6 -0
  500. package/src/utils/unit/formatUnit.bench.ts +21 -0
  501. package/src/utils/unit/formatUnit.test.ts +40 -0
  502. package/src/utils/unit/formatUnit.ts +16 -0
  503. package/src/utils/unit/index.test.ts +28 -0
  504. package/src/utils/unit/index.ts +7 -0
  505. package/src/utils/unit/parseEther.test.ts +126 -0
  506. package/src/utils/unit/parseEther.ts +6 -0
  507. package/src/utils/unit/parseGwei.test.ts +50 -0
  508. package/src/utils/unit/parseGwei.ts +6 -0
  509. package/src/utils/unit/parseUnit.bench.ts +21 -0
  510. package/src/utils/unit/parseUnit.test.ts +54 -0
  511. package/src/utils/unit/parseUnit.ts +27 -0
  512. package/src/utils/wait.ts +3 -0
  513. package/src/wallet.test.ts +19 -0
  514. package/src/wallet.ts +23 -0
  515. package/src/window.ts +1 -0
  516. package/wallet/package.json +4 -0
  517. package/actions/package.json +0 -4
  518. package/clients/package.json +0 -4
  519. package/dist/actions/index.d.ts +0 -8
  520. package/dist/actions/index.js +0 -125
  521. package/dist/actions/index.mjs +0 -125
  522. package/dist/chunk-CWCWWGBC.mjs +0 -258
  523. package/dist/chunk-SGTIBKHG.js +0 -258
  524. package/dist/clients/index.d.ts +0 -7
  525. package/dist/clients/index.js +0 -23
  526. package/dist/clients/index.mjs +0 -23
  527. package/dist/createWalletClient-d612fe08.d.ts +0 -130
  528. package/dist/parseGwei-7c87ff41.d.ts +0 -278
  529. package/dist/rpc-26932bae.d.ts +0 -61
  530. package/dist/transactionRequest-08d30731.d.ts +0 -132
  531. package/dist/watchAsset-bc6373f4.d.ts +0 -534
  532. package/dist/webSocket-7f88e9e0.d.ts +0 -83
@@ -0,0 +1,990 @@
1
+ import { describe, expect, test } from 'vitest'
2
+ import WebSocket from 'isomorphic-ws'
3
+
4
+ import { createHttpServer, initialBlockNumber, localWsUrl } from '../_test'
5
+
6
+ import { localhost, mainnet } from '../chains'
7
+ import { numberToHex } from './encoding'
8
+
9
+ import type { RpcResponse } from './rpc'
10
+ import { getSocket, rpc } from './rpc'
11
+ import { wait } from './wait'
12
+
13
+ test('rpc', () => {
14
+ expect(rpc).toMatchInlineSnapshot(`
15
+ {
16
+ "http": [Function],
17
+ "webSocket": [Function],
18
+ "webSocketAsync": [Function],
19
+ }
20
+ `)
21
+ })
22
+
23
+ describe('http', () => {
24
+ test('valid request', async () => {
25
+ expect(
26
+ await rpc.http(localhost.rpcUrls.default.http[0], {
27
+ body: { method: 'web3_clientVersion' },
28
+ }),
29
+ ).toMatchInlineSnapshot(`
30
+ {
31
+ "id": 0,
32
+ "jsonrpc": "2.0",
33
+ "result": "anvil/v0.1.0",
34
+ }
35
+ `)
36
+ })
37
+
38
+ test('valid request w/ incremented id', async () => {
39
+ expect(
40
+ await rpc.http(localhost.rpcUrls.default.http[0], {
41
+ body: { method: 'web3_clientVersion' },
42
+ }),
43
+ ).toMatchInlineSnapshot(`
44
+ {
45
+ "id": 1,
46
+ "jsonrpc": "2.0",
47
+ "result": "anvil/v0.1.0",
48
+ }
49
+ `)
50
+ })
51
+
52
+ test('invalid rpc params', async () => {
53
+ await expect(() =>
54
+ rpc.http(localhost.rpcUrls.default.http[0], {
55
+ body: { method: 'eth_getBlockByHash', params: ['0x0', false] },
56
+ }),
57
+ ).rejects.toThrowError(
58
+ 'invalid length 1, expected a (both 0x-prefixed or not) hex string',
59
+ )
60
+ })
61
+
62
+ test('invalid request', async () => {
63
+ expect(
64
+ rpc.http(localhost.rpcUrls.default.http[0], {
65
+ body: { method: 'eth_wagmi' },
66
+ }),
67
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
68
+ "RPC Request failed.
69
+
70
+ URL: http://127.0.0.1:8545
71
+ Request body: {\\"method\\":\\"eth_wagmi\\"}
72
+
73
+ Details: Method not found
74
+ Version: viem@1.0.2"
75
+ `)
76
+ })
77
+
78
+ test('serial requests', async () => {
79
+ let response: any = []
80
+ for (const i in Array.from({ length: 10 })) {
81
+ response.push(
82
+ await rpc.http(localhost.rpcUrls.default.http[0], {
83
+ body: {
84
+ method: 'eth_getBlockByNumber',
85
+ params: [numberToHex(initialBlockNumber - BigInt(i)), false],
86
+ },
87
+ }),
88
+ )
89
+ }
90
+ expect(response.map((r: any) => r.result.number)).toEqual(
91
+ Array.from({ length: 10 }).map((_, i) =>
92
+ numberToHex(initialBlockNumber - BigInt(i)),
93
+ ),
94
+ )
95
+ })
96
+
97
+ test('parallel requests', async () => {
98
+ await wait(500)
99
+ const response = await Promise.all(
100
+ Array.from({ length: 50 }).map(async (_, i) => {
101
+ return await rpc.http(localhost.rpcUrls.default.http[0], {
102
+ body: {
103
+ method: 'eth_getBlockByNumber',
104
+ params: [numberToHex(initialBlockNumber - BigInt(i)), false],
105
+ },
106
+ })
107
+ }),
108
+ )
109
+ expect(response.map((r) => r.result.number)).toEqual(
110
+ Array.from({ length: 50 }).map((_, i) =>
111
+ numberToHex(initialBlockNumber - BigInt(i)),
112
+ ),
113
+ )
114
+ await wait(500)
115
+ })
116
+
117
+ test('http error', async () => {
118
+ let retryCount = -1
119
+ const server = await createHttpServer((req, res) => {
120
+ retryCount++
121
+ res.writeHead(500, {
122
+ 'Content-Type': 'application/json',
123
+ })
124
+ res.end(JSON.stringify({ error: 'ngmi' }))
125
+ })
126
+
127
+ await expect(() =>
128
+ rpc.http(server.url, {
129
+ body: {
130
+ method: 'eth_getBlockByNumber',
131
+ params: [numberToHex(initialBlockNumber), false],
132
+ },
133
+ retryCount: 0,
134
+ }),
135
+ ).rejects.toThrowError(`Details: "ngmi"`)
136
+ expect(retryCount).toBe(0)
137
+ })
138
+
139
+ test('http error', async () => {
140
+ let retryCount = -1
141
+ const server = await createHttpServer((req, res) => {
142
+ retryCount++
143
+ res.writeHead(500, {
144
+ 'Content-Type': 'application/json',
145
+ })
146
+ res.end(JSON.stringify({}))
147
+ })
148
+
149
+ await expect(() =>
150
+ rpc.http(server.url, {
151
+ body: {
152
+ method: 'eth_getBlockByNumber',
153
+ params: [numberToHex(initialBlockNumber), false],
154
+ },
155
+ retryCount: 0,
156
+ }),
157
+ ).rejects.toThrowError('Details: Internal Server Error')
158
+ expect(retryCount).toBe(0)
159
+ })
160
+
161
+ test('timeout', async () => {
162
+ try {
163
+ await rpc.http(mainnet.rpcUrls.default.http[0], {
164
+ body: {
165
+ method: 'eth_getBlockByNumber',
166
+ params: [numberToHex(initialBlockNumber), false],
167
+ },
168
+ timeout: 10,
169
+ })
170
+ } catch (err) {
171
+ expect(err).toMatchInlineSnapshot(
172
+ `
173
+ [TimeoutError: The request took too long to respond.
174
+
175
+ URL: https://cloudflare-eth.com
176
+ Request body: {"method":"eth_getBlockByNumber","params":["0xf86cc2",false]}
177
+
178
+ Details: The request timed out.
179
+ Version: viem@1.0.2]
180
+ `,
181
+ )
182
+ }
183
+ })
184
+
185
+ test('retries (500 status code)', async () => {
186
+ let retryCount = -1
187
+
188
+ const server = await createHttpServer((req, res) => {
189
+ retryCount++
190
+ res.writeHead(500)
191
+ res.end('ngmi')
192
+ })
193
+
194
+ await expect(() =>
195
+ rpc.http(server.url, {
196
+ body: {
197
+ method: 'eth_getBlockByNumber',
198
+ params: [numberToHex(initialBlockNumber), false],
199
+ },
200
+ retryCount: 2,
201
+ }),
202
+ ).rejects.toThrowError('HTTP request failed.')
203
+ expect(retryCount).toBe(2)
204
+ })
205
+
206
+ test('retries (408 status code)', async () => {
207
+ let retryCount = -1
208
+ const server = await createHttpServer((req, res) => {
209
+ retryCount++
210
+ res.writeHead(408, {
211
+ 'Content-Type': 'application/json',
212
+ })
213
+ res.end(JSON.stringify({ error: 'ngmi' }))
214
+ })
215
+
216
+ await expect(() =>
217
+ rpc.http(server.url, {
218
+ body: {
219
+ method: 'eth_getBlockByNumber',
220
+ params: [numberToHex(initialBlockNumber), false],
221
+ },
222
+ retryCount: 2,
223
+ }),
224
+ ).rejects.toThrowError('HTTP request failed.')
225
+ expect(retryCount).toBe(2)
226
+ })
227
+
228
+ test('retries (408 status code)', async () => {
229
+ let retryCount = -1
230
+ const server = await createHttpServer((req, res) => {
231
+ retryCount++
232
+ res.writeHead(408, {
233
+ 'Content-Type': 'application/json',
234
+ })
235
+ res.end(JSON.stringify({ error: 'ngmi' }))
236
+ })
237
+
238
+ await expect(() =>
239
+ rpc.http(server.url, {
240
+ body: {
241
+ method: 'eth_getBlockByNumber',
242
+ params: [numberToHex(initialBlockNumber), false],
243
+ },
244
+ retryCount: 2,
245
+ }),
246
+ ).rejects.toThrowError('HTTP request failed.')
247
+ expect(retryCount).toBe(2)
248
+ })
249
+
250
+ test('does not retry for 401', async () => {
251
+ let retryCount = -1
252
+ const server = await createHttpServer((req, res) => {
253
+ retryCount++
254
+ res.writeHead(401, {
255
+ 'Content-Type': 'application/json',
256
+ })
257
+ res.end(JSON.stringify({ error: 'ngmi' }))
258
+ })
259
+
260
+ await expect(() =>
261
+ rpc.http(server.url, {
262
+ body: {
263
+ method: 'eth_getBlockByNumber',
264
+ params: [numberToHex(initialBlockNumber), false],
265
+ },
266
+ retryCount: 2,
267
+ }),
268
+ ).rejects.toThrowError('HTTP request failed.')
269
+ expect(retryCount).toBe(0)
270
+ })
271
+
272
+ test('retries (500 status code w/ Retry-After)', async () => {
273
+ let retryCount = -1
274
+
275
+ const server = await createHttpServer((req, res) => {
276
+ retryCount++
277
+ res.writeHead(500, {
278
+ 'Retry-After': 1,
279
+ })
280
+ res.end('ngmi')
281
+ })
282
+
283
+ await expect(() =>
284
+ rpc.http(server.url, {
285
+ body: {
286
+ method: 'eth_getBlockByNumber',
287
+ params: [numberToHex(initialBlockNumber), false],
288
+ },
289
+ retryCount: 2,
290
+ }),
291
+ ).rejects.toThrowError('HTTP request failed.')
292
+ expect(retryCount).toBe(2)
293
+ })
294
+ })
295
+
296
+ describe('getSocket', () => {
297
+ test('creates WebSocket instance', async () => {
298
+ const socket = await getSocket(localWsUrl)
299
+ expect(socket).toBeDefined()
300
+ expect(socket.readyState).toEqual(WebSocket.OPEN)
301
+ })
302
+
303
+ test('multiple invocations on a url only opens one socket', async () => {
304
+ const [socket, socket2, socket3, socket4] = await Promise.all([
305
+ getSocket(localWsUrl),
306
+ getSocket(localWsUrl),
307
+ getSocket(localWsUrl),
308
+ getSocket(localWsUrl),
309
+ ])
310
+ expect(socket).toBe(socket2)
311
+ expect(socket).toBe(socket3)
312
+ expect(socket).toBe(socket4)
313
+ })
314
+ })
315
+
316
+ describe('webSocket', () => {
317
+ test('valid request', async () => {
318
+ const socket = await getSocket(localWsUrl)
319
+ const { id, ...version } = await new Promise<any>((resolve, reject) =>
320
+ rpc.webSocket(socket, {
321
+ body: { method: 'web3_clientVersion' },
322
+ onData: resolve,
323
+ onError: reject,
324
+ }),
325
+ )
326
+ expect(id).toBeDefined()
327
+ expect(version).toMatchInlineSnapshot(`
328
+ {
329
+ "jsonrpc": "2.0",
330
+ "result": "anvil/v0.1.0",
331
+ }
332
+ `)
333
+ expect(socket.requests.size).toBe(0)
334
+ })
335
+
336
+ test('valid request', async () => {
337
+ const socket = await getSocket(localWsUrl)
338
+ const { id, ...block } = await new Promise<any>((resolve, reject) =>
339
+ rpc.webSocket(socket, {
340
+ body: {
341
+ method: 'eth_getBlockByNumber',
342
+ params: [numberToHex(initialBlockNumber), false],
343
+ },
344
+ onData: resolve,
345
+ onError: reject,
346
+ }),
347
+ )
348
+ expect(id).toBeDefined()
349
+ expect(block).toMatchInlineSnapshot(`
350
+ {
351
+ "jsonrpc": "2.0",
352
+ "result": {
353
+ "baseFeePerGas": "0x2f9b711b9",
354
+ "difficulty": "0x0",
355
+ "extraData": "0x6265617665726275696c642e6f7267",
356
+ "gasLimit": "0x1c9c380",
357
+ "gasUsed": "0x120bbd0",
358
+ "hash": "0x3f900200152e9e7731b6adfb4a9a5cf43c71f3ff600962efe544f3b1d9466fac",
359
+ "logsBloom": "0xeeec4ae861e4d9e400eb97e3c26253a37852273ababa634d97d300674e269f1a567884ba980b255ac72c1d787a129b8786e9b4201f21316cb6e8274545adbe4fb9264bf2f936df28efcdf72ff393486d4adae488455c34ed5c7d3e158d070938db650d71021a42da46105b004f05ad1fd614768209bc8ef44e0ada968a384a791639509379623bcbc1fc8cb876e3282969c5b9abc354b159678dd87153b6aecbbec06d7f3eb37a9a98596ce72c638ac7c2788ea00a36f0cfb96f0ec314bc8b4a473b955fc5c4dbdba1aaddb5a9c412165169cae009ae09561a79ab8f822cfd533d73bd988dd42dc4185618f62b310b40173f62b628fe2fe5958e3b14acc60860",
360
+ "miner": "0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5",
361
+ "mixHash": "0xd7de5432d0e9545465317f2f0f82f6f60dfc35055103378c2b4c19a9218e7c75",
362
+ "nonce": "0x0000000000000000",
363
+ "number": "0xf86cc2",
364
+ "parentHash": "0xb932f77cf770d1d1c8f861153eec1e990f5d56b6ffdb4ac06aef3cca51ef37d4",
365
+ "receiptsRoot": "0x7c577c7a2c1649735565691411b9236e1946dc74f3f474d15c014bece0104de8",
366
+ "sealFields": [],
367
+ "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
368
+ "size": "0x18011",
369
+ "stateRoot": "0x651162a87a2905c6f37ab5f0a2676f9cd8fc5ff618cb5c1a89bf25ddea7f391c",
370
+ "timestamp": "0x63abc18b",
371
+ "totalDifficulty": "0xc70d815d562d3cfa955",
372
+ "transactions": [
373
+ "0x1351de11f81a077cd300914e278c870c3df5b26d3f3b2a4a3f8db76bc138e7d3",
374
+ "0x7d5c80f38b2e706aa3bd19b234e6026c8a4c0543bf299dfe609193693ac27dfb",
375
+ "0xc986d00394b3aea84f19906037be219456f13894c0fcfecbd242b36d52a0fa01",
376
+ "0x73271cf06de97fdbbf0be2bb13b9376a98b1715b6d463c81f5ce73a9988b6f5c",
377
+ "0x48c27153e0fd95de6bb7858dc42ff2d16aa0123ff6f4839dda23da82c170df13",
378
+ "0xb901cc43954131517926708106398c5c0c3c77c2550b18fb7bd6eb45a6b39284",
379
+ "0xc6d0d2bf4e46725ed595acdc8bc841994d1e63500c0c06671bc19379c5f111dd",
380
+ "0xb05036fbb0125a493090289331e0b9d44c8ebb3f7852c0a1657ff9e0fce0f51f",
381
+ "0x14bbc701396fffe3b212eb96af063cb97e05ee36c98b133da22a5968a4b38707",
382
+ "0x6b96c5431807ef6792333f1e448dc52d72d24b1460879da6b88a94858bc27a12",
383
+ "0xda1f70f856e3ffc9ed5d5c3c91d8e13b0256931ca759be650407de7053842f4c",
384
+ "0xe52666b85980c7f2cdf1c36ef32a69164c65250109bc9f639ebbc990390c8176",
385
+ "0x5010f98f3ed2110fd40c8b463ad9fa56fe9f026d3bbbfa27a86238ea69084056",
386
+ "0xa554462712447f7edee4cef01317d1d2438200c70f0eafd696d21ae6483472ae",
387
+ "0x4d85ba6c319c5f05768bd42bc3a8509ffb20873c763bacf72b13d6febde479a7",
388
+ "0xaf32af489ae7d94b22cd47c6b1ad44872a5b5781ed329e2e5dc622c1ad9b0be2",
389
+ "0x5be511e63eabbaaeb0436e972e34747edd255e30155d6e943e0c4cc81980efea",
390
+ "0xdad9805520d2eb35019f9f7692750959943a9c1dc9ecf31d234273eb0af93be5",
391
+ "0x33e0a938bdb373ab8a57a03d20faa1fad0b793c86b61cc8cfbd9187f7a7a8f6c",
392
+ "0x552e8b37157fa2fc8576b56e73b314d6001531e00c8c406c25b46c2275d99cb4",
393
+ "0x8a47abc6188d6500b71744d03c68e20b017a33c4291b30eb6c8a1d332b03a654",
394
+ "0xf6a51940f09b38b619958b2955841d6a5c80230a4bfda8266a2c59ebb2722528",
395
+ "0x6d0adc2c20661faa7fab9ab72d09c7688fc61ab1d5d6d2f453b969c820377a2b",
396
+ "0x91963d8420403980eeee8434d1d158dc0e7fb035d0b6bbc0cfa795965a9189c6",
397
+ "0x4bb35a76df1f1b12cdb722f86548061bdcad763a96a0ee1a0bf8f8a3acc4894b",
398
+ "0xbb1be5996b36846b4455ee515e701a8619741e035b89e7abf0b8dccba3d882fc",
399
+ "0x995df00e7dd97dd7d591ebab4a8af2a5689ce67d98378857311715fc0c04e3c4",
400
+ "0x6d0ef7c18c8a79e8c5357ede322c0f3c9bb79b423dcd38d68ece250d6dd90e82",
401
+ "0x5e23f022fe06150e4269e76a0607732d960cec687398d7bb9551e2f396629a54",
402
+ "0xc284f18afa7be933a7c2dd81666553ecb454280d68c5ab368e980e75d18cf341",
403
+ "0x89710dd344aee964826271ee471c290cc07c75f5fa1567d3fb7a5bd7d9c98fd1",
404
+ "0x0c98cd5eeeb28e14eeef72fc71432467b87f5b726adc97372d8a0533023d306b",
405
+ "0xf9a3c04b2f40ca3b42a61988ada325db3ab11bda42ab9cb9c01c685e4d66bc04",
406
+ "0x55531cea77c328a669b76543c20352346172f40d206afe38f25a8e79b1cd89eb",
407
+ "0xb7d3f39769d5e1da93f979809d59fc0950136cfe4e58a59ae322993ad444d787",
408
+ "0x4b3cb165f91b96ba7a90fe7cc1cb5dcf0d8ea379446970c650273f8e11cb5957",
409
+ "0x4778b34dae4eb5de168b9c8aadec570cd8e73ff31f8633d84ebad667b736c5ef",
410
+ "0xa298bfbb6cfd9f9663205aa81032df3f09c4ebdf5ff3411cd4db787429b6d014",
411
+ "0x2b76948313eb52ab9e06b171d9ab6e746d19ef031e5d94bbb7f9d8ec532a9fe8",
412
+ "0xa5835cf94ea79ec5518e4d0400f206e57bcab07696fcea7cf6308cd4c3647cfb",
413
+ "0xfb00b96840d28381ea9d09d185d6bc0882acfba09a5b64997dab030178fee0a1",
414
+ "0x30b4a72ee9e077c57c78cf86d8d2d6efef9f28f84f85eddeca5e35476fe011f8",
415
+ "0x48d8e59134e8e89987b6059bda69d988b19a78e072c6c40dcf25b748d7916aac",
416
+ "0x35af74b2deb8ea65742be1e8b75ad1c49bbbf01d1bfd26037fcaf3cd89926e39",
417
+ "0x6763cf676ad90dfb40a6bd22d54d36a65571874c66b6e1bea3690cad8d051321",
418
+ "0x760054fc96b0f8612dad81cea54de6d55622259a4a022398537d2814ed8ccb17",
419
+ "0x2d58f61719af0756262b390ab0587babadb77da1403695dbb9b58dd5f4148d30",
420
+ "0x6d1277534c5314ac1a7b9c05f92040c53144c45b55676c604304a4e3c4e9e0ac",
421
+ "0xfa5bfaaed054884e849ce6988ab948ad7e98158741013c8da40f280879103125",
422
+ "0xec2c8a649815c8a76a1c9d5ae0a4d2ca5530207dd59c84beb79e643c2b4699de",
423
+ "0x5fc207821af511e130bac12d541562db4f9f956e2d2150cbdcce2ff2b2271dfe",
424
+ "0xb3ca73f157d9837633dd44b86bb7b91fcdfabfeba6339f3cd5e5d2ca0a99054c",
425
+ "0xdcb443a670462f3dc014e721b9b57a68d9288bebc74a29172192099746392cdb",
426
+ "0x815de12d2b3d66a7cb0a29f0a21a597d1d6c5eadd077a2e42543c8266c1c552f",
427
+ "0x5b8ed4cb34ed17d8e82f9037d828b73f3ec09caec6691a4919df7759d02cb989",
428
+ "0xa4d7bcba3b2a421fe3af2ba43f8a30ea662015d8292916dd231bc6b125be8378",
429
+ "0x69def64bae7292bc0a5c72d4b9f14426cc8d7aa12f89ba2fa685f63c466e398e",
430
+ "0xad6f4e025468372f4b6e925584beb95675da74217d6344637443b0f1267af09b",
431
+ "0x7c207ef61607ba16622cf9796156a22a29dab59ed77666ef5b81808fb8feca81",
432
+ "0xc5ac8b92f5216cdd316cc4c28f3cdd6ee6978cb848379c51b8ce6ea5a8c0a231",
433
+ "0x856d42db3f08e9c493d4e0239a5e6e610c58951a87d55eb4c6c7103d1e9818af",
434
+ "0x557775076b85cead00fc6c33417b56743baf7cb301f965dd8e35263d18b860c2",
435
+ "0x930031f6567e75ddbc7061ef851b0c1cb95eecf57c4db559b63e9f78b132011b",
436
+ "0x3d016940fac9cbcb035310141727206a5a7cd936b8ac7ef8ad492f2c35f10b06",
437
+ "0x5cc81c393a2c1523b9a8342eb2a291321ee8c5cd99a0f647570e3cc4fade8a7f",
438
+ "0x75b03ab8d646c483878914bd0c91c1d1a2018f0fa039e72ad35cc9fb657f324e",
439
+ "0xfd38eecb7f9689315484627791d3393d2f7286b40be85c0f44b879cb46710645",
440
+ "0xf2f08c1b2723ac801ec471099071a6d8d60ab0b3847dd14400a88ca6fe2b0804",
441
+ "0xafc9d2533c985139de1e3cda1c3ebdb022456d644dc0b32e05c8ce602cb0308f",
442
+ "0x0f06d0716036c226992ae14def944de3bf651459f7d1a631b88d63bb35db2287",
443
+ "0xc332aa7d2c9459a8149bdd04a0da2552f7fd3871d6dc00c932bb8ca115e3b124",
444
+ "0xcdac2adc326d645b9ecdaf1954da28026957c87873f7e97d6236756395385901",
445
+ "0x890e71419171b6c94acfa3859d9cad0acfae4095a4d4989b2f613e429e4e8f60",
446
+ "0x681ede0467b184ae2fbc17b4d3a78d1eaa4674555494aaf872abe72c1ac10c57",
447
+ "0xdcc80cfc23ad4582fca9b31590dc7badd5104b90e564e6e73718f437118c7f73",
448
+ "0x53421fb3b6ce41428288863ab2983601400662ecee01f25f8005e13edae57be9",
449
+ "0xabc0c5603cce5690d0c66a50e938a13e3ec5a5252345e70348b11276f2d3f3dd",
450
+ "0x9b3f6a66edaf57e527d167569bc28ed14fd74a3b57dda552a98249372c559693",
451
+ "0x1944f7eef251c45eb7a41c3dcbb2e38d05a68c935678d9de83352b2c553583c6",
452
+ "0x37bc6090d2417fba1b1b06c5d1416be4012ca79df2e88d65c0b70fdbea28e85f",
453
+ "0x9e35edc9fd33b00138cb4740aa9fcc67fb4a55639e30e3f55100f6fde63219fa",
454
+ "0x93f72376c013a41bbac041280e426808162ae3c7fff4c86336283a338f98c629",
455
+ "0x74277cfdf9d119e4acc2ac5b91883ade1888dce2d6f27a854ee12301379f7b72",
456
+ "0x98889715672a70ca2e2d7b5c30269523a11ec510cf906d26f842692644265983",
457
+ "0x11265cfc4888c5c00ec3848cbbf6b97c923127a8d71a576d9f40f29aaac3fab1",
458
+ "0x227eafafdbbf1b38cb9b44720780c8730f5fcc963417d214c1b5b3ae15aea8ac",
459
+ "0x789a22790ccc6db1aad0d4fdacef1e99f985083dac5c71684a05984173eb722e",
460
+ "0x7ed24aed7c45de70482f19ce398574cd753d47fa26a5a72f7a85fbaebe1f3247",
461
+ "0x95880d0c34bb3ed909f73dde91f24262724d231256739c79cfb76e5456d2da5e",
462
+ "0x31299e470fc68ea56bd9f04b0cf1a63f56b48ff8475474e784f783db1fecad0c",
463
+ "0x846a23db36d000b6c3dc4c4404daab5e749488273b022819f97250224ce86602",
464
+ "0x011a92b6ae845fca18c3877e71602755983960c424233e3995868afadbb08915",
465
+ "0xba48629772708a411d27be75f1f1b4ce94b5c61f1d5c3f742bf46dd911169ab4",
466
+ "0xfca880cf632eb59cf79326690962288aa469a3f8ea5ed5431a6b3da2bd9524ea",
467
+ "0xb82ecba811355e826346a633ba3f7a924f84ca0f7bab43b39423280539ac3e2e",
468
+ "0x0f05979f9d7725b0dcc01c928d16e83842cc7fb7471827482ea7a912c0d49d13",
469
+ "0x421cfd9ee8c958c87a24dbe2b315d101ed04579287199ca49fec93af3f5c6b44",
470
+ "0x009797083528b2b097b5ed4e86b7a8ce09d4d230bc47ad5fc55056eba992af9c",
471
+ "0xda306790bea2079c8332d113b9c0b2b94d947c11534a8d43844e1742ef3f0b87",
472
+ "0xa7ca2796de5c4cd6ddc53debcde5ce1f97ff04a42679a7dc69cdd3ccef801818",
473
+ "0xf930a383591fb426df5dc75d394368c5708d3fc45f280ed4d4f9893d1b5e0f64",
474
+ "0xb3acc2d780a5fcd79afc84974fb0051ebba73b454053e9a0c3844625aebb7438",
475
+ "0x50b247b9da00fa48d62b10e78e5f139da0169313b7051f328f56d987b7f72635",
476
+ "0xac5c12ce32adffa8c6a39adaa54e4f9921086b1549858ddb8352611a9bc6dfaf",
477
+ "0x211cc2097a9503e2d20a83d2e04bf04e2eae54fcf212de1d7c5c44f1dc2d4f26",
478
+ "0xe81b13eaf7b676a84b028f0d9b015c517ca2d5c1040889fbf76e9213c81f5a13",
479
+ "0x759fdf6ed79a4880c19dc2aeae6f402d3c2548c69a4ff2c414185d50d681a9b3",
480
+ "0x4228cbaa3829b28afc56074a75761bc700547bce00bf62624e33d2561c0b55db",
481
+ "0xcb0f89c3dc21d62b81ff4d1954b7b746d5667c6eb05182c08b9538a1d9e315c8",
482
+ "0x5d0d1c7f0fb49a562150cd818dc7407d944f9d7724c688815dbb745cbd413f0e",
483
+ "0x315b36e3411c3bb8a1c092c80eab9c19fd37db319dfc41befbbce9e78704988f",
484
+ "0x8359dfc29f6fa9e06ba34cfa07b799a9203f17e42d3b5b3d7c48616ae1bd9aeb",
485
+ "0xdc28479bc50ff36814c3272723405be178a67d0ec380719bc5d791031ec0e565",
486
+ "0x3439e8ceba82c5b4a07f7c22be78c9650c88c384fdfb78572a5baa0289f723c7",
487
+ "0xce6487ec2ea20a752cb27b5252faf15c7e75c07c95164a6be6a680e5411417bd",
488
+ "0xda73b97749449576b0b3b406be397babab8ac683d2c63efaadfab98c0b01f6df",
489
+ "0x8335757eabcb45e9de63bd17466223e59885ac9455331acff3035ee841545ffc",
490
+ "0x1d19308d55db9fefe56833ddaa46ebdaefc8374acb944a0cdf0e54612ee823c6",
491
+ "0xbf39356cc9332569595ba559e7a93455d6821f06607b5f81fa9ef497cef8ded4",
492
+ "0x21c53c6633f95c9d09873f882357b9d3c9d578e36ac9ff4522c4f162d8f063c6",
493
+ "0x080e51f918966a1a991fb35bf43f03f3d4b1d059b930f9425d03243909e6627e",
494
+ "0x850bbd853553d4e63e7deae2b46c717f4898eb4cd2ab70b92074ba75e0669b28",
495
+ "0x560bd9e5208ffab137318cb78dd22d022418ef05851559df6373184b6008d921",
496
+ "0x68b994d4812451cd5dd0a6f79ec4af6c55bd81af96e80f398378827bfd2bfc79",
497
+ "0xc8d2c46cfc54c6ee29c4ca9f11ff6775051d59b1c774fd2fa732f92236f535ba",
498
+ "0xb706132112362fe076cca1c33cf4fef2e910f70fe2a453e45b710034059f1757",
499
+ "0xb19912b950a53e2a6b16bfe2e8847f43ba7a3d15993701ebebe0e9c0971ca3dc",
500
+ "0xcc8c01edc1360397cca04b87c4d94819da70fab718dc1c75cad7c43f82502d9e",
501
+ "0x1a10b69ecdfb19ec88477595d14627de4335de63ee04d3273822cb571327f8a8",
502
+ "0xcfab191eed98547c47065c6d3e5759306423f9c2610629adb5df336c7224bddb",
503
+ "0xcf8fdcb00038d10d5fa3c847e4611ffee02ac20ee75ad45841451c9f1410e045",
504
+ "0xe6d72fe86fbfa94a7e03e72d292f8d4bab188b18a4d732b500fc867d84bd86d6",
505
+ ],
506
+ "transactionsRoot": "0xe1aed9562570b4a0f31aebcc7558960f7aeafa3bd2a062977e2c927ff795af27",
507
+ "uncles": [],
508
+ },
509
+ }
510
+ `)
511
+ expect(socket.requests.size).toBe(0)
512
+ })
513
+
514
+ test('invalid request', async () => {
515
+ const socket = await getSocket(localWsUrl)
516
+ await expect(
517
+ () =>
518
+ new Promise<any>((resolve, reject) =>
519
+ rpc.webSocket(socket, {
520
+ body: {
521
+ method: 'wagmi_lol',
522
+ },
523
+ onData: resolve,
524
+ onError: reject,
525
+ }),
526
+ ),
527
+ ).rejects.toThrowError(
528
+ 'data did not match any variant of untagged enum EthRpcCall',
529
+ )
530
+ expect(socket.requests.size).toBe(0)
531
+ })
532
+
533
+ test('invalid request (closing socket)', async () => {
534
+ const socket = await getSocket(localWsUrl)
535
+ await wait(1000)
536
+ socket.close()
537
+ await expect(
538
+ () =>
539
+ new Promise<any>((resolve, reject) =>
540
+ rpc.webSocket(socket, {
541
+ body: {
542
+ method: 'wagmi_lol',
543
+ },
544
+ onData: resolve,
545
+ onError: reject,
546
+ }),
547
+ ),
548
+ ).rejects.toThrowErrorMatchingInlineSnapshot(
549
+ `
550
+ "WebSocket request failed.
551
+
552
+ URL: ws://127.0.0.1:8545/
553
+ Request body: {\\"method\\":\\"wagmi_lol\\"}
554
+
555
+ Details: Socket is closed.
556
+ Version: viem@1.0.2"
557
+ `,
558
+ )
559
+ await wait(100)
560
+ })
561
+
562
+ test('invalid request (closed socket)', async () => {
563
+ const socket = await getSocket(localWsUrl)
564
+ socket.close()
565
+ await wait(1000)
566
+ await expect(
567
+ () =>
568
+ new Promise<any>((resolve, reject) =>
569
+ rpc.webSocket(socket, {
570
+ body: {
571
+ method: 'wagmi_lol',
572
+ },
573
+ onData: resolve,
574
+ onError: reject,
575
+ }),
576
+ ),
577
+ ).rejects.toThrowErrorMatchingInlineSnapshot(
578
+ `
579
+ "WebSocket request failed.
580
+
581
+ URL: ws://127.0.0.1:8545/
582
+ Request body: {\\"method\\":\\"wagmi_lol\\"}
583
+
584
+ Details: Socket is closed.
585
+ Version: viem@1.0.2"
586
+ `,
587
+ )
588
+ })
589
+ })
590
+
591
+ describe('webSocket (subscription)', () => {
592
+ test('basic', async () => {
593
+ const socket = await getSocket(localWsUrl)
594
+ let data_: RpcResponse[] = []
595
+ rpc.webSocket(socket, {
596
+ body: {
597
+ method: 'eth_subscribe',
598
+ params: ['newHeads'],
599
+ },
600
+ onData: (data) => data_.push(data),
601
+ })
602
+ await wait(2000)
603
+ expect(socket.subscriptions.size).toBe(1)
604
+ expect(data_.length).toBe(3)
605
+
606
+ await rpc.webSocketAsync(socket, {
607
+ body: {
608
+ method: 'eth_unsubscribe',
609
+ params: [(data_[0] as any).result],
610
+ },
611
+ })
612
+
613
+ await wait(2000)
614
+ expect(socket.subscriptions.size).toBe(0)
615
+ expect(data_.length).toBe(3)
616
+ })
617
+
618
+ test('multiple', async () => {
619
+ const socket = await getSocket(localWsUrl)
620
+ let s1: RpcResponse[] = []
621
+ rpc.webSocket(socket, {
622
+ body: {
623
+ method: 'eth_subscribe',
624
+ params: ['newHeads'],
625
+ },
626
+ onData: (data) => s1.push(data),
627
+ })
628
+
629
+ let s2: RpcResponse[] = []
630
+ rpc.webSocket(socket, {
631
+ body: {
632
+ method: 'eth_subscribe',
633
+ params: ['newHeads'],
634
+ },
635
+ onData: (data) => s2.push(data),
636
+ })
637
+
638
+ let s3: RpcResponse[] = []
639
+ rpc.webSocket(socket, {
640
+ body: {
641
+ method: 'eth_subscribe',
642
+ params: ['newPendingTransactions'],
643
+ },
644
+ onData: (data) => s3.push(data),
645
+ })
646
+
647
+ await wait(2000)
648
+ expect(socket.requests.size).toBe(0)
649
+ expect(socket.subscriptions.size).toBe(3)
650
+ expect(s1.length).toBe(3)
651
+ expect(s2.length).toBe(3)
652
+ expect(s3.length).toBe(1)
653
+
654
+ await rpc.webSocketAsync(socket, {
655
+ body: {
656
+ method: 'eth_unsubscribe',
657
+ params: [(s1[0] as any).result],
658
+ },
659
+ })
660
+
661
+ await wait(2000)
662
+ expect(socket.requests.size).toBe(0)
663
+ expect(socket.subscriptions.size).toBe(2)
664
+ expect(s1.length).toBe(3)
665
+ expect(s2.length).toBe(5)
666
+ expect(s3.length).toBe(1)
667
+
668
+ await rpc.webSocketAsync(socket, {
669
+ body: {
670
+ method: 'eth_unsubscribe',
671
+ params: [(s2[0] as any).result],
672
+ },
673
+ })
674
+ await rpc.webSocketAsync(socket, {
675
+ body: {
676
+ method: 'eth_unsubscribe',
677
+ params: [(s3[0] as any).result],
678
+ },
679
+ })
680
+
681
+ await wait(2000)
682
+ expect(socket.requests.size).toBe(0)
683
+ expect(socket.subscriptions.size).toBe(0)
684
+ expect(s1.length).toBe(3)
685
+ expect(s2.length).toBe(5)
686
+ expect(s3.length).toBe(1)
687
+ })
688
+
689
+ test('invalid subscription', async () => {
690
+ const socket = await getSocket(localWsUrl)
691
+ let err_: Error | undefined
692
+ rpc.webSocket(socket, {
693
+ body: {
694
+ method: 'eth_subscribe',
695
+ params: ['fakeHeadz'],
696
+ },
697
+ onError: (err) => (err_ = err),
698
+ })
699
+ await wait(500)
700
+ expect(socket.requests.size).toBe(0)
701
+ expect(socket.subscriptions.size).toBe(0)
702
+ expect(err_).toMatchInlineSnapshot(`
703
+ [RpcError: RPC Request failed.
704
+
705
+ URL: ws://127.0.0.1:8545/
706
+ Request body: {"method":"eth_subscribe","params":["fakeHeadz"]}
707
+
708
+ Details: data did not match any variant of untagged enum EthRpcCall
709
+ Version: viem@1.0.2]
710
+ `)
711
+ })
712
+ })
713
+
714
+ describe('webSocketAsync', () => {
715
+ test('valid request', async () => {
716
+ const socket = await getSocket(localWsUrl)
717
+ const { id, ...version } = await rpc.webSocketAsync(socket, {
718
+ body: { method: 'web3_clientVersion' },
719
+ })
720
+ expect(id).toBeDefined()
721
+ expect(version).toMatchInlineSnapshot(`
722
+ {
723
+ "jsonrpc": "2.0",
724
+ "result": "anvil/v0.1.0",
725
+ }
726
+ `)
727
+ expect(socket.requests.size).toBe(0)
728
+ })
729
+
730
+ test('valid request', async () => {
731
+ const socket = await getSocket(localWsUrl)
732
+ const { id, ...block } = await rpc.webSocketAsync(socket, {
733
+ body: {
734
+ method: 'eth_getBlockByNumber',
735
+ params: [numberToHex(initialBlockNumber), false],
736
+ },
737
+ })
738
+ expect(id).toBeDefined()
739
+ expect(block).toMatchInlineSnapshot(`
740
+ {
741
+ "jsonrpc": "2.0",
742
+ "result": {
743
+ "baseFeePerGas": "0x2f9b711b9",
744
+ "difficulty": "0x0",
745
+ "extraData": "0x6265617665726275696c642e6f7267",
746
+ "gasLimit": "0x1c9c380",
747
+ "gasUsed": "0x120bbd0",
748
+ "hash": "0x3f900200152e9e7731b6adfb4a9a5cf43c71f3ff600962efe544f3b1d9466fac",
749
+ "logsBloom": "0xeeec4ae861e4d9e400eb97e3c26253a37852273ababa634d97d300674e269f1a567884ba980b255ac72c1d787a129b8786e9b4201f21316cb6e8274545adbe4fb9264bf2f936df28efcdf72ff393486d4adae488455c34ed5c7d3e158d070938db650d71021a42da46105b004f05ad1fd614768209bc8ef44e0ada968a384a791639509379623bcbc1fc8cb876e3282969c5b9abc354b159678dd87153b6aecbbec06d7f3eb37a9a98596ce72c638ac7c2788ea00a36f0cfb96f0ec314bc8b4a473b955fc5c4dbdba1aaddb5a9c412165169cae009ae09561a79ab8f822cfd533d73bd988dd42dc4185618f62b310b40173f62b628fe2fe5958e3b14acc60860",
750
+ "miner": "0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5",
751
+ "mixHash": "0xd7de5432d0e9545465317f2f0f82f6f60dfc35055103378c2b4c19a9218e7c75",
752
+ "nonce": "0x0000000000000000",
753
+ "number": "0xf86cc2",
754
+ "parentHash": "0xb932f77cf770d1d1c8f861153eec1e990f5d56b6ffdb4ac06aef3cca51ef37d4",
755
+ "receiptsRoot": "0x7c577c7a2c1649735565691411b9236e1946dc74f3f474d15c014bece0104de8",
756
+ "sealFields": [],
757
+ "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
758
+ "size": "0x18011",
759
+ "stateRoot": "0x651162a87a2905c6f37ab5f0a2676f9cd8fc5ff618cb5c1a89bf25ddea7f391c",
760
+ "timestamp": "0x63abc18b",
761
+ "totalDifficulty": "0xc70d815d562d3cfa955",
762
+ "transactions": [
763
+ "0x1351de11f81a077cd300914e278c870c3df5b26d3f3b2a4a3f8db76bc138e7d3",
764
+ "0x7d5c80f38b2e706aa3bd19b234e6026c8a4c0543bf299dfe609193693ac27dfb",
765
+ "0xc986d00394b3aea84f19906037be219456f13894c0fcfecbd242b36d52a0fa01",
766
+ "0x73271cf06de97fdbbf0be2bb13b9376a98b1715b6d463c81f5ce73a9988b6f5c",
767
+ "0x48c27153e0fd95de6bb7858dc42ff2d16aa0123ff6f4839dda23da82c170df13",
768
+ "0xb901cc43954131517926708106398c5c0c3c77c2550b18fb7bd6eb45a6b39284",
769
+ "0xc6d0d2bf4e46725ed595acdc8bc841994d1e63500c0c06671bc19379c5f111dd",
770
+ "0xb05036fbb0125a493090289331e0b9d44c8ebb3f7852c0a1657ff9e0fce0f51f",
771
+ "0x14bbc701396fffe3b212eb96af063cb97e05ee36c98b133da22a5968a4b38707",
772
+ "0x6b96c5431807ef6792333f1e448dc52d72d24b1460879da6b88a94858bc27a12",
773
+ "0xda1f70f856e3ffc9ed5d5c3c91d8e13b0256931ca759be650407de7053842f4c",
774
+ "0xe52666b85980c7f2cdf1c36ef32a69164c65250109bc9f639ebbc990390c8176",
775
+ "0x5010f98f3ed2110fd40c8b463ad9fa56fe9f026d3bbbfa27a86238ea69084056",
776
+ "0xa554462712447f7edee4cef01317d1d2438200c70f0eafd696d21ae6483472ae",
777
+ "0x4d85ba6c319c5f05768bd42bc3a8509ffb20873c763bacf72b13d6febde479a7",
778
+ "0xaf32af489ae7d94b22cd47c6b1ad44872a5b5781ed329e2e5dc622c1ad9b0be2",
779
+ "0x5be511e63eabbaaeb0436e972e34747edd255e30155d6e943e0c4cc81980efea",
780
+ "0xdad9805520d2eb35019f9f7692750959943a9c1dc9ecf31d234273eb0af93be5",
781
+ "0x33e0a938bdb373ab8a57a03d20faa1fad0b793c86b61cc8cfbd9187f7a7a8f6c",
782
+ "0x552e8b37157fa2fc8576b56e73b314d6001531e00c8c406c25b46c2275d99cb4",
783
+ "0x8a47abc6188d6500b71744d03c68e20b017a33c4291b30eb6c8a1d332b03a654",
784
+ "0xf6a51940f09b38b619958b2955841d6a5c80230a4bfda8266a2c59ebb2722528",
785
+ "0x6d0adc2c20661faa7fab9ab72d09c7688fc61ab1d5d6d2f453b969c820377a2b",
786
+ "0x91963d8420403980eeee8434d1d158dc0e7fb035d0b6bbc0cfa795965a9189c6",
787
+ "0x4bb35a76df1f1b12cdb722f86548061bdcad763a96a0ee1a0bf8f8a3acc4894b",
788
+ "0xbb1be5996b36846b4455ee515e701a8619741e035b89e7abf0b8dccba3d882fc",
789
+ "0x995df00e7dd97dd7d591ebab4a8af2a5689ce67d98378857311715fc0c04e3c4",
790
+ "0x6d0ef7c18c8a79e8c5357ede322c0f3c9bb79b423dcd38d68ece250d6dd90e82",
791
+ "0x5e23f022fe06150e4269e76a0607732d960cec687398d7bb9551e2f396629a54",
792
+ "0xc284f18afa7be933a7c2dd81666553ecb454280d68c5ab368e980e75d18cf341",
793
+ "0x89710dd344aee964826271ee471c290cc07c75f5fa1567d3fb7a5bd7d9c98fd1",
794
+ "0x0c98cd5eeeb28e14eeef72fc71432467b87f5b726adc97372d8a0533023d306b",
795
+ "0xf9a3c04b2f40ca3b42a61988ada325db3ab11bda42ab9cb9c01c685e4d66bc04",
796
+ "0x55531cea77c328a669b76543c20352346172f40d206afe38f25a8e79b1cd89eb",
797
+ "0xb7d3f39769d5e1da93f979809d59fc0950136cfe4e58a59ae322993ad444d787",
798
+ "0x4b3cb165f91b96ba7a90fe7cc1cb5dcf0d8ea379446970c650273f8e11cb5957",
799
+ "0x4778b34dae4eb5de168b9c8aadec570cd8e73ff31f8633d84ebad667b736c5ef",
800
+ "0xa298bfbb6cfd9f9663205aa81032df3f09c4ebdf5ff3411cd4db787429b6d014",
801
+ "0x2b76948313eb52ab9e06b171d9ab6e746d19ef031e5d94bbb7f9d8ec532a9fe8",
802
+ "0xa5835cf94ea79ec5518e4d0400f206e57bcab07696fcea7cf6308cd4c3647cfb",
803
+ "0xfb00b96840d28381ea9d09d185d6bc0882acfba09a5b64997dab030178fee0a1",
804
+ "0x30b4a72ee9e077c57c78cf86d8d2d6efef9f28f84f85eddeca5e35476fe011f8",
805
+ "0x48d8e59134e8e89987b6059bda69d988b19a78e072c6c40dcf25b748d7916aac",
806
+ "0x35af74b2deb8ea65742be1e8b75ad1c49bbbf01d1bfd26037fcaf3cd89926e39",
807
+ "0x6763cf676ad90dfb40a6bd22d54d36a65571874c66b6e1bea3690cad8d051321",
808
+ "0x760054fc96b0f8612dad81cea54de6d55622259a4a022398537d2814ed8ccb17",
809
+ "0x2d58f61719af0756262b390ab0587babadb77da1403695dbb9b58dd5f4148d30",
810
+ "0x6d1277534c5314ac1a7b9c05f92040c53144c45b55676c604304a4e3c4e9e0ac",
811
+ "0xfa5bfaaed054884e849ce6988ab948ad7e98158741013c8da40f280879103125",
812
+ "0xec2c8a649815c8a76a1c9d5ae0a4d2ca5530207dd59c84beb79e643c2b4699de",
813
+ "0x5fc207821af511e130bac12d541562db4f9f956e2d2150cbdcce2ff2b2271dfe",
814
+ "0xb3ca73f157d9837633dd44b86bb7b91fcdfabfeba6339f3cd5e5d2ca0a99054c",
815
+ "0xdcb443a670462f3dc014e721b9b57a68d9288bebc74a29172192099746392cdb",
816
+ "0x815de12d2b3d66a7cb0a29f0a21a597d1d6c5eadd077a2e42543c8266c1c552f",
817
+ "0x5b8ed4cb34ed17d8e82f9037d828b73f3ec09caec6691a4919df7759d02cb989",
818
+ "0xa4d7bcba3b2a421fe3af2ba43f8a30ea662015d8292916dd231bc6b125be8378",
819
+ "0x69def64bae7292bc0a5c72d4b9f14426cc8d7aa12f89ba2fa685f63c466e398e",
820
+ "0xad6f4e025468372f4b6e925584beb95675da74217d6344637443b0f1267af09b",
821
+ "0x7c207ef61607ba16622cf9796156a22a29dab59ed77666ef5b81808fb8feca81",
822
+ "0xc5ac8b92f5216cdd316cc4c28f3cdd6ee6978cb848379c51b8ce6ea5a8c0a231",
823
+ "0x856d42db3f08e9c493d4e0239a5e6e610c58951a87d55eb4c6c7103d1e9818af",
824
+ "0x557775076b85cead00fc6c33417b56743baf7cb301f965dd8e35263d18b860c2",
825
+ "0x930031f6567e75ddbc7061ef851b0c1cb95eecf57c4db559b63e9f78b132011b",
826
+ "0x3d016940fac9cbcb035310141727206a5a7cd936b8ac7ef8ad492f2c35f10b06",
827
+ "0x5cc81c393a2c1523b9a8342eb2a291321ee8c5cd99a0f647570e3cc4fade8a7f",
828
+ "0x75b03ab8d646c483878914bd0c91c1d1a2018f0fa039e72ad35cc9fb657f324e",
829
+ "0xfd38eecb7f9689315484627791d3393d2f7286b40be85c0f44b879cb46710645",
830
+ "0xf2f08c1b2723ac801ec471099071a6d8d60ab0b3847dd14400a88ca6fe2b0804",
831
+ "0xafc9d2533c985139de1e3cda1c3ebdb022456d644dc0b32e05c8ce602cb0308f",
832
+ "0x0f06d0716036c226992ae14def944de3bf651459f7d1a631b88d63bb35db2287",
833
+ "0xc332aa7d2c9459a8149bdd04a0da2552f7fd3871d6dc00c932bb8ca115e3b124",
834
+ "0xcdac2adc326d645b9ecdaf1954da28026957c87873f7e97d6236756395385901",
835
+ "0x890e71419171b6c94acfa3859d9cad0acfae4095a4d4989b2f613e429e4e8f60",
836
+ "0x681ede0467b184ae2fbc17b4d3a78d1eaa4674555494aaf872abe72c1ac10c57",
837
+ "0xdcc80cfc23ad4582fca9b31590dc7badd5104b90e564e6e73718f437118c7f73",
838
+ "0x53421fb3b6ce41428288863ab2983601400662ecee01f25f8005e13edae57be9",
839
+ "0xabc0c5603cce5690d0c66a50e938a13e3ec5a5252345e70348b11276f2d3f3dd",
840
+ "0x9b3f6a66edaf57e527d167569bc28ed14fd74a3b57dda552a98249372c559693",
841
+ "0x1944f7eef251c45eb7a41c3dcbb2e38d05a68c935678d9de83352b2c553583c6",
842
+ "0x37bc6090d2417fba1b1b06c5d1416be4012ca79df2e88d65c0b70fdbea28e85f",
843
+ "0x9e35edc9fd33b00138cb4740aa9fcc67fb4a55639e30e3f55100f6fde63219fa",
844
+ "0x93f72376c013a41bbac041280e426808162ae3c7fff4c86336283a338f98c629",
845
+ "0x74277cfdf9d119e4acc2ac5b91883ade1888dce2d6f27a854ee12301379f7b72",
846
+ "0x98889715672a70ca2e2d7b5c30269523a11ec510cf906d26f842692644265983",
847
+ "0x11265cfc4888c5c00ec3848cbbf6b97c923127a8d71a576d9f40f29aaac3fab1",
848
+ "0x227eafafdbbf1b38cb9b44720780c8730f5fcc963417d214c1b5b3ae15aea8ac",
849
+ "0x789a22790ccc6db1aad0d4fdacef1e99f985083dac5c71684a05984173eb722e",
850
+ "0x7ed24aed7c45de70482f19ce398574cd753d47fa26a5a72f7a85fbaebe1f3247",
851
+ "0x95880d0c34bb3ed909f73dde91f24262724d231256739c79cfb76e5456d2da5e",
852
+ "0x31299e470fc68ea56bd9f04b0cf1a63f56b48ff8475474e784f783db1fecad0c",
853
+ "0x846a23db36d000b6c3dc4c4404daab5e749488273b022819f97250224ce86602",
854
+ "0x011a92b6ae845fca18c3877e71602755983960c424233e3995868afadbb08915",
855
+ "0xba48629772708a411d27be75f1f1b4ce94b5c61f1d5c3f742bf46dd911169ab4",
856
+ "0xfca880cf632eb59cf79326690962288aa469a3f8ea5ed5431a6b3da2bd9524ea",
857
+ "0xb82ecba811355e826346a633ba3f7a924f84ca0f7bab43b39423280539ac3e2e",
858
+ "0x0f05979f9d7725b0dcc01c928d16e83842cc7fb7471827482ea7a912c0d49d13",
859
+ "0x421cfd9ee8c958c87a24dbe2b315d101ed04579287199ca49fec93af3f5c6b44",
860
+ "0x009797083528b2b097b5ed4e86b7a8ce09d4d230bc47ad5fc55056eba992af9c",
861
+ "0xda306790bea2079c8332d113b9c0b2b94d947c11534a8d43844e1742ef3f0b87",
862
+ "0xa7ca2796de5c4cd6ddc53debcde5ce1f97ff04a42679a7dc69cdd3ccef801818",
863
+ "0xf930a383591fb426df5dc75d394368c5708d3fc45f280ed4d4f9893d1b5e0f64",
864
+ "0xb3acc2d780a5fcd79afc84974fb0051ebba73b454053e9a0c3844625aebb7438",
865
+ "0x50b247b9da00fa48d62b10e78e5f139da0169313b7051f328f56d987b7f72635",
866
+ "0xac5c12ce32adffa8c6a39adaa54e4f9921086b1549858ddb8352611a9bc6dfaf",
867
+ "0x211cc2097a9503e2d20a83d2e04bf04e2eae54fcf212de1d7c5c44f1dc2d4f26",
868
+ "0xe81b13eaf7b676a84b028f0d9b015c517ca2d5c1040889fbf76e9213c81f5a13",
869
+ "0x759fdf6ed79a4880c19dc2aeae6f402d3c2548c69a4ff2c414185d50d681a9b3",
870
+ "0x4228cbaa3829b28afc56074a75761bc700547bce00bf62624e33d2561c0b55db",
871
+ "0xcb0f89c3dc21d62b81ff4d1954b7b746d5667c6eb05182c08b9538a1d9e315c8",
872
+ "0x5d0d1c7f0fb49a562150cd818dc7407d944f9d7724c688815dbb745cbd413f0e",
873
+ "0x315b36e3411c3bb8a1c092c80eab9c19fd37db319dfc41befbbce9e78704988f",
874
+ "0x8359dfc29f6fa9e06ba34cfa07b799a9203f17e42d3b5b3d7c48616ae1bd9aeb",
875
+ "0xdc28479bc50ff36814c3272723405be178a67d0ec380719bc5d791031ec0e565",
876
+ "0x3439e8ceba82c5b4a07f7c22be78c9650c88c384fdfb78572a5baa0289f723c7",
877
+ "0xce6487ec2ea20a752cb27b5252faf15c7e75c07c95164a6be6a680e5411417bd",
878
+ "0xda73b97749449576b0b3b406be397babab8ac683d2c63efaadfab98c0b01f6df",
879
+ "0x8335757eabcb45e9de63bd17466223e59885ac9455331acff3035ee841545ffc",
880
+ "0x1d19308d55db9fefe56833ddaa46ebdaefc8374acb944a0cdf0e54612ee823c6",
881
+ "0xbf39356cc9332569595ba559e7a93455d6821f06607b5f81fa9ef497cef8ded4",
882
+ "0x21c53c6633f95c9d09873f882357b9d3c9d578e36ac9ff4522c4f162d8f063c6",
883
+ "0x080e51f918966a1a991fb35bf43f03f3d4b1d059b930f9425d03243909e6627e",
884
+ "0x850bbd853553d4e63e7deae2b46c717f4898eb4cd2ab70b92074ba75e0669b28",
885
+ "0x560bd9e5208ffab137318cb78dd22d022418ef05851559df6373184b6008d921",
886
+ "0x68b994d4812451cd5dd0a6f79ec4af6c55bd81af96e80f398378827bfd2bfc79",
887
+ "0xc8d2c46cfc54c6ee29c4ca9f11ff6775051d59b1c774fd2fa732f92236f535ba",
888
+ "0xb706132112362fe076cca1c33cf4fef2e910f70fe2a453e45b710034059f1757",
889
+ "0xb19912b950a53e2a6b16bfe2e8847f43ba7a3d15993701ebebe0e9c0971ca3dc",
890
+ "0xcc8c01edc1360397cca04b87c4d94819da70fab718dc1c75cad7c43f82502d9e",
891
+ "0x1a10b69ecdfb19ec88477595d14627de4335de63ee04d3273822cb571327f8a8",
892
+ "0xcfab191eed98547c47065c6d3e5759306423f9c2610629adb5df336c7224bddb",
893
+ "0xcf8fdcb00038d10d5fa3c847e4611ffee02ac20ee75ad45841451c9f1410e045",
894
+ "0xe6d72fe86fbfa94a7e03e72d292f8d4bab188b18a4d732b500fc867d84bd86d6",
895
+ ],
896
+ "transactionsRoot": "0xe1aed9562570b4a0f31aebcc7558960f7aeafa3bd2a062977e2c927ff795af27",
897
+ "uncles": [],
898
+ },
899
+ }
900
+ `)
901
+ expect(socket.requests.size).toBe(0)
902
+ })
903
+
904
+ test('serial requests', async () => {
905
+ const socket = await getSocket(localWsUrl)
906
+ let response: any = []
907
+ for (const i in Array.from({ length: 10 })) {
908
+ response.push(
909
+ await rpc.webSocketAsync(socket, {
910
+ body: {
911
+ method: 'eth_getBlockByNumber',
912
+ params: [numberToHex(initialBlockNumber - BigInt(i)), false],
913
+ },
914
+ }),
915
+ )
916
+ }
917
+ expect(response.map((r: any) => r.result.number)).toEqual(
918
+ Array.from({ length: 10 }).map((_, i) =>
919
+ numberToHex(initialBlockNumber - BigInt(i)),
920
+ ),
921
+ )
922
+ expect(socket.requests.size).toBe(0)
923
+ })
924
+
925
+ test('parallel requests', async () => {
926
+ await wait(500)
927
+ const socket = await getSocket(localWsUrl)
928
+ const response = await Promise.all(
929
+ Array.from({ length: 100 }).map(async (_, i) => {
930
+ return await rpc.webSocketAsync(socket, {
931
+ body: {
932
+ method: 'eth_getBlockByNumber',
933
+ params: [numberToHex(initialBlockNumber - BigInt(i)), false],
934
+ },
935
+ })
936
+ }),
937
+ )
938
+ expect(response.map((r) => r.result.number)).toEqual(
939
+ Array.from({ length: 100 }).map((_, i) =>
940
+ numberToHex(initialBlockNumber - BigInt(i)),
941
+ ),
942
+ )
943
+ expect(socket.requests.size).toBe(0)
944
+ await wait(500)
945
+ })
946
+
947
+ test('invalid request', async () => {
948
+ const socket = await getSocket(localWsUrl)
949
+ await expect(() =>
950
+ rpc.webSocketAsync(socket, {
951
+ body: {
952
+ method: 'wagmi_lol',
953
+ },
954
+ }),
955
+ ).rejects.toThrowErrorMatchingInlineSnapshot(
956
+ `
957
+ "RPC Request failed.
958
+
959
+ URL: ws://127.0.0.1:8545/
960
+ Request body: {\\"method\\":\\"wagmi_lol\\"}
961
+
962
+ Details: data did not match any variant of untagged enum EthRpcCall
963
+ Version: viem@1.0.2"
964
+ `,
965
+ )
966
+ })
967
+
968
+ test.skip('timeout', async () => {
969
+ const socket = await getSocket(localWsUrl)
970
+ try {
971
+ await rpc.webSocketAsync(socket, {
972
+ body: {
973
+ method: 'eth_getBlockByNumber',
974
+ params: [numberToHex(initialBlockNumber), false],
975
+ },
976
+ timeout: 10,
977
+ })
978
+ } catch (err) {
979
+ expect(err).toMatchInlineSnapshot(`
980
+ [TimeoutError: The request took too long to respond.
981
+
982
+ URL: wss://eth-mainnet.g.alchemy.com/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC
983
+ Request body: {"method":"eth_getBlockByNumber","params":["0xe6e560",false]}
984
+
985
+ Details: The request timed out.
986
+ Version: viem@1.0.2]
987
+ `)
988
+ }
989
+ })
990
+ })