ox 0.0.1 → 0.1.0

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 (756) hide show
  1. package/Abi/package.json +6 -0
  2. package/Abi.ts +163 -0
  3. package/AbiConstructor/package.json +6 -0
  4. package/AbiConstructor.ts +413 -0
  5. package/AbiError/package.json +6 -0
  6. package/AbiError.ts +719 -0
  7. package/AbiEvent/package.json +6 -0
  8. package/AbiEvent.ts +1284 -0
  9. package/AbiFunction/package.json +6 -0
  10. package/AbiFunction.ts +813 -0
  11. package/AbiItem/package.json +6 -0
  12. package/AbiItem.ts +779 -0
  13. package/AbiParameters/package.json +6 -0
  14. package/AbiParameters.ts +712 -0
  15. package/AccessList/package.json +6 -0
  16. package/AccessList.ts +124 -0
  17. package/AccountProof/package.json +6 -0
  18. package/AccountProof.ts +35 -0
  19. package/Address/package.json +6 -0
  20. package/Address.ts +359 -0
  21. package/AesGcm/package.json +6 -0
  22. package/AesGcm.ts +220 -0
  23. package/Authorization/package.json +6 -0
  24. package/Authorization.ts +639 -0
  25. package/Base58/package.json +6 -0
  26. package/Base58.ts +180 -0
  27. package/Base64/package.json +6 -0
  28. package/Base64.ts +333 -0
  29. package/Blobs/package.json +6 -0
  30. package/Blobs.ts +982 -0
  31. package/Block/package.json +6 -0
  32. package/Block.ts +317 -0
  33. package/Bloom/package.json +6 -0
  34. package/Bloom.ts +80 -0
  35. package/Bls/package.json +6 -0
  36. package/Bls.ts +496 -0
  37. package/BlsPoint/package.json +6 -0
  38. package/BlsPoint.ts +232 -0
  39. package/Bytes/package.json +6 -0
  40. package/Bytes.ts +963 -0
  41. package/CHANGELOG.md +7 -0
  42. package/Caches/package.json +6 -0
  43. package/Caches.ts +21 -0
  44. package/ContractAddress/package.json +6 -0
  45. package/ContractAddress.ts +181 -0
  46. package/Ens/package.json +6 -0
  47. package/Ens.ts +116 -0
  48. package/Errors/package.json +6 -0
  49. package/Errors.ts +95 -0
  50. package/Fee/package.json +6 -0
  51. package/Fee.ts +57 -0
  52. package/Filter/package.json +6 -0
  53. package/Filter.ts +144 -0
  54. package/Hash/package.json +6 -0
  55. package/Hash.ts +210 -0
  56. package/HdKey/package.json +6 -0
  57. package/HdKey.ts +175 -0
  58. package/Hex/package.json +6 -0
  59. package/Hex.ts +1040 -0
  60. package/Json/package.json +6 -0
  61. package/Json.ts +84 -0
  62. package/Kzg/package.json +6 -0
  63. package/Kzg.ts +51 -0
  64. package/LICENSE +21 -0
  65. package/Log/package.json +6 -0
  66. package/Log.ts +248 -0
  67. package/Mnemonic/package.json +6 -0
  68. package/Mnemonic.ts +249 -0
  69. package/P256/package.json +6 -0
  70. package/P256.ts +230 -0
  71. package/PersonalMessage/package.json +6 -0
  72. package/PersonalMessage.ts +70 -0
  73. package/Provider/package.json +6 -0
  74. package/Provider.ts +354 -0
  75. package/PublicKey/package.json +6 -0
  76. package/PublicKey.ts +545 -0
  77. package/README.md +75 -26
  78. package/Rlp/package.json +6 -0
  79. package/Rlp.ts +390 -0
  80. package/RpcRequest/package.json +6 -0
  81. package/RpcRequest.ts +192 -0
  82. package/RpcResponse/package.json +6 -0
  83. package/RpcResponse.ts +389 -0
  84. package/RpcSchema/package.json +6 -0
  85. package/RpcSchema.ts +273 -0
  86. package/RpcTransport/package.json +6 -0
  87. package/RpcTransport.ts +198 -0
  88. package/Secp256k1/package.json +6 -0
  89. package/Secp256k1.ts +304 -0
  90. package/Signature/package.json +6 -0
  91. package/Signature.ts +909 -0
  92. package/Siwe/package.json +6 -0
  93. package/Siwe.ts +516 -0
  94. package/Solidity/package.json +6 -0
  95. package/Solidity.ts +109 -0
  96. package/Transaction/package.json +6 -0
  97. package/Transaction.ts +429 -0
  98. package/TransactionEnvelope/package.json +6 -0
  99. package/TransactionEnvelope.ts +205 -0
  100. package/TransactionEnvelopeEip1559/package.json +6 -0
  101. package/TransactionEnvelopeEip1559.ts +656 -0
  102. package/TransactionEnvelopeEip2930/package.json +6 -0
  103. package/TransactionEnvelopeEip2930.ts +624 -0
  104. package/TransactionEnvelopeEip4844/package.json +6 -0
  105. package/TransactionEnvelopeEip4844.ts +764 -0
  106. package/TransactionEnvelopeEip7702/package.json +6 -0
  107. package/TransactionEnvelopeEip7702.ts +639 -0
  108. package/TransactionEnvelopeLegacy/package.json +6 -0
  109. package/TransactionEnvelopeLegacy.ts +674 -0
  110. package/TransactionReceipt/package.json +6 -0
  111. package/TransactionReceipt.ts +341 -0
  112. package/TransactionRequest/package.json +6 -0
  113. package/TransactionRequest.ts +151 -0
  114. package/TypedData/package.json +6 -0
  115. package/TypedData.ts +931 -0
  116. package/ValidatorData/package.json +6 -0
  117. package/ValidatorData.ts +87 -0
  118. package/Value/package.json +6 -0
  119. package/Value.ts +242 -0
  120. package/WebAuthnP256/package.json +6 -0
  121. package/WebAuthnP256.ts +803 -0
  122. package/WebCryptoP256/package.json +6 -0
  123. package/WebCryptoP256.ts +190 -0
  124. package/Withdrawal/package.json +6 -0
  125. package/Withdrawal.ts +95 -0
  126. package/_cjs/Abi.js +17 -0
  127. package/_cjs/Abi.js.map +1 -0
  128. package/_cjs/AbiConstructor.js +42 -0
  129. package/_cjs/AbiConstructor.js.map +1 -0
  130. package/_cjs/AbiError.js +98 -0
  131. package/_cjs/AbiError.js.map +1 -0
  132. package/_cjs/AbiEvent.js +338 -0
  133. package/_cjs/AbiEvent.js.map +1 -0
  134. package/_cjs/AbiFunction.js +85 -0
  135. package/_cjs/AbiFunction.js.map +1 -0
  136. package/_cjs/AbiItem.js +180 -0
  137. package/_cjs/AbiItem.js.map +1 -0
  138. package/_cjs/AbiParameters.js +229 -0
  139. package/_cjs/AbiParameters.js.map +1 -0
  140. package/_cjs/AccessList.js +51 -0
  141. package/_cjs/AccessList.js.map +1 -0
  142. package/_cjs/AccountProof.js +3 -0
  143. package/_cjs/AccountProof.js.map +1 -0
  144. package/_cjs/Address.js +121 -0
  145. package/_cjs/Address.js.map +1 -0
  146. package/_cjs/AesGcm.js +55 -0
  147. package/_cjs/AesGcm.js.map +1 -0
  148. package/_cjs/Authorization.js +99 -0
  149. package/_cjs/Authorization.js.map +1 -0
  150. package/_cjs/Base58.js +52 -0
  151. package/_cjs/Base58.js.map +1 -0
  152. package/_cjs/Base64.js +76 -0
  153. package/_cjs/Base64.js.map +1 -0
  154. package/_cjs/Blobs.js +255 -0
  155. package/_cjs/Blobs.js.map +1 -0
  156. package/_cjs/Block.js +87 -0
  157. package/_cjs/Block.js.map +1 -0
  158. package/_cjs/Bloom.js +23 -0
  159. package/_cjs/Bloom.js.map +1 -0
  160. package/_cjs/Bls.js +79 -0
  161. package/_cjs/Bls.js.map +1 -0
  162. package/_cjs/BlsPoint.js +32 -0
  163. package/_cjs/BlsPoint.js.map +1 -0
  164. package/_cjs/Bytes.js +279 -0
  165. package/_cjs/Bytes.js.map +1 -0
  166. package/_cjs/Caches.js +14 -0
  167. package/_cjs/Caches.js.map +1 -0
  168. package/_cjs/ContractAddress.js +39 -0
  169. package/_cjs/ContractAddress.js.map +1 -0
  170. package/_cjs/Ens.js +37 -0
  171. package/_cjs/Ens.js.map +1 -0
  172. package/_cjs/Errors.js +99 -0
  173. package/_cjs/Errors.js.map +1 -0
  174. package/_cjs/Fee.js +3 -0
  175. package/_cjs/Fee.js.map +1 -0
  176. package/_cjs/Filter.js +43 -0
  177. package/_cjs/Filter.js.map +1 -0
  178. package/_cjs/Hash.js +40 -0
  179. package/_cjs/Hash.js.map +1 -0
  180. package/_cjs/HdKey.js +30 -0
  181. package/_cjs/HdKey.js.map +1 -0
  182. package/_cjs/Hex.js +324 -0
  183. package/_cjs/Hex.js.map +1 -0
  184. package/_cjs/Json.js +25 -0
  185. package/_cjs/Json.js.map +1 -0
  186. package/_cjs/Kzg.js +14 -0
  187. package/_cjs/Kzg.js.map +1 -0
  188. package/_cjs/Log.js +35 -0
  189. package/_cjs/Log.js.map +1 -0
  190. package/_cjs/Mnemonic.js +56 -0
  191. package/_cjs/Mnemonic.js.map +1 -0
  192. package/_cjs/P256.js +52 -0
  193. package/_cjs/P256.js.map +1 -0
  194. package/_cjs/PersonalMessage.js +16 -0
  195. package/_cjs/PersonalMessage.js.map +1 -0
  196. package/_cjs/Provider.js +90 -0
  197. package/_cjs/Provider.js.map +1 -0
  198. package/_cjs/PublicKey.js +192 -0
  199. package/_cjs/PublicKey.js.map +1 -0
  200. package/_cjs/Rlp.js +179 -0
  201. package/_cjs/Rlp.js.map +1 -0
  202. package/_cjs/RpcRequest.js +27 -0
  203. package/_cjs/RpcRequest.js.map +1 -0
  204. package/_cjs/RpcResponse.js +368 -0
  205. package/_cjs/RpcResponse.js.map +1 -0
  206. package/_cjs/RpcSchema.js +7 -0
  207. package/_cjs/RpcSchema.js.map +1 -0
  208. package/_cjs/RpcTransport.js +95 -0
  209. package/_cjs/RpcTransport.js.map +1 -0
  210. package/_cjs/Secp256k1.js +57 -0
  211. package/_cjs/Secp256k1.js.map +1 -0
  212. package/_cjs/Signature.js +305 -0
  213. package/_cjs/Signature.js.map +1 -0
  214. package/_cjs/Siwe.js +231 -0
  215. package/_cjs/Siwe.js.map +1 -0
  216. package/_cjs/Solidity.js +104 -0
  217. package/_cjs/Solidity.js.map +1 -0
  218. package/_cjs/Transaction.js +106 -0
  219. package/_cjs/Transaction.js.map +1 -0
  220. package/_cjs/TransactionEnvelope.js +80 -0
  221. package/_cjs/TransactionEnvelope.js.map +1 -0
  222. package/_cjs/TransactionEnvelopeEip1559.js +182 -0
  223. package/_cjs/TransactionEnvelopeEip1559.js.map +1 -0
  224. package/_cjs/TransactionEnvelopeEip2930.js +166 -0
  225. package/_cjs/TransactionEnvelopeEip2930.js.map +1 -0
  226. package/_cjs/TransactionEnvelopeEip4844.js +224 -0
  227. package/_cjs/TransactionEnvelopeEip4844.js.map +1 -0
  228. package/_cjs/TransactionEnvelopeEip7702.js +156 -0
  229. package/_cjs/TransactionEnvelopeEip7702.js.map +1 -0
  230. package/_cjs/TransactionEnvelopeLegacy.js +221 -0
  231. package/_cjs/TransactionEnvelopeLegacy.js.map +1 -0
  232. package/_cjs/TransactionReceipt.js +76 -0
  233. package/_cjs/TransactionReceipt.js.map +1 -0
  234. package/_cjs/TransactionRequest.js +51 -0
  235. package/_cjs/TransactionRequest.js.map +1 -0
  236. package/_cjs/TypedData.js +318 -0
  237. package/_cjs/TypedData.js.map +1 -0
  238. package/_cjs/ValidatorData.js +16 -0
  239. package/_cjs/ValidatorData.js.map +1 -0
  240. package/_cjs/Value.js +96 -0
  241. package/_cjs/Value.js.map +1 -0
  242. package/_cjs/WebAuthnP256.js +245 -0
  243. package/_cjs/WebAuthnP256.js.map +1 -0
  244. package/_cjs/WebCryptoP256.js +46 -0
  245. package/_cjs/WebCryptoP256.js.map +1 -0
  246. package/_cjs/Withdrawal.js +24 -0
  247. package/_cjs/Withdrawal.js.map +1 -0
  248. package/_cjs/index.js +66 -0
  249. package/_cjs/index.js.map +1 -0
  250. package/_cjs/internal/abi.js +11 -0
  251. package/_cjs/internal/abi.js.map +1 -0
  252. package/_cjs/internal/abiConstructor.js +3 -0
  253. package/_cjs/internal/abiConstructor.js.map +1 -0
  254. package/_cjs/internal/abiError.js +3 -0
  255. package/_cjs/internal/abiError.js.map +1 -0
  256. package/_cjs/internal/abiEvent.js +3 -0
  257. package/_cjs/internal/abiEvent.js.map +1 -0
  258. package/_cjs/internal/abiFunction.js +3 -0
  259. package/_cjs/internal/abiFunction.js.map +1 -0
  260. package/_cjs/internal/abiItem.js +110 -0
  261. package/_cjs/internal/abiItem.js.map +1 -0
  262. package/_cjs/internal/abiParameters.js +376 -0
  263. package/_cjs/internal/abiParameters.js.map +1 -0
  264. package/_cjs/internal/base58.js +89 -0
  265. package/_cjs/internal/base58.js.map +1 -0
  266. package/_cjs/internal/bytes.js +88 -0
  267. package/_cjs/internal/bytes.js.map +1 -0
  268. package/_cjs/internal/cursor.js +210 -0
  269. package/_cjs/internal/cursor.js.map +1 -0
  270. package/_cjs/internal/ens.js +43 -0
  271. package/_cjs/internal/ens.js.map +1 -0
  272. package/_cjs/internal/errors.js +28 -0
  273. package/_cjs/internal/errors.js.map +1 -0
  274. package/_cjs/internal/hdKey.js +19 -0
  275. package/_cjs/internal/hdKey.js.map +1 -0
  276. package/_cjs/internal/hex.js +66 -0
  277. package/_cjs/internal/hex.js.map +1 -0
  278. package/_cjs/internal/lru.js +34 -0
  279. package/_cjs/internal/lru.js.map +1 -0
  280. package/_cjs/internal/mnemonic/wordlists.js +24 -0
  281. package/_cjs/internal/mnemonic/wordlists.js.map +1 -0
  282. package/_cjs/internal/promise.js +49 -0
  283. package/_cjs/internal/promise.js.map +1 -0
  284. package/_cjs/internal/register.js +3 -0
  285. package/_cjs/internal/register.js.map +1 -0
  286. package/_cjs/internal/rpcSchema.js +3 -0
  287. package/_cjs/internal/rpcSchema.js.map +1 -0
  288. package/_cjs/internal/rpcSchemas/eth.js +3 -0
  289. package/_cjs/internal/rpcSchemas/eth.js.map +1 -0
  290. package/_cjs/internal/rpcSchemas/wallet.js +3 -0
  291. package/_cjs/internal/rpcSchemas/wallet.js.map +1 -0
  292. package/_cjs/internal/rpcTransport.js +19 -0
  293. package/_cjs/internal/rpcTransport.js.map +1 -0
  294. package/_cjs/internal/types.js +3 -0
  295. package/_cjs/internal/types.js.map +1 -0
  296. package/_cjs/internal/uid.js +17 -0
  297. package/_cjs/internal/uid.js.map +1 -0
  298. package/_cjs/internal/webauthn.js +28 -0
  299. package/_cjs/internal/webauthn.js.map +1 -0
  300. package/_cjs/package.json +1 -0
  301. package/_cjs/trusted-setups/Paths.js +6 -0
  302. package/_cjs/trusted-setups/Paths.js.map +1 -0
  303. package/_cjs/trusted-setups/index.js +5 -0
  304. package/_cjs/trusted-setups/index.js.map +1 -0
  305. package/_cjs/trusted-setups/internal/paths.js +11 -0
  306. package/_cjs/trusted-setups/internal/paths.js.map +1 -0
  307. package/_cjs/version.js +5 -0
  308. package/_cjs/version.js.map +1 -0
  309. package/_cjs/window/index.js +3 -0
  310. package/_cjs/window/index.js.map +1 -0
  311. package/_esm/Abi.js +19 -0
  312. package/_esm/Abi.js.map +1 -0
  313. package/_esm/AbiConstructor.js +102 -0
  314. package/_esm/AbiConstructor.js.map +1 -0
  315. package/_esm/AbiError.js +364 -0
  316. package/_esm/AbiError.js.map +1 -0
  317. package/_esm/AbiEvent.js +1038 -0
  318. package/_esm/AbiEvent.js.map +1 -0
  319. package/_esm/AbiFunction.js +549 -0
  320. package/_esm/AbiFunction.js.map +1 -0
  321. package/_esm/AbiItem.js +574 -0
  322. package/_esm/AbiItem.js.map +1 -0
  323. package/_esm/AbiParameters.js +543 -0
  324. package/_esm/AbiParameters.js.map +1 -0
  325. package/_esm/AccessList.js +105 -0
  326. package/_esm/AccessList.js.map +1 -0
  327. package/_esm/AccountProof.js +2 -0
  328. package/_esm/AccountProof.js.map +1 -0
  329. package/_esm/Address.js +268 -0
  330. package/_esm/Address.js.map +1 -0
  331. package/_esm/AesGcm.js +124 -0
  332. package/_esm/AesGcm.js.map +1 -0
  333. package/_esm/Authorization.js +441 -0
  334. package/_esm/Authorization.js.map +1 -0
  335. package/_esm/Base58.js +142 -0
  336. package/_esm/Base58.js.map +1 -0
  337. package/_esm/Base64.js +236 -0
  338. package/_esm/Base64.js.map +1 -0
  339. package/_esm/Blobs.js +624 -0
  340. package/_esm/Blobs.js.map +1 -0
  341. package/_esm/Block.js +177 -0
  342. package/_esm/Block.js.map +1 -0
  343. package/_esm/Bloom.js +57 -0
  344. package/_esm/Bloom.js.map +1 -0
  345. package/_esm/Bls.js +141 -0
  346. package/_esm/Bls.js.map +1 -0
  347. package/_esm/BlsPoint.js +59 -0
  348. package/_esm/BlsPoint.js.map +1 -0
  349. package/_esm/Bytes.js +719 -0
  350. package/_esm/Bytes.js.map +1 -0
  351. package/_esm/Caches.js +19 -0
  352. package/_esm/Caches.js.map +1 -0
  353. package/_esm/ContractAddress.js +110 -0
  354. package/_esm/ContractAddress.js.map +1 -0
  355. package/_esm/Ens.js +84 -0
  356. package/_esm/Ens.js.map +1 -0
  357. package/_esm/Errors.js +105 -0
  358. package/_esm/Errors.js.map +1 -0
  359. package/_esm/Fee.js +2 -0
  360. package/_esm/Fee.js.map +1 -0
  361. package/_esm/Filter.js +100 -0
  362. package/_esm/Filter.js.map +1 -0
  363. package/_esm/Hash.js +126 -0
  364. package/_esm/Hash.js.map +1 -0
  365. package/_esm/HdKey.js +107 -0
  366. package/_esm/HdKey.js.map +1 -0
  367. package/_esm/Hex.js +763 -0
  368. package/_esm/Hex.js.map +1 -0
  369. package/_esm/Json.js +62 -0
  370. package/_esm/Json.js.map +1 -0
  371. package/_esm/Kzg.js +30 -0
  372. package/_esm/Kzg.js.map +1 -0
  373. package/_esm/Log.js +181 -0
  374. package/_esm/Log.js.map +1 -0
  375. package/_esm/Mnemonic.js +154 -0
  376. package/_esm/Mnemonic.js.map +1 -0
  377. package/_esm/P256.js +131 -0
  378. package/_esm/P256.js.map +1 -0
  379. package/_esm/PersonalMessage.js +46 -0
  380. package/_esm/PersonalMessage.js.map +1 -0
  381. package/_esm/Provider.js +122 -0
  382. package/_esm/Provider.js.map +1 -0
  383. package/_esm/PublicKey.js +395 -0
  384. package/_esm/PublicKey.js.map +1 -0
  385. package/_esm/Rlp.js +267 -0
  386. package/_esm/Rlp.js.map +1 -0
  387. package/_esm/RpcRequest.js +131 -0
  388. package/_esm/RpcRequest.js.map +1 -0
  389. package/_esm/RpcResponse.js +457 -0
  390. package/_esm/RpcResponse.js.map +1 -0
  391. package/_esm/RpcSchema.js +46 -0
  392. package/_esm/RpcSchema.js.map +1 -0
  393. package/_esm/RpcTransport.js +110 -0
  394. package/_esm/RpcTransport.js.map +1 -0
  395. package/_esm/Secp256k1.js +173 -0
  396. package/_esm/Secp256k1.js.map +1 -0
  397. package/_esm/Signature.js +696 -0
  398. package/_esm/Signature.js.map +1 -0
  399. package/_esm/Siwe.js +374 -0
  400. package/_esm/Siwe.js.map +1 -0
  401. package/_esm/Solidity.js +104 -0
  402. package/_esm/Solidity.js.map +1 -0
  403. package/_esm/Transaction.js +176 -0
  404. package/_esm/Transaction.js.map +1 -0
  405. package/_esm/TransactionEnvelope.js +139 -0
  406. package/_esm/TransactionEnvelope.js.map +1 -0
  407. package/_esm/TransactionEnvelopeEip1559.js +455 -0
  408. package/_esm/TransactionEnvelopeEip1559.js.map +1 -0
  409. package/_esm/TransactionEnvelopeEip2930.js +439 -0
  410. package/_esm/TransactionEnvelopeEip2930.js.map +1 -0
  411. package/_esm/TransactionEnvelopeEip4844.js +542 -0
  412. package/_esm/TransactionEnvelopeEip4844.js.map +1 -0
  413. package/_esm/TransactionEnvelopeEip7702.js +442 -0
  414. package/_esm/TransactionEnvelopeEip7702.js.map +1 -0
  415. package/_esm/TransactionEnvelopeLegacy.js +495 -0
  416. package/_esm/TransactionEnvelopeLegacy.js.map +1 -0
  417. package/_esm/TransactionReceipt.js +229 -0
  418. package/_esm/TransactionReceipt.js.map +1 -0
  419. package/_esm/TransactionRequest.js +89 -0
  420. package/_esm/TransactionRequest.js.map +1 -0
  421. package/_esm/TypedData.js +635 -0
  422. package/_esm/TypedData.js.map +1 -0
  423. package/_esm/ValidatorData.js +52 -0
  424. package/_esm/ValidatorData.js.map +1 -0
  425. package/_esm/Value.js +196 -0
  426. package/_esm/Value.js.map +1 -0
  427. package/_esm/WebAuthnP256.js +471 -0
  428. package/_esm/WebAuthnP256.js.map +1 -0
  429. package/_esm/WebCryptoP256.js +116 -0
  430. package/_esm/WebCryptoP256.js.map +1 -0
  431. package/_esm/Withdrawal.js +72 -0
  432. package/_esm/Withdrawal.js.map +1 -0
  433. package/_esm/index.js +3366 -0
  434. package/_esm/index.js.map +1 -0
  435. package/_esm/internal/abi.js +9 -0
  436. package/_esm/internal/abi.js.map +1 -0
  437. package/_esm/internal/abiConstructor.js +2 -0
  438. package/_esm/internal/abiConstructor.js.map +1 -0
  439. package/_esm/internal/abiError.js +2 -0
  440. package/_esm/internal/abiError.js.map +1 -0
  441. package/_esm/internal/abiEvent.js +2 -0
  442. package/_esm/internal/abiEvent.js.map +1 -0
  443. package/_esm/internal/abiFunction.js +2 -0
  444. package/_esm/internal/abiFunction.js.map +1 -0
  445. package/_esm/internal/abiItem.js +122 -0
  446. package/_esm/internal/abiItem.js.map +1 -0
  447. package/_esm/internal/abiParameters.js +419 -0
  448. package/_esm/internal/abiParameters.js.map +1 -0
  449. package/_esm/internal/base58.js +91 -0
  450. package/_esm/internal/base58.js.map +1 -0
  451. package/_esm/internal/bytes.js +86 -0
  452. package/_esm/internal/bytes.js.map +1 -0
  453. package/_esm/internal/cursor.js +207 -0
  454. package/_esm/internal/cursor.js.map +1 -0
  455. package/_esm/internal/ens.js +47 -0
  456. package/_esm/internal/ens.js.map +1 -0
  457. package/_esm/internal/errors.js +26 -0
  458. package/_esm/internal/errors.js.map +1 -0
  459. package/_esm/internal/hdKey.js +17 -0
  460. package/_esm/internal/hdKey.js.map +1 -0
  461. package/_esm/internal/hex.js +64 -0
  462. package/_esm/internal/hex.js.map +1 -0
  463. package/_esm/internal/lru.js +36 -0
  464. package/_esm/internal/lru.js.map +1 -0
  465. package/_esm/internal/mnemonic/wordlists.js +11 -0
  466. package/_esm/internal/mnemonic/wordlists.js.map +1 -0
  467. package/_esm/internal/promise.js +52 -0
  468. package/_esm/internal/promise.js.map +1 -0
  469. package/_esm/internal/register.js +2 -0
  470. package/_esm/internal/register.js.map +1 -0
  471. package/_esm/internal/rpcSchema.js +2 -0
  472. package/_esm/internal/rpcSchema.js.map +1 -0
  473. package/_esm/internal/rpcSchemas/eth.js +2 -0
  474. package/_esm/internal/rpcSchemas/eth.js.map +1 -0
  475. package/_esm/internal/rpcSchemas/wallet.js +2 -0
  476. package/_esm/internal/rpcSchemas/wallet.js.map +1 -0
  477. package/_esm/internal/rpcTransport.js +20 -0
  478. package/_esm/internal/rpcTransport.js.map +1 -0
  479. package/_esm/internal/types.js +2 -0
  480. package/_esm/internal/types.js.map +1 -0
  481. package/_esm/internal/uid.js +15 -0
  482. package/_esm/internal/uid.js.map +1 -0
  483. package/_esm/internal/webauthn.js +35 -0
  484. package/_esm/internal/webauthn.js.map +1 -0
  485. package/_esm/package.json +1 -0
  486. package/_esm/trusted-setups/Paths.js +3 -0
  487. package/_esm/trusted-setups/Paths.js.map +1 -0
  488. package/_esm/trusted-setups/index.js +2 -0
  489. package/_esm/trusted-setups/index.js.map +1 -0
  490. package/_esm/trusted-setups/internal/paths.js +12 -0
  491. package/_esm/trusted-setups/internal/paths.js.map +1 -0
  492. package/_esm/version.js +3 -0
  493. package/_esm/version.js.map +1 -0
  494. package/_esm/window/index.js +2 -0
  495. package/_esm/window/index.js.map +1 -0
  496. package/_test/Abi.test-d/package.json +6 -0
  497. package/_test/AbiConstructor.test-d/package.json +6 -0
  498. package/_test/AbiError.test-d/package.json +6 -0
  499. package/_test/AbiEvent.snap-d/package.json +6 -0
  500. package/_test/AbiEvent.snap-d.ts +329 -0
  501. package/_test/AbiFunction.snap-d/package.json +6 -0
  502. package/_test/AbiFunction.snap-d.ts +262 -0
  503. package/_test/AbiItem.snap-d/package.json +6 -0
  504. package/_test/AbiItem.snap-d.ts +131 -0
  505. package/_test/AbiParameters.bench/package.json +6 -0
  506. package/_test/AbiParameters.snap-d/package.json +6 -0
  507. package/_test/AbiParameters.snap-d.ts +66 -0
  508. package/_test/Address.bench/package.json +6 -0
  509. package/_test/Base58.bench/package.json +6 -0
  510. package/_test/Hex.bench/package.json +6 -0
  511. package/_test/Hex.test-d/package.json +6 -0
  512. package/_test/PublicKey.test-d/package.json +6 -0
  513. package/_test/Rlp.bench/package.json +6 -0
  514. package/_test/Rlp.test-d/package.json +6 -0
  515. package/_test/Signature.snap-d/package.json +6 -0
  516. package/_test/Signature.snap-d.ts +96 -0
  517. package/_test/TransactionEnvelopeEip1559.test-d/package.json +6 -0
  518. package/_test/TransactionEnvelopeEip2930.test-d/package.json +6 -0
  519. package/_test/TransactionEnvelopeEip4844.test-d/package.json +6 -0
  520. package/_test/TransactionEnvelopeEip7702.test-d/package.json +6 -0
  521. package/_test/TransactionEnvelopeLegacy.test-d/package.json +6 -0
  522. package/_test/TypedData.test-d/package.json +6 -0
  523. package/_types/Abi.d.ts +137 -0
  524. package/_types/Abi.d.ts.map +1 -0
  525. package/_types/AbiConstructor.d.ts +305 -0
  526. package/_types/AbiConstructor.d.ts.map +1 -0
  527. package/_types/AbiError.d.ts +522 -0
  528. package/_types/AbiError.d.ts.map +1 -0
  529. package/_types/AbiEvent.d.ts +892 -0
  530. package/_types/AbiEvent.d.ts.map +1 -0
  531. package/_types/AbiFunction.d.ts +602 -0
  532. package/_types/AbiFunction.d.ts.map +1 -0
  533. package/_types/AbiItem.d.ts +544 -0
  534. package/_types/AbiItem.d.ts.map +1 -0
  535. package/_types/AbiParameters.d.ts +466 -0
  536. package/_types/AbiParameters.d.ts.map +1 -0
  537. package/_types/AccessList.d.ts +83 -0
  538. package/_types/AccessList.d.ts.map +1 -0
  539. package/_types/AccountProof.d.ts +32 -0
  540. package/_types/AccountProof.d.ts.map +1 -0
  541. package/_types/Address.d.ts +244 -0
  542. package/_types/Address.d.ts.map +1 -0
  543. package/_types/AesGcm.d.ts +116 -0
  544. package/_types/AesGcm.d.ts.map +1 -0
  545. package/_types/Authorization.d.ts +461 -0
  546. package/_types/Authorization.d.ts.map +1 -0
  547. package/_types/Base58.d.ts +131 -0
  548. package/_types/Base58.d.ts.map +1 -0
  549. package/_types/Base64.d.ts +244 -0
  550. package/_types/Base64.d.ts.map +1 -0
  551. package/_types/Blobs.d.ts +556 -0
  552. package/_types/Blobs.d.ts.map +1 -0
  553. package/_types/Block.d.ts +190 -0
  554. package/_types/Block.d.ts.map +1 -0
  555. package/_types/Bloom.d.ts +54 -0
  556. package/_types/Bloom.d.ts.map +1 -0
  557. package/_types/Bls.d.ts +365 -0
  558. package/_types/Bls.d.ts.map +1 -0
  559. package/_types/BlsPoint.d.ts +187 -0
  560. package/_types/BlsPoint.d.ts.map +1 -0
  561. package/_types/Bytes.d.ts +674 -0
  562. package/_types/Bytes.d.ts.map +1 -0
  563. package/_types/Caches.d.ts +13 -0
  564. package/_types/Caches.d.ts.map +1 -0
  565. package/_types/ContractAddress.d.ts +115 -0
  566. package/_types/ContractAddress.d.ts.map +1 -0
  567. package/_types/Ens.d.ts +72 -0
  568. package/_types/Ens.d.ts.map +1 -0
  569. package/_types/Errors.d.ts +33 -0
  570. package/_types/Errors.d.ts.map +1 -0
  571. package/_types/Fee.d.ts +41 -0
  572. package/_types/Fee.d.ts.map +1 -0
  573. package/_types/Filter.d.ts +100 -0
  574. package/_types/Filter.d.ts.map +1 -0
  575. package/_types/Hash.d.ts +135 -0
  576. package/_types/Hash.d.ts.map +1 -0
  577. package/_types/HdKey.d.ts +146 -0
  578. package/_types/HdKey.d.ts.map +1 -0
  579. package/_types/Hex.d.ts +711 -0
  580. package/_types/Hex.d.ts.map +1 -0
  581. package/_types/Json.d.ts +53 -0
  582. package/_types/Json.d.ts.map +1 -0
  583. package/_types/Kzg.d.ts +42 -0
  584. package/_types/Kzg.d.ts.map +1 -0
  585. package/_types/Log.d.ts +194 -0
  586. package/_types/Log.d.ts.map +1 -0
  587. package/_types/Mnemonic.d.ts +176 -0
  588. package/_types/Mnemonic.d.ts.map +1 -0
  589. package/_types/P256.d.ts +207 -0
  590. package/_types/P256.d.ts.map +1 -0
  591. package/_types/PersonalMessage.d.ts +49 -0
  592. package/_types/PersonalMessage.d.ts.map +1 -0
  593. package/_types/Provider.d.ts +268 -0
  594. package/_types/Provider.d.ts.map +1 -0
  595. package/_types/PublicKey.d.ts +327 -0
  596. package/_types/PublicKey.d.ts.map +1 -0
  597. package/_types/Rlp.d.ts +153 -0
  598. package/_types/Rlp.d.ts.map +1 -0
  599. package/_types/RpcRequest.d.ts +144 -0
  600. package/_types/RpcRequest.d.ts.map +1 -0
  601. package/_types/RpcResponse.d.ts +266 -0
  602. package/_types/RpcResponse.d.ts.map +1 -0
  603. package/_types/RpcSchema.d.ts +248 -0
  604. package/_types/RpcSchema.d.ts.map +1 -0
  605. package/_types/RpcTransport.d.ts +65 -0
  606. package/_types/RpcTransport.d.ts.map +1 -0
  607. package/_types/Secp256k1.d.ts +277 -0
  608. package/_types/Secp256k1.d.ts.map +1 -0
  609. package/_types/Signature.d.ts +601 -0
  610. package/_types/Signature.d.ts.map +1 -0
  611. package/_types/Siwe.d.ts +249 -0
  612. package/_types/Siwe.d.ts.map +1 -0
  613. package/_types/Solidity.d.ts +100 -0
  614. package/_types/Solidity.d.ts.map +1 -0
  615. package/_types/Transaction.d.ts +235 -0
  616. package/_types/Transaction.d.ts.map +1 -0
  617. package/_types/TransactionEnvelope.d.ts +141 -0
  618. package/_types/TransactionEnvelope.d.ts.map +1 -0
  619. package/_types/TransactionEnvelopeEip1559.d.ts +367 -0
  620. package/_types/TransactionEnvelopeEip1559.d.ts.map +1 -0
  621. package/_types/TransactionEnvelopeEip2930.d.ts +364 -0
  622. package/_types/TransactionEnvelopeEip2930.d.ts.map +1 -0
  623. package/_types/TransactionEnvelopeEip4844.d.ts +419 -0
  624. package/_types/TransactionEnvelopeEip4844.d.ts.map +1 -0
  625. package/_types/TransactionEnvelopeEip7702.d.ts +377 -0
  626. package/_types/TransactionEnvelopeEip7702.d.ts.map +1 -0
  627. package/_types/TransactionEnvelopeLegacy.d.ts +358 -0
  628. package/_types/TransactionEnvelopeLegacy.d.ts.map +1 -0
  629. package/_types/TransactionReceipt.d.ts +271 -0
  630. package/_types/TransactionReceipt.d.ts.map +1 -0
  631. package/_types/TransactionRequest.d.ts +92 -0
  632. package/_types/TransactionRequest.d.ts.map +1 -0
  633. package/_types/TypedData.d.ts +496 -0
  634. package/_types/TypedData.d.ts.map +1 -0
  635. package/_types/ValidatorData.d.ts +64 -0
  636. package/_types/ValidatorData.d.ts.map +1 -0
  637. package/_types/Value.d.ts +159 -0
  638. package/_types/Value.d.ts.map +1 -0
  639. package/_types/WebAuthnP256.d.ts +445 -0
  640. package/_types/WebAuthnP256.d.ts.map +1 -0
  641. package/_types/WebCryptoP256.d.ts +119 -0
  642. package/_types/WebCryptoP256.d.ts.map +1 -0
  643. package/_types/Withdrawal.d.ts +74 -0
  644. package/_types/Withdrawal.d.ts.map +1 -0
  645. package/_types/index.d.ts +3367 -0
  646. package/_types/index.d.ts.map +1 -0
  647. package/_types/internal/abi.d.ts +4 -0
  648. package/_types/internal/abi.d.ts.map +1 -0
  649. package/_types/internal/abiConstructor.d.ts +11 -0
  650. package/_types/internal/abiConstructor.d.ts.map +1 -0
  651. package/_types/internal/abiError.d.ts +11 -0
  652. package/_types/internal/abiError.d.ts.map +1 -0
  653. package/_types/internal/abiEvent.d.ts +60 -0
  654. package/_types/internal/abiEvent.d.ts.map +1 -0
  655. package/_types/internal/abiFunction.d.ts +11 -0
  656. package/_types/internal/abiFunction.d.ts.map +1 -0
  657. package/_types/internal/abiItem.d.ts +100 -0
  658. package/_types/internal/abiItem.d.ts.map +1 -0
  659. package/_types/internal/abiParameters.d.ts +169 -0
  660. package/_types/internal/abiParameters.d.ts.map +1 -0
  661. package/_types/internal/base58.d.ts +17 -0
  662. package/_types/internal/base58.d.ts.map +1 -0
  663. package/_types/internal/bytes.d.ts +52 -0
  664. package/_types/internal/bytes.d.ts.map +1 -0
  665. package/_types/internal/cursor.d.ts +70 -0
  666. package/_types/internal/cursor.d.ts.map +1 -0
  667. package/_types/internal/ens.d.ts +23 -0
  668. package/_types/internal/ens.d.ts.map +1 -0
  669. package/_types/internal/errors.d.ts +7 -0
  670. package/_types/internal/errors.d.ts.map +1 -0
  671. package/_types/internal/hdKey.d.ts +10 -0
  672. package/_types/internal/hdKey.d.ts.map +1 -0
  673. package/_types/internal/hex.d.ts +39 -0
  674. package/_types/internal/hex.d.ts.map +1 -0
  675. package/_types/internal/lru.d.ts +13 -0
  676. package/_types/internal/lru.d.ts.map +1 -0
  677. package/_types/internal/mnemonic/wordlists.d.ts +11 -0
  678. package/_types/internal/mnemonic/wordlists.d.ts.map +1 -0
  679. package/_types/internal/promise.d.ts +27 -0
  680. package/_types/internal/promise.d.ts.map +1 -0
  681. package/_types/internal/register.d.ts +13 -0
  682. package/_types/internal/register.d.ts.map +1 -0
  683. package/_types/internal/rpcSchema.d.ts +12 -0
  684. package/_types/internal/rpcSchema.d.ts.map +1 -0
  685. package/_types/internal/rpcSchemas/eth.d.ts +718 -0
  686. package/_types/internal/rpcSchemas/eth.d.ts.map +1 -0
  687. package/_types/internal/rpcSchemas/wallet.d.ts +416 -0
  688. package/_types/internal/rpcSchemas/wallet.d.ts.map +1 -0
  689. package/_types/internal/rpcTransport.d.ts +38 -0
  690. package/_types/internal/rpcTransport.d.ts.map +1 -0
  691. package/_types/internal/types.d.ts +284 -0
  692. package/_types/internal/types.d.ts.map +1 -0
  693. package/_types/internal/uid.d.ts +3 -0
  694. package/_types/internal/uid.d.ts.map +1 -0
  695. package/_types/internal/webauthn.d.ts +127 -0
  696. package/_types/internal/webauthn.d.ts.map +1 -0
  697. package/_types/trusted-setups/Paths.d.ts +2 -0
  698. package/_types/trusted-setups/Paths.d.ts.map +1 -0
  699. package/_types/trusted-setups/index.d.ts +2 -0
  700. package/_types/trusted-setups/index.d.ts.map +1 -0
  701. package/_types/trusted-setups/internal/paths.d.ts +3 -0
  702. package/_types/trusted-setups/internal/paths.d.ts.map +1 -0
  703. package/_types/version.d.ts +3 -0
  704. package/_types/version.d.ts.map +1 -0
  705. package/_types/window/index.d.ts +7 -0
  706. package/_types/window/index.d.ts.map +1 -0
  707. package/index.ts +3427 -0
  708. package/internal/abi.ts +11 -0
  709. package/internal/abiConstructor.ts +32 -0
  710. package/internal/abiError.ts +30 -0
  711. package/internal/abiEvent.ts +154 -0
  712. package/internal/abiFunction.ts +32 -0
  713. package/internal/abiItem.ts +593 -0
  714. package/internal/abiParameters.ts +741 -0
  715. package/internal/base58.ts +106 -0
  716. package/internal/bytes.ts +152 -0
  717. package/internal/cursor.ts +252 -0
  718. package/internal/ens.ts +64 -0
  719. package/internal/errors.ts +26 -0
  720. package/internal/hdKey.ts +25 -0
  721. package/internal/hex.ts +123 -0
  722. package/internal/lru.ts +34 -0
  723. package/internal/mnemonic/wordlists.ts +10 -0
  724. package/internal/promise.ts +66 -0
  725. package/internal/register.ts +15 -0
  726. package/internal/rpcSchema.ts +20 -0
  727. package/internal/rpcSchemas/eth.ts +727 -0
  728. package/internal/rpcSchemas/wallet.ts +428 -0
  729. package/internal/rpcTransport.ts +74 -0
  730. package/internal/types.ts +414 -0
  731. package/internal/uid.ts +15 -0
  732. package/internal/webauthn.ts +198 -0
  733. package/package.json +500 -20
  734. package/trusted-setups/Paths/package.json +6 -0
  735. package/trusted-setups/Paths.ts +3 -0
  736. package/trusted-setups/index.ts +1 -0
  737. package/trusted-setups/internal/paths.ts +13 -0
  738. package/trusted-setups/internal/setups/mainnet.json +8265 -0
  739. package/trusted-setups/internal/setups/mainnet.txt +4163 -0
  740. package/trusted-setups/package.json +6 -0
  741. package/tsdoc.json +4 -0
  742. package/version/package.json +6 -0
  743. package/version.ts +2 -0
  744. package/window/index.ts +7 -0
  745. package/window/package.json +6 -0
  746. package/cl/ansiesc.js +0 -25
  747. package/cl/deps.js +0 -7
  748. package/cl/editor.js +0 -141
  749. package/cl/index.html +0 -19
  750. package/cl/ox.js +0 -44
  751. package/cl/socket.io.js +0 -1922
  752. package/cl/style.css +0 -37
  753. package/srv/deps.js +0 -88
  754. package/srv/httpSrv.js +0 -82
  755. package/srv/ox.js +0 -44
  756. package/srv/remoteXtermReq.js +0 -70
package/Blobs.ts ADDED
@@ -0,0 +1,982 @@
1
+ import * as Bytes from './Bytes.js'
2
+ import * as Errors from './Errors.js'
3
+ import * as Hash from './Hash.js'
4
+ import * as Hex from './Hex.js'
5
+ import * as Kzg from './Kzg.js'
6
+ import * as Cursor from './internal/cursor.js'
7
+ import type { Compute, Mutable, OneOf, UnionCompute } from './internal/types.js'
8
+
9
+ /** Blob limit per transaction. */
10
+ const blobsPerTransaction = 6
11
+
12
+ /** The number of bytes in a BLS scalar field element. */
13
+ export const bytesPerFieldElement = 32
14
+
15
+ /** The number of field elements in a blob. */
16
+ export const fieldElementsPerBlob = 4096
17
+
18
+ /** The number of bytes in a blob. */
19
+ export const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob
20
+
21
+ /** Blob bytes limit per transaction. */
22
+ export const maxBytesPerTransaction =
23
+ bytesPerBlob * blobsPerTransaction -
24
+ // terminator byte (0x80).
25
+ 1 -
26
+ // zero byte (0x00) appended to each field element.
27
+ 1 * fieldElementsPerBlob * blobsPerTransaction
28
+
29
+ /** Root type for a Blob. */
30
+ export type Blob<type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes> =
31
+ type
32
+
33
+ /** A list of {@link ox#Blobs.Blob}. */
34
+ export type Blobs<type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes> =
35
+ readonly Blob<type>[]
36
+
37
+ /** Type for a Blob Sidecar that contains a blob, as well as its KZG commitment and proof. */
38
+ export type BlobSidecar<
39
+ type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes,
40
+ > = Compute<{
41
+ /** The blob associated with the transaction. */
42
+ blob: type
43
+ /** The KZG commitment corresponding to this blob. */
44
+ commitment: type
45
+ /** The KZG proof corresponding to this blob and commitment. */
46
+ proof: type
47
+ }>
48
+
49
+ /**
50
+ * Transform a list of Commitments to Blob Versioned Hashes.
51
+ *
52
+ * @example
53
+ * ```ts twoslash
54
+ * // @noErrors
55
+ * import { Blobs } from 'viem'
56
+ * import { kzg } from './kzg'
57
+ *
58
+ * const blobs = Blobs.from('0xdeadbeef')
59
+ * const commitments = Blobs.toCommitments(blobs, { kzg })
60
+ * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments) // [!code focus]
61
+ * // @log: ['0x...', '0x...']
62
+ * ```
63
+ *
64
+ * @example
65
+ * ### Configuring Return Type
66
+ *
67
+ * It is possible to configure the return type for the Versioned Hashes with the `as` option.
68
+ *
69
+ * ```ts twoslash
70
+ * // @noErrors
71
+ * import { Blobs } from 'viem'
72
+ * import { kzg } from './kzg'
73
+ *
74
+ * const blobs = Blobs.from('0xdeadbeef')
75
+ * const commitments = Blobs.toCommitments(blobs, { kzg })
76
+ * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments, {
77
+ * as: 'Bytes', // [!code focus]
78
+ * })
79
+ * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]
80
+ * ```
81
+ *
82
+ * @example
83
+ * ### Versioning Hashes
84
+ *
85
+ * It is possible to configure the version for the Versioned Hashes with the `version` option.
86
+ *
87
+ * ```ts twoslash
88
+ * // @noErrors
89
+ * import { Blobs } from 'viem'
90
+ * import { kzg } from './kzg'
91
+ *
92
+ * const blobs = Blobs.from('0xdeadbeef')
93
+ * const commitments = Blobs.toCommitments(blobs, { kzg })
94
+ * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments, {
95
+ * version: 2, // [!code focus]
96
+ * })
97
+ * ```
98
+ *
99
+ * @param commitments - A list of commitments.
100
+ * @param options - Options.
101
+ * @returns A list of Blob Versioned Hashes.
102
+ */
103
+ export function commitmentsToVersionedHashes<
104
+ const commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[],
105
+ as extends 'Hex' | 'Bytes' =
106
+ | (commitments extends readonly Hex.Hex[] ? 'Hex' : never)
107
+ | (commitments extends readonly Bytes.Bytes[] ? 'Bytes' : never),
108
+ >(
109
+ commitments: commitments | readonly Bytes.Bytes[] | readonly Hex.Hex[],
110
+ options: commitmentsToVersionedHashes.Options<as> = {},
111
+ ): commitmentsToVersionedHashes.ReturnType<as> {
112
+ const { version } = options
113
+
114
+ const as =
115
+ options.as ?? (typeof commitments[0] === 'string' ? 'Hex' : 'Bytes')
116
+
117
+ const hashes: Uint8Array[] | Hex.Hex[] = []
118
+ for (const commitment of commitments) {
119
+ hashes.push(
120
+ commitmentToVersionedHash(commitment, {
121
+ as,
122
+ version,
123
+ }) as never,
124
+ )
125
+ }
126
+ return hashes as never
127
+ }
128
+
129
+ export declare namespace commitmentsToVersionedHashes {
130
+ type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {
131
+ /** Return type. */
132
+ as?: as | 'Hex' | 'Bytes' | undefined
133
+ /** Version to tag onto the hashes. */
134
+ version?: number | undefined
135
+ }
136
+
137
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =
138
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
139
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
140
+
141
+ type ErrorType = Errors.GlobalErrorType
142
+ }
143
+
144
+ commitmentsToVersionedHashes.parseError = (error: unknown) =>
145
+ /* v8 ignore next */
146
+ error as commitmentsToVersionedHashes.ErrorType
147
+
148
+ /**
149
+ * Transform a Commitment to its Blob Versioned Hash.
150
+ *
151
+ * @example
152
+ * ```ts twoslash
153
+ * // @noErrors
154
+ * import { Blobs } from 'ox'
155
+ * import { kzg } from './kzg'
156
+ *
157
+ * const blobs = Blobs.from('0xdeadbeef')
158
+ * const [commitment] = Blobs.toCommitments(blobs, { kzg })
159
+ * const versionedHash = Blobs.commitmentToVersionedHash(commitment) // [!code focus]
160
+ * ```
161
+ *
162
+ * @example
163
+ * ### Configuring Return Type
164
+ *
165
+ * It is possible to configure the return type for the Versioned Hash with the `as` option.
166
+ *
167
+ * ```ts twoslash
168
+ * // @noErrors
169
+ * import { Blobs } from 'viem'
170
+ * import { kzg } from './kzg'
171
+ *
172
+ * const blobs = Blobs.from('0xdeadbeef')
173
+ * const [commitment] = Blobs.toCommitments(blobs, { kzg })
174
+ * const versionedHashes = Blobs.commitmentToVersionedHash(commitment, {
175
+ * as: 'Bytes', // [!code focus]
176
+ * })
177
+ * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]
178
+ * ```
179
+ *
180
+ * @example
181
+ * ### Versioning Hashes
182
+ *
183
+ * It is possible to configure the version for the Versioned Hash with the `version` option.
184
+ *
185
+ * ```ts twoslash
186
+ * // @noErrors
187
+ * import { Blobs } from 'viem'
188
+ * import { kzg } from './kzg'
189
+ *
190
+ * const blobs = Blobs.from('0xdeadbeef')
191
+ * const [commitment] = Blobs.toCommitments(blobs, { kzg })
192
+ * const versionedHashes = Blobs.commitmentToVersionedHash(commitment, {
193
+ * version: 2, // [!code focus]
194
+ * })
195
+ * ```
196
+ *
197
+ * @param commitment - The commitment.
198
+ * @param options - Options.
199
+ * @returns The Blob Versioned Hash.
200
+ */
201
+ export function commitmentToVersionedHash<
202
+ const commitment extends Hex.Hex | Bytes.Bytes,
203
+ as extends 'Hex' | 'Bytes' =
204
+ | (commitment extends Hex.Hex ? 'Hex' : never)
205
+ | (commitment extends Bytes.Bytes ? 'Bytes' : never),
206
+ >(
207
+ commitment: commitment | Hex.Hex | Bytes.Bytes,
208
+ options: commitmentToVersionedHash.Options<as> = {},
209
+ ): commitmentToVersionedHash.ReturnType<as> {
210
+ const { version = 1 } = options
211
+ const as = options.as ?? (typeof commitment === 'string' ? 'Hex' : 'Bytes')
212
+
213
+ const versionedHash = Hash.sha256(commitment, { as: 'Bytes' })
214
+ versionedHash.set([version], 0)
215
+ return (
216
+ as === 'Bytes' ? versionedHash : Hex.fromBytes(versionedHash)
217
+ ) as commitmentToVersionedHash.ReturnType<as>
218
+ }
219
+
220
+ export declare namespace commitmentToVersionedHash {
221
+ type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {
222
+ /** Return type. */
223
+ as?: as | 'Hex' | 'Bytes' | undefined
224
+ /** Version to tag onto the hash. */
225
+ version?: number | undefined
226
+ }
227
+
228
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =
229
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
230
+ | (as extends 'Hex' ? Hex.Hex : never)
231
+
232
+ type ErrorType = Errors.GlobalErrorType
233
+ }
234
+
235
+ commitmentToVersionedHash.parseError = (error: unknown) =>
236
+ /* v8 ignore next */
237
+ error as commitmentToVersionedHash.ErrorType
238
+
239
+ /**
240
+ * Transforms arbitrary data to {@link ox#Blobs.Blobs}.
241
+ *
242
+ * @example
243
+ * ```ts twoslash
244
+ * import { Blobs } from 'ox'
245
+ *
246
+ * const blobs = Blobs.from('0xdeadbeef')
247
+ * ```
248
+ *
249
+ * @example
250
+ * ### Creating Blobs from a String
251
+ *
252
+ * An example of creating Blobs from a string using {@link ox#Hex.(from:function)}:
253
+ *
254
+ * ```ts twoslash
255
+ * import { Blobs, Hex } from 'ox'
256
+ *
257
+ * const blobs = Blobs.from(Hex.fromString('Hello world!'))
258
+ * ```
259
+ *
260
+ * @example
261
+ * ### Configuring Return Type
262
+ *
263
+ * It is possible to configure the return type for the Blobs with the `as` option.
264
+ *
265
+ * ```ts twoslash
266
+ * import { Blobs } from 'ox'
267
+ *
268
+ * const blobs = Blobs.from('0xdeadbeef', { as: 'Bytes' })
269
+ * // ^?
270
+ *
271
+ *
272
+ * ```
273
+ *
274
+ * @param data - The data to convert to {@link ox#Blobs.Blobs}.
275
+ * @param options - Options.
276
+ * @returns The {@link ox#Blobs.Blobs}.
277
+ */
278
+ export function from<
279
+ const data extends Hex.Hex | Bytes.Bytes,
280
+ as extends 'Hex' | 'Bytes' =
281
+ | (data extends Hex.Hex ? 'Hex' : never)
282
+ | (data extends Bytes.Bytes ? 'Bytes' : never),
283
+ >(
284
+ data: data | Hex.Hex | Bytes.Bytes,
285
+ options: from.Options<as> = {},
286
+ ): from.ReturnType<as> {
287
+ const as = options.as ?? (typeof data === 'string' ? 'Hex' : 'Bytes')
288
+ const data_ = (
289
+ typeof data === 'string' ? Bytes.fromHex(data) : data
290
+ ) as Bytes.Bytes
291
+
292
+ const size_ = Bytes.size(data_)
293
+ if (!size_) throw new EmptyBlobError()
294
+ if (size_ > maxBytesPerTransaction)
295
+ throw new BlobSizeTooLargeError({
296
+ maxSize: maxBytesPerTransaction,
297
+ size: size_,
298
+ })
299
+
300
+ const blobs = []
301
+
302
+ let active = true
303
+ let position = 0
304
+ while (active) {
305
+ const blob = Cursor.create(new Uint8Array(bytesPerBlob))
306
+
307
+ let size = 0
308
+ while (size < fieldElementsPerBlob) {
309
+ const bytes = data_.slice(position, position + (bytesPerFieldElement - 1))
310
+
311
+ // Push a zero byte so the field element doesn't overflow the BLS modulus.
312
+ blob.pushByte(0x00)
313
+
314
+ // Push the current segment of data bytes.
315
+ blob.pushBytes(bytes)
316
+
317
+ // If we detect that the current segment of data bytes is less than 31 bytes,
318
+ // we can stop processing and push a terminator byte to indicate the end of the blob.
319
+ if (bytes.length < 31) {
320
+ blob.pushByte(0x80)
321
+ active = false
322
+ break
323
+ }
324
+
325
+ size++
326
+ position += 31
327
+ }
328
+
329
+ blobs.push(blob)
330
+ }
331
+
332
+ return (
333
+ as === 'Bytes'
334
+ ? blobs.map((x) => x.bytes)
335
+ : blobs.map((x) => Hex.fromBytes(x.bytes))
336
+ ) as never
337
+ }
338
+
339
+ export declare namespace from {
340
+ type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {
341
+ /** Return type. */
342
+ as?: as | 'Hex' | 'Bytes' | undefined
343
+ }
344
+
345
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =
346
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
347
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
348
+
349
+ type ErrorType =
350
+ | BlobSizeTooLargeError
351
+ | EmptyBlobError
352
+ | Bytes.fromHex.ErrorType
353
+ | Hex.fromBytes.ErrorType
354
+ | Cursor.create.ErrorType
355
+ | Bytes.size.ErrorType
356
+ | Errors.GlobalErrorType
357
+ }
358
+
359
+ /* v8 ignore next */
360
+ from.parseError = (error: unknown) => error as from.ErrorType
361
+
362
+ /**
363
+ * Transforms a list of {@link ox#Blobs.BlobSidecars} to their Blob Versioned Hashes.
364
+ *
365
+ * @example
366
+ * ```ts twoslash
367
+ * // @noErrors
368
+ * import { Blobs } from 'ox'
369
+ *
370
+ * const blobs = Blobs.from('0xdeadbeef')
371
+ * const sidecars = Blobs.toSidecars(blobs, { kzg })
372
+ * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars) // [!code focus]
373
+ * ```
374
+ *
375
+ * @example
376
+ * ### Configuring Return Type
377
+ *
378
+ * It is possible to configure the return type for the Versioned Hashes with the `as` option.
379
+ *
380
+ * ```ts twoslash
381
+ * // @noErrors
382
+ * import { Blobs } from 'viem'
383
+ * import { kzg } from './kzg'
384
+ *
385
+ * const blobs = Blobs.from('0xdeadbeef')
386
+ * const sidecars = Blobs.toSidecars(blobs, { kzg })
387
+ * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars, {
388
+ * as: 'Bytes', // [!code focus]
389
+ * })
390
+ * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]
391
+ * ```
392
+ *
393
+ * @example
394
+ * ### Versioning Hashes
395
+ *
396
+ * It is possible to configure the version for the Versioned Hashes with the `version` option.
397
+ *
398
+ * ```ts twoslash
399
+ * // @noErrors
400
+ * import { Blobs } from 'viem'
401
+ * import { kzg } from './kzg'
402
+ *
403
+ * const blobs = Blobs.from('0xdeadbeef')
404
+ * const sidecars = Blobs.toSidecars(blobs, { kzg })
405
+ * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars, {
406
+ * version: 2, // [!code focus]
407
+ * })
408
+ * ```
409
+ *
410
+ * @param sidecars - The {@link ox#Blobs.BlobSidecars} to transform to Blob Versioned Hashes.
411
+ * @param options - Options.
412
+ * @returns The versioned hashes.
413
+ */
414
+ export function sidecarsToVersionedHashes<
415
+ const sidecars extends BlobSidecars,
416
+ as extends 'Hex' | 'Bytes' =
417
+ | (sidecars extends BlobSidecars<Hex.Hex> ? 'Hex' : never)
418
+ | (sidecars extends BlobSidecars<Bytes.Bytes> ? 'Bytes' : never),
419
+ >(
420
+ sidecars: sidecars | BlobSidecars,
421
+ options: sidecarsToVersionedHashes.Options<as> = {},
422
+ ): sidecarsToVersionedHashes.ReturnType<as> {
423
+ const { version } = options
424
+
425
+ const as =
426
+ options.as ?? (typeof sidecars[0]!.blob === 'string' ? 'Hex' : 'Bytes')
427
+
428
+ const hashes: Uint8Array[] | Hex.Hex[] = []
429
+ for (const { commitment } of sidecars) {
430
+ hashes.push(
431
+ commitmentToVersionedHash(commitment, {
432
+ as,
433
+ version,
434
+ }) as any,
435
+ )
436
+ }
437
+ return hashes as any
438
+ }
439
+
440
+ export declare namespace sidecarsToVersionedHashes {
441
+ type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {
442
+ /** Return type. */
443
+ as?: as | 'Hex' | 'Bytes' | undefined
444
+ /** Version to tag onto the hashes. */
445
+ version?: number | undefined
446
+ }
447
+
448
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =
449
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
450
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
451
+
452
+ type ErrorType = commitmentToVersionedHash.ErrorType | Errors.GlobalErrorType
453
+ }
454
+
455
+ sidecarsToVersionedHashes.parseError = (error: unknown) =>
456
+ /* v8 ignore next */
457
+ error as sidecarsToVersionedHashes.ErrorType
458
+
459
+ /**
460
+ * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.
461
+ *
462
+ * @example
463
+ * ```ts twoslash
464
+ * import { Blobs, Hex } from 'ox'
465
+ *
466
+ * const blobs = Blobs.from('0xdeadbeef')
467
+ * const data = Blobs.to(blobs) // [!code focus]
468
+ * // @log: '0xdeadbeef'
469
+ * ```
470
+ *
471
+ * @example
472
+ * ### Configuring Return Type
473
+ *
474
+ * It is possible to configure the return type with second argument.
475
+ *
476
+ * ```ts twoslash
477
+ * import { Blobs } from 'ox'
478
+ *
479
+ * const blobs = Blobs.from('0xdeadbeef')
480
+ * const data = Blobs.to(blobs, 'Bytes')
481
+ * // @log: Uint8Array [ 13, 174, 190, 239 ]
482
+ * ```
483
+ *
484
+ * @param blobs - The {@link ox#Blobs.Blobs} to transform.
485
+ * @param to - The type to transform to.
486
+ * @returns The originating data.
487
+ */
488
+ export function to<
489
+ const blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,
490
+ to extends 'Hex' | 'Bytes' =
491
+ | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)
492
+ | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),
493
+ >(
494
+ blobs: blobs | Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,
495
+ to?: to | 'Hex' | 'Bytes' | undefined,
496
+ ): to.ReturnType<to> {
497
+ const to_ = to ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')
498
+ const blobs_ = (
499
+ typeof blobs[0] === 'string'
500
+ ? blobs.map((x) => Bytes.fromHex(x as Hex.Hex))
501
+ : blobs
502
+ ) as Bytes.Bytes[]
503
+
504
+ const length = blobs_.reduce((length, blob) => length + blob.length, 0)
505
+ const data = Cursor.create(new Uint8Array(length))
506
+ let active = true
507
+
508
+ for (const blob of blobs_) {
509
+ const cursor = Cursor.create(blob)
510
+ while (active && cursor.position < blob.length) {
511
+ // First byte will be a zero 0x00 byte – we can skip.
512
+ cursor.incrementPosition(1)
513
+
514
+ let consume = 31
515
+ if (blob.length - cursor.position < 31)
516
+ consume = blob.length - cursor.position
517
+
518
+ for (const _ in Array.from({ length: consume })) {
519
+ const byte = cursor.readByte()
520
+ const isTerminator =
521
+ byte === 0x80 && !cursor.inspectBytes(cursor.remaining).includes(0x80)
522
+ if (isTerminator) {
523
+ active = false
524
+ break
525
+ }
526
+ data.pushByte(byte)
527
+ }
528
+ }
529
+ }
530
+
531
+ const trimmedData = data.bytes.slice(0, data.position)
532
+ return (to_ === 'Hex' ? Hex.fromBytes(trimmedData) : trimmedData) as never
533
+ }
534
+
535
+ export declare namespace to {
536
+ type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex'> =
537
+ | (to extends 'Bytes' ? Bytes.Bytes : never)
538
+ | (to extends 'Hex' ? Hex.Hex : never)
539
+
540
+ type ErrorType =
541
+ | Hex.fromBytes.ErrorType
542
+ | Bytes.fromHex.ErrorType
543
+ | Cursor.create.ErrorType
544
+ | Errors.GlobalErrorType
545
+ }
546
+
547
+ /* v8 ignore next */
548
+ to.parseError = (error: unknown) => error as to.ErrorType
549
+
550
+ /**
551
+ * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.
552
+ *
553
+ * @example
554
+ * ```ts twoslash
555
+ * import { Blobs, Hex } from 'ox'
556
+ *
557
+ * const blobs = Blobs.from('0xdeadbeef')
558
+ * const data = Blobs.toHex(blobs) // [!code focus]
559
+ * // @log: '0xdeadbeef'
560
+ * ```
561
+ */
562
+ export function toHex(
563
+ blobs: Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,
564
+ ): toHex.ReturnType {
565
+ return to(blobs, 'Hex')
566
+ }
567
+
568
+ export declare namespace toHex {
569
+ type ReturnType = to.ReturnType<'Hex'>
570
+ type ErrorType = to.ErrorType | Errors.GlobalErrorType
571
+ }
572
+
573
+ /* v8 ignore next */
574
+ toHex.parseError = (error: unknown) => error as toHex.ErrorType
575
+
576
+ /**
577
+ * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.
578
+ *
579
+ * @example
580
+ * ```ts
581
+ * import { Blobs, Hex } from 'ox'
582
+ *
583
+ * const blobs = Blobs.from('0xdeadbeef')
584
+ * const data = Blobs.toBytes(blobs) // [!code focus]
585
+ * // @log: Uint8Array [ 13, 174, 190, 239 ]
586
+ * ```
587
+ */
588
+ export function toBytes(
589
+ blobs: Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,
590
+ ): toBytes.ReturnType {
591
+ return to(blobs, 'Bytes')
592
+ }
593
+
594
+ /* v8 ignore next */
595
+ toBytes.parseError = (error: unknown) => error as toBytes.ErrorType
596
+
597
+ /**
598
+ * Compute commitments from a list of {@link ox#Blobs.Blobs}.
599
+ *
600
+ * @example
601
+ * ```ts twoslash
602
+ * // @noErrors
603
+ * import { Blobs } from 'ox'
604
+ * import { kzg } from './kzg'
605
+ *
606
+ * const blobs = Blobs.from('0xdeadbeef')
607
+ * const commitments = Blobs.toCommitments(blobs, { kzg }) // [!code focus]
608
+ * ```
609
+ *
610
+ * @example
611
+ * ### Configuring Return Type
612
+ *
613
+ * It is possible to configure the return type with the `as` option.
614
+ *
615
+ * ```ts twoslash
616
+ * // @noErrors
617
+ * import { Blobs } from 'ox'
618
+ * import { kzg } from './kzg'
619
+ *
620
+ * const blobs = Blobs.from('0xdeadbeef')
621
+ * const commitments = Blobs.toCommitments(blobs, {
622
+ * as: 'Bytes', // [!code focus]
623
+ * kzg,
624
+ * })
625
+ * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]
626
+ * ```
627
+ *
628
+ * @param blobs - The {@link ox#Blobs.Blobs} to transform to commitments.
629
+ * @param options - Options.
630
+ * @returns The commitments.
631
+ */
632
+ export function toCommitments<
633
+ const blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,
634
+ as extends 'Hex' | 'Bytes' =
635
+ | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)
636
+ | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),
637
+ >(
638
+ blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,
639
+ options: toCommitments.Options<as>,
640
+ ): toCommitments.ReturnType<as> {
641
+ const { kzg } = options
642
+
643
+ const as = options.as ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')
644
+ const blobs_ = (
645
+ typeof blobs[0] === 'string'
646
+ ? blobs.map((x) => Bytes.fromHex(x as any))
647
+ : blobs
648
+ ) as Bytes.Bytes[]
649
+
650
+ const commitments: Bytes.Bytes[] = []
651
+ for (const blob of blobs_)
652
+ commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))
653
+
654
+ return (
655
+ as === 'Bytes' ? commitments : commitments.map((x) => Hex.fromBytes(x))
656
+ ) as never
657
+ }
658
+
659
+ export declare namespace toCommitments {
660
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
661
+ /** KZG implementation. */
662
+ kzg: Pick<Kzg.Kzg, 'blobToKzgCommitment'>
663
+ /** Return type. */
664
+ as?: as | 'Hex' | 'Bytes' | undefined
665
+ }
666
+
667
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = Compute<
668
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
669
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
670
+ >
671
+
672
+ type ErrorType =
673
+ | Bytes.fromHex.ErrorType
674
+ | Hex.fromBytes.ErrorType
675
+ | Errors.GlobalErrorType
676
+ }
677
+
678
+ toCommitments.parseError = (error: unknown) =>
679
+ /* v8 ignore next */
680
+ error as toCommitments.ErrorType
681
+
682
+ export declare namespace toBytes {
683
+ type ReturnType = to.ReturnType<'Bytes'>
684
+ type ErrorType = to.ErrorType | Errors.GlobalErrorType
685
+ }
686
+
687
+ /**
688
+ * Compute the proofs for a list of {@link ox#Blobs.Blobs} and their commitments.
689
+ *
690
+ * @example
691
+ * ```ts twoslash
692
+ * // @noErrors
693
+ * import { Blobs } from 'viem'
694
+ * import { kzg } from './kzg'
695
+ *
696
+ * const blobs = Blobs.from('0xdeadbeef')
697
+ * const commitments = Blobs.toCommitments(blobs, { kzg })
698
+ * const proofs = Blobs.toProofs(blobs, { commitments, kzg }) // [!code focus]
699
+ * ```
700
+ *
701
+ * @param blobs - The {@link ox#Blobs.Blobs} to compute proofs for.
702
+ * @param options - Options.
703
+ * @returns The Blob proofs.
704
+ */
705
+ export function toProofs<
706
+ const blobs extends readonly Bytes.Bytes[] | readonly Hex.Hex[],
707
+ const commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[],
708
+ as extends 'Hex' | 'Bytes' =
709
+ | (blobs extends readonly Hex.Hex[] ? 'Hex' : never)
710
+ | (blobs extends readonly Bytes.Bytes[] ? 'Bytes' : never),
711
+ >(
712
+ blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,
713
+ options: toProofs.Options<blobs, commitments, as>,
714
+ ): toProofs.ReturnType<as> {
715
+ const { kzg } = options
716
+
717
+ const as = options.as ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')
718
+
719
+ const blobs_ = (
720
+ typeof blobs[0] === 'string'
721
+ ? blobs.map((x) => Bytes.fromHex(x as any))
722
+ : blobs
723
+ ) as Bytes.Bytes[]
724
+ const commitments = (
725
+ typeof options.commitments[0] === 'string'
726
+ ? options.commitments.map((x) => Bytes.fromHex(x as any))
727
+ : options.commitments
728
+ ) as Bytes.Bytes[]
729
+
730
+ const proofs: Bytes.Bytes[] = []
731
+ for (let i = 0; i < blobs_.length; i++) {
732
+ const blob = blobs_[i]!
733
+ const commitment = commitments[i]!
734
+ proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))
735
+ }
736
+
737
+ return (
738
+ as === 'Bytes' ? proofs : proofs.map((x) => Hex.fromBytes(x))
739
+ ) as never
740
+ }
741
+
742
+ export declare namespace toProofs {
743
+ type Options<
744
+ blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex> =
745
+ | Blobs<Bytes.Bytes>
746
+ | Blobs<Hex.Hex>,
747
+ commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[] =
748
+ | readonly Bytes.Bytes[]
749
+ | readonly Hex.Hex[],
750
+ as extends 'Hex' | 'Bytes' =
751
+ | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)
752
+ | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),
753
+ > = {
754
+ /** Commitments for the blobs. */
755
+ commitments: (commitments | readonly Bytes.Bytes[] | readonly Hex.Hex[]) &
756
+ (commitments extends blobs
757
+ ? {}
758
+ : `commitments must be the same type as blobs`)
759
+ /** KZG implementation. */
760
+ kzg: Pick<Kzg.Kzg, 'computeBlobKzgProof'>
761
+ /** Return type. */
762
+ as?: as | 'Hex' | 'Bytes' | undefined
763
+ }
764
+
765
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =
766
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
767
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
768
+
769
+ type ErrorType =
770
+ | Hex.fromBytes.ErrorType
771
+ | Bytes.fromHex.ErrorType
772
+ | Errors.GlobalErrorType
773
+ }
774
+
775
+ /* v8 ignore next */
776
+ toProofs.parseError = (error: unknown) => error as toProofs.ErrorType
777
+
778
+ /**
779
+ * Transforms {@link ox#Blobs.Blobs} into a {@link ox#Blobs.BlobSidecars} array.
780
+ *
781
+ * @example
782
+ * ```ts twoslash
783
+ * // @noErrors
784
+ * import { Blobs } from 'ox'
785
+ * import { kzg } from './kzg'
786
+ *
787
+ * const blobs = Blobs.from('0xdeadbeef')
788
+ * const sidecars = Blobs.toSidecars(blobs, { kzg }) // [!code focus]
789
+ * ```
790
+ *
791
+ * @example
792
+ * You can also provide your own commitments and proofs if you do not want `toSidecars`
793
+ * to compute them.
794
+ *
795
+ * ```ts twoslash
796
+ * // @noErrors
797
+ * import { Blobs } from 'ox'
798
+ * import { kzg } from './kzg'
799
+ *
800
+ * const blobs = Blobs.from('0xdeadbeef')
801
+ * const commitments = Blobs.toCommitments(blobs, { kzg })
802
+ * const proofs = Blobs.toProofs(blobs, { commitments, kzg })
803
+ *
804
+ * const sidecars = Blobs.toSidecars(blobs, { commitments, kzg, proofs }) // [!code focus]
805
+ * ```
806
+ *
807
+ * @param blobs - The {@link ox#Blobs.Blobs} to transform into {@link ox#Blobs.BlobSidecars}.
808
+ * @param options - Options.
809
+ * @returns The {@link ox#Blobs.BlobSidecars}.
810
+ */
811
+ export function toSidecars<
812
+ const blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,
813
+ >(
814
+ blobs: blobs,
815
+ options: toSidecars.Options<blobs>,
816
+ ): toSidecars.ReturnType<blobs> {
817
+ const { kzg } = options
818
+
819
+ const commitments = options.commitments ?? toCommitments(blobs, { kzg: kzg! })
820
+ const proofs =
821
+ options.proofs ??
822
+ toProofs(blobs, { commitments: commitments as any, kzg: kzg! })
823
+
824
+ const sidecars: Mutable<BlobSidecars> = []
825
+ for (let i = 0; i < blobs.length; i++)
826
+ sidecars.push({
827
+ blob: blobs[i]!,
828
+ commitment: commitments[i]!,
829
+ proof: proofs[i]!,
830
+ })
831
+
832
+ return sidecars as never
833
+ }
834
+
835
+ export declare namespace toSidecars {
836
+ type Options<
837
+ blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes> =
838
+ | Blobs<Hex.Hex>
839
+ | Blobs<Bytes.Bytes>,
840
+ > = {
841
+ kzg?: Kzg.Kzg | undefined
842
+ } & OneOf<
843
+ | {}
844
+ | {
845
+ /** Commitment for each blob. */
846
+ commitments: blobs | readonly Hex.Hex[] | readonly Bytes.Bytes[]
847
+ /** Proof for each blob. */
848
+ proofs: blobs | readonly Hex.Hex[] | readonly Bytes.Bytes[]
849
+ }
850
+ >
851
+
852
+ type ReturnType<blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>> =
853
+ UnionCompute<
854
+ | (blobs extends Blobs<Hex.Hex> ? BlobSidecars<Hex.Hex> : never)
855
+ | (blobs extends Blobs<Bytes.Bytes> ? BlobSidecars<Bytes.Bytes> : never)
856
+ >
857
+
858
+ type ErrorType = Errors.GlobalErrorType
859
+ }
860
+
861
+ toSidecars.parseError = (error: unknown) =>
862
+ /* v8 ignore next */
863
+ error as toSidecars.ErrorType
864
+
865
+ /**
866
+ * Compute Blob Versioned Hashes from a list of {@link ox#Blobs.Blobs}.
867
+ *
868
+ * @example
869
+ * ```ts twoslash
870
+ * // @noErrors
871
+ * import { Blobs } from 'ox'
872
+ * import { kzg } from './kzg'
873
+ *
874
+ * const blobs = Blobs.from('0xdeadbeef')
875
+ * const versionedHashes = Blobs.toVersionedHashes(blobs, { kzg }) // [!code focus]
876
+ * ```
877
+ *
878
+ * @param blobs - The {@link ox#Blobs.Blobs} to transform into Blob Versioned Hashes.
879
+ * @param options - Options.
880
+ * @returns The Blob Versioned Hashes.
881
+ */
882
+ export function toVersionedHashes<
883
+ const blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,
884
+ as extends 'Hex' | 'Bytes' =
885
+ | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)
886
+ | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),
887
+ >(
888
+ blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,
889
+ options: toVersionedHashes.Options<as>,
890
+ ): toVersionedHashes.ReturnType<as> {
891
+ const commitments = toCommitments(blobs, options)
892
+ return commitmentsToVersionedHashes(commitments, options)
893
+ }
894
+
895
+ export declare namespace toVersionedHashes {
896
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
897
+ /** KZG implementation. */
898
+ kzg: Pick<Kzg.Kzg, 'blobToKzgCommitment'>
899
+ /** Return type. */
900
+ as?: as | 'Hex' | 'Bytes' | undefined
901
+ }
902
+
903
+ type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = Compute<
904
+ | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)
905
+ | (as extends 'Hex' ? readonly Hex.Hex[] : never)
906
+ >
907
+
908
+ type ErrorType =
909
+ | toCommitments.ErrorType
910
+ | commitmentsToVersionedHashes.ErrorType
911
+ | Errors.GlobalErrorType
912
+ }
913
+
914
+ toVersionedHashes.parseError = (error: unknown) =>
915
+ /* v8 ignore next */
916
+ error as toVersionedHashes.ErrorType
917
+
918
+ /** A list of {@link ox#Blobs.BlobSidecar}. */
919
+ export type BlobSidecars<
920
+ type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes,
921
+ > = readonly Compute<BlobSidecar<type>>[]
922
+
923
+ /** Thrown when the blob size is too large. */
924
+ export class BlobSizeTooLargeError extends Errors.BaseError {
925
+ override readonly name = 'Blobs.BlobSizeTooLargeError'
926
+ constructor({ maxSize, size }: { maxSize: number; size: number }) {
927
+ super('Blob size is too large.', {
928
+ metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],
929
+ })
930
+ }
931
+ }
932
+
933
+ /** Thrown when the blob is empty. */
934
+ export class EmptyBlobError extends Errors.BaseError {
935
+ override readonly name = 'Blobs.EmptyBlobError'
936
+ constructor() {
937
+ super('Blob data must not be empty.')
938
+ }
939
+ }
940
+
941
+ /** Thrown when the blob versioned hashes are empty. */
942
+ export class EmptyBlobVersionedHashesError extends Errors.BaseError {
943
+ override readonly name = 'Blobs.EmptyBlobVersionedHashesError'
944
+ constructor() {
945
+ super('Blob versioned hashes must not be empty.')
946
+ }
947
+ }
948
+
949
+ /** Thrown when the blob versioned hash size is invalid. */
950
+ export class InvalidVersionedHashSizeError extends Errors.BaseError {
951
+ override readonly name = 'Blobs.InvalidVersionedHashSizeError'
952
+ constructor({
953
+ hash,
954
+ size,
955
+ }: {
956
+ hash: Hex.Hex
957
+ size: number
958
+ }) {
959
+ super(`Versioned hash "${hash}" size is invalid.`, {
960
+ metaMessages: ['Expected: 32', `Received: ${size}`],
961
+ })
962
+ }
963
+ }
964
+
965
+ /** Thrown when the blob versioned hash version is invalid. */
966
+ export class InvalidVersionedHashVersionError extends Errors.BaseError {
967
+ override readonly name = 'Blobs.InvalidVersionedHashVersionError'
968
+ constructor({
969
+ hash,
970
+ version,
971
+ }: {
972
+ hash: Hex.Hex
973
+ version: number
974
+ }) {
975
+ super(`Versioned hash "${hash}" version is invalid.`, {
976
+ metaMessages: [
977
+ `Expected: ${Kzg.versionedHashVersion}`,
978
+ `Received: ${version}`,
979
+ ],
980
+ })
981
+ }
982
+ }