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,12 @@
1
+ /**
2
+ * @module isValidJumpDest
3
+ * @description Check if offset is a valid jump destination (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { isValidJumpDest as _isValidJumpDest } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode } from "./types.js";
8
+
9
+ export const isValidJumpDest = (
10
+ code: BrandedBytecode,
11
+ offset: number,
12
+ ): boolean => _isValidJumpDest(code, offset);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module parseInstructions
3
+ * @description Parse bytecode into instructions (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { parseInstructions as _parseInstructions } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode, Instruction } from "./types.js";
8
+
9
+ export const parseInstructions = (code: BrandedBytecode): Instruction[] =>
10
+ _parseInstructions(code);
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module prettyPrint
3
+ * @description Pretty print bytecode disassembly (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { prettyPrint as _prettyPrint } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode, PrettyPrintOptions } from "./types.js";
8
+
9
+ export const prettyPrint = (
10
+ bytecode: BrandedBytecode,
11
+ options?: PrettyPrintOptions,
12
+ ): string => _prettyPrint(bytecode, options);
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @module scan
3
+ * @description Iterator over bytecode instructions (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { scan as _scan } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode, ScanOptions } from "./types.js";
8
+
9
+ export const scan = (
10
+ bytecode: BrandedBytecode,
11
+ options?: ScanOptions,
12
+ ): Generator<{
13
+ pc: number;
14
+ opcode: number;
15
+ type: "push" | "regular";
16
+ size: number;
17
+ value?: bigint;
18
+ gas?: number;
19
+ stackEffect?: { pop: number; push: number };
20
+ }> => _scan(bytecode, options);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @module size
3
+ * @description Get bytecode size (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { size as _size } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode } from "./types.js";
8
+
9
+ export const size = (code: BrandedBytecode): number => _size(code);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module stripMetadata
3
+ * @description Strip CBOR metadata from bytecode (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { stripMetadata as _stripMetadata } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode } from "./types.js";
8
+
9
+ export const stripMetadata = (code: BrandedBytecode): BrandedBytecode =>
10
+ _stripMetadata(code);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module toAbi
3
+ * @description Extract ABI from bytecode (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { toAbi as _toAbi } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode, BrandedAbi } from "./types.js";
8
+
9
+ export const toAbi = (bytecode: BrandedBytecode): BrandedAbi =>
10
+ _toAbi(bytecode);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module toHex
3
+ * @description Convert bytecode to hex string (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { toHex as _toHex } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode } from "./types.js";
8
+
9
+ export const toHex = (code: BrandedBytecode, prefix?: boolean): string =>
10
+ _toHex(code, prefix);
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @module types
3
+ * @description Bytecode type re-exports
4
+ * @since 0.1.0
5
+ */
6
+
7
+ export type {
8
+ Analysis,
9
+ BasicBlock,
10
+ BlockAnalysisOptions,
11
+ GasAnalysis,
12
+ GasAnalysisOptions,
13
+ Instruction,
14
+ PrettyPrintOptions,
15
+ ScanOptions,
16
+ StackAnalysis,
17
+ StackAnalysisOptions,
18
+ BrandedAbi,
19
+ } from "@tevm/voltaire/Bytecode";
20
+
21
+ // Use loose type to avoid brand symbol issues
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ export type BrandedBytecode = any;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @module validate
3
+ * @description Validate bytecode structure (pure)
4
+ * @since 0.1.0
5
+ */
6
+ import { validate as _validate } from "@tevm/voltaire/Bytecode";
7
+ import type { BrandedBytecode } from "./types.js";
8
+
9
+ export const validate = (code: BrandedBytecode): boolean => _validate(code);
@@ -44,19 +44,7 @@ describe("checkReturnData", () => {
44
44
 
45
45
  describe("verifySignature", () => {
46
46
  const mockProvider = {
47
- call: vi.fn(),
48
- getLogs: vi.fn(),
49
- getBlockNumber: vi.fn(),
50
- getBalance: vi.fn(),
51
- getBlock: vi.fn(),
52
- getTransaction: vi.fn(),
53
- getTransactionReceipt: vi.fn(),
54
- getTransactionCount: vi.fn(),
55
- getCode: vi.fn(),
56
- getStorageAt: vi.fn(),
57
- estimateGas: vi.fn(),
58
- getChainId: vi.fn(),
59
- getGasPrice: vi.fn(),
47
+ request: vi.fn(),
60
48
  };
61
49
 
62
50
  const _MockProviderLayer = Layer.succeed(
@@ -16,7 +16,7 @@ import {
16
16
  } from "@tevm/voltaire";
17
17
  import * as Data from "effect/Data";
18
18
  import * as Effect from "effect/Effect";
19
- import * as Runtime from "effect/Runtime";
19
+ import { getCode, call } from "../../services/Provider/functions/index.js";
20
20
  import { ProviderService } from "../../services/Provider/index.js";
21
21
 
22
22
  type AddressType = BrandedAddress.AddressType;
@@ -122,6 +122,9 @@ const isEmptyCode = (code: unknown): code is string =>
122
122
  typeof code === "string" &&
123
123
  (code === "0x" || code === "0x0" || code === "0x00");
124
124
 
125
+ // EIP-1271 magic value
126
+ const EIP1271_MAGIC_VALUE = "0x1626ba7e";
127
+
125
128
  /**
126
129
  * Verify a signature for both EOA and contract accounts (EIP-1271).
127
130
  *
@@ -167,44 +170,29 @@ export const verifySignature = (
167
170
  ProviderService
168
171
  > =>
169
172
  Effect.gen(function* () {
170
- const provider = yield* ProviderService;
171
- const runtime = yield* Effect.runtime();
172
- const runPromise = Runtime.runPromise(runtime);
173
-
174
173
  const addressStr =
175
174
  typeof address === "string" ? address : Address.toHex(address);
175
+ const addressHex = addressStr as `0x${string}`;
176
176
 
177
- return yield* Effect.tryPromise({
178
- try: async () => {
179
- const providerAdapter = {
180
- request: async (method: string, params: unknown[]) => {
181
- if (method === "eth_getCode") {
182
- const [addr, block] = params as [string, string];
183
- return runPromise(
184
- provider.getCode(addr as `0x${string}`, block as any),
185
- );
186
- }
187
- if (method === "eth_call") {
188
- const [callObj] = params as [{ to: string; data: string }];
189
- return runPromise(
190
- provider.call({
191
- to: callObj.to as `0x${string}`,
192
- data: callObj.data as `0x${string}`,
193
- }),
194
- );
195
- }
196
- throw new Error(`Unsupported method: ${method}`);
197
- },
198
- };
199
-
200
- const addressHex =
201
- typeof address === "string" ? address : Address.toHex(address);
202
- const code = await providerAdapter.request("eth_getCode", [
203
- addressHex,
204
- "latest",
205
- ]);
206
-
207
- if (isEmptyCode(code)) {
177
+ // Get code to determine if EOA or contract
178
+ const code = yield* getCode(addressHex, "latest").pipe(
179
+ Effect.mapError(
180
+ (e) =>
181
+ new SignatureVerificationError({
182
+ input: {
183
+ address: addressStr,
184
+ hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
185
+ },
186
+ message: `Failed to get code: ${e.message}`,
187
+ cause: e,
188
+ }),
189
+ ),
190
+ );
191
+
192
+ // EOA verification
193
+ if (isEmptyCode(code)) {
194
+ return yield* Effect.try({
195
+ try: () => {
208
196
  const sigComponents = toSignatureComponents(signature);
209
197
  const publicKey = Secp256k1.recoverPublicKey(
210
198
  sigComponents,
@@ -216,39 +204,77 @@ export const verifySignature = (
216
204
  const expectedAddress =
217
205
  typeof address === "string" ? Address(address) : address;
218
206
  return Address.equals(recoveredAddress, expectedAddress);
219
- }
207
+ },
208
+ catch: (e) => {
209
+ if (e instanceof InvalidSignatureFormatError) {
210
+ return e;
211
+ }
212
+ if (
213
+ e instanceof Error &&
214
+ (e.name === "InvalidSignatureFormatError" ||
215
+ e.name === "InvalidSignatureError")
216
+ ) {
217
+ return new InvalidSignatureFormatError({
218
+ message: e.message,
219
+ cause: e,
220
+ });
221
+ }
222
+ return new SignatureVerificationError({
223
+ input: {
224
+ address: addressStr,
225
+ hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
226
+ },
227
+ message:
228
+ e instanceof Error ? e.message : "Signature verification failed",
229
+ cause: e,
230
+ });
231
+ },
232
+ });
233
+ }
220
234
 
221
- const signatureBytes = toSignatureBytes(signature);
222
- return await ContractSignature.isValidSignature(
223
- providerAdapter,
224
- address as any,
225
- hash as any,
226
- signatureBytes,
227
- );
228
- },
235
+ // Contract (EIP-1271) verification
236
+ const signatureBytes = yield* Effect.try({
237
+ try: () => toSignatureBytes(signature),
229
238
  catch: (e) => {
230
239
  if (e instanceof InvalidSignatureFormatError) {
231
240
  return e;
232
241
  }
233
- if (
234
- e instanceof Error &&
235
- (e.name === "InvalidSignatureFormatError" ||
236
- e.name === "InvalidSignatureError")
237
- ) {
238
- return new InvalidSignatureFormatError({
239
- message: e.message,
240
- cause: e,
241
- });
242
- }
243
- return new SignatureVerificationError({
244
- input: {
245
- address: addressStr,
246
- hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
247
- },
248
- message:
249
- e instanceof Error ? e.message : "Signature verification failed",
242
+ return new InvalidSignatureFormatError({
243
+ message: e instanceof Error ? e.message : "Invalid signature format",
250
244
  cause: e,
251
245
  });
252
246
  },
253
247
  });
248
+
249
+ // Build EIP-1271 isValidSignature call data
250
+ const hashHex =
251
+ hash instanceof Uint8Array
252
+ ? `0x${Buffer.from(hash).toString("hex")}`
253
+ : `0x${Buffer.from(hash).toString("hex")}`;
254
+ const sigHex = `0x${Buffer.from(signatureBytes).toString("hex")}`;
255
+
256
+ // isValidSignature(bytes32 hash, bytes signature) selector: 0x1626ba7e
257
+ // ABI encode: selector + hash (32 bytes) + offset to signature (32) + signature length (32) + signature data
258
+ const hashPadded = hashHex.slice(2).padStart(64, "0");
259
+ const sigOffset = "0000000000000000000000000000000000000000000000000000000000000040"; // 64 in hex
260
+ const sigLength = signatureBytes.length.toString(16).padStart(64, "0");
261
+ const sigPadded = sigHex.slice(2).padEnd(Math.ceil(signatureBytes.length / 32) * 64, "0");
262
+ const callData = `0x1626ba7e${hashPadded}${sigOffset}${sigLength}${sigPadded}` as `0x${string}`;
263
+
264
+ const result = yield* call({ to: addressHex, data: callData }).pipe(
265
+ Effect.mapError(
266
+ (e) =>
267
+ new SignatureVerificationError({
268
+ input: {
269
+ address: addressStr,
270
+ hash: hash instanceof Uint8Array ? hash : new Uint8Array(hash),
271
+ },
272
+ message: `EIP-1271 call failed: ${e.message}`,
273
+ cause: e,
274
+ }),
275
+ ),
276
+ );
277
+
278
+ // Check if result matches EIP-1271 magic value
279
+ return result.toLowerCase().startsWith(EIP1271_MAGIC_VALUE);
254
280
  });
@@ -0,0 +1,71 @@
1
+ import { describe, expect, it } from "@effect/vitest";
2
+ import { Effect, Exit } from "effect";
3
+ import * as Schema from "effect/Schema";
4
+ import * as Ens from "./index.js";
5
+
6
+ describe("Ens.EnsSchema", () => {
7
+ it("validates ENS name", () => {
8
+ const name = Schema.decodeSync(Ens.EnsSchema)("vitalik.eth");
9
+ expect(typeof name).toBe("string");
10
+ });
11
+ });
12
+
13
+ describe("Ens.from", () => {
14
+ it("creates EnsType from string", async () => {
15
+ const name = await Effect.runPromise(Ens.from("vitalik.eth"));
16
+ expect(typeof name).toBe("string");
17
+ });
18
+ });
19
+
20
+ describe("Ens.normalize", () => {
21
+ it("normalizes ENS name", async () => {
22
+ const normalized = await Effect.runPromise(Ens.normalize("VITALIK.ETH"));
23
+ expect(normalized.toLowerCase()).toBe("vitalik.eth");
24
+ });
25
+ });
26
+
27
+ describe("Ens.beautify", () => {
28
+ it("beautifies ENS name", async () => {
29
+ const beautified = await Effect.runPromise(Ens.beautify("vitalik.eth"));
30
+ expect(typeof beautified).toBe("string");
31
+ });
32
+ });
33
+
34
+ describe("Ens.namehash", () => {
35
+ it("computes namehash", async () => {
36
+ const hash = await Effect.runPromise(Ens.namehash("eth"));
37
+ expect(hash).toBeInstanceOf(Uint8Array);
38
+ expect(hash.length).toBe(32);
39
+ });
40
+ });
41
+
42
+ describe("Ens.labelhash", () => {
43
+ it("computes labelhash", async () => {
44
+ const hash = await Effect.runPromise(Ens.labelhash("vitalik"));
45
+ expect(hash).toBeInstanceOf(Uint8Array);
46
+ expect(hash.length).toBe(32);
47
+ });
48
+ });
49
+
50
+ describe("Ens.validation", () => {
51
+ it("isValid returns true for valid names", () => {
52
+ expect(Ens.isValid("vitalik.eth")).toBe(true);
53
+ });
54
+
55
+ it("isValid returns false for invalid names", () => {
56
+ expect(Ens.isValid("")).toBe(false);
57
+ });
58
+
59
+ it("validate succeeds for valid names", async () => {
60
+ const result = await Effect.runPromiseExit(Ens.validate("vitalik.eth"));
61
+ expect(Exit.isSuccess(result)).toBe(true);
62
+ });
63
+ });
64
+
65
+ describe("Ens.toString", () => {
66
+ it("converts to string", async () => {
67
+ const name = await Effect.runPromise(Ens.from("vitalik.eth"));
68
+ const str = Ens.toString(name);
69
+ expect(str).toBe("vitalik.eth");
70
+ });
71
+ });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module convert
3
+ * @description Pure ENS conversion functions
4
+ * @since 0.1.0
5
+ */
6
+ import { Ens } from "@tevm/voltaire";
7
+ import type { EnsType } from "./String.js";
8
+
9
+ /**
10
+ * Convert ENS name to string
11
+ */
12
+ // biome-ignore lint/suspicious/noShadowRestrictedNames: intentional API name
13
+ export const toString = (name: EnsType): string => Ens.toString(name);
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @module from
3
+ * @description Effect-wrapped ENS constructor
4
+ * @since 0.1.0
5
+ */
6
+ import { Effect } from "effect";
7
+ import { Ens } from "@tevm/voltaire";
8
+ import type { EnsType } from "./String.js";
9
+
10
+ type EnsError =
11
+ | Ens.DisallowedCharacterError
12
+ | Ens.EmptyLabelError
13
+ | Ens.IllegalMixtureError
14
+ | Ens.InvalidLabelExtensionError
15
+ | Ens.InvalidUtf8Error
16
+ | Ens.WholeConfusableError;
17
+
18
+ /**
19
+ * Create ENS name from string
20
+ *
21
+ * @param name - ENS name string
22
+ * @returns Effect yielding EnsType or failing with EnsError
23
+ * @example
24
+ * ```typescript
25
+ * const ens = await Effect.runPromise(Ens.from('vitalik.eth'))
26
+ * ```
27
+ */
28
+ export const from = (name: string): Effect.Effect<EnsType, EnsError> =>
29
+ Effect.try({
30
+ try: () => Ens.from(name),
31
+ catch: (e) => e as EnsError,
32
+ });
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @module hash
3
+ * @description Effect-wrapped ENS hash operations
4
+ * @since 0.1.0
5
+ */
6
+ import { Effect } from "effect";
7
+ import { Ens } from "@tevm/voltaire";
8
+
9
+ type EnsError =
10
+ | Ens.DisallowedCharacterError
11
+ | Ens.EmptyLabelError
12
+ | Ens.IllegalMixtureError
13
+ | Ens.InvalidLabelExtensionError
14
+ | Ens.InvalidUtf8Error
15
+ | Ens.WholeConfusableError;
16
+
17
+ /**
18
+ * Compute namehash of ENS name (32-byte hash for contracts)
19
+ *
20
+ * @param name - ENS name to hash
21
+ * @returns Effect yielding 32-byte hash
22
+ * @example
23
+ * ```typescript
24
+ * const hash = await Effect.runPromise(Ens.namehash('vitalik.eth'))
25
+ * ```
26
+ */
27
+ export const namehash = (name: string): Effect.Effect<Uint8Array, EnsError> =>
28
+ Effect.try({
29
+ try: () => Ens.namehash(name),
30
+ catch: (e) => e as EnsError,
31
+ });
32
+
33
+ /**
34
+ * Compute labelhash of single ENS label
35
+ *
36
+ * @param label - Single ENS label to hash
37
+ * @returns Effect yielding 32-byte hash
38
+ */
39
+ export const labelhash = (label: string): Effect.Effect<Uint8Array, EnsError> =>
40
+ Effect.try({
41
+ try: () => Ens.labelhash(label),
42
+ catch: (e) => e as EnsError,
43
+ });
44
+
45
+ // Re-export factories for advanced usage
46
+ export { Labelhash, Namehash } from "@tevm/voltaire/Ens";
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Ens module for working with Ethereum Name Service names.
3
- * Provides Effect-based operations for validating, normalizing, and hashing ENS names.
2
+ * @module Ens
3
+ * @description Effect-based operations for Ethereum Name Service names.
4
4
  *
5
5
  * ## Type Declarations
6
6
  *
@@ -12,7 +12,89 @@
12
12
  * }
13
13
  * ```
14
14
  *
15
- * @module
15
+ * ## Schemas
16
+ *
17
+ * | Schema | Input | Output |
18
+ * |--------|-------|--------|
19
+ * | `Ens.EnsSchema` | string | EnsType |
20
+ *
21
+ * ## Constructors (Effect-wrapped)
22
+ *
23
+ * ```typescript
24
+ * Ens.from(name) // Effect<EnsType, EnsError>
25
+ * ```
26
+ *
27
+ * ## Normalization (Effect-wrapped)
28
+ *
29
+ * ```typescript
30
+ * Ens.normalize(name) // Effect<EnsType, EnsError>
31
+ * Ens.beautify(name) // Effect<EnsType, EnsError>
32
+ * ```
33
+ *
34
+ * ## Hashing (Effect-wrapped)
35
+ *
36
+ * ```typescript
37
+ * Ens.namehash(name) // Effect<Uint8Array, EnsError>
38
+ * Ens.labelhash(label) // Effect<Uint8Array, EnsError>
39
+ * ```
40
+ *
41
+ * ## Validation
42
+ *
43
+ * ```typescript
44
+ * Ens.isValid(name) // boolean (pure)
45
+ * Ens.is(value) // type guard (pure)
46
+ * Ens.validate(name) // Effect<void, EnsError>
47
+ * ```
48
+ *
49
+ * ## Conversion (Pure)
50
+ *
51
+ * ```typescript
52
+ * Ens.toString(ens) // string
53
+ * ```
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * import * as Ens from 'voltaire-effect/primitives/Ens'
58
+ * import { Effect } from 'effect'
59
+ *
60
+ * const program = Effect.gen(function* () {
61
+ * yield* Ens.validate('vitalik.eth')
62
+ * const normalized = yield* Ens.normalize('VITALIK.eth')
63
+ * const hash = yield* Ens.namehash(normalized)
64
+ * return { name: normalized, hash }
65
+ * })
66
+ * ```
67
+ *
16
68
  * @since 0.0.1
17
69
  */
18
- export { EnsSchema, type EnsType } from "./String.js";
70
+
71
+ // Types
72
+ export type { EnsType } from "./String.js";
73
+
74
+ // Errors (re-export from voltaire)
75
+ export {
76
+ DisallowedCharacterError,
77
+ EmptyLabelError,
78
+ IllegalMixtureError,
79
+ InvalidLabelExtensionError,
80
+ InvalidUtf8Error,
81
+ WholeConfusableError,
82
+ } from "@tevm/voltaire/Ens";
83
+
84
+ // Schemas
85
+ export { EnsSchema } from "./String.js";
86
+
87
+ // Constructors (Effect-wrapped)
88
+ export { from } from "./from.js";
89
+
90
+ // Normalization (Effect-wrapped)
91
+ export { normalize, beautify } from "./normalize.js";
92
+
93
+ // Hashing (Effect-wrapped)
94
+ export { namehash, labelhash, Labelhash, Namehash } from "./hash.js";
95
+
96
+ // Validation
97
+ export { isValid, is, validate } from "./validation.js";
98
+
99
+ // Conversion (Pure)
100
+ export { toString } from "./convert.js";
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @module normalize
3
+ * @description Effect-wrapped ENS normalization
4
+ * @since 0.1.0
5
+ */
6
+ import { Effect } from "effect";
7
+ import { Ens } from "@tevm/voltaire";
8
+ import type { EnsType } from "./String.js";
9
+
10
+ type EnsError =
11
+ | Ens.DisallowedCharacterError
12
+ | Ens.EmptyLabelError
13
+ | Ens.IllegalMixtureError
14
+ | Ens.InvalidLabelExtensionError
15
+ | Ens.InvalidUtf8Error
16
+ | Ens.WholeConfusableError;
17
+
18
+ /**
19
+ * Normalize ENS name per ENSIP-15
20
+ *
21
+ * @param name - ENS name to normalize
22
+ * @returns Effect yielding normalized EnsType
23
+ * @example
24
+ * ```typescript
25
+ * const normalized = await Effect.runPromise(Ens.normalize('Vitalik.ETH'))
26
+ * // 'vitalik.eth'
27
+ * ```
28
+ */
29
+ export const normalize = (name: string): Effect.Effect<EnsType, EnsError> =>
30
+ Effect.try({
31
+ try: () => Ens.normalize(name),
32
+ catch: (e) => e as EnsError,
33
+ });
34
+
35
+ /**
36
+ * Beautify ENS name for display
37
+ *
38
+ * @param name - ENS name to beautify
39
+ * @returns Effect yielding beautified EnsType
40
+ */
41
+ export const beautify = (name: string): Effect.Effect<EnsType, EnsError> =>
42
+ Effect.try({
43
+ try: () => Ens.beautify(name),
44
+ catch: (e) => e as EnsError,
45
+ });