ox 1.7.1 → 1.7.2

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 (121) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/core/Hash.js +1 -1
  3. package/dist/core/Hash.js.map +1 -1
  4. package/dist/tempo/KeyAuthorization.d.ts +1 -1
  5. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  6. package/dist/tempo/MultisigConfig.d.ts +151 -83
  7. package/dist/tempo/MultisigConfig.d.ts.map +1 -1
  8. package/dist/tempo/MultisigConfig.js +164 -86
  9. package/dist/tempo/MultisigConfig.js.map +1 -1
  10. package/dist/tempo/MultisigOperation.d.ts +324 -0
  11. package/dist/tempo/MultisigOperation.d.ts.map +1 -0
  12. package/dist/tempo/MultisigOperation.js +809 -0
  13. package/dist/tempo/MultisigOperation.js.map +1 -0
  14. package/dist/tempo/MultisigWitness.d.ts +106 -0
  15. package/dist/tempo/MultisigWitness.d.ts.map +1 -0
  16. package/dist/tempo/MultisigWitness.js +118 -0
  17. package/dist/tempo/MultisigWitness.js.map +1 -0
  18. package/dist/tempo/RpcSchemaTempo.d.ts +35 -0
  19. package/dist/tempo/RpcSchemaTempo.d.ts.map +1 -1
  20. package/dist/tempo/SignatureEnvelope.d.ts +60 -80
  21. package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
  22. package/dist/tempo/SignatureEnvelope.js +87 -146
  23. package/dist/tempo/SignatureEnvelope.js.map +1 -1
  24. package/dist/tempo/TransactionRequest.d.ts +9 -17
  25. package/dist/tempo/TransactionRequest.d.ts.map +1 -1
  26. package/dist/tempo/TransactionRequest.js +7 -7
  27. package/dist/tempo/TransactionRequest.js.map +1 -1
  28. package/dist/tempo/TxEnvelopeTempo.d.ts +3 -2
  29. package/dist/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  30. package/dist/tempo/TxEnvelopeTempo.js +3 -2
  31. package/dist/tempo/TxEnvelopeTempo.js.map +1 -1
  32. package/dist/tempo/index.d.ts +22 -2
  33. package/dist/tempo/index.d.ts.map +1 -1
  34. package/dist/tempo/index.js +22 -2
  35. package/dist/tempo/index.js.map +1 -1
  36. package/dist/zod/tempo/AuthorizationTempo.d.ts +110 -110
  37. package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
  38. package/dist/zod/tempo/KeyAuthorization.d.ts +90 -83
  39. package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
  40. package/dist/zod/tempo/MultisigConfig.d.ts +31 -2
  41. package/dist/zod/tempo/MultisigConfig.d.ts.map +1 -1
  42. package/dist/zod/tempo/MultisigConfig.js +26 -3
  43. package/dist/zod/tempo/MultisigConfig.js.map +1 -1
  44. package/dist/zod/tempo/MultisigOperation.d.ts +168 -0
  45. package/dist/zod/tempo/MultisigOperation.d.ts.map +1 -0
  46. package/dist/zod/tempo/MultisigOperation.js +65 -0
  47. package/dist/zod/tempo/MultisigOperation.js.map +1 -0
  48. package/dist/zod/tempo/MultisigWitness.d.ts +152 -0
  49. package/dist/zod/tempo/MultisigWitness.d.ts.map +1 -0
  50. package/dist/zod/tempo/MultisigWitness.js +76 -0
  51. package/dist/zod/tempo/MultisigWitness.js.map +1 -0
  52. package/dist/zod/tempo/RpcSchemaTempo.d.ts +607 -102
  53. package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
  54. package/dist/zod/tempo/RpcSchemaTempo.js +38 -0
  55. package/dist/zod/tempo/RpcSchemaTempo.js.map +1 -1
  56. package/dist/zod/tempo/SignatureEnvelope.d.ts +33 -33
  57. package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
  58. package/dist/zod/tempo/SignatureEnvelope.js +9 -16
  59. package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
  60. package/dist/zod/tempo/Transaction.d.ts +228 -222
  61. package/dist/zod/tempo/Transaction.d.ts.map +1 -1
  62. package/dist/zod/tempo/TransactionRequest.d.ts +379 -176
  63. package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
  64. package/dist/zod/tempo/TransactionRequest.js +11 -22
  65. package/dist/zod/tempo/TransactionRequest.js.map +1 -1
  66. package/dist/zod/tempo/TxEnvelopeTempo.d.ts +60 -48
  67. package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  68. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +15 -12
  69. package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
  70. package/dist/zod/tempo/z.d.ts +2 -0
  71. package/dist/zod/tempo/z.d.ts.map +1 -1
  72. package/dist/zod/tempo/z.js +2 -0
  73. package/dist/zod/tempo/z.js.map +1 -1
  74. package/package.json +21 -1
  75. package/src/core/Hash.ts +1 -1
  76. package/src/core/_test/Hash.test.ts +15 -0
  77. package/src/tempo/KeyAuthorization.test-d.ts +13 -1
  78. package/src/tempo/KeyAuthorization.test.ts +65 -0
  79. package/src/tempo/KeyAuthorization.ts +1 -1
  80. package/src/tempo/MultisigConfig.test-d.ts +52 -0
  81. package/src/tempo/MultisigConfig.test.ts +288 -227
  82. package/src/tempo/MultisigConfig.ts +275 -104
  83. package/src/tempo/MultisigOperation.test-d.ts +77 -0
  84. package/src/tempo/MultisigOperation.test.ts +1883 -0
  85. package/src/tempo/MultisigOperation.ts +1254 -0
  86. package/src/tempo/MultisigWitness.test-d.ts +42 -0
  87. package/src/tempo/MultisigWitness.test.ts +288 -0
  88. package/src/tempo/MultisigWitness.ts +210 -0
  89. package/src/tempo/RpcSchemaTempo.test-d.ts +56 -0
  90. package/src/tempo/RpcSchemaTempo.ts +37 -0
  91. package/src/tempo/SignatureEnvelope.test-d.ts +63 -46
  92. package/src/tempo/SignatureEnvelope.test.ts +523 -500
  93. package/src/tempo/SignatureEnvelope.ts +172 -242
  94. package/src/tempo/TransactionRequest.test-d.ts +11 -0
  95. package/src/tempo/TransactionRequest.test.ts +285 -33
  96. package/src/tempo/TransactionRequest.ts +15 -20
  97. package/src/tempo/TxEnvelopeTempo.test-d.ts +7 -0
  98. package/src/tempo/TxEnvelopeTempo.test.ts +25 -0
  99. package/src/tempo/TxEnvelopeTempo.ts +5 -3
  100. package/src/tempo/index.ts +22 -2
  101. package/src/tempo/multisig.e2e.test.ts +113 -86
  102. package/src/version.ts +1 -1
  103. package/src/zod/tempo/MultisigConfig.ts +29 -3
  104. package/src/zod/tempo/MultisigOperation.ts +69 -0
  105. package/src/zod/tempo/MultisigWitness.ts +101 -0
  106. package/src/zod/tempo/RpcSchemaTempo.ts +43 -0
  107. package/src/zod/tempo/SignatureEnvelope.ts +20 -38
  108. package/src/zod/tempo/TransactionRequest.ts +17 -26
  109. package/src/zod/tempo/_test/KeyAuthorization.test.ts +11 -0
  110. package/src/zod/tempo/_test/MultisigConfig.test-d.ts +13 -0
  111. package/src/zod/tempo/_test/MultisigConfig.test.ts +13 -2
  112. package/src/zod/tempo/_test/MultisigOperation.test-d.ts +27 -0
  113. package/src/zod/tempo/_test/MultisigOperation.test.ts +68 -0
  114. package/src/zod/tempo/_test/MultisigWitness.test-d.ts +13 -0
  115. package/src/zod/tempo/_test/MultisigWitness.test.ts +149 -0
  116. package/src/zod/tempo/_test/RpcSchemaTempo.test-d.ts +31 -0
  117. package/src/zod/tempo/_test/RpcSchemaTempo.test.ts +41 -0
  118. package/src/zod/tempo/_test/SignatureEnvelope.test-d.ts +1 -1
  119. package/src/zod/tempo/_test/SignatureEnvelope.test.ts +25 -34
  120. package/src/zod/tempo/_test/TransactionRequest.test.ts +176 -8
  121. package/src/zod/tempo/z.ts +2 -0
@@ -1,6 +1,7 @@
1
1
  import { expectTypeOf, test } from 'vp/test'
2
2
  import * as KeyAuthorization from './KeyAuthorization.js'
3
- import * as SignatureEnvelope from './SignatureEnvelope.js'
3
+ import * as MultisigConfig from './MultisigConfig.js'
4
+ import type * as SignatureEnvelope from './SignatureEnvelope.js'
4
5
 
5
6
  const authorization = {
6
7
  address: '0x1111111111111111111111111111111111111111',
@@ -19,6 +20,16 @@ const signature = {
19
20
 
20
21
  const multisig = {
21
22
  account: '0x2222222222222222222222222222222222222222',
23
+ config: MultisigConfig.from({
24
+ owners: [
25
+ {
26
+ owner: '0x1111111111111111111111111111111111111111',
27
+ weight: 1,
28
+ },
29
+ ],
30
+ threshold: 1,
31
+ version: 1n,
32
+ }),
22
33
  signatures: [signature],
23
34
  type: 'multisig',
24
35
  } as const satisfies SignatureEnvelope.Multisig
@@ -46,6 +57,7 @@ test('accepts multisig signatures', () => {
46
57
 
47
58
  const multisigRpc = {
48
59
  account: multisig.account,
60
+ config: MultisigConfig.toRpc(multisig.config),
49
61
  signatures: [
50
62
  {
51
63
  r: '0x01',
@@ -9,6 +9,7 @@ import {
9
9
  } from 'ox'
10
10
  import { describe, expect, test } from 'vp/test'
11
11
  import * as KeyAuthorization from './KeyAuthorization.js'
12
+ import * as MultisigConfig from './MultisigConfig.js'
12
13
  import * as Period from './Period.js'
13
14
  import * as SignatureEnvelope from './SignatureEnvelope.js'
14
15
 
@@ -55,6 +56,16 @@ const signature_webauthn = SignatureEnvelope.from({
55
56
 
56
57
  const signature_multisig = {
57
58
  account: address,
59
+ config: MultisigConfig.from({
60
+ owners: [
61
+ {
62
+ owner: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
63
+ weight: 1,
64
+ },
65
+ ],
66
+ threshold: 1,
67
+ version: 1n,
68
+ }),
58
69
  signatures: [SignatureEnvelope.from(signature_secp256k1)],
59
70
  type: 'multisig',
60
71
  } as const satisfies SignatureEnvelope.Multisig
@@ -1071,6 +1082,60 @@ describe('getSignPayload', () => {
1071
1082
  })
1072
1083
 
1073
1084
  describe('deserialize', () => {
1085
+ test('example: matches the frozen multisig witness vector', () => {
1086
+ const serialized =
1087
+ '0xf8f1f85382107980941eff47bc3a10a45d4b230b5d10e37751fe6aa718808080a0535353535353535353535353535353535353535353535353535353535353535380949dba7f426b711d4893c11611eacf7cc334e7146bb89a05f897949dba7f426b711d4893c11611eacf7cc334e7146bf83ba000000000000000000000000000000000000000000000000000000000000000008001d7d6947e5f4552091a69125d5dfcb7b8c2659029395bdf01f843b8412cfed9350faf80e4115e3c4c967356b80a8e6ee42e4a49ab953c8c8a3537d8d8359bf035a9bea18f32b0da7129cdce3ce701abc09ad8919b93da21a0d57e21451b' as const
1088
+ const authorization = KeyAuthorization.deserialize(serialized)
1089
+
1090
+ expect(authorization).toMatchInlineSnapshot(`
1091
+ {
1092
+ "account": "0x9dba7f426b711d4893c11611eacf7cc334e7146b",
1093
+ "address": "0x1eff47bc3a10a45d4b230b5d10e37751fe6aa718",
1094
+ "chainId": 4217n,
1095
+ "isAdmin": false,
1096
+ "signature": {
1097
+ "account": "0x9dba7f426b711d4893c11611eacf7cc334e7146b",
1098
+ "config": {
1099
+ "owners": [
1100
+ {
1101
+ "owner": "0x7e5f4552091a69125d5dfcb7b8c2659029395bdf",
1102
+ "weight": 1,
1103
+ },
1104
+ ],
1105
+ "salt": "0x0000000000000000000000000000000000000000000000000000000000000000",
1106
+ "threshold": 1,
1107
+ "version": 0n,
1108
+ },
1109
+ "signatures": [
1110
+ {
1111
+ "signature": {
1112
+ "r": "0x2cfed9350faf80e4115e3c4c967356b80a8e6ee42e4a49ab953c8c8a3537d8d8",
1113
+ "s": "0x359bf035a9bea18f32b0da7129cdce3ce701abc09ad8919b93da21a0d57e2145",
1114
+ "yParity": 0,
1115
+ },
1116
+ "type": "secp256k1",
1117
+ },
1118
+ ],
1119
+ "type": "multisig",
1120
+ },
1121
+ "type": "secp256k1",
1122
+ "witness": "0x5353535353535353535353535353535353535353535353535353535353535353",
1123
+ }
1124
+ `)
1125
+ expect(KeyAuthorization.serialize(authorization)).toBe(serialized)
1126
+ })
1127
+
1128
+ test('multisig', () => {
1129
+ const serialized = Rlp.fromHex([
1130
+ ['0x1', '0x', address],
1131
+ SignatureEnvelope.serialize(signature_multisig),
1132
+ ])
1133
+
1134
+ expect(KeyAuthorization.deserialize(serialized).signature).toEqual(
1135
+ signature_multisig,
1136
+ )
1137
+ })
1138
+
1074
1139
  test('default', () => {
1075
1140
  const authorization = KeyAuthorization.from({
1076
1141
  address,
@@ -151,7 +151,7 @@ type SignatureValue =
151
151
  | UnionPartialBy<Signature, 'prehash' | 'type'>
152
152
  | SignatureEnvelope.Secp256k1Flat
153
153
  | SignatureEnvelope.Serialized
154
- | SignatureEnvelope.from.MultisigFromInitialConfig
154
+ | SignatureEnvelope.from.MultisigFromConfig
155
155
 
156
156
  type BaseTuple = readonly [
157
157
  chainId: Hex.Hex,
@@ -0,0 +1,52 @@
1
+ import { expectTypeOf, test } from 'vp/test'
2
+ import * as MultisigConfig from './MultisigConfig.js'
3
+
4
+ const input = {
5
+ owners: [
6
+ {
7
+ owner: '0x1111111111111111111111111111111111111111',
8
+ weight: 1,
9
+ },
10
+ ],
11
+ threshold: 1,
12
+ } as const satisfies MultisigConfig.Input
13
+
14
+ test('from returns a complete configuration', () => {
15
+ const config = MultisigConfig.from(input)
16
+ const numeric = MultisigConfig.from({ ...input, version: 1 })
17
+ const zero = MultisigConfig.from({ ...input, version: 0 })
18
+
19
+ expectTypeOf(config).toMatchTypeOf<MultisigConfig.Config>()
20
+ expectTypeOf(config.version).toEqualTypeOf<0n>()
21
+ expectTypeOf(numeric.version).toEqualTypeOf<bigint>()
22
+ expectTypeOf(zero.version).toEqualTypeOf<0n>()
23
+ })
24
+
25
+ test('RPC configurations use hexadecimal versions', () => {
26
+ const rpc = MultisigConfig.toRpc(MultisigConfig.from(input))
27
+
28
+ expectTypeOf(rpc).toEqualTypeOf<MultisigConfig.Rpc>()
29
+ expectTypeOf(rpc.version).toEqualTypeOf<`0x${string}`>()
30
+ })
31
+
32
+ test('complete configurations require a version', () => {
33
+ // @ts-expect-error Complete configurations include their version.
34
+ const config: MultisigConfig.Config = input
35
+
36
+ expectTypeOf(config).toEqualTypeOf<MultisigConfig.Config>()
37
+ })
38
+
39
+ test('sign payloads take the version from config', () => {
40
+ MultisigConfig.getSignPayload({
41
+ account: '0x2222222222222222222222222222222222222222',
42
+ config: { version: 1 },
43
+ payload: '0x1234',
44
+ })
45
+
46
+ MultisigConfig.getSignPayload({
47
+ account: '0x2222222222222222222222222222222222222222',
48
+ // @ts-expect-error A configuration version is required.
49
+ config: {},
50
+ payload: '0x1234',
51
+ })
52
+ })