Synchronizes committee membership and per-address config across EVM chains using off-chain EIP-712 signatures and a shared nonce.
- EIP-712 typed data; domain uses name + version only (no
chainIdorverifyingContract). - Digests are replayable across chains/deployments by design.
- Version changes intentionally invalidate prior digests.
MIN_SIZE = 3,MAX_SIZE = 255.THRESHOLD = 6000BPS (60%) rounded up.- Committee entries must be unique and non-zero.
- Desync recovery: collect missing digests and call
syncs()to replay sequentially. - Empty batch is a no-op.
- Config mapping only updates the provided accounts; old entries remain unless overwritten/cleared (clear by including the account in a
syncwithvalue = 0x).
sync(address[] newCommittee, Config[] config, bytes[] sigs)syncs(Sync[] batch)whereSync = {committee, config, sigs}Config = {account, version, value}stored in a single per-address mapping.- Libraries:
CommitteeSyncHash,CommitteeSyncConfig,CommitteeSyncValidation.
export OWNER=0xYourInitialMemberRun script/Deploy.s.sol.