Payment Rails CROPS Dashboard
Unaudited, unvetted, experimental. Do not use as a reference. AI-researched ratings that may be wrong; not advice or a statement of fact about any provider. Full disclaimer
Pending review. 1150 of 1150 ratings not yet checked by a human. Do not rely on unreviewed ratings.

Curvy

transferArbitrum One Assessed on Arbitrum One (chain 42161)curvy.box

Ratings apply to this deployment only. Treat them as unverified for other chains. Why this deployment: The contracts README (0xCurvy/contracts@e996fe71 README.md L35-L36) says the production aggregator chain is Arbitrum, and that Base, BSC, Ethereum, Gnosis, Linea, Optimism, Polygon, Tempo and Robinhood run portals only. Unit: the Arbitrum CurvyAggregatorAlphaV2 proxy 0xE519…cbB1, the CurvyVaultV2 proxy 0xcC8d…4f00, PortalFactory 0x4f32…1389 and the registered verifiers. Excluded: portal-only chains, Solana, the V1 contracts, and the testnet and staging deployments.

At a glance

Category
Protocols for privacy-preserving transfers
Chain
Arbitrum OneArbitrum One
CROPS tally
5 of 23 hold up · 1 no evidence
Security audits
1 published
Offered
Everywhere
Last edited
2026-10-13 · History
  1. Censorship Resistance0 FailsWeakest: Admin pause or freeze powers; Reliance on hosted services
  2. Open1 WeakWeakest: Contracts verified onchain; Whole stack published; Can be self-hosted; Interfaces and data export
  3. Free0 FailsWeakest: Open-source licences; No proprietary dependencies
  4. Privacy1 WeakWeakest: Tracking and analytics; Data collected beyond payment; Third parties in the payment flow
  5. Security No evidenceWeakest: Secrets and webhook handling

Where it is offered

Offered everywhere, per the provider's code or documents. Checked 2026-10-09. Not scored.

The deployed Arbitrum contracts have no country check, and the public SDK has no country or geolocation gate (a grep of src/ finds none). We found no first-party terms page that lists countries; curvy.box has a privacy policy but no terms. Address screening by Global Ledger can refuse individual portals; that filters addresses, not countries. Judgment call: the closed app.curvy.box and api.curvy.box could geoblock by IP, and we could not inspect them.

Evidence (2)2 verified
  1. Verified

    Withdrawal checks only the root, the proof and the nullifiers. No contract has a caller-country or geolocation check.

    0xCurvy/contracts · evm/src/v2/aggregator-alpha/CurvyAggregatorAlphaV2.sol

    commit e996fe7195 · checked 2026-10-09

  2. Verified

    The SDK HTTP client sends requests to the configured API base. A grep of src/ for country, geolocation and jurisdiction finds no country gate.

    0xCurvy/sdk · src/http/index.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Censorship Resistance

Who can block valid use, and can users route around them?

0 FailsPillar rating: weakest of 5
1 of 5 Partial or better

What would raise this pillar

  • Admin pause or freeze powers reaching Weak: Role held by a multisig that misses one of those conditions (no timelock, undisclosed signers, bypass modules), or the constraints are documented only.
  • Reliance on hosted services reaching Weak: Intermediaries required, only documented, no public code.

Admin pause or freeze powers

Can any privileged role stop, freeze, or block payments through the settlement contracts, and how is that role constrained? C1

0 Fails

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Shielding a payment into the pool needs the operator. That role is held by a single EIP-7702-delegated EOA, and per the docs it acts only after Global Ledger screening, so it can refuse individual portals without notice. Direct shielding is disabled. AUTHORITY_ROLE (Safe 4-of-6, no timelock) can switch it on or off, replace verifiers and rewire or upgrade the vault and aggregator. Withdrawals and portal recovery have no pause. Scored 0: an EOA-held role that can target individual payees.

Evidence (3)3 verified
  1. Verified

    deployShieldPortal is onlyRole(OPERATOR_ROLE), and it is the only route by which a payee's portal funds enter the pool. The aggregator's portalShield accepts only a portal authorised during that call.

    0xCurvy/contracts · evm/src/v2/portal/PortalFactory.sol

    commit e996fe7195 · checked 2026-10-09

  2. Verified

    hasRole(OPERATOR_ROLE, 0xE679…06d2) on PortalFactory returns true at block 513140605. That address is an EIP-7702-delegated EOA (code 0xef0100…). The Safe granted the role and revoked its own OPERATOR_ROLE in the same block, 0x1dadba35.

    0x4f32…1389 on sourcify.dev

    0x4f32…1389 explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  3. Verified

    directShieldEnabled() returns false, so deposits that bypass portals are switched off. AUTHORITY_ROLE, which can toggle that switch, swap verifiers, rewire the vault and upgrade, is held by Safe 0xB2c1…4b9F (4-of-6, no timelock).

    0xE519…cbB1 on arbitrum.blockscout.com

    0xE519…cbB1 explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Settle without the provider

Can a payer or payee complete settlement by calling the public contracts directly, without the provider's API, signer, or relayer? C2

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

A payer completes a payment with a plain transfer to the payee's portal address. Moving those funds into the shielded pool needs Curvy's operator (C1), because direct shielding is disabled. The payee can withdraw from the pool, or recover funds stuck at a portal, by calling the contracts directly. Withdrawing also needs notes-tree data and circuit keys that Curvy hosts (C3). Scored 1: settlement into the private pool depends on the provider, while recovery and withdrawal are direct.

Evidence (3)3 verified
  1. Verified

    submitWithdrawalRequest is permissionless. It checks a known notes root and a Groth16 proof, then pays the destination encoded in the proof. commitPendingNotes (L274) is permissionless too.

    0xCurvy/contracts · evm/src/v2/aggregator-alpha/CurvyAggregatorAlphaV2.sol

    commit e996fe7195 · checked 2026-10-09

  2. Verified

    Anyone can call deployRecoveryEntryPortal. Portal.recover then sends a portal's whole balance to any address, provided tx.origin is the portal's recovery address (Portal.sol L21-L24, L139).

    0xCurvy/contracts · evm/src/v2/portal/PortalFactory.sol

    commit e996fe7195 · checked 2026-10-09

  3. Verified

    The aggregator proxy's EIP-1967 implementation slot points to 0x855d…3F0A. Its Sourcify source matches contracts@e996fe71 (develop) apart from a trailing newline; it does not match main.

    0xE519…cbB1 on sourcify.dev

    0xE519…cbB1 explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Reliance on hosted services

Does the payment flow require a relayer, paymaster, bundler, or API that only the provider runs? C3

0 Fails

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Several closed services that only Curvy runs are required. Shielding needs the Portal Broadcaster operator. The SDK needs the API for the network registry and protocol parameters, auth and notes sync. Proofs need circuit keys from Curvy's host. The SDK lets an integrator point these URLs elsewhere and submit planner transactions from its own wallet. But no self-host code is published, and the operator role is onchain and cannot be replaced by config. Scored 0.

Evidence (2)2 verified
  1. Verified

    The SDK takes apiBaseUrl, indexerBaseUrl, relayerBaseUrl and circuitKeysBaseUrl (configurable), and submissionMode defaults to "relay". At L112-L114 it loads the network registry and protocol parameters from the API before any action can run.

    0xCurvy/sdk · src/config/createCurvyConfig.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    The default API base is https://api.curvy.box. No repository in github.com/0xCurvy contains the API, the indexer, the relayer or the Portal Broadcaster.

    0xCurvy/sdk · src/http/index.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Neutral settlement, disclosed filtering

Is the settlement layer free of address or geographic filtering, and is any filtering at the edge disclosed and avoidable? C4

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Edge screening (Global Ledger, run by the Curvy-operated broadcaster) is disclosed in a versioned docs repo, and the contracts contain no address or country list. The screening cannot be bypassed: entry to the pool is operator-gated onchain, and the direct entry is disabled. A screened-out payee can only recover funds publicly through the portal recovery path. The list source is named, but the scoring rules live in a closed backend. Judgment call: the settlement layer is not neutral, because entry depends on a screened operator, so we score 1 rather than 2.

Evidence (2)2 verified
  1. Verified

    The docs repo says Global Ledger scores each address, and the Curvy-operated Portal Broadcaster uses that score to decide whether a portal is deployed and its funds shielded.

    0xCurvy/docs · docs/for-the-curious/compliance-model.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    The contracts hold no address list, but the only open entry, portalShield, requires an operator-deployed portal. directShield reverts while directShieldEnabled is false.

    0xCurvy/contracts · evm/src/v2/aggregator-alpha/CurvyAggregatorAlphaV2.sol

    commit e996fe7195 · checked 2026-10-09

Token and chain freeze risks disclosed

Are the tokens and chains the rail depends on enumerated, with their issuers' freeze powers and sequencer assumptions stated to payees? C5

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Supported tokens are enumerated onchain in the vault registry, and the SDK reads them from the API. A search of the docs repo finds no statement that USDC or USD₮0 can freeze the vault address, and nothing on Arbitrum sequencer or forced-inclusion assumptions. Scored 2: enumerated in code, assumptions not stated.

Evidence (1)1 verified
  1. Verified

    The vault registry lists 6 tokens. getTokenAddress(1..6) returns native ETH, USDC 0xaf88…5831, USD₮0 0xFd08…Cbb9, SOL 0x2bcC…0c07, WETH 0x82aF…Bab1 and WBTC 0x2f2a…5B0f. The vault held 14,013 USDC and 2.87 ETH at this block.

    0xcC8d…4f00 on arbitrum.blockscout.com

    0xcC8d…4f00 explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Open

Is the whole stack visible?

1 WeakPillar rating: weakest of 4
0 of 4 Partial or better

What would raise this pillar

Contracts verified onchain

Does the deployed bytecode match public source, and can a third party rebuild it? O1

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-09 10 days ago

UnreviewedAssessed by AI research agent (seed), 2026-10-09

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.

Evidence (1)1 verified
  1. Verified

    Sourcify results on Arbitrum. Vault implementation 0xBf38…eEb0 and PortalFactory 0x4f32…1389 are exact_match. Aggregator implementation 0x855d…3F0A is a partial match. The two ERC1967 proxies and the three registered verifiers (0xEFf8…d044, 0xDB3b…b804, 0xFEed…7A73) have no Sourcify record.

    0xBf38…eEb0 on sourcify.dev

    0xBf38…eEb0 explorer · Sourcify · block 513140605 · checked 2026-10-09

Whole stack published

Are the SDK, frontend, backend or API, indexer, and deploy scripts all public? O2

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Public: contracts, SDK, Rust prover, payments SDK and docs. Not public: the API, indexer, relayer and Portal Broadcaster, all required, and the app.curvy.box frontend. Scored 1.

Evidence (1)1 verified
  1. Verified

    The SDK is public (MIT) and marked closed beta. The contracts, rs-core prover and docs are public. The org has no repository for the API, the indexer, the relayer, the Portal Broadcaster or the web app.

    0xCurvy/sdk · README.md

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Can be self-hosted

Can a stranger reach a working deployment from the README? O3

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-09 10 days ago

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Contract deployment is documented. The backend services needed to operate the rail are not published. Reproduction not attempted. Scored 1.

Evidence (1)1 verified
  1. Verified

    The evm README documents the Hardhat 3 and Ignition deploy and upgrade layout (ignition/, scripts/deploy-v2.ts) for the contracts only.

    0xCurvy/contracts · evm/README.md

    commit e996fe7195 · checked 2026-10-09

Interfaces and data export

Are ABIs, event schemas, an API schema, and a payee data export in a non-proprietary format all in the repo? O4

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-09 10 days ago

UnreviewedAssessed by AI research agent (seed), 2026-10-09

ABIs and events are in the repo, and the SDK carries a typed client for the API. No API schema (OpenAPI or equivalent) is published, and there is no payee export. Judgment call: the required API has no schema in the repo, so we take the lower anchor, 1.

Evidence (1)1 verified
  1. Verified

    Event definitions (PendingNotes, CommittedNotes, CommittedNullifiers) are in the repo, and the README says ABIs are extracted into the SDK.

    0xCurvy/contracts · evm/src/v2/aggregator-alpha/ICurvyAggregatorAlpha.sol

    commit e996fe7195 · checked 2026-10-09

Free

Does the license actually let a third party fork, modify, and run it?

0 FailsPillar rating: weakest of 3
1 of 3 Partial or better

What would raise this pillar

Open-source licences

Does every repository needed to run the product carry an OSI-approved license? F1

0 Fails

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

The public repositories carry OSI licences. The exception is ICurvyVerifiers.sol, an interface file under BUSL-1.1. The API, the Portal Broadcaster and the circuit-key host are required and closed. Scored 0.

Evidence (1)1 verified
  1. Verified

    The contracts are Apache-2.0 at the repo root, with per-file SPDX headers (verifiers GPL-3.0, ICurvyVerifiers.sol BUSL-1.1). The SDK and rs-core are MIT.

    0xCurvy/contracts · LICENSE

    commit e996fe7195 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Protection against relicensing

Can the provider unilaterally relicense future versions, and has it committed not to? F2

2 Partial

Best evidence: VerifiedChecked 2026-10-09 10 days ago

UnreviewedAssessed by AI research agent (seed), 2026-10-09

No CLA and no licence-stability commitment. The licence files were added in commit 13d578d0 (2026-09-25); we did not check whether the code carried other terms before that. Scored 2.

Evidence (1)1 verified
  1. Verified

    The README's licensing section lists the licence per file. The root tree (LICENSE, LICENSES, NOTICE, THIRD-PARTY-NOTICES.md, audit, evm, solana) has no CLA or CONTRIBUTING file.

    0xCurvy/contracts · README.md

    commit e996fe7195 · checked 2026-10-09

No proprietary dependencies

Does a production deployment need a proprietary plugin or hosted-only service? F3

0 Fails

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Deposits cannot be shielded without the closed Portal Broadcaster holding OPERATOR_ROLE, and the SDK cannot start without the closed API. The core cannot run on public components alone. Scored 0.

Evidence (1)1 verified
  1. Verified

    SDK start-up needs GetNetworks and GetProtocol from the Curvy API, and shielding needs the onchain operator.

    0xCurvy/sdk · src/config/createCurvyConfig.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Privacy

What can an observer learn, and did the user knowingly choose it?

1 WeakPillar rating: weakest of 5
2 of 5 Partial or better

What would raise this pillar

  • Tracking and analytics reaching Partial: Present, off by default, opt-in visible in code.
  • Data collected beyond payment reaching Partial: Additional fields are either optional and clearly optional in code, or legally required, limited to that requirement, and disclosed with their legal basis in code or a versioned repo document.
  • Third parties in the payment flow reaching Partial: Third parties present, named in code, swappable by config.

Tracking and analytics

Do the SDK, widget, or frontend ship analytics, telemetry, error reporting, or fingerprinting? P1

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

The public SDK ships no analytics. The web app is closed, and the policy discloses basic analytics on the site and app. Scored 1: present and disclosed in policy, and the app code cannot be inspected.

Evidence (2)1 verified · 1 documented
  1. Verified

    The SDK's runtime dependencies include no analytics, telemetry or error-reporting package. A grep of src/ for posthog, sentry, mixpanel, amplitude, gtag and datadog finds nothing.

    0xCurvy/sdk · package.json

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Documented

    The privacy policy says the website and web application collect basic analytics data and use anonymous analytics tools.

    curvy.box/privacy-policy

    checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Data collected beyond payment

Does the flow collect anything beyond addresses, amounts, token, and chain? P2

1 Weak

Sets the pillar ratingBest evidence: DocumentedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Beyond settlement data, the flow involves a Curvy ID handle registered through the API, an auth signature, compliance flags from Global Ledger, and portal metadata held by Curvy. The canonical app does no KYC. This is disclosed in policy only. Scored 1.

Evidence (1)1 documented
  1. Documented

    The policy lists portal configuration metadata, compliance status flags, aggregator execution metadata and risk scoring by third-party analytics providers.

    curvy.box/privacy-policy

    checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Payments linkable onchain

What do calldata and events reveal about who paid whom for what? P3

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Payers send to fresh portal addresses, so no stable payee address appears onchain. Transfers inside the pool emit encrypted note fields. Entry amounts are plaintext in PendingNotes. The ownerHash sits in shield calldata, and we did not verify from code whether it changes for each note. Exits reveal amount and destination. Amount and timing matching are behavioural and not scored. Judgment call: stealth-style receipt fits anchor 3, but the plaintext entry data and the unverified ownerHash freshness hold it at 2.

Evidence (2)2 verified
  1. Verified

    When shielding, PendingNotes emits the note id, token and net amount in plaintext (isPlaintext true). The note's ownerHash is passed in calldata. Withdrawals reveal amount, token and destination.

    0xCurvy/contracts · evm/src/v2/aggregator-alpha/CurvyAggregatorAlphaV2.sol

    commit e996fe7195 · checked 2026-10-09

  2. Verified

    Each receipt goes to a fresh, deterministic per-recipient portal address that the backend derives. The portal record feed is public and anonymous.

    0xCurvy/docs · docs/for-programmers/portals-and-recovery.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Third parties in the payment flow

Which third parties see a request during a payment, and can they be swapped out? P4

1 Weak

Sets the pillar ratingBest evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Curvy's API and broadcaster see every payment, and Global Ledger scores each depositing address. Both are named in a docs repo, but the screening vendor sits in the closed broadcaster and cannot be swapped. LI.FI joins bridged routes. Scored 1: third parties are disclosed in docs and not swappable.

Evidence (1)1 verified
  1. Verified

    Global Ledger scores each portal's address before shielding. LI.FI is a dependency of the SDK for bridging.

    0xCurvy/docs · docs/for-the-curious/compliance-model.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Endpoints can be changed

Can RPC and indexer URLs be changed, and is the indexer code public? P5

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Endpoints, including the indexer, can be configured in code. The indexer code is not public, so the 3 anchor's public-indexer condition fails. Scored 2.

Evidence (1)1 verified
  1. Verified

    The API, metadata, indexer (also per chain id), relayer and circuit-key URLs are all parameters of createCurvyConfig.

    0xCurvy/sdk · src/config/createCurvyConfig.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Security

Who can cause loss, lock users in, or change the rules?

No evidencePillar rating: weakest of 6
1 of 6 Partial or better · 1 no evidence

What would raise this pillar

Who holds funds in transit

Who holds funds between payer and payee, and can the provider redirect them? S1

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Funds in transit sit in an upgradeable vault. Its authority (Safe 4-of-6, no timelock) can upgrade it or rewire which aggregator may withdraw, either of which could redirect funds. Before shielding, funds wait at the payee's portal, recoverable only by the portal's recovery key. Upgradeability is visible in the public source and README. Judgment call: anchor 1 (upgradeable escrow, disclosed) rather than 0. The same power could redirect funds, but it is disclosed in code, not hidden.

Evidence (2)2 verified
  1. Verified

    The vault is UUPS, and _authorizeUpgrade requires AUTHORITY_ROLE (L131). setCurvyAggregatorAddress (L237-L240) lets AUTHORITY name the contract allowed to call withdraw.

    0xCurvy/contracts · evm/src/v2/vault/CurvyVaultV2.sol

    commit e996fe7195 · checked 2026-10-09

  2. Verified

    The vault proxy's implementation slot is 0xBf38…eEb0, upgraded at block 0x1dadba35. hasRole(AUTHORITY_ROLE, Safe 0xB2c1…4b9F) is true.

    0xcC8d…4f00 on arbitrum.blockscout.com

    0xcC8d…4f00 explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Who can upgrade the code

Who can change the contract code, and with how much notice? S2

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

A 4-of-6 Safe with no modules or guard can upgrade the vault and aggregator directly, with no timelock. We found no disclosure of the signers. Scored 1: multisig admin, no timelock.

Evidence (2)2 verified
  1. Verified

    Safe 1.4.1, getThreshold() 4 with 6 owners. getModulesPaginated returns none, and the guard slot is zero. It holds AUTHORITY_ROLE on the vault and aggregator and owns the PortalFactory. The Upgraded events at block 0x1dadba35 came straight from this Safe, with no timelock in between.

    0xB2c1…4b9F on arbitrum.blockscout.com

    0xB2c1…4b9F explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    The Safe guard slot is zero.

    0xB2c1…4b9F on arbitrum.blockscout.com

    0xB2c1…4b9F explorer · Sourcify · block 513140605 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Token approval scope

How large an allowance does the SDK ask users to grant, and for how long? S3

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Payers fund a portal by plain transfer. The optional direct-shield path, currently disabled onchain, approves exactly the amount. That fits anchor 3 in substance, but we have no package or trace evidence for the published build, and npm latest (0.0.7) lags the pinned source (0.0.8-rc.2). Judgment call: scored 2.

Evidence (1)1 verified
  1. Verified

    The only approval call in the SDK sets the vault's allowance to exactly the deposit amount, after resetting any non-zero allowance first. The default receive flow is a plain transfer to a portal, with no approval.

    0xCurvy/sdk · src/actions/aggregator/directShield.ts

    commit 75ce11eda3 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Funds safe if provider disappears Derived

If the provider disappears tomorrow, do payees keep their funds and the ability to keep settling? S4

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

Derived from S1=1, C2=1, C3=0 and O3=1. Funds still at a portal can be recovered by a documented manual contract call. Funds already shielded need a proof built from notes-tree data and circuit keys that Curvy hosts, and they sit in a vault the Safe can upgrade. Settlement into the pool stops without the operator. Scored 1: retrievable only through a documented manual call, and for shielded funds only while the keys remain available.

Evidence (1)1 verified
  1. Verified

    The docs give the recovery path for funds stuck at a portal, an onchain call signed by the recipient's recovery key.

    0xCurvy/docs · docs/for-programmers/portals-and-recovery.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Secrets and webhook handling

Are secrets kept out of client bundles and are webhooks signed and verified? S5

No evidence

Sets the pillar rating

UnreviewedAssessed by AI research agent (seed), 2026-10-09

No checkable evidence settles this yet, so it counts as 0.

Audits and bug bounty

Has the code been audited at a pinned commit, were findings fixed traceably, and is there a live bounty? S6

1 Weak

Best evidence: VerifiedChecked 2026-10-19 today

UnreviewedAssessed by AI research agent (seed), 2026-10-09

An audit pinned to 5f6e43cf exists, with findings marked fixed. The README says the audited contracts are the V1 stack. The deployed contracts are the greenfield V2 rewrite (develop @e996fe71), which the report does not cover. We found no bug bounty. Scored 1: an audit of a previous version.

Evidence (1)1 verified
  1. Verified

    The Ethernal audit (23 March to 15 April 2026) pins commit 5f6e43cf, which exists in the repo. It covers CurvyAggregatorAlphaV6, CurvyVaultV6, PortalFactory, Portal and SolanaPortal, and lists fix commits.

    0xCurvy/contracts · audit/Curvy 2026 Audit Report Final.pdf

    commit e996fe7195 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

Security audits 1

Published audits and similar reviews of this provider's code, newest first. Context for the Audits and bug bounty rating, which scores them; this list does not change any rating, and an audit of older code says little about what is deployed now.

DateAuditorTypeScopeCovers deployed codeFindings
2026-05EthernalAuditCurvy V1 contracts (CurvyAggregatorAlphaV6, CurvyVaultV6, PortalFactory, Portal, SolanaPortal) at 5f6e43cf15
Engagement 23 March to 15 April 2026; the cover date reads 05/08/2026 (taken as May; fix commits are dated 28 April). The README says the audited code is the V1 stack; the Arbitrum deployment assessed is the V2 rewrite on develop (e996fe71), which the report does not cover.
No0 critical, 0 high, 6 medium, 10 low, 6 informational; all addressed and fixes verified

Compiled from: The audit/ folder of github.com/0xCurvy/contracts (main and develop), the contracts README security section, the Audit link on docs.curvy.box and the "Independently audited" badge on curvy.box (both point to the same PDF), and the 0xCurvy sdk, rs-core, payments-sdk and docs repos (no audits). solana/REPORT.md is a developer guide, not an audit. No audit of the V2 contracts, the circuits, rs-core, the SDK or the Curvy API was found. Checked 2026-10-13. Only published reports are listed; private audits a provider mentions without a report are not.

Operational and procurement

Facts an institution's procurement, finance and security functions ask for. Separate from the CROPS ratings and never scored.

Group A: operational facts. Group B: 45 due-diligence controls derived from a UN agency's vendor requirements: 18 evidenced, 0 attested, 5 absent, 4 not applicable, 18 unknown. "Not applicable" means there is no operator to hold the control: it falls to whoever deploys the rail. How to read this.

Group A: operational facts

Fees

Evidenced
ComponentPaid byAmountBasis
providerpayerDeposit (shield) fee 10 bps of the gross amountCurvyVaultV2.depositFee() = 10 at Arbitrum block 513202075; set by the AUTHORITY Safe, capped at 10% (MAX_FEE 1000 bps).
providerpayeeWithdrawal (unshield) fee 20 bpsCurvyVaultV2.withdrawalFee() = 20 at the same block; same setter and cap.
providernoneAggregation fee 0 onchain (FAQ states 0.1%)CurvyAggregatorAlphaV2.protocolFeePerThousand() = 0 at the same block, enforced through the aggregation proof; the FAQ's 0.1% is not in force.
networkpayerUSDC gas fees 0.014557 portal deployment, 0.023026 note commitment, 0.021973 withdrawalperTokenGasFees(2) for USDC; fixed per-token amounts set by Curvy, deducted from the note.

Judgment call: the withdrawal fee is recorded as paid by the payee, since the note holder unshielding pays it. Gas fees for other tokens differ per token (read perTokenGasFees(tokenId)). Cross-chain payments also bear the bridge cost, absorbed by the merchant in the Payments SDK. The app and relayer may add costs not visible onchain.

  1. Verified

    depositFee() = 10, withdrawalFee() = 20, perTokenGasFees(2) = (2, 14557, 23026, 21973); token 2 is USDC 0xaf88…5831 (getTokenAddress(2)).

    0xcC8d…4f00 on arbitrum.blockscout.com

    0xcC8d…4f00 explorer · Sourcify · block 513202075 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    protocolFeePerThousand() = 0.

    0xE519…cbB1 on arbitrum.blockscout.com

    0xE519…cbB1 explorer · Sourcify · block 513202075 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  3. Verified

    FAQ lists shielding 0.1%, aggregation 0.1% and unshielding 0.2%.

    0xCurvy/docs · docs/faq.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Custody model

Evidenced

Self-custody

Agrees with S1 (score 1): funds sit in the CurvyVaultV2 proxy and leave only on a valid withdrawal proof or portal recovery; the privacy policy says Curvy does not custody funds. The disclosed risk is that the 4-of-6 Safe can upgrade the vault with no timelock (S2 = 1), and shielding depends on Curvy's operator.

Evidence shared with CROPS: S1 item 1, S1 item 2

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Licences and registrations

Absent

Searched: NBS virtual currency service provider register, the docs repository and the privacy policy. Not searched: the Serbian Securities Commission register for digital token service providers, and EU MiCA registers (the EU holding entity is described as in progress).

  1. Verified

    FAQ names Curvy Tech d.o.o. Beograd as the incorporated entity; no licence is mentioned anywhere in the docs or privacy policy.

    0xCurvy/docs · docs/faq.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Documented

    National Bank of Serbia register of virtual currency service providers lists three entities (Vescon, MCM 965, AX Crypto); Curvy Tech d.o.o. is not among them.

    www.nbs.rs/en/ciljevi-i-funkcije/nadzor-nad-finansijskim-institucijama/digital-imo/reg_di

    checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Cash-out options

N/A: falls to the institution

Withdrawals pay tokens to the address encoded in the proof; converting them to local currency is outside the protocol and Curvy's hosted services.

Evidence shared with CROPS: C2 item 1

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

First deployment

Evidenced

2026-07-28 (block 488602304): CurvyVaultV2 ERC1967 proxy 0xcC8d…4f00 on Arbitrum One (tx 0x90553cc1…9c4e); the aggregator proxy followed at block 488602314. V1 contracts on Arbitrum are older and outside the unit.

  1. Verified

    The receipt of tx 0x90553cc1…9c4e has contractAddress 0xcC8d…4f00 in block 488602304, timestamp 1785242107 (2026-07-28 12:35:07 UTC).

    0xcC8d…4f00 on arbitrum.blockscout.com

    0xcC8d…4f00 explorer · Sourcify · block 488602304 · checked 2026-10-09

  2. Verified

    The Ignition journal records the CurvyVault ERC1967Proxy deployment with the same transaction hash.

    0xCurvy/contracts · evm/ignition/deployments/production_arbitrum_v2/journal.jsonl

    commit e996fe7195 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Operating entity

Evidenced

Curvy Tech d.o.o. Beograd, RS

No company register entry; the Serbian Business Registers Agency search did not connect. The privacy policy names no entity.

  1. Verified

    FAQ "Where is Curvy incorporated?" names Curvy Tech d.o.o. Beograd in Serbia and an EU holding entity in progress.

    0xCurvy/docs · docs/faq.md

    commit 73d17acd6a · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Security incidents

Evidenced

Absence of a found incident is not evidence that none occurred.

Searched: GitHub advisories, the docs repository and the privacy policy. No incident affecting the V2 Arbitrum contracts found. Third-party incident databases were not used.

  1. Verified

    The contracts repository's published security advisories list is empty.

    api.github.com/repos/0xCurvy/contracts/security-advisories

    checked 2026-10-09

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Product changes affecting users

Evidenced
  • 2026-07-28: V2 vault and aggregator deployed on Arbitrum (blocks 488602245 to 488602416), replacing the audited V1 stack. source
  • 2026-08-24: Vault and aggregator upgraded in one Safe transaction to implementations 0xBf38…eEb0 and 0x855d…3F0A, with no timelock. source

The privacy policy was last updated 25 February 2026. FeeChange events were not enumerated.

  1. Verified

    Upgraded(address) logs from the vault (to 0xBf38…eEb0) and the aggregator (to 0x855d…3F0A) in tx 0xe7e2d721…532c at block 497924661, timestamp 1787583116 (2026-08-24 14:51:56 UTC).

    0xcC8d…4f00 on arbitrum.blockscout.com

    0xcC8d…4f00 explorer · Sourcify · block 497924661 · checked 2026-10-09

UnreviewedAssessed by AI research agent (operational), 2026-10-09Checked 2026-10-09

Volume transacted (verified only)

Not observable

Amounts are public but not expressible in the spec format. The aggregator's PendingNotes event carries tokens and amounts in dynamic arrays, so they have no fixed word index. The vault's Deposit and Withdraw events keep the token in an indexed topic, which a spec cannot read, so amounts of ETH, USDC and other tokens would be summed together. A spec needs topic-based token selection or array decoding.

Not a statement that settlement is hidden; with a token filter on topic1, Vault Deposit/Withdraw (word 0 = amount) would give gross shield and unshield flows per token.

UnreviewedAssessed by AI research agent (operational), 2026-10-09

Group B: institutional due diligence

ControlStateWhat was found
Assurance and certifications
B1.1 ISO 27001, developer organisation
Is the organisation that develops the product ISO 27001 certified, and does the certificate name that entity?
Unknown
No ISO 27001 statement found for Curvy Tech d.o.o. in the docs repository, privacy policy or website.
B1.2 ISO 27001, hosting and support organisation
Is the organisation that hosts and supports the service ISO 27001 certified in its own name, with a scope covering the service?
Unknown
No hosting or support organisation certification found for the API, Portal Broadcaster or key host.
B1.3 SOC 2 Type II or ISAE 3000/3402 reports
Does the provider undergo periodic SOC 2 Type II or ISAE 3402 Type II assessments and make reports available?
Unknown
No SOC 2 or ISAE report or statement of availability found.
B1.4 Independent source-code security review before go-live
Was the application reviewed by an independent party before launch, and is the report linked?
EvidencedEthernal audit (23 March to 15 April 2026) of the V1 contracts at commit 5f6e43cf, published in the contracts repository; the deployed V2 contracts and the hosted API, broadcaster and key host are not covered.
CROPS S6
B1.5 Penetration testing
Is the service penetration-tested before go-live and at least every three years, with results available?
Unknown
No penetration test of the hosted services found.
B1.6 Vulnerability scanning cadence
Are the platform and the application scanned for vulnerabilities at least every six months?
Unknown
implied from the component list
Vulnerability and patch management
B2.1 Security contact and disclosure policy
Is there a published way to report a vulnerability (SECURITY.md, security.txt, or a disclosure page)?
Absentnone of 5 repo(s): 0xCurvy/contracts ✗ no security policy file; 0xCurvy/sdk ✗ no security policy file; 0xCurvy/rs-core ✗ no security policy file; 0xCurvy/payments-sdk ✗ no security policy file; 0xCurvy/docs ✗ no security policy file
source 1 · source 2 · source 3 · source 4 · source 5
B2.2 Patch service levels
Does the provider commit to patch timelines for known vulnerabilities (the partner expects 30 days critical, 40 high, 90 medium)?
Unknown
implied from the component list
B2.3 Dependency and vulnerability scanning in CI
Do the public repositories run dependency or code scanning automatically?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ no scanning config or workflow step found; 0xCurvy/sdk ✗ no scanning config or workflow step found; 0xCurvy/rs-core ✓ dependabot config present; 0xCurvy/payments-sdk ✗ no scanning config or workflow step found; 0xCurvy/docs ✗ no scanning config or workflow step found
source 1 · source 2 · source 3 · source 4 · source 5
Incident reporting and continuity
B3.1 Incident reporting commitment
Does the provider commit to notify customers of security or data incidents within a stated time (the partner expects 24 hours)?
Unknown
The privacy policy (25 February 2026) has no incident notification commitment, and no terms of service exist to search.
B3.2 Backups and restore testing
Are customer records backed up daily and restores tested on a schedule?
N/A: no such service
implied from the component list
B3.3 Recovery plan
Is there an approved and tested recovery plan for the service?
N/A: no such service
implied from the component list
B3.4 Status page and post-mortems
Does the provider publish service status and post-mortems for incidents?
Unknown
status.curvy.box does not resolve and the docs link no status page or post-mortem.
Identity and access (operator side)
B4.1 MFA for end users
Can or must end users protect accounts with multi-factor authentication?
N/A: no such service
implied from the component list
B4.2 MFA and separate accounts for privileged access
Is privileged access protected by MFA and kept on separate accounts?
Unknown
implied from the component list
B4.3 Periodic access reviews
Are user access rights reviewed at least annually and privileged accounts at least six-monthly?
Unknown
implied from the component list
B4.4 Segregation of duties and joiner-mover-leaver controls
Is there a documented segregation-of-duties model and a joiner-mover-leaver process?
Unknown
implied from the component list
B4.5 Session timeout
Are idle interactive sessions terminated after a defined period (the partner expects 60 minutes)?
N/A: no such service
implied from the component list
API and integration
B5.1 API authentication, browser to server
Which standard (OAuth 2.0, OpenID Connect, SAML, JWT) protects browser-to-server API calls?
EvidencedUsers log in with an EIP-712 wallet signature (or a WebAuthn PRF passkey); the API then uses a bearer JWT that the SDK refreshes; some endpoints take anonymous single-use Privacy Pass tokens instead of the JWT.
Applies to the hosted Curvy API, which the SDK requires at start-up (C3).
source 1 · source 2
B5.2 API authentication, server to server
Are server-to-server calls authenticated with keys or PKI certificates, and are keys scoped and rotatable?
Unknown
implied from the component list
B5.3 Token expiry
Do API tokens expire, and within what period (the partner caps it at 120 minutes for public data, 30 otherwise)?
EvidencedThe SDK refreshes the JWT every 14 minutes; the server-side token lifetime is not documented.
source 1
B5.4 Export controls
If an API exports data, does it limit volumes and log exports?
Unknown
implied from the component list
Data protection and privacy governance
B6.1 Data classification and encryption
Does the provider state a data classification and enforce encryption at rest and TLS 1.2 or better in transit?
EvidencedThe privacy policy states encryption in transit, secure infrastructure environments, access controls and limited collection; no data classification, encryption at rest or TLS version is stated.
source 1
B6.2 Production data kept out of test environments
Does the provider state that production or real personal data is not used in development and testing?
Unknown
implied from the component list
B6.3 Data retention and deletion on termination
What is retained, for how long, and is customer data removed on termination?
EvidencedCommunication data "as long as necessary", security logs for "a limited operational period", compliance flags per legal requirements; no periods are given and deletion is on request where applicable. On-chain data is permanent.
source 1
CROPS P2
B6.4 Data protection impact assessment and roles
For systems holding personal data, has a DPIA been completed and are controller and processor defined?
EvidencedThe privacy policy speaks for "Curvy" without naming a legal entity, controller or processor, and mentions no DPIA; it gives GDPR legal bases and shares data with hosting, analytics and blockchain analytics providers.
source 1
B6.5 Data processing or sharing agreement available
Can a customer obtain a data processing agreement or equivalent?
Unknown
implied from the component list
Logging and monitoring
B7.1 Audit logging
Are account changes, logins and activity on important records logged and retained?
Unknown
implied from the component list
B7.2 Central monitoring and endpoint detection
Are logs sent to a managed SIEM and is endpoint detection running on all platforms?
Unknown
implied from the component list
Hosting and network
B8.1 Hardened hosting
Are hosts hardened to a recognised benchmark, with only essential ports open, IDS/IPS, a WAF for internet-facing applications and tenant isolation?
Unknown
implied from the component list
B8.2 Deployment configuration and infrastructure as code
Does the repository ship reproducible deployment configuration (containers, IaC, Helm) that a self-hoster can harden?
Absentnone of 5 repo(s): 0xCurvy/contracts ✗ no deployment configuration; 0xCurvy/sdk ✗ no deployment configuration; 0xCurvy/rs-core ✗ no deployment configuration; 0xCurvy/payments-sdk ✗ no deployment configuration; 0xCurvy/docs ✗ no deployment configuration
source 1 · source 2 · source 3 · source 4 · source 5
Engineering practice in public repositories
B9.1 Default branch protected
Does the default branch require reviews and passing checks, with no direct pushes?
Absentnone of 5 repo(s): 0xCurvy/contracts ✗ no branch rules visible (classic branch protection is not readable without push access); 0xCurvy/sdk ✗ no branch rules visible (classic branch protection is not readable without push access); 0xCurvy/rs-core ✗ rules: deletion, non_fast_forward; 0xCurvy/payments-sdk ✗ no branch rules visible (classic branch protection is not readable without push access); 0xCurvy/docs ✗ no branch rules visible (classic branch protection is not readable without push access)
source 1 · source 2 · source 3 · source 4 · source 5
B9.2 CI runs on pull requests
Does every pull request trigger automated checks?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ no .github/workflows; 0xCurvy/sdk ✗ no .github/workflows; 0xCurvy/rs-core ✓ 2 workflow file(s); 0xCurvy/payments-sdk ✗ no .github/workflows; 0xCurvy/docs ✗ no .github/workflows
source 1 · source 2 · source 3 · source 4 · source 5
B9.3 Tests run in CI
Do the CI workflows run the test suite?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ test command in a workflow; 0xCurvy/sdk ✗ test command in a workflow; 0xCurvy/rs-core ✓ test command in a workflow; 0xCurvy/payments-sdk ✗ test command in a workflow; 0xCurvy/docs ✗ test command in a workflow
source 1 · source 2 · source 3 · source 4 · source 5
B9.4 Coverage reported
Is test coverage measured and reported (the partner expects 85%)?
Absentnone of 5 repo(s): 0xCurvy/contracts ✗ coverage tooling referenced; 0xCurvy/sdk ✗ coverage tooling referenced; 0xCurvy/rs-core ✗ coverage tooling referenced; 0xCurvy/payments-sdk ✗ coverage tooling referenced; 0xCurvy/docs ✗ coverage tooling referenced
source 1 · source 2 · source 3 · source 4 · source 5
B9.5 Versioned releases
Are releases tagged with immutable semantic versions?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ no tags; 0xCurvy/sdk ✓ latest tags: v0.0.8-rc.2; 0xCurvy/rs-core ✓ latest tags: v0.1.3, v0.1.2, v0.1.1; 0xCurvy/payments-sdk ✓ latest tags: v0.2.0-rc.4, v0.2.0-rc.3, v0.2.0-rc.2; 0xCurvy/docs ✗ no tags
source 1 · source 2 · source 3 · source 4 · source 5
B9.6 Signed tags or commits
Are release tags or recent commits cryptographically signed?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ 3 of 10 recent commits signed; 0xCurvy/sdk ✗ 3 of 10 recent commits signed; 0xCurvy/rs-core ✓ 10 of 10 recent commits signed; 0xCurvy/payments-sdk ✗ 0 of 10 recent commits signed; 0xCurvy/docs ✗ 0 of 10 recent commits signed
source 1 · source 2 · source 3 · source 4 · source 5
B9.7 Changelog
Is a changelog maintained with the code?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ no changelog or release notes; 0xCurvy/sdk ✗ no changelog or release notes; 0xCurvy/rs-core ✓ CHANGELOG file; 0xCurvy/payments-sdk ✗ no changelog or release notes; 0xCurvy/docs ✗ no changelog or release notes
source 1 · source 2 · source 3 · source 4 · source 5
B9.8 Contribution and branching model documented
Does the README or contribution guide state how changes are proposed, reviewed and released?
Evidencedsome of 5 repo(s): 0xCurvy/contracts ✗ none found; 0xCurvy/sdk ✗ none found; 0xCurvy/rs-core ✗ none found; 0xCurvy/payments-sdk ✗ none found; 0xCurvy/docs ✓ contribution section in README
source 1 · source 2 · source 3 · source 4 · source 5
Architecture documentation
B10.1 Architecture documentation
Is there a public architecture document covering logical, infrastructure and integration architecture and the components used?
EvidencedThe contracts README describes the hub-and-spoke deployment (aggregator on Arbitrum, portal factories elsewhere) and the docs repository covers the logical building blocks (portals, privacy aggregator, Curvy ID, compliance model); the hosted API and broadcaster infrastructure are not described.
source 1
CROPS P3
Commercial and financial
B11.1 Contracting entity
Which legal entity would an institution contract with, and in which jurisdiction?
EvidencedCurvy Tech d.o.o. Beograd (Serbia), per the docs FAQ, which adds that an EU holding entity is being set up. No terms of service name a contracting party.
The Serbian Business Registers Agency search (pretraga2.apr.gov.rs) did not connect from this environment, so no register entry is cited.
source 1
B11.2 Funding of ongoing operation
How is ongoing operation and maintenance funded (revenue, foundation, grants, fee switch), per a primary source?
EvidencedProtocol fees collected by the vault (deposit 10 bps, withdrawal 20 bps, per-token gas fees) to a fee collector that is the AUTHORITY Safe; the FAQ says Curvy earns revenue through these fees.
source 1 · source 2
B11.3 Termination terms
What happens to customer funds and data on termination by either side?
Absent
Searched: curvy.box/terms, /terms-of-use, /tos, /imprint and /legal (all 404), the privacy policy, and the docs repository. Withdrawals and portal recovery are permissionless onchain (C2, S4), but no document says what happens to API accounts, Curvy IDs or data on termination.
source 1
AI components
B12.1 AI in the payment path
Does an AI system take part in payment processing or compliance decisions (for example automated transaction screening)?
EvidencedAutomated risk scoring by Global Ledger decides whether the Curvy-operated Portal Broadcaster deploys a shield portal; the privacy policy says sanctions and AML screening and risk scoring may apply. No statement on whether AI or a learned model is used.
source 1
CROPS C4
B12.2 AI controls documented
If AI is used, are monitoring, validation, override, decommissioning and bias evaluation documented?
EvidencedThe compliance model describes pre-emptive scoring and a planned retroactive tainting mechanism (work in progress); no appeal or override, monitoring, validation, decommissioning or bias evaluation is documented.
source 1

Scope of assessment

Components in the payment path

ComponentRolePublicLicenceOperatorRequired
CurvyAggregatorAlphaV2 and CurvyVaultV2 (UUPS proxies)contractsYesApache-2.0Safe 4-of-6 0xB2c1…4b9F (AUTHORITY_ROLE, no timelock)Yes
PortalFactory and per-recipient Portal clonescontractsYesApache-2.0OPERATOR_ROLE 0xE679…06d2 (EIP-7702 EOA); AUTHORITY SafeYes
Groth16 verifiers (snarkjs-generated)contractsYesGPL-3.0replaceable by AUTHORITY_ROLEYes
Portal Broadcaster (operator that deploys shield portals)relayerNoproprietaryCurvyYes
Curvy API (network registry, auth, notes sync, relay, portal records)apiNoproprietaryCurvy (api.curvy.box)Yes
Global Ledger address risk scoringoracleNoproprietaryGlobal Ledger via Curvy Portal BroadcasterYes
Circuit keys host (protocol s3:// paths, circuitKeysBaseUrl)otherNoproprietaryCurvyYes
Curvy SDK (@0xcurvy/curvy-sdk)sdkYesMITuserYes
rs-core (Rust/WASM prover and cryptography)sdkYesMITuserYes
Arbitrum One and a JSON-RPC endpointledgerYesBUSL-1.1Offchain Labs sequencer; RPC configurableYes
Curvy web app (app.curvy.box)frontendNoproprietaryCurvyNo
LI.FI bridging for portal-only chainsotherNoproprietaryLI.FINo

Repositories

RepositoryRoleLicense
0xCurvy/contractscontractsApache-2.0
0xCurvy/sdksdkMIT
0xCurvy/rs-coresdkMIT
0xCurvy/payments-sdksdknone
0xCurvy/docsdocsnone

Contracts

RoleAddressSource verified
CurvyAggregatorAlphaV2 proxy (UUPS)0xE519…cbB1 explorer · Sourcifynone
CurvyAggregatorAlphaV2 implementation0x855d…3F0A explorer · Sourcifysourcify
CurvyVaultV2 proxy (UUPS, holds funds)0xcC8d…4f00 explorer · Sourcifynone
CurvyVaultV2 implementation0xBf38…eEb0 explorer · Sourcifysourcify
PortalFactory (deploys per-recipient portals)0x4f32…1389 explorer · Sourcifysourcify
Withdrawal verifier (maxInputs 2)0xEFf8…D044 explorer · Sourcifynone
Aggregation verifier (2 in, 3 out)0xDB3b…b804 explorer · Sourcifynone
Pending-notes commitment verifier (batch 5)0xFEed…7A73 explorer · Sourcifynone
Safe 4-of-6 (owner and AUTHORITY_ROLE)0xB2c1…4b9F explorer · Sourcifynone

Assessor notes

Unit: the Arbitrum aggregator, vault, portal factory and verifiers. Reads at Arbitrum block 513140605 (role history from eth_getLogs in 10M-block windows from block 488600000). The deployed implementations match the develop branch (e996fe71) and not main (0afe6c80); deployed_addresses.json in both branches lists earlier implementations, 0xE884…C193 and 0x8c0D…3cAF. Live use: getCurrentNoteIndex 3159 and 1369 nullifier batches. Portal-only chains, Solana and V1 are out of scope. The SDK is in closed beta. The audit PDF was read by stream extraction. No transactions, UI runs, traces or self-host attempts were made.