ox 1.8.1 → 1.8.4

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 (152) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/core/Frame.d.ts +23 -20
  3. package/dist/core/Frame.d.ts.map +1 -1
  4. package/dist/core/Frame.js +28 -23
  5. package/dist/core/Frame.js.map +1 -1
  6. package/dist/core/FrameReceipt.d.ts +23 -14
  7. package/dist/core/FrameReceipt.d.ts.map +1 -1
  8. package/dist/core/FrameReceipt.js +15 -11
  9. package/dist/core/FrameReceipt.js.map +1 -1
  10. package/dist/core/FrameRequest.d.ts +50 -0
  11. package/dist/core/FrameRequest.d.ts.map +1 -0
  12. package/dist/core/FrameRequest.js +59 -0
  13. package/dist/core/FrameRequest.js.map +1 -0
  14. package/dist/core/FrameSignature.d.ts +17 -16
  15. package/dist/core/FrameSignature.d.ts.map +1 -1
  16. package/dist/core/FrameSignature.js +38 -21
  17. package/dist/core/FrameSignature.js.map +1 -1
  18. package/dist/core/Siwe.d.ts.map +1 -1
  19. package/dist/core/Siwe.js +3 -3
  20. package/dist/core/Siwe.js.map +1 -1
  21. package/dist/core/Transaction.d.ts +7 -4
  22. package/dist/core/Transaction.d.ts.map +1 -1
  23. package/dist/core/Transaction.js +8 -0
  24. package/dist/core/Transaction.js.map +1 -1
  25. package/dist/core/TransactionRequest.d.ts +8 -5
  26. package/dist/core/TransactionRequest.d.ts.map +1 -1
  27. package/dist/core/TransactionRequest.js +11 -3
  28. package/dist/core/TransactionRequest.js.map +1 -1
  29. package/dist/core/TxEnvelope.d.ts +4 -2
  30. package/dist/core/TxEnvelope.d.ts.map +1 -1
  31. package/dist/core/TxEnvelope.js +11 -2
  32. package/dist/core/TxEnvelope.js.map +1 -1
  33. package/dist/core/TxEnvelopeEip8141.d.ts +22 -11
  34. package/dist/core/TxEnvelopeEip8141.d.ts.map +1 -1
  35. package/dist/core/TxEnvelopeEip8141.js +45 -16
  36. package/dist/core/TxEnvelopeEip8141.js.map +1 -1
  37. package/dist/core/internal/frameNonce.d.ts +10 -0
  38. package/dist/core/internal/frameNonce.d.ts.map +1 -0
  39. package/dist/core/internal/frameNonce.js +45 -0
  40. package/dist/core/internal/frameNonce.js.map +1 -0
  41. package/dist/core/internal/rpcSchemas/eth.d.ts +16 -4
  42. package/dist/core/internal/rpcSchemas/eth.d.ts.map +1 -1
  43. package/dist/index.d.ts +21 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +21 -5
  46. package/dist/index.js.map +1 -1
  47. package/dist/zod/Block.d.ts +52 -37
  48. package/dist/zod/Block.d.ts.map +1 -1
  49. package/dist/zod/Frame.d.ts +14 -14
  50. package/dist/zod/Frame.js +5 -5
  51. package/dist/zod/Frame.js.map +1 -1
  52. package/dist/zod/FrameReceipt.d.ts +42 -2
  53. package/dist/zod/FrameReceipt.d.ts.map +1 -1
  54. package/dist/zod/FrameReceipt.js +11 -1
  55. package/dist/zod/FrameReceipt.js.map +1 -1
  56. package/dist/zod/FrameRequest.d.ts +40 -0
  57. package/dist/zod/FrameRequest.d.ts.map +1 -0
  58. package/dist/zod/FrameRequest.js +37 -0
  59. package/dist/zod/FrameRequest.js.map +1 -0
  60. package/dist/zod/FrameSignature.d.ts +21 -13
  61. package/dist/zod/FrameSignature.d.ts.map +1 -1
  62. package/dist/zod/FrameSignature.js +10 -7
  63. package/dist/zod/FrameSignature.js.map +1 -1
  64. package/dist/zod/RpcSchema.d.ts +470 -265
  65. package/dist/zod/RpcSchema.d.ts.map +1 -1
  66. package/dist/zod/Transaction.d.ts +104 -74
  67. package/dist/zod/Transaction.d.ts.map +1 -1
  68. package/dist/zod/Transaction.js +22 -15
  69. package/dist/zod/Transaction.js.map +1 -1
  70. package/dist/zod/TransactionEnvelope.d.ts +60 -34
  71. package/dist/zod/TransactionEnvelope.d.ts.map +1 -1
  72. package/dist/zod/TransactionReceipt.d.ts +42 -2
  73. package/dist/zod/TransactionReceipt.d.ts.map +1 -1
  74. package/dist/zod/TransactionRequest.d.ts +31 -21
  75. package/dist/zod/TransactionRequest.d.ts.map +1 -1
  76. package/dist/zod/TransactionRequest.js +10 -4
  77. package/dist/zod/TransactionRequest.js.map +1 -1
  78. package/dist/zod/TxEnvelopeEip8141.d.ts +44 -25
  79. package/dist/zod/TxEnvelopeEip8141.d.ts.map +1 -1
  80. package/dist/zod/TxEnvelopeEip8141.js +2 -0
  81. package/dist/zod/TxEnvelopeEip8141.js.map +1 -1
  82. package/dist/zod/internal/Frame.d.ts +8 -0
  83. package/dist/zod/internal/Frame.d.ts.map +1 -1
  84. package/dist/zod/internal/Frame.js +29 -0
  85. package/dist/zod/internal/Frame.js.map +1 -1
  86. package/dist/zod/internal/rpcSchemas/Eth.d.ts +472 -267
  87. package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
  88. package/dist/zod/internal/rpcSchemas/Eth.js +9 -0
  89. package/dist/zod/internal/rpcSchemas/Eth.js.map +1 -1
  90. package/dist/zod/internal/rpcSchemas/Wallet.d.ts +51 -21
  91. package/dist/zod/internal/rpcSchemas/Wallet.d.ts.map +1 -1
  92. package/dist/zod/tempo/RpcSchemaTempo.d.ts +68 -48
  93. package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
  94. package/dist/zod/tempo/Transaction.d.ts +52 -37
  95. package/dist/zod/tempo/Transaction.d.ts.map +1 -1
  96. package/dist/zod/z.d.ts +1 -0
  97. package/dist/zod/z.d.ts.map +1 -1
  98. package/dist/zod/z.js +1 -0
  99. package/dist/zod/z.js.map +1 -1
  100. package/package.json +11 -1
  101. package/src/core/Frame.ts +41 -33
  102. package/src/core/FrameReceipt.ts +30 -16
  103. package/src/core/FrameRequest.ts +78 -0
  104. package/src/core/FrameSignature.ts +64 -34
  105. package/src/core/Siwe.ts +21 -13
  106. package/src/core/Transaction.ts +52 -24
  107. package/src/core/TransactionRequest.ts +21 -7
  108. package/src/core/TxEnvelope.ts +16 -3
  109. package/src/core/TxEnvelopeEip8141.ts +69 -21
  110. package/src/core/_test/AbiConstructor.test.ts +2 -0
  111. package/src/core/_test/Frame.test-d.ts +16 -7
  112. package/src/core/_test/Frame.test.ts +52 -24
  113. package/src/core/_test/FrameReceipt.test.ts +15 -9
  114. package/src/core/_test/FrameRequest.test-d.ts +16 -0
  115. package/src/core/_test/FrameRequest.test.ts +41 -0
  116. package/src/core/_test/FrameRpc.test.ts +131 -0
  117. package/src/core/_test/FrameSignature.test-d.ts +20 -0
  118. package/src/core/_test/FrameSignature.test.ts +132 -11
  119. package/src/core/_test/RpcSchema.test-d.ts +45 -0
  120. package/src/core/_test/Siwe.test.ts +147 -0
  121. package/src/core/_test/TransactionEnvelope.test-d.ts +27 -0
  122. package/src/core/_test/TransactionEnvelope.test.ts +27 -1
  123. package/src/core/_test/TransactionReceipt.test.ts +32 -6
  124. package/src/core/_test/TransactionRequest.test-d.ts +10 -1
  125. package/src/core/_test/TransactionRequest.test.ts +31 -2
  126. package/src/core/_test/TxEnvelopeEip8141.test-d.ts +29 -2
  127. package/src/core/_test/TxEnvelopeEip8141.test.ts +548 -55
  128. package/src/core/_test/index.test.ts +1 -0
  129. package/src/core/internal/frameNonce.ts +61 -0
  130. package/src/core/internal/rpcSchemas/eth.ts +13 -4
  131. package/src/index.ts +22 -5
  132. package/src/version.ts +1 -1
  133. package/src/zod/Frame.ts +5 -5
  134. package/src/zod/FrameReceipt.ts +11 -1
  135. package/src/zod/FrameRequest.ts +46 -0
  136. package/src/zod/FrameSignature.ts +10 -7
  137. package/src/zod/Transaction.ts +46 -27
  138. package/src/zod/TransactionRequest.ts +33 -18
  139. package/src/zod/TxEnvelopeEip8141.ts +2 -0
  140. package/src/zod/_test/Frame.test.ts +13 -11
  141. package/src/zod/_test/FrameReceipt.test.ts +11 -4
  142. package/src/zod/_test/FrameRequest.test-d.ts +15 -0
  143. package/src/zod/_test/FrameRequest.test.ts +44 -0
  144. package/src/zod/_test/FrameSignature.test.ts +73 -9
  145. package/src/zod/_test/RpcSchema.test.ts +106 -0
  146. package/src/zod/_test/TransactionRequest.test.ts +61 -0
  147. package/src/zod/_test/TxEnvelopeEip8141.nonce.test.ts +174 -0
  148. package/src/zod/_test/TxEnvelopeEip8141.test-d.ts +29 -0
  149. package/src/zod/_test/TxEnvelopeEip8141.test.ts +3 -3
  150. package/src/zod/internal/Frame.ts +45 -0
  151. package/src/zod/internal/rpcSchemas/Eth.ts +20 -0
  152. package/src/zod/z.ts +1 -0
@@ -469,6 +469,7 @@ describe('frame receipts', () => {
469
469
  frameReceipts: [
470
470
  {
471
471
  executionGasUsed: '0x20000000000001',
472
+ gasUsed: '0x20000000000003',
472
473
  logs: [
473
474
  {
474
475
  address: '0x1111111111111111111111111111111111111111',
@@ -477,10 +478,22 @@ describe('frame receipts', () => {
477
478
  },
478
479
  ],
479
480
  stateGasUsed: '0x2',
480
- status: 1,
481
+ status: '0x1',
482
+ },
483
+ {
484
+ executionGasUsed: '0x3',
485
+ gasUsed: '0x3',
486
+ logs: [],
487
+ stateGasUsed: '0x0',
488
+ status: '0x0',
489
+ },
490
+ {
491
+ executionGasUsed: '0x0',
492
+ gasUsed: '0x0',
493
+ logs: [],
494
+ stateGasUsed: '0x0',
495
+ status: '0x2',
481
496
  },
482
- { executionGasUsed: '0x3', logs: [], stateGasUsed: '0x0', status: 0 },
483
- { executionGasUsed: '0x0', logs: [], stateGasUsed: '0x0', status: 2 },
484
497
  ],
485
498
  from: '0x1111111111111111111111111111111111111111',
486
499
  gasUsed: '0x20000000000001',
@@ -498,13 +511,26 @@ describe('frame receipts', () => {
498
511
  expect(receipt.payer).toBe(rpc.payer)
499
512
  expect(receipt.frameReceipts).toEqual([
500
513
  {
501
- gasUsed: 9007199254740993n,
514
+ executionGasUsed: 9007199254740993n,
515
+ gasUsed: 9007199254740995n,
502
516
  logs: rpc.frameReceipts[0]!.logs,
503
517
  stateGasUsed: 2n,
504
518
  status: 'success',
505
519
  },
506
- { gasUsed: 3n, logs: [], stateGasUsed: 0n, status: 'reverted' },
507
- { gasUsed: 0n, logs: [], stateGasUsed: 0n, status: 'skipped' },
520
+ {
521
+ executionGasUsed: 3n,
522
+ gasUsed: 3n,
523
+ logs: [],
524
+ stateGasUsed: 0n,
525
+ status: 'reverted',
526
+ },
527
+ {
528
+ executionGasUsed: 0n,
529
+ gasUsed: 0n,
530
+ logs: [],
531
+ stateGasUsed: 0n,
532
+ status: 'skipped',
533
+ },
508
534
  ])
509
535
  expect(TransactionReceipt.toRpc(receipt)).toMatchObject(rpc)
510
536
  expect(
@@ -139,7 +139,16 @@ describe('frame generics', () => {
139
139
 
140
140
  test('RPC types', () => {
141
141
  expectTypeOf<TransactionRequest.Rpc['frames']>().toEqualTypeOf<
142
- readonly Frame.Rpc[] | undefined
142
+ | readonly {
143
+ mode: `0x${string}`
144
+ flags?: `0x${string}` | undefined
145
+ data?: `0x${string}` | undefined
146
+ executionGas?: `0x${string}` | undefined
147
+ stateGas?: `0x${string}` | undefined
148
+ target?: `0x${string}` | null | undefined
149
+ value?: `0x${string}` | undefined
150
+ }[]
151
+ | undefined
143
152
  >()
144
153
  expectTypeOf<TransactionRequest.Rpc['signatures']>().toEqualTypeOf<
145
154
  readonly FrameSignature.Rpc[] | undefined
@@ -13,6 +13,21 @@ import { kzg } from '../../../test/kzg.js'
13
13
  import { anvilMainnet } from '../../../test/prool.js'
14
14
 
15
15
  describe('toRpc', () => {
16
+ test('preserves nonce keys without type or frames', () => {
17
+ const request = { nonceKeys: [1n, 2n], nonce: 0n }
18
+ const rpc = TransactionRequest.toRpc(request)
19
+ expect(rpc).toMatchInlineSnapshot(`
20
+ {
21
+ "nonce": "0x0",
22
+ "nonceKeys": [
23
+ "0x1",
24
+ "0x2",
25
+ ],
26
+ }
27
+ `)
28
+ expect(TransactionRequest.fromRpc(rpc)).toEqual(request)
29
+ })
30
+
16
31
  test('default', () => {
17
32
  const request = TransactionRequest.toRpc({
18
33
  to: '0x0000000000000000000000000000000000000000',
@@ -439,6 +454,19 @@ test('exports', () => {
439
454
  })
440
455
 
441
456
  describe('frame transactions', () => {
457
+ test('requires frames when nonce keys select a frame envelope', () => {
458
+ expect(() =>
459
+ TransactionRequest.toEnvelope({
460
+ chainId: 1,
461
+ from: '0x1111111111111111111111111111111111111111',
462
+ nonceKeys: [1n],
463
+ nonce: 0n,
464
+ }),
465
+ ).toThrowErrorMatchingInlineSnapshot(
466
+ '[Quantity.MissingFieldError: Missing required field `frames` on `TransactionRequest`.]',
467
+ )
468
+ })
469
+
442
470
  test('derives frame blob sidecars and replaces stale hashes', () => {
443
471
  const blobs = Blobs.from('0xdeadbeef')
444
472
  const request = {
@@ -466,7 +494,7 @@ describe('frame transactions', () => {
466
494
  test('round-trips frame requests and envelopes', () => {
467
495
  const envelope = TxEnvelopeEip8141.from({
468
496
  chainId: 8141,
469
- frames: [Frame.from({ gas: 50_000n, mode: 'verify' })],
497
+ frames: [Frame.from({ executionGas: 50_000n, mode: 'verify' })],
470
498
  sender: '0x1111111111111111111111111111111111111111',
471
499
  signatures: [FrameSignature.from('0xaabb')],
472
500
  })
@@ -474,8 +502,9 @@ describe('frame transactions', () => {
474
502
  const rpc = TransactionRequest.toRpc(request)
475
503
  expect(rpc.chainId).toBe('0x1fcd')
476
504
  expect(rpc.type).toBe('0x6')
505
+ expect(rpc.frames?.[0]?.executionGas).toBe('0xc350')
477
506
  expect(rpc.signatures).toEqual([
478
- { msg: '0x', scheme: 0, signature: '0xaabb' },
507
+ { msg: '0x', scheme: '0x0', signature: '0xaabb' },
479
508
  ])
480
509
  const decoded = TransactionRequest.fromRpc(rpc)
481
510
  expect(decoded.chainId).toBe(8141)
@@ -4,12 +4,12 @@ import { expectTypeOf, test } from 'vp/test'
4
4
  test('default', () => {
5
5
  const envelope = TxEnvelopeEip8141.from({
6
6
  chainId: 1,
7
- frames: [{ gas: 50000n }],
7
+ frames: [{ executionGas: 50000n }],
8
8
  sender: '0x1111111111111111111111111111111111111111',
9
9
  })
10
10
  expectTypeOf(envelope).toEqualTypeOf<{
11
11
  readonly chainId: 1
12
- readonly frames: readonly [{ readonly gas: 50000n }]
12
+ readonly frames: readonly [{ readonly executionGas: 50000n }]
13
13
  readonly sender: '0x1111111111111111111111111111111111111111'
14
14
  readonly type: 'eip8141'
15
15
  }>()
@@ -42,3 +42,30 @@ test('unsigned signature', () => {
42
42
  }>()
43
43
  expectTypeOf(envelope).toMatchTypeOf<TxEnvelopeEip8141.TxEnvelopeEip8141>()
44
44
  })
45
+
46
+ test('keyed nonce literals and numberish RPC input', () => {
47
+ const envelope = TxEnvelopeEip8141.from({
48
+ chainId: 1,
49
+ frames: [{}],
50
+ sender: '0x1111111111111111111111111111111111111111',
51
+ nonceKeys: [1n, 2n],
52
+ nonce: 3n,
53
+ })
54
+ expectTypeOf(envelope.nonceKeys).toEqualTypeOf<readonly [1n, 2n]>()
55
+ expectTypeOf(envelope.nonce).toEqualTypeOf<3n>()
56
+ expectTypeOf(TxEnvelopeEip8141.toRpc(envelope).nonceKeys).toEqualTypeOf<
57
+ readonly `0x${string}`[] | undefined
58
+ >()
59
+ expectTypeOf(
60
+ TxEnvelopeEip8141.toRpc({
61
+ ...envelope,
62
+ nonceKeys: ['0x1', 2],
63
+ nonce: '0x3',
64
+ }),
65
+ ).toEqualTypeOf<TxEnvelopeEip8141.Rpc>()
66
+ // @ts-expect-error decoded nonce keys are bigint
67
+ TxEnvelopeEip8141.from({ ...envelope, nonceKeys: [1] })
68
+ expectTypeOf<keyof TxEnvelopeEip8141.Rpc>()
69
+ .exclude<'nonceSeq'>()
70
+ .toEqualTypeOf<keyof TxEnvelopeEip8141.Rpc>()
71
+ })