ox 0.14.37 → 0.14.39

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 (43) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/_cjs/tempo/MultisigConfig.js +71 -15
  3. package/_cjs/tempo/MultisigConfig.js.map +1 -1
  4. package/_cjs/tempo/MultisigOperation.js +241 -19
  5. package/_cjs/tempo/MultisigOperation.js.map +1 -1
  6. package/_cjs/tempo/SignatureEnvelope.js +71 -108
  7. package/_cjs/tempo/SignatureEnvelope.js.map +1 -1
  8. package/_cjs/version.js +1 -1
  9. package/_esm/tempo/MultisigConfig.js +140 -71
  10. package/_esm/tempo/MultisigConfig.js.map +1 -1
  11. package/_esm/tempo/MultisigOperation.js +331 -19
  12. package/_esm/tempo/MultisigOperation.js.map +1 -1
  13. package/_esm/tempo/SignatureEnvelope.js +84 -143
  14. package/_esm/tempo/SignatureEnvelope.js.map +1 -1
  15. package/_esm/tempo/index.js +2 -2
  16. package/_esm/version.js +1 -1
  17. package/_types/tempo/KeyAuthorization.d.ts +1 -1
  18. package/_types/tempo/KeyAuthorization.d.ts.map +1 -1
  19. package/_types/tempo/MultisigConfig.d.ts +137 -73
  20. package/_types/tempo/MultisigConfig.d.ts.map +1 -1
  21. package/_types/tempo/MultisigOperation.d.ts +169 -1
  22. package/_types/tempo/MultisigOperation.d.ts.map +1 -1
  23. package/_types/tempo/SignatureEnvelope.d.ts +81 -75
  24. package/_types/tempo/SignatureEnvelope.d.ts.map +1 -1
  25. package/_types/tempo/index.d.ts +2 -2
  26. package/_types/version.d.ts +1 -1
  27. package/package.json +6 -1
  28. package/tempo/KeyAuthorization.test-d.ts +12 -0
  29. package/tempo/KeyAuthorization.test.ts +54 -0
  30. package/tempo/KeyAuthorization.ts +1 -1
  31. package/tempo/MultisigConfig.test-d/package.json +6 -0
  32. package/tempo/MultisigConfig.test-d.ts +52 -0
  33. package/tempo/MultisigConfig.test.ts +291 -263
  34. package/tempo/MultisigConfig.ts +250 -95
  35. package/tempo/MultisigOperation.test-d.ts +25 -0
  36. package/tempo/MultisigOperation.test.ts +754 -22
  37. package/tempo/MultisigOperation.ts +548 -17
  38. package/tempo/SignatureEnvelope.test-d.ts +57 -40
  39. package/tempo/SignatureEnvelope.test.ts +523 -480
  40. package/tempo/SignatureEnvelope.ts +250 -257
  41. package/tempo/index.ts +2 -2
  42. package/tempo/multisig.e2e.test.ts +113 -86
  43. package/version.ts +1 -1
@@ -2,12 +2,6 @@ import * as Address from '../core/Address.js';
2
2
  import * as Errors from '../core/Errors.js';
3
3
  import * as Hash from '../core/Hash.js';
4
4
  import * as Hex from '../core/Hex.js';
5
- /** Maximum number of owners allowed in a native multisig config. */
6
- export const maxOwners = 48;
7
- /** Maximum threshold accepted by a native multisig config. */
8
- export const maxThreshold = 0xff;
9
- /** Maximum number of owner approvals in a native multisig signature. */
10
- export const maxSignatures = 8;
11
5
  /**
12
6
  * Maximum number of native multisig signatures in one nested authorization
13
7
  * path, including the top-level transaction signature.
@@ -15,18 +9,28 @@ export const maxSignatures = 8;
15
9
  export const maxNestingDepth = 2;
16
10
  /** Maximum encoded byte length for one primitive owner approval. */
17
11
  export const maxOwnerSignatureBytes = 2049;
12
+ /** Maximum number of owners allowed in a native multisig config. */
13
+ export const maxOwners = 48;
14
+ /** Maximum number of owner approvals in a native multisig signature. */
15
+ export const maxSignatures = 8;
16
+ /** Maximum threshold accepted by a native multisig config. */
17
+ export const maxThreshold = 0xff;
18
+ /** Maximum version accepted by a native multisig config. */
19
+ export const maxVersion = 2n ** 64n - 1n;
18
20
  /** Tempo signature type byte for native multisig signatures. */
19
21
  export const signatureTypeByte = '0x05';
20
22
  /** Zero 32-byte salt (the default when no salt is provided). */
21
23
  export const zeroSalt = `0x${'00'.repeat(32)}`;
22
24
  /** Domain prefix for the native multisig account address derivation. */
23
25
  const accountDomain = 'tempo:multisig:account';
26
+ /** Domain prefix for native multisig configuration commitments. */
27
+ const configDomain = 'tempo:multisig:config';
24
28
  /** Domain prefix for native multisig owner approvals. */
25
29
  const signatureDomain = 'tempo:multisig:signature';
26
30
  /**
27
31
  * Asserts that a native multisig {@link ox#MultisigConfig.Config} is valid.
28
32
  *
29
- * Mirrors the Tempo `InitMultisig::validate` rules: owners non-empty and
33
+ * Mirrors the Tempo configuration rules: owners non-empty and
30
34
  * `<= maxOwners`, strictly ascending unique nonzero owner addresses, nonzero
31
35
  * integer owner weights, integer `threshold` between `1` and `maxThreshold`,
32
36
  * total weight `<= 255` (u8 max), and a threshold reachable by at most
@@ -47,9 +51,10 @@ const signatureDomain = 'tempo:multisig:signature';
47
51
  * @param config - The multisig config.
48
52
  */
49
53
  export function assert(config) {
50
- const { salt, threshold, owners } = config;
54
+ const { owners, salt, threshold, version = 0n } = config;
51
55
  if (typeof salt !== 'undefined' && Hex.size(salt) !== 32)
52
56
  throw new InvalidConfigError({ reason: 'salt must be 32 bytes' });
57
+ assertVersion(version);
53
58
  if (owners.length === 0)
54
59
  throw new InvalidConfigError({ reason: 'owners cannot be empty' });
55
60
  if (owners.length > maxOwners)
@@ -99,38 +104,45 @@ export function assert(config) {
99
104
  reason: `threshold exceeds weight reachable by ${maxSignatures} owner signatures`,
100
105
  });
101
106
  }
107
+ // eslint-disable-next-line jsdoc/require-jsdoc
108
+ export function from(config) {
109
+ const version = config.version ?? 0n;
110
+ assertVersion(version);
111
+ const owners = [...config.owners].sort((a, b) => Hex.toBigInt(a.owner) < Hex.toBigInt(b.owner) ? -1 : 1);
112
+ const normalized = {
113
+ owners,
114
+ salt: config.salt ? Hex.padLeft(config.salt, 32) : zeroSalt,
115
+ threshold: config.threshold,
116
+ version: BigInt(version),
117
+ };
118
+ assert(normalized);
119
+ return normalized;
120
+ }
102
121
  /**
103
- * Normalizes a native multisig {@link ox#MultisigConfig.Config}.
104
- *
105
- * Sorts owners into strictly ascending `owner` address order (the canonical
106
- * form required for account derivation) and asserts the config is valid.
122
+ * Converts a JSON-RPC multisig configuration to its domain representation.
107
123
  *
108
124
  * @example
109
125
  * ```ts twoslash
110
126
  * import { MultisigConfig } from 'ox/tempo'
111
127
  *
112
- * const config = MultisigConfig.from({
113
- * threshold: 2,
128
+ * const config = MultisigConfig.fromRpc({
114
129
  * owners: [
115
- * { owner: '0x2222222222222222222222222222222222222222', weight: 1 },
116
130
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
117
131
  * ],
132
+ * salt: `0x${'00'.repeat(32)}`,
133
+ * threshold: 1,
134
+ * version: '0x0',
118
135
  * })
119
- * // owners are now sorted ascending by address
120
136
  * ```
121
137
  *
122
- * @param config - The multisig config.
123
- * @returns The normalized multisig config.
138
+ * @param config - The JSON-RPC multisig configuration.
139
+ * @returns The normalized multisig configuration.
124
140
  */
125
- export function from(config) {
126
- const owners = [...config.owners].sort((a, b) => Hex.toBigInt(a.owner) < Hex.toBigInt(b.owner) ? -1 : 1);
127
- const normalized = {
128
- salt: config.salt ? Hex.padLeft(config.salt, 32) : zeroSalt,
129
- threshold: config.threshold,
130
- owners,
131
- };
132
- assert(normalized);
133
- return normalized;
141
+ export function fromRpc(config) {
142
+ return from({
143
+ ...config,
144
+ version: Hex.toBigInt(config.version),
145
+ });
134
146
  }
135
147
  /**
136
148
  * Converts an RLP {@link ox#MultisigConfig.Tuple} back to a
@@ -142,6 +154,7 @@ export function from(config) {
142
154
  *
143
155
  * const config = MultisigConfig.fromTuple([
144
156
  * `0x${'00'.repeat(32)}`,
157
+ * '0x',
145
158
  * '0x01',
146
159
  * [['0x1111111111111111111111111111111111111111', '0x01']],
147
160
  * ])
@@ -151,10 +164,8 @@ export function from(config) {
151
164
  * @returns The multisig config.
152
165
  */
153
166
  export function fromTuple(tuple) {
154
- const [salt, threshold, owners] = tuple;
167
+ const [salt, version, threshold, owners] = tuple;
155
168
  return {
156
- salt: salt && salt !== '0x' ? Hex.padLeft(salt, 32) : zeroSalt,
157
- threshold: threshold === '0x' ? 0 : Hex.toNumber(threshold),
158
169
  owners: owners.map((owner) => {
159
170
  const [ownerAddress, weight] = owner;
160
171
  return {
@@ -162,6 +173,9 @@ export function fromTuple(tuple) {
162
173
  weight: !weight || weight === '0x' ? 0 : Hex.toNumber(weight),
163
174
  };
164
175
  }),
176
+ salt: salt && salt !== '0x' ? Hex.padLeft(salt, 32) : zeroSalt,
177
+ threshold: threshold === '0x' ? 0 : Hex.toNumber(threshold),
178
+ version: version === '0x' ? 0n : Hex.toBigInt(version),
165
179
  };
166
180
  }
167
181
  /**
@@ -170,28 +184,32 @@ export function fromTuple(tuple) {
170
184
  * Preimage (fixed-width big-endian, **not** RLP):
171
185
  * `keccak256("tempo:multisig:account" || salt || u8(threshold) || u8(owners.length) || (owner || u8(weight)) for each owner)[12:32]`.
172
186
  *
173
- * The address is derived once from the initial (bootstrap) config and never
174
- * changes — config updates do not affect it.
187
+ * The address is derived once from the initial version-0 config. Config
188
+ * updates do not change it.
175
189
  *
176
190
  * @example
177
191
  * ```ts twoslash
178
192
  * import { MultisigConfig } from 'ox/tempo'
179
193
  *
180
194
  * const initialConfig = MultisigConfig.from({
181
- * threshold: 1,
182
195
  * owners: [
183
196
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
184
197
  * ],
198
+ * threshold: 1,
185
199
  * })
186
200
  *
187
201
  * const address = MultisigConfig.getAddress(initialConfig)
188
202
  * ```
189
203
  *
190
- * @param config - The initial (bootstrap) multisig config.
204
+ * @param config - The initial multisig config.
191
205
  * @returns The multisig account address.
192
206
  */
193
207
  export function getAddress(config) {
194
208
  assert(config);
209
+ if (BigInt(config.version ?? 0) !== 0n)
210
+ throw new InvalidConfigError({
211
+ reason: 'account address requires version zero',
212
+ });
195
213
  const hash = Hash.keccak256(Hex.concat(Hex.fromString(accountDomain), Hex.padLeft(config.salt ?? zeroSalt, 32), Hex.fromNumber(config.threshold, { size: 1 }), Hex.fromNumber(config.owners.length, { size: 1 }), ...config.owners.flatMap((owner) => [
196
214
  owner.owner,
197
215
  Hex.fromNumber(owner.weight, { size: 1 }),
@@ -199,8 +217,41 @@ export function getAddress(config) {
199
217
  const account = Address.from(Hex.slice(hash, 12, 32));
200
218
  if (Hex.toBigInt(account) === 0n)
201
219
  throw new InvalidConfigError({ reason: 'derived account cannot be zero' });
220
+ if (config.owners.some((owner) => Address.isEqual(owner.owner, account)))
221
+ throw new InvalidConfigError({
222
+ reason: 'derived account cannot be an owner',
223
+ });
202
224
  return account;
203
225
  }
226
+ /**
227
+ * Computes the commitment for a native multisig configuration.
228
+ *
229
+ * The commitment uses raw fixed-width fields, not RLP or ABI encoding:
230
+ * `keccak256("tempo:multisig:config" || salt || uint64be(version) || uint8(threshold) || uint8(owners.length) || owners)`.
231
+ *
232
+ * @example
233
+ * ```ts twoslash
234
+ * import { MultisigConfig } from 'ox/tempo'
235
+ *
236
+ * const commitment = MultisigConfig.getCommitment({
237
+ * owners: [
238
+ * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
239
+ * ],
240
+ * threshold: 1,
241
+ * version: 1n,
242
+ * })
243
+ * ```
244
+ *
245
+ * @param config - The complete multisig configuration.
246
+ * @returns The configuration commitment.
247
+ */
248
+ export function getCommitment(config) {
249
+ assert(config);
250
+ return Hash.keccak256(Hex.concat(Hex.fromString(configDomain), Hex.padLeft(config.salt ?? zeroSalt, 32), Hex.fromNumber(config.version ?? 0n, { size: 8 }), Hex.fromNumber(config.threshold, { size: 1 }), Hex.fromNumber(config.owners.length, { size: 1 }), ...config.owners.flatMap((owner) => [
251
+ owner.owner,
252
+ Hex.fromNumber(owner.weight, { size: 1 }),
253
+ ])));
254
+ }
204
255
  /**
205
256
  * Computes the digest a native multisig owner approves (signs).
206
257
  *
@@ -208,9 +259,9 @@ export function getAddress(config) {
208
259
  * where `inner_digest` is the transaction sign payload
209
260
  * ({@link ox#TxEnvelopeTempo.(getSignPayload:function)}).
210
261
  *
211
- * The digest is keyed on the permanent `account` derived from the initial
212
- * (bootstrap) config and the current config `version`. Bootstrap approvals use
213
- * version `0n`, which is also the default; each config update increments it.
262
+ * The digest is keyed on the permanent `account` and the supplied config
263
+ * version. Initial approvals use version `0n`; each config update increments
264
+ * it.
214
265
  *
215
266
  * For a nested multisig owner approval, the parent digest becomes the nested
216
267
  * approval's `payload`, with the nested multisig `account`.
@@ -219,11 +270,11 @@ export function getAddress(config) {
219
270
  * ```ts twoslash
220
271
  * import { MultisigConfig, TxEnvelopeTempo } from 'ox/tempo'
221
272
  *
222
- * const initialConfig = MultisigConfig.from({
223
- * threshold: 1,
273
+ * const config = MultisigConfig.from({
224
274
  * owners: [
225
275
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
226
276
  * ],
277
+ * threshold: 1,
227
278
  * })
228
279
  *
229
280
  * const envelope = TxEnvelopeTempo.from({
@@ -232,52 +283,54 @@ export function getAddress(config) {
232
283
  * })
233
284
  *
234
285
  * const digest = MultisigConfig.getSignPayload({
286
+ * account: MultisigConfig.getAddress(config),
287
+ * config,
235
288
  * payload: TxEnvelopeTempo.getSignPayload(envelope),
236
- * initialConfig,
237
289
  * })
238
290
  * ```
239
291
  *
240
- * @example
241
- * ### From `account`
242
- *
243
- * If you already have the permanent `account` (for example, recovered from a
244
- * stored envelope), pass it directly:
292
+ * @param value - The digest derivation parameters.
293
+ * @returns The owner approval digest.
294
+ */
295
+ export function getSignPayload(value) {
296
+ const { account, config, payload } = value;
297
+ assertVersion(config.version);
298
+ return Hash.keccak256(Hex.concat(Hex.fromString(signatureDomain), Hex.from(payload), account, Hex.fromNumber(config.version ?? 0n, { size: 8 })));
299
+ }
300
+ /**
301
+ * Converts a multisig configuration to its JSON-RPC representation.
245
302
  *
303
+ * @example
246
304
  * ```ts twoslash
247
- * import { MultisigConfig, TxEnvelopeTempo } from 'ox/tempo'
305
+ * import { MultisigConfig } from 'ox/tempo'
248
306
  *
249
- * const initialConfig = MultisigConfig.from({
250
- * threshold: 1,
307
+ * const config = MultisigConfig.toRpc({
251
308
  * owners: [
252
309
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
253
310
  * ],
254
- * })
255
- * const account = MultisigConfig.getAddress(initialConfig)
256
- *
257
- * const envelope = TxEnvelopeTempo.from({ chainId: 1, calls: [] })
258
- *
259
- * const digest = MultisigConfig.getSignPayload({
260
- * payload: TxEnvelopeTempo.getSignPayload(envelope),
261
- * account,
262
- * version: 1n
311
+ * threshold: 1,
263
312
  * })
264
313
  * ```
265
314
  *
266
- * @param value - The digest derivation parameters.
267
- * @returns The owner approval digest.
315
+ * @param config - The multisig configuration.
316
+ * @returns The JSON-RPC multisig configuration.
268
317
  */
269
- export function getSignPayload(value) {
270
- const { payload, version = 0n } = value;
271
- const account = 'account' in value && value.account
272
- ? value.account
273
- : getAddress(value.initialConfig);
274
- return Hash.keccak256(Hex.concat(Hex.fromString(signatureDomain), Hex.from(payload), account, Hex.fromNumber(version, { size: 8 })));
318
+ export function toRpc(config) {
319
+ const value = from(config);
320
+ return {
321
+ owners: value.owners.map((owner) => ({
322
+ owner: owner.owner,
323
+ weight: Number(owner.weight),
324
+ })),
325
+ salt: value.salt,
326
+ threshold: Number(value.threshold),
327
+ version: Hex.fromNumber(value.version),
328
+ };
275
329
  }
276
330
  /**
277
- * Converts a {@link ox#MultisigConfig.Config} to its RLP tuple form (carried
278
- * by the multisig signature `init`).
331
+ * Converts a {@link ox#MultisigConfig.Config} to its RLP tuple form.
279
332
  *
280
- * Tuple shape: `[salt, threshold, [[owner, weight], ...]]`. The
333
+ * Tuple shape: `[salt, version, threshold, [[owner, weight], ...]]`. The
281
334
  * 32-byte `salt` encodes as a full fixed-width string; other integers use
282
335
  * canonical RLP encoding (zero values encode as `0x`).
283
336
  *
@@ -286,10 +339,10 @@ export function getSignPayload(value) {
286
339
  * import { MultisigConfig } from 'ox/tempo'
287
340
  *
288
341
  * const tuple = MultisigConfig.toTuple({
289
- * threshold: 1,
290
342
  * owners: [
291
343
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
292
344
  * ],
345
+ * threshold: 1,
293
346
  * })
294
347
  * ```
295
348
  *
@@ -302,7 +355,13 @@ export function toTuple(config) {
302
355
  // `salt` is a fixed 32-byte value: it RLP-encodes as a full 32-byte string
303
356
  // (including the zero salt), never trimmed like an integer.
304
357
  const salt = config.salt ? Hex.padLeft(config.salt, 32) : zeroSalt;
305
- return [salt, Hex.fromNumber(config.threshold), owners];
358
+ const version = BigInt(config.version ?? 0);
359
+ return [
360
+ salt,
361
+ version === 0n ? '0x' : Hex.fromNumber(version),
362
+ Hex.fromNumber(config.threshold),
363
+ owners,
364
+ ];
306
365
  }
307
366
  /**
308
367
  * Validates a native multisig {@link ox#MultisigConfig.Config}. Returns `true`
@@ -313,10 +372,10 @@ export function toTuple(config) {
313
372
  * import { MultisigConfig } from 'ox/tempo'
314
373
  *
315
374
  * const valid = MultisigConfig.validate({
316
- * threshold: 1,
317
375
  * owners: [
318
376
  * { owner: '0x1111111111111111111111111111111111111111', weight: 1 },
319
377
  * ],
378
+ * threshold: 1,
320
379
  * })
321
380
  * // @log: true
322
381
  * ```
@@ -345,4 +404,14 @@ export class InvalidConfigError extends Errors.BaseError {
345
404
  });
346
405
  }
347
406
  }
407
+ /** @internal */
408
+ function assertVersion(version) {
409
+ if ((typeof version !== 'bigint' && typeof version !== 'number') ||
410
+ (typeof version === 'number' && !Number.isSafeInteger(version)) ||
411
+ BigInt(version) < 0n ||
412
+ BigInt(version) > maxVersion)
413
+ throw new InvalidConfigError({
414
+ reason: 'version must be an unsigned 64-bit integer',
415
+ });
416
+ }
348
417
  //# sourceMappingURL=MultisigConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultisigConfig.js","sourceRoot":"","sources":["../../tempo/MultisigConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MultisigConfig.js","sourceRoot":"","sources":["../../tempo/MultisigConfig.ts"],"names":[],"mappings":"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"}