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/TypedData.ts ADDED
@@ -0,0 +1,931 @@
1
+ import type * as abitype from 'abitype'
2
+ import * as AbiParameters from './AbiParameters.js'
3
+ import * as Address from './Address.js'
4
+ import * as Bytes from './Bytes.js'
5
+ import * as Errors from './Errors.js'
6
+ import * as Hash from './Hash.js'
7
+ import * as Hex from './Hex.js'
8
+ import * as Json from './Json.js'
9
+ import * as Solidity from './Solidity.js'
10
+ import type { Compute } from './internal/types.js'
11
+
12
+ export type TypedData = abitype.TypedData
13
+ export type Domain = abitype.TypedDataDomain
14
+ export type Parameter = abitype.TypedDataParameter
15
+
16
+ // TODO: Make reusable for Viem?
17
+ export type Definition<
18
+ typedData extends TypedData | Record<string, unknown> = TypedData,
19
+ primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,
20
+ ///
21
+ primaryTypes = typedData extends TypedData ? keyof typedData : string,
22
+ > = primaryType extends 'EIP712Domain'
23
+ ? EIP712DomainDefinition<typedData, primaryType>
24
+ : MessageDefinition<typedData, primaryType, primaryTypes>
25
+
26
+ export type EIP712DomainDefinition<
27
+ typedData extends TypedData | Record<string, unknown> = TypedData,
28
+ primaryType extends 'EIP712Domain' = 'EIP712Domain',
29
+ ///
30
+ schema extends Record<string, unknown> = typedData extends TypedData
31
+ ? abitype.TypedDataToPrimitiveTypes<typedData>
32
+ : Record<string, unknown>,
33
+ > = {
34
+ types?: typedData | undefined
35
+ } & {
36
+ primaryType:
37
+ | 'EIP712Domain'
38
+ | (primaryType extends 'EIP712Domain' ? primaryType : never)
39
+ domain: schema extends { EIP712Domain: infer domain }
40
+ ? domain
41
+ : Compute<Domain>
42
+ message?: undefined
43
+ }
44
+
45
+ export type MessageDefinition<
46
+ typedData extends TypedData | Record<string, unknown> = TypedData,
47
+ primaryType extends keyof typedData = keyof typedData,
48
+ ///
49
+ primaryTypes = typedData extends TypedData ? keyof typedData : string,
50
+ schema extends Record<string, unknown> = typedData extends TypedData
51
+ ? abitype.TypedDataToPrimitiveTypes<typedData>
52
+ : Record<string, unknown>,
53
+ message = schema[primaryType extends keyof schema
54
+ ? primaryType
55
+ : keyof schema],
56
+ > = {
57
+ types: typedData
58
+ } & {
59
+ primaryType:
60
+ | primaryTypes // show all values
61
+ | (primaryType extends primaryTypes ? primaryType : never) // infer value
62
+ domain?:
63
+ | (schema extends { EIP712Domain: infer domain } ? domain : Compute<Domain>)
64
+ | undefined
65
+ message: { [_: string]: any } extends message // Check if message was inferred
66
+ ? Record<string, unknown>
67
+ : message
68
+ }
69
+
70
+ /**
71
+ * Asserts that [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.
72
+ *
73
+ * @example
74
+ * ```ts twoslash
75
+ * import { TypedData } from 'ox'
76
+ *
77
+ * TypedData.assert({
78
+ * domain: {
79
+ * name: 'Ether!',
80
+ * version: '1',
81
+ * chainId: 1,
82
+ * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
83
+ * },
84
+ * primaryType: 'Foo',
85
+ * types: {
86
+ * Foo: [
87
+ * { name: 'address', type: 'address' },
88
+ * { name: 'name', type: 'string' },
89
+ * { name: 'foo', type: 'string' },
90
+ * ],
91
+ * },
92
+ * message: {
93
+ * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
94
+ * name: 'jxom',
95
+ * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
96
+ * },
97
+ * })
98
+ * ```
99
+ *
100
+ * @param value - The Typed Data to validate.
101
+ */
102
+ export function assert<
103
+ const typedData extends TypedData | Record<string, unknown>,
104
+ primaryType extends keyof typedData | 'EIP712Domain',
105
+ >(value: assert.Value<typedData, primaryType>): void {
106
+ const { domain, message, primaryType, types } =
107
+ value as unknown as assert.Value
108
+
109
+ const validateData = (
110
+ struct: readonly Parameter[],
111
+ data: Record<string, unknown>,
112
+ ) => {
113
+ for (const param of struct) {
114
+ const { name, type } = param
115
+ const value = data[name]
116
+
117
+ const integerMatch = type.match(Solidity.integerRegex)
118
+ if (
119
+ integerMatch &&
120
+ (typeof value === 'number' || typeof value === 'bigint')
121
+ ) {
122
+ const [, base, size_] = integerMatch
123
+ // If number cannot be cast to a sized hex value, it is out of range
124
+ // and will throw.
125
+ Hex.fromNumber(value, {
126
+ signed: base === 'int',
127
+ size: Number.parseInt(size_ ?? '') / 8,
128
+ })
129
+ }
130
+
131
+ if (
132
+ type === 'address' &&
133
+ typeof value === 'string' &&
134
+ !Address.validate(value)
135
+ )
136
+ throw new Address.InvalidAddressError({
137
+ address: value,
138
+ cause: new Address.InvalidInputError(),
139
+ })
140
+
141
+ const bytesMatch = type.match(Solidity.bytesRegex)
142
+ if (bytesMatch) {
143
+ const [, size] = bytesMatch
144
+ if (size && Hex.size(value as Hex.Hex) !== Number.parseInt(size))
145
+ throw new BytesSizeMismatchError({
146
+ expectedSize: Number.parseInt(size),
147
+ givenSize: Hex.size(value as Hex.Hex),
148
+ })
149
+ }
150
+
151
+ const struct = types[type]
152
+ if (struct) {
153
+ validateReference(type)
154
+ validateData(struct, value as Record<string, unknown>)
155
+ }
156
+ }
157
+ }
158
+
159
+ // Validate domain types.
160
+ if (types.EIP712Domain && domain) validateData(types.EIP712Domain, domain)
161
+
162
+ // Validate message types.
163
+ if (primaryType !== 'EIP712Domain') {
164
+ if (types[primaryType]) validateData(types[primaryType], message)
165
+ else throw new InvalidPrimaryTypeError({ primaryType, types })
166
+ }
167
+ }
168
+
169
+ export declare namespace assert {
170
+ type Value<
171
+ typedData extends TypedData | Record<string, unknown> = TypedData,
172
+ primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,
173
+ > = Definition<typedData, primaryType>
174
+
175
+ type ErrorType =
176
+ | Address.InvalidAddressError
177
+ | BytesSizeMismatchError
178
+ | InvalidPrimaryTypeError
179
+ | Hex.fromNumber.ErrorType
180
+ | Hex.size.ErrorType
181
+ | Errors.GlobalErrorType
182
+ }
183
+
184
+ assert.parseError = (error: unknown) =>
185
+ /* v8 ignore next */
186
+ error as assert.ErrorType
187
+
188
+ /**
189
+ * Creates [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) [`domainSeparator`](https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator) for the provided domain.
190
+ *
191
+ * @example
192
+ * ```ts twoslash
193
+ * import { TypedData } from 'ox'
194
+ *
195
+ * TypedData.domainSeparator({
196
+ * name: 'Ether!',
197
+ * version: '1',
198
+ * chainId: 1,
199
+ * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
200
+ * })
201
+ * // @log: '0x9911ee4f58a7059a8f5385248040e6984d80e2c849500fe6a4d11c4fa98c2af3'
202
+ * ```
203
+ *
204
+ * @param domain - The domain for which to create the domain separator.
205
+ * @returns The domain separator.
206
+ */
207
+ export function domainSeparator(domain: Domain): Hex.Hex {
208
+ return hashDomain({
209
+ domain,
210
+ })
211
+ }
212
+
213
+ export declare namespace domainSeparator {
214
+ type ErrorType = hashDomain.ErrorType | Errors.GlobalErrorType
215
+ }
216
+
217
+ domainSeparator.parseError = (error: unknown) =>
218
+ /* v8 ignore next */
219
+ error as domainSeparator.ErrorType
220
+
221
+ /**
222
+ * Encodes typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712): `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`.
223
+ *
224
+ * @example
225
+ * ```ts twoslash
226
+ * import { TypedData, Hash } from 'ox'
227
+ *
228
+ * const data = TypedData.encode({ // [!code focus:33]
229
+ * domain: {
230
+ * name: 'Ether Mail',
231
+ * version: '1',
232
+ * chainId: 1,
233
+ * verifyingContract: '0x0000000000000000000000000000000000000000',
234
+ * },
235
+ * types: {
236
+ * Person: [
237
+ * { name: 'name', type: 'string' },
238
+ * { name: 'wallet', type: 'address' },
239
+ * ],
240
+ * Mail: [
241
+ * { name: 'from', type: 'Person' },
242
+ * { name: 'to', type: 'Person' },
243
+ * { name: 'contents', type: 'string' },
244
+ * ],
245
+ * },
246
+ * primaryType: 'Mail',
247
+ * message: {
248
+ * from: {
249
+ * name: 'Cow',
250
+ * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
251
+ * },
252
+ * to: {
253
+ * name: 'Bob',
254
+ * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
255
+ * },
256
+ * contents: 'Hello, Bob!',
257
+ * },
258
+ * })
259
+ * // @log: '0x19012fdf3441fcaf4f30c7e16292b258a5d7054a4e2e00dbd7b7d2f467f2b8fb9413c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e'
260
+ * // @log: (0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message))
261
+ *
262
+ * const hash = Hash.keccak256(data)
263
+ * ```
264
+ *
265
+ * @param value - The Typed Data to encode.
266
+ * @returns The encoded Typed Data.
267
+ */
268
+ export function encode<
269
+ const typedData extends TypedData | Record<string, unknown>,
270
+ primaryType extends keyof typedData | 'EIP712Domain',
271
+ >(value: encode.Value<typedData, primaryType>): Hex.Hex {
272
+ const { domain = {}, message, primaryType } = value as encode.Value
273
+
274
+ const types = {
275
+ EIP712Domain: extractEip712DomainTypes(domain),
276
+ ...value.types,
277
+ } as TypedData
278
+
279
+ // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc
280
+ // as we can't statically check this with TypeScript.
281
+ assert({
282
+ domain,
283
+ message,
284
+ primaryType,
285
+ types,
286
+ })
287
+
288
+ // Typed Data Format: `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`
289
+ const parts: Hex.Hex[] = ['0x19', '0x01']
290
+ if (domain)
291
+ parts.push(
292
+ hashDomain({
293
+ domain,
294
+ types,
295
+ }),
296
+ )
297
+ if (primaryType !== 'EIP712Domain')
298
+ parts.push(
299
+ hashStruct({
300
+ data: message,
301
+ primaryType,
302
+ types,
303
+ }),
304
+ )
305
+
306
+ return Hex.concat(...parts)
307
+ }
308
+
309
+ export declare namespace encode {
310
+ type Value<
311
+ typedData extends TypedData | Record<string, unknown> = TypedData,
312
+ primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,
313
+ > = Definition<typedData, primaryType>
314
+
315
+ type ErrorType =
316
+ | extractEip712DomainTypes.ErrorType
317
+ | hashDomain.ErrorType
318
+ | hashStruct.ErrorType
319
+ | assert.ErrorType
320
+ | Errors.GlobalErrorType
321
+ }
322
+
323
+ /* v8 ignore next */
324
+ encode.parseError = (error: unknown) => error as encode.ErrorType
325
+
326
+ /**
327
+ * Encodes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for the provided primaryType.
328
+ *
329
+ * @example
330
+ * ```ts twoslash
331
+ * import { TypedData } from 'ox'
332
+ *
333
+ * TypedData.encodeType({
334
+ * types: {
335
+ * Foo: [
336
+ * { name: 'address', type: 'address' },
337
+ * { name: 'name', type: 'string' },
338
+ * { name: 'foo', type: 'string' },
339
+ * ],
340
+ * },
341
+ * primaryType: 'Foo',
342
+ * })
343
+ * // @log: 'Foo(address address,string name,string foo)'
344
+ * ```
345
+ *
346
+ * @param value - The Typed Data schema.
347
+ * @returns The encoded type.
348
+ */
349
+ export function encodeType(value: encodeType.Value): string {
350
+ const { primaryType, types } = value
351
+
352
+ let result = ''
353
+ const unsortedDeps = findTypeDependencies({ primaryType, types })
354
+ unsortedDeps.delete(primaryType)
355
+
356
+ const deps = [primaryType, ...Array.from(unsortedDeps).sort()]
357
+ for (const type of deps) {
358
+ result += `${type}(${(types[type] ?? [])
359
+ .map(({ name, type: t }) => `${t} ${name}`)
360
+ .join(',')})`
361
+ }
362
+
363
+ return result
364
+ }
365
+
366
+ export declare namespace encodeType {
367
+ type Value = {
368
+ primaryType: string
369
+ types: TypedData
370
+ }
371
+
372
+ type ErrorType = findTypeDependencies.ErrorType | Errors.GlobalErrorType
373
+ }
374
+
375
+ /* v8 ignore next */
376
+ encodeType.parseError = (error: unknown) => error as encodeType.ErrorType
377
+
378
+ /**
379
+ * Gets [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for EIP-721 domain.
380
+ *
381
+ * @example
382
+ * ```ts twoslash
383
+ * import { TypedData } from 'ox'
384
+ *
385
+ * TypedData.extractEip712DomainTypes({
386
+ * name: 'Ether!',
387
+ * version: '1',
388
+ * chainId: 1,
389
+ * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
390
+ * })
391
+ * // @log: [
392
+ * // @log: { 'name': 'name', 'type': 'string' },
393
+ * // @log: { 'name': 'version', 'type': 'string' },
394
+ * // @log: { 'name': 'chainId', 'type': 'uint256' },
395
+ * // @log: { 'name': 'verifyingContract', 'type': 'address' },
396
+ * // @log: ]
397
+ * ```
398
+ *
399
+ * @param domain - The EIP-712 domain.
400
+ * @returns The EIP-712 domain schema.
401
+ */
402
+ export function extractEip712DomainTypes(
403
+ domain: Domain | undefined,
404
+ ): Parameter[] {
405
+ return [
406
+ typeof domain?.name === 'string' && { name: 'name', type: 'string' },
407
+ domain?.version && { name: 'version', type: 'string' },
408
+ typeof domain?.chainId === 'number' && {
409
+ name: 'chainId',
410
+ type: 'uint256',
411
+ },
412
+ domain?.verifyingContract && {
413
+ name: 'verifyingContract',
414
+ type: 'address',
415
+ },
416
+ domain?.salt && { name: 'salt', type: 'bytes32' },
417
+ ].filter(Boolean) as Parameter[]
418
+ }
419
+
420
+ export declare namespace extractEip712DomainTypes {
421
+ type ErrorType = Errors.GlobalErrorType
422
+ }
423
+
424
+ extractEip712DomainTypes.parseError = (error: unknown) =>
425
+ /* v8 ignore next */
426
+ error as extractEip712DomainTypes.ErrorType
427
+
428
+ /**
429
+ * Gets the payload to use for signing typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712).
430
+ *
431
+ * @example
432
+ * ```ts twoslash
433
+ * import { Secp256k1, TypedData, Hash } from 'ox'
434
+ *
435
+ * const payload = TypedData.getSignPayload({ // [!code focus:99]
436
+ * domain: {
437
+ * name: 'Ether Mail',
438
+ * version: '1',
439
+ * chainId: 1,
440
+ * verifyingContract: '0x0000000000000000000000000000000000000000',
441
+ * },
442
+ * types: {
443
+ * Person: [
444
+ * { name: 'name', type: 'string' },
445
+ * { name: 'wallet', type: 'address' },
446
+ * ],
447
+ * Mail: [
448
+ * { name: 'from', type: 'Person' },
449
+ * { name: 'to', type: 'Person' },
450
+ * { name: 'contents', type: 'string' },
451
+ * ],
452
+ * },
453
+ * primaryType: 'Mail',
454
+ * message: {
455
+ * from: {
456
+ * name: 'Cow',
457
+ * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
458
+ * },
459
+ * to: {
460
+ * name: 'Bob',
461
+ * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
462
+ * },
463
+ * contents: 'Hello, Bob!',
464
+ * },
465
+ * })
466
+ *
467
+ * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })
468
+ * ```
469
+ *
470
+ * @param value - The typed data to get the sign payload for.
471
+ * @returns The payload to use for signing.
472
+ */
473
+ export function getSignPayload<
474
+ const typedData extends TypedData | Record<string, unknown>,
475
+ primaryType extends keyof typedData | 'EIP712Domain',
476
+ >(value: encode.Value<typedData, primaryType>): Hex.Hex {
477
+ return Hash.keccak256(encode(value))
478
+ }
479
+
480
+ export declare namespace getSignPayload {
481
+ type ErrorType =
482
+ | Hash.keccak256.ErrorType
483
+ | encode.ErrorType
484
+ | Errors.GlobalErrorType
485
+ }
486
+
487
+ getSignPayload.parseError = (error: unknown) =>
488
+ /* v8 ignore next */
489
+ error as getSignPayload.ErrorType
490
+
491
+ /**
492
+ * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) domain.
493
+ *
494
+ * @example
495
+ * ```ts twoslash
496
+ * import { TypedData } from 'ox'
497
+ *
498
+ * TypedData.hashDomain({
499
+ * domain: {
500
+ * name: 'Ether Mail',
501
+ * version: '1',
502
+ * chainId: 1,
503
+ * verifyingContract: '0x0000000000000000000000000000000000000000',
504
+ * },
505
+ * })
506
+ * // @log: '0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1'
507
+ * ```
508
+ *
509
+ * @param value - The Typed Data domain and types.
510
+ * @returns The hashed domain.
511
+ */
512
+ export function hashDomain(value: hashDomain.Value): Hex.Hex {
513
+ const { domain, types } = value
514
+ return hashStruct({
515
+ data: domain,
516
+ primaryType: 'EIP712Domain',
517
+ types: {
518
+ ...types,
519
+ EIP712Domain: types?.EIP712Domain || extractEip712DomainTypes(domain),
520
+ },
521
+ })
522
+ }
523
+
524
+ export declare namespace hashDomain {
525
+ type Value = {
526
+ /** The Typed Data domain. */
527
+ domain: Domain
528
+ /** The Typed Data types. */
529
+ types?:
530
+ | {
531
+ EIP712Domain?: readonly Parameter[] | undefined
532
+ [key: string]: readonly Parameter[] | undefined
533
+ }
534
+ | undefined
535
+ }
536
+
537
+ type ErrorType = hashStruct.ErrorType | Errors.GlobalErrorType
538
+ }
539
+
540
+ /* v8 ignore next */
541
+ hashDomain.parseError = (error: unknown) => error as hashDomain.ErrorType
542
+
543
+ /**
544
+ * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) struct.
545
+ *
546
+ * @example
547
+ * ```ts twoslash
548
+ * import { TypedData } from 'ox'
549
+ *
550
+ * TypedData.hashStruct({
551
+ * types: {
552
+ * Foo: [
553
+ * { name: 'address', type: 'address' },
554
+ * { name: 'name', type: 'string' },
555
+ * { name: 'foo', type: 'string' },
556
+ * ],
557
+ * },
558
+ * primaryType: 'Foo',
559
+ * data: {
560
+ * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
561
+ * name: 'jxom',
562
+ * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
563
+ * },
564
+ * })
565
+ * // @log: '0x996fb3b6d48c50312d69abdd4c1b6fb02057c85aa86bb8d04c6f023326a168ce'
566
+ * ```
567
+ *
568
+ * @param value - The Typed Data struct to hash.
569
+ * @returns The hashed Typed Data struct.
570
+ */
571
+ export function hashStruct(value: hashStruct.Value): Hex.Hex {
572
+ const { data, primaryType, types } = value
573
+ const encoded = encodeData({
574
+ data,
575
+ primaryType,
576
+ types,
577
+ })
578
+ return Hash.keccak256(encoded)
579
+ }
580
+
581
+ export declare namespace hashStruct {
582
+ type Value = {
583
+ /** The Typed Data struct to hash. */
584
+ data: Record<string, unknown>
585
+ /** The primary type of the Typed Data struct. */
586
+ primaryType: string
587
+ /** The types of the Typed Data struct. */
588
+ types: TypedData
589
+ }
590
+
591
+ type ErrorType =
592
+ | encodeData.ErrorType
593
+ | Hash.keccak256.ErrorType
594
+ | Errors.GlobalErrorType
595
+ }
596
+
597
+ /* v8 ignore next */
598
+ hashStruct.parseError = (error: unknown) => error as hashStruct.ErrorType
599
+
600
+ /**
601
+ * Serializes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema into string.
602
+ *
603
+ * @example
604
+ * ```ts twoslash
605
+ * import { TypedData } from 'ox'
606
+ *
607
+ * TypedData.serialize({
608
+ * domain: {
609
+ * name: 'Ether!',
610
+ * version: '1',
611
+ * chainId: 1,
612
+ * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
613
+ * },
614
+ * primaryType: 'Foo',
615
+ * types: {
616
+ * Foo: [
617
+ * { name: 'address', type: 'address' },
618
+ * { name: 'name', type: 'string' },
619
+ * { name: 'foo', type: 'string' },
620
+ * ],
621
+ * },
622
+ * message: {
623
+ * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
624
+ * name: 'jxom',
625
+ * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
626
+ * },
627
+ * })
628
+ * // @log: "{"domain":{},"message":{"address":"0xb9cab4f0e46f7f6b1024b5a7463734fa68e633f9","name":"jxom","foo":"0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9"},"primaryType":"Foo","types":{"Foo":[{"name":"address","type":"address"},{"name":"name","type":"string"},{"name":"foo","type":"string"}]}}"
629
+ * ```
630
+ *
631
+ * @param value - The Typed Data schema to serialize.
632
+ * @returns The serialized Typed Data schema. w
633
+ */
634
+ export function serialize<
635
+ const typedData extends TypedData | Record<string, unknown>,
636
+ primaryType extends keyof typedData | 'EIP712Domain',
637
+ >(value: serialize.Value<typedData, primaryType>): string {
638
+ const {
639
+ domain: domain_,
640
+ message: message_,
641
+ primaryType,
642
+ types,
643
+ } = value as unknown as serialize.Value
644
+
645
+ const normalizeData = (
646
+ struct: readonly Parameter[],
647
+ value: Record<string, unknown>,
648
+ ) => {
649
+ const data = { ...value }
650
+ for (const param of struct) {
651
+ const { name, type } = param
652
+ if (type === 'address') data[name] = (data[name] as string).toLowerCase()
653
+ }
654
+ return data
655
+ }
656
+
657
+ const domain = (() => {
658
+ if (!types.EIP712Domain) return {}
659
+ if (!domain_) return {}
660
+ return normalizeData(types.EIP712Domain, domain_)
661
+ })()
662
+
663
+ const message = (() => {
664
+ if (primaryType === 'EIP712Domain') return undefined
665
+ if (!types[primaryType]) return {}
666
+ return normalizeData(types[primaryType], message_)
667
+ })()
668
+
669
+ return Json.stringify({ domain, message, primaryType, types }, (_, value) => {
670
+ if (typeof value === 'bigint') return value.toString()
671
+ return value
672
+ })
673
+ }
674
+
675
+ export declare namespace serialize {
676
+ type Value<
677
+ typedData extends TypedData | Record<string, unknown> = TypedData,
678
+ primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,
679
+ > = Definition<typedData, primaryType>
680
+
681
+ type ErrorType = Json.stringify.ErrorType | Errors.GlobalErrorType
682
+ }
683
+
684
+ serialize.parseError = (error: unknown) =>
685
+ /* v8 ignore next */
686
+ error as serialize.ErrorType
687
+
688
+ /**
689
+ * Checks if [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.
690
+ *
691
+ * @example
692
+ * ```ts twoslash
693
+ * import { TypedData } from 'ox'
694
+ *
695
+ * const valid = TypedData.validate({
696
+ * domain: {
697
+ * name: 'Ether!',
698
+ * version: '1',
699
+ * chainId: 1,
700
+ * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
701
+ * },
702
+ * primaryType: 'Foo',
703
+ * types: {
704
+ * Foo: [
705
+ * { name: 'address', type: 'address' },
706
+ * { name: 'name', type: 'string' },
707
+ * { name: 'foo', type: 'string' },
708
+ * ],
709
+ * },
710
+ * message: {
711
+ * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
712
+ * name: 'jxom',
713
+ * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',
714
+ * },
715
+ * })
716
+ * // @log: true
717
+ * ```
718
+ *
719
+ * @param value - The Typed Data to validate.
720
+ */
721
+ export function validate<
722
+ const typedData extends TypedData | Record<string, unknown>,
723
+ primaryType extends keyof typedData | 'EIP712Domain',
724
+ >(value: assert.Value<typedData, primaryType>): boolean {
725
+ try {
726
+ assert(value)
727
+ return true
728
+ } catch {
729
+ return false
730
+ }
731
+ }
732
+
733
+ export declare namespace validate {
734
+ type ErrorType = assert.ErrorType | Errors.GlobalErrorType
735
+ }
736
+
737
+ /* v8 ignore next */
738
+ validate.parseError = (error: unknown) => error as validate.ErrorType
739
+
740
+ /** Thrown when the bytes size of a typed data value does not match the expected size. */
741
+ export class BytesSizeMismatchError extends Errors.BaseError {
742
+ override readonly name = 'TypedData.BytesSizeMismatchError'
743
+
744
+ constructor({
745
+ expectedSize,
746
+ givenSize,
747
+ }: { expectedSize: number; givenSize: number }) {
748
+ super(`Expected bytes${expectedSize}, got bytes${givenSize}.`)
749
+ }
750
+ }
751
+
752
+ /** Thrown when the primary type of a typed data value is invalid. */
753
+ export class InvalidPrimaryTypeError extends Errors.BaseError {
754
+ override readonly name = 'TypedData.InvalidPrimaryTypeError'
755
+
756
+ constructor({
757
+ primaryType,
758
+ types,
759
+ }: { primaryType: string; types: TypedData | Record<string, unknown> }) {
760
+ super(
761
+ `Invalid primary type \`${primaryType}\` must be one of \`${JSON.stringify(Object.keys(types))}\`.`,
762
+ {
763
+ metaMessages: ['Check that the primary type is a key in `types`.'],
764
+ },
765
+ )
766
+ }
767
+ }
768
+
769
+ /** Thrown when the struct type is not a valid type. */
770
+ export class InvalidStructTypeError extends Errors.BaseError {
771
+ override readonly name = 'TypedData.InvalidStructTypeError'
772
+
773
+ constructor({ type }: { type: string }) {
774
+ super(`Struct type "${type}" is invalid.`, {
775
+ metaMessages: ['Struct type must not be a Solidity type.'],
776
+ })
777
+ }
778
+ }
779
+
780
+ /** @internal */
781
+ export function encodeData(value: {
782
+ data: Record<string, unknown>
783
+ primaryType: string
784
+ types: TypedData
785
+ }): Hex.Hex {
786
+ const { data, primaryType, types } = value
787
+ const encodedTypes: AbiParameters.Parameter[] = [{ type: 'bytes32' }]
788
+ const encodedValues: unknown[] = [hashType({ primaryType, types })]
789
+
790
+ for (const field of types[primaryType] ?? []) {
791
+ const [type, value] = encodeField({
792
+ types,
793
+ name: field.name,
794
+ type: field.type,
795
+ value: data[field.name],
796
+ })
797
+ encodedTypes.push(type)
798
+ encodedValues.push(value)
799
+ }
800
+
801
+ return AbiParameters.encode(encodedTypes, encodedValues)
802
+ }
803
+
804
+ /** @internal */
805
+ export declare namespace encodeData {
806
+ type ErrorType =
807
+ | AbiParameters.encode.ErrorType
808
+ | encodeField.ErrorType
809
+ | hashType.ErrorType
810
+ | Errors.GlobalErrorType
811
+ }
812
+
813
+ /** @internal */
814
+ export function hashType(value: {
815
+ primaryType: string
816
+ types: TypedData
817
+ }): Hex.Hex {
818
+ const { primaryType, types } = value
819
+ const encodedHashType = Hex.fromString(encodeType({ primaryType, types }))
820
+ return Hash.keccak256(encodedHashType)
821
+ }
822
+
823
+ /** @internal */
824
+ export declare namespace hashType {
825
+ type ErrorType =
826
+ | Hex.fromString.ErrorType
827
+ | encodeType.ErrorType
828
+ | Hash.keccak256.ErrorType
829
+ | Errors.GlobalErrorType
830
+ }
831
+
832
+ /** @internal */
833
+ export function encodeField(properties: {
834
+ types: TypedData
835
+ name: string
836
+ type: string
837
+ value: any
838
+ }): [type: AbiParameters.Parameter, value: Hex.Hex] {
839
+ let { types, name, type, value } = properties
840
+
841
+ if (types[type] !== undefined)
842
+ return [
843
+ { type: 'bytes32' },
844
+ Hash.keccak256(encodeData({ data: value, primaryType: type, types })),
845
+ ]
846
+
847
+ if (type === 'bytes') {
848
+ const prepend = value.length % 2 ? '0' : ''
849
+ value = `0x${prepend + value.slice(2)}`
850
+ return [{ type: 'bytes32' }, Hash.keccak256(value, { as: 'Hex' })]
851
+ }
852
+
853
+ if (type === 'string')
854
+ return [
855
+ { type: 'bytes32' },
856
+ Hash.keccak256(Bytes.fromString(value), { as: 'Hex' }),
857
+ ]
858
+
859
+ if (type.lastIndexOf(']') === type.length - 1) {
860
+ const parsedType = type.slice(0, type.lastIndexOf('['))
861
+ const typeValuePairs = (value as [AbiParameters.Parameter, any][]).map(
862
+ (item) =>
863
+ encodeField({
864
+ name,
865
+ type: parsedType,
866
+ types,
867
+ value: item,
868
+ }),
869
+ )
870
+ return [
871
+ { type: 'bytes32' },
872
+ Hash.keccak256(
873
+ AbiParameters.encode(
874
+ typeValuePairs.map(([t]) => t),
875
+ typeValuePairs.map(([, v]) => v),
876
+ ),
877
+ ),
878
+ ]
879
+ }
880
+
881
+ return [{ type }, value]
882
+ }
883
+
884
+ /** @internal */
885
+ export declare namespace encodeField {
886
+ type ErrorType =
887
+ | AbiParameters.encode.ErrorType
888
+ | Hash.keccak256.ErrorType
889
+ | Bytes.fromString.ErrorType
890
+ | Errors.GlobalErrorType
891
+ }
892
+
893
+ /** @internal */
894
+ export function findTypeDependencies(
895
+ value: {
896
+ primaryType: string
897
+ types: TypedData
898
+ },
899
+ results: Set<string> = new Set(),
900
+ ): Set<string> {
901
+ const { primaryType: primaryType_, types } = value
902
+ const match = primaryType_.match(/^\w*/u)
903
+ const primaryType = match?.[0]!
904
+ if (results.has(primaryType) || types[primaryType] === undefined)
905
+ return results
906
+
907
+ results.add(primaryType)
908
+
909
+ for (const field of types[primaryType])
910
+ findTypeDependencies({ primaryType: field.type, types }, results)
911
+ return results
912
+ }
913
+
914
+ /** @internal */
915
+ export declare namespace findTypeDependencies {
916
+ type ErrorType = Errors.GlobalErrorType
917
+ }
918
+
919
+ /** @internal */
920
+ function validateReference(type: string) {
921
+ // Struct type must not be a Solidity type.
922
+ if (
923
+ type === 'address' ||
924
+ type === 'bool' ||
925
+ type === 'string' ||
926
+ type.startsWith('bytes') ||
927
+ type.startsWith('uint') ||
928
+ type.startsWith('int')
929
+ )
930
+ throw new InvalidStructTypeError({ type })
931
+ }