ox 0.14.39 → 0.14.40
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.
- package/CHANGELOG.md +6 -0
- package/_cjs/tempo/MultisigOperation.js +10 -8
- package/_cjs/tempo/MultisigOperation.js.map +1 -1
- package/_cjs/tempo/MultisigWitness.js +92 -0
- package/_cjs/tempo/MultisigWitness.js.map +1 -0
- package/_cjs/tempo/TransactionRequest.js +7 -1
- package/_cjs/tempo/TransactionRequest.js.map +1 -1
- package/_cjs/tempo/index.js +2 -1
- package/_cjs/tempo/index.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_esm/tempo/MultisigOperation.js +10 -8
- package/_esm/tempo/MultisigOperation.js.map +1 -1
- package/_esm/tempo/MultisigWitness.js +123 -0
- package/_esm/tempo/MultisigWitness.js.map +1 -0
- package/_esm/tempo/TransactionRequest.js +7 -1
- package/_esm/tempo/TransactionRequest.js.map +1 -1
- package/_esm/tempo/index.js +9 -0
- package/_esm/tempo/index.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_types/tempo/MultisigOperation.d.ts.map +1 -1
- package/_types/tempo/MultisigWitness.d.ts +106 -0
- package/_types/tempo/MultisigWitness.d.ts.map +1 -0
- package/_types/tempo/TransactionRequest.d.ts +6 -3
- package/_types/tempo/TransactionRequest.d.ts.map +1 -1
- package/_types/tempo/index.d.ts +9 -0
- package/_types/tempo/index.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/package.json +16 -1
- package/tempo/MultisigOperation.test.ts +87 -9
- package/tempo/MultisigOperation.ts +10 -8
- package/tempo/MultisigWitness/package.json +6 -0
- package/tempo/MultisigWitness.test-d/package.json +6 -0
- package/tempo/MultisigWitness.test-d.ts +42 -0
- package/tempo/MultisigWitness.test.ts +289 -0
- package/tempo/MultisigWitness.ts +210 -0
- package/tempo/RpcSchemaTempo.test-d.ts +25 -0
- package/tempo/TransactionRequest.test-d/package.json +6 -0
- package/tempo/TransactionRequest.test-d.ts +24 -0
- package/tempo/TransactionRequest.test.ts +102 -1
- package/tempo/TransactionRequest.ts +12 -2
- package/tempo/index.ts +9 -0
- package/version.ts +1 -1
|
@@ -1,6 +1,74 @@
|
|
|
1
|
-
import { TransactionRequest } from 'ox/tempo'
|
|
1
|
+
import { type MultisigWitness, TransactionRequest } from 'ox/tempo'
|
|
2
2
|
import { describe, expect, test } from 'vitest'
|
|
3
3
|
|
|
4
|
+
const multisigWitnessRpc = {
|
|
5
|
+
account: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
|
6
|
+
approvals: [
|
|
7
|
+
{
|
|
8
|
+
keyType: 'secp256k1',
|
|
9
|
+
owner: '0x1111111111111111111111111111111111111111',
|
|
10
|
+
type: 'primitive',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
type: 'multisig',
|
|
14
|
+
witness: {
|
|
15
|
+
account: '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
|
16
|
+
approvals: [
|
|
17
|
+
{
|
|
18
|
+
keyData: '0x0578',
|
|
19
|
+
keyType: 'webAuthn',
|
|
20
|
+
owner: '0x2222222222222222222222222222222222222222',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
config: {
|
|
24
|
+
owners: [
|
|
25
|
+
{
|
|
26
|
+
owner: '0x2222222222222222222222222222222222222222',
|
|
27
|
+
weight: 1,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
salt: `0x${'22'.repeat(32)}`,
|
|
31
|
+
threshold: 1,
|
|
32
|
+
version: 1,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
config: {
|
|
38
|
+
owners: [
|
|
39
|
+
{
|
|
40
|
+
owner: '0x1111111111111111111111111111111111111111',
|
|
41
|
+
weight: 1,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
owner: '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
|
45
|
+
weight: 1,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
salt: `0x${'11'.repeat(32)}`,
|
|
49
|
+
threshold: 2,
|
|
50
|
+
version: 0,
|
|
51
|
+
},
|
|
52
|
+
} as const satisfies MultisigWitness.Rpc
|
|
53
|
+
|
|
54
|
+
const multisigWitness = {
|
|
55
|
+
...multisigWitnessRpc,
|
|
56
|
+
approvals: [
|
|
57
|
+
multisigWitnessRpc.approvals[0],
|
|
58
|
+
{
|
|
59
|
+
...multisigWitnessRpc.approvals[1],
|
|
60
|
+
witness: {
|
|
61
|
+
...multisigWitnessRpc.approvals[1].witness,
|
|
62
|
+
config: {
|
|
63
|
+
...multisigWitnessRpc.approvals[1].witness.config,
|
|
64
|
+
version: 1n,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
config: { ...multisigWitnessRpc.config, version: 0n },
|
|
70
|
+
} as const satisfies MultisigWitness.MultisigWitness
|
|
71
|
+
|
|
4
72
|
describe('fromRpc', () => {
|
|
5
73
|
test('default', () => {
|
|
6
74
|
const request = TransactionRequest.fromRpc({
|
|
@@ -69,6 +137,21 @@ describe('fromRpc', () => {
|
|
|
69
137
|
expect(request.nonceKey).toBe(255n)
|
|
70
138
|
})
|
|
71
139
|
|
|
140
|
+
test('behavior: multisig witness', () => {
|
|
141
|
+
const request = TransactionRequest.fromRpc({
|
|
142
|
+
from: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
|
143
|
+
multisigWitness: multisigWitnessRpc,
|
|
144
|
+
type: '0x76',
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
expect(request.multisigWitness?.config.version).toBe(0n)
|
|
148
|
+
const nested = request.multisigWitness?.approvals[1]
|
|
149
|
+
expect(nested?.type).toBe('multisig')
|
|
150
|
+
if (nested?.type !== 'multisig') throw new Error('expected multisig')
|
|
151
|
+
expect(nested.witness.config.version).toBe(1n)
|
|
152
|
+
expect(nested.witness.approvals[0]?.keyType).toBe('webAuthn')
|
|
153
|
+
})
|
|
154
|
+
|
|
72
155
|
test('behavior: empty', () => {
|
|
73
156
|
const request = TransactionRequest.fromRpc({})
|
|
74
157
|
expect(request).toMatchInlineSnapshot('{}')
|
|
@@ -122,6 +205,20 @@ describe('toRpc', () => {
|
|
|
122
205
|
}
|
|
123
206
|
`)
|
|
124
207
|
})
|
|
208
|
+
|
|
209
|
+
test('behavior: multisig witness', () => {
|
|
210
|
+
const request = TransactionRequest.toRpc({
|
|
211
|
+
from: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
|
212
|
+
multisigWitness,
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
expect(request.multisigWitness?.config.version).toBe(0)
|
|
216
|
+
const nested = request.multisigWitness?.approvals[1]
|
|
217
|
+
expect(nested?.type).toBe('multisig')
|
|
218
|
+
if (nested?.type !== 'multisig') throw new Error('expected multisig')
|
|
219
|
+
expect(nested.witness.config.version).toBe(1)
|
|
220
|
+
expect(request.type).toBe('0x76')
|
|
221
|
+
})
|
|
125
222
|
})
|
|
126
223
|
|
|
127
224
|
describe('roundtrip', () => {
|
|
@@ -144,6 +241,7 @@ describe('roundtrip', () => {
|
|
|
144
241
|
nonceKey: 255n,
|
|
145
242
|
gas: 100000n,
|
|
146
243
|
maxFeePerGas: 1000000000n,
|
|
244
|
+
multisigWitness,
|
|
147
245
|
}
|
|
148
246
|
|
|
149
247
|
const rpc = TransactionRequest.toRpc(original)
|
|
@@ -164,6 +262,7 @@ describe('roundtrip', () => {
|
|
|
164
262
|
expect(converted.nonceKey).toBe(original.nonceKey)
|
|
165
263
|
expect(converted.gas).toBe(original.gas)
|
|
166
264
|
expect(converted.maxFeePerGas).toBe(original.maxFeePerGas)
|
|
265
|
+
expect(converted.multisigWitness).toEqual(original.multisigWitness)
|
|
167
266
|
expect(converted.type).toBe('tempo')
|
|
168
267
|
})
|
|
169
268
|
|
|
@@ -181,6 +280,7 @@ describe('roundtrip', () => {
|
|
|
181
280
|
validAfter: '0x32',
|
|
182
281
|
nonceKey: '0xff',
|
|
183
282
|
gas: '0x186a0',
|
|
283
|
+
multisigWitness: multisigWitnessRpc,
|
|
184
284
|
type: '0x76',
|
|
185
285
|
}
|
|
186
286
|
|
|
@@ -193,6 +293,7 @@ describe('roundtrip', () => {
|
|
|
193
293
|
expect(rpc.validAfter).toBe(original.validAfter)
|
|
194
294
|
expect(rpc.nonceKey).toBe(original.nonceKey)
|
|
195
295
|
expect(rpc.gas).toBe(original.gas)
|
|
296
|
+
expect(rpc.multisigWitness).toEqual(original.multisigWitness)
|
|
196
297
|
expect(rpc.type).toBe('0x76')
|
|
197
298
|
})
|
|
198
299
|
})
|
|
@@ -4,6 +4,7 @@ import type { Compute } from '../core/internal/types.js'
|
|
|
4
4
|
import * as ox_TransactionRequest from '../core/TransactionRequest.js'
|
|
5
5
|
import * as AuthorizationTempo from './AuthorizationTempo.js'
|
|
6
6
|
import * as KeyAuthorization from './KeyAuthorization.js'
|
|
7
|
+
import * as MultisigWitness from './MultisigWitness.js'
|
|
7
8
|
import * as TempoAddress from './TempoAddress.js'
|
|
8
9
|
import * as TokenId from './TokenId.js'
|
|
9
10
|
import * as Transaction from './Transaction.js'
|
|
@@ -38,6 +39,7 @@ export type TransactionRequest<
|
|
|
38
39
|
keyType?: KeyType | undefined
|
|
39
40
|
feePayer?: boolean | undefined
|
|
40
41
|
feeToken?: TokenId.TokenIdOrAddress<addressType> | undefined
|
|
42
|
+
multisigWitness?: MultisigWitness.MultisigWitness<bigintType> | undefined
|
|
41
43
|
nonceKey?: 'random' | bigintType | undefined
|
|
42
44
|
validBefore?: numberType | undefined
|
|
43
45
|
validAfter?: numberType | undefined
|
|
@@ -47,11 +49,12 @@ export type TransactionRequest<
|
|
|
47
49
|
/** RPC representation of a {@link ox#TransactionRequest.TransactionRequest}. */
|
|
48
50
|
export type Rpc = Omit<
|
|
49
51
|
TransactionRequest<Hex.Hex, Hex.Hex, string, Hex.Hex>,
|
|
50
|
-
'authorizationList' | 'feeToken' | 'keyAuthorization'
|
|
52
|
+
'authorizationList' | 'feeToken' | 'keyAuthorization' | 'multisigWitness'
|
|
51
53
|
> & {
|
|
52
54
|
authorizationList?: AuthorizationTempo.ListRpc | undefined
|
|
53
55
|
feeToken?: Hex.Hex | undefined
|
|
54
56
|
keyAuthorization?: KeyAuthorization.Rpc | undefined
|
|
57
|
+
multisigWitness?: MultisigWitness.Rpc | undefined
|
|
55
58
|
nonceKey?: Hex.Hex | undefined
|
|
56
59
|
}
|
|
57
60
|
|
|
@@ -76,7 +79,7 @@ export type Rpc = Omit<
|
|
|
76
79
|
* @returns A transaction request.
|
|
77
80
|
*/
|
|
78
81
|
export function fromRpc(request: Rpc): TransactionRequest {
|
|
79
|
-
const { authorizationList: _, ...rest } = request
|
|
82
|
+
const { authorizationList: _, multisigWitness: __, ...rest } = request
|
|
80
83
|
const request_ = ox_TransactionRequest.fromRpc(
|
|
81
84
|
rest as any,
|
|
82
85
|
) as TransactionRequest
|
|
@@ -107,6 +110,8 @@ export function fromRpc(request: Rpc): TransactionRequest {
|
|
|
107
110
|
request_.keyAuthorization = KeyAuthorization.fromRpc(
|
|
108
111
|
request.keyAuthorization,
|
|
109
112
|
)
|
|
113
|
+
if (request.multisigWitness)
|
|
114
|
+
request_.multisigWitness = MultisigWitness.fromRpc(request.multisigWitness)
|
|
110
115
|
if (typeof request.validBefore !== 'undefined')
|
|
111
116
|
request_.validBefore = Hex.toNumber(request.validBefore as Hex.Hex)
|
|
112
117
|
if (typeof request.validAfter !== 'undefined')
|
|
@@ -120,6 +125,7 @@ export function fromRpc(request: Rpc): TransactionRequest {
|
|
|
120
125
|
export declare namespace fromRpc {
|
|
121
126
|
export type ErrorType =
|
|
122
127
|
| AuthorizationTempo.fromRpcList.ErrorType
|
|
128
|
+
| MultisigWitness.fromRpc.ErrorType
|
|
123
129
|
| Hex.toNumber.ErrorType
|
|
124
130
|
| Hex.toBigInt.ErrorType
|
|
125
131
|
| Errors.GlobalErrorType
|
|
@@ -204,6 +210,8 @@ export function toRpc(request: TransactionRequest): Rpc {
|
|
|
204
210
|
request_rpc.keyAuthorization = KeyAuthorization.toRpc(
|
|
205
211
|
request.keyAuthorization,
|
|
206
212
|
)
|
|
213
|
+
if (request.multisigWitness)
|
|
214
|
+
request_rpc.multisigWitness = MultisigWitness.toRpc(request.multisigWitness)
|
|
207
215
|
if (typeof request.validBefore !== 'undefined')
|
|
208
216
|
request_rpc.validBefore = Hex.fromNumber(request.validBefore)
|
|
209
217
|
if (typeof request.validAfter !== 'undefined')
|
|
@@ -222,6 +230,7 @@ export function toRpc(request: TransactionRequest): Rpc {
|
|
|
222
230
|
typeof request.feePayer !== 'undefined' ||
|
|
223
231
|
typeof request.feeToken !== 'undefined' ||
|
|
224
232
|
typeof request.keyAuthorization !== 'undefined' ||
|
|
233
|
+
typeof request.multisigWitness !== 'undefined' ||
|
|
225
234
|
typeof request.nonceKey !== 'undefined' ||
|
|
226
235
|
typeof request.validBefore !== 'undefined' ||
|
|
227
236
|
typeof request.validAfter !== 'undefined' ||
|
|
@@ -240,6 +249,7 @@ export function toRpc(request: TransactionRequest): Rpc {
|
|
|
240
249
|
export declare namespace toRpc {
|
|
241
250
|
export type ErrorType =
|
|
242
251
|
| AuthorizationTempo.toRpcList.ErrorType
|
|
252
|
+
| MultisigWitness.toRpc.ErrorType
|
|
243
253
|
| Hex.fromNumber.ErrorType
|
|
244
254
|
| Errors.GlobalErrorType
|
|
245
255
|
}
|
package/tempo/index.ts
CHANGED
|
@@ -159,6 +159,15 @@ export * as MultisigConfig from './MultisigConfig.js'
|
|
|
159
159
|
* @category Reference
|
|
160
160
|
*/
|
|
161
161
|
export * as MultisigOperation from './MultisigOperation.js'
|
|
162
|
+
/**
|
|
163
|
+
* Native multisig RPC simulation witness utilities.
|
|
164
|
+
*
|
|
165
|
+
* Converts complete root and nested owner witnesses between their domain and
|
|
166
|
+
* Tempo JSON-RPC representations.
|
|
167
|
+
*
|
|
168
|
+
* @category Reference
|
|
169
|
+
*/
|
|
170
|
+
export * as MultisigWitness from './MultisigWitness.js'
|
|
162
171
|
/**
|
|
163
172
|
* Utilities for constructing period durations (in seconds) for recurring spending limits.
|
|
164
173
|
*
|
package/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @internal */
|
|
2
|
-
export const version = '0.14.
|
|
2
|
+
export const version = '0.14.40'
|