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
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @fileoverview Free function to get the uncle count in a block.
3
+ *
4
+ * @module Provider/functions/getUncleCount
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import {
11
+ type BlockTag,
12
+ type GetUncleCountArgs,
13
+ ProviderResponseError,
14
+ } from "../types.js";
15
+ import type { TransportError } from "../../Transport/TransportError.js";
16
+
17
+ /**
18
+ * Gets the number of uncles in a block.
19
+ *
20
+ * @param args - Block identifier (blockTag or blockHash)
21
+ * @returns Effect yielding the uncle count as bigint
22
+ *
23
+ * @since 0.4.0
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { Effect } from 'effect'
28
+ * import { getUncleCount, Provider, HttpTransport } from 'voltaire-effect'
29
+ *
30
+ * const program = Effect.gen(function* () {
31
+ * // Get uncle count for latest block
32
+ * const count = yield* getUncleCount({})
33
+ *
34
+ * // Get by block hash
35
+ * const countByHash = yield* getUncleCount({
36
+ * blockHash: '0x...'
37
+ * })
38
+ * }).pipe(
39
+ * Effect.provide(Provider),
40
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
41
+ * )
42
+ * ```
43
+ */
44
+ export const getUncleCount = (
45
+ args: GetUncleCountArgs = {},
46
+ ): Effect.Effect<bigint, TransportError | ProviderResponseError, ProviderService> =>
47
+ Effect.flatMap(ProviderService, (svc) => {
48
+ if ("blockHash" in args && args.blockHash !== undefined) {
49
+ const hash =
50
+ typeof args.blockHash === "string"
51
+ ? args.blockHash
52
+ : `0x${Buffer.from(args.blockHash).toString("hex")}`;
53
+ return svc
54
+ .request<string>("eth_getUncleCountByBlockHash", [hash])
55
+ .pipe(
56
+ Effect.flatMap((hex) =>
57
+ Effect.try({
58
+ try: () => BigInt(hex),
59
+ catch: (error) =>
60
+ new ProviderResponseError(
61
+ hex,
62
+ "Invalid hex from eth_getUncleCountByBlockHash",
63
+ { cause: error },
64
+ ),
65
+ }),
66
+ ),
67
+ );
68
+ }
69
+
70
+ const blockTag: BlockTag = args.blockTag ?? "latest";
71
+ return svc
72
+ .request<string>("eth_getUncleCountByBlockNumber", [blockTag])
73
+ .pipe(
74
+ Effect.flatMap((hex) =>
75
+ Effect.try({
76
+ try: () => BigInt(hex),
77
+ catch: (error) =>
78
+ new ProviderResponseError(
79
+ hex,
80
+ "Invalid hex from eth_getUncleCountByBlockNumber",
81
+ { cause: error },
82
+ ),
83
+ }),
84
+ ),
85
+ );
86
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Free functions for Provider operations.
3
+ *
4
+ * @module Provider/functions
5
+ * @since 0.4.0
6
+ */
7
+
8
+ // Block operations
9
+ export { getBlockNumber } from "./getBlockNumber.js";
10
+ export { getBlock } from "./getBlock.js";
11
+ export { getBlockTransactionCount } from "./getBlockTransactionCount.js";
12
+ export { getBlockReceipts } from "./getBlockReceipts.js";
13
+ export { getUncle } from "./getUncle.js";
14
+ export { getUncleCount } from "./getUncleCount.js";
15
+
16
+ // Account operations
17
+ export { getBalance } from "./getBalance.js";
18
+ export { getTransactionCount } from "./getTransactionCount.js";
19
+ export { getCode } from "./getCode.js";
20
+ export { getStorageAt } from "./getStorageAt.js";
21
+ export { getProof } from "./getProof.js";
22
+
23
+ // Transaction operations
24
+ export { getTransaction } from "./getTransaction.js";
25
+ export { getTransactionReceipt } from "./getTransactionReceipt.js";
26
+ export { getTransactionByBlockHashAndIndex } from "./getTransactionByBlockHashAndIndex.js";
27
+ export { getTransactionByBlockNumberAndIndex } from "./getTransactionByBlockNumberAndIndex.js";
28
+ export { sendRawTransaction } from "./sendRawTransaction.js";
29
+ export { getTransactionConfirmations } from "./getTransactionConfirmations.js";
30
+ export { waitForTransactionReceipt, type WaitForTransactionReceiptOptions } from "./waitForTransactionReceipt.js";
31
+
32
+ // Call and simulation operations
33
+ export { call } from "./call.js";
34
+ export { estimateGas } from "./estimateGas.js";
35
+ export { createAccessList, type CreateAccessListResult } from "./createAccessList.js";
36
+ export { simulateV1 } from "./simulateV1.js";
37
+ export { simulateV2 } from "./simulateV2.js";
38
+
39
+ // Event/Log operations
40
+ export { getLogs } from "./getLogs.js";
41
+ export { createEventFilter } from "./createEventFilter.js";
42
+ export { createBlockFilter } from "./createBlockFilter.js";
43
+ export { createPendingTransactionFilter } from "./createPendingTransactionFilter.js";
44
+ export { getFilterChanges } from "./getFilterChanges.js";
45
+ export { getFilterLogs } from "./getFilterLogs.js";
46
+ export { uninstallFilter } from "./uninstallFilter.js";
47
+
48
+ // Network operations
49
+ export { getChainId } from "./getChainId.js";
50
+ export { getGasPrice } from "./getGasPrice.js";
51
+ export { getMaxPriorityFeePerGas } from "./getMaxPriorityFeePerGas.js";
52
+ export { getFeeHistory } from "./getFeeHistory.js";
53
+ export { getBlobBaseFee } from "./getBlobBaseFee.js";
54
+ export { getSyncing } from "./getSyncing.js";
55
+ export { getAccounts } from "./getAccounts.js";
56
+ export { getCoinbase } from "./getCoinbase.js";
57
+ export { netVersion } from "./netVersion.js";
58
+ export { getProtocolVersion } from "./getProtocolVersion.js";
59
+ export { getMining } from "./getMining.js";
60
+ export { getHashrate } from "./getHashrate.js";
61
+
62
+ // Streaming operations
63
+ export { watchBlocks } from "./watchBlocks.js";
64
+ export { backfillBlocks } from "./backfillBlocks.js";
65
+
66
+ // Subscription operations
67
+ export { subscribe } from "./subscribe.js";
68
+ export { unsubscribe } from "./unsubscribe.js";
69
+
70
+ // Node-dependent operations (unlocked accounts)
71
+ export { sendTransaction } from "./sendTransaction.js";
72
+ export { sign } from "./sign.js";
73
+ export { signTransaction } from "./signTransaction.js";
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Free function to get the network version.
3
+ *
4
+ * @module Provider/functions/netVersion
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { TransportError } from "../../Transport/TransportError.js";
11
+
12
+ /**
13
+ * Gets the network ID (net_version).
14
+ *
15
+ * @returns Effect yielding the network version as string
16
+ *
17
+ * @since 0.4.0
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { Effect } from 'effect'
22
+ * import { netVersion, Provider, HttpTransport } from 'voltaire-effect'
23
+ *
24
+ * const program = Effect.gen(function* () {
25
+ * const version = yield* netVersion()
26
+ * console.log('Network version:', version)
27
+ * }).pipe(
28
+ * Effect.provide(Provider),
29
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
30
+ * )
31
+ * ```
32
+ */
33
+ export const netVersion = (): Effect.Effect<
34
+ string,
35
+ TransportError,
36
+ ProviderService
37
+ > =>
38
+ Effect.flatMap(ProviderService, (svc) =>
39
+ svc.request<string>("net_version"),
40
+ );
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Free function to send a raw signed transaction.
3
+ *
4
+ * @module Provider/functions/sendRawTransaction
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import type { TransportError } from "../../Transport/TransportError.js";
10
+ import { ProviderService } from "../ProviderService.js";
11
+
12
+ /**
13
+ * Sends a raw signed transaction.
14
+ *
15
+ * @param signedTx - The signed transaction as a hex string
16
+ * @returns Effect yielding the transaction hash
17
+ *
18
+ * @since 0.4.0
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Effect } from 'effect'
23
+ * import { sendRawTransaction, Provider, HttpTransport } from 'voltaire-effect'
24
+ *
25
+ * const program = Effect.gen(function* () {
26
+ * const signedTx = '0x...' // Your signed transaction
27
+ * const txHash = yield* sendRawTransaction(signedTx)
28
+ * console.log(`Transaction submitted: ${txHash}`)
29
+ * }).pipe(
30
+ * Effect.provide(Provider),
31
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
32
+ * )
33
+ * ```
34
+ */
35
+ export const sendRawTransaction = (
36
+ signedTx: `0x${string}`,
37
+ ): Effect.Effect<`0x${string}`, TransportError, ProviderService> =>
38
+ Effect.flatMap(ProviderService, (svc) =>
39
+ svc.request<`0x${string}`>("eth_sendRawTransaction", [signedTx]),
40
+ );
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @fileoverview Free function to send a transaction from an unlocked account.
3
+ *
4
+ * @module Provider/functions/sendTransaction
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import { formatTransactionRequest, type RpcTransactionRequest } from "../utils.js";
11
+ import type { TransportError } from "../../Transport/TransportError.js";
12
+
13
+ /**
14
+ * Sends a transaction from an unlocked account using eth_sendTransaction.
15
+ *
16
+ * This is a node-dependent operation that requires the from address to be
17
+ * unlocked on the node (e.g., for local development or test nodes).
18
+ * For sending signed transactions, use sendRawTransaction instead.
19
+ *
20
+ * @param tx - Transaction request with from, to, value, data, etc.
21
+ * @returns Effect yielding the transaction hash
22
+ *
23
+ * @since 0.4.0
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { Effect } from 'effect'
28
+ * import { sendTransaction, Provider, HttpTransport } from 'voltaire-effect'
29
+ *
30
+ * const program = Effect.gen(function* () {
31
+ * const txHash = yield* sendTransaction({
32
+ * from: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
33
+ * to: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
34
+ * value: 1000000000000000000n, // 1 ETH
35
+ * })
36
+ * console.log('Transaction hash:', txHash)
37
+ * }).pipe(
38
+ * Effect.provide(Provider),
39
+ * Effect.provide(HttpTransport('http://localhost:8545'))
40
+ * )
41
+ * ```
42
+ */
43
+ export const sendTransaction = (
44
+ tx: RpcTransactionRequest,
45
+ ): Effect.Effect<`0x${string}`, TransportError, ProviderService> =>
46
+ Effect.flatMap(ProviderService, (svc) =>
47
+ svc.request<`0x${string}`>("eth_sendTransaction", [formatTransactionRequest(tx)]),
48
+ );
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview Free function to sign a message using an unlocked account.
3
+ *
4
+ * @module Provider/functions/sign
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import { toAddressHex } from "../utils.js";
11
+ import type { AddressInput } from "../types.js";
12
+ import type { TransportError } from "../../Transport/TransportError.js";
13
+
14
+ /**
15
+ * Signs a message using an unlocked account via eth_sign.
16
+ *
17
+ * This is a node-dependent operation that requires the address to be
18
+ * unlocked on the node. The message is prefixed with the Ethereum
19
+ * signed message prefix before signing.
20
+ *
21
+ * @param address - Address of the account to sign with
22
+ * @param message - Hex-encoded message to sign
23
+ * @returns Effect yielding the signature
24
+ *
25
+ * @since 0.4.0
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { Effect } from 'effect'
30
+ * import { sign, Provider, HttpTransport } from 'voltaire-effect'
31
+ *
32
+ * const program = Effect.gen(function* () {
33
+ * const signature = yield* sign(
34
+ * '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
35
+ * '0x48656c6c6f20576f726c64' // "Hello World"
36
+ * )
37
+ * console.log('Signature:', signature)
38
+ * }).pipe(
39
+ * Effect.provide(Provider),
40
+ * Effect.provide(HttpTransport('http://localhost:8545'))
41
+ * )
42
+ * ```
43
+ */
44
+ export const sign = (
45
+ address: AddressInput,
46
+ message: `0x${string}`,
47
+ ): Effect.Effect<`0x${string}`, TransportError, ProviderService> =>
48
+ Effect.flatMap(ProviderService, (svc) =>
49
+ svc.request<`0x${string}`>("eth_sign", [toAddressHex(address), message]),
50
+ );
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview Free function to sign a transaction using an unlocked account.
3
+ *
4
+ * @module Provider/functions/signTransaction
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import { formatTransactionRequest, type RpcTransactionRequest } from "../utils.js";
11
+ import type { TransportError } from "../../Transport/TransportError.js";
12
+
13
+ /**
14
+ * Signs a transaction using an unlocked account via eth_signTransaction.
15
+ *
16
+ * This is a node-dependent operation that requires the from address to be
17
+ * unlocked on the node. Returns the signed transaction data that can be
18
+ * broadcast later using sendRawTransaction.
19
+ *
20
+ * @param tx - Transaction request to sign
21
+ * @returns Effect yielding the signed transaction data
22
+ *
23
+ * @since 0.4.0
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { Effect } from 'effect'
28
+ * import { signTransaction, sendRawTransaction, Provider, HttpTransport } from 'voltaire-effect'
29
+ *
30
+ * const program = Effect.gen(function* () {
31
+ * const signedTx = yield* signTransaction({
32
+ * from: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
33
+ * to: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
34
+ * value: 1000000000000000000n,
35
+ * nonce: 0n,
36
+ * gas: 21000n,
37
+ * maxFeePerGas: 20000000000n,
38
+ * maxPriorityFeePerGas: 1000000000n,
39
+ * })
40
+ * console.log('Signed transaction:', signedTx)
41
+ * }).pipe(
42
+ * Effect.provide(Provider),
43
+ * Effect.provide(HttpTransport('http://localhost:8545'))
44
+ * )
45
+ * ```
46
+ */
47
+ export const signTransaction = (
48
+ tx: RpcTransactionRequest,
49
+ ): Effect.Effect<unknown, TransportError, ProviderService> =>
50
+ Effect.flatMap(ProviderService, (svc) =>
51
+ svc.request<unknown>("eth_signTransaction", [formatTransactionRequest(tx)]),
52
+ );
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @fileoverview Free function to simulate multiple blocks and calls with eth_simulateV1.
3
+ *
4
+ * @module Provider/functions/simulateV1
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type {
11
+ BlockTag,
12
+ SimulateV1Payload,
13
+ SimulateV1Result,
14
+ SimulateV1Error,
15
+ } from "../types.js";
16
+ import { formatCallRequest, toAddressHex } from "../utils.js";
17
+
18
+ /**
19
+ * Formats a SimulateV1Payload for JSON-RPC submission.
20
+ */
21
+ const formatSimulateV1Payload = (payload: SimulateV1Payload): unknown => {
22
+ return {
23
+ blockStateCalls: payload.blockStateCalls.map((block) => ({
24
+ ...(block.blockOverrides && {
25
+ blockOverrides: {
26
+ ...(block.blockOverrides.number !== undefined && {
27
+ number: `0x${block.blockOverrides.number.toString(16)}`,
28
+ }),
29
+ ...(block.blockOverrides.difficulty !== undefined && {
30
+ difficulty: `0x${block.blockOverrides.difficulty.toString(16)}`,
31
+ }),
32
+ ...(block.blockOverrides.time !== undefined && {
33
+ time: `0x${block.blockOverrides.time.toString(16)}`,
34
+ }),
35
+ ...(block.blockOverrides.gasLimit !== undefined && {
36
+ gasLimit: `0x${block.blockOverrides.gasLimit.toString(16)}`,
37
+ }),
38
+ ...(block.blockOverrides.coinbase !== undefined && {
39
+ coinbase: toAddressHex(block.blockOverrides.coinbase),
40
+ }),
41
+ ...(block.blockOverrides.baseFee !== undefined && {
42
+ baseFee: `0x${block.blockOverrides.baseFee.toString(16)}`,
43
+ }),
44
+ },
45
+ }),
46
+ ...(block.stateOverrides && { stateOverrides: block.stateOverrides }),
47
+ calls: block.calls.map(formatCallRequest),
48
+ })),
49
+ ...(payload.traceTransfers !== undefined && { traceTransfers: payload.traceTransfers }),
50
+ ...(payload.validation !== undefined && { validation: payload.validation }),
51
+ ...(payload.returnFullTransactions !== undefined && {
52
+ returnFullTransactions: payload.returnFullTransactions,
53
+ }),
54
+ };
55
+ };
56
+
57
+ /**
58
+ * Simulates multiple blocks and calls using eth_simulateV1.
59
+ *
60
+ * Note: This method is optional and not supported by all nodes.
61
+ *
62
+ * @param payload - The simulation payload
63
+ * @param blockTag - Block to simulate from (default: "latest")
64
+ * @returns Effect yielding the simulation results
65
+ *
66
+ * @since 0.4.0
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * import { Effect } from 'effect'
71
+ * import { simulateV1, Provider, HttpTransport } from 'voltaire-effect'
72
+ *
73
+ * const program = Effect.gen(function* () {
74
+ * const results = yield* simulateV1({
75
+ * blockStateCalls: [{
76
+ * calls: [{
77
+ * to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
78
+ * data: '0x...'
79
+ * }]
80
+ * }]
81
+ * })
82
+ * console.log(results)
83
+ * }).pipe(
84
+ * Effect.provide(Provider),
85
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
86
+ * )
87
+ * ```
88
+ */
89
+ export const simulateV1 = (
90
+ payload: SimulateV1Payload,
91
+ blockTag: BlockTag = "latest",
92
+ ): Effect.Effect<SimulateV1Result, SimulateV1Error, ProviderService> =>
93
+ Effect.flatMap(ProviderService, (svc) =>
94
+ svc.request<SimulateV1Result>("eth_simulateV1", [formatSimulateV1Payload(payload), blockTag]),
95
+ );
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview Free function to simulate with eth_simulateV2.
3
+ *
4
+ * @module Provider/functions/simulateV2
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type {
11
+ BlockTag,
12
+ SimulateV2Payload,
13
+ SimulateV2Result,
14
+ SimulateV2Error,
15
+ } from "../types.js";
16
+
17
+ /**
18
+ * Simulates using eth_simulateV2 (draft/evolving API).
19
+ *
20
+ * Note: This method is optional and not supported by all nodes.
21
+ * The API is still evolving and may change.
22
+ *
23
+ * @param payload - The simulation payload (schema may evolve)
24
+ * @param blockTag - Block to simulate from (default: "latest")
25
+ * @returns Effect yielding the simulation results
26
+ *
27
+ * @since 0.4.0
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import { Effect } from 'effect'
32
+ * import { simulateV2, Provider, HttpTransport } from 'voltaire-effect'
33
+ *
34
+ * const program = Effect.gen(function* () {
35
+ * const results = yield* simulateV2({
36
+ * // payload format may evolve
37
+ * })
38
+ * console.log(results)
39
+ * }).pipe(
40
+ * Effect.provide(Provider),
41
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
42
+ * )
43
+ * ```
44
+ */
45
+ export const simulateV2 = <TResult = SimulateV2Result>(
46
+ payload: SimulateV2Payload,
47
+ blockTag: BlockTag = "latest",
48
+ ): Effect.Effect<TResult, SimulateV2Error, ProviderService> =>
49
+ Effect.flatMap(ProviderService, (svc) =>
50
+ svc.request<TResult>("eth_simulateV2", [payload, blockTag]),
51
+ );
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview Free function to subscribe to Ethereum events via eth_subscribe.
3
+ *
4
+ * @module Provider/functions/subscribe
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { TransportError } from "../../Transport/TransportError.js";
11
+
12
+ /**
13
+ * Subscribes to Ethereum events using eth_subscribe.
14
+ *
15
+ * Requires a WebSocket transport that supports subscriptions.
16
+ *
17
+ * @param subscription - Subscription type (e.g., 'newHeads', 'logs', 'newPendingTransactions')
18
+ * @param params - Optional subscription parameters
19
+ * @returns Effect yielding the subscription ID
20
+ *
21
+ * @since 0.4.0
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { Effect } from 'effect'
26
+ * import { subscribe, Provider, WebSocketTransport } from 'voltaire-effect'
27
+ *
28
+ * const program = Effect.gen(function* () {
29
+ * // Subscribe to new block headers
30
+ * const subId = yield* subscribe('newHeads')
31
+ *
32
+ * // Subscribe to logs with filter
33
+ * const logsSubId = yield* subscribe('logs', [{
34
+ * address: '0x...',
35
+ * topics: ['0x...']
36
+ * }])
37
+ * }).pipe(
38
+ * Effect.provide(Provider),
39
+ * Effect.provide(WebSocketTransport('wss://mainnet.infura.io/ws/v3/YOUR_KEY'))
40
+ * )
41
+ * ```
42
+ */
43
+ export const subscribe = (
44
+ subscription: string,
45
+ params?: readonly unknown[],
46
+ ): Effect.Effect<`0x${string}`, TransportError, ProviderService> =>
47
+ Effect.flatMap(ProviderService, (svc) =>
48
+ svc.request<`0x${string}`>("eth_subscribe", [subscription, ...(params ?? [])]),
49
+ );
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Free function to uninstall a filter.
3
+ *
4
+ * @module Provider/functions/uninstallFilter
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { FilterId } from "../types.js";
11
+ import type { TransportError } from "../../Transport/TransportError.js";
12
+
13
+ /**
14
+ * Uninstalls a filter and frees resources.
15
+ *
16
+ * @param filterId - Filter ID to uninstall
17
+ * @returns Effect yielding true if filter was found and removed
18
+ *
19
+ * @since 0.4.0
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { Effect } from 'effect'
24
+ * import { createBlockFilter, uninstallFilter, Provider, HttpTransport } from 'voltaire-effect'
25
+ *
26
+ * const program = Effect.gen(function* () {
27
+ * const filterId = yield* createBlockFilter()
28
+ * const uninstalled = yield* uninstallFilter(filterId)
29
+ * }).pipe(
30
+ * Effect.provide(Provider),
31
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
32
+ * )
33
+ * ```
34
+ */
35
+ export const uninstallFilter = (
36
+ filterId: FilterId,
37
+ ): Effect.Effect<boolean, TransportError, ProviderService> =>
38
+ Effect.flatMap(ProviderService, (svc) =>
39
+ svc.request<boolean>("eth_uninstallFilter", [filterId]),
40
+ );
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview Free function to unsubscribe from Ethereum events via eth_unsubscribe.
3
+ *
4
+ * @module Provider/functions/unsubscribe
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { TransportError } from "../../Transport/TransportError.js";
11
+
12
+ /**
13
+ * Unsubscribes from an Ethereum subscription using eth_unsubscribe.
14
+ *
15
+ * @param subscriptionId - The subscription ID returned by subscribe()
16
+ * @returns Effect yielding true if successfully unsubscribed, false otherwise
17
+ *
18
+ * @since 0.4.0
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Effect } from 'effect'
23
+ * import { subscribe, unsubscribe, Provider, WebSocketTransport } from 'voltaire-effect'
24
+ *
25
+ * const program = Effect.gen(function* () {
26
+ * const subId = yield* subscribe('newHeads')
27
+ * // ... do work ...
28
+ * const unsubscribed = yield* unsubscribe(subId)
29
+ * console.log('Unsubscribed:', unsubscribed)
30
+ * }).pipe(
31
+ * Effect.provide(Provider),
32
+ * Effect.provide(WebSocketTransport('wss://mainnet.infura.io/ws/v3/YOUR_KEY'))
33
+ * )
34
+ * ```
35
+ */
36
+ export const unsubscribe = (
37
+ subscriptionId: `0x${string}`,
38
+ ): Effect.Effect<boolean, TransportError, ProviderService> =>
39
+ Effect.flatMap(ProviderService, (svc) =>
40
+ svc.request<boolean>("eth_unsubscribe", [subscriptionId]),
41
+ );