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,45 @@
1
+ /**
2
+ * @fileoverview Free function to execute eth_call.
3
+ *
4
+ * @module Provider/functions/call
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { BlockTag, CallRequest, CallError } from "../types.js";
11
+ import { formatCallRequest } from "../utils.js";
12
+
13
+ /**
14
+ * Executes a call without sending a transaction.
15
+ *
16
+ * @param request - The call request parameters
17
+ * @param blockTag - Block to execute against (default: "latest")
18
+ * @returns Effect yielding the call result as hex string
19
+ *
20
+ * @since 0.4.0
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { Effect } from 'effect'
25
+ * import { call, Provider, HttpTransport } from 'voltaire-effect'
26
+ *
27
+ * const program = Effect.gen(function* () {
28
+ * const result = yield* call({
29
+ * to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
30
+ * data: '0x70a08231000000000000000000000000d8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
31
+ * })
32
+ * console.log(`Result: ${result}`)
33
+ * }).pipe(
34
+ * Effect.provide(Provider),
35
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
36
+ * )
37
+ * ```
38
+ */
39
+ export const call = (
40
+ request: CallRequest,
41
+ blockTag: BlockTag = "latest",
42
+ ): Effect.Effect<`0x${string}`, CallError, ProviderService> =>
43
+ Effect.flatMap(ProviderService, (svc) =>
44
+ svc.request<`0x${string}`>("eth_call", [formatCallRequest(request), blockTag]),
45
+ );
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview Free function to create an access list for a transaction.
3
+ *
4
+ * @module Provider/functions/createAccessList
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { BlockTag, CallRequest, CreateAccessListError, AccessListType } from "../types.js";
11
+ import { formatCallRequest } from "../utils.js";
12
+
13
+ /**
14
+ * Result from createAccessList containing access list and gas used.
15
+ */
16
+ export interface CreateAccessListResult {
17
+ readonly accessList: AccessListType["accessList"];
18
+ readonly gasUsed: bigint;
19
+ }
20
+
21
+ /**
22
+ * Creates an access list for a transaction.
23
+ *
24
+ * @param request - The call request parameters
25
+ * @param blockTag - Block to analyze against (default: "latest")
26
+ * @returns Effect yielding the access list and gas estimate
27
+ *
28
+ * @since 0.4.0
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { Effect } from 'effect'
33
+ * import { createAccessList, Provider, HttpTransport } from 'voltaire-effect'
34
+ *
35
+ * const program = Effect.gen(function* () {
36
+ * const { accessList, gasUsed } = yield* createAccessList({
37
+ * from: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
38
+ * to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
39
+ * data: '0x...'
40
+ * })
41
+ * console.log(`Gas used: ${gasUsed}`)
42
+ * }).pipe(
43
+ * Effect.provide(Provider),
44
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
45
+ * )
46
+ * ```
47
+ */
48
+ export const createAccessList = (
49
+ request: CallRequest,
50
+ blockTag: BlockTag = "latest",
51
+ ): Effect.Effect<CreateAccessListResult, CreateAccessListError, ProviderService> =>
52
+ Effect.flatMap(ProviderService, (svc) =>
53
+ svc
54
+ .request<AccessListType>("eth_createAccessList", [formatCallRequest(request), blockTag])
55
+ .pipe(
56
+ Effect.map((result) => ({
57
+ accessList: result.accessList,
58
+ gasUsed: BigInt(result.gasUsed),
59
+ })),
60
+ ),
61
+ );
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview Free function to create a block filter.
3
+ *
4
+ * @module Provider/functions/createBlockFilter
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
+ * Creates a filter to notify when new blocks are mined.
15
+ *
16
+ * @returns Effect yielding filter ID for use with getFilterChanges
17
+ *
18
+ * @since 0.4.0
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Effect } from 'effect'
23
+ * import { createBlockFilter, getFilterChanges, Provider, HttpTransport } from 'voltaire-effect'
24
+ *
25
+ * const program = Effect.gen(function* () {
26
+ * const filterId = yield* createBlockFilter()
27
+ * const newBlockHashes = yield* getFilterChanges(filterId)
28
+ * }).pipe(
29
+ * Effect.provide(Provider),
30
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
31
+ * )
32
+ * ```
33
+ */
34
+ export const createBlockFilter = (): Effect.Effect<
35
+ FilterId,
36
+ TransportError,
37
+ ProviderService
38
+ > =>
39
+ Effect.flatMap(ProviderService, (svc) =>
40
+ svc.request<FilterId>("eth_newBlockFilter", []),
41
+ );
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview Free function to create an event filter.
3
+ *
4
+ * @module Provider/functions/createEventFilter
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { EventFilter, FilterId } from "../types.js";
11
+ import { formatLogFilterParams } from "../utils.js";
12
+ import type { TransportError } from "../../Transport/TransportError.js";
13
+
14
+ /**
15
+ * Creates a filter for logs matching the given criteria.
16
+ *
17
+ * @param filter - Event filter parameters (address, topics, fromBlock, toBlock)
18
+ * @returns Effect yielding filter ID for use with getFilterChanges/getFilterLogs
19
+ *
20
+ * @since 0.4.0
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { Effect } from 'effect'
25
+ * import { createEventFilter, getFilterChanges, Provider, HttpTransport } from 'voltaire-effect'
26
+ *
27
+ * const program = Effect.gen(function* () {
28
+ * const filterId = yield* createEventFilter({
29
+ * address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
30
+ * })
31
+ * const changes = yield* getFilterChanges(filterId)
32
+ * }).pipe(
33
+ * Effect.provide(Provider),
34
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
35
+ * )
36
+ * ```
37
+ */
38
+ export const createEventFilter = (
39
+ filter: EventFilter = {},
40
+ ): Effect.Effect<FilterId, TransportError, ProviderService> =>
41
+ Effect.flatMap(ProviderService, (svc) =>
42
+ svc.request<FilterId>("eth_newFilter", [formatLogFilterParams(filter)]),
43
+ );
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview Free function to create a pending transaction filter.
3
+ *
4
+ * @module Provider/functions/createPendingTransactionFilter
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
+ * Creates a filter to notify when new pending transactions are added to the mempool.
15
+ *
16
+ * @returns Effect yielding filter ID for use with getFilterChanges
17
+ *
18
+ * @since 0.4.0
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Effect } from 'effect'
23
+ * import { createPendingTransactionFilter, getFilterChanges, Provider, HttpTransport } from 'voltaire-effect'
24
+ *
25
+ * const program = Effect.gen(function* () {
26
+ * const filterId = yield* createPendingTransactionFilter()
27
+ * const pendingTxHashes = yield* getFilterChanges(filterId)
28
+ * }).pipe(
29
+ * Effect.provide(Provider),
30
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
31
+ * )
32
+ * ```
33
+ */
34
+ export const createPendingTransactionFilter = (): Effect.Effect<
35
+ FilterId,
36
+ TransportError,
37
+ ProviderService
38
+ > =>
39
+ Effect.flatMap(ProviderService, (svc) =>
40
+ svc.request<FilterId>("eth_newPendingTransactionFilter", []),
41
+ );
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview Free function to estimate gas for a transaction.
3
+ *
4
+ * @module Provider/functions/estimateGas
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { BlockTag, CallRequest, EstimateGasError } from "../types.js";
11
+ import { formatCallRequest, parseHexToBigInt } from "../utils.js";
12
+
13
+ /**
14
+ * Estimates gas for a transaction.
15
+ *
16
+ * @param request - The call request parameters
17
+ * @param blockTag - Block to estimate against (default: "latest")
18
+ * @returns Effect yielding the estimated gas as bigint
19
+ *
20
+ * @since 0.4.0
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { Effect } from 'effect'
25
+ * import { estimateGas, Provider, HttpTransport } from 'voltaire-effect'
26
+ *
27
+ * const program = Effect.gen(function* () {
28
+ * const gas = yield* estimateGas({
29
+ * from: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
30
+ * to: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
31
+ * data: '0x...'
32
+ * })
33
+ * console.log(`Estimated gas: ${gas}`)
34
+ * }).pipe(
35
+ * Effect.provide(Provider),
36
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
37
+ * )
38
+ * ```
39
+ */
40
+ export const estimateGas = (
41
+ request: CallRequest,
42
+ blockTag: BlockTag = "latest",
43
+ ): Effect.Effect<bigint, EstimateGasError, ProviderService> =>
44
+ Effect.flatMap(ProviderService, (svc) =>
45
+ svc
46
+ .request<string>("eth_estimateGas", [formatCallRequest(request), blockTag])
47
+ .pipe(
48
+ Effect.flatMap((response) =>
49
+ parseHexToBigInt({ method: "eth_estimateGas", response, params: [request, blockTag] }),
50
+ ),
51
+ ),
52
+ );
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fileoverview Free function to get available accounts.
3
+ *
4
+ * @module Provider/functions/getAccounts
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 list of accounts owned by the node.
14
+ *
15
+ * @returns Effect yielding an array of account addresses
16
+ *
17
+ * @since 0.4.0
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { Effect } from 'effect'
22
+ * import { getAccounts, Provider, HttpTransport } from 'voltaire-effect'
23
+ *
24
+ * const program = Effect.gen(function* () {
25
+ * const accounts = yield* getAccounts()
26
+ * console.log('Accounts:', accounts)
27
+ * }).pipe(
28
+ * Effect.provide(Provider),
29
+ * Effect.provide(HttpTransport('http://localhost:8545'))
30
+ * )
31
+ * ```
32
+ */
33
+ export const getAccounts = (): Effect.Effect<
34
+ `0x${string}`[],
35
+ TransportError,
36
+ ProviderService
37
+ > =>
38
+ Effect.flatMap(ProviderService, (svc) =>
39
+ svc.request<`0x${string}`[]>("eth_accounts"),
40
+ );
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview Free function to get account balance.
3
+ *
4
+ * @module Provider/functions/getBalance
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import type { AddressInput, BlockTag } from "../types.js";
11
+ import { toAddressHex, parseHexToBigInt } from "../utils.js";
12
+ import type { TransportError } from "../../Transport/TransportError.js";
13
+ import type { ProviderResponseError } from "../types.js";
14
+
15
+ /**
16
+ * Gets the balance of an address in wei.
17
+ *
18
+ * @param address - The address to check balance for
19
+ * @param blockTag - Block to query at (default: "latest")
20
+ * @returns Effect yielding the balance as bigint
21
+ *
22
+ * @since 0.4.0
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * import { Effect } from 'effect'
27
+ * import { getBalance, Provider, HttpTransport } from 'voltaire-effect'
28
+ *
29
+ * const program = Effect.gen(function* () {
30
+ * const balance = yield* getBalance('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')
31
+ * console.log(`Balance: ${balance} wei`)
32
+ * }).pipe(
33
+ * Effect.provide(Provider),
34
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
35
+ * )
36
+ * ```
37
+ */
38
+ export const getBalance = (
39
+ address: AddressInput,
40
+ blockTag: BlockTag = "latest",
41
+ ): Effect.Effect<bigint, TransportError | ProviderResponseError, ProviderService> =>
42
+ Effect.flatMap(ProviderService, (svc) =>
43
+ svc
44
+ .request<string>("eth_getBalance", [toAddressHex(address), blockTag])
45
+ .pipe(
46
+ Effect.flatMap((response) =>
47
+ parseHexToBigInt({ method: "eth_getBalance", response, params: [address, blockTag] }),
48
+ ),
49
+ ),
50
+ );
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Free function to get the blob base fee.
3
+ *
4
+ * @module Provider/functions/getBlobBaseFee
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import { parseHexToBigInt } from "../utils.js";
11
+ import type { TransportError } from "../../Transport/TransportError.js";
12
+ import type { ProviderResponseError } from "../types.js";
13
+
14
+ /**
15
+ * Gets the current blob base fee (EIP-4844).
16
+ *
17
+ * @returns Effect yielding the blob base fee as bigint
18
+ *
19
+ * @since 0.4.0
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { Effect } from 'effect'
24
+ * import { getBlobBaseFee, Provider, HttpTransport } from 'voltaire-effect'
25
+ *
26
+ * const program = Effect.gen(function* () {
27
+ * const blobFee = yield* getBlobBaseFee()
28
+ * console.log('Blob base fee:', blobFee, 'wei')
29
+ * }).pipe(
30
+ * Effect.provide(Provider),
31
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
32
+ * )
33
+ * ```
34
+ */
35
+ export const getBlobBaseFee = (): Effect.Effect<
36
+ bigint,
37
+ TransportError | ProviderResponseError,
38
+ ProviderService
39
+ > =>
40
+ Effect.flatMap(ProviderService, (svc) =>
41
+ svc.request<string>("eth_blobBaseFee").pipe(
42
+ Effect.flatMap((response) =>
43
+ parseHexToBigInt({ method: "eth_blobBaseFee", response }),
44
+ ),
45
+ ),
46
+ );
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @fileoverview Free function to get a block by tag, number, or hash.
3
+ *
4
+ * @module Provider/functions/getBlock
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 BlockType,
13
+ type GetBlockArgs,
14
+ ProviderNotFoundError,
15
+ } from "../types.js";
16
+ import type { TransportError } from "../../Transport/TransportError.js";
17
+
18
+ /**
19
+ * Gets a block by tag, number, or hash.
20
+ *
21
+ * @param args - Block identifier (blockTag, blockNumber, or blockHash) and includeTransactions flag
22
+ * @returns Effect yielding the block
23
+ *
24
+ * @since 0.4.0
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { Effect } from 'effect'
29
+ * import { getBlock, Provider, HttpTransport } from 'voltaire-effect'
30
+ *
31
+ * const program = Effect.gen(function* () {
32
+ * // Get latest block
33
+ * const latest = yield* getBlock({})
34
+ *
35
+ * // Get by block number
36
+ * const block = yield* getBlock({ blockNumber: 18000000n })
37
+ *
38
+ * // Get by hash with full transactions
39
+ * const withTxs = yield* getBlock({
40
+ * blockHash: '0x...',
41
+ * includeTransactions: true
42
+ * })
43
+ * }).pipe(
44
+ * Effect.provide(Provider),
45
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
46
+ * )
47
+ * ```
48
+ */
49
+ export const getBlock = (
50
+ args: GetBlockArgs = {},
51
+ ): Effect.Effect<BlockType, TransportError | ProviderNotFoundError, ProviderService> =>
52
+ Effect.flatMap(ProviderService, (svc) => {
53
+ const includeTransactions = args.includeTransactions ?? false;
54
+
55
+ if ("blockHash" in args && args.blockHash !== undefined) {
56
+ const hash =
57
+ typeof args.blockHash === "string"
58
+ ? args.blockHash
59
+ : `0x${Buffer.from(args.blockHash).toString("hex")}`;
60
+ return svc
61
+ .request<BlockType | null>("eth_getBlockByHash", [hash, includeTransactions])
62
+ .pipe(
63
+ Effect.flatMap((result) =>
64
+ result === null
65
+ ? Effect.fail(
66
+ new ProviderNotFoundError(args, "Block not found", {
67
+ resource: "block",
68
+ }),
69
+ )
70
+ : Effect.succeed(result),
71
+ ),
72
+ );
73
+ }
74
+
75
+ let blockId: BlockTag;
76
+ if ("blockNumber" in args && args.blockNumber !== undefined) {
77
+ blockId = `0x${args.blockNumber.toString(16)}` as BlockTag;
78
+ } else {
79
+ blockId = args.blockTag ?? "latest";
80
+ }
81
+
82
+ return svc
83
+ .request<BlockType | null>("eth_getBlockByNumber", [blockId, includeTransactions])
84
+ .pipe(
85
+ Effect.flatMap((result) =>
86
+ result === null
87
+ ? Effect.fail(
88
+ new ProviderNotFoundError(args, "Block not found", {
89
+ resource: "block",
90
+ }),
91
+ )
92
+ : Effect.succeed(result),
93
+ ),
94
+ );
95
+ });
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview Free function to get the current block number.
3
+ *
4
+ * @module Provider/functions/getBlockNumber
5
+ * @since 0.4.0
6
+ */
7
+
8
+ import * as Effect from "effect/Effect";
9
+ import { ProviderService } from "../ProviderService.js";
10
+ import { ProviderResponseError } from "../types.js";
11
+ import type { TransportError } from "../../Transport/TransportError.js";
12
+
13
+ /**
14
+ * Gets the current block number from the connected Ethereum node.
15
+ *
16
+ * @returns Effect yielding the current block number as bigint
17
+ *
18
+ * @since 0.4.0
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Effect } from 'effect'
23
+ * import { getBlockNumber, Provider, HttpTransport } from 'voltaire-effect'
24
+ *
25
+ * const program = Effect.gen(function* () {
26
+ * const blockNumber = yield* getBlockNumber()
27
+ * console.log('Current block:', blockNumber)
28
+ * }).pipe(
29
+ * Effect.provide(Provider),
30
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
31
+ * )
32
+ * ```
33
+ */
34
+ export const getBlockNumber = (): Effect.Effect<
35
+ bigint,
36
+ TransportError | ProviderResponseError,
37
+ ProviderService
38
+ > =>
39
+ Effect.flatMap(ProviderService, (svc) =>
40
+ svc.request<string>("eth_blockNumber").pipe(
41
+ Effect.flatMap((hex) =>
42
+ Effect.try({
43
+ try: () => BigInt(hex),
44
+ catch: (error) =>
45
+ new ProviderResponseError(hex, "Invalid hex from eth_blockNumber", {
46
+ cause: error,
47
+ }),
48
+ }),
49
+ ),
50
+ ),
51
+ );
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @fileoverview Free function to get all transaction receipts for a block.
3
+ *
4
+ * @module Provider/functions/getBlockReceipts
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 GetBlockReceiptsArgs,
13
+ type ReceiptType,
14
+ ProviderNotFoundError,
15
+ } from "../types.js";
16
+ import type { TransportError } from "../../Transport/TransportError.js";
17
+
18
+ /**
19
+ * Gets all transaction receipts for a block.
20
+ *
21
+ * @param args - Block identifier (blockTag, blockNumber, or blockHash)
22
+ * @returns Effect yielding an array of transaction receipts
23
+ *
24
+ * @since 0.4.0
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { Effect } from 'effect'
29
+ * import { getBlockReceipts, Provider, HttpTransport } from 'voltaire-effect'
30
+ *
31
+ * const program = Effect.gen(function* () {
32
+ * // Get receipts for latest block
33
+ * const receipts = yield* getBlockReceipts({})
34
+ *
35
+ * // Get by block number
36
+ * const receiptsByNumber = yield* getBlockReceipts({
37
+ * blockNumber: 18000000n
38
+ * })
39
+ *
40
+ * // Get by block hash
41
+ * const receiptsByHash = yield* getBlockReceipts({
42
+ * blockHash: '0x...'
43
+ * })
44
+ * }).pipe(
45
+ * Effect.provide(Provider),
46
+ * Effect.provide(HttpTransport('https://mainnet.infura.io/v3/YOUR_KEY'))
47
+ * )
48
+ * ```
49
+ */
50
+ export const getBlockReceipts = (
51
+ args: GetBlockReceiptsArgs = {},
52
+ ): Effect.Effect<ReceiptType[], TransportError | ProviderNotFoundError, ProviderService> =>
53
+ Effect.flatMap(ProviderService, (svc) => {
54
+ let blockId: string;
55
+
56
+ if ("blockHash" in args && args.blockHash !== undefined) {
57
+ blockId =
58
+ typeof args.blockHash === "string"
59
+ ? args.blockHash
60
+ : `0x${Buffer.from(args.blockHash).toString("hex")}`;
61
+ } else if ("blockNumber" in args && args.blockNumber !== undefined) {
62
+ blockId = `0x${args.blockNumber.toString(16)}`;
63
+ } else {
64
+ blockId = args.blockTag ?? "latest";
65
+ }
66
+
67
+ return svc.request<ReceiptType[] | null>("eth_getBlockReceipts", [blockId]).pipe(
68
+ Effect.flatMap((result) =>
69
+ result === null
70
+ ? Effect.fail(
71
+ new ProviderNotFoundError(args, "Block receipts not found", {
72
+ resource: "blockReceipts",
73
+ }),
74
+ )
75
+ : Effect.succeed(result),
76
+ ),
77
+ );
78
+ });