Skip to content

feat(tempo): sync configurable accounts with Tempo T14 - #5408

Merged
jxom merged 16 commits into
mainfrom
jxom/tempo-configurable-t14-sync
Nov 6, 2026
Merged

jxom merged 16 commits into
mainfrom
jxom/tempo-configurable-t14-sync

Conversation

@jxom

@jxom jxom commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

Brings viem's Tempo configurable accounts in line with tempoxyz/tempo main (T14) and the TIP-1107/1111/1113/1137 specs.

Fixes

Upgrades (TIP-1113)

Access keys

  • Configurable accounts can act as access keys (TIP-1111, key type configurableAccount), through a new access option on Account.fromConfig (Account.fromConfig(config, { access: parent })) and keychain V2 envelopes. Simulation covers the delegate, and the relay fee payer accepts these envelopes.
  • keyAuthorizationSimulation is typed, and it is filled in when a configurable parent's key authorization has no quorum yet.
  • The local verifyHash keychain path follows T14: it rejects retired root keys and key-type mismatches.
  • Admin access keys are removed, since T14 retires them (TIP-1137): the admin option on key authorizations, accessKey.isAdmin, accessKey.watchAdminAuthorized, and their docs. Access keys no longer sign key authorizations (the root key or a configurable account does). verifyHash keeps admin, which now means "root key only".

Chain config

  • prepareTransactionRequest drops a dead account check and two async IIFEs, and useExpiringNonce is a module function called only when the request is not coordinated, so coordinated requests (configurable accounts and their access keys) skip Concurrent.detect.

ABIs and docs

  • Added Abis.configurableAccountShim (isValidSignature, onERC721Received).
  • The docs now say registered accounts have 0xef code and support ERC-1271, and that the address is derived by keccak, not CREATE2.
  • The upgrade docs now say migration keeps existing access keys working.

Tests

  • The tempo-accounts CI image moves from sha-179347b (the closed checkpoint chore: checkpoint configurable accounts for devnet audit tempoxyz/tempo#8595) to sha-96bdeb7 (Tempo main).
  • On that image, the tempo-accounts project passes 179/179. Before these changes it failed 2 of 159 tests, both from the updateConfigSync bug.
  • Related tempo unit tests: 318 passed, 6 skipped.
  • pnpm check:types and Biome pass.

Relay coordination for configurable access keys

  • Relay.accounts now collects owner approvals for a configurable account acting as an access key (TIP-1111). It unwraps the keychain V2 envelope, stores the operation with its parent as userAddress, and broadcasts the keychain envelope at quorum. Pending results and eth_getTransactionByHash report the parent as from.
  • withRelay routes keychain envelopes with a configurable inner signature to the relay, and approving a stored operation by hash works with the access key account.
  • New HTTP tests in internal/relay/accounts.test.ts run through withRelay with Relay.accounts and Relay.feePayer, with owners on separate clients. They cover sponsored quorum, a same-transaction grant and its later reuse, spending limits, revocation, expiry, rotation of the delegate's owners with updateConfig, and a non-owner approval. With these, tempo-accounts passes 186/186 (185/185 after the admin key tests were removed).
  • Uses AccountOperation userAddress from feat(tempo): add userAddress to AccountOperation transaction operations ox#575, released in ox 0.14.63 (ported to ox v1 in feat(tempo): add userAddress to AccountOperation transaction operations ox#576).

Notes

  • Abis.ts was edited in its generated format rather than regenerated. pnpm gen:tempo-abis also rebuilds the Earn and propAMM ABIs from their latest commits, and the Earn build failed in this environment. Rerunning the generator should produce the same configurable-account entries.
  • Every changeset is prefixed `viem/tempo`:.
  • ox is bumped from 0.14.59 to 0.14.63. The lockfile only swaps the ox version and integrity; regenerating it with pnpm also rewrote unrelated workspace links, so that churn is left out.

Pyramid thread: https://pyramid.tehq.net/threads/4b936132-b820-48bb-9572-3b71be133a78

@vercel

vercel Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
viem Error Error Nov 6, 2026 3:47am UTC

Request Review

@changeset-bot

changeset-bot Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 877ea39

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
viem Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-06T03:45:58.317358Z 877ea39 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e0e921c036

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/tempo/chainConfig.ts
Comment on lines +445 to +446
if (keyInfo.expiry <= BigInt(Math.floor(Date.now() / 1000)))
return false

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Check delegate grant expiry against the selected block

When verifying a configurable access-key signature with a historical blockNumber or blockHash, the grant and owner quorum are read at that block, but expiry is checked against the current wall clock. Consequently, a signature whose grant was active at the requested block returns false once that grant expires today. This also makes the configurable-key path inconsistent with the primitive V2 path, which delegates verification to a precompile at the selected block. Compare the expiry against the selected block's timestamp instead.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Published viem@0.0.0-pr-5408-89fe7e9 under the pr-5408 dist-tag, which follows this pull request until it closes.

pnpm add viem@pr-5408
pnpm add viem@0.0.0-pr-5408-89fe7e9

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 42fe58e074

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/tempo/chainConfig.ts
Comment on lines +458 to +462
if (version === 'v2')
return await (
readContract(client, {
...block,
...verifyAccessKey.call({

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve access-key verification on Tempo Zones

For clients using a chain created by Zone.from, verifying any primitive V2 access-key signature with mode: 'allowAccessKey' now unconditionally calls the signature-verifier precompile. Zones lack that precompile, as documented in src/tempo/internal/relay/feePayer.ts, while src/tempo/Zone.ts installs this same chainConfig. Consequently, previously valid signatures can no longer be verified on Zones: the call fails instead of using the previous keychain-metadata lookup and local signature verification. Preserve a verification path for Zones rather than requiring the precompile on every Tempo chain.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebe04046f8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +940 to +942
if (decoded.functionName !== 'upgradeAccount') return undefined
const [threshold, owners] = decoded.args
return AccountConfig.fromUpgrade(from, { owners, threshold })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Cache config updates that follow a batched upgrade

When a root-signed batch contains upgradeAccount followed by updateConfig, this scan caches only the upgrade's initial config and ignores the configuration installed by the subsequent update. The root-signed submission path never calls cacheNextConfigs, so without a custom resolveConfig, account_getConfig returns null for the final onchain commitment and subsequent address-only coordinated transactions cannot be prepared. Process the calls following the upgrade through the config-update caching logic as well.

Useful? React with 👍 / 👎.

@socket-security

socket-security Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedox@​0.14.59 ⏵ 0.14.639910099 +197100

View full report

@jxom
jxom merged commit 7585a54 into main Nov 6, 2026
40 of 41 checks passed
@jxom
jxom deleted the jxom/tempo-configurable-t14-sync branch November 6, 2026 03:50

This branch had an error being deployed

1 failed deployment
Preview — 877ea392 Deployed Nov 6, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant