Open · O1
Contracts verified and matching
Does the deployed bytecode match public source, and can a third party rebuild it?
Why it matters
Unverified bytecode means every other onchain finding is a guess. A full Sourcify match plus a build script lets an auditor confirm that what was reviewed is what is running.
Scoring anchors
| All settlement contracts verified on Sourcify (full match) and on an explorer, and the repo contains a build script reproducing the deployed bytecode from a pinned commit. | |
| Verified on an explorer only, or partial match. | |
| Some contracts verified. | |
| Unverified. Incumbents are unknown unless they have contracts. | |
| No admissible evidence submitted yet. Counts as 0 in the pillar. |
Admissible evidence
- Sourcify API response for each address verified
- Explorer verification page verified
- Build script at a pinned commit verified
Common failures
- Implementation verified but proxy not, or the reverse.
Current ratings
| Provider | Score | Finding |
|---|---|---|
| Aleo (credits.aleo private transfers) | Aleo programs are stored onchain as Aleo instructions, so source and deployment can be compared directly; credits.aleo matches the snarkVM source. Sourcify does not cover Aleo, and we read the deployed program through Provable's hosted API rather than our own node. Judgment call: a full source match through an explorer-style API is anchor 2; anchor 3 is defined by Sourcify and a rebuild script, which do not apply. | |
| AnomaPay | All settlement contracts are partial Sourcify matches, and the adapter source equals the tagged release. No rebuild attempted. Scored 2. | |
| Avalanche Card | No admissible evidence yet. | |
| Avici Card | No admissible evidence yet. | |
| Aztec (Alpha mainnet private token transfers) | All L1 rollup and governance contracts are partial matches on Sourcify. We did not check L2 contract classes (the token contracts users pay with) against source, and attempted no rebuild. Scored 2: partial matches. | |
| Bitget Wallet Card | The settlement contracts are verified on Sourcify, mostly as partial (metadata) matches; CHF24 is a partial match and the CNH24 proxy is not on Sourcify. No public repository or build script reproduces the bytecode. Partial match without a build script, so 2. | |
| Blanksquare (Shielder) | Every settlement contract has public verified source: partial Sourcify matches plus explorer verification for the implementation and libraries, and an explorer similar-match for the standard ERC1967 proxy. No full match and no rebuild attempted. Scored 2. | |
| COCA Card | No admissible evidence yet. | |
| Coinbase Commerce (Onchain Payment Protocol) | Both Base Transfers contracts are exact matches on Sourcify. The cell misses 3 because the repo has no build script that reproduces the bytecode. The contract that carried most Base payments (0x0305…b7a8) was built from source that was never pushed to the repo; that source is public only through Sourcify. We did not check Basescan verification, because Basescan blocks automated requests. | |
| Curvy | The vault, factory and aggregator logic is verified on Sourcify (two exact matches and one partial). The verifiers every proof goes through, and the proxies, are not on Sourcify. Arbiscan and Arbitrum Blockscout served a bot challenge, which we did not bypass, so explorer verification was not checked. The verified source matches the develop branch, not main, and deployed_addresses.json lists older implementations. Scored 1: some contracts verified. | |
| Daimo Pay | All six settlement contracts have source verified on Basescan or Sourcify. Four are exact matches on Sourcify. DepositAddressManager is only a partial match on Sourcify, and DaimoPayExecutor is verified on the explorer only, so the cell cannot reach 3. A pinned Foundry build config exists, but we did not try to reproduce the deployed bytecode from it. The DaimoPayRelayer wrapper at 0xc88f…eE04 is an authorized relayer and is not verified anywhere. Judgment call: we class it as operator tooling rather than a settlement contract, which keeps the score at 2. If it counted as a settlement contract, the score would be 1. | |
| Deblock Card | No admissible evidence yet. | |
| Ethena Pay | The wallet logic is verified on one explorer (Routescan), but the factory implementation, which maps every wallet selector to its facet and holds the executor and global pause, is unverified anywhere. Nothing is on Sourcify apart from the beacon, and there is no public repo or build script. Some contracts verified, so 1. | |
| ether.fi Cash | Every settlement-path contract is verified on Sourcify or the explorer, but the Sourcify results are partial matches, not exact ones, and three contracts are explorer-only. The repo ships bytecode-comparison scripts, which is close to the reproducible-build bar, but I did not run them. Partial match = 2. | |
| Exa Card | Exa's own contracts and Rain's collateral beacon and implementation are exact matches, and Exa has a committed Foundry deploy. The exaUSDC market implementation that holds all card collateral is not on Sourcify, and the Optimism Blockscout API returned no verification record for it. Some settlement contracts are verified, so 1. Judgment call: the unverified market implementation sits in the settlement path, so I did not go higher. | |
| Fluidkey | All contracts in the path are full Sourcify matches. No rebuild was attempted, and the Safe contracts come from Safe's own repository rather than Fluidkey's. Judgment call: 2. | |
| Fuse Card | The program has no recorded verified build. The registry entry is unverified and points at a January 2024 commit whose spending-limit code (members must be multisig members) does not match observed behaviour; the audited commit 64af733 does match it. The README gives reproducible build steps, but no one has recorded a match. Unverified, so 0. | |
| Gnosis Pay | Every mastercopy that holds logic is verified on Sourcify, five of six as exact matches; Roles is a partial match. The minimal-proxy instances delegate to those verified mastercopies. Spender.sol and Bouncer.sol at the pinned commit are byte-identical to the Sourcify sources (apart from a trailing newline). There is no documented script that rebuilds the deployed bytecode from a pinned commit, and Roles is partial, so 2. | |
| HesabPay | No admissible evidence yet. | |
| Hinkal | Every settlement contract we checked is verified. The main contract is an exact match on Sourcify, and the helper and the registered verifiers are fully verified on Blockscout. The repo source matches the verified source. There is no build script, so anchor 3 is out of reach. Scored 2. | |
| Holyheld Card | Only the stock OpenZeppelin proxy and ProxyAdmin are verified. The implementation that holds the top-up logic, roles and pause is unverified everywhere checked, and no contract source is public. Some contracts verified, so 1. | |
| Houdini Swap | No admissible evidence yet. | |
| Hyperbeat Card | Hyperbeat Pay's contracts are deployed but not verified on HyperEVMScan or Sourcify, and the audited Liquid-Bank repository is private. Unverified, so 0. Judgment call: the provider has contracts, so O1 is scored rather than left unknown. | |
| Jupiter Card | No admissible evidence yet. | |
| M-Pesa | No admissible evidence yet. | |
| MetaMask Card | The settlement contract is verified: an exact match on the explorer and a partial match on Sourcify. Its source exists only in verification metadata. No public repository or build script reproduces it, so 2. | |
| Opera MiniPay | No admissible evidence yet. | |
| Monero | Not applicable as worded: Monero has no contracts, and its rules run in node software that each operator builds or downloads. The repo has reproducible-build tooling (contrib/guix), but we did not verify any release binary against source. | |
| Nullmask | The deployed contracts are unverified everywhere we looked, although the docs' threat model calls the smart contract "open-source, auditable". Scored 0. | |
| Oobit Card | No admissible evidence yet. | |
| Payy Card | The proxy, the implementation, the ProxyAdmin and the owner Safe are exact matches on Sourcify. The live ZK verifier is only a partial match. The repo has a Hardhat deploy script but no recorded build that reproduces the deployed bytecode. Partial match plus no reproducible build gives 2. | |
| Phantom Cash | No admissible evidence yet. | |
| Plasma One | Rain's Coordinator and Collateral logic are verified on Plasmascan, but the beacon that decides which Collateral logic runs is not, nothing is on Sourcify, and the user wallet contract is not identified. Some contracts verified, so 1. | |
| Privacy Pools (0xbow) | Every settlement contract in scope is verified on Sourcify as a partial match, and the Sourcify sources equal the repo files at d494b63e and at the audited commits apart from a trailing newline. We did not rebuild the bytecode. Scored 2: partial match. | |
| Railgun | All in-scope contracts are verified on Sourcify; the implementation, which holds the logic, is a partial match. No rebuild attempted. Scored 2. | |
| Request Network | All four settlement contracts are full matches on Sourcify and exact matches on Basescan. Their sources match the repo files at this commit, apart from a trailing newline. The repo's build config does not reproduce the deployed bytecode, because it now enables the optimizer and the deployments were compiled without it. Rebuilding would need the older config from git history, and we did not try. Judgment call: we score 2 and not 3, because anchor 3 needs a repo build script that reproduces the deployed bytecode. | |
| Rizon Card | No admissible evidence yet. | |
| SafePal Card | The settlement contracts are verified on Sourcify, mostly as partial (metadata) matches; CHF24 is a partial match and the CNH24 proxy is not on Sourcify. No public repository or build script reproduces the bytecode. Partial match without a build script, so 2. | |
| Solayer Card (Emerald Card / Solayer Pay) | No admissible evidence yet. | |
| Tongo (confidential ERC-20 on Starknet) | The onchain class hashes match the docs (Tongo 0x072c…471e, Vault 0x044d…121f), but we could not show that the source compiles to them. Voyager returned 403 and was not bypassed, Starkscan renders client-side, and Starknet has no Sourcify. No rebuild was attempted. | |
| Tornado Cash (Classic pools) | The pools and verifier are partial matches on Sourcify, the governance-era contracts are full matches, and the hasher, which every deposit calls, has no Sourcify verification (it is generated bytecode; we could not load Etherscan). No rebuild was attempted. Judgment call: partial matches would support 2, but one settlement-path contract is unverified, so we take anchor 1. | |
| Tria | No admissible evidence yet. | |
| Tuyo Card | The account contracts are partially verified. The card collateral contracts that hold spendable funds were not identified, so not every settlement contract is verified. Some contracts verified, so 1. | |
| Umbra Cash | Both settlement contracts are full Sourcify matches and the build settings are in the repo. Judgment call: anchor 3 also needs a build from the pinned commit that reproduces the bytecode; the repo files differ by a trailing newline, which changes the metadata hash, and we did not rebuild, so 2. | |
| Wirex One | Most logic contracts are verified as partial matches, but the registry that routes every role and address is unverified, and so is one implementation. No build script is public. Some contracts verified, so 1. | |
| Wise | No admissible evidence yet. | |
| WORM (BETH proof-of-burn) | Every settlement contract is an exact Sourcify match, and the deployed BETH source matches an untagged commit (eab0f53b) in the public repo. Etherscan was not checked: it blocks automated access. No rebuild was attempted, and the repo does not pin compiler settings. Judgment call: 2, not 3. | |
| XPlace Card | The Kamino lending program is a reproducible verified build of a pinned public commit. The rest of the payment path is not: XPlace's own contracts (claimed as FYEO-audited) and Rain's card collateral program have no published address, so their bytecode cannot be matched. Some contracts verified, so 1. | |
| Zcash (shielded transfers) | Not applicable as worded: Zcash has no contracts, and its rules run in node software that each operator builds or downloads. Zallet documents StageX reproducible builds and Zebra publishes release binaries, but we did not verify any binary against source. | |
| zERC20 (zBNB on BNB Chain) | Most of the zBNB contracts are verified on Sourcify, but the Verifier implementation, which every redeem calls, is not verified on BNB Chain. Its bytecode matches a verified deployment on Base. BscScan blocked automated access, and we did not bypass it. The official repository is not public, so there is no build script from a provider-published commit. Judgment call: 1 rather than 2, because one settlement contract is unverified on this chain. |