viem 1.0.1 → 1.0.3

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 (376) hide show
  1. package/dist/cjs/chains.js.map +1 -1
  2. package/dist/cjs/errors/base.js +4 -11
  3. package/dist/cjs/errors/base.js.map +1 -1
  4. package/dist/cjs/errors/version.js +1 -1
  5. package/dist/cjs/utils/encoding/toBytes.js.map +1 -1
  6. package/dist/cjs/utils/encoding/toHex.js.map +1 -1
  7. package/dist/cjs/utils/formatters/block.js +3 -1
  8. package/dist/cjs/utils/formatters/block.js.map +1 -1
  9. package/dist/cjs/utils/formatters/transaction.js +3 -1
  10. package/dist/cjs/utils/formatters/transaction.js.map +1 -1
  11. package/dist/cjs/utils/formatters/transactionReceipt.js.map +1 -1
  12. package/dist/cjs/utils/formatters/transactionRequest.js.map +1 -1
  13. package/dist/cjs/utils/hash/getEventSelector.js +5 -1
  14. package/dist/cjs/utils/hash/getEventSelector.js.map +1 -1
  15. package/dist/cjs/utils/hash/getFunctionSelector.js +5 -1
  16. package/dist/cjs/utils/hash/getFunctionSelector.js.map +1 -1
  17. package/dist/cjs/utils/hash/hashFunction.js +5 -1
  18. package/dist/cjs/utils/hash/hashFunction.js.map +1 -1
  19. package/dist/cjs/utils/observe.js.map +1 -1
  20. package/dist/cjs/utils/promise/createBatchScheduler.js.map +1 -1
  21. package/dist/cjs/utils/promise/withCache.js.map +1 -1
  22. package/dist/cjs/utils/rpc.js.map +1 -1
  23. package/dist/cjs/utils/unit/parseUnits.js +1 -2
  24. package/dist/cjs/utils/unit/parseUnits.js.map +1 -1
  25. package/dist/esm/accounts/generateMnemonic.js +7 -0
  26. package/dist/esm/accounts/generateMnemonic.js.map +1 -1
  27. package/dist/esm/accounts/generatePrivateKey.js +5 -0
  28. package/dist/esm/accounts/generatePrivateKey.js.map +1 -1
  29. package/dist/esm/accounts/hdKeyToAccount.js +5 -0
  30. package/dist/esm/accounts/hdKeyToAccount.js.map +1 -1
  31. package/dist/esm/accounts/mnemonicToAccount.js +5 -0
  32. package/dist/esm/accounts/mnemonicToAccount.js.map +1 -1
  33. package/dist/esm/accounts/privateKeyToAccount.js +5 -0
  34. package/dist/esm/accounts/privateKeyToAccount.js.map +1 -1
  35. package/dist/esm/accounts/toAccount.js +5 -0
  36. package/dist/esm/accounts/toAccount.js.map +1 -1
  37. package/dist/esm/accounts/utils/publicKeyToAddress.js +7 -0
  38. package/dist/esm/accounts/utils/publicKeyToAddress.js.map +1 -1
  39. package/dist/esm/accounts/utils/sign.js +8 -0
  40. package/dist/esm/accounts/utils/sign.js.map +1 -1
  41. package/dist/esm/accounts/utils/signMessage.js +6 -0
  42. package/dist/esm/accounts/utils/signMessage.js.map +1 -1
  43. package/dist/esm/accounts/utils/signTypedData.js +6 -0
  44. package/dist/esm/accounts/utils/signTypedData.js.map +1 -1
  45. package/dist/esm/actions/ens/getEnsAddress.js +28 -0
  46. package/dist/esm/actions/ens/getEnsAddress.js.map +1 -1
  47. package/dist/esm/actions/ens/getEnsAvatar.js +28 -0
  48. package/dist/esm/actions/ens/getEnsAvatar.js.map +1 -1
  49. package/dist/esm/actions/ens/getEnsName.js +27 -0
  50. package/dist/esm/actions/ens/getEnsName.js.map +1 -1
  51. package/dist/esm/actions/ens/getEnsResolver.js +28 -0
  52. package/dist/esm/actions/ens/getEnsResolver.js.map +1 -1
  53. package/dist/esm/actions/ens/getEnsText.js +29 -0
  54. package/dist/esm/actions/ens/getEnsText.js.map +1 -1
  55. package/dist/esm/actions/getContract.js +36 -0
  56. package/dist/esm/actions/getContract.js.map +1 -1
  57. package/dist/esm/actions/public/call.js +31 -0
  58. package/dist/esm/actions/public/call.js.map +1 -1
  59. package/dist/esm/actions/public/createBlockFilter.js +21 -0
  60. package/dist/esm/actions/public/createBlockFilter.js.map +1 -1
  61. package/dist/esm/actions/public/createContractEventFilter.js +22 -0
  62. package/dist/esm/actions/public/createContractEventFilter.js.map +1 -1
  63. package/dist/esm/actions/public/createEventFilter.js +23 -0
  64. package/dist/esm/actions/public/createEventFilter.js.map +1 -1
  65. package/dist/esm/actions/public/createPendingTransactionFilter.js +21 -0
  66. package/dist/esm/actions/public/createPendingTransactionFilter.js.map +1 -1
  67. package/dist/esm/actions/public/estimateContractGas.js +27 -0
  68. package/dist/esm/actions/public/estimateContractGas.js.map +1 -1
  69. package/dist/esm/actions/public/estimateGas.js +26 -0
  70. package/dist/esm/actions/public/estimateGas.js.map +1 -1
  71. package/dist/esm/actions/public/getBalance.js +35 -0
  72. package/dist/esm/actions/public/getBalance.js.map +1 -1
  73. package/dist/esm/actions/public/getBlock.js +24 -0
  74. package/dist/esm/actions/public/getBlock.js.map +1 -1
  75. package/dist/esm/actions/public/getBlockNumber.js +23 -0
  76. package/dist/esm/actions/public/getBlockNumber.js.map +1 -1
  77. package/dist/esm/actions/public/getBlockTransactionCount.js +23 -0
  78. package/dist/esm/actions/public/getBlockTransactionCount.js.map +1 -1
  79. package/dist/esm/actions/public/getBytecode.js +23 -0
  80. package/dist/esm/actions/public/getBytecode.js.map +1 -1
  81. package/dist/esm/actions/public/getChainId.js +21 -0
  82. package/dist/esm/actions/public/getChainId.js.map +1 -1
  83. package/dist/esm/actions/public/getFeeHistory.js +24 -0
  84. package/dist/esm/actions/public/getFeeHistory.js.map +1 -1
  85. package/dist/esm/actions/public/getFilterChanges.js +84 -0
  86. package/dist/esm/actions/public/getFilterChanges.js.map +1 -1
  87. package/dist/esm/actions/public/getFilterLogs.js +29 -0
  88. package/dist/esm/actions/public/getFilterLogs.js.map +1 -1
  89. package/dist/esm/actions/public/getGasPrice.js +20 -0
  90. package/dist/esm/actions/public/getGasPrice.js.map +1 -1
  91. package/dist/esm/actions/public/getLogs.js +24 -0
  92. package/dist/esm/actions/public/getLogs.js.map +1 -1
  93. package/dist/esm/actions/public/getStorageAt.js +24 -0
  94. package/dist/esm/actions/public/getStorageAt.js.map +1 -1
  95. package/dist/esm/actions/public/getTransaction.js +24 -0
  96. package/dist/esm/actions/public/getTransaction.js.map +1 -1
  97. package/dist/esm/actions/public/getTransactionConfirmations.js +24 -0
  98. package/dist/esm/actions/public/getTransactionConfirmations.js.map +1 -1
  99. package/dist/esm/actions/public/getTransactionCount.js +23 -0
  100. package/dist/esm/actions/public/getTransactionCount.js.map +1 -1
  101. package/dist/esm/actions/public/getTransactionReceipt.js +24 -0
  102. package/dist/esm/actions/public/getTransactionReceipt.js.map +1 -1
  103. package/dist/esm/actions/public/multicall.js +40 -0
  104. package/dist/esm/actions/public/multicall.js.map +1 -1
  105. package/dist/esm/actions/public/readContract.js +31 -0
  106. package/dist/esm/actions/public/readContract.js.map +1 -1
  107. package/dist/esm/actions/public/simulateContract.js +31 -0
  108. package/dist/esm/actions/public/simulateContract.js.map +1 -1
  109. package/dist/esm/actions/public/uninstallFilter.js +24 -0
  110. package/dist/esm/actions/public/uninstallFilter.js.map +1 -1
  111. package/dist/esm/actions/public/verifyHash.js +10 -0
  112. package/dist/esm/actions/public/verifyHash.js.map +1 -1
  113. package/dist/esm/actions/public/verifyMessage.js +11 -0
  114. package/dist/esm/actions/public/verifyMessage.js.map +1 -1
  115. package/dist/esm/actions/public/verifyTypedData.js +9 -0
  116. package/dist/esm/actions/public/verifyTypedData.js.map +1 -1
  117. package/dist/esm/actions/public/waitForTransactionReceipt.js +52 -0
  118. package/dist/esm/actions/public/waitForTransactionReceipt.js.map +1 -1
  119. package/dist/esm/actions/public/watchBlockNumber.js +31 -0
  120. package/dist/esm/actions/public/watchBlockNumber.js.map +1 -1
  121. package/dist/esm/actions/public/watchBlocks.js +35 -1
  122. package/dist/esm/actions/public/watchBlocks.js.map +1 -1
  123. package/dist/esm/actions/public/watchContractEvent.js +36 -0
  124. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  125. package/dist/esm/actions/public/watchEvent.js +38 -0
  126. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  127. package/dist/esm/actions/public/watchPendingTransactions.js +29 -0
  128. package/dist/esm/actions/public/watchPendingTransactions.js.map +1 -1
  129. package/dist/esm/actions/test/dropTransaction.js +22 -0
  130. package/dist/esm/actions/test/dropTransaction.js.map +1 -1
  131. package/dist/esm/actions/test/getAutomine.js +20 -0
  132. package/dist/esm/actions/test/getAutomine.js.map +1 -1
  133. package/dist/esm/actions/test/getTxpoolContent.js +20 -0
  134. package/dist/esm/actions/test/getTxpoolContent.js.map +1 -1
  135. package/dist/esm/actions/test/getTxpoolStatus.js +20 -0
  136. package/dist/esm/actions/test/getTxpoolStatus.js.map +1 -1
  137. package/dist/esm/actions/test/impersonateAccount.js +22 -0
  138. package/dist/esm/actions/test/impersonateAccount.js.map +1 -1
  139. package/dist/esm/actions/test/increaseTime.js +22 -0
  140. package/dist/esm/actions/test/increaseTime.js.map +1 -1
  141. package/dist/esm/actions/test/inspectTxpool.js +20 -0
  142. package/dist/esm/actions/test/inspectTxpool.js.map +1 -1
  143. package/dist/esm/actions/test/mine.js +20 -0
  144. package/dist/esm/actions/test/mine.js.map +1 -1
  145. package/dist/esm/actions/test/removeBlockTimestampInterval.js +19 -0
  146. package/dist/esm/actions/test/removeBlockTimestampInterval.js.map +1 -1
  147. package/dist/esm/actions/test/reset.js +20 -0
  148. package/dist/esm/actions/test/reset.js.map +1 -1
  149. package/dist/esm/actions/test/revert.js +20 -0
  150. package/dist/esm/actions/test/revert.js.map +1 -1
  151. package/dist/esm/actions/test/sendUnsignedTransaction.js +25 -0
  152. package/dist/esm/actions/test/sendUnsignedTransaction.js.map +1 -1
  153. package/dist/esm/actions/test/setAutomine.js +19 -0
  154. package/dist/esm/actions/test/setAutomine.js.map +1 -1
  155. package/dist/esm/actions/test/setBalance.js +23 -0
  156. package/dist/esm/actions/test/setBalance.js.map +1 -1
  157. package/dist/esm/actions/test/setBlockGasLimit.js +20 -0
  158. package/dist/esm/actions/test/setBlockGasLimit.js.map +1 -1
  159. package/dist/esm/actions/test/setBlockTimestampInterval.js +20 -0
  160. package/dist/esm/actions/test/setBlockTimestampInterval.js.map +1 -1
  161. package/dist/esm/actions/test/setCode.js +23 -0
  162. package/dist/esm/actions/test/setCode.js.map +1 -1
  163. package/dist/esm/actions/test/setCoinbase.js +22 -0
  164. package/dist/esm/actions/test/setCoinbase.js.map +1 -1
  165. package/dist/esm/actions/test/setIntervalMining.js +20 -0
  166. package/dist/esm/actions/test/setIntervalMining.js.map +1 -1
  167. package/dist/esm/actions/test/setLoggingEnabled.js +19 -0
  168. package/dist/esm/actions/test/setLoggingEnabled.js.map +1 -1
  169. package/dist/esm/actions/test/setMinGasPrice.js +24 -0
  170. package/dist/esm/actions/test/setMinGasPrice.js.map +1 -1
  171. package/dist/esm/actions/test/setNextBlockBaseFeePerGas.js +22 -0
  172. package/dist/esm/actions/test/setNextBlockBaseFeePerGas.js.map +1 -1
  173. package/dist/esm/actions/test/setNextBlockTimestamp.js +20 -0
  174. package/dist/esm/actions/test/setNextBlockTimestamp.js.map +1 -1
  175. package/dist/esm/actions/test/setNonce.js +23 -0
  176. package/dist/esm/actions/test/setNonce.js.map +1 -1
  177. package/dist/esm/actions/test/setRpcUrl.js +20 -0
  178. package/dist/esm/actions/test/setRpcUrl.js.map +1 -1
  179. package/dist/esm/actions/test/setStorageAt.js +24 -0
  180. package/dist/esm/actions/test/setStorageAt.js.map +1 -1
  181. package/dist/esm/actions/test/snapshot.js +19 -0
  182. package/dist/esm/actions/test/snapshot.js.map +1 -1
  183. package/dist/esm/actions/test/stopImpersonatingAccount.js +22 -0
  184. package/dist/esm/actions/test/stopImpersonatingAccount.js.map +1 -1
  185. package/dist/esm/actions/wallet/addChain.js +19 -0
  186. package/dist/esm/actions/wallet/addChain.js.map +1 -1
  187. package/dist/esm/actions/wallet/deployContract.js +27 -0
  188. package/dist/esm/actions/wallet/deployContract.js.map +1 -1
  189. package/dist/esm/actions/wallet/getAddresses.js +20 -0
  190. package/dist/esm/actions/wallet/getAddresses.js.map +1 -1
  191. package/dist/esm/actions/wallet/getPermissions.js +20 -0
  192. package/dist/esm/actions/wallet/getPermissions.js.map +1 -1
  193. package/dist/esm/actions/wallet/requestAddresses.js +24 -0
  194. package/dist/esm/actions/wallet/requestAddresses.js.map +1 -1
  195. package/dist/esm/actions/wallet/requestPermissions.js +23 -0
  196. package/dist/esm/actions/wallet/requestPermissions.js.map +1 -1
  197. package/dist/esm/actions/wallet/sendTransaction.js +47 -0
  198. package/dist/esm/actions/wallet/sendTransaction.js.map +1 -1
  199. package/dist/esm/actions/wallet/signMessage.js +46 -0
  200. package/dist/esm/actions/wallet/signMessage.js.map +1 -1
  201. package/dist/esm/actions/wallet/signTypedData.js +100 -0
  202. package/dist/esm/actions/wallet/signTypedData.js.map +1 -1
  203. package/dist/esm/actions/wallet/switchChain.js +20 -0
  204. package/dist/esm/actions/wallet/switchChain.js.map +1 -1
  205. package/dist/esm/actions/wallet/watchAsset.js +28 -0
  206. package/dist/esm/actions/wallet/watchAsset.js.map +1 -1
  207. package/dist/esm/actions/wallet/writeContract.js +50 -0
  208. package/dist/esm/actions/wallet/writeContract.js.map +1 -1
  209. package/dist/esm/chains.js +96 -96
  210. package/dist/esm/chains.js.map +1 -1
  211. package/dist/esm/clients/createClient.js +3 -0
  212. package/dist/esm/clients/createClient.js.map +1 -1
  213. package/dist/esm/clients/createPublicClient.js +19 -0
  214. package/dist/esm/clients/createPublicClient.js.map +1 -1
  215. package/dist/esm/clients/createTestClient.js +23 -0
  216. package/dist/esm/clients/createTestClient.js.map +1 -1
  217. package/dist/esm/clients/createWalletClient.js +36 -0
  218. package/dist/esm/clients/createWalletClient.js.map +1 -1
  219. package/dist/esm/clients/transports/createTransport.js +3 -0
  220. package/dist/esm/clients/transports/createTransport.js.map +1 -1
  221. package/dist/esm/clients/transports/custom.js +3 -0
  222. package/dist/esm/clients/transports/custom.js.map +1 -1
  223. package/dist/esm/clients/transports/fallback.js +11 -0
  224. package/dist/esm/clients/transports/fallback.js.map +1 -1
  225. package/dist/esm/clients/transports/http.js +6 -1
  226. package/dist/esm/clients/transports/http.js.map +1 -1
  227. package/dist/esm/clients/transports/webSocket.js +6 -1
  228. package/dist/esm/clients/transports/webSocket.js.map +1 -1
  229. package/dist/esm/constants/abis.js +6 -0
  230. package/dist/esm/constants/abis.js.map +1 -1
  231. package/dist/esm/constants/solidity.js +1 -0
  232. package/dist/esm/constants/solidity.js.map +1 -1
  233. package/dist/esm/contract.js +0 -1
  234. package/dist/esm/contract.js.map +1 -1
  235. package/dist/esm/errors/base.js +4 -11
  236. package/dist/esm/errors/base.js.map +1 -1
  237. package/dist/esm/errors/node.js +9 -0
  238. package/dist/esm/errors/node.js.map +1 -1
  239. package/dist/esm/errors/rpc.js +103 -0
  240. package/dist/esm/errors/rpc.js.map +1 -1
  241. package/dist/esm/errors/version.js +1 -1
  242. package/dist/esm/index.js +0 -52
  243. package/dist/esm/index.js.map +1 -1
  244. package/dist/esm/package.json +1 -1
  245. package/dist/esm/types/account.js +1 -1
  246. package/dist/esm/types/account.js.map +1 -1
  247. package/dist/esm/types/eip1193.js +2 -0
  248. package/dist/esm/types/eip1193.js.map +1 -1
  249. package/dist/esm/utils/abi/decodeAbiParameters.js +29 -0
  250. package/dist/esm/utils/abi/decodeAbiParameters.js.map +1 -1
  251. package/dist/esm/utils/abi/decodeEventLog.js +2 -0
  252. package/dist/esm/utils/abi/decodeEventLog.js.map +1 -1
  253. package/dist/esm/utils/abi/encodeAbiParameters.js +10 -1
  254. package/dist/esm/utils/abi/encodeAbiParameters.js.map +1 -1
  255. package/dist/esm/utils/abi/getAbiItem.js +7 -0
  256. package/dist/esm/utils/abi/getAbiItem.js.map +1 -1
  257. package/dist/esm/utils/accounts.js +3 -0
  258. package/dist/esm/utils/accounts.js.map +1 -1
  259. package/dist/esm/utils/buildRequest.js +2 -0
  260. package/dist/esm/utils/buildRequest.js.map +1 -1
  261. package/dist/esm/utils/data/size.js +6 -0
  262. package/dist/esm/utils/data/size.js.map +1 -1
  263. package/dist/esm/utils/data/slice.js +21 -0
  264. package/dist/esm/utils/data/slice.js.map +1 -1
  265. package/dist/esm/utils/encoding/fromBytes.js +79 -0
  266. package/dist/esm/utils/encoding/fromBytes.js.map +1 -1
  267. package/dist/esm/utils/encoding/fromHex.js +106 -0
  268. package/dist/esm/utils/encoding/fromHex.js.map +1 -1
  269. package/dist/esm/utils/encoding/toBytes.js +102 -1
  270. package/dist/esm/utils/encoding/toBytes.js.map +1 -1
  271. package/dist/esm/utils/encoding/toHex.js +108 -2
  272. package/dist/esm/utils/encoding/toHex.js.map +1 -1
  273. package/dist/esm/utils/ens/avatar/parseAvatarRecord.js +6 -2
  274. package/dist/esm/utils/ens/avatar/parseAvatarRecord.js.map +1 -1
  275. package/dist/esm/utils/ens/avatar/utils.js +10 -0
  276. package/dist/esm/utils/ens/avatar/utils.js.map +1 -1
  277. package/dist/esm/utils/ens/labelhash.js +9 -0
  278. package/dist/esm/utils/ens/labelhash.js.map +1 -1
  279. package/dist/esm/utils/ens/namehash.js +12 -0
  280. package/dist/esm/utils/ens/namehash.js.map +1 -1
  281. package/dist/esm/utils/ens/normalize.js +10 -0
  282. package/dist/esm/utils/ens/normalize.js.map +1 -1
  283. package/dist/esm/utils/ens/packetToBytes.js +6 -0
  284. package/dist/esm/utils/ens/packetToBytes.js.map +1 -1
  285. package/dist/esm/utils/filters/createFilterRequestScope.js +5 -0
  286. package/dist/esm/utils/filters/createFilterRequestScope.js.map +1 -1
  287. package/dist/esm/utils/formatters/block.js +4 -1
  288. package/dist/esm/utils/formatters/block.js.map +1 -1
  289. package/dist/esm/utils/formatters/extract.js +3 -0
  290. package/dist/esm/utils/formatters/extract.js.map +1 -1
  291. package/dist/esm/utils/formatters/format.js +3 -0
  292. package/dist/esm/utils/formatters/format.js.map +1 -1
  293. package/dist/esm/utils/formatters/transaction.js +3 -1
  294. package/dist/esm/utils/formatters/transaction.js.map +1 -1
  295. package/dist/esm/utils/formatters/transactionReceipt.js +1 -1
  296. package/dist/esm/utils/formatters/transactionReceipt.js.map +1 -1
  297. package/dist/esm/utils/formatters/transactionRequest.js +1 -1
  298. package/dist/esm/utils/formatters/transactionRequest.js.map +1 -1
  299. package/dist/esm/utils/hash/getEventSelector.js +6 -2
  300. package/dist/esm/utils/hash/getEventSelector.js.map +1 -1
  301. package/dist/esm/utils/hash/getFunctionSelector.js +6 -2
  302. package/dist/esm/utils/hash/getFunctionSelector.js.map +1 -1
  303. package/dist/esm/utils/hash/hashFunction.js +3 -0
  304. package/dist/esm/utils/hash/hashFunction.js.map +1 -1
  305. package/dist/esm/utils/observe.js +7 -2
  306. package/dist/esm/utils/observe.js.map +1 -1
  307. package/dist/esm/utils/poll.js +3 -0
  308. package/dist/esm/utils/poll.js.map +1 -1
  309. package/dist/esm/utils/promise/createBatchScheduler.js +1 -1
  310. package/dist/esm/utils/promise/createBatchScheduler.js.map +1 -1
  311. package/dist/esm/utils/promise/withCache.js +15 -2
  312. package/dist/esm/utils/promise/withCache.js.map +1 -1
  313. package/dist/esm/utils/regex.js +4 -0
  314. package/dist/esm/utils/regex.js.map +1 -1
  315. package/dist/esm/utils/rpc.js +14 -1
  316. package/dist/esm/utils/rpc.js.map +1 -1
  317. package/dist/esm/utils/signature/hashTypedData.js +3 -0
  318. package/dist/esm/utils/signature/hashTypedData.js.map +1 -1
  319. package/dist/esm/utils/signature/recoverPublicKey.js +2 -0
  320. package/dist/esm/utils/signature/recoverPublicKey.js.map +1 -1
  321. package/dist/esm/utils/signature/verifyMessage.js +12 -0
  322. package/dist/esm/utils/signature/verifyMessage.js.map +1 -1
  323. package/dist/esm/utils/signature/verifyTypedData.js +12 -0
  324. package/dist/esm/utils/signature/verifyTypedData.js.map +1 -1
  325. package/dist/esm/utils/transaction/prepareRequest.js +5 -1
  326. package/dist/esm/utils/transaction/prepareRequest.js.map +1 -1
  327. package/dist/esm/utils/transaction/serializeTransaction.js +4 -2
  328. package/dist/esm/utils/transaction/serializeTransaction.js.map +1 -1
  329. package/dist/esm/utils/typedData.js +4 -0
  330. package/dist/esm/utils/typedData.js.map +1 -1
  331. package/dist/esm/utils/unit/parseUnits.js +3 -2
  332. package/dist/esm/utils/unit/parseUnits.js.map +1 -1
  333. package/dist/types/actions/public/getBlockNumber.d.ts +2 -2
  334. package/dist/types/actions/public/getBlockNumber.d.ts.map +1 -1
  335. package/dist/types/chains.d.ts.map +1 -1
  336. package/dist/types/contract.d.ts +1 -1
  337. package/dist/types/contract.d.ts.map +1 -1
  338. package/dist/types/errors/base.d.ts +0 -1
  339. package/dist/types/errors/base.d.ts.map +1 -1
  340. package/dist/types/errors/version.d.ts +1 -1
  341. package/dist/types/index.d.ts +52 -52
  342. package/dist/types/index.d.ts.map +1 -1
  343. package/dist/types/types/account.d.ts +1 -1
  344. package/dist/types/types/account.d.ts.map +1 -1
  345. package/dist/types/utils/formatters/block.d.ts.map +1 -1
  346. package/dist/types/utils/formatters/transaction.d.ts.map +1 -1
  347. package/dist/types/utils/hash/getEventSelector.d.ts +2 -1
  348. package/dist/types/utils/hash/getEventSelector.d.ts.map +1 -1
  349. package/dist/types/utils/hash/getFunctionSelector.d.ts +2 -1
  350. package/dist/types/utils/hash/getFunctionSelector.d.ts.map +1 -1
  351. package/dist/types/utils/hash/hashFunction.d.ts +2 -0
  352. package/dist/types/utils/hash/hashFunction.d.ts.map +1 -1
  353. package/dist/types/utils/observe.d.ts.map +1 -1
  354. package/dist/types/utils/promise/withCache.d.ts.map +1 -1
  355. package/dist/types/utils/unit/parseUnits.d.ts.map +1 -1
  356. package/package.json +1 -1
  357. package/src/chains.ts +120 -97
  358. package/src/contract.ts +3 -3
  359. package/src/errors/base.ts +6 -6
  360. package/src/errors/version.ts +1 -1
  361. package/src/index.ts +221 -221
  362. package/src/types/account.ts +9 -9
  363. package/src/utils/encoding/toBytes.ts +1 -1
  364. package/src/utils/encoding/toHex.ts +2 -2
  365. package/src/utils/formatters/block.ts +3 -1
  366. package/src/utils/formatters/transaction.ts +3 -1
  367. package/src/utils/formatters/transactionReceipt.ts +1 -1
  368. package/src/utils/formatters/transactionRequest.ts +1 -1
  369. package/src/utils/hash/getEventSelector.ts +6 -2
  370. package/src/utils/hash/getFunctionSelector.ts +6 -2
  371. package/src/utils/hash/hashFunction.ts +5 -0
  372. package/src/utils/observe.ts +2 -2
  373. package/src/utils/promise/createBatchScheduler.ts +1 -1
  374. package/src/utils/promise/withCache.ts +2 -2
  375. package/src/utils/rpc.ts +1 -1
  376. package/src/utils/unit/parseUnits.ts +1 -5
@@ -1 +1 @@
1
- {"version":3,"file":"getTransactionConfirmations.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionConfirmations.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AA4CpD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAG/C,MAAuC,EACvC,EAAE,IAAI,EAAE,kBAAkB,EAAiD;IAE3E,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,cAAc,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACpD,CAAC,CAAA;IACF,MAAM,sBAAsB,GAC1B,kBAAkB,EAAE,WAAW,IAAI,WAAW,EAAE,WAAW,CAAA;IAC7D,IAAI,CAAC,sBAAsB;QAAE,OAAO,EAAE,CAAA;IACtC,OAAO,WAAW,GAAG,sBAAuB,GAAG,EAAE,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"getTransactionConfirmations.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionConfirmations.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAoBpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAG/C,MAAuC,EACvC,EAAE,IAAI,EAAE,kBAAkB,EAAiD;IAE3E,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,cAAc,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACpD,CAAC,CAAA;IACF,MAAM,sBAAsB,GAC1B,kBAAkB,EAAE,WAAW,IAAI,WAAW,EAAE,WAAW,CAAA;IAC7D,IAAI,CAAC,sBAAsB;QAAE,OAAO,EAAE,CAAA;IACtC,OAAO,WAAW,GAAG,sBAAuB,GAAG,EAAE,CAAA;AACnD,CAAC"}
@@ -1,5 +1,28 @@
1
1
  import { hexToNumber } from '../../utils/encoding/fromHex.js';
2
2
  import { numberToHex } from '../../utils/encoding/toHex.js';
3
+ /**
4
+ * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms.html#transaction) an Account has broadcast / sent.
5
+ *
6
+ * - Docs: https://viem.sh/docs/actions/public/getTransactionCount.html
7
+ * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)
8
+ *
9
+ * @param client - Client to use
10
+ * @param parameters - {@link GetTransactionCountParameters}
11
+ * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}
12
+ *
13
+ * @example
14
+ * import { createPublicClient, http } from 'viem'
15
+ * import { mainnet } from 'viem/chains'
16
+ * import { getTransactionCount } from 'viem/public'
17
+ *
18
+ * const client = createPublicClient({
19
+ * chain: mainnet,
20
+ * transport: http(),
21
+ * })
22
+ * const transactionCount = await getTransactionCount(client, {
23
+ * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
24
+ * })
25
+ */
3
26
  export async function getTransactionCount(client, { address, blockTag = 'latest', blockNumber }) {
4
27
  const count = await client.request({
5
28
  method: 'eth_getTransactionCount',
@@ -1 +1 @@
1
- {"version":3,"file":"getTransactionCount.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionCount.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AA0C3D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAIvC,MAE6C,EAC7C,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,WAAW,EAAiC;IAE5E,MAAM,KAAK,GAAG,MAAO,MAAuB,CAAC,OAAO,CAAC;QACnD,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;KACrE,CAAC,CAAA;IACF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"getTransactionCount.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionCount.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAmB3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAIvC,MAE6C,EAC7C,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,WAAW,EAAiC;IAE5E,MAAM,KAAK,GAAG,MAAO,MAAuB,CAAC,OAAO,CAAC;QACnD,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;KACrE,CAAC,CAAA;IACF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;AAC3B,CAAC"}
@@ -1,6 +1,30 @@
1
1
  import { TransactionReceiptNotFoundError } from '../../errors/transaction.js';
2
2
  import { format } from '../../utils/formatters/format.js';
3
3
  import { formatTransactionReceipt, } from '../../utils/formatters/transactionReceipt.js';
4
+ /**
5
+ * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms.html#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms.html#transaction) hash.
6
+ *
7
+ * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt.html
8
+ * - Example: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/transactions/fetching-transactions
9
+ * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt)
10
+ *
11
+ * @param client - Client to use
12
+ * @param parameters - {@link GetTransactionReceiptParameters}
13
+ * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}
14
+ *
15
+ * @example
16
+ * import { createPublicClient, http } from 'viem'
17
+ * import { mainnet } from 'viem/chains'
18
+ * import { getTransactionReceipt } from 'viem/public'
19
+ *
20
+ * const client = createPublicClient({
21
+ * chain: mainnet,
22
+ * transport: http(),
23
+ * })
24
+ * const transactionReceipt = await getTransactionReceipt(client, {
25
+ * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
26
+ * })
27
+ */
4
28
  export async function getTransactionReceipt(client, { hash }) {
5
29
  const receipt = await client.request({
6
30
  method: 'eth_getTransactionReceipt',
@@ -1 +1 @@
1
- {"version":3,"file":"getTransactionReceipt.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionReceipt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAA;AAG7E,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAGL,wBAAwB,GACzB,MAAM,8CAA8C,CAAA;AAmCrD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAuC,EACvC,EAAE,IAAI,EAAmC;IAEzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QACnC,MAAM,EAAE,2BAA2B;QACnC,MAAM,EAAE,CAAC,IAAI,CAAC;KACf,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,+BAA+B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjE,OAAO,MAAM,CAAC,OAAO,EAAE;QACrB,SAAS,EACP,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,kBAAkB,IAAI,wBAAwB;KAC3E,CAA4C,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"getTransactionReceipt.js","sourceRoot":"","sources":["../../../../src/actions/public/getTransactionReceipt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAA;AAG7E,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAGL,wBAAwB,GACzB,MAAM,8CAA8C,CAAA;AAWrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAuC,EACvC,EAAE,IAAI,EAAmC;IAEzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QACnC,MAAM,EAAE,2BAA2B;QACnC,MAAM,EAAE,CAAC,IAAI,CAAC;KACf,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,+BAA+B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjE,OAAO,MAAM,CAAC,OAAO,EAAE;QACrB,SAAS,EACP,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,kBAAkB,IAAI,wBAAwB;KAC3E,CAA4C,CAAA;AAC/C,CAAC"}
@@ -6,12 +6,52 @@ import { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';
6
6
  import { getChainContractAddress } from '../../utils/chain.js';
7
7
  import { getContractError } from '../../utils/errors/getContractError.js';
8
8
  import { readContract } from './readContract.js';
9
+ /**
10
+ * Similar to [`readContract`](https://viem.sh/docs/contract/readContract.html), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).
11
+ *
12
+ * - Docs: https://viem.sh/docs/contract/multicall.html
13
+ *
14
+ * @param client - Client to use
15
+ * @param parameters - {@link MulticallParameters}
16
+ * @returns An array of results with accompanying status. {@link MulticallReturnType}
17
+ *
18
+ * @example
19
+ * import { createPublicClient, http, parseAbi } from 'viem'
20
+ * import { mainnet } from 'viem/chains'
21
+ * import { multicall } from 'viem/contract'
22
+ *
23
+ * const client = createPublicClient({
24
+ * chain: mainnet,
25
+ * transport: http(),
26
+ * })
27
+ * const abi = parseAbi([
28
+ * 'function balanceOf(address) view returns (uint256)',
29
+ * 'function totalSupply() view returns (uint256)',
30
+ * ])
31
+ * const results = await multicall(client, {
32
+ * contracts: [
33
+ * {
34
+ * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
35
+ * abi,
36
+ * functionName: 'balanceOf',
37
+ * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],
38
+ * },
39
+ * {
40
+ * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
41
+ * abi,
42
+ * functionName: 'totalSupply',
43
+ * },
44
+ * ],
45
+ * })
46
+ * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]
47
+ */
9
48
  export async function multicall(client, args) {
10
49
  const { allowFailure = true, batchSize: batchSize_, blockNumber, blockTag, contracts: contracts_, multicallAddress: multicallAddress_, } = args;
11
50
  const batchSize = batchSize_ ??
12
51
  ((typeof client.batch?.multicall === 'object' &&
13
52
  client.batch.multicall.batchSize) ||
14
53
  1024);
54
+ // Fix type cast from `Narrow` in type definition.
15
55
  const contracts = contracts_;
16
56
  let multicallAddress = multicallAddress_;
17
57
  if (!multicallAddress) {
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.js","sourceRoot":"","sources":["../../../../src/actions/public/multicall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multicall.js","sourceRoot":"","sources":["../../../../src/actions/public/multicall.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,37 @@ import { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';
2
2
  import { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';
3
3
  import { getContractError } from '../../utils/errors/getContractError.js';
4
4
  import { call } from './call.js';
5
+ /**
6
+ * Calls a read-only function on a contract, and returns the response.
7
+ *
8
+ * - Docs: https://viem.sh/docs/contract/readContract.html
9
+ * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/contracts/reading-contracts
10
+ *
11
+ * A "read-only" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.
12
+ *
13
+ * Internally, uses a [Public Client](https://viem.sh/docs/clients/public.html) to call the [`call` action](https://viem.sh/docs/actions/public/call.html) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData.html).
14
+ *
15
+ * @param client - Client to use
16
+ * @param parameters - {@link ReadContractParameters}
17
+ * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}
18
+ *
19
+ * @example
20
+ * import { createPublicClient, http, parseAbi } from 'viem'
21
+ * import { mainnet } from 'viem/chains'
22
+ * import { readContract } from 'viem/contract'
23
+ *
24
+ * const client = createPublicClient({
25
+ * chain: mainnet,
26
+ * transport: http(),
27
+ * })
28
+ * const result = await readContract(client, {
29
+ * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
30
+ * abi: parseAbi(['function balanceOf(address) view returns (uint256)']),
31
+ * functionName: 'balanceOf',
32
+ * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],
33
+ * })
34
+ * // 424122n
35
+ */
5
36
  export async function readContract(client, { abi, address, args, functionName, ...callRequest }) {
6
37
  const calldata = encodeFunctionData({
7
38
  abi,
@@ -1 +1 @@
1
- {"version":3,"file":"readContract.js","sourceRoot":"","sources":["../../../../src/actions/public/readContract.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,oBAAoB,GACrB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAEL,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAEzE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AA4CrD,MAAM,CAAC,KAAK,UAAU,YAAY,CAKhC,MAAuC,EACvC,EACE,GAAG,EACH,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,GAAG,WAAW,EAC8B;IAE9C,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG;QACH,IAAI;QACJ,YAAY;KACmD,CAAC,CAAA;IAClE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,OAAO;YACX,GAAG,WAAW;SACc,CAAC,CAAA;QAC/B,OAAO,oBAAoB,CAAC;YAC1B,GAAG;YACH,IAAI;YACJ,YAAY;YACZ,IAAI,EAAE,IAAI,IAAI,IAAI;SAInB,CAAgD,CAAA;KAClD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,gBAAgB,CAAC,GAAgB,EAAE;YACvC,GAAG,EAAE,GAAU;YACf,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,6BAA6B;YACvC,YAAY;SACb,CAAC,CAAA;KACH;AACH,CAAC"}
1
+ {"version":3,"file":"readContract.js","sourceRoot":"","sources":["../../../../src/actions/public/readContract.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,oBAAoB,GACrB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAEL,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAEzE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAarD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAKhC,MAAuC,EACvC,EACE,GAAG,EACH,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,GAAG,WAAW,EAC8B;IAE9C,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG;QACH,IAAI;QACJ,YAAY;KACmD,CAAC,CAAA;IAClE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,OAAO;YACX,GAAG,WAAW;SACc,CAAC,CAAA;QAC/B,OAAO,oBAAoB,CAAC;YAC1B,GAAG;YACH,IAAI;YACJ,YAAY;YACZ,IAAI,EAAE,IAAI,IAAI,IAAI;SAInB,CAAgD,CAAA;KAClD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,gBAAgB,CAAC,GAAgB,EAAE;YACvC,GAAG,EAAE,GAAU;YACf,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,6BAA6B;YACvC,YAAY;SACb,CAAC,CAAA;KACH;AACH,CAAC"}
@@ -3,6 +3,37 @@ import { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';
3
3
  import { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';
4
4
  import { getContractError } from '../../utils/errors/getContractError.js';
5
5
  import { call } from './call.js';
6
+ /**
7
+ * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.
8
+ *
9
+ * - Docs: https://viem.sh/docs/contract/simulateContract.html
10
+ * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/contracts/writing-to-contracts
11
+ *
12
+ * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract.html), but also supports contract write functions.
13
+ *
14
+ * Internally, uses a [Public Client](https://viem.sh/docs/clients/public.html) to call the [`call` action](https://viem.sh/docs/actions/public/call.html) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData.html).
15
+ *
16
+ * @param client - Client to use
17
+ * @param parameters - {@link SimulateContractParameters}
18
+ * @returns The simulation result and write request. {@link SimulateContractReturnType}
19
+ *
20
+ * @example
21
+ * import { createPublicClient, http } from 'viem'
22
+ * import { mainnet } from 'viem/chains'
23
+ * import { simulateContract } from 'viem/contract'
24
+ *
25
+ * const client = createPublicClient({
26
+ * chain: mainnet,
27
+ * transport: http(),
28
+ * })
29
+ * const result = await simulateContract(client, {
30
+ * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
31
+ * abi: parseAbi(['function mint(uint32) view returns (uint32)']),
32
+ * functionName: 'mint',
33
+ * args: ['69420'],
34
+ * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
35
+ * })
36
+ */
6
37
  export async function simulateContract(client, { abi, address, args, dataSuffix, functionName, ...callRequest }) {
7
38
  const account = callRequest.account
8
39
  ? parseAccount(callRequest.account)
@@ -1 +1 @@
1
- {"version":3,"file":"simulateContract.js","sourceRoot":"","sources":["../../../../src/actions/public/simulateContract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAWnE,OAAO,EAEL,oBAAoB,GACrB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAEL,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAGzE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAuErD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAMpC,MAAuC,EACvC,EACE,GAAG,EACH,OAAO,EACP,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,GAAG,WAAW,EAC0D;IAI1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO;QACjC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG;QACH,IAAI;QACJ,YAAY;KACmD,CAAC,CAAA;IAClE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YACpE,EAAE,EAAE,OAAO;YACX,GAAG,WAAW;SACsB,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,GAAG;YACH,IAAI;YACJ,YAAY;YACZ,IAAI,EAAE,IAAI,IAAI,IAAI;SACe,CAAC,CAAA;QACpC,OAAO;YACL,MAAM;YACN,OAAO,EAAE;gBACP,GAAG;gBACH,OAAO;gBACP,IAAI;gBACJ,YAAY;gBACZ,GAAG,WAAW;aACf;SAMF,CAAA;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,gBAAgB,CAAC,GAAgB,EAAE;YACvC,GAAG,EAAE,GAAU;YACf,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,iCAAiC;YAC3C,YAAY;YACZ,MAAM,EAAE,OAAO,EAAE,OAAO;SACzB,CAAC,CAAA;KACH;AACH,CAAC"}
1
+ {"version":3,"file":"simulateContract.js","sourceRoot":"","sources":["../../../../src/actions/public/simulateContract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAWnE,OAAO,EAEL,oBAAoB,GACrB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAEL,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAGzE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAwCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAMpC,MAAuC,EACvC,EACE,GAAG,EACH,OAAO,EACP,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,GAAG,WAAW,EAC0D;IAI1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO;QACjC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG;QACH,IAAI;QACJ,YAAY;KACmD,CAAC,CAAA;IAClE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YACpE,EAAE,EAAE,OAAO;YACX,GAAG,WAAW;SACsB,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,GAAG;YACH,IAAI;YACJ,YAAY;YACZ,IAAI,EAAE,IAAI,IAAI,IAAI;SACe,CAAC,CAAA;QACpC,OAAO;YACL,MAAM;YACN,OAAO,EAAE;gBACP,GAAG;gBACH,OAAO;gBACP,IAAI;gBACJ,YAAY;gBACZ,GAAG,WAAW;aACf;SAMF,CAAA;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,gBAAgB,CAAC,GAAgB,EAAE;YACvC,GAAG,EAAE,GAAU;YACf,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,iCAAiC;YAC3C,YAAY;YACZ,MAAM,EAAE,OAAO,EAAE,OAAO;SACzB,CAAC,CAAA;KACH;AACH,CAAC"}
@@ -1,3 +1,27 @@
1
+ /**
2
+ * Destroys a [`Filter`](https://viem.sh/docs/glossary/types.html#filter).
3
+ *
4
+ * - Docs: https://viem.sh/docs/actions/public/uninstallFilter.html
5
+ * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)
6
+ *
7
+ * Destroys a Filter that was created from one of the following Actions:
8
+ * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter.html)
9
+ * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter.html)
10
+ * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter.html)
11
+ *
12
+ * @param client - Client to use
13
+ * @param parameters - {@link UninstallFilterParameters}
14
+ * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}
15
+ *
16
+ * @example
17
+ * import { createPublicClient, http } from 'viem'
18
+ * import { mainnet } from 'viem/chains'
19
+ * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'
20
+ *
21
+ * const filter = await createPendingTransactionFilter(client)
22
+ * const uninstalled = await uninstallFilter(client, { filter })
23
+ * // true
24
+ */
1
25
  export async function uninstallFilter(_client, { filter }) {
2
26
  return filter.request({
3
27
  method: 'eth_uninstallFilter',
@@ -1 +1 @@
1
- {"version":3,"file":"uninstallFilter.js","sourceRoot":"","sources":["../../../../src/actions/public/uninstallFilter.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,KAAK,UAAU,eAAe,CAInC,OAAyC,EACzC,EAAE,MAAM,EAA6B;IAErC,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACpB,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"uninstallFilter.js","sourceRoot":"","sources":["../../../../src/actions/public/uninstallFilter.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAInC,OAAyC,EACzC,EAAE,MAAM,EAA6B;IAErC,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACpB,CAAC,CAAA;AACJ,CAAC"}
@@ -4,6 +4,13 @@ import { CallExecutionError } from '../../errors/contract.js';
4
4
  import { isBytesEqual } from '../../utils/data/isBytesEqual.js';
5
5
  import { encodeDeployData, isHex, toHex } from '../../utils/index.js';
6
6
  import { call } from './call.js';
7
+ /**
8
+ * Verifies a message hash on chain using ERC-6492.
9
+ *
10
+ * @param client - Client to use.
11
+ * @param parameters - {@link VerifyHashParameters}
12
+ * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}
13
+ */
7
14
  export async function verifyHash(client, { address, hash, signature, ...callRequest }) {
8
15
  const signatureHex = isHex(signature) ? signature : toHex(signature);
9
16
  try {
@@ -19,6 +26,9 @@ export async function verifyHash(client, { address, hash, signature, ...callRequ
19
26
  }
20
27
  catch (error) {
21
28
  if (error instanceof CallExecutionError) {
29
+ // if the execution fails, the signature was not valid and an internal method inside of the validator reverted
30
+ // this can happen for many reasons, for example if signer can not be recovered from the signature
31
+ // or if the signature has no valid format
22
32
  return false;
23
33
  }
24
34
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"verifyHash.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyHash.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAuBrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAuC,EACvC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,WAAW,EAAwB;IAElE,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEpE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,EAAE,gBAAgB,CAAC;gBACrB,GAAG,EAAE,8BAA8B;gBACnC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;gBACnC,QAAQ,EAAE,mCAAmC;aAC9C,CAAC;YACF,GAAG,WAAW;SACc,CAAC,CAAA;QAE/B,OAAO,YAAY,CAAC,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAAA;KAC1C;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,KAAK,YAAY,kBAAkB,EAAE;YAIvC,OAAO,KAAK,CAAA;SACb;QAED,MAAM,KAAK,CAAA;KACZ;AACH,CAAC"}
1
+ {"version":3,"file":"verifyHash.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyHash.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAgBrD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAuC,EACvC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,WAAW,EAAwB;IAElE,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAEpE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,EAAE,gBAAgB,CAAC;gBACrB,GAAG,EAAE,8BAA8B;gBACnC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;gBACnC,QAAQ,EAAE,mCAAmC;aAC9C,CAAC;YACF,GAAG,WAAW;SACc,CAAC,CAAA;QAE/B,OAAO,YAAY,CAAC,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAAA;KAC1C;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,KAAK,YAAY,kBAAkB,EAAE;YACvC,8GAA8G;YAC9G,kGAAkG;YAClG,0CAA0C;YAC1C,OAAO,KAAK,CAAA;SACb;QAED,MAAM,KAAK,CAAA;KACZ;AACH,CAAC"}
@@ -1,5 +1,16 @@
1
1
  import { hashMessage } from '../../utils/index.js';
2
2
  import { verifyHash } from './verifyHash.js';
3
+ /**
4
+ * Verify that a message was signed by the provided address.
5
+ *
6
+ * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).
7
+ *
8
+ * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage.html}
9
+ *
10
+ * @param client - Client to use.
11
+ * @param parameters - {@link VerifyMessageParameters}
12
+ * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}
13
+ */
3
14
  export async function verifyMessage(client, { address, message, signature, ...callRequest }) {
4
15
  const hash = hashMessage(message);
5
16
  return verifyHash(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"verifyMessage.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAA6B,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAyBvE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAuC,EACvC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,EAA2B;IAExE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,UAAU,CAAC,MAAM,EAAE;QACxB,OAAO;QACP,IAAI;QACJ,SAAS;QACT,GAAG,WAAW;KACf,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"verifyMessage.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAA6B,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAcvE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAuC,EACvC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,EAA2B;IAExE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,UAAU,CAAC,MAAM,EAAE;QACxB,OAAO;QACP,IAAI;QACJ,SAAS;QACT,GAAG,WAAW;KACf,CAAC,CAAA;AACJ,CAAC"}
@@ -1,5 +1,14 @@
1
1
  import { hashTypedData } from '../../utils/index.js';
2
2
  import { verifyHash } from './verifyHash.js';
3
+ /**
4
+ * Verify that typed data was signed by the provided address.
5
+ *
6
+ * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData.html}
7
+ *
8
+ * @param client - Client to use.
9
+ * @param parameters - {@link VerifyTypedDataParameters}
10
+ * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}
11
+ */
3
12
  export async function verifyTypedData(client, { address, signature, message, primaryType, types, domain, ...callRequest }) {
4
13
  const hash = hashTypedData({ message, primaryType, types, domain });
5
14
  return verifyHash(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTypedData.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyTypedData.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAA6B,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAyBvE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuC,EACvC,EACE,OAAO,EACP,SAAS,EACT,OAAO,EACP,WAAW,EACX,KAAK,EACL,MAAM,EACN,GAAG,WAAW,EACY;IAE5B,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,OAAO,UAAU,CAAC,MAAM,EAAE;QACxB,OAAO;QACP,IAAI;QACJ,SAAS;QACT,GAAG,WAAW;KACf,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"verifyTypedData.js","sourceRoot":"","sources":["../../../../src/actions/public/verifyTypedData.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAA6B,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAgBvE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuC,EACvC,EACE,OAAO,EACP,SAAS,EACT,OAAO,EACP,WAAW,EACX,KAAK,EACL,MAAM,EACN,GAAG,WAAW,EACY;IAE5B,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,OAAO,UAAU,CAAC,MAAM,EAAE;QACxB,OAAO;QACP,IAAI;QACJ,SAAS;QACT,GAAG,WAAW;KACf,CAAC,CAAA;AACJ,CAAC"}
@@ -6,6 +6,44 @@ import { getBlock } from './getBlock.js';
6
6
  import { getTransaction, } from './getTransaction.js';
7
7
  import { getTransactionReceipt, } from './getTransactionReceipt.js';
8
8
  import { watchBlockNumber } from './watchBlockNumber.js';
9
+ /**
10
+ * Waits for the [Transaction](https://viem.sh/docs/glossary/terms.html#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms.html#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms.html#transaction-receipt). If the Transaction reverts, then the action will throw an error.
11
+ *
12
+ * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt.html
13
+ * - Example: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/transactions/sending-transactions
14
+ * - JSON-RPC Methods:
15
+ * - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.
16
+ * - If a Transaction has been replaced:
17
+ * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions
18
+ * - Checks if one of the Transactions is a replacement
19
+ * - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).
20
+ *
21
+ * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).
22
+ *
23
+ * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.
24
+ *
25
+ * There are 3 types of Transaction Replacement reasons:
26
+ *
27
+ * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)
28
+ * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)
29
+ * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)
30
+ *
31
+ * @param client - Client to use
32
+ * @param parameters - {@link WaitForTransactionReceiptParameters}
33
+ * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}
34
+ *
35
+ * @example
36
+ * import { createPublicClient, waitForTransactionReceipt, http } from 'viem'
37
+ * import { mainnet } from 'viem/chains'
38
+ *
39
+ * const client = createPublicClient({
40
+ * chain: mainnet,
41
+ * transport: http(),
42
+ * })
43
+ * const transactionReceipt = await waitForTransactionReceipt(client, {
44
+ * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
45
+ * })
46
+ */
9
47
  export async function waitForTransactionReceipt(client, { confirmations = 1, hash, onReplaced, pollingInterval = client.pollingInterval, timeout, }) {
10
48
  const observerId = stringify(['waitForTransactionReceipt', client.uid, hash]);
11
49
  let transaction;
@@ -31,12 +69,17 @@ export async function waitForTransactionReceipt(client, { confirmations = 1, has
31
69
  _unobserve();
32
70
  };
33
71
  try {
72
+ // If we already have a valid receipt, let's check if we have enough
73
+ // confirmations. If we do, then we can resolve.
34
74
  if (receipt) {
35
75
  if (blockNumber - receipt.blockNumber + 1n < confirmations)
36
76
  return;
37
77
  done(() => emit.resolve(receipt));
38
78
  return;
39
79
  }
80
+ // Get the transaction to check if it's been replaced.
81
+ // We need to retry as some RPC Providers may be slow to sync
82
+ // up mined transactions.
40
83
  if (!transaction) {
41
84
  retrying = true;
42
85
  await withRetry(async () => {
@@ -44,33 +87,42 @@ export async function waitForTransactionReceipt(client, { confirmations = 1, has
44
87
  if (transaction.blockNumber)
45
88
  blockNumber = transaction.blockNumber;
46
89
  }, {
90
+ // exponential backoff
47
91
  delay: ({ count }) => ~~(1 << count) * 200,
48
92
  retryCount: 6,
49
93
  });
50
94
  retrying = false;
51
95
  }
96
+ // Get the receipt to check if it's been processed.
52
97
  receipt = await getTransactionReceipt(client, { hash });
98
+ // Check if we have enough confirmations. If not, continue polling.
53
99
  if (confirmations > 0 &&
54
100
  blockNumber - receipt.blockNumber + 1n < confirmations)
55
101
  return;
56
102
  done(() => emit.resolve(receipt));
57
103
  }
58
104
  catch (err) {
105
+ // If the receipt is not found, the transaction will be pending.
106
+ // We need to check if it has potentially been replaced.
59
107
  if (transaction &&
60
108
  (err instanceof TransactionNotFoundError ||
61
109
  err instanceof TransactionReceiptNotFoundError)) {
62
110
  replacedTransaction = transaction;
111
+ // Let's retrieve the transactions from the current block.
63
112
  const block = await getBlock(client, {
64
113
  blockNumber,
65
114
  includeTransactions: true,
66
115
  });
67
116
  const replacementTransaction = block.transactions.find(({ from, nonce }) => from === replacedTransaction.from &&
68
117
  nonce === replacedTransaction.nonce);
118
+ // If we couldn't find a replacement transaction, continue polling.
69
119
  if (!replacementTransaction)
70
120
  return;
121
+ // If we found a replacement transaction, return it's receipt.
71
122
  receipt = await getTransactionReceipt(client, {
72
123
  hash: replacementTransaction.hash,
73
124
  });
125
+ // Check if we have enough confirmations. If not, continue polling.
74
126
  if (blockNumber - receipt.blockNumber + 1n < confirmations)
75
127
  return;
76
128
  let reason = 'replaced';
@@ -1 +1 @@
1
- {"version":3,"file":"waitForTransactionReceipt.js","sourceRoot":"","sources":["../../../../src/actions/public/waitForTransactionReceipt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"waitForTransactionReceipt.js","sourceRoot":"","sources":["../../../../src/actions/public/waitForTransactionReceipt.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,31 @@ import { observe } from '../../utils/observe.js';
3
3
  import { poll } from '../../utils/poll.js';
4
4
  import { stringify } from '../../utils/stringify.js';
5
5
  import { getBlockNumber, } from './getBlockNumber.js';
6
+ /**
7
+ * Watches and returns incoming block numbers.
8
+ *
9
+ * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber.html
10
+ * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/blocks/watching-blocks
11
+ * - JSON-RPC Methods:
12
+ * - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.
13
+ * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `"newHeads"` event.
14
+ *
15
+ * @param client - Client to use
16
+ * @param parameters - {@link WatchBlockNumberParameters}
17
+ * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}
18
+ *
19
+ * @example
20
+ * import { createPublicClient, watchBlockNumber, http } from 'viem'
21
+ * import { mainnet } from 'viem/chains'
22
+ *
23
+ * const client = createPublicClient({
24
+ * chain: mainnet,
25
+ * transport: http(),
26
+ * })
27
+ * const unwatch = await watchBlockNumber(client, {
28
+ * onBlockNumber: (blockNumber) => console.log(blockNumber),
29
+ * })
30
+ */
6
31
  export function watchBlockNumber(client, { emitOnBegin = false, emitMissed = false, onBlockNumber, onError, poll: poll_, pollingInterval = client.pollingInterval, }) {
7
32
  const enablePolling = typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket';
8
33
  let prevBlockNumber;
@@ -18,8 +43,12 @@ export function watchBlockNumber(client, { emitOnBegin = false, emitMissed = fal
18
43
  try {
19
44
  const blockNumber = await getBlockNumber(client, { maxAge: 0 });
20
45
  if (prevBlockNumber) {
46
+ // If the current block number is the same as the previous,
47
+ // we can skip.
21
48
  if (blockNumber === prevBlockNumber)
22
49
  return;
50
+ // If we have missed out on some previous blocks, and the
51
+ // `emitMissed` flag is truthy, let's emit those blocks.
23
52
  if (blockNumber - prevBlockNumber > 1 && emitMissed) {
24
53
  for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {
25
54
  emit.onBlockNumber(i, prevBlockNumber);
@@ -27,6 +56,8 @@ export function watchBlockNumber(client, { emitOnBegin = false, emitMissed = fal
27
56
  }
28
57
  }
29
58
  }
59
+ // If the next block number is greater than the previous,
60
+ // it is not in the past, and we can emit the new block number.
30
61
  if (!prevBlockNumber || blockNumber > prevBlockNumber) {
31
62
  emit.onBlockNumber(blockNumber, prevBlockNumber);
32
63
  prevBlockNumber = blockNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"watchBlockNumber.js","sourceRoot":"","sources":["../../../../src/actions/public/watchBlockNumber.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watchBlockNumber.js","sourceRoot":"","sources":["../../../../src/actions/public/watchBlockNumber.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,31 @@ import { observe } from '../../utils/observe.js';
2
2
  import { poll } from '../../utils/poll.js';
3
3
  import { stringify } from '../../utils/stringify.js';
4
4
  import { getBlock } from './getBlock.js';
5
+ /**
6
+ * Watches and returns information for incoming blocks.
7
+ *
8
+ * - Docs: https://viem.sh/docs/actions/public/watchBlocks.html
9
+ * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/blocks/watching-blocks
10
+ * - JSON-RPC Methods:
11
+ * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.
12
+ * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `"newHeads"` event.
13
+ *
14
+ * @param client - Client to use
15
+ * @param parameters - {@link WatchBlocksParameters}
16
+ * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}
17
+ *
18
+ * @example
19
+ * import { createPublicClient, watchBlocks, http } from 'viem'
20
+ * import { mainnet } from 'viem/chains'
21
+ *
22
+ * const client = createPublicClient({
23
+ * chain: mainnet,
24
+ * transport: http(),
25
+ * })
26
+ * const unwatch = await watchBlocks(client, {
27
+ * onBlock: (block) => console.log(block),
28
+ * })
29
+ */
5
30
  export function watchBlocks(client, { blockTag = 'latest', emitMissed = false, emitOnBegin = false, onBlock, onError, includeTransactions = false, poll: poll_, pollingInterval = client.pollingInterval, }) {
6
31
  const enablePolling = typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket';
7
32
  let prevBlock;
@@ -21,8 +46,12 @@ export function watchBlocks(client, { blockTag = 'latest', emitMissed = false, e
21
46
  includeTransactions,
22
47
  });
23
48
  if (block.number && prevBlock?.number) {
49
+ // If the current block number is the same as the previous,
50
+ // we can skip.
24
51
  if (block.number === prevBlock.number)
25
52
  return;
53
+ // If we have missed out on some previous blocks, and the
54
+ // `emitMissed` flag is truthy, let's emit those blocks.
26
55
  if (block.number - prevBlock.number > 1 && emitMissed) {
27
56
  for (let i = prevBlock?.number + 1n; i < block.number; i++) {
28
57
  const block = await getBlock(client, {
@@ -34,8 +63,13 @@ export function watchBlocks(client, { blockTag = 'latest', emitMissed = false, e
34
63
  }
35
64
  }
36
65
  }
37
- if (!prevBlock?.number ||
66
+ if (
67
+ // If no previous block exists, emit.
68
+ !prevBlock?.number ||
69
+ // If the block tag is "pending" with no block number, emit.
38
70
  (blockTag === 'pending' && !block?.number) ||
71
+ // If the next block number is greater than the previous block number, emit.
72
+ // We don't want to emit blocks in the past.
39
73
  (block.number && block.number > prevBlock.number)) {
40
74
  emit.onBlock(block, prevBlock);
41
75
  prevBlock = block;