viem 2.57.4 → 2.57.5
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 +26 -0
- package/_cjs/actions/public/waitForTransactionReceipt.js +5 -2
- package/_cjs/actions/public/waitForTransactionReceipt.js.map +1 -1
- package/_cjs/actions/wallet/waitForCallsStatus.js +25 -2
- package/_cjs/actions/wallet/waitForCallsStatus.js.map +1 -1
- package/_cjs/chains/definitions/arcTestnet.js +11 -8
- package/_cjs/chains/definitions/arcTestnet.js.map +1 -1
- package/_cjs/chains/definitions/qmsTestnet.js +30 -0
- package/_cjs/chains/definitions/qmsTestnet.js.map +1 -0
- package/_cjs/chains/definitions/tempo.js +1 -1
- package/_cjs/chains/definitions/tempoModerato.js +2 -2
- package/_cjs/chains/index.js +7 -5
- package/_cjs/chains/index.js.map +1 -1
- package/_cjs/clients/transports/ipc.js +19 -10
- package/_cjs/clients/transports/ipc.js.map +1 -1
- package/_cjs/clients/transports/webSocket.js +19 -10
- package/_cjs/clients/transports/webSocket.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/tempo/Account.js +40 -40
- package/_cjs/tempo/Account.js.map +1 -1
- package/_cjs/tempo/Decorator.js +9 -8
- package/_cjs/tempo/Decorator.js.map +1 -1
- package/_cjs/tempo/ExecutionError.js +1 -1
- package/_cjs/tempo/ExecutionError.js.map +1 -1
- package/_cjs/tempo/Formatters.js +8 -7
- package/_cjs/tempo/Formatters.js.map +1 -1
- package/_cjs/tempo/KeyAuthorizationManager.js +25 -16
- package/_cjs/tempo/KeyAuthorizationManager.js.map +1 -1
- package/_cjs/tempo/Relay.js +9 -4
- package/_cjs/tempo/Relay.js.map +1 -1
- package/_cjs/tempo/Transaction.js +9 -9
- package/_cjs/tempo/Transaction.js.map +1 -1
- package/_cjs/tempo/Transport.js +21 -11
- package/_cjs/tempo/Transport.js.map +1 -1
- package/_cjs/tempo/{multisig → accounts}/Config.js +8 -8
- package/_cjs/tempo/{multisig → accounts}/Config.js.map +1 -1
- package/_cjs/tempo/{multisig → accounts}/Operation.js +10 -10
- package/_cjs/tempo/{multisig → accounts}/Operation.js.map +1 -1
- package/_cjs/tempo/{multisig → accounts}/Signature.js +2 -2
- package/_cjs/tempo/accounts/Signature.js.map +1 -0
- package/_cjs/tempo/actions/accessKey.js +60 -37
- package/_cjs/tempo/actions/accessKey.js.map +1 -1
- package/_cjs/tempo/actions/{multisig.js → accounts.js} +13 -18
- package/_cjs/tempo/actions/accounts.js.map +1 -0
- package/_cjs/tempo/actions/index.js +2 -2
- package/_cjs/tempo/actions/index.js.map +1 -1
- package/_cjs/tempo/chainConfig.js +37 -37
- package/_cjs/tempo/chainConfig.js.map +1 -1
- package/_cjs/tempo/index.js +3 -3
- package/_cjs/tempo/index.js.map +1 -1
- package/_cjs/tempo/internal/relay/{multisig.js → accounts.js} +90 -93
- package/_cjs/tempo/internal/relay/accounts.js.map +1 -0
- package/_cjs/tempo/internal/relay/keyAuthorization.js +296 -0
- package/_cjs/tempo/internal/relay/keyAuthorization.js.map +1 -0
- package/_cjs/tempo/internal/relay/plugin.js +17 -7
- package/_cjs/tempo/internal/relay/plugin.js.map +1 -1
- package/_cjs/utils/hash/normalizeSignature.js +1 -1
- package/_cjs/utils/hash/normalizeSignature.js.map +1 -1
- package/_cjs/utils/rpc/http.js +66 -31
- package/_cjs/utils/rpc/http.js.map +1 -1
- package/_cjs/utils/rpc/socket.js +1 -1
- package/_cjs/utils/rpc/socket.js.map +1 -1
- package/_esm/actions/public/waitForTransactionReceipt.js +5 -2
- package/_esm/actions/public/waitForTransactionReceipt.js.map +1 -1
- package/_esm/actions/wallet/waitForCallsStatus.js +39 -2
- package/_esm/actions/wallet/waitForCallsStatus.js.map +1 -1
- package/_esm/chains/definitions/arcTestnet.js +11 -8
- package/_esm/chains/definitions/arcTestnet.js.map +1 -1
- package/_esm/chains/definitions/qmsTestnet.js +27 -0
- package/_esm/chains/definitions/qmsTestnet.js.map +1 -0
- package/_esm/chains/definitions/tempo.js +1 -1
- package/_esm/chains/definitions/tempoModerato.js +2 -2
- package/_esm/chains/index.js +1 -0
- package/_esm/chains/index.js.map +1 -1
- package/_esm/clients/transports/ipc.js +21 -10
- package/_esm/clients/transports/ipc.js.map +1 -1
- package/_esm/clients/transports/webSocket.js +21 -10
- package/_esm/clients/transports/webSocket.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/tempo/Account.js +42 -42
- package/_esm/tempo/Account.js.map +1 -1
- package/_esm/tempo/Client.js +3 -3
- package/_esm/tempo/Decorator.js +9 -8
- package/_esm/tempo/Decorator.js.map +1 -1
- package/_esm/tempo/ExecutionError.js +1 -1
- package/_esm/tempo/ExecutionError.js.map +1 -1
- package/_esm/tempo/Formatters.js +11 -10
- package/_esm/tempo/Formatters.js.map +1 -1
- package/_esm/tempo/KeyAuthorizationManager.js +58 -16
- package/_esm/tempo/KeyAuthorizationManager.js.map +1 -1
- package/_esm/tempo/Relay.js +49 -8
- package/_esm/tempo/Relay.js.map +1 -1
- package/_esm/tempo/Transaction.js +11 -11
- package/_esm/tempo/Transaction.js.map +1 -1
- package/_esm/tempo/Transport.js +22 -12
- package/_esm/tempo/Transport.js.map +1 -1
- package/_esm/tempo/{multisig → accounts}/Config.js +14 -14
- package/_esm/tempo/{multisig → accounts}/Config.js.map +1 -1
- package/_esm/tempo/{multisig → accounts}/Operation.js +17 -17
- package/_esm/tempo/{multisig → accounts}/Operation.js.map +1 -1
- package/_esm/tempo/accounts/Signature.js +9 -0
- package/_esm/tempo/accounts/Signature.js.map +1 -0
- package/_esm/tempo/actions/accessKey.js +93 -38
- package/_esm/tempo/actions/accessKey.js.map +1 -1
- package/_esm/tempo/actions/{multisig.js → accounts.js} +31 -36
- package/_esm/tempo/actions/accounts.js.map +1 -0
- package/_esm/tempo/actions/index.js +1 -1
- package/_esm/tempo/actions/index.js.map +1 -1
- package/_esm/tempo/chainConfig.js +38 -38
- package/_esm/tempo/chainConfig.js.map +1 -1
- package/_esm/tempo/index.js +2 -1
- package/_esm/tempo/index.js.map +1 -1
- package/_esm/tempo/internal/relay/{multisig.js → accounts.js} +93 -98
- package/_esm/tempo/internal/relay/accounts.js.map +1 -0
- package/_esm/tempo/internal/relay/feePayer.js +1 -1
- package/_esm/tempo/internal/relay/feePayer.js.map +1 -1
- package/_esm/tempo/internal/relay/keyAuthorization.js +334 -0
- package/_esm/tempo/internal/relay/keyAuthorization.js.map +1 -0
- package/_esm/tempo/internal/relay/plugin.js +15 -6
- package/_esm/tempo/internal/relay/plugin.js.map +1 -1
- package/_esm/utils/hash/normalizeSignature.js +3 -2
- package/_esm/utils/hash/normalizeSignature.js.map +1 -1
- package/_esm/utils/rpc/http.js +74 -31
- package/_esm/utils/rpc/http.js.map +1 -1
- package/_esm/utils/rpc/socket.js +3 -1
- package/_esm/utils/rpc/socket.js.map +1 -1
- package/_types/actions/public/waitForTransactionReceipt.d.ts.map +1 -1
- package/_types/actions/wallet/waitForCallsStatus.d.ts.map +1 -1
- package/_types/chains/definitions/arcTestnet.d.ts +5 -5
- package/_types/chains/definitions/arcTestnet.d.ts.map +1 -1
- package/_types/chains/definitions/qmsTestnet.d.ts +50 -0
- package/_types/chains/definitions/qmsTestnet.d.ts.map +1 -0
- package/_types/chains/definitions/tempo.d.ts +2 -2
- package/_types/chains/definitions/tempoModerato.d.ts +4 -4
- package/_types/chains/index.d.ts +1 -0
- package/_types/chains/index.d.ts.map +1 -1
- package/_types/clients/transports/ipc.d.ts.map +1 -1
- package/_types/clients/transports/webSocket.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/tempo/Account.d.ts +28 -28
- package/_types/tempo/Account.d.ts.map +1 -1
- package/_types/tempo/Client.d.ts +3 -3
- package/_types/tempo/Decorator.d.ts +63 -37
- package/_types/tempo/Decorator.d.ts.map +1 -1
- package/_types/tempo/Formatters.d.ts.map +1 -1
- package/_types/tempo/KeyAuthorizationManager.d.ts +45 -2
- package/_types/tempo/KeyAuthorizationManager.d.ts.map +1 -1
- package/_types/tempo/Relay.d.ts +62 -12
- package/_types/tempo/Relay.d.ts.map +1 -1
- package/_types/tempo/Transaction.d.ts +14 -11
- package/_types/tempo/Transaction.d.ts.map +1 -1
- package/_types/tempo/Transport.d.ts +20 -7
- package/_types/tempo/Transport.d.ts.map +1 -1
- package/_types/tempo/{multisig → accounts}/Config.d.ts +7 -7
- package/_types/tempo/accounts/Config.d.ts.map +1 -0
- package/_types/tempo/{multisig → accounts}/Operation.d.ts +7 -7
- package/_types/tempo/accounts/Operation.d.ts.map +1 -0
- package/_types/tempo/{multisig → accounts}/Signature.d.ts +1 -1
- package/_types/tempo/accounts/Signature.d.ts.map +1 -0
- package/_types/tempo/actions/accessKey.d.ts +59 -17
- package/_types/tempo/actions/accessKey.d.ts.map +1 -1
- package/_types/tempo/actions/{multisig.d.ts → accounts.d.ts} +28 -28
- package/_types/tempo/actions/{multisig.d.ts.map → accounts.d.ts.map} +1 -1
- package/_types/tempo/actions/index.d.ts +1 -1
- package/_types/tempo/actions/index.d.ts.map +1 -1
- package/_types/tempo/index.d.ts +3 -2
- package/_types/tempo/index.d.ts.map +1 -1
- package/_types/tempo/internal/relay/accounts.d.ts +15 -0
- package/_types/tempo/internal/relay/accounts.d.ts.map +1 -0
- package/_types/tempo/internal/relay/keyAuthorization.d.ts +25 -0
- package/_types/tempo/internal/relay/keyAuthorization.d.ts.map +1 -0
- package/_types/tempo/internal/relay/plugin.d.ts +6 -3
- package/_types/tempo/internal/relay/plugin.d.ts.map +1 -1
- package/_types/utils/hash/normalizeSignature.d.ts.map +1 -1
- package/_types/utils/rpc/http.d.ts.map +1 -1
- package/_types/utils/rpc/socket.d.ts.map +1 -1
- package/actions/public/waitForTransactionReceipt.ts +8 -2
- package/actions/wallet/waitForCallsStatus.ts +41 -2
- package/chains/definitions/arcTestnet.ts +11 -8
- package/chains/definitions/qmsTestnet.ts +27 -0
- package/chains/definitions/tempo.ts +1 -1
- package/chains/definitions/tempoModerato.ts +2 -2
- package/chains/index.ts +1 -0
- package/clients/transports/ipc.ts +38 -29
- package/clients/transports/webSocket.ts +42 -33
- package/errors/version.ts +1 -1
- package/package.json +2 -2
- package/tempo/Account.ts +95 -84
- package/tempo/Client.ts +3 -3
- package/tempo/Decorator.ts +86 -57
- package/tempo/ExecutionError.ts +1 -1
- package/tempo/Formatters.ts +14 -13
- package/tempo/KeyAuthorizationManager.ts +71 -19
- package/tempo/Relay.ts +70 -14
- package/tempo/Transaction.ts +31 -23
- package/tempo/Transport.ts +49 -21
- package/tempo/{multisig → accounts}/Config.ts +21 -21
- package/tempo/{multisig → accounts}/Operation.ts +26 -26
- package/tempo/{multisig → accounts}/Signature.ts +5 -3
- package/tempo/actions/accessKey.ts +179 -79
- package/tempo/actions/{multisig.ts → accounts.ts} +47 -56
- package/tempo/actions/index.ts +1 -1
- package/tempo/chainConfig.ts +52 -52
- package/tempo/index.ts +5 -4
- package/tempo/internal/relay/{multisig.ts → accounts.ts} +118 -118
- package/tempo/internal/relay/feePayer.ts +1 -1
- package/tempo/internal/relay/keyAuthorization.ts +415 -0
- package/tempo/internal/relay/plugin.ts +20 -7
- package/utils/hash/normalizeSignature.ts +3 -2
- package/utils/rpc/http.ts +76 -30
- package/utils/rpc/socket.ts +3 -1
- package/_cjs/tempo/actions/multisig.js.map +0 -1
- package/_cjs/tempo/internal/relay/multisig.js.map +0 -1
- package/_cjs/tempo/multisig/Signature.js.map +0 -1
- package/_esm/tempo/actions/multisig.js.map +0 -1
- package/_esm/tempo/internal/relay/multisig.js.map +0 -1
- package/_esm/tempo/multisig/Signature.js +0 -9
- package/_esm/tempo/multisig/Signature.js.map +0 -1
- package/_types/tempo/internal/relay/multisig.d.ts +0 -4
- package/_types/tempo/internal/relay/multisig.d.ts.map +0 -1
- package/_types/tempo/multisig/Config.d.ts.map +0 -1
- package/_types/tempo/multisig/Operation.d.ts.map +0 -1
- package/_types/tempo/multisig/Signature.d.ts.map +0 -1
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { Address } from 'abitype'
|
|
2
2
|
import type * as Hex from 'ox/Hex'
|
|
3
3
|
import type * as RpcSchema from 'ox/RpcSchema'
|
|
4
|
-
import {
|
|
5
|
-
MultisigConfig,
|
|
6
|
-
MultisigOperation,
|
|
7
|
-
type RpcSchemaTempo,
|
|
8
|
-
} from 'ox/tempo'
|
|
4
|
+
import { AccountConfig, AccountOperation, type RpcSchemaTempo } from 'ox/tempo'
|
|
9
5
|
import type { Account } from '../../accounts/types.js'
|
|
10
6
|
import type { ReadContractReturnType } from '../../actions/public/readContract.js'
|
|
11
7
|
import { readContract } from '../../actions/public/readContract.js'
|
|
@@ -20,14 +16,14 @@ import type { Log } from '../../types/log.js'
|
|
|
20
16
|
import type { Compute } from '../../types/utils.js'
|
|
21
17
|
import { parseEventLogs } from '../../utils/abi/parseEventLogs.js'
|
|
22
18
|
import * as Abis from '../Abis.js'
|
|
23
|
-
import {
|
|
19
|
+
import { type ConfigurableAccount, fromConfig } from '../Account.js'
|
|
24
20
|
import * as Addresses from '../Addresses.js'
|
|
25
21
|
import type { ReadParameters, WriteParameters } from '../internal/types.js'
|
|
26
22
|
import { defineCall } from '../internal/utils.js'
|
|
27
23
|
import type * as Transaction from '../Transaction.js'
|
|
28
24
|
|
|
29
25
|
/**
|
|
30
|
-
* Gets the current cached config for a
|
|
26
|
+
* Gets the current cached config for a configurable account.
|
|
31
27
|
*
|
|
32
28
|
* The coordinator reads the account's current onchain commitment and returns
|
|
33
29
|
* the matching config from its store. It returns `null` when the config is not
|
|
@@ -35,7 +31,7 @@ import type * as Transaction from '../Transaction.js'
|
|
|
35
31
|
*
|
|
36
32
|
* @example
|
|
37
33
|
* ```ts
|
|
38
|
-
* const config = await client.
|
|
34
|
+
* const config = await client.accounts.getConfig({
|
|
39
35
|
* address: '0x...',
|
|
40
36
|
* })
|
|
41
37
|
* ```
|
|
@@ -49,32 +45,32 @@ export async function getConfig(
|
|
|
49
45
|
parameters: getConfig.Parameters,
|
|
50
46
|
): Promise<getConfig.ReturnValue> {
|
|
51
47
|
const config = await client.request<{
|
|
52
|
-
Method: '
|
|
48
|
+
Method: 'account_getConfig'
|
|
53
49
|
Parameters: [{ address: Address }]
|
|
54
|
-
ReturnType:
|
|
50
|
+
ReturnType: AccountConfig.Rpc | null
|
|
55
51
|
}>({
|
|
56
|
-
method: '
|
|
52
|
+
method: 'account_getConfig',
|
|
57
53
|
params: [{ address: parameters.address }],
|
|
58
54
|
})
|
|
59
|
-
return config ?
|
|
55
|
+
return config ? AccountConfig.fromRpc(config) : null
|
|
60
56
|
}
|
|
61
57
|
|
|
62
58
|
export declare namespace getConfig {
|
|
63
59
|
/** Parameters for {@link getConfig}. */
|
|
64
60
|
export type Parameters = {
|
|
65
|
-
/**
|
|
61
|
+
/** Configurable account address. */
|
|
66
62
|
address: Address
|
|
67
63
|
}
|
|
68
64
|
|
|
69
65
|
/** Return value for {@link getConfig}. */
|
|
70
|
-
export type ReturnValue =
|
|
66
|
+
export type ReturnValue = AccountConfig.Config | null
|
|
71
67
|
|
|
72
68
|
/** Error type for {@link getConfig}. */
|
|
73
69
|
export type ErrorType = BaseErrorType
|
|
74
70
|
}
|
|
75
71
|
|
|
76
72
|
/**
|
|
77
|
-
* Gets the current configuration commitment for a
|
|
73
|
+
* Gets the current configuration commitment for a configurable account.
|
|
78
74
|
*
|
|
79
75
|
* @example
|
|
80
76
|
* ```ts
|
|
@@ -87,7 +83,7 @@ export declare namespace getConfig {
|
|
|
87
83
|
* transport: http(),
|
|
88
84
|
* })
|
|
89
85
|
*
|
|
90
|
-
* const commitment = await Actions.
|
|
86
|
+
* const commitment = await Actions.accounts.getConfigCommitment(client, {
|
|
91
87
|
* account: '0x...',
|
|
92
88
|
* })
|
|
93
89
|
* ```
|
|
@@ -115,7 +111,7 @@ export namespace getConfigCommitment {
|
|
|
115
111
|
export type Parameters = ReadParameters & Args
|
|
116
112
|
|
|
117
113
|
export type Args = {
|
|
118
|
-
/** Initialized
|
|
114
|
+
/** Initialized configurable account address. */
|
|
119
115
|
account: Address
|
|
120
116
|
}
|
|
121
117
|
|
|
@@ -144,7 +140,7 @@ export namespace getConfigCommitment {
|
|
|
144
140
|
}
|
|
145
141
|
|
|
146
142
|
/**
|
|
147
|
-
* Gets a coordinated
|
|
143
|
+
* Gets a coordinated account operation by its hash.
|
|
148
144
|
*
|
|
149
145
|
* @param client - Client.
|
|
150
146
|
* @param parameters - Parameters.
|
|
@@ -154,33 +150,33 @@ export async function getOperation(
|
|
|
154
150
|
client: Client,
|
|
155
151
|
parameters: getOperation.Parameters,
|
|
156
152
|
): Promise<getOperation.ReturnValue> {
|
|
157
|
-
type
|
|
158
|
-
RpcSchema.ToViem<RpcSchemaTempo.
|
|
159
|
-
{ Method: '
|
|
153
|
+
type account_getOperation = Extract<
|
|
154
|
+
RpcSchema.ToViem<RpcSchemaTempo.Account>[number],
|
|
155
|
+
{ Method: 'account_getOperation' }
|
|
160
156
|
>
|
|
161
|
-
const operation = await client.request<
|
|
162
|
-
method: '
|
|
157
|
+
const operation = await client.request<account_getOperation>({
|
|
158
|
+
method: 'account_getOperation',
|
|
163
159
|
params: [parameters.hash],
|
|
164
160
|
})
|
|
165
|
-
return operation ?
|
|
161
|
+
return operation ? AccountOperation.fromRpc(operation) : null
|
|
166
162
|
}
|
|
167
163
|
|
|
168
164
|
export declare namespace getOperation {
|
|
169
165
|
/** Parameters for {@link getOperation}. */
|
|
170
166
|
export type Parameters = {
|
|
171
|
-
/**
|
|
167
|
+
/** Account operation hash. */
|
|
172
168
|
hash: Hex.Hex
|
|
173
169
|
}
|
|
174
170
|
|
|
175
171
|
/** Return value for {@link getOperation}. */
|
|
176
|
-
export type ReturnValue =
|
|
172
|
+
export type ReturnValue = AccountOperation.Operation | null
|
|
177
173
|
|
|
178
174
|
/** Error type for {@link getOperation}. */
|
|
179
175
|
export type ErrorType = BaseErrorType
|
|
180
176
|
}
|
|
181
177
|
|
|
182
178
|
/**
|
|
183
|
-
* Replaces the current configuration for a
|
|
179
|
+
* Replaces the current configuration for a configurable account.
|
|
184
180
|
*
|
|
185
181
|
* The transaction must be authorized directly by the account's current owner
|
|
186
182
|
* quorum. Local owner-signing flows can include {@link updateConfig.call} in a
|
|
@@ -196,7 +192,7 @@ export declare namespace getOperation {
|
|
|
196
192
|
* const owner = Account.fromSecp256k1(
|
|
197
193
|
* '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
|
|
198
194
|
* )
|
|
199
|
-
* const account = Account.
|
|
195
|
+
* const account = Account.fromConfig({
|
|
200
196
|
* address: 'infer',
|
|
201
197
|
* owners: [owner],
|
|
202
198
|
* })
|
|
@@ -210,7 +206,7 @@ export declare namespace getOperation {
|
|
|
210
206
|
* to: account.address,
|
|
211
207
|
* })
|
|
212
208
|
*
|
|
213
|
-
* const hash = await Actions.
|
|
209
|
+
* const hash = await Actions.accounts.updateConfig(client, {
|
|
214
210
|
* account,
|
|
215
211
|
* nextConfig: {
|
|
216
212
|
* owners: [{ owner: owner.address, weight: 1 }],
|
|
@@ -239,16 +235,16 @@ export namespace updateConfig {
|
|
|
239
235
|
account extends Account | undefined = Account | undefined,
|
|
240
236
|
> = WriteParameters<chain, account> & {
|
|
241
237
|
/** Complete current config. Inferred from the account or coordinator when omitted. */
|
|
242
|
-
currentConfig?:
|
|
238
|
+
currentConfig?: AccountConfig.Config | undefined
|
|
243
239
|
/** Replacement owners and threshold. */
|
|
244
|
-
nextConfig: Pick<
|
|
240
|
+
nextConfig: Pick<AccountConfig.Config, 'owners' | 'threshold'>
|
|
245
241
|
}
|
|
246
242
|
|
|
247
243
|
export type Args = {
|
|
248
244
|
/** Complete current config. */
|
|
249
|
-
currentConfig:
|
|
245
|
+
currentConfig: AccountConfig.Config
|
|
250
246
|
/** Replacement owners and threshold. */
|
|
251
|
-
nextConfig: Pick<
|
|
247
|
+
nextConfig: Pick<AccountConfig.Config, 'owners' | 'threshold'>
|
|
252
248
|
}
|
|
253
249
|
|
|
254
250
|
export type ReturnValue = WriteContractReturnType
|
|
@@ -276,9 +272,9 @@ export namespace updateConfig {
|
|
|
276
272
|
const account = (() => {
|
|
277
273
|
if (
|
|
278
274
|
typeof accountValue === 'object' &&
|
|
279
|
-
accountValue.source === '
|
|
275
|
+
accountValue.source === 'configurable'
|
|
280
276
|
)
|
|
281
|
-
return accountValue as
|
|
277
|
+
return accountValue as ConfigurableAccount
|
|
282
278
|
return undefined
|
|
283
279
|
})()
|
|
284
280
|
const config = (() => {
|
|
@@ -293,22 +289,22 @@ export namespace updateConfig {
|
|
|
293
289
|
return undefined
|
|
294
290
|
})()
|
|
295
291
|
const currentConfig = await (async () => {
|
|
296
|
-
if (config) return
|
|
292
|
+
if (config) return AccountConfig.from(config)
|
|
297
293
|
if (!address)
|
|
298
294
|
throw new Error(
|
|
299
|
-
'A
|
|
295
|
+
'A configurable account address or current config is required.',
|
|
300
296
|
)
|
|
301
297
|
const cachedConfig = await getConfig(client, { address })
|
|
302
298
|
if (!cachedConfig)
|
|
303
299
|
throw new Error(
|
|
304
|
-
`No current
|
|
300
|
+
`No current account config is cached for account ${address}. Provide the current config.`,
|
|
305
301
|
)
|
|
306
302
|
return cachedConfig
|
|
307
303
|
})()
|
|
308
304
|
const resolvedAccount = (() => {
|
|
309
305
|
if (account) return { ...account, config: currentConfig }
|
|
310
306
|
if (typeof accountValue === 'object') return accountValue
|
|
311
|
-
if (address) return
|
|
307
|
+
if (address) return fromConfig({ address, ...currentConfig })
|
|
312
308
|
return undefined
|
|
313
309
|
})()
|
|
314
310
|
return (await action(client, {
|
|
@@ -328,11 +324,11 @@ export namespace updateConfig {
|
|
|
328
324
|
*
|
|
329
325
|
* @example
|
|
330
326
|
* ```ts
|
|
331
|
-
* import { Actions, type
|
|
327
|
+
* import { Actions, type AccountConfig } from 'viem/tempo'
|
|
332
328
|
*
|
|
333
|
-
* declare const currentConfig:
|
|
329
|
+
* declare const currentConfig: AccountConfig.Config
|
|
334
330
|
*
|
|
335
|
-
* const call = Actions.
|
|
331
|
+
* const call = Actions.accounts.updateConfig.call({
|
|
336
332
|
* currentConfig,
|
|
337
333
|
* nextConfig: {
|
|
338
334
|
* owners: [{ owner: '0x...', weight: 1 }],
|
|
@@ -341,17 +337,12 @@ export namespace updateConfig {
|
|
|
341
337
|
* })
|
|
342
338
|
* ```
|
|
343
339
|
*
|
|
344
|
-
* @param args - Current and replacement
|
|
340
|
+
* @param args - Current and replacement account configurations.
|
|
345
341
|
* @returns The call.
|
|
346
342
|
*/
|
|
347
343
|
export function call(args: Args) {
|
|
348
|
-
const currentConfig =
|
|
349
|
-
const nextConfig =
|
|
350
|
-
owners: args.nextConfig.owners,
|
|
351
|
-
salt: currentConfig.salt,
|
|
352
|
-
threshold: args.nextConfig.threshold,
|
|
353
|
-
version: currentConfig.version + 1n,
|
|
354
|
-
})
|
|
344
|
+
const currentConfig = AccountConfig.from(args.currentConfig)
|
|
345
|
+
const nextConfig = AccountConfig.update(currentConfig, args.nextConfig)
|
|
355
346
|
return defineCall({
|
|
356
347
|
address: Addresses.nativeMultisig,
|
|
357
348
|
abi: Abis.nativeMultisig,
|
|
@@ -379,16 +370,16 @@ export namespace updateConfig {
|
|
|
379
370
|
}
|
|
380
371
|
|
|
381
372
|
/**
|
|
382
|
-
* Replaces a
|
|
373
|
+
* Replaces a configurable account configuration and waits for confirmation.
|
|
383
374
|
*
|
|
384
375
|
* @example
|
|
385
376
|
* ```ts
|
|
386
377
|
* import { createWalletClient, custom, type EIP1193Provider } from 'viem'
|
|
387
378
|
* import { tempo } from 'viem/chains'
|
|
388
|
-
* import { Actions, type
|
|
379
|
+
* import { Actions, type AccountConfig } from 'viem/tempo'
|
|
389
380
|
*
|
|
390
381
|
* declare const provider: EIP1193Provider
|
|
391
|
-
* declare const currentConfig:
|
|
382
|
+
* declare const currentConfig: AccountConfig.Config
|
|
392
383
|
*
|
|
393
384
|
* const client = createWalletClient({
|
|
394
385
|
* account: '0x...',
|
|
@@ -396,7 +387,7 @@ export namespace updateConfig {
|
|
|
396
387
|
* transport: custom(provider),
|
|
397
388
|
* })
|
|
398
389
|
*
|
|
399
|
-
* const { receipt } = await Actions.
|
|
390
|
+
* const { receipt } = await Actions.accounts.updateConfigSync(client, {
|
|
400
391
|
* currentConfig,
|
|
401
392
|
* nextConfig: {
|
|
402
393
|
* owners: [{ owner: '0x...', weight: 1 }],
|
|
@@ -426,7 +417,7 @@ export async function updateConfigSync<
|
|
|
426
417
|
const { args } = updateConfig.extractEvent(receipt.logs)
|
|
427
418
|
return {
|
|
428
419
|
account: args.account,
|
|
429
|
-
config:
|
|
420
|
+
config: AccountConfig.from({
|
|
430
421
|
owners: args.owners,
|
|
431
422
|
salt: args.salt,
|
|
432
423
|
threshold: args.threshold,
|
|
@@ -446,7 +437,7 @@ export namespace updateConfigSync {
|
|
|
446
437
|
|
|
447
438
|
export type ReturnValue = Compute<{
|
|
448
439
|
account: Address
|
|
449
|
-
config:
|
|
440
|
+
config: AccountConfig.Config
|
|
450
441
|
receipt: Transaction.TransactionReceipt
|
|
451
442
|
}>
|
|
452
443
|
|
package/tempo/actions/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// biome-ignore lint/performance/noBarrelFile: _
|
|
2
2
|
export * as accessKey from './accessKey.js'
|
|
3
|
+
export * as accounts from './accounts.js'
|
|
3
4
|
export * as amm from './amm.js'
|
|
4
5
|
export * as channel from './channel.js'
|
|
5
6
|
export * as dex from './dex.js'
|
|
6
7
|
export * as earn from './earn.js'
|
|
7
8
|
export * as faucet from './faucet.js'
|
|
8
9
|
export * as fee from './fee.js'
|
|
9
|
-
export * as multisig from './multisig.js'
|
|
10
10
|
export * as nonce from './nonce.js'
|
|
11
11
|
export * as policy from './policy.js'
|
|
12
12
|
export * as propAmm from './propAmm.js'
|
package/tempo/chainConfig.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Address } from 'abitype'
|
|
2
2
|
import * as Hex from 'ox/Hex'
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type
|
|
4
|
+
AccountConfig,
|
|
5
|
+
AccountOperation,
|
|
6
|
+
type AccountSimulation,
|
|
7
7
|
SignatureEnvelope,
|
|
8
8
|
type TokenId,
|
|
9
9
|
} from 'ox/tempo'
|
|
@@ -20,9 +20,9 @@ import { defineTransactionRequest } from '../utils/formatters/transactionRequest
|
|
|
20
20
|
import { getAction } from '../utils/getAction.js'
|
|
21
21
|
import { keccak256 } from '../utils/hash/keccak256.js'
|
|
22
22
|
import type { SerializeTransactionFn } from '../utils/transaction/serializeTransaction.js'
|
|
23
|
-
import type { Account,
|
|
23
|
+
import type { Account, ConfigurableAccount } from './Account.js'
|
|
24
24
|
import { getMetadata } from './actions/accessKey.js'
|
|
25
|
-
import { getConfig } from './actions/
|
|
25
|
+
import { getConfig } from './actions/accounts.js'
|
|
26
26
|
import * as Formatters from './Formatters.js'
|
|
27
27
|
import type { Hardfork } from './Hardfork.js'
|
|
28
28
|
import * as Concurrent from './internal/concurrent.js'
|
|
@@ -55,7 +55,7 @@ export const chainConfig = {
|
|
|
55
55
|
prepareTransactionRequest: [
|
|
56
56
|
async (r, { client, phase }) => {
|
|
57
57
|
const request = r as Transaction.TransactionRequest & {
|
|
58
|
-
account?: Account |
|
|
58
|
+
account?: Account | ConfigurableAccount | undefined
|
|
59
59
|
chainId?: number | undefined
|
|
60
60
|
chain?:
|
|
61
61
|
| (Chain & {
|
|
@@ -67,8 +67,8 @@ export const chainConfig = {
|
|
|
67
67
|
hash?: Hex.Hex | undefined
|
|
68
68
|
keyData?: Hex.Hex | undefined
|
|
69
69
|
keyType?: 'p256' | 'secp256k1' | 'webAuthn' | undefined
|
|
70
|
-
|
|
71
|
-
owner?: Account |
|
|
70
|
+
accountSimulation?: AccountSimulation.Spec | undefined
|
|
71
|
+
owner?: Account | ConfigurableAccount | Address | undefined
|
|
72
72
|
signatures?: readonly unknown[] | undefined
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -76,18 +76,18 @@ export const chainConfig = {
|
|
|
76
76
|
if (
|
|
77
77
|
!request.account ||
|
|
78
78
|
typeof request.account === 'string' ||
|
|
79
|
-
request.account.source !== '
|
|
79
|
+
request.account.source !== 'configurable'
|
|
80
80
|
)
|
|
81
81
|
throw new Error(
|
|
82
|
-
'A local
|
|
82
|
+
'A local configurable account is required to approve a stored configurable account transaction.',
|
|
83
83
|
)
|
|
84
84
|
if (!request.owner || typeof request.owner === 'string')
|
|
85
85
|
throw new Error(
|
|
86
|
-
'A local owner account is required to approve a stored
|
|
86
|
+
'A local owner account is required to approve a stored configurable account transaction.',
|
|
87
87
|
)
|
|
88
88
|
if (request.owner.source !== 'root')
|
|
89
89
|
throw new Error(
|
|
90
|
-
'A Tempo owner account is required to approve a stored
|
|
90
|
+
'A Tempo owner account is required to approve a stored configurable account transaction.',
|
|
91
91
|
)
|
|
92
92
|
const transaction = await getAction(
|
|
93
93
|
client,
|
|
@@ -95,28 +95,28 @@ export const chainConfig = {
|
|
|
95
95
|
'getTransaction',
|
|
96
96
|
)({ hash: request.hash })
|
|
97
97
|
const operation =
|
|
98
|
-
'
|
|
99
|
-
? (transaction.
|
|
100
|
-
|
|
|
98
|
+
'operation' in transaction
|
|
99
|
+
? (transaction.operation as
|
|
100
|
+
| AccountOperation.TransactionOperation
|
|
101
101
|
| undefined)
|
|
102
102
|
: undefined
|
|
103
103
|
if (!operation)
|
|
104
|
-
throw new Error('Expected
|
|
104
|
+
throw new Error('Expected an account operation transaction.')
|
|
105
105
|
if (!isAddressEqual(operation.account, request.account.address))
|
|
106
106
|
throw new Error(
|
|
107
|
-
'
|
|
107
|
+
'Account operation account does not match the requested account.',
|
|
108
108
|
)
|
|
109
109
|
const storedTransaction = Transaction.deserialize(
|
|
110
110
|
operation.transaction as Transaction.TransactionSerializedTempo,
|
|
111
111
|
)
|
|
112
|
-
const hash =
|
|
112
|
+
const hash = AccountOperation.getHash({
|
|
113
113
|
account: operation.account,
|
|
114
114
|
config: operation.config,
|
|
115
115
|
transaction: operation.transaction,
|
|
116
116
|
type: 'transaction',
|
|
117
117
|
})
|
|
118
118
|
if (hash.toLowerCase() !== request.hash.toLowerCase())
|
|
119
|
-
throw new Error('
|
|
119
|
+
throw new Error('Account operation hash does not match transaction.')
|
|
120
120
|
return {
|
|
121
121
|
...storedTransaction,
|
|
122
122
|
// Serialized zero values must not trigger a new fill of an approved transaction.
|
|
@@ -125,7 +125,7 @@ export const chainConfig = {
|
|
|
125
125
|
maxPriorityFeePerGas: storedTransaction.maxPriorityFeePerGas ?? 0n,
|
|
126
126
|
account: request.account,
|
|
127
127
|
from: operation.account,
|
|
128
|
-
|
|
128
|
+
accountSimulation: getAccountSimulation({
|
|
129
129
|
config: operation.config,
|
|
130
130
|
local: request.account,
|
|
131
131
|
}),
|
|
@@ -151,40 +151,40 @@ export const chainConfig = {
|
|
|
151
151
|
return request as unknown as typeof r
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
const
|
|
155
|
-
if (request.account?.source === '
|
|
154
|
+
const configurableIdentity = (() => {
|
|
155
|
+
if (request.account?.source === 'configurable')
|
|
156
156
|
return {
|
|
157
157
|
account: request.account.address,
|
|
158
|
-
config: (request.account as
|
|
159
|
-
local: request.account as
|
|
158
|
+
config: (request.account as ConfigurableAccount).config,
|
|
159
|
+
local: request.account as ConfigurableAccount,
|
|
160
160
|
}
|
|
161
161
|
return undefined
|
|
162
162
|
})()
|
|
163
|
-
if (request.owner && !
|
|
163
|
+
if (request.owner && !configurableIdentity)
|
|
164
164
|
throw new Error(
|
|
165
|
-
'A
|
|
165
|
+
'A configurable account is required when an owner is provided.',
|
|
166
166
|
)
|
|
167
167
|
if (request.owner && typeof request.owner === 'string')
|
|
168
168
|
throw new Error(
|
|
169
|
-
'A local owner account is required to approve a
|
|
169
|
+
'A local owner account is required to approve a configurable account transaction.',
|
|
170
170
|
)
|
|
171
171
|
if (request.owner && request.owner.source !== 'root')
|
|
172
172
|
throw new Error(
|
|
173
|
-
'A Tempo owner account is required to approve a
|
|
173
|
+
'A Tempo owner account is required to approve a configurable account transaction.',
|
|
174
174
|
)
|
|
175
|
-
const
|
|
176
|
-
!!
|
|
175
|
+
const coordinated =
|
|
176
|
+
!!configurableIdentity &&
|
|
177
177
|
!!request.owner &&
|
|
178
|
-
(client.transport as {
|
|
179
|
-
if (
|
|
180
|
-
const { account, local } =
|
|
178
|
+
(client.transport as { accounts?: boolean }).accounts === true
|
|
179
|
+
if (configurableIdentity) {
|
|
180
|
+
const { account, local } = configurableIdentity
|
|
181
181
|
if (!account)
|
|
182
182
|
throw new Error(
|
|
183
|
-
'A
|
|
183
|
+
'A configurable account address is required with a current config.',
|
|
184
184
|
)
|
|
185
185
|
const config = await (async () => {
|
|
186
|
-
if (
|
|
187
|
-
if (!
|
|
186
|
+
if (configurableIdentity.config) return configurableIdentity.config
|
|
187
|
+
if (!coordinated) return undefined
|
|
188
188
|
const cachedConfig = await getAction(
|
|
189
189
|
client,
|
|
190
190
|
getConfig,
|
|
@@ -192,16 +192,16 @@ export const chainConfig = {
|
|
|
192
192
|
)({ address: account })
|
|
193
193
|
if (!cachedConfig)
|
|
194
194
|
throw new Error(
|
|
195
|
-
`No current
|
|
195
|
+
`No current account config is cached for account ${account}. Provide the current config.`,
|
|
196
196
|
)
|
|
197
197
|
return cachedConfig
|
|
198
198
|
})()
|
|
199
199
|
if (!config)
|
|
200
200
|
throw new Error(
|
|
201
|
-
'
|
|
201
|
+
'An account config is required to prepare a transaction.',
|
|
202
202
|
)
|
|
203
203
|
request.from = account
|
|
204
|
-
request.
|
|
204
|
+
request.accountSimulation = getAccountSimulation({
|
|
205
205
|
config,
|
|
206
206
|
local,
|
|
207
207
|
})
|
|
@@ -213,12 +213,12 @@ export const chainConfig = {
|
|
|
213
213
|
if (request.nonceKey === 'expiring' || request.nonceKey === maxUint256)
|
|
214
214
|
return true
|
|
215
215
|
if (typeof request.nonceKey !== 'undefined') return false
|
|
216
|
-
if (
|
|
216
|
+
if (configurableIdentity) return false
|
|
217
217
|
if (request.feePayer && typeof request.nonceKey === 'undefined')
|
|
218
218
|
return true
|
|
219
219
|
const account = request.account as
|
|
220
220
|
| Account
|
|
221
|
-
|
|
|
221
|
+
| ConfigurableAccount
|
|
222
222
|
| Address
|
|
223
223
|
| undefined
|
|
224
224
|
const address = typeof account === 'string' ? account : account?.address
|
|
@@ -227,7 +227,7 @@ export const chainConfig = {
|
|
|
227
227
|
return false
|
|
228
228
|
})()
|
|
229
229
|
|
|
230
|
-
if (
|
|
230
|
+
if (coordinated && typeof request.nonceKey === 'undefined') {
|
|
231
231
|
// A random nonce lane lets a stored approval ceremony remain valid
|
|
232
232
|
// indefinitely without blocking other pending operations.
|
|
233
233
|
request.nonceKey = Hex.toBigInt(Hex.random(31)) + 1n
|
|
@@ -294,17 +294,17 @@ export const chainConfig = {
|
|
|
294
294
|
transaction: serializeTransaction,
|
|
295
295
|
async transactionEnvelope({ serializedTransaction, transaction }) {
|
|
296
296
|
const request = transaction as Transaction.TransactionSerializableTempo
|
|
297
|
-
if (!request.
|
|
297
|
+
if (!request.accountSimulation) return serializedTransaction
|
|
298
298
|
try {
|
|
299
299
|
SignatureEnvelope.deserialize(serializedTransaction)
|
|
300
300
|
} catch {
|
|
301
301
|
const transaction = Transaction.deserialize(
|
|
302
302
|
serializedTransaction as Transaction.TransactionSerializedTempo,
|
|
303
303
|
)
|
|
304
|
-
if (transaction.signature?.type === '
|
|
304
|
+
if (transaction.signature?.type === 'configurable')
|
|
305
305
|
return serializedTransaction
|
|
306
306
|
throw new Error(
|
|
307
|
-
'A Tempo owner account is required to approve a
|
|
307
|
+
'A Tempo owner account is required to approve a configurable account transaction.',
|
|
308
308
|
)
|
|
309
309
|
}
|
|
310
310
|
return await serializeTransaction({
|
|
@@ -402,11 +402,11 @@ export const chainConfig = {
|
|
|
402
402
|
|
|
403
403
|
export type ChainConfig = typeof chainConfig
|
|
404
404
|
|
|
405
|
-
/** Builds a bounded
|
|
406
|
-
function
|
|
407
|
-
config:
|
|
408
|
-
local?:
|
|
409
|
-
}):
|
|
405
|
+
/** Builds a bounded account spec for gas simulation. */
|
|
406
|
+
function getAccountSimulation(options: {
|
|
407
|
+
config: AccountConfig.Config
|
|
408
|
+
local?: ConfigurableAccount | undefined
|
|
409
|
+
}): AccountSimulation.Spec {
|
|
410
410
|
const { config, local } = options
|
|
411
411
|
return {
|
|
412
412
|
approvals: selectOwners(config).map((owner) => {
|
|
@@ -453,7 +453,7 @@ function randomValidAfter(): number {
|
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
/** Selects a deterministic minimum-cardinality owner quorum. */
|
|
456
|
-
function selectOwners(config:
|
|
456
|
+
function selectOwners(config: AccountConfig.Config) {
|
|
457
457
|
const owners = [...config.owners].sort(
|
|
458
458
|
(a, b) =>
|
|
459
459
|
Number(b.weight) - Number(a.weight) ||
|
|
@@ -461,7 +461,7 @@ function selectOwners(config: MultisigConfig.Config) {
|
|
|
461
461
|
)
|
|
462
462
|
const selected: typeof owners = []
|
|
463
463
|
let weight = 0
|
|
464
|
-
for (const owner of owners.slice(0,
|
|
464
|
+
for (const owner of owners.slice(0, AccountConfig.maxSignatures)) {
|
|
465
465
|
if (weight >= Number(config.threshold)) break
|
|
466
466
|
selected.push(owner)
|
|
467
467
|
weight += Number(owner.weight)
|
package/tempo/index.ts
CHANGED
|
@@ -12,10 +12,10 @@ export type {
|
|
|
12
12
|
TxEnvelopeTempo as z_TxEnvelopeTempo,
|
|
13
13
|
} from 'ox/tempo'
|
|
14
14
|
export {
|
|
15
|
+
AccountConfig,
|
|
16
|
+
AccountOperation,
|
|
15
17
|
Channel,
|
|
16
18
|
EarnShares,
|
|
17
|
-
MultisigConfig,
|
|
18
|
-
MultisigOperation,
|
|
19
19
|
Period,
|
|
20
20
|
ReceivePolicyReceipt,
|
|
21
21
|
TempoAddress,
|
|
@@ -26,8 +26,8 @@ export {
|
|
|
26
26
|
} from 'ox/tempo'
|
|
27
27
|
export type {
|
|
28
28
|
/** @deprecated */
|
|
29
|
-
Owner as
|
|
30
|
-
} from 'ox/tempo/
|
|
29
|
+
Owner as z_AccountConfigOwner,
|
|
30
|
+
} from 'ox/tempo/AccountConfig'
|
|
31
31
|
export {
|
|
32
32
|
type CustomTransport,
|
|
33
33
|
type CustomTransportConfig,
|
|
@@ -73,6 +73,7 @@ export * as Expiry from './Expiry.js'
|
|
|
73
73
|
export * from './errors.js'
|
|
74
74
|
export * as Formatters from './Formatters.js'
|
|
75
75
|
export * as Hardfork from './Hardfork.js'
|
|
76
|
+
/** Client-side storage for pending key authorizations, backed by a `Store`. */
|
|
76
77
|
export * as KeyAuthorizationManager from './KeyAuthorizationManager.js'
|
|
77
78
|
export * as P256 from './P256.js'
|
|
78
79
|
/**
|