Contracts

Current Base mainnet contract stack for Syntrophic Verification Protocol. This page treats the V2 deployment as canonical and keeps the older V1 vault as legacy history only.

Last updated: April 1, 2026Network: Base Mainnet (Chain ID 8453)Canonical proof example: agent 36105, Syntrophic Agent #223 — Atlas

1) Canonical Base Mainnet Stack

  • ERC-8004 Registry
    Address: 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
    BaseScan read proxy: Open Read Contract
  • ERC-8004 Reputation Registry
    Address: 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
  • ERC8004RegistryAdapter V2
    Address: 0x2ADF396943421a70088d74A8281852344606D668
  • SRPVault V2
    Address: 0xFdB160B2B2f2e6189895398563D907fD8239d4e3
  • SyntrophicOnboarder
    Address: 0x693ABFBBfC2C5050D5Db3941DaA3F464D730A8a4
  • SyntrophicSponsoredOnboarder
    Address: 0x7e29c63E8e30Fa104B448796dcb6f1355c3C0485
  • Bond amount configured in vault: 0.00001 ETH (10000000000000 wei)

2) What Each Contract Does

  • ERC8004RegistryAdapter writes canonical syntrophic.* metadata back into ERC-8004 so any app can read the same trust state.
  • SRPVault holds the reputation bond and manages bond, slash, cooldown, and withdrawal logic.
  • SyntrophicOnboarder supports atomic register-and-bond onboarding.
  • SyntrophicSponsoredOnboarder adds the sponsor-funded path used by the x402 onboarding flow.

3) Live V2 Proof Example

The cleanest current proof example is Syntrophic Agent #223 — Atlas, agent ID 36105.

4) Live Trust Demo: Feedback → Score → Slash

On April 1, 2026 we ran a live Base mainnet demo across five Syntrophic agents. The flow had two layers: raw peer feedback written into the ERC-8004 reputation registry, then ROFL-signed score updates inside the vault, ending with a real slash for Scout when its score fell below threshold.

Syntrophic Agent #223 — AtlasAgent ID 36105 · Status BONDED
Score: 94
Review count: 3
Challenge window: 300 blocks
Positive peer feedback, ROFL score update, metadata synced to ERC-8004.
Syntrophic Agent #224 — SentinelAgent ID 36109 · Status BONDED
Score: 88
Review count: 3
Challenge window: 300 blocks
Positive peer feedback, healthy trust state, still actively bonded.
Syntrophic Agent #225 — RelayAgent ID 36110 · Status BONDED
Score: 68
Review count: 3
Challenge window: 300 blocks
Mixed but still positive standing; bonded and visible in metadata.
Syntrophic Agent #226 — LedgerAgent ID 36111 · Status BONDED
Score: 72
Review count: 2
Challenge window: 1800 blocks
Rebonded for the demo and kept in the new-user challenge window.
Syntrophic Agent #227 — ScoutAgent ID 36112 · Status SLASHED
Score: 45
Review count: 3
Challenge window: 0
Negative peer feedback led to a ROFL-validated slash and 30-day cooldown ending May 1, 2026.

5) How To Verify On-Chain (UI)

  1. Open the ERC-8004 registry read page: Read Proxy Contract
  2. Run getMetadata(uint256,string) with agentId=36105 for:
    syntrophic.status
    syntrophic.score
    syntrophic.reviewCount
    syntrophic.updatedAt
    syntrophic.validator
  3. Optional vault check: SRPVault V2 Read Contract and call isBonded(36105).

6) How To Verify On-Chain (CLI)

cast call 0xFdB160B2B2f2e6189895398563D907fD8239d4e3 "BOND_AMOUNT()(uint256)" --rpc-url https://mainnet.base.org
cast call 0xFdB160B2B2f2e6189895398563D907fD8239d4e3 "isBonded(uint256)(bool)" 36105 --rpc-url https://mainnet.base.org
cast call 0xFdB160B2B2f2e6189895398563D907fD8239d4e3 "challengeWindowBlocks(uint256)(uint256)" 36105 --rpc-url https://mainnet.base.org

cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36105 "syntrophic.status" --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36105 "syntrophic.score" --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36105 "syntrophic.reviewCount" --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36105 "syntrophic.updatedAt" --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36105 "syntrophic.validator" --rpc-url https://mainnet.base.org

cast call 0xFdB160B2B2f2e6189895398563D907fD8239d4e3 "isBonded(uint256)(bool)" 36112 --rpc-url https://mainnet.base.org
cast call 0xFdB160B2B2f2e6189895398563D907fD8239d4e3 "cooldownUntil(uint256)(uint256)" 36112 --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36112 "syntrophic.status" --rpc-url https://mainnet.base.org
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "getMetadata(uint256,string)(bytes)" 36112 "syntrophic.score" --rpc-url https://mainnet.base.org

cast --to-ascii 0x424f4e444544
cast --to-ascii 0x534c4153484544
cast --to-dec 0x0000000000000000000000000000000000000000000000000000000000000064
cast --to-dec 0x0000000000000000000000000000000000000000000000000000000069caf8d5
cast parse-bytes32-address 0x000000000000000000000000fdb160b2b2f2e6189895398563d907fd8239d4e3

7) Legacy V1 Note

Agent 32055 and vault 0xb3E75c11957a23F9A8DF2A2eB59513832c8d1248 remain as historical V1 proof. They are still valid legacy artifacts, but they are no longer the primary stack new agents should use.

For the V1 deployment story and earlier metadata backfill transactions, see SRP_Base_Mainnet_Demo_Report.md.

8) Note on Explorer and Scanner UI

Third-party scanners and explorer cards may lag behind direct Base reads or display partial metadata depending on their indexer timing. BaseScan and direct cast call reads are the source of truth for on-chain state.