voltaire-effect 0.2.23 → 0.2.25

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 (397) hide show
  1. package/dist/KZGService-B7PJerOb.d.ts +146 -0
  2. package/dist/ProviderService-BZ5pqDrD.d.ts +319 -0
  3. package/dist/{X25519Test-DGsk1V9o.d.ts → X25519Test-D5Q-5fL9.d.ts} +4 -143
  4. package/dist/crypto/index.d.ts +5 -6
  5. package/dist/crypto/index.js +227 -201
  6. package/dist/{index-IgkEHjBe.d.ts → index-BCOuszKZ.d.ts} +17634 -11962
  7. package/dist/index.d.ts +3195 -976
  8. package/dist/index.js +6994 -4679
  9. package/dist/native/index.d.ts +25 -16
  10. package/dist/native/index.js +7020 -4705
  11. package/dist/primitives/index.d.ts +14 -8
  12. package/dist/primitives/index.js +4060 -2539
  13. package/dist/services/index.d.ts +9054 -30
  14. package/dist/services/index.js +1592 -1331
  15. package/package.json +2 -2
  16. package/src/crypto/ERC6492/ERC6492.test.ts +32 -14
  17. package/src/crypto/ERC6492/verifySignature.ts +4 -5
  18. package/src/crypto/Keccak256/Keccak256.test.ts +42 -1
  19. package/src/crypto/Keccak256/hashSync.ts +53 -0
  20. package/src/crypto/Keccak256/index.ts +2 -0
  21. package/src/index.ts +7 -2
  22. package/src/primitives/Abi/decode.test.ts +38 -0
  23. package/src/primitives/Abi/decode.ts +67 -0
  24. package/src/primitives/Abi/decodeData.test.ts +37 -0
  25. package/src/primitives/Abi/decodeData.ts +77 -0
  26. package/src/primitives/Abi/decodeLog.test.ts +32 -0
  27. package/src/primitives/Abi/decodeLog.ts +81 -0
  28. package/src/primitives/Abi/decodeWrappedError.test.ts +41 -0
  29. package/src/primitives/Abi/decodeWrappedError.ts +68 -0
  30. package/src/primitives/Abi/encode.test.ts +43 -0
  31. package/src/primitives/Abi/encode.ts +67 -0
  32. package/src/primitives/Abi/encodePacked.test.ts +35 -0
  33. package/src/primitives/Abi/encodePacked.ts +62 -0
  34. package/src/primitives/Abi/encodeWrappedError.test.ts +21 -0
  35. package/src/primitives/Abi/encodeWrappedError.ts +64 -0
  36. package/src/primitives/Abi/findSelectorCollisions.test.ts +50 -0
  37. package/src/primitives/Abi/findSelectorCollisions.ts +83 -0
  38. package/src/primitives/Abi/index.ts +33 -7
  39. package/src/primitives/Abi/parseLogs.test.ts +37 -0
  40. package/src/primitives/Abi/parseLogs.ts +62 -0
  41. package/src/primitives/AccessList/AccessList.test.ts +229 -0
  42. package/src/primitives/AccessList/AccessListTypeSchema.ts +16 -0
  43. package/src/primitives/AccessList/addressCount.ts +21 -0
  44. package/src/primitives/AccessList/assertValid.ts +37 -0
  45. package/src/primitives/AccessList/create.ts +19 -0
  46. package/src/primitives/AccessList/deduplicate.ts +23 -0
  47. package/src/primitives/AccessList/from.ts +39 -0
  48. package/src/primitives/AccessList/fromBytes.ts +36 -0
  49. package/src/primitives/AccessList/gasCost.ts +22 -0
  50. package/src/primitives/AccessList/gasSavings.ts +26 -0
  51. package/src/primitives/AccessList/hasSavings.ts +23 -0
  52. package/src/primitives/AccessList/includesAddress.ts +25 -0
  53. package/src/primitives/AccessList/includesStorageKey.ts +28 -0
  54. package/src/primitives/AccessList/index.ts +99 -19
  55. package/src/primitives/AccessList/is.ts +23 -0
  56. package/src/primitives/AccessList/isEmpty.ts +23 -0
  57. package/src/primitives/AccessList/isItem.ts +22 -0
  58. package/src/primitives/AccessList/keysFor.ts +29 -0
  59. package/src/primitives/AccessList/merge.ts +24 -0
  60. package/src/primitives/AccessList/storageKeyCount.ts +21 -0
  61. package/src/primitives/AccessList/toBytes.ts +23 -0
  62. package/src/primitives/AccessList/withAddress.ts +27 -0
  63. package/src/primitives/AccessList/withStorageKey.ts +30 -0
  64. package/src/primitives/Address/Address.test.ts +146 -0
  65. package/src/primitives/Address/assert.ts +51 -0
  66. package/src/primitives/Address/calculateCreate2Address.ts +33 -0
  67. package/src/primitives/Address/calculateCreateAddress.ts +30 -0
  68. package/src/primitives/Address/deduplicateAddresses.ts +20 -0
  69. package/src/primitives/Address/from.ts +41 -0
  70. package/src/primitives/Address/fromAbiEncoded.ts +35 -0
  71. package/src/primitives/Address/fromBase64.ts +25 -0
  72. package/src/primitives/Address/fromBytes.ts +25 -0
  73. package/src/primitives/Address/fromHex.ts +31 -0
  74. package/src/primitives/Address/fromNumber.ts +25 -0
  75. package/src/primitives/Address/fromPrivateKey.ts +25 -0
  76. package/src/primitives/Address/fromPublicKey.ts +56 -0
  77. package/src/primitives/Address/index.ts +99 -35
  78. package/src/primitives/Address/is.ts +20 -0
  79. package/src/primitives/Address/isAddress.ts +22 -0
  80. package/src/primitives/Address/sortAddresses.ts +19 -0
  81. package/src/primitives/Address/toChecksummed.ts +32 -0
  82. package/src/primitives/Address/toHex.ts +18 -0
  83. package/src/primitives/Address/zero.ts +18 -0
  84. package/src/primitives/Base64/Base64.test.ts +75 -0
  85. package/src/primitives/Base64/convert.ts +37 -0
  86. package/src/primitives/Base64/decode.ts +59 -0
  87. package/src/primitives/Base64/encode.ts +42 -0
  88. package/src/primitives/Base64/from.ts +39 -0
  89. package/src/primitives/Base64/index.ts +81 -1
  90. package/src/primitives/Base64/size.ts +16 -0
  91. package/src/primitives/Base64/validation.ts +16 -0
  92. package/src/primitives/Blob/Blob.test.ts +292 -0
  93. package/src/primitives/Blob/calculateGas.ts +30 -0
  94. package/src/primitives/Blob/estimateBlobCount.ts +30 -0
  95. package/src/primitives/Blob/from.ts +38 -0
  96. package/src/primitives/Blob/fromData.ts +36 -0
  97. package/src/primitives/Blob/index.ts +99 -12
  98. package/src/primitives/Blob/isValidVersion.ts +27 -0
  99. package/src/primitives/Blob/joinData.ts +43 -0
  100. package/src/primitives/Blob/splitData.ts +36 -0
  101. package/src/primitives/Blob/toCommitment.ts +43 -0
  102. package/src/primitives/Blob/toProof.ts +50 -0
  103. package/src/primitives/Blob/toVersionedHash.ts +35 -0
  104. package/src/primitives/Blob/verify.ts +49 -0
  105. package/src/primitives/Blob/verifyBatch.ts +119 -0
  106. package/src/primitives/BloomFilter/BloomFilter.test.ts +138 -0
  107. package/src/primitives/BloomFilter/add.ts +23 -0
  108. package/src/primitives/BloomFilter/combine.ts +21 -0
  109. package/src/primitives/BloomFilter/contains.ts +26 -0
  110. package/src/primitives/BloomFilter/create.ts +35 -0
  111. package/src/primitives/BloomFilter/density.ts +22 -0
  112. package/src/primitives/BloomFilter/expectedFalsePositiveRate.ts +25 -0
  113. package/src/primitives/BloomFilter/fromHex.ts +37 -0
  114. package/src/primitives/BloomFilter/hash.ts +43 -0
  115. package/src/primitives/BloomFilter/index.ts +59 -37
  116. package/src/primitives/BloomFilter/isEmpty.ts +22 -0
  117. package/src/primitives/BloomFilter/merge.ts +24 -0
  118. package/src/primitives/BloomFilter/toHex.ts +22 -0
  119. package/src/primitives/Bytecode/analyze.ts +58 -0
  120. package/src/primitives/Bytecode/detectFusions.ts +10 -0
  121. package/src/primitives/Bytecode/equals.ts +10 -0
  122. package/src/primitives/Bytecode/extractRuntime.ts +12 -0
  123. package/src/primitives/Bytecode/format.ts +16 -0
  124. package/src/primitives/Bytecode/from.ts +16 -0
  125. package/src/primitives/Bytecode/fromHex.ts +14 -0
  126. package/src/primitives/Bytecode/getBlock.ts +12 -0
  127. package/src/primitives/Bytecode/getNextPc.ts +12 -0
  128. package/src/primitives/Bytecode/getPushSize.ts +8 -0
  129. package/src/primitives/Bytecode/hasMetadata.ts +10 -0
  130. package/src/primitives/Bytecode/hash.ts +9 -0
  131. package/src/primitives/Bytecode/index.ts +103 -13
  132. package/src/primitives/Bytecode/isPush.ts +8 -0
  133. package/src/primitives/Bytecode/isTerminator.ts +8 -0
  134. package/src/primitives/Bytecode/isValidJumpDest.ts +12 -0
  135. package/src/primitives/Bytecode/parseInstructions.ts +10 -0
  136. package/src/primitives/Bytecode/prettyPrint.ts +12 -0
  137. package/src/primitives/Bytecode/scan.ts +20 -0
  138. package/src/primitives/Bytecode/size.ts +9 -0
  139. package/src/primitives/Bytecode/stripMetadata.ts +10 -0
  140. package/src/primitives/Bytecode/toAbi.ts +10 -0
  141. package/src/primitives/Bytecode/toHex.ts +10 -0
  142. package/src/primitives/Bytecode/types.ts +23 -0
  143. package/src/primitives/Bytecode/validate.ts +9 -0
  144. package/src/primitives/ContractSignature/ContractSignature.test.ts +1 -13
  145. package/src/primitives/ContractSignature/verifySignature.ts +88 -62
  146. package/src/primitives/Ens/Ens.test.ts +71 -0
  147. package/src/primitives/Ens/convert.ts +13 -0
  148. package/src/primitives/Ens/from.ts +32 -0
  149. package/src/primitives/Ens/hash.ts +46 -0
  150. package/src/primitives/Ens/index.ts +86 -4
  151. package/src/primitives/Ens/normalize.ts +45 -0
  152. package/src/primitives/Ens/validation.ts +38 -0
  153. package/src/primitives/EventLog/accessors.ts +32 -0
  154. package/src/primitives/EventLog/clone.ts +17 -0
  155. package/src/primitives/EventLog/create.ts +46 -0
  156. package/src/primitives/EventLog/filtering.ts +48 -0
  157. package/src/primitives/EventLog/index.ts +96 -6
  158. package/src/primitives/EventLog/status.ts +17 -0
  159. package/src/primitives/EventLog/toRpc.ts +49 -0
  160. package/src/primitives/Hardfork/HardforkSchema.ts +3 -3
  161. package/src/primitives/Hardfork/allIds.ts +13 -0
  162. package/src/primitives/Hardfork/allNames.ts +13 -0
  163. package/src/primitives/Hardfork/compare.ts +17 -0
  164. package/src/primitives/Hardfork/comparisons.ts +45 -0
  165. package/src/primitives/Hardfork/equals.ts +17 -0
  166. package/src/primitives/Hardfork/features.ts +61 -0
  167. package/src/primitives/Hardfork/fromString.ts +16 -0
  168. package/src/primitives/Hardfork/index.ts +128 -18
  169. package/src/primitives/Hardfork/isValidName.ts +14 -0
  170. package/src/primitives/Hardfork/minMax.ts +23 -0
  171. package/src/primitives/Hardfork/range.ts +19 -0
  172. package/src/primitives/Hardfork/toString.ts +16 -0
  173. package/src/primitives/Hash/Hash.test.ts +104 -0
  174. package/src/primitives/Hash/from.ts +47 -0
  175. package/src/primitives/Hash/fromBytes.ts +46 -0
  176. package/src/primitives/Hash/fromHex.ts +44 -0
  177. package/src/primitives/Hash/index.ts +45 -8
  178. package/src/primitives/Hash/isHash.ts +31 -0
  179. package/src/primitives/Hash/toHex.ts +29 -0
  180. package/src/primitives/Hex/Hex.test.ts +327 -153
  181. package/src/primitives/Hex/assertSize.ts +41 -0
  182. package/src/primitives/Hex/concat.ts +37 -0
  183. package/src/primitives/Hex/from.ts +38 -0
  184. package/src/primitives/Hex/fromBigInt.ts +40 -0
  185. package/src/primitives/Hex/fromBoolean.ts +29 -0
  186. package/src/primitives/Hex/fromNumber.ts +41 -0
  187. package/src/primitives/Hex/fromString.ts +28 -0
  188. package/src/primitives/Hex/index.ts +68 -37
  189. package/src/primitives/Hex/pad.ts +40 -0
  190. package/src/primitives/Hex/padRight.ts +39 -0
  191. package/src/primitives/Hex/size.ts +29 -0
  192. package/src/primitives/Hex/slice.ts +42 -0
  193. package/src/primitives/Hex/toBigInt.ts +27 -0
  194. package/src/primitives/Hex/toBoolean.ts +38 -0
  195. package/src/primitives/Hex/toNumber.ts +37 -0
  196. package/src/primitives/Hex/toStringHex.ts +39 -0
  197. package/src/primitives/Hex/trim.ts +27 -0
  198. package/src/primitives/Hex/validate.ts +37 -0
  199. package/src/primitives/Hex/xor.ts +39 -0
  200. package/src/primitives/Opcode/OpcodeSchema.ts +1 -1
  201. package/src/primitives/Opcode/disassemble.ts +15 -0
  202. package/src/primitives/Opcode/dupPosition.ts +15 -0
  203. package/src/primitives/Opcode/format.ts +15 -0
  204. package/src/primitives/Opcode/getters.ts +54 -0
  205. package/src/primitives/Opcode/index.ts +301 -11
  206. package/src/primitives/Opcode/info.ts +18 -0
  207. package/src/primitives/Opcode/jumpDests.ts +15 -0
  208. package/src/primitives/Opcode/logTopics.ts +15 -0
  209. package/src/primitives/Opcode/name.ts +15 -0
  210. package/src/primitives/Opcode/parse.ts +15 -0
  211. package/src/primitives/Opcode/predicates.ts +72 -0
  212. package/src/primitives/Opcode/pushBytes.ts +15 -0
  213. package/src/primitives/Opcode/pushOpcode.ts +15 -0
  214. package/src/primitives/Opcode/swapPosition.ts +15 -0
  215. package/src/primitives/Rlp/decodeBatch.ts +46 -0
  216. package/src/primitives/Rlp/decodeObject.ts +46 -0
  217. package/src/primitives/Rlp/decodeValue.ts +51 -0
  218. package/src/primitives/Rlp/encodeBatch.ts +50 -0
  219. package/src/primitives/Rlp/encodeObject.ts +48 -0
  220. package/src/primitives/Rlp/encodeVariadic.ts +49 -0
  221. package/src/primitives/Rlp/equals.ts +22 -0
  222. package/src/primitives/Rlp/from.ts +44 -0
  223. package/src/primitives/Rlp/fromJSON.ts +45 -0
  224. package/src/primitives/Rlp/getEncodedLength.ts +47 -0
  225. package/src/primitives/Rlp/getLength.ts +44 -0
  226. package/src/primitives/Rlp/index.ts +67 -14
  227. package/src/primitives/Rlp/isBytesData.ts +21 -0
  228. package/src/primitives/Rlp/isCanonical.ts +32 -0
  229. package/src/primitives/Rlp/isData.ts +21 -0
  230. package/src/primitives/Rlp/isList.ts +46 -0
  231. package/src/primitives/Rlp/isListData.ts +21 -0
  232. package/src/primitives/Rlp/isString.ts +46 -0
  233. package/src/primitives/Rlp/toJSON.ts +20 -0
  234. package/src/primitives/Rlp/toRaw.ts +31 -0
  235. package/src/primitives/Signature/Signature.test.ts +217 -0
  236. package/src/primitives/Signature/from.ts +38 -0
  237. package/src/primitives/Signature/fromBytes.ts +31 -0
  238. package/src/primitives/Signature/fromCompact.ts +33 -0
  239. package/src/primitives/Signature/fromDER.ts +35 -0
  240. package/src/primitives/Signature/fromEd25519.ts +24 -0
  241. package/src/primitives/Signature/fromHex.ts +29 -0
  242. package/src/primitives/Signature/fromP256.ts +25 -0
  243. package/src/primitives/Signature/fromRpc.ts +38 -0
  244. package/src/primitives/Signature/fromSecp256k1.ts +29 -0
  245. package/src/primitives/Signature/fromTuple.ts +33 -0
  246. package/src/primitives/Signature/getR.ts +24 -0
  247. package/src/primitives/Signature/getS.ts +24 -0
  248. package/src/primitives/Signature/getV.ts +24 -0
  249. package/src/primitives/Signature/index.ts +61 -11
  250. package/src/primitives/Signature/toDER.ts +24 -0
  251. package/src/primitives/Signature/toHex.ts +24 -0
  252. package/src/primitives/Signature/toRpc.ts +35 -0
  253. package/src/primitives/Signature/toTuple.ts +29 -0
  254. package/src/primitives/Signature/verify.ts +31 -0
  255. package/src/primitives/Siwe/create.ts +56 -0
  256. package/src/primitives/Siwe/hash.ts +27 -0
  257. package/src/primitives/Siwe/index.ts +57 -21
  258. package/src/primitives/Siwe/parse.ts +24 -0
  259. package/src/primitives/Siwe/verify.ts +47 -0
  260. package/src/primitives/Transaction/Transaction.test.ts +309 -0
  261. package/src/primitives/Transaction/index.ts +467 -2
  262. package/src/primitives/Uint/Uint.test.ts +200 -0
  263. package/src/primitives/Uint/dividedBy.ts +34 -0
  264. package/src/primitives/Uint/from.ts +35 -0
  265. package/src/primitives/Uint/fromAbiEncoded.ts +29 -0
  266. package/src/primitives/Uint/fromBigInt.ts +30 -0
  267. package/src/primitives/Uint/fromBytes.ts +32 -0
  268. package/src/primitives/Uint/fromHex.ts +32 -0
  269. package/src/primitives/Uint/fromNumber.ts +30 -0
  270. package/src/primitives/Uint/index.ts +90 -45
  271. package/src/primitives/Uint/isUint256.ts +25 -0
  272. package/src/primitives/Uint/isValid.ts +25 -0
  273. package/src/primitives/Uint/modulo.ts +34 -0
  274. package/src/primitives/Uint/toHex.ts +31 -0
  275. package/src/primitives/Uint/tryFrom.ts +30 -0
  276. package/src/services/Contract/Contract.test.ts +46 -41
  277. package/src/services/Contract/Contract.ts +25 -29
  278. package/src/services/Contract/ContractTypes.ts +6 -3
  279. package/src/services/Contract/estimateGas.test.ts +21 -9
  280. package/src/services/Contract/estimateGas.ts +21 -23
  281. package/src/services/Debug/Debug.ts +1 -1
  282. package/src/services/Debug/DebugService.ts +1 -1
  283. package/src/services/FeeEstimator/DefaultFeeEstimator.ts +10 -6
  284. package/src/services/FeeEstimator/FeeEstimator.test.ts +68 -62
  285. package/src/services/Multicall/BalanceResolver.ts +1 -1
  286. package/src/services/Multicall/GetBalance.ts +1 -1
  287. package/src/services/Multicall/Multicall.ts +1 -1
  288. package/src/services/NonceManager/DefaultNonceManager.ts +4 -7
  289. package/src/services/NonceManager/NonceManager.test.ts +20 -33
  290. package/src/services/Provider/Provider.test.ts +155 -349
  291. package/src/services/Provider/Provider.ts +14 -1180
  292. package/src/services/Provider/ProviderService.ts +14 -1199
  293. package/src/services/Provider/actions/multicall.test.ts +29 -39
  294. package/src/services/Provider/actions/multicall.ts +2 -2
  295. package/src/services/Provider/actions/readContract.test.ts +45 -50
  296. package/src/services/Provider/actions/readContract.ts +2 -6
  297. package/src/services/Provider/actions/simulateContract.test.ts +55 -232
  298. package/src/services/Provider/actions/simulateContract.ts +2 -3
  299. package/src/services/Provider/ens/getEnsAddress.ts +11 -14
  300. package/src/services/Provider/ens/getEnsName.ts +15 -18
  301. package/src/services/Provider/ens/getEnsResolver.ts +11 -14
  302. package/src/services/Provider/ens/getEnsText.ts +15 -18
  303. package/src/services/Provider/functions/backfillBlocks.ts +97 -0
  304. package/src/services/Provider/functions/call.ts +45 -0
  305. package/src/services/Provider/functions/createAccessList.ts +61 -0
  306. package/src/services/Provider/functions/createBlockFilter.ts +41 -0
  307. package/src/services/Provider/functions/createEventFilter.ts +43 -0
  308. package/src/services/Provider/functions/createPendingTransactionFilter.ts +41 -0
  309. package/src/services/Provider/functions/estimateGas.ts +52 -0
  310. package/src/services/Provider/functions/getAccounts.ts +40 -0
  311. package/src/services/Provider/functions/getBalance.ts +50 -0
  312. package/src/services/Provider/functions/getBlobBaseFee.ts +46 -0
  313. package/src/services/Provider/functions/getBlock.ts +95 -0
  314. package/src/services/Provider/functions/getBlockNumber.ts +51 -0
  315. package/src/services/Provider/functions/getBlockReceipts.ts +78 -0
  316. package/src/services/Provider/functions/getBlockTransactionCount.ts +86 -0
  317. package/src/services/Provider/functions/getChainId.ts +46 -0
  318. package/src/services/Provider/functions/getCode.ts +43 -0
  319. package/src/services/Provider/functions/getCoinbase.ts +40 -0
  320. package/src/services/Provider/functions/getFeeHistory.ts +85 -0
  321. package/src/services/Provider/functions/getFilterChanges.ts +42 -0
  322. package/src/services/Provider/functions/getFilterLogs.ts +44 -0
  323. package/src/services/Provider/functions/getGasPrice.ts +46 -0
  324. package/src/services/Provider/functions/getHashrate.ts +46 -0
  325. package/src/services/Provider/functions/getLogs.ts +45 -0
  326. package/src/services/Provider/functions/getMaxPriorityFeePerGas.ts +46 -0
  327. package/src/services/Provider/functions/getMining.ts +40 -0
  328. package/src/services/Provider/functions/getProof.ts +52 -0
  329. package/src/services/Provider/functions/getProtocolVersion.ts +40 -0
  330. package/src/services/Provider/functions/getStorageAt.ts +52 -0
  331. package/src/services/Provider/functions/getSyncing.ts +56 -0
  332. package/src/services/Provider/functions/getTransaction.ts +57 -0
  333. package/src/services/Provider/functions/getTransactionByBlockHashAndIndex.ts +73 -0
  334. package/src/services/Provider/functions/getTransactionByBlockNumberAndIndex.ts +86 -0
  335. package/src/services/Provider/functions/getTransactionConfirmations.ts +70 -0
  336. package/src/services/Provider/functions/getTransactionCount.ts +50 -0
  337. package/src/services/Provider/functions/getTransactionReceipt.ts +57 -0
  338. package/src/services/Provider/functions/getUncle.ts +97 -0
  339. package/src/services/Provider/functions/getUncleCount.ts +86 -0
  340. package/src/services/Provider/functions/index.ts +73 -0
  341. package/src/services/Provider/functions/netVersion.ts +40 -0
  342. package/src/services/Provider/functions/sendRawTransaction.ts +40 -0
  343. package/src/services/Provider/functions/sendTransaction.ts +48 -0
  344. package/src/services/Provider/functions/sign.ts +50 -0
  345. package/src/services/Provider/functions/signTransaction.ts +52 -0
  346. package/src/services/Provider/functions/simulateV1.ts +95 -0
  347. package/src/services/Provider/functions/simulateV2.ts +51 -0
  348. package/src/services/Provider/functions/subscribe.ts +49 -0
  349. package/src/services/Provider/functions/uninstallFilter.ts +40 -0
  350. package/src/services/Provider/functions/unsubscribe.ts +41 -0
  351. package/src/services/Provider/functions/waitForTransactionReceipt.ts +168 -0
  352. package/src/services/Provider/functions/watchBlocks.ts +98 -0
  353. package/src/services/Provider/index.ts +29 -178
  354. package/src/services/Provider/types.ts +780 -0
  355. package/src/services/Provider/utils.ts +204 -0
  356. package/src/services/RawProvider/ForkProviderTransport.ts +2 -3
  357. package/src/services/RawProvider/HttpProviderTransport.ts +3 -3
  358. package/src/services/RawProvider/InMemoryProviderTransport.ts +3 -3
  359. package/src/services/RawProvider/WebSocketProviderTransport.ts +3 -3
  360. package/src/services/Signer/Signer.test.ts +211 -187
  361. package/src/services/Signer/Signer.ts +26 -16
  362. package/src/services/Signer/actions/deployContract.test.ts +125 -105
  363. package/src/services/Signer/actions/deployContract.ts +3 -2
  364. package/src/services/Signer/actions/prepareAuthorization.test.ts +47 -48
  365. package/src/services/Signer/actions/prepareAuthorization.ts +3 -3
  366. package/src/services/Signer/actions/signAuthorization.test.ts +39 -45
  367. package/src/services/Signer/actions/signAuthorization.ts +3 -3
  368. package/src/services/Signer/actions/writeContract.test.ts +41 -57
  369. package/src/services/Transport/FallbackTransport.ts +3 -3
  370. package/src/services/Transport/HttpTransport.ts +3 -3
  371. package/src/services/Transport/config.ts +7 -7
  372. package/src/services/Transport/index.ts +3 -4
  373. package/src/services/errors.test.ts +3 -8
  374. package/src/services/index.ts +8 -90
  375. package/src/services/presets/index.ts +9 -10
  376. package/src/services/presets/presets.test.ts +14 -29
  377. package/src/standards/ERC165.test.ts +19 -20
  378. package/src/standards/ERC165.ts +9 -11
  379. package/src/type-exports.test.ts +37 -0
  380. package/dist/AccountService-BetXokad.d.ts +0 -1717
  381. package/dist/RpcResolver-BpvqybjD.d.ts +0 -6439
  382. package/src/services/Provider/Account.ts +0 -33
  383. package/src/services/Provider/AccountService.ts +0 -84
  384. package/src/services/Provider/Blocks.ts +0 -32
  385. package/src/services/Provider/BlocksService.ts +0 -73
  386. package/src/services/Provider/Events.ts +0 -33
  387. package/src/services/Provider/EventsService.ts +0 -71
  388. package/src/services/Provider/Network.ts +0 -41
  389. package/src/services/Provider/NetworkService.ts +0 -114
  390. package/src/services/Provider/Simulation.ts +0 -34
  391. package/src/services/Provider/SimulationService.ts +0 -161
  392. package/src/services/Provider/Streaming.ts +0 -30
  393. package/src/services/Provider/StreamingService.ts +0 -58
  394. package/src/services/Provider/Transaction.ts +0 -39
  395. package/src/services/Provider/TransactionService.ts +0 -83
  396. package/src/services/Provider/filters.ts +0 -91
  397. package/src/services/Provider/getBlobBaseFee.ts +0 -170
@@ -101,20 +101,25 @@ const erc20Abi = S.decodeUnknownSync(fromArray)([
101
101
  },
102
102
  ]) as any;
103
103
 
104
+ const mockCallFn = vi.fn();
105
+ const mockGetLogsFn = vi.fn();
106
+ const mockEstimateGasFn = vi.fn();
107
+
104
108
  const mockProvider = {
105
- call: vi.fn(),
106
- getLogs: vi.fn(),
107
- getBlockNumber: vi.fn(),
108
- getBalance: vi.fn(),
109
- getBlock: vi.fn(),
110
- getTransaction: vi.fn(),
111
- getTransactionReceipt: vi.fn(),
112
- getTransactionCount: vi.fn(),
113
- getCode: vi.fn(),
114
- getStorageAt: vi.fn(),
115
- estimateGas: vi.fn(),
116
- getChainId: vi.fn(),
117
- getGasPrice: vi.fn(),
109
+ request: <T>(method: string, params?: unknown[]) => {
110
+ switch (method) {
111
+ case "eth_call":
112
+ return mockCallFn(params?.[0], params?.[1]) as Effect.Effect<T, never>;
113
+ case "eth_getLogs":
114
+ return mockGetLogsFn(params?.[0]) as Effect.Effect<T, never>;
115
+ case "eth_estimateGas":
116
+ return mockEstimateGasFn(params?.[0]) as Effect.Effect<T, never>;
117
+ case "eth_chainId":
118
+ return Effect.succeed("0x1" as T);
119
+ default:
120
+ return Effect.succeed(null as T);
121
+ }
122
+ },
118
123
  };
119
124
 
120
125
  const mockSigner = {
@@ -219,7 +224,7 @@ describe("Contract", () => {
219
224
  describe("read methods", () => {
220
225
  it("calls eth_call with encoded function data", async () => {
221
226
  const expectedBalance = 1000000000000000000n;
222
- mockProvider.call.mockReturnValue(
227
+ mockCallFn.mockReturnValue(
223
228
  Effect.succeed(
224
229
  "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" as HexType,
225
230
  ),
@@ -237,12 +242,12 @@ describe("Contract", () => {
237
242
  program.pipe(Effect.provide(MockProviderLayer)),
238
243
  );
239
244
 
240
- expect(mockProvider.call).toHaveBeenCalled();
245
+ expect(mockCallFn).toHaveBeenCalled();
241
246
  expect(result).toBe(expectedBalance);
242
247
  });
243
248
 
244
249
  it("handles view function with no args", async () => {
245
- mockProvider.call.mockReturnValue(
250
+ mockCallFn.mockReturnValue(
246
251
  Effect.succeed(
247
252
  "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" as HexType,
248
253
  ),
@@ -258,7 +263,7 @@ describe("Contract", () => {
258
263
  program.pipe(Effect.provide(MockProviderLayer)),
259
264
  );
260
265
 
261
- expect(mockProvider.call).toHaveBeenCalled();
266
+ expect(mockCallFn).toHaveBeenCalled();
262
267
  expect(typeof result).toBe("bigint");
263
268
  });
264
269
 
@@ -268,7 +273,7 @@ describe("Contract", () => {
268
273
  const reserve0 = 1000000000000000000n;
269
274
  const reserve1 = 2000000000000000000n;
270
275
  const blockTimestamp = 1234567890n;
271
- mockProvider.call.mockReturnValue(
276
+ mockCallFn.mockReturnValue(
272
277
  Effect.succeed(
273
278
  ("0x" +
274
279
  reserve0.toString(16).padStart(64, "0") +
@@ -296,7 +301,7 @@ describe("Contract", () => {
296
301
  });
297
302
 
298
303
  it("returns ContractCallError on failure", async () => {
299
- mockProvider.call.mockReturnValue(
304
+ mockCallFn.mockReturnValue(
300
305
  Effect.fail(new Error("execution reverted")),
301
306
  );
302
307
 
@@ -315,7 +320,7 @@ describe("Contract", () => {
315
320
  });
316
321
 
317
322
  it("returns ContractCallError for malformed return data (empty 0x)", async () => {
318
- mockProvider.call.mockReturnValue(Effect.succeed("0x" as HexType));
323
+ mockCallFn.mockReturnValue(Effect.succeed("0x" as HexType));
319
324
 
320
325
  const program = Effect.gen(function* () {
321
326
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -336,7 +341,7 @@ describe("Contract", () => {
336
341
  });
337
342
 
338
343
  it("returns ContractCallError for return data too short", async () => {
339
- mockProvider.call.mockReturnValue(Effect.succeed("0x1234" as HexType));
344
+ mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
340
345
 
341
346
  const program = Effect.gen(function* () {
342
347
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -357,7 +362,7 @@ describe("Contract", () => {
357
362
  });
358
363
 
359
364
  it("returns ContractCallError for odd-length hex", async () => {
360
- mockProvider.call.mockReturnValue(Effect.succeed("0x123" as HexType));
365
+ mockCallFn.mockReturnValue(Effect.succeed("0x123" as HexType));
361
366
 
362
367
  const program = Effect.gen(function* () {
363
368
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -702,7 +707,7 @@ describe("Contract", () => {
702
707
 
703
708
  describe("simulate methods", () => {
704
709
  it("calls eth_call without sending transaction", async () => {
705
- mockProvider.call.mockReturnValue(
710
+ mockCallFn.mockReturnValue(
706
711
  Effect.succeed(
707
712
  "0x0000000000000000000000000000000000000000000000000000000000000001" as HexType,
708
713
  ),
@@ -721,13 +726,13 @@ describe("Contract", () => {
721
726
  program.pipe(Effect.provide(MockProviderLayer)),
722
727
  );
723
728
 
724
- expect(mockProvider.call).toHaveBeenCalled();
729
+ expect(mockCallFn).toHaveBeenCalled();
725
730
  expect(mockSigner.sendTransaction).not.toHaveBeenCalled();
726
731
  expect(result).toBe(true);
727
732
  });
728
733
 
729
734
  it("handles zero-output function (sync)", async () => {
730
- mockProvider.call.mockReturnValue(Effect.succeed("0x" as HexType));
735
+ mockCallFn.mockReturnValue(Effect.succeed("0x" as HexType));
731
736
 
732
737
  const program = Effect.gen(function* () {
733
738
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -739,14 +744,14 @@ describe("Contract", () => {
739
744
  program.pipe(Effect.provide(MockProviderLayer)),
740
745
  );
741
746
 
742
- expect(mockProvider.call).toHaveBeenCalled();
747
+ expect(mockCallFn).toHaveBeenCalled();
743
748
  expect(result).toBeUndefined();
744
749
  });
745
750
  });
746
751
 
747
752
  describe("getEvents", () => {
748
753
  it("fetches and decodes events", async () => {
749
- mockProvider.getLogs.mockReturnValue(
754
+ mockGetLogsFn.mockReturnValue(
750
755
  Effect.succeed([
751
756
  {
752
757
  address: testAddress,
@@ -776,13 +781,13 @@ describe("Contract", () => {
776
781
  program.pipe(Effect.provide(MockProviderLayer)),
777
782
  );
778
783
 
779
- expect(mockProvider.getLogs).toHaveBeenCalled();
784
+ expect(mockGetLogsFn).toHaveBeenCalled();
780
785
  expect(result.length).toBe(1);
781
786
  expect(result[0].eventName).toBe("Transfer");
782
787
  });
783
788
 
784
789
  it("applies event filters", async () => {
785
- mockProvider.getLogs.mockReturnValue(Effect.succeed([]));
790
+ mockGetLogsFn.mockReturnValue(Effect.succeed([]));
786
791
 
787
792
  const program = Effect.gen(function* () {
788
793
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -796,8 +801,8 @@ describe("Contract", () => {
796
801
 
797
802
  await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
798
803
 
799
- expect(mockProvider.getLogs).toHaveBeenCalled();
800
- const callArgs = mockProvider.getLogs.mock.calls[0][0];
804
+ expect(mockGetLogsFn).toHaveBeenCalled();
805
+ const callArgs = mockGetLogsFn.mock.calls[0][0];
801
806
  expect(callArgs.address).toBe(Address.toHex(testAddress));
802
807
  });
803
808
 
@@ -820,7 +825,7 @@ describe("Contract", () => {
820
825
  });
821
826
 
822
827
  it("handles fromBlock: 0n (genesis block)", async () => {
823
- mockProvider.getLogs.mockReturnValue(Effect.succeed([]));
828
+ mockGetLogsFn.mockReturnValue(Effect.succeed([]));
824
829
 
825
830
  const program = Effect.gen(function* () {
826
831
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -832,13 +837,13 @@ describe("Contract", () => {
832
837
 
833
838
  await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
834
839
 
835
- expect(mockProvider.getLogs).toHaveBeenCalled();
836
- const callArgs = mockProvider.getLogs.mock.calls[0][0];
840
+ expect(mockGetLogsFn).toHaveBeenCalled();
841
+ const callArgs = mockGetLogsFn.mock.calls[0][0];
837
842
  expect(callArgs.fromBlock).toBe("0x0");
838
843
  });
839
844
 
840
845
  it("handles large block numbers", async () => {
841
- mockProvider.getLogs.mockReturnValue(Effect.succeed([]));
846
+ mockGetLogsFn.mockReturnValue(Effect.succeed([]));
842
847
 
843
848
  const largeBlockNumber = 999999999999999n;
844
849
  const program = Effect.gen(function* () {
@@ -850,13 +855,13 @@ describe("Contract", () => {
850
855
 
851
856
  await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
852
857
 
853
- expect(mockProvider.getLogs).toHaveBeenCalled();
854
- const callArgs = mockProvider.getLogs.mock.calls[0][0];
858
+ expect(mockGetLogsFn).toHaveBeenCalled();
859
+ const callArgs = mockGetLogsFn.mock.calls[0][0];
855
860
  expect(callArgs.fromBlock).toBe(`0x${largeBlockNumber.toString(16)}`);
856
861
  });
857
862
 
858
863
  it("returns ContractEventError for wrong topics length", async () => {
859
- mockProvider.getLogs.mockReturnValue(
864
+ mockGetLogsFn.mockReturnValue(
860
865
  Effect.succeed([
861
866
  {
862
867
  address: testAddress,
@@ -890,7 +895,7 @@ describe("Contract", () => {
890
895
  });
891
896
 
892
897
  it("returns ContractEventError for malformed topic hex", async () => {
893
- mockProvider.getLogs.mockReturnValue(
898
+ mockGetLogsFn.mockReturnValue(
894
899
  Effect.succeed([
895
900
  {
896
901
  address: testAddress,
@@ -928,7 +933,7 @@ describe("Contract", () => {
928
933
 
929
934
  describe("error handling", () => {
930
935
  it("decode error from read method is catchable with Effect.catchTag", async () => {
931
- mockProvider.call.mockReturnValue(Effect.succeed("0x1234" as HexType));
936
+ mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
932
937
 
933
938
  const abiWithMissingFn = [
934
939
  {
@@ -957,7 +962,7 @@ describe("Contract", () => {
957
962
  });
958
963
 
959
964
  it("decode error from simulate method is catchable with Effect.catchTag", async () => {
960
- mockProvider.call.mockReturnValue(Effect.succeed("0x1234" as HexType));
965
+ mockCallFn.mockReturnValue(Effect.succeed("0x1234" as HexType));
961
966
 
962
967
  const abiWithMissingFn = [
963
968
  {
@@ -38,6 +38,7 @@ import {
38
38
  type LogFilter as ProviderLogFilter,
39
39
  ProviderService,
40
40
  } from "../Provider/index.js";
41
+ import { call, getLogs } from "../Provider/functions/index.js";
41
42
  import { SignerService } from "../Signer/index.js";
42
43
 
43
44
  type AddressType = BrandedAddress.AddressType;
@@ -230,7 +231,6 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
230
231
  abi: TAbi,
231
232
  ): Effect.Effect<ContractInstance<TAbi>, never, ProviderService> =>
232
233
  Effect.gen(function* () {
233
- const provider = yield* ProviderService;
234
234
  const abiItems = abi as readonly AbiItem[];
235
235
  const addressHex =
236
236
  typeof address === "string"
@@ -263,23 +263,21 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
263
263
  (
264
264
  read as unknown as Record<
265
265
  string,
266
- (...args: unknown[]) => Effect.Effect<unknown, ContractCallError>
266
+ (...args: unknown[]) => Effect.Effect<unknown, ContractCallError, ProviderService>
267
267
  >
268
268
  )[fn.name] = (...args: unknown[]) =>
269
269
  Effect.gen(function* () {
270
270
  const data = encodeArgs(abiItems, fn.name, args);
271
- const result = yield* provider
272
- .call({ to: addressHex, data })
273
- .pipe(
274
- Effect.mapError(
275
- (e) =>
276
- new ContractCallError(
277
- { address: addressHex, method: fn.name, args },
278
- e.message,
279
- { cause: e },
280
- ),
281
- ),
282
- );
271
+ const result = yield* call({ to: addressHex, data }).pipe(
272
+ Effect.mapError(
273
+ (e) =>
274
+ new ContractCallError(
275
+ { address: addressHex, method: fn.name, args },
276
+ e.message,
277
+ { cause: e },
278
+ ),
279
+ ),
280
+ );
283
281
  return yield* decodeResultE(abiItems, fn.name, result as HexType, {
284
282
  address: addressHex,
285
283
  args,
@@ -350,12 +348,12 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
350
348
  (
351
349
  simulate as unknown as Record<
352
350
  string,
353
- (...args: unknown[]) => Effect.Effect<unknown, ContractCallError>
351
+ (...args: unknown[]) => Effect.Effect<unknown, ContractCallError, ProviderService>
354
352
  >
355
353
  )[fn.name] = (...args: unknown[]) =>
356
354
  Effect.gen(function* () {
357
355
  const data = encodeArgs(abiItems, fn.name, args);
358
- const result = yield* provider.call({ to: addressHex, data }).pipe(
356
+ const result = yield* call({ to: addressHex, data }).pipe(
359
357
  Effect.mapError(
360
358
  (e) =>
361
359
  new ContractCallError(
@@ -380,7 +378,7 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
380
378
  const getEvents = <E extends string>(
381
379
  eventName: E,
382
380
  filter?: EventFilter,
383
- ): Effect.Effect<DecodedEvent[], ContractEventError> =>
381
+ ): Effect.Effect<DecodedEvent[], ContractEventError, ProviderService> =>
384
382
  Effect.gen(function* () {
385
383
  const topic = yield* getEventTopicE(abiItems, eventName, addressHex);
386
384
 
@@ -399,18 +397,16 @@ const ContractFactory: ContractFactory = <TAbi extends Abi>(
399
397
  toBlock: toProviderBlockTag(filter?.toBlock),
400
398
  };
401
399
 
402
- const logs = yield* provider
403
- .getLogs(logFilter)
404
- .pipe(
405
- Effect.mapError(
406
- (e) =>
407
- new ContractEventError(
408
- { address: addressHex, event: eventName, filter },
409
- e.message,
410
- { cause: e },
411
- ),
412
- ),
413
- );
400
+ const logs = yield* getLogs(logFilter).pipe(
401
+ Effect.mapError(
402
+ (e) =>
403
+ new ContractEventError(
404
+ { address: addressHex, event: eventName, filter },
405
+ e.message,
406
+ { cause: e },
407
+ ),
408
+ ),
409
+ );
414
410
 
415
411
  return yield* Effect.forEach(logs, (log) =>
416
412
  decodeEventLogE(abiItems, eventName, log, addressHex),
@@ -80,6 +80,7 @@ export type AbiItem = {
80
80
  export type Abi = readonly AbiItem[];
81
81
 
82
82
  import type * as Effect from "effect/Effect";
83
+ import type { ProviderService } from "../Provider/index.js";
83
84
  import type { SignerService } from "../Signer/index.js";
84
85
 
85
86
  /**
@@ -283,7 +284,7 @@ export interface ContractInstance<TAbi extends Abi> {
283
284
  readonly getEvents: <E extends ExtractEventNames<TAbi>>(
284
285
  eventName: E,
285
286
  filter?: EventFilter,
286
- ) => Effect.Effect<DecodedEvent[], ContractEventError>;
287
+ ) => Effect.Effect<DecodedEvent[], ContractEventError, ProviderService>;
287
288
  }
288
289
 
289
290
  type ExtractViewFunctions<TAbi extends Abi> = Extract<
@@ -374,7 +375,8 @@ type ContractReadMethods<TAbi extends Abi> = {
374
375
  ? AbiOutputToTs<O>
375
376
  : unknown
376
377
  : unknown,
377
- ContractCallError
378
+ ContractCallError,
379
+ ProviderService
378
380
  >;
379
381
  };
380
382
 
@@ -407,6 +409,7 @@ type ContractSimulateMethods<TAbi extends Abi> = {
407
409
  ? AbiOutputToTs<O>
408
410
  : unknown
409
411
  : unknown,
410
- ContractCallError
412
+ ContractCallError,
413
+ ProviderService
411
414
  >;
412
415
  };
@@ -32,8 +32,19 @@ const erc20Abi = S.decodeUnknownSync(fromArray)([
32
32
  },
33
33
  ]);
34
34
 
35
+ const mockEstimateGasFn = vi.fn();
36
+
35
37
  const mockProvider = {
36
- estimateGas: vi.fn(),
38
+ request: <T>(method: string, params?: unknown[]) => {
39
+ switch (method) {
40
+ case "eth_estimateGas":
41
+ return mockEstimateGasFn(params?.[0]) as Effect.Effect<T, never>;
42
+ case "eth_chainId":
43
+ return Effect.succeed("0x1" as T);
44
+ default:
45
+ return Effect.succeed(null as T);
46
+ }
47
+ },
37
48
  };
38
49
 
39
50
  const MockProviderLayer = Layer.succeed(ProviderService, mockProvider as any);
@@ -43,10 +54,10 @@ describe("Contract.estimateGas", () => {
43
54
  vi.clearAllMocks();
44
55
  });
45
56
 
46
- it("encodes data and calls provider.estimateGas", async () => {
57
+ it("encodes data and calls estimateGas", async () => {
47
58
  const recipient = Address("0x1234567890123456789012345678901234567890");
48
59
  const amount = 1000n;
49
- mockProvider.estimateGas.mockReturnValue(Effect.succeed(45000n));
60
+ mockEstimateGasFn.mockReturnValue(Effect.succeed("0xafc8")); // 45000 in hex
50
61
 
51
62
  const program = Effect.gen(function* () {
52
63
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -61,9 +72,9 @@ describe("Contract.estimateGas", () => {
61
72
  );
62
73
 
63
74
  expect(gas).toBe(45000n);
64
- expect(mockProvider.estimateGas).toHaveBeenCalledTimes(1);
75
+ expect(mockEstimateGasFn).toHaveBeenCalledTimes(1);
65
76
 
66
- const callArgs = mockProvider.estimateGas.mock.calls[0][0];
77
+ const callArgs = mockEstimateGasFn.mock.calls[0][0];
67
78
  const expectedData = BrandedAbi.encodeFunction(
68
79
  erc20Abi as unknown as BrandedAbi.Abi,
69
80
  "transfer",
@@ -76,7 +87,7 @@ describe("Contract.estimateGas", () => {
76
87
 
77
88
  it("passes value for payable methods", async () => {
78
89
  const value = 1000000000000000000n;
79
- mockProvider.estimateGas.mockReturnValue(Effect.succeed(21000n));
90
+ mockEstimateGasFn.mockReturnValue(Effect.succeed("0x5208")); // hex response from RPC
80
91
 
81
92
  const program = Effect.gen(function* () {
82
93
  const contract = yield* Contract(testAddress, erc20Abi);
@@ -85,7 +96,7 @@ describe("Contract.estimateGas", () => {
85
96
 
86
97
  await Effect.runPromise(program.pipe(Effect.provide(MockProviderLayer)));
87
98
 
88
- const callArgs = mockProvider.estimateGas.mock.calls[0][0];
99
+ const callArgs = mockEstimateGasFn.mock.calls[0][0];
89
100
  const expectedData = BrandedAbi.encodeFunction(
90
101
  erc20Abi as unknown as BrandedAbi.Abi,
91
102
  "deposit",
@@ -93,12 +104,13 @@ describe("Contract.estimateGas", () => {
93
104
  );
94
105
 
95
106
  expect(callArgs.data as HexType).toBe(expectedData as HexType);
96
- expect(callArgs.value).toBe(value);
107
+ // Value is hex-encoded for RPC
108
+ expect(callArgs.value).toBe(`0x${value.toString(16)}`);
97
109
  });
98
110
 
99
111
  it("maps provider errors to ContractCallError", async () => {
100
112
  const recipient = Address("0x1234567890123456789012345678901234567890");
101
- mockProvider.estimateGas.mockReturnValue(
113
+ mockEstimateGasFn.mockReturnValue(
102
114
  Effect.fail(new Error("estimate failed")),
103
115
  );
104
116
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  import { Address, BrandedAbi, type BrandedAddress } from "@tevm/voltaire";
9
9
  import * as Effect from "effect/Effect";
10
+ import { estimateGas as estimateGasRpc } from "../Provider/functions/index.js";
10
11
  import { ProviderService } from "../Provider/index.js";
11
12
  import {
12
13
  type Abi,
@@ -91,7 +92,6 @@ export const estimateGas = <
91
92
  args?: WriteMethodArgs<TAbi, TFunctionName>,
92
93
  ): Effect.Effect<bigint, ContractCallError, ProviderService> =>
93
94
  Effect.gen(function* () {
94
- const provider = yield* ProviderService;
95
95
  const addressHex = getAddressHex(contract.address as AddressType);
96
96
  const abiItems = contract.abi as readonly AbiItem[];
97
97
  const functionLabel = String(methodName);
@@ -138,26 +138,24 @@ export const estimateGas = <
138
138
  ),
139
139
  });
140
140
 
141
- return yield* provider
142
- .estimateGas({
143
- to: addressHex,
144
- data,
145
- value: options?.value,
146
- gas: options?.gas,
147
- })
148
- .pipe(
149
- Effect.mapError(
150
- (e) =>
151
- new ContractCallError(
152
- {
153
- address: addressHex,
154
- method: functionLabel,
155
- args: callArgs,
156
- value: options?.value,
157
- },
158
- e.message,
159
- { cause: e },
160
- ),
161
- ),
162
- );
141
+ return yield* estimateGasRpc({
142
+ to: addressHex,
143
+ data,
144
+ value: options?.value,
145
+ gas: options?.gas,
146
+ }).pipe(
147
+ Effect.mapError(
148
+ (e) =>
149
+ new ContractCallError(
150
+ {
151
+ address: addressHex,
152
+ method: functionLabel,
153
+ args: callArgs,
154
+ value: options?.value,
155
+ },
156
+ e.message,
157
+ { cause: e },
158
+ ),
159
+ ),
160
+ );
163
161
  });
@@ -13,7 +13,7 @@ import type {
13
13
  CallRequest,
14
14
  HashInput,
15
15
  TransactionIndexInput,
16
- } from "../Provider/ProviderService.js";
16
+ } from "../Provider/types.js";
17
17
  import { TransportService } from "../Transport/TransportService.js";
18
18
  import { DebugService } from "./DebugService.js";
19
19
 
@@ -13,7 +13,7 @@ import type {
13
13
  CallRequest,
14
14
  HashInput,
15
15
  TransactionIndexInput,
16
- } from "../Provider/ProviderService.js";
16
+ } from "../Provider/types.js";
17
17
  import type { TransportError } from "../Transport/TransportError.js";
18
18
 
19
19
  /**
@@ -18,6 +18,11 @@
18
18
  import * as Effect from "effect/Effect";
19
19
  import * as Layer from "effect/Layer";
20
20
  import { ProviderService } from "../Provider/index.js";
21
+ import {
22
+ getGasPrice,
23
+ getBlock,
24
+ getMaxPriorityFeePerGas,
25
+ } from "../Provider/functions/index.js";
21
26
  import {
22
27
  FeeEstimationError,
23
28
  FeeEstimatorService,
@@ -89,7 +94,6 @@ const makeDefaultFeeEstimator = (
89
94
  Layer.effect(
90
95
  FeeEstimatorService,
91
96
  Effect.gen(function* () {
92
- const provider = yield* ProviderService;
93
97
  const multiplierNumerator = BigInt(
94
98
  Math.round(baseFeeMultiplier * MULTIPLIER_PRECISION_NUMBER),
95
99
  );
@@ -100,7 +104,7 @@ const makeDefaultFeeEstimator = (
100
104
  ProviderService
101
105
  > =>
102
106
  Effect.gen(function* () {
103
- const gasPrice = yield* provider.getGasPrice().pipe(
107
+ const gasPriceValue = yield* getGasPrice().pipe(
104
108
  Effect.mapError(
105
109
  (e) =>
106
110
  new FeeEstimationError({
@@ -110,7 +114,7 @@ const makeDefaultFeeEstimator = (
110
114
  ),
111
115
  );
112
116
  const validatedGasPrice = yield* ensureReasonableGasPrice(
113
- gasPrice,
117
+ gasPriceValue,
114
118
  "Gas price",
115
119
  );
116
120
  return { gasPrice: validatedGasPrice };
@@ -123,7 +127,7 @@ const makeDefaultFeeEstimator = (
123
127
  > =>
124
128
  Effect.gen(function* () {
125
129
  const [block, priorityFee] = yield* Effect.all([
126
- provider.getBlock({ blockTag: "latest" }).pipe(
130
+ getBlock({ blockTag: "latest" }).pipe(
127
131
  Effect.mapError(
128
132
  (e) =>
129
133
  new FeeEstimationError({
@@ -132,7 +136,7 @@ const makeDefaultFeeEstimator = (
132
136
  }),
133
137
  ),
134
138
  ),
135
- provider.getMaxPriorityFeePerGas().pipe(
139
+ getMaxPriorityFeePerGas().pipe(
136
140
  Effect.mapError(
137
141
  (e) =>
138
142
  new FeeEstimationError({
@@ -185,7 +189,7 @@ const makeDefaultFeeEstimator = (
185
189
  type === "legacy" ? estimateLegacy() : estimateEIP1559(),
186
190
 
187
191
  getMaxPriorityFeePerGas: () =>
188
- provider.getMaxPriorityFeePerGas().pipe(
192
+ getMaxPriorityFeePerGas().pipe(
189
193
  Effect.mapError(
190
194
  (e) =>
191
195
  new FeeEstimationError({