ox 1.7.4 → 1.8.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 (237) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/core/AbiEvent.d.ts.map +1 -1
  3. package/dist/core/AbiEvent.js +10 -9
  4. package/dist/core/AbiEvent.js.map +1 -1
  5. package/dist/core/Blobs.d.ts.map +1 -1
  6. package/dist/core/Blobs.js +6 -2
  7. package/dist/core/Blobs.js.map +1 -1
  8. package/dist/core/Frame.d.ts +290 -0
  9. package/dist/core/Frame.d.ts.map +1 -0
  10. package/dist/core/Frame.js +306 -0
  11. package/dist/core/Frame.js.map +1 -0
  12. package/dist/core/FrameReceipt.d.ts +92 -0
  13. package/dist/core/FrameReceipt.d.ts.map +1 -0
  14. package/dist/core/FrameReceipt.js +72 -0
  15. package/dist/core/FrameReceipt.js.map +1 -0
  16. package/dist/core/FrameSignature.d.ts +357 -0
  17. package/dist/core/FrameSignature.d.ts.map +1 -0
  18. package/dist/core/FrameSignature.js +411 -0
  19. package/dist/core/FrameSignature.js.map +1 -0
  20. package/dist/core/Signature.d.ts +6 -5
  21. package/dist/core/Signature.d.ts.map +1 -1
  22. package/dist/core/Signature.js +17 -7
  23. package/dist/core/Signature.js.map +1 -1
  24. package/dist/core/Siwe.d.ts.map +1 -1
  25. package/dist/core/Siwe.js +21 -1
  26. package/dist/core/Siwe.js.map +1 -1
  27. package/dist/core/Transaction.d.ts +29 -4
  28. package/dist/core/Transaction.d.ts.map +1 -1
  29. package/dist/core/Transaction.js +25 -4
  30. package/dist/core/Transaction.js.map +1 -1
  31. package/dist/core/TransactionReceipt.d.ts +13 -4
  32. package/dist/core/TransactionReceipt.d.ts.map +1 -1
  33. package/dist/core/TransactionReceipt.js +14 -0
  34. package/dist/core/TransactionReceipt.js.map +1 -1
  35. package/dist/core/TransactionRequest.d.ts +15 -7
  36. package/dist/core/TransactionRequest.d.ts.map +1 -1
  37. package/dist/core/TransactionRequest.js +47 -1
  38. package/dist/core/TransactionRequest.js.map +1 -1
  39. package/dist/core/TxEnvelope.d.ts +35 -21
  40. package/dist/core/TxEnvelope.d.ts.map +1 -1
  41. package/dist/core/TxEnvelope.js +46 -6
  42. package/dist/core/TxEnvelope.js.map +1 -1
  43. package/dist/core/TxEnvelopeEip8141.d.ts +341 -0
  44. package/dist/core/TxEnvelopeEip8141.d.ts.map +1 -0
  45. package/dist/core/TxEnvelopeEip8141.js +485 -0
  46. package/dist/core/TxEnvelopeEip8141.js.map +1 -0
  47. package/dist/core/internal/curves.d.ts +2 -0
  48. package/dist/core/internal/curves.d.ts.map +1 -1
  49. package/dist/core/internal/curves.js +2 -0
  50. package/dist/core/internal/curves.js.map +1 -1
  51. package/dist/index.d.ts +73 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +73 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/tempo/KeyAuthorization.d.ts +42 -38
  56. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  57. package/dist/tempo/KeyAuthorization.js +24 -4
  58. package/dist/tempo/KeyAuthorization.js.map +1 -1
  59. package/dist/tempo/MultisigConfig.d.ts +18 -15
  60. package/dist/tempo/MultisigConfig.d.ts.map +1 -1
  61. package/dist/tempo/MultisigConfig.js +49 -20
  62. package/dist/tempo/MultisigConfig.js.map +1 -1
  63. package/dist/tempo/MultisigOperation.d.ts +3 -2
  64. package/dist/tempo/MultisigOperation.d.ts.map +1 -1
  65. package/dist/tempo/MultisigOperation.js +20 -100
  66. package/dist/tempo/MultisigOperation.js.map +1 -1
  67. package/dist/tempo/MultisigSimulation.d.ts +2 -49
  68. package/dist/tempo/MultisigSimulation.d.ts.map +1 -1
  69. package/dist/tempo/MultisigSimulation.js +18 -46
  70. package/dist/tempo/MultisigSimulation.js.map +1 -1
  71. package/dist/tempo/SignatureEnvelope.d.ts +72 -140
  72. package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
  73. package/dist/tempo/SignatureEnvelope.js +130 -181
  74. package/dist/tempo/SignatureEnvelope.js.map +1 -1
  75. package/dist/tempo/Transaction.d.ts +2 -0
  76. package/dist/tempo/Transaction.d.ts.map +1 -1
  77. package/dist/tempo/TransactionReceipt.d.ts +2 -0
  78. package/dist/tempo/TransactionReceipt.d.ts.map +1 -1
  79. package/dist/tempo/TransactionRequest.d.ts +4 -2
  80. package/dist/tempo/TransactionRequest.d.ts.map +1 -1
  81. package/dist/tempo/TransactionRequest.js +6 -1
  82. package/dist/tempo/TransactionRequest.js.map +1 -1
  83. package/dist/tempo/index.d.ts +3 -1
  84. package/dist/tempo/index.d.ts.map +1 -1
  85. package/dist/tempo/index.js +3 -1
  86. package/dist/tempo/index.js.map +1 -1
  87. package/dist/zod/Block.d.ts +123 -0
  88. package/dist/zod/Block.d.ts.map +1 -1
  89. package/dist/zod/Frame.d.ts +73 -0
  90. package/dist/zod/Frame.d.ts.map +1 -0
  91. package/dist/zod/Frame.js +74 -0
  92. package/dist/zod/Frame.js.map +1 -0
  93. package/dist/zod/FrameReceipt.d.ts +50 -0
  94. package/dist/zod/FrameReceipt.d.ts.map +1 -0
  95. package/dist/zod/FrameReceipt.js +37 -0
  96. package/dist/zod/FrameReceipt.js.map +1 -0
  97. package/dist/zod/FrameSignature.d.ts +63 -0
  98. package/dist/zod/FrameSignature.d.ts.map +1 -0
  99. package/dist/zod/FrameSignature.js +66 -0
  100. package/dist/zod/FrameSignature.js.map +1 -0
  101. package/dist/zod/RpcSchema.d.ts +806 -11
  102. package/dist/zod/RpcSchema.d.ts.map +1 -1
  103. package/dist/zod/Transaction.d.ts +252 -0
  104. package/dist/zod/Transaction.d.ts.map +1 -1
  105. package/dist/zod/Transaction.js +54 -0
  106. package/dist/zod/Transaction.js.map +1 -1
  107. package/dist/zod/TransactionEnvelope.d.ts +233 -4
  108. package/dist/zod/TransactionEnvelope.d.ts.map +1 -1
  109. package/dist/zod/TransactionEnvelope.js +9 -0
  110. package/dist/zod/TransactionEnvelope.js.map +1 -1
  111. package/dist/zod/TransactionReceipt.d.ts +48 -0
  112. package/dist/zod/TransactionReceipt.d.ts.map +1 -1
  113. package/dist/zod/TransactionReceipt.js +8 -3
  114. package/dist/zod/TransactionReceipt.js.map +1 -1
  115. package/dist/zod/TransactionRequest.d.ts +50 -2
  116. package/dist/zod/TransactionRequest.d.ts.map +1 -1
  117. package/dist/zod/TransactionRequest.js +10 -4
  118. package/dist/zod/TransactionRequest.js.map +1 -1
  119. package/dist/zod/TxEnvelopeEip8141.d.ts +166 -0
  120. package/dist/zod/TxEnvelopeEip8141.d.ts.map +1 -0
  121. package/dist/zod/TxEnvelopeEip8141.js +76 -0
  122. package/dist/zod/TxEnvelopeEip8141.js.map +1 -0
  123. package/dist/zod/internal/Frame.d.ts +4 -0
  124. package/dist/zod/internal/Frame.d.ts.map +1 -0
  125. package/dist/zod/internal/Frame.js +17 -0
  126. package/dist/zod/internal/Frame.js.map +1 -0
  127. package/dist/zod/internal/rpcSchemas/Eth.d.ts +842 -11
  128. package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
  129. package/dist/zod/internal/rpcSchemas/Wallet.d.ts +56 -2
  130. package/dist/zod/internal/rpcSchemas/Wallet.d.ts.map +1 -1
  131. package/dist/zod/tempo/AuthorizationTempo.d.ts +350 -10
  132. package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
  133. package/dist/zod/tempo/KeyAuthorization.d.ts +242 -422
  134. package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
  135. package/dist/zod/tempo/KeyAuthorization.js +29 -31
  136. package/dist/zod/tempo/KeyAuthorization.js.map +1 -1
  137. package/dist/zod/tempo/MultisigSimulation.d.ts +8 -76
  138. package/dist/zod/tempo/MultisigSimulation.d.ts.map +1 -1
  139. package/dist/zod/tempo/MultisigSimulation.js +3 -37
  140. package/dist/zod/tempo/MultisigSimulation.js.map +1 -1
  141. package/dist/zod/tempo/RpcSchemaTempo.d.ts +424 -228
  142. package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
  143. package/dist/zod/tempo/SignatureEnvelope.d.ts +105 -3
  144. package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
  145. package/dist/zod/tempo/SignatureEnvelope.js +21 -9
  146. package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
  147. package/dist/zod/tempo/Transaction.d.ts +783 -432
  148. package/dist/zod/tempo/Transaction.d.ts.map +1 -1
  149. package/dist/zod/tempo/TransactionRequest.d.ts +590 -473
  150. package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
  151. package/dist/zod/tempo/TransactionRequest.js +8 -0
  152. package/dist/zod/tempo/TransactionRequest.js.map +1 -1
  153. package/dist/zod/tempo/TxEnvelopeTempo.d.ts +327 -213
  154. package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  155. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +105 -3
  156. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
  157. package/dist/zod/z.d.ts +4 -0
  158. package/dist/zod/z.d.ts.map +1 -1
  159. package/dist/zod/z.js +4 -0
  160. package/dist/zod/z.js.map +1 -1
  161. package/package.json +41 -1
  162. package/src/core/AbiEvent.ts +11 -9
  163. package/src/core/Blobs.ts +6 -2
  164. package/src/core/Frame.ts +443 -0
  165. package/src/core/FrameReceipt.ts +117 -0
  166. package/src/core/FrameSignature.ts +593 -0
  167. package/src/core/Signature.ts +41 -11
  168. package/src/core/Siwe.ts +20 -1
  169. package/src/core/Transaction.ts +82 -5
  170. package/src/core/TransactionReceipt.ts +41 -3
  171. package/src/core/TransactionRequest.ts +71 -4
  172. package/src/core/TxEnvelope.ts +159 -90
  173. package/src/core/TxEnvelopeEip8141.ts +715 -0
  174. package/src/core/_test/AbiEvent.test.ts +45 -0
  175. package/src/core/_test/Blobs.test.ts +22 -0
  176. package/src/core/_test/Frame.test-d.ts +96 -0
  177. package/src/core/_test/Frame.test.ts +267 -0
  178. package/src/core/_test/FrameReceipt.test.ts +86 -0
  179. package/src/core/_test/FrameSignature.test-d.ts +93 -0
  180. package/src/core/_test/FrameSignature.test.ts +554 -0
  181. package/src/core/_test/Signature.test.ts +166 -0
  182. package/src/core/_test/Siwe.test.ts +100 -1
  183. package/src/core/_test/Transaction.test.ts +33 -0
  184. package/src/core/_test/TransactionEnvelope.test-d.ts +74 -0
  185. package/src/core/_test/TransactionEnvelope.test.ts +107 -0
  186. package/src/core/_test/TransactionReceipt.test.ts +59 -0
  187. package/src/core/_test/TransactionRequest.test-d.ts +50 -0
  188. package/src/core/_test/TransactionRequest.test.ts +88 -1
  189. package/src/core/_test/TxEnvelopeEip8141.test-d.ts +44 -0
  190. package/src/core/_test/TxEnvelopeEip8141.test.ts +1775 -0
  191. package/src/core/_test/curves.test.ts +6 -1
  192. package/src/core/_test/index.test.ts +4 -0
  193. package/src/core/internal/curves.ts +4 -0
  194. package/src/index.ts +77 -0
  195. package/src/tempo/AuthorizationTempo.test.ts +8 -4
  196. package/src/tempo/KeyAuthorization.test-d.ts +16 -63
  197. package/src/tempo/KeyAuthorization.test.ts +69 -11
  198. package/src/tempo/KeyAuthorization.ts +107 -63
  199. package/src/tempo/MultisigConfig.test.ts +44 -20
  200. package/src/tempo/MultisigConfig.ts +65 -23
  201. package/src/tempo/MultisigOperation.test.ts +79 -550
  202. package/src/tempo/MultisigOperation.ts +31 -146
  203. package/src/tempo/MultisigSimulation.test-d.ts +2 -2
  204. package/src/tempo/MultisigSimulation.test.ts +21 -110
  205. package/src/tempo/MultisigSimulation.ts +25 -99
  206. package/src/tempo/SignatureEnvelope.test-d.ts +29 -47
  207. package/src/tempo/SignatureEnvelope.test.ts +328 -541
  208. package/src/tempo/SignatureEnvelope.ts +196 -291
  209. package/src/tempo/Transaction.test.ts +4 -4
  210. package/src/tempo/TransactionRequest.test.ts +17 -80
  211. package/src/tempo/TransactionRequest.ts +19 -2
  212. package/src/tempo/index.ts +3 -1
  213. package/src/tempo/multisig.e2e.test.ts +321 -860
  214. package/src/version.ts +1 -1
  215. package/src/zod/Frame.ts +82 -0
  216. package/src/zod/FrameReceipt.ts +48 -0
  217. package/src/zod/FrameSignature.ts +78 -0
  218. package/src/zod/Transaction.ts +63 -0
  219. package/src/zod/TransactionEnvelope.ts +33 -0
  220. package/src/zod/TransactionReceipt.ts +14 -3
  221. package/src/zod/TransactionRequest.ts +18 -3
  222. package/src/zod/TxEnvelopeEip8141.ts +102 -0
  223. package/src/zod/_test/Frame.test-d.ts +41 -0
  224. package/src/zod/_test/Frame.test.ts +54 -0
  225. package/src/zod/_test/FrameReceipt.test.ts +75 -0
  226. package/src/zod/_test/FrameSignature.test.ts +94 -0
  227. package/src/zod/_test/TxEnvelopeEip8141.test.ts +116 -0
  228. package/src/zod/internal/Frame.ts +26 -0
  229. package/src/zod/tempo/KeyAuthorization.ts +50 -39
  230. package/src/zod/tempo/MultisigSimulation.ts +3 -48
  231. package/src/zod/tempo/SignatureEnvelope.ts +46 -35
  232. package/src/zod/tempo/TransactionRequest.ts +14 -0
  233. package/src/zod/tempo/_test/KeyAuthorization.test.ts +69 -20
  234. package/src/zod/tempo/_test/MultisigSimulation.test.ts +6 -31
  235. package/src/zod/tempo/_test/SignatureEnvelope.test.ts +118 -85
  236. package/src/zod/tempo/_test/TransactionRequest.test.ts +9 -19
  237. package/src/zod/z.ts +4 -0
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export const version = '1.7.4'
2
+ export const version = '1.8.0'
@@ -0,0 +1,82 @@
1
+ /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
+ import * as core_Frame from '../core/Frame.js'
3
+ import * as z_Address from './Address.js'
4
+ import * as z_Hex from './Hex.js'
5
+ import * as z from 'zod/mini'
6
+
7
+ const Mode = z.union([z.number(), z.enum(['default', 'sender', 'verify'])])
8
+ const Flags = z.union([
9
+ z.number(),
10
+ z.enum([
11
+ 'approveExecution',
12
+ 'approveExecutionAndPayment',
13
+ 'approvePayment',
14
+ 'atomicBatch',
15
+ 'none',
16
+ ]),
17
+ ])
18
+
19
+ /** Decoded frame schema. */
20
+ export const Decoded: z.ZodMiniType<core_Frame.Frame, core_Frame.Frame> = z
21
+ .object(fields(z.bigint()))
22
+ .check(z.refine(core_Frame.validate, 'Invalid frame'))
23
+
24
+ /** RPC frame schema. */
25
+ export const Rpc = z
26
+ .object({
27
+ data: z_Hex.Hex,
28
+ executionGasLimit: z_Hex.Hex,
29
+ flags: z.number(),
30
+ mode: z.number(),
31
+ stateGasLimit: z_Hex.Hex,
32
+ target: z.optional(z.nullable(z_Address.Address)),
33
+ value: z_Hex.Hex,
34
+ })
35
+ .check(
36
+ z.refine((value) => {
37
+ try {
38
+ core_Frame.fromRpc(value)
39
+ return true
40
+ } catch {
41
+ return false
42
+ }
43
+ }, 'Invalid frame'),
44
+ )
45
+
46
+ /** Codec between RPC and decoded frames. */
47
+ export const Frame = z.codec(Rpc, Decoded, {
48
+ decode: core_Frame.fromRpc,
49
+ encode: core_Frame.toRpc,
50
+ })
51
+
52
+ /** Decoded frame schema accepting numberish budgets. */
53
+ export const DecodedToRpc = z
54
+ .object(fields(z.union([z_Hex.Hex, z.bigint(), z.number()])))
55
+ .check(
56
+ z.refine((value) => {
57
+ try {
58
+ core_Frame.fromRpc(core_Frame.toRpc(value))
59
+ return true
60
+ } catch {
61
+ return false
62
+ }
63
+ }, 'Invalid frame'),
64
+ )
65
+
66
+ /** Encode-only frame codec accepting numberish budgets. */
67
+ export const FrameToRpc = z.codec(Rpc, DecodedToRpc, {
68
+ decode: core_Frame.fromRpc,
69
+ encode: core_Frame.toRpc,
70
+ })
71
+
72
+ function fields<uint extends z.ZodMiniType>(uint: uint) {
73
+ return {
74
+ data: z.optional(z_Hex.Hex),
75
+ flags: z.optional(Flags),
76
+ gas: z.optional(uint),
77
+ mode: z.optional(Mode),
78
+ stateGas: z.optional(uint),
79
+ target: z.optional(z_Address.Address),
80
+ value: z.optional(uint),
81
+ }
82
+ }
@@ -0,0 +1,48 @@
1
+ /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
+ import * as core_FrameReceipt from '../core/FrameReceipt.js'
3
+ import * as z_Address from './Address.js'
4
+ import * as z_Hex from './Hex.js'
5
+ import {
6
+ quantityHex,
7
+ uintBigint,
8
+ uintBigintNumberish,
9
+ } from './internal/Integer.js'
10
+ import * as z from 'zod/mini'
11
+
12
+ const frameLog = z.object({
13
+ address: z_Address.Address,
14
+ data: z_Hex.Hex,
15
+ topics: z.array(z_Hex.Hex),
16
+ })
17
+
18
+ const frameReceiptRpc = z.object({
19
+ executionGasUsed: quantityHex(),
20
+ logs: z.readonly(z.array(frameLog)),
21
+ stateGasUsed: quantityHex(),
22
+ status: z.union([z.literal(0), z.literal(1), z.literal(2)]),
23
+ })
24
+ const frameReceiptDecoded = z.object({
25
+ gasUsed: uintBigint(),
26
+ logs: z.readonly(z.array(frameLog)),
27
+ stateGasUsed: uintBigint(),
28
+ status: z.enum(['reverted', 'success', 'skipped']),
29
+ })
30
+
31
+ /** Codec between RPC and decoded frame receipts. */
32
+ export const FrameReceipt = z.codec(frameReceiptRpc, frameReceiptDecoded, {
33
+ decode: core_FrameReceipt.fromRpc,
34
+ encode: core_FrameReceipt.toRpc,
35
+ })
36
+
37
+ /** Encode-only frame receipt codec accepting numberish gas. */
38
+ export const FrameReceiptToRpc = z.codec(
39
+ frameReceiptRpc,
40
+ z.extend(frameReceiptDecoded, {
41
+ gasUsed: uintBigintNumberish(),
42
+ stateGasUsed: uintBigintNumberish(),
43
+ }),
44
+ {
45
+ decode: core_FrameReceipt.fromRpc,
46
+ encode: core_FrameReceipt.toRpc,
47
+ },
48
+ )
@@ -0,0 +1,78 @@
1
+ /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
+ import * as core_FrameSignature from '../core/FrameSignature.js'
3
+ import * as z_Address from './Address.js'
4
+ import * as z_Hex from './Hex.js'
5
+ import * as z from 'zod/mini'
6
+
7
+ const publicKey = z.object({ prefix: z.number(), x: z_Hex.Hex, y: z_Hex.Hex })
8
+ const signature = z.object({
9
+ r: z_Hex.Hex,
10
+ s: z_Hex.Hex,
11
+ yParity: z.optional(z.number()),
12
+ })
13
+
14
+ /** Contract-defined frame signature schema. */
15
+ export const Arbitrary = z.object({
16
+ payload: z.optional(z_Hex.Hex),
17
+ scheme: z.union([z.literal(0), z.literal('arbitrary')]),
18
+ signature: z_Hex.Hex,
19
+ signer: z.optional(z.undefined()),
20
+ })
21
+
22
+ /** secp256k1 frame signature schema. */
23
+ export const Secp256k1 = z.object({
24
+ payload: z.optional(z_Hex.Hex),
25
+ scheme: z.union([z.literal(1), z.literal('secp256k1')]),
26
+ signature: z.optional(
27
+ z.object({ r: z_Hex.Hex, s: z_Hex.Hex, yParity: z.number() }),
28
+ ),
29
+ signer: z.optional(z_Address.Address),
30
+ })
31
+
32
+ const p256 = {
33
+ payload: z.optional(z_Hex.Hex),
34
+ scheme: z.union([z.literal(2), z.literal('p256')]),
35
+ signer: z.optional(z_Address.Address),
36
+ }
37
+ /** P-256 frame signature schema, including unsigned placeholders. */
38
+ export const P256 = z.union([
39
+ z.object({ ...p256, publicKey, signature }),
40
+ z.object({
41
+ ...p256,
42
+ publicKey: z.optional(publicKey),
43
+ signature: z.optional(z.undefined()),
44
+ }),
45
+ ])
46
+
47
+ /** Decoded frame signature schema. */
48
+ export const Decoded: z.ZodMiniType<
49
+ core_FrameSignature.FrameSignature,
50
+ core_FrameSignature.FrameSignature
51
+ > = z
52
+ .union([Arbitrary, Secp256k1, P256])
53
+ .check(z.refine(core_FrameSignature.validate, 'Invalid frame signature'))
54
+
55
+ /** RPC frame signature schema. */
56
+ export const Rpc = z
57
+ .object({
58
+ msg: z_Hex.Hex,
59
+ scheme: z.union([z.literal(0), z.literal(1), z.literal(2)]),
60
+ signature: z_Hex.Hex,
61
+ signer: z.optional(z.nullable(z_Address.Address)),
62
+ })
63
+ .check(
64
+ z.refine((value) => {
65
+ try {
66
+ core_FrameSignature.fromRpc(value)
67
+ return true
68
+ } catch {
69
+ return false
70
+ }
71
+ }, 'Invalid frame signature'),
72
+ )
73
+
74
+ /** Codec between RPC and structured frame signatures. */
75
+ export const FrameSignature = z.codec(Rpc, Decoded, {
76
+ decode: core_FrameSignature.fromRpc,
77
+ encode: core_FrameSignature.toRpc,
78
+ })
@@ -2,6 +2,9 @@
2
2
  import * as z_AccessList from './AccessList.js'
3
3
  import * as z_Address from './Address.js'
4
4
  import * as z_Authorization from './Authorization.js'
5
+ import * as z_Frame from './Frame.js'
6
+ import * as z_FrameSignature from './FrameSignature.js'
7
+ import { chainId, chainIdToRpc } from './internal/Frame.js'
5
8
  import * as z_Hex from './Hex.js'
6
9
  import * as z_Number from './Number.js'
7
10
  import * as z_Uint from './Uint.js'
@@ -13,6 +16,7 @@ const fromRpcType = {
13
16
  '0x2': 'eip1559',
14
17
  '0x3': 'eip4844',
15
18
  '0x4': 'eip7702',
19
+ '0x6': 'eip8141',
16
20
  } as const
17
21
 
18
22
  const toRpcType = {
@@ -21,6 +25,7 @@ const toRpcType = {
21
25
  eip1559: '0x2',
22
26
  eip4844: '0x3',
23
27
  eip7702: '0x4',
28
+ eip8141: '0x6',
24
29
  } as const
25
30
 
26
31
  /** Transaction type schema. */
@@ -134,6 +139,61 @@ export const PendingEip7702 = z.object(
134
139
  ),
135
140
  )
136
141
 
142
+ const Eip8141Type = type('0x6', 'eip8141')
143
+
144
+ /** EIP-8141 transaction schema. */
145
+ export const Eip8141 = z.object({
146
+ ...eip8141Fields(z_Uint.Uint, chainId, z_Frame.Frame),
147
+ blockHash: z_Hex.Hex,
148
+ blockNumber: z_Uint.Uint,
149
+ blockTimestamp: z.optional(z_Uint.Uint),
150
+ transactionIndex: z_Number.Number,
151
+ })
152
+
153
+ /** Encode-only EIP-8141 transaction schema accepting numberish values. */
154
+ export const Eip8141ToRpc = z.object({
155
+ ...eip8141Fields(z_Uint.UintToRpc, chainIdToRpc, z_Frame.FrameToRpc),
156
+ blockHash: z_Hex.Hex,
157
+ blockNumber: z_Uint.UintToRpc,
158
+ blockTimestamp: z.optional(z_Uint.UintToRpc),
159
+ transactionIndex: z_Number.NumberToRpc,
160
+ })
161
+
162
+ /** Pending EIP-8141 transaction schema. */
163
+ export const PendingEip8141 = z.object({
164
+ ...eip8141Fields(z_Uint.Uint, chainId, z_Frame.Frame),
165
+ blockHash: z.null(),
166
+ blockNumber: z.null(),
167
+ blockTimestamp: z.optional(z.null()),
168
+ transactionIndex: z.null(),
169
+ })
170
+
171
+ function eip8141Fields<
172
+ uint extends z.ZodMiniType,
173
+ num extends z.ZodMiniType,
174
+ frame extends z.ZodMiniType,
175
+ >(uint: uint, num: num, frame: frame) {
176
+ return {
177
+ blobVersionedHashes: z.readonly(z.array(z_Hex.Hex)),
178
+ chainId: num,
179
+ data: z.optional(z_Hex.Hex),
180
+ frames: z.readonly(z.array(frame)),
181
+ from: z_Address.Address,
182
+ gas: uint,
183
+ gasPrice: z.optional(uint),
184
+ hash: z_Hex.Hex,
185
+ input: z_Hex.Hex,
186
+ maxFeePerBlobGas: uint,
187
+ maxFeePerGas: uint,
188
+ maxPriorityFeePerGas: uint,
189
+ nonce: uint,
190
+ signatures: z.readonly(z.array(z_FrameSignature.FrameSignature)),
191
+ to: z.nullable(z_Address.Address),
192
+ type: Eip8141Type,
193
+ value: uint,
194
+ }
195
+ }
196
+
137
197
  /** Unknown typed transaction schema. */
138
198
  export const Unknown = z.object(
139
199
  baseFields(UnknownType, z_Uint.Uint, z_Number.Number),
@@ -155,6 +215,7 @@ export const Transaction = z.union([
155
215
  Eip1559,
156
216
  Eip4844,
157
217
  Eip7702,
218
+ Eip8141,
158
219
  Unknown,
159
220
  ])
160
221
 
@@ -165,6 +226,7 @@ export const TransactionToRpc = z.union([
165
226
  Eip1559ToRpc,
166
227
  Eip4844ToRpc,
167
228
  Eip7702ToRpc,
229
+ Eip8141ToRpc,
168
230
  UnknownToRpc,
169
231
  ])
170
232
 
@@ -175,6 +237,7 @@ export const Pending = z.union([
175
237
  PendingEip1559,
176
238
  PendingEip4844,
177
239
  PendingEip7702,
240
+ PendingEip8141,
178
241
  PendingUnknown,
179
242
  ])
180
243
 
@@ -1,3 +1,4 @@
1
+ import * as core_FrameSignature from '../core/FrameSignature.js'
1
2
  /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
3
  import * as core_TxEnvelope from '../core/TxEnvelope.js'
3
4
  import * as z_AccessList from './AccessList.js'
@@ -7,6 +8,7 @@ import * as z_TxEnvelopeEip1559 from './TxEnvelopeEip1559.js'
7
8
  import * as z_TxEnvelopeEip2930 from './TxEnvelopeEip2930.js'
8
9
  import * as z_TxEnvelopeEip4844 from './TxEnvelopeEip4844.js'
9
10
  import * as z_TxEnvelopeEip7702 from './TxEnvelopeEip7702.js'
11
+ import * as z_TxEnvelopeEip8141 from './TxEnvelopeEip8141.js'
10
12
  import * as z_TxEnvelopeLegacy from './TxEnvelopeLegacy.js'
11
13
  import {
12
14
  baseFields,
@@ -21,6 +23,7 @@ const fromRpcType = {
21
23
  '0x2': 'eip1559',
22
24
  '0x3': 'eip4844',
23
25
  '0x4': 'eip7702',
26
+ '0x6': 'eip8141',
24
27
  } as const
25
28
 
26
29
  const toRpcType = {
@@ -29,6 +32,7 @@ const toRpcType = {
29
32
  eip1559: '0x2',
30
33
  eip4844: '0x3',
31
34
  eip7702: '0x4',
35
+ eip8141: '0x6',
32
36
  } as const
33
37
 
34
38
  /** Transaction envelope type schema. */
@@ -47,6 +51,7 @@ export const BaseSigned = z.object(
47
51
 
48
52
  /** Transaction envelope schema. */
49
53
  export const TransactionEnvelope = z.union([
54
+ z_TxEnvelopeEip8141.TxEnvelopeEip8141,
50
55
  z_TxEnvelopeLegacy.TxEnvelopeLegacy,
51
56
  z_TxEnvelopeEip2930.TxEnvelopeEip2930,
52
57
  z_TxEnvelopeEip1559.TxEnvelopeEip1559,
@@ -56,6 +61,7 @@ export const TransactionEnvelope = z.union([
56
61
 
57
62
  /** Encode-only transaction envelope schema accepting numberish `toRpc` inputs. */
58
63
  export const TransactionEnvelopeToRpc = z.union([
64
+ z_TxEnvelopeEip8141.TxEnvelopeEip8141ToRpc,
59
65
  z_TxEnvelopeLegacy.TxEnvelopeLegacyToRpc,
60
66
  z_TxEnvelopeEip2930.TxEnvelopeEip2930ToRpc,
61
67
  z_TxEnvelopeEip1559.TxEnvelopeEip1559ToRpc,
@@ -65,6 +71,15 @@ export const TransactionEnvelopeToRpc = z.union([
65
71
 
66
72
  /** Signed transaction envelope schema. */
67
73
  export const Signed = z.union([
74
+ z_TxEnvelopeEip8141.TxEnvelopeEip8141.check(
75
+ z.refine(
76
+ (value) =>
77
+ (value.signatures ?? []).every((entry) =>
78
+ core_FrameSignature.validate(entry, { signed: true }),
79
+ ),
80
+ 'Invalid signed frame transaction',
81
+ ),
82
+ ),
68
83
  z_TxEnvelopeLegacy.Signed,
69
84
  z_TxEnvelopeEip2930.Signed,
70
85
  z_TxEnvelopeEip1559.Signed,
@@ -74,6 +89,15 @@ export const Signed = z.union([
74
89
 
75
90
  /** Encode-only signed transaction envelope schema accepting numberish `toRpc` inputs. */
76
91
  export const SignedToRpc = z.union([
92
+ z_TxEnvelopeEip8141.TxEnvelopeEip8141ToRpc.check(
93
+ z.refine(
94
+ (value) =>
95
+ (value.signatures ?? []).every((entry) =>
96
+ core_FrameSignature.validate(entry, { signed: true }),
97
+ ),
98
+ 'Invalid signed frame transaction',
99
+ ),
100
+ ),
77
101
  z_TxEnvelopeLegacy.SignedToRpc,
78
102
  z_TxEnvelopeEip2930.SignedToRpc,
79
103
  z_TxEnvelopeEip1559.SignedToRpc,
@@ -156,6 +180,15 @@ const SignedEip7702Decoded = z.object({
156
180
 
157
181
  /** Decoded signed transaction envelope schema. */
158
182
  export const SignedDecoded = z.union([
183
+ z_TxEnvelopeEip8141.Decoded.check(
184
+ z.refine(
185
+ (value) =>
186
+ (value.signatures ?? []).every((entry) =>
187
+ core_FrameSignature.validate(entry, { signed: true }),
188
+ ),
189
+ 'Invalid signed frame transaction',
190
+ ),
191
+ ),
159
192
  SignedLegacyDecoded,
160
193
  SignedEip2930Decoded,
161
194
  SignedEip1559Decoded,
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
2
  import * as z_Address from './Address.js'
3
+ import * as z_FrameReceipt from './FrameReceipt.js'
3
4
  import * as z_Hex from './Hex.js'
4
5
  import * as z_Log from './Log.js'
5
6
  import * as z_Number from './Number.js'
@@ -22,6 +23,7 @@ const fromRpcType = {
22
23
  '0x2': 'eip1559',
23
24
  '0x3': 'eip4844',
24
25
  '0x4': 'eip7702',
26
+ '0x6': 'eip8141',
25
27
  } as const
26
28
 
27
29
  const toRpcType = {
@@ -30,6 +32,7 @@ const toRpcType = {
30
32
  eip1559: '0x2',
31
33
  eip4844: '0x3',
32
34
  eip7702: '0x4',
35
+ eip8141: '0x6',
33
36
  } as const
34
37
 
35
38
  /** Transaction receipt status schema. */
@@ -50,19 +53,25 @@ export const Type = z.codec(z.string(), z.string(), {
50
53
 
51
54
  /** Transaction receipt schema. */
52
55
  export const TransactionReceipt = z.object(
53
- fields(z_Uint.Uint, z_Number.Number, z_Log.Log),
56
+ fields(z_Uint.Uint, z_Number.Number, z_Log.Log, z_FrameReceipt.FrameReceipt),
54
57
  )
55
58
 
56
59
  /** Encode-only transaction receipt schema accepting numberish `toRpc` inputs. */
57
60
  export const TransactionReceiptToRpc = z.object(
58
- fields(z_Uint.UintToRpc, z_Number.NumberToRpc, z_Log.LogToRpc),
61
+ fields(
62
+ z_Uint.UintToRpc,
63
+ z_Number.NumberToRpc,
64
+ z_Log.LogToRpc,
65
+ z_FrameReceipt.FrameReceiptToRpc,
66
+ ),
59
67
  )
60
68
 
61
69
  function fields<
62
70
  uint extends z.ZodMiniType,
63
71
  num extends z.ZodMiniType,
64
72
  log extends z.ZodMiniType,
65
- >(uint: uint, num: num, log: log) {
73
+ frame extends z.ZodMiniType,
74
+ >(uint: uint, num: num, log: log, frame: frame) {
66
75
  return {
67
76
  blobGasPrice: z.optional(uint),
68
77
  blobGasUsed: z.optional(uint),
@@ -71,10 +80,12 @@ function fields<
71
80
  contractAddress: z.optional(z.union([z_Address.Address, z.null()])),
72
81
  cumulativeGasUsed: uint,
73
82
  effectiveGasPrice: uint,
83
+ frameReceipts: z.optional(z.readonly(z.array(frame))),
74
84
  from: z_Address.Address,
75
85
  gasUsed: uint,
76
86
  logs: z.array(log),
77
87
  logsBloom: z_Hex.Hex,
88
+ payer: z.optional(z_Address.Address),
78
89
  root: z.optional(z_Hex.Hex),
79
90
  status: Status,
80
91
  to: z.union([z_Address.Address, z.null()]),
@@ -2,6 +2,8 @@
2
2
  import * as z_AccessList from './AccessList.js'
3
3
  import * as z_Address from './Address.js'
4
4
  import * as z_Authorization from './Authorization.js'
5
+ import * as z_Frame from './Frame.js'
6
+ import * as z_FrameSignature from './FrameSignature.js'
5
7
  import * as z_Hex from './Hex.js'
6
8
  import * as z_Number from './Number.js'
7
9
  import * as z_Uint from './Uint.js'
@@ -13,6 +15,7 @@ const fromRpcType = {
13
15
  '0x2': 'eip1559',
14
16
  '0x3': 'eip4844',
15
17
  '0x4': 'eip7702',
18
+ '0x6': 'eip8141',
16
19
  } as const
17
20
 
18
21
  const toRpcType = {
@@ -21,6 +24,7 @@ const toRpcType = {
21
24
  eip1559: '0x2',
22
25
  eip4844: '0x3',
23
26
  eip7702: '0x4',
27
+ eip8141: '0x6',
24
28
  } as const
25
29
 
26
30
  const type = z.codec(z.string(), z.string(), {
@@ -30,7 +34,12 @@ const type = z.codec(z.string(), z.string(), {
30
34
 
31
35
  /** Transaction request schema. */
32
36
  export const TransactionRequest = z.object(
33
- fields(z_Uint.Uint, z_Number.Number, z_Authorization.ListSigned),
37
+ fields(
38
+ z_Uint.Uint,
39
+ z_Number.Number,
40
+ z_Authorization.ListSigned,
41
+ z_Frame.Frame,
42
+ ),
34
43
  )
35
44
 
36
45
  /** Encode-only transaction request schema accepting numberish `toRpc` inputs. */
@@ -39,6 +48,7 @@ export const TransactionRequestToRpc = z.object(
39
48
  z_Uint.UintToRpc,
40
49
  z_Number.NumberToRpc,
41
50
  z_Authorization.ListSignedToRpc,
51
+ z_Frame.FrameToRpc,
42
52
  ),
43
53
  )
44
54
 
@@ -46,7 +56,8 @@ function fields<
46
56
  uint extends z.ZodMiniType,
47
57
  num extends z.ZodMiniType,
48
58
  authorizationList extends z.ZodMiniType,
49
- >(uint: uint, num: num, authorizationList: authorizationList) {
59
+ frame extends z.ZodMiniType,
60
+ >(uint: uint, num: num, authorizationList: authorizationList, frame: frame) {
50
61
  return {
51
62
  accessList: z.optional(z_AccessList.AccessList),
52
63
  authorizationList: z.optional(authorizationList),
@@ -54,14 +65,18 @@ function fields<
54
65
  blobs: z.optional(z.readonly(z.array(z_Hex.Hex))),
55
66
  chainId: z.optional(num),
56
67
  data: z.optional(z_Hex.Hex),
57
- input: z.optional(z_Hex.Hex),
68
+ frames: z.optional(z.readonly(z.array(frame))),
58
69
  from: z.optional(z_Address.Address),
59
70
  gas: z.optional(uint),
60
71
  gasPrice: z.optional(uint),
72
+ input: z.optional(z_Hex.Hex),
61
73
  maxFeePerBlobGas: z.optional(uint),
62
74
  maxFeePerGas: z.optional(uint),
63
75
  maxPriorityFeePerGas: z.optional(uint),
64
76
  nonce: z.optional(uint),
77
+ signatures: z.optional(
78
+ z.readonly(z.array(z_FrameSignature.FrameSignature)),
79
+ ),
65
80
  to: z.optional(z.union([z_Address.Address, z.null()])),
66
81
  type: z.optional(type),
67
82
  value: z.optional(uint),
@@ -0,0 +1,102 @@
1
+ /* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
2
+ import * as core_TxEnvelopeEip8141 from '../core/TxEnvelopeEip8141.js'
3
+ import * as z_Address from './Address.js'
4
+ import * as z_Frame from './Frame.js'
5
+ import * as z_FrameSignature from './FrameSignature.js'
6
+ import * as z_Hex from './Hex.js'
7
+ import * as z_TxEnvelopeEip4844 from './TxEnvelopeEip4844.js'
8
+ import * as z from 'zod/mini'
9
+
10
+ /** Decoded EIP-8141 envelope schema. */
11
+ export const Decoded = z
12
+ .object(
13
+ fields(z.bigint(), z.union([z.number(), z.bigint()]), z_Frame.Decoded),
14
+ )
15
+ .check(z.refine(core_TxEnvelopeEip8141.validate, 'Invalid frame transaction'))
16
+
17
+ /** RPC EIP-8141 envelope schema. */
18
+ export const Rpc = z
19
+ .object({
20
+ blobVersionedHashes: z.readonly(z.array(z_Hex.Hex)),
21
+ chainId: z_Hex.Hex,
22
+ frames: z.readonly(z.array(z_Frame.Rpc)),
23
+ from: z_Address.Address,
24
+ maxFeePerBlobGas: z_Hex.Hex,
25
+ maxFeePerGas: z_Hex.Hex,
26
+ maxPriorityFeePerGas: z_Hex.Hex,
27
+ nonce: z_Hex.Hex,
28
+ signatures: z.readonly(z.array(z_FrameSignature.Rpc)),
29
+ type: z.literal('0x6'),
30
+ })
31
+ .check(
32
+ z.refine((value) => {
33
+ try {
34
+ core_TxEnvelopeEip8141.fromRpc(value)
35
+ return true
36
+ } catch {
37
+ return false
38
+ }
39
+ }, 'Invalid frame transaction'),
40
+ )
41
+
42
+ /** Codec between RPC and decoded EIP-8141 envelopes. */
43
+ export const TxEnvelopeEip8141 = z.codec(Rpc, Decoded, {
44
+ decode: core_TxEnvelopeEip8141.fromRpc,
45
+ encode: core_TxEnvelopeEip8141.toRpc,
46
+ })
47
+
48
+ /** Encode-only EIP-8141 envelope codec accepting numberish values. */
49
+ export const TxEnvelopeEip8141ToRpc = z.codec(
50
+ Rpc,
51
+ z
52
+ .object(
53
+ fields(
54
+ z.union([z_Hex.Hex, z.bigint(), z.number()]),
55
+ z.union([z_Hex.Hex, z.bigint(), z.number()]),
56
+ z_Frame.DecodedToRpc,
57
+ ),
58
+ )
59
+ .check(
60
+ z.refine((value) => {
61
+ try {
62
+ core_TxEnvelopeEip8141.fromRpc(core_TxEnvelopeEip8141.toRpc(value))
63
+ return true
64
+ } catch {
65
+ return false
66
+ }
67
+ }, 'Invalid frame transaction'),
68
+ ),
69
+ {
70
+ decode: core_TxEnvelopeEip8141.fromRpc,
71
+ encode: core_TxEnvelopeEip8141.toRpc,
72
+ },
73
+ )
74
+
75
+ /** Codec between serialized and decoded EIP-8141 envelopes. */
76
+ export const serialized = z.codec(z_Hex.Hex, Decoded, {
77
+ decode: (value) =>
78
+ core_TxEnvelopeEip8141.deserialize(
79
+ value as core_TxEnvelopeEip8141.Serialized,
80
+ ),
81
+ encode: core_TxEnvelopeEip8141.serialize,
82
+ })
83
+
84
+ function fields<
85
+ uint extends z.ZodMiniType,
86
+ num extends z.ZodMiniType,
87
+ frame extends z.ZodMiniType,
88
+ >(uint: uint, num: num, frame: frame) {
89
+ return {
90
+ blobVersionedHashes: z.optional(z.readonly(z.array(z_Hex.Hex))),
91
+ chainId: num,
92
+ frames: z.readonly(z.array(frame)),
93
+ maxFeePerBlobGas: z.optional(uint),
94
+ maxFeePerGas: z.optional(uint),
95
+ maxPriorityFeePerGas: z.optional(uint),
96
+ nonce: z.optional(uint),
97
+ sender: z_Address.Address,
98
+ sidecars: z.optional(z_TxEnvelopeEip4844.Sidecars),
99
+ signatures: z.optional(z.readonly(z.array(z_FrameSignature.Decoded))),
100
+ type: z.literal('eip8141'),
101
+ }
102
+ }
@@ -0,0 +1,41 @@
1
+ import type {
2
+ Frame,
3
+ FrameReceipt,
4
+ FrameSignature,
5
+ Transaction,
6
+ TxEnvelopeEip8141,
7
+ } from 'ox'
8
+ import { z } from 'ox/zod'
9
+ import { expectTypeOf, test } from 'vp/test'
10
+
11
+ test('frame codecs preserve core types', () => {
12
+ expectTypeOf<z.output<typeof z.Frame.Frame>>().toEqualTypeOf<Frame.Frame>()
13
+ expectTypeOf<z.input<typeof z.Frame.Frame>>().toEqualTypeOf<Frame.Rpc>()
14
+ expectTypeOf<
15
+ z.output<typeof z.FrameSignature.FrameSignature>
16
+ >().toEqualTypeOf<FrameSignature.FrameSignature>()
17
+ expectTypeOf<
18
+ z.input<typeof z.FrameSignature.FrameSignature>
19
+ >().toEqualTypeOf<FrameSignature.Rpc>()
20
+ expectTypeOf<
21
+ z.output<typeof z.TxEnvelopeEip8141.TxEnvelopeEip8141>
22
+ >().toEqualTypeOf<TxEnvelopeEip8141.TxEnvelopeEip8141>()
23
+ expectTypeOf<
24
+ z.input<typeof z.TxEnvelopeEip8141.TxEnvelopeEip8141>
25
+ >().toEqualTypeOf<TxEnvelopeEip8141.Rpc>()
26
+ expectTypeOf<
27
+ z.output<typeof z.Transaction.Eip8141>
28
+ >().toEqualTypeOf<Transaction.Eip8141>()
29
+ expectTypeOf<
30
+ z.input<typeof z.Transaction.Eip8141>
31
+ >().toEqualTypeOf<Transaction.Eip8141Rpc>()
32
+ expectTypeOf<z.output<typeof z.Transaction.PendingEip8141>>().toEqualTypeOf<
33
+ Transaction.Eip8141<true>
34
+ >()
35
+ expectTypeOf<
36
+ z.output<typeof z.FrameReceipt.FrameReceipt>
37
+ >().toEqualTypeOf<FrameReceipt.FrameReceipt>()
38
+ expectTypeOf<
39
+ z.input<typeof z.FrameReceipt.FrameReceipt>
40
+ >().toEqualTypeOf<FrameReceipt.Rpc>()
41
+ })