Skip to main content

SEAL Cross-Account Synthetic

Seal Cross-account synthetic​

COMG-715 adds a production-safe negative synthetic on top of the Move unit test test_seal_approve_delegate_requires_matching_owner. The unit test covers the contract in isolation. This check would alert if a live identity from account A can authorize account B's Seal key.

The script is read-only. It never calls remember, never fetches Seal decryption keys, and never executes a transaction. It devInspects account::seal_approve only.

When it runs​

.github/workflows/synthetic-seal-cross-account.yml is workflow_dispatch only. It does not run on pull requests, so a PR without production secrets cannot page and cannot touch chain.

If the two account ids and two delegate keys are unset, the script prints skip and exits 0.

Secrets and variables​

Use two isolated Walrus Memory accounts (different owners). Each key must be a delegate or owner of its own account and must not be registered on the other.

NameWherePurpose
SEAL_CROSS_ACCOUNT_A_ID / SEAL_CROSS_ACCOUNT_B_IDGitHub secretAccount object ids
SEAL_CROSS_ACCOUNT_A_KEY / SEAL_CROSS_ACCOUNT_B_KEYGitHub secretDelegate private keys (hex or suiprivkey1…)
SUI_RPC_URLGitHub variableJSON-RPC fullnode
MEMWAL_PACKAGE_IDGitHub variablePolicy package id
MEMWAL_REGISTRY_IDGitHub variableAccountRegistry object id
MEMWAL_SERVER_URLGitHub variable or workflow inputOptional; GET /config fills package id and RPC URL
SUI_NETWORKGitHub variablemainnet or testnet when the RPC URL does not say

Do not commit private keys. Do not reuse the shared benchmark account as both A and B.

Schedule (ops)​

Dispatch from a protected ref after the secrets exist:

Source: relayer/synthetic-seal-cross-account.md
$ gh workflow run synthetic-seal-cross-account.yml --ref main

Or Actions → Synthetic Seal cross-account → Run workflow.

To cron it, add on.schedule to that workflow once the two-account secrets are in place (left off by default so an empty repo cannot false-green or page):

Source: relayer/synthetic-seal-cross-account.md
on:
schedule:
- cron: "17 6 * * *" # daily 06:17 UTC
workflow_dispatch:

Point the workflow failure at on-call. A red job whose log contains SYNTHETIC_SEAL_CROSS_ACCOUNT_FAIL means live seal_approve allowed a cross-account identity. That is a Seal policy regression, not a flake.