Skip to content

Commit dd7d792

Browse files
authored
feat(tempo): multisig (#5029)
* feat(tempo): support multisig mailbox approvals * Update pending-tempo-multisig-receipts.md * refactor(tempo): configure transaction envelopes * fix(tempo): preserve portable chain declarations * docs: update agent guidelines * feat(tempo): add multisig operation store * feat(tempo): add multisig approval actions * feat(tempo): refine multisig approval flow * feat(tempo): prepare multisig approval requests * feat(tempo): add experimental multisig client option * feat(tempo): coordinate multisig approvals with storage * refactor(tempo): namespace multisig rpc methods * fix(tempo): serialize stored multisig operation * refactor(tempo): use transaction actions for multisig approvals * docs(tempo): refine multisig transaction examples * Delete .changeset/calm-mailboxes-coordinate.md * chore: update ox to 0.14.36 * fix multisig approval preparation and tests * update tempo transaction snapshots * fix(tempo): harden multisig transaction coordination * refactor(tempo): simplify multisig transport and receipt types * chore: format multisig transport and update size limits * docs(tempo): simplify multisig export annotation * refactor(tempo): inline multisig polling helpers * fix(test): reset sepolia fork in cross-chain test * feat(tempo): add multisig operation RPCs * refactor(tempo): use ox multisig operation helpers * refactor(tempo): export multisig operations * feat(tempo): add multisig transport * docs(tempo): document multisig operations * test(tempo): separate multisig owner approvals * fix(tempo): harden multisig coordination * refactor(tempo): rename storage utilities to store * refactor(tempo): scope multisig submission derivation * fix(tempo): correct multisig transaction coordination * refactor(tempo): internalize operation serialization * chore: update chain bundle limits * fix(tempo): harden multisig coordination * fix(tempo): settle multisig submissions * fix(tempo): validate multisig submissions * feat(tempo): support multisig config witnesses * refactor(tempo): flatten multisig config inputs * refactor(tempo): update multisig action interfaces * fix(tempo): update multisig operations for ox 0.14.41 * ci: update Tempo multisig image * feat(tempo): cache multisig configs * feat(tempo): coordinate multisig key authorizations * test(tempo): expand multisig authorization coverage * fix(tempo): stabilize multisig authorization coordination * chore: update Tempo chain size limits * Delete .changeset/tender-mails-coordinate.md * refactor(tempo): use account and owner for multisig approvals * test(tempo): update multisig error snapshot * fix: use secure randomness in vector generators * test(tempo): update multisig owner error snapshot * test(tempo): update access key error snapshot * test(tempo): update submission error snapshot * refactor(tempo): rename multisig address inference sentinel * feat(tempo): coordinate multisig through relays * feat(tempo): support t12 multisig rpc * fix(tempo): correct multisig coordination * chore(tempo): simplify multisig references * fix(tempo): propagate relay lookup failures * fix(tempo): preserve account overrides * fix(tempo): align multisig account derivation * ci: update Tempo multisig image * test(tempo): update multisig owner snapshot * test: update multisig access key snapshot * test: update multisig submission snapshot * fix(tempo): harden multisig coordination
1 parent ef4be8e commit dd7d792

103 files changed

Lines changed: 11084 additions & 3051 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
"viem": patch
3+
---
4+
5+
Added coordinated Tempo multisig transactions, key authorizations, config resolution, and canonical CREATE2 account derivation for the updated TIP-1061 protocol.
6+
7+
```ts
8+
import { Account } from 'viem/tempo'
9+
10+
const initial = Account.fromMultisig({
11+
address: 'infer',
12+
owners: ['0x0000000000000000000000000000000000000001'],
13+
})
14+
const current = Account.fromMultisig({
15+
address: initial.address,
16+
...initial.config,
17+
version: 1,
18+
})
19+
const addressOnly = Account.fromMultisig(initial.address)
20+
```

.github/workflows/verify.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ jobs:
245245
CI: true
246246
VITE_TEMPO_ENV: localnet
247247
VITE_TEMPO_MULTISIG: 'true'
248-
VITE_TEMPO_TAG: sha-7825976
248+
VITE_TEMPO_TAG: sha-2bd9fa3
249249

250250
test-tempo:
251251
name: Test Local Tempo (${{ matrix.hardfork }}, ${{ matrix.shard }}/${{ matrix.total-shards }})

AGENTS.md

Lines changed: 327 additions & 348 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"fast-check": "^4.9.0",
7272
"knip": "^5.64.0",
7373
"micro-eth-signer": "^0.14.0",
74-
"ox": "0.14.34",
74+
"ox": "0.14.44",
7575
"permissionless": "^0.2.57",
7676
"prool": "~0.2.14",
7777
"publint": "^0.2.12",
@@ -149,7 +149,7 @@
149149
{
150150
"name": "const viem = require('viem') (cjs)",
151151
"path": "./src/_cjs/index.js",
152-
"limit": "106 kB"
152+
"limit": "112 kB"
153153
},
154154
{
155155
"name": "import { createClient, http } from 'viem'",
@@ -196,7 +196,7 @@
196196
{
197197
"name": "import * from 'viem/chains'",
198198
"path": "./src/_esm/chains/index.js",
199-
"limit": "113 kB",
199+
"limit": "119 kB",
200200
"import": "*"
201201
},
202202
{
@@ -208,7 +208,7 @@
208208
{
209209
"name": "import { tempoTestnet } from 'viem/chains'",
210210
"path": "./src/_esm/chains/index.js",
211-
"limit": "70 kB",
211+
"limit": "76 kB",
212212
"import": "{ tempoTestnet }"
213213
},
214214
{

pnpm-lock.yaml

Lines changed: 19 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ auditConfig:
5050
- GHSA-jmr9-qjv8-65gv
5151

5252
overrides:
53-
ox: 0.14.34
53+
ox: 0.14.44
5454
typescript: ^5.9.3
5555
'@opentelemetry/api@^1.8.0': ~1.7.0
5656
permissionless>viem: workspace:*

scripts/generateTempoAbis.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,18 @@ function tempoAdapter(): SourceAdapter {
3636
after: 'IAddressRegistry',
3737
items: [
3838
'function deriveAccount(bytes32 salt, uint8 threshold, (address owner, uint8 weight)[] owners) pure returns (address account)',
39-
'function isMultisigAccount(address account) view returns (bool)',
40-
'function getConfig(address account) view returns ((uint64 version, uint8 threshold, (address owner, uint8 weight)[] owners))',
41-
'function updateConfig(uint8 threshold, (address owner, uint8 weight)[] owners)',
42-
'event MultisigInitialized(address indexed account)',
43-
'event MultisigConfigUpdated(address indexed account, uint8 threshold, (address owner, uint8 weight)[] owners)',
44-
'error NotMultisigAccount()',
39+
'function getConfigCommitment(address account) view returns (bytes32 commitment)',
40+
'function updateConfig((bytes32 salt, uint64 version, uint8 threshold, (address owner, uint8 weight)[] owners) current, uint8 threshold, (address owner, uint8 weight)[] owners)',
41+
'event MultisigConfigUpdated(address indexed account, bytes32 salt, uint64 version, uint8 threshold, (address owner, uint8 weight)[] owners)',
4542
'error InvalidAccount()',
4643
'error InvalidConfig()',
4744
'error InvalidThreshold()',
48-
'error InvalidOwner()',
45+
'error InvalidMultisigOwner()',
4946
'error InvalidWeight()',
5047
'error TooManyOwners()',
5148
'error DuplicateOwner()',
5249
'error InvalidOwnerOrder()',
53-
'error AccountAlreadyInitialized()',
54-
'error UnauthorizedCaller()',
55-
'error SameTransactionUpdateNotAllowed()',
50+
'error UnauthorizedMultisigCaller()',
5651
],
5752
},
5853
}

0 commit comments

Comments
 (0)