Mainnet¶
Mainnet anchoring is not part of the validate consumer. PHP publishes promote.request; promote_processor submits the mainnet Certify.sol transaction and returns promote.response.
Ops constraints¶
- Real gas — enable only with
MAINNET_CERTIFY_ENABLED=1and filled RPC / key / address vars. - Dedup scan defaults fail-closed (
MAINNET_CERTIFY_DEDUP_REQUIRED=1): if the log scan cannot confirm the bundle is new, the job retries instead of risking a duplicate anchor. - Set
MAINNET_CERTIFY_DEDUP_FROM_BLOCKto the Certify deploy block (public RPCs capeth_getLogs;earliestoften fails). - Run at most one
promote_processorinstance when mainnet is enabled (check-then-act race under at-least-once delivery).
Env names¶
MAINNET_RPC_URL, MAINNET_CERTIFY_ADDRESS, MAINNET_PRIVATE_KEY (or MAINNET_CERTIFY_PRIVATE_KEY), ETH_MAINNET_CHAIN_ID (default 1), gas buffers, dedup vars.
Mainnet MAINNET_CERTIFY_ADDRESS is 0x4f2a70eC878E9Adae88FF0c7528ebEbf83dFD83c (Etherscan).
Confirm the authorized certifier before enabling
Certify.certify() reverts with UnauthorizedCertifier unless the sender is the contract's immutable AUTHORIZED_CERTIFIER. On mainnet that is the BAIF Gnosis Safe (0x8EAb4dB55DCEfb6D8bF76e1C6132d48D2048ef0e), not an EOA — so a direct submission signed with MAINNET_PRIVATE_KEY reverts unless that key is the authorized address.
Read AUTHORIZED_CERTIFIER() off the deployed contract and match it against your intended submitter before setting MAINNET_CERTIFY_ENABLED=1. Helper scripts under mainnet/ (e.g. certify-mainnet.sh) wrap the Safe-based production flow. Details: Certify contract.
Related¶
- Certify contract
- Testnet
- Worker
- Upstream
worker/eth_onchain.py+worker/README.md