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.

Railgun

transferEthereum Assessed on Ethereum (chain 1)railgun.org

Ratings apply to this deployment only. Treat them as unverified for other chains. Why this deployment: The deployments repo (Railgun-Community/deployments@68d93979 src/chains/ethereum.ts L1-L60) is the only chain with the governance stack (Delegator, Voting, Staking, ProxyAdmin) and empty L1Sender/L2Executor, so Ethereum governs the protocol; shared-models network-config.ts lists Ethereum first. Unit: RailgunSmartWallet proxy 0xFA70…a4b9 and its implementation, with the ProxyAdmin, Delegator and Voting contracts that control it. Excluded: the BSC, Polygon and Arbitrum deployments, the V3 contracts (supportsV3 false on Ethereum), RelayAdapt, and the RAIL token and treasury.

At a glance

Category
Protocols for privacy-preserving transfers
Chain
EthereumEthereum
CROPS tally
17 of 23 hold up
Security audits
8 published
Offered
Everywhere
Last edited
2026-10-13 · History
  1. Censorship Resistance0 FailsWeakest: Token and chain freeze risks disclosed
  2. Open1 WeakWeakest: Can be self-hosted
  3. Free0 FailsWeakest: Open-source licences
  4. Privacy0 FailsWeakest: Tracking and analytics
  5. Security0 FailsWeakest: Token approval scope

Where it is offered

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

The settlement contracts have no address or country checks, and neither the SDK nor Railway has a country gate in code; Railway's terms of use name no restricted countries. Edge filtering is by address list (SDK OFAC list, Railway's POI using Chainalysis's OFAC list), not by country.

Evidence (1)1 verified
  1. Verified

    A search of contracts/, engine/src, wallet/src and Railway desktop/mobile src for country, geolocation, ipinfo and geoblock found no country gate.

    Railgun-Privacy/contract · contracts/logic

    commit 36bcf5ed7c · checked 2026-10-09

Censorship Resistance

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

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

What would raise this pillar

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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

Pause, upgrade and token blocklisting sit with RAIL token governance: ProxyAdmin is owned by the Delegator, which is owned by the Voting contract, and no other address holds pause permission today (three EOA pausers granted in 2021 were revoked). A pause takes at least 7 days from the vote being called, and a pause would also stop unshielding. Nothing in the contracts blocks individual addresses. Judgment call: anchor 2 is written for a Safe; we treat public onchain token voting with a 7-day minimum execution delay as meeting it, since user exit (unshield) is immediate. No notice channel beyond the onchain proposal is named in the repo.

Evidence (4)4 verified
  1. Verified

    The proxy admin can upgrade, pause and unpause; while paused every call reverts (notPaused, L49-L53), including unshield. The implementation also has an owner-only TokenBlocklist (blocks tokens from being shielded, not addresses) and fee setters.

    Railgun-Privacy/contract · contracts/proxy/Proxy.sol

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

  2. Verified

    Proxy admin slot = ProxyAdmin 0x4F8E…65c8, whose owner() is Delegator 0xB6d5…B53B, whose owner() is Voting 0xc480…A3CC; the paused slot 0x8dea…1450 reads 0 (not paused).

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153471 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  3. Verified

    GrantPermission logs show pause/unpause on the ProxyAdmin granted at block 12977000 to EOAs 0x0219…873D, 0x17cF…De86 and 0xCC29…164a; checkPermission returns false for all three at block 26153471. Two VKeySetter contracts hold setVerificationKey permission, but can commit keys only after governance moves them to the COMMITTING state (VkeySetter.sol stateToCommitting is onlyDelegator).

    0xB6d5…B53B on sourcify.dev

    0xB6d5…B53B explorer · Sourcify · block 26153471 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  4. Verified

    Voting.EXECUTION_START_OFFSET = 604800 s (7 days after a vote is called; voting starts after 2 days), quorum 2M RAIL, sponsor threshold 500k RAIL (Voting.sol L16-L26); 33 proposals at this block.

    0xc480…A3CC on sourcify.dev

    0xc480…A3CC explorer · Sourcify · block 26153471 · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

A payer can shield, send privately to a payee's 0zk address and the payee can unshield by calling the proxy directly and self-signing; no broadcaster, API or provider signature is involved. Addresses and ABIs are published in the deployments repo. We did not run a transaction.

Evidence (3)3 verified
  1. Verified

    shield() and transact() (private transfer and unshield) are external with no caller check; validity rests on the token blocklist, commitment preimage checks and the SNARK proof.

    Railgun-Privacy/contract · contracts/logic/RailgunSmartWallet.sol

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

  2. Verified

    Proxy and implementation addresses are published with ABIs in src/abi (implementation.ts, proxy.ts).

    Railgun-Community/deployments · src/chains/ethereum.ts

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

  3. Verified

    The proxy's implementation slot reads 0xD662…6A0C, whose Sourcify sources equal contracts/logic at 36bcf5ed apart from line endings.

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153471 · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

Settlement needs only the contracts, the SDK, the proving artifacts and an RPC. Broadcasters, the hosted Subsquid indexer and the POI aggregator are optional, and each has public code. Judgment call: self-signing without a broadcaster exposes the gas-paying address; that is a privacy cost (P3), not a settlement dependency, so 3.

Evidence (2)2 verified
  1. Verified

    After the optional quick sync, the engine slow-syncs commitments from the contract's events over the user's RPC (getHistoricalEvents), so the hosted indexer is not required.

    Railgun-Community/engine · src/railgun-engine.ts

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

  2. Verified

    startRailgunEngine takes poiNodeURLs as optional and initialises POI only if they are given; broadcasters are an optional transport (waku-broadcaster-client, MIT).

    Railgun-Community/wallet · src/services/railgun/core/init.ts

    commit 5c9d04c844 · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

The settlement contracts are neutral toward addresses and countries. Edge filtering is in public code with named list sources (an OFAC list in the SDK; Chainalysis's OFAC list for Railway's POI), and the direct contract path bypasses both (C2 = 3). npm @railgun-community/wallet 10.9.0 has gitHead 5c9d04c8, the pinned commit. All required components are public. Noted: the SDK check lower-cases the address but the list holds checksummed addresses, so at this commit it never matches; the filter is disclosed but ineffective.

Evidence (3)3 verified
  1. Verified

    The wallet SDK refuses recipients on OFAC_SANCTIONS_LIST_ADDRESSES (shared-models blocked-address.ts, 175 addresses, refreshed from Railgun-Community/ofac-scraper by update-ofac-list.cjs L12-L13); it is called in tx-generator.ts L200, L416, L456 and tx-shield.ts.

    Railgun-Community/wallet · src/utils/blocked-address.ts

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

  2. Verified

    Railway explains that Private Proofs of Innocence use the OFAC list published by Chainalysis, and that blocked shields can only be unshielded to origin.

    Railway-Wallet/Railway-Wallet · desktop/src/react-shared/src/utils/poi.tsx

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

  3. Verified

    The deployed implementation's sources contain no address or country check; the only list is TokenBlocklist, keyed by token address.

    0xD662…6A0C on sourcify.dev

    0xD662…6A0C explorer · Sourcify · block 26153471 · 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

0 Fails

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

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

Chains are enumerated in shared-models, but tokens are an open set, and we found no statement in the repos or docs that issuer freezes (USDC, USDT) can lock the RAILGUN contract's balance of a token. Judgment call: an open token set cannot be enumerated, and the anchor names "not enumerated" as 0; we take the lower anchor.

Evidence (1)1 verified
  1. Verified

    Any ERC20, ERC721 or ERC1155 token can be shielded unless governance has put it on the TokenBlocklist; there is no allowlist.

    Railgun-Privacy/contract · contracts/logic/RailgunSmartWallet.sol

    commit 36bcf5ed7c · 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
3 of 4 Partial or better

What would raise this pillar

  • Can be self-hosted reaching Partial: Reproducible with minor undocumented steps, recorded.

Contracts verified onchain

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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

All in-scope contracts are verified on Sourcify; the implementation, which holds the logic, is a partial match. No rebuild attempted. Scored 2.

Evidence (2)2 verified
  1. Verified

    Sourcify returns exact_match for the proxy, ProxyAdmin, Delegator and Voting, and match (partial) for the implementation 0xD662…6A0C (solc 0.8.17).

    0xD662…6A0C on sourcify.dev

    0xD662…6A0C explorer · Sourcify · block 26153471 · checked 2026-10-09

  2. Verified

    The Hardhat config pins solc 0.8.17 with optimizer runs 200; deploy tasks are in tasks/ and scripts/.

    Railgun-Privacy/contract · hardhat.config.ts

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

Whole stack published

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

2 Partial

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

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

Every layer has public source, and the repos are active. We could not tie the hosted Subsquid deployment, the ppoi.fdi.network aggregator, or broadcaster builds to public commits, and the broadcaster server is public only as an example (ppoi-safe-broadcaster-example). Judgment call: 2 rather than 3 for that reason.

Evidence (1)1 verified
  1. Verified

    Public repos cover contracts and deploy tasks, circuits, engine and wallet SDK, the Subsquid indexer, the POI node, the broadcaster client and the Railway frontend.

    Railgun-Community/subsquid-integration · abi

    commit 49922b3aa6 · checked 2026-10-09

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-19 today

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

Minimal build documentation exists. Reproduction not attempted, so capped at 1.

Evidence (1)1 verified
  1. Verified

    The contracts README gives only install and Hardhat help steps; the SDK and Railway READMEs cover installation.

    Railgun-Privacy/contract · README.md

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

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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

ABIs and event schemas are in the repos, and no API is required. We found no payee export in a non-proprietary format in the SDK; Railway and the docs point to viewing keys and a Koinly tax export, which we did not inspect. Scored 2.

Evidence (1)1 verified
  1. Verified

    Event schemas (Action, Transact, Shield, Unshield, Nullified) are defined in the contract; ABIs are in the deployments repo (src/abi).

    Railgun-Privacy/contract · contracts/logic/RailgunLogic.sol

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

Free

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

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

What would raise this pillar

  • Open-source licences reaching Weak: Source-available (BUSL, SSPL, ELv2, Commons Clause, custom) on a critical repo.

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 SDK repos are MIT and Railway is AGPL-3.0, but the settlement contracts and circuits, both required, carry no licence and explicitly grant none. Scored 0.

Evidence (2)2 verified
  1. Verified

    The contracts repo has no LICENSE file; package.json says "UNLICENSED" and 38 of 39 Solidity files carry SPDX UNLICENSED. A License.md added in 2021 (d2c63577) read "No License is provided for any party under any circumstances" and was removed in 77af7cf5 (2022).

    Railgun-Privacy/contract · package.json

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

  2. Verified

    The circuits repo's License.md says "No License is provided for any party under any circumstances."

    Railgun-Privacy/circuits-v2 · License.md

    commit 0aa2d13763 · 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-19 today

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

No CLA, no relicensing event in the SDKs, and no licence-stability commitment. The contracts and circuits have never been licensed, which F1 records. Scored 2.

Evidence (1)1 verified
  1. Verified

    Engine and wallet LICENSE files are MIT with no change since 2022-09-29; no CLA or CONTRIBUTING file exists in contract, engine, wallet or shared-models.

    Railgun-Community/engine · LICENSE

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

No proprietary dependencies

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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

No proprietary plugin or hosted-only service is needed: the artifacts are content-addressed on IPFS and the indexer, POI node and broadcasters are optional. Judgment call: the code supports 3, but with no O3 reproduction we take 2. The contracts and circuits being unlicensed is scored under F1.

Evidence (1)1 verified
  1. Verified

    Proving artifacts are fetched by IPFS hash through the gateway ipfs-lb.com unless the integrator supplies an artifact store; the engine needs only an RPC.

    Railgun-Community/wallet · src/services/artifacts/artifact-util.ts

    commit 5c9d04c844 · 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?

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

What would raise this pillar

Tracking and analytics

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

0 Fails

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

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

The SDK ships no analytics or telemetry. Railway desktop includes a fingerprinting library; in the code we read it is used locally to derive an encryption key, and we saw no network send. Judgment call: the anchor names fingerprinting libraries as 0 regardless of use, so we take 0; on the SDK alone this cell would score higher.

Evidence (2)2 verified
  1. Verified

    Railway desktop loads @fingerprintjs/fingerprintjs (package.json L36, resolved 3.4.2) and uses the browser fingerprint visitorId as the AES key for the locally stored password hash.

    Railway-Wallet/Railway-Wallet · desktop/src/views/screens/pages/app-protect-view/AppProtectView.tsx

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

  2. Verified

    The wallet, engine and shared-models manifests list no analytics, telemetry or error-reporting packages; Railway's mobile manifest has none either.

    Railgun-Community/wallet · package.json

    commit 5c9d04c844 · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

The flow collects only what settlement needs; there is no sign-up, KYC or form. A broadcaster, if used, sees the transaction it relays and its fee; a POI node sees blinded commitments. Railway states it collects no logs, a claim we did not verify.

Evidence (1)1 verified
  1. Verified

    A shield request carries a commitment preimage (npk, token, value) and an encrypted ciphertext; transactions carry proofs, nullifiers, commitments and encrypted ciphertexts. There is no account, identity or contact field.

    Railgun-Privacy/contract · contracts/logic/Globals.sol

    commit 36bcf5ed7c · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

Shielding is public (who, which token, how much) and unshielding is public (to whom, which token, how much), but a private transfer between 0zk addresses reveals no sender, recipient, token or amount onchain; ciphertexts are encrypted to the parties. Linkage can come from the shield/unshield amounts and timing, and from self-signing with a known gas address (the Action event names the caller). Judgment call: behavioural linkage is noted, not scored; on what the code reveals, 3.

Evidence (1)1 verified
  1. Verified

    Shield emits commitment preimages (token, amount, note public key) and ciphertext; Transact emits only commitment hashes and ciphertext; Unshield emits recipient, token, amount and fee; Action emits the caller (gas payer or broadcaster).

    Railgun-Privacy/contract · contracts/logic/RailgunLogic.sol

    commit 36bcf5ed7c · 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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

Beyond the RPC, the SDK's default path touches a hosted Subsquid indexer and an IPFS gateway, and Railway adds price, config and POI services. All are named in code. The indexer and gateway can be replaced only in code (engine init functions, artifact store); the RPC and POI node URLs are configurable. Scored 2.

Evidence (1)1 verified
  1. Verified

    The wallet SDK hardcodes the Subsquid endpoint rail-squid.squids.live for quick sync, and artifact-util.ts L7 hardcodes the ipfs-lb.com gateway; Railway adds price APIs (CoinGecko, CoinPaprika, DefiLlama), its remote config at railway.xyz and the POI aggregator ppoi.fdi.network.

    Railgun-Community/wallet · src/services/railgun/quick-sync/V2/graphql/index.ts

    commit 5c9d04c844 · 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

RPC is configurable in the UI and SDK; the indexer is configurable only in code, though its code is public and the engine can fall back to RPC scanning. Scored 2.

Evidence (1)1 verified
  1. Verified

    Railway has a custom RPC modal; the indexer endpoint is fixed in the wallet SDK's generated GraphQL client, replaceable only by passing a different quickSync function to the engine; the indexer code is public (subsquid-integration, MIT).

    Railway-Wallet/Railway-Wallet · desktop/src/views/screens/modals/settings/AddCustomRPCModal/AddCustomRPCModal.tsx

    commit e9398a1ccf · 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?

0 FailsPillar rating: weakest of 6
4 of 6 Partial or better

What would raise this pillar

Who holds funds in transit

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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

Funds sit in one upgradeable contract, controlled by the note owner's keys; nobody can move them under the current code. An upgrade could, but only after a public RAIL vote and at least 7 days, while users can unshield at any time. Judgment call: we read this as "escrow with a provider role bounded by a timelock and a documented exit" (2), not "upgradeable escrow" without a delay (1).

Evidence (2)2 verified
  1. Verified

    Tokens leave the contract only through unshield in a transaction carrying a valid proof over the note owner's keys; no admin function moves user balances. Fees go to the treasury at shield and unshield (25 bps each at block 26153471).

    Railgun-Privacy/contract · contracts/logic/RailgunSmartWallet.sol

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

  2. Verified

    ProxyAdmin owner() = Delegator 0xB6d5…B53B (governance), so the upgrade that could change custody needs a RAIL vote with a 7-day minimum before execution.

    0x4F8E…65c8 on sourcify.dev

    0x4F8E…65c8 explorer · Sourcify · block 26153471 · 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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

The RailgunSmartWallet is upgradeable by RAIL governance only: ProxyAdmin → Delegator → Voting, with at least 7 days between a vote being called and execution, longer than the immediate user exit. There is no Safe; the voters are onchain. The repo names no user notice channel beyond the onchain proposal, and governance can also set verification keys via the VKeySetters. Judgment call: 2 (delay longer than exit, no notice channel named).

Evidence (2)2 verified
  1. Verified

    Delegator owner() = Voting 0xc480…A3CC; executeProposal runs through the Delegator after EXECUTION_START_OFFSET (7 days) from callVote.

    0xB6d5…B53B on sourcify.dev

    0xB6d5…B53B explorer · Sourcify · block 26153471 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    Sponsor window 30 days, voting starts 2 days after callVote, execution window 7 to 14 days after; quorum 2M RAIL.

    Railgun-Privacy/contract · contracts/governance/Voting.sol

    commit 36bcf5ed7c · 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

0 Fails

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

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

Railway asks for an unlimited allowance to the upgradeable RAILGUN proxy when shielding, and we found no disclosure of that in the UI code. The SDK has no approval helper; integrators choose. Scored 0 on the reference wallet.

Evidence (1)1 verified
  1. Verified

    Railway's shield flow sets the approval amount to maxBigIntForTransaction() (2^256-1, util.tsx L254-L256) for the RAILGUN proxy; no "unlimited" label was found in the approval screens.

    Railway-Wallet/Railway-Wallet · desktop/src/views/screens/drawer/shield/ShieldTokens/ShieldInitial/ShieldERC20sInitial.tsx

    commit e9398a1ccf · 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

2 Partial

Best evidence: VerifiedChecked 2026-10-19 today

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

Derived from S1=2, C2=3, C3=3, O3=1. Funds are held by keys the user controls, behind an upgrade path that needs a 7-day governance process (S1). A user can unshield and keep sending privately by calling the contract directly with the public SDK and an RPC (C2, C3). A public frontend exists (Railway), but no build was reproduced (O3=1). Judgment call: 2, not 3, for that reason.

Evidence (1)1 verified
  1. Verified

    The proxy is unpaused (paused slot 0) and transact/unshield is callable by anyone with a valid proof (C2).

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153471 · 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

3 Strong

Best evidence: VerifiedChecked 2026-10-19 today

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

No secrets ship in the SDK or the Railway source, and the protocol has no merchant keys or webhooks. User secrets stay client-side. The npm package 10.9.0 was published from the pinned commit (gitHead 5c9d04c8). Scored 3.

Evidence (1)1 verified
  1. Verified

    The SDK takes no API keys; wallet keys are derived from a locally stored mnemonic. A search of Railway desktop and mobile src for API_KEY, apiKey and REACT_APP_*KEY found none, and there are no webhooks.

    Railgun-Community/wallet · src/services/railgun/core/init.ts

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

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 report exists for an early version of the contracts and circuits; it does not cover the deployed implementation (deployed at block 25641630, with Action events and TokenBlocklist). We found no audit report, SECURITY file or bounty programme in the Railgun repos or docs. Judgment call: 1 for an audit of a prior version, as for Tornado Cash; no audit of the deployed code was found.

Evidence (1)1 verified
  1. Verified

    ABDK's Circom and Solidity review covers contract commit 6281cb (Commitments, RailgunLogic, Snark, TokenWhitelist, Types, Verifier) and circuits commit 2c3c31, an early version; findings are listed as Opened in this report.

    abdk-consulting/audits · railgun/ABDK_Railgun_CircomSolidity_v_2_0.pdf

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

Security audits 8

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
2023-02-03ZokyoAuditCross-chain governance relay contracts Sender.sol and Executor.sol, which carry Ethereum governance actions to Railgun's L2 deployments. at a49a82d158
Governance plumbing for other chains rather than the Ethereum settlement contracts; the arbitrum and opStack Sender and Executor files changed after this commit.
UnknownNo critical; medium issues marked resolved, plus low and informational
2022-12-21ZokyoAuditCommitments, RailgunLogic and RailgunSmartWallet (the v3 settlement contracts). at 4385ec73bf
The deployed implementation descends from these contracts, but contracts/logic changed in the 131 commits between this commit and the assessed commit 36bcf5ed (Action events, TokenBlocklist).
PartlyNo critical; medium issues marked resolved; some informational items marked invalid or unresolved
2022-09-14ZokyoAuditGovernance Voting.sol.
The report names last commit d73c1da6, which does not exist in Railgun-Privacy/contract; Voting.sol changed after the audit and we did not compare it with the deployed Voting contract.
UnknownNo critical; low and informational issues, resolved or acknowledged
2022-04-20ZokyoAuditGlobals, Snark, Commitments, Verifier, Poseidon, TokenBlacklist and RailgunLogic (v2 settlement contracts). at 62401e1a64
Covers a version replaced by the v3 RailgunSmartWallet.
No
2021-11-23ZokyoAuditCommitments, Globals and RailgunLogic (v1 settlement logic). at 97af307fa1
Starting commit 0418a0f1, last commit 97af307f. Superseded by later versions.
No2 issues, both resolved; no critical
2021-11-03ZokyoAuditFull v1 contract suite (Delegator, Voting, ProxyAdmin, Proxy, Commitments, RailgunLogic, Verifier, Snark, TokenWhitelist, Staking, Treasury, Distributor, VestLock and others). at d2c63577dd
Reviewed after the v1 deployment; the settlement logic has since been replaced, though some governance contracts (Delegator, ProxyAdmin) may descend from this suite.
NoNo critical; 1 low and 3 informational, left unresolved because the contracts were already deployed
2021-11HackenAuditRailgun smart contracts for Right to Privacy (contract list not read; see note).
Published on Hacken's audits site, which returns HTTP 403 to scripted requests, so we could not read the scope or commit. Dated November 2021, it predates the deployed implementation.
No2 medium and 2 low, all resolved, per Hacken's listing
2021-06-18ABDK ConsultingAuditEarly contracts (Commitments, RailgunLogic, Snark, TokenWhitelist, Types, Verifier) and circuits. at 6281cb0dac
Circuits were reviewed at Railgun-Privacy/circuits commit 2c3c3144, predating circuits-v2.
No2 critical, 5 major, 3 moderate, 54 minor; all listed as Opened in this report

Compiled from: The Railgun-Privacy and Railgun-Community repos (no audits folder or SECURITY file), docs.railgun.org (no audits page in its sitemap), railgun.org, the ABDK portfolio at github.com/abdk-consulting/audits (railgun folder), Zokyo's github.com/zokyo-sec/audit-reports (RAILGUN folder; a RAIL token audit there is not in the payment path), the Trail of Bits publications list (it lists a RAILGUN review from Feb 2022 with no report published), and Hacken's audit listing. No audit of the implementation deployed at block 25641630 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: 12 evidenced, 0 attested, 3 absent, 29 not applicable, 1 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
providerpayer0.25% of the shielded amount (shieldFee = 25 bps)Contract parameter on the RailgunSmartWallet proxy, sent to the treasury contract; changeFee is owner-only (RAIL governance vote, at least 7 days) and capped at 50%. Unchanged since one FeeChange event at block 14737691.
providerpayee0.25% of the unshielded amount (unshieldFee = 25 bps)Same contract parameter; deducted from the note value on unshield, so the receiving public address gets the amount net of the fee.
providerpayerBroadcaster premium, set by each broadcaster as a % of gas (docs say generally ~10%), paid in the transacted tokenOptional; set per broadcaster over Waku, not by the contracts. Self-relaying avoids it but pays gas from a public address.
networkpayerEthereum gas for shield, transact and unshieldPaid in ETH when self-signing, or folded into the broadcaster premium in the transacted token.
  1. Verified

    shieldFee() and unshieldFee() both return 25 (basis points of 10,000); nftFee() returns 0; treasury() = 0xE8A8…FF40. The only FeeChange event since deployment (block 14737691, tx 0x2bd98cd1…2361) set 25/25/0.

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153698 · checked 2026-10-09 · source unchanged at weekly re-read 2026-10-19

  2. Verified

    transferTokenOut splits the note value with getFee(value, inclusive, unshieldFee), sends the base to the recipient and the fee to the treasury, and emits Unshield(to, token, base, fee). changeFee (L141-L155) is onlyOwner and caps each fee at BASIS_POINTS / 2.

    Railgun-Privacy/contract · contracts/logic/RailgunLogic.sol

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

  3. Documented

    Railgun's docs describe the 0.25% protocol deduction and broadcaster premiums set by individual broadcasters.

    docs.railgun.org/wiki/learn/railgun-deductions.md

    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 (2) finding. Notes are spendable only with the owner's keys and no admin function moves balances; the residual risk is an upgrade after a public RAIL vote with a 7-day minimum, which S1 already records.

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

N/A: falls to the institution

No operating entity runs the rail. The contracts are governed onchain by RAIL stakers (ProxyAdmin owned by the Delegator, owned by the Voting contract; see C1), and broadcasters are independent operators. No company is named as provider in the docs or GitHub organisations.

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

Cash-out options

N/A: falls to the institution

Token-to-address rail. The payee unshields tokens to an address it controls; converting them to local currency is outside the protocol.

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

First deployment

Evidenced

2022-05-01 (block 14693013): RailgunSmartWallet proxy 0xFA70…a4b9 created (tx 0x13954e0d…22aa) by 0x76EB…4624; first implementation set at block 14737691 (2022-05-08).

The Delegator's first GrantPermission logs (block 12977000, 2021-08-07) show the governance stack predates this proxy; an earlier settlement contract, if any, is not in the provider's contract list and was not traced.

  1. Verified

    Sourcify creation data gives tx 0x13954e0d1af4c619efbd502299e78e116d1309b2b85c15ac6fe09838bb8622aa at block 14693013; the receipt (read via rpc.mevblocker.io) has contractAddress 0xfa70…a4b9 and status 1; block 14693013 is dated 2022-05-01 UTC.

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 14693013 · checked 2026-10-09

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

Operating entity

Absent

No maintaining legal entity is disclosed. Railway Wallet, the reference client, is published by the Right to Privacy Foundation, which is not the Railgun protocol's maintainer.

  1. Verified

    GitHub org Railgun-Privacy: name Railgun, company, blog, location and email empty; Railgun-Community lists only https://www.railgun.org.

    api.github.com/orgs/Railgun-Privacy

    checked 2026-10-09

  2. Documented

    The docs describe changes as onchain protocol requests decided by RAIL stakers and name no company; the full docs index (docs.railgun.org/wiki/llms.txt), railgun.org and the Railgun-Privacy and Railgun-Community GitHub organisations (no company field) were searched for a legal entity.

    docs.railgun.org/wiki/rail-token/protocol-governance.md

    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.

No post-mortem found in docs.railgun.org (full index searched) or the repos. Third-party reports of illicit use are not incidents of the rail and are not recorded.

  1. Verified

    eth_getLogs over the proxy from its creation block (14693013) to latest returns no ProxyPause events (topic0 0xa51641ae…bb6f); the only ProxyUnpause is in the setup transaction at block 14737691.

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153698 · checked 2026-10-09

  2. Verified

    No published security advisories for Railgun-Privacy/contract or Railgun-Community/engine.

    api.github.com/repos/Railgun-Privacy/contract/security-advisories

    checked 2026-10-09

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

Product changes affecting users

Evidenced
  • 2022-05-08: Proxy initialised with its first implementation (0xbcfa…541a), fees set to 25/25 bps and treasury 0xc851…4d6c; proxy unpaused. source
  • 2022-07-24: Treasury changed to 0xE8A8…FF40 (TreasuryChange). source
  • 2022-11-29: Implementation upgraded to 0x3216…e13b (ProxyUpgrade). source
  • 2023-03-09: Implementation upgraded to 0xc0be…09cc (ProxyUpgrade). source
  • 2025-07-28: Implementation upgraded to 0xb4f2…d89b (ProxyUpgrade). source
  • 2026-08-14: Implementation upgraded to the current 0xD662…6A0C (ProxyUpgrade), deployed at block 25641630; adds Action events and TokenBlocklist. source

Each upgrade after setup required a passed RAIL governance proposal (ProxyAdmin is owned by the Delegator and the Voting contract). The proposal documents behind each upgrade were not read; the transaction is the primary source cited.

  1. Verified

    ProxyUpgrade, FeeChange and TreasuryChange logs on the proxy since block 14693013 (via rpc.mevblocker.io), block dates from block headers. Upgrades at blocks 14737691, 16076750, 16790263, 23018635, 25753684; one FeeChange (14737691); TreasuryChange at 14737691 and 15202637.

    0xFA70…A4b9 on sourcify.dev

    0xFA70…A4b9 explorer · Sourcify · block 26153698 · checked 2026-10-09

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

Volume transacted (verified only)

Unknown

not computed on 2026-10-19: eth_getLogs: Archive requests require a personal token. Get one at: https://www.allnodes.com/publicnode

Judgment call. Shielded 0zk transfers hide amount, token and parties, so the payments themselves are not observable; the spec measures pool exits (Unshield) on the listed proxy, a lower bound on payee settlement to public addresses. Data words verified on a live log at block 26148878 (word 2 = USDT, word 4 = amount). Not computed; the maintainer runs scripts/volumes.mjs.

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?
N/A: falls to the institution
implied from the component list
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?
N/A: falls to the institution
implied from the component list
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?
N/A: falls to the institution
implied from the component list
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?
EvidencedABDK reviewed an early version of the contracts and circuits; no audit of the deployed implementation was found. See CROPS S6.
CROPS S6
B1.5 Penetration testing
Is the service penetration-tested before go-live and at least every three years, with results available?
N/A: falls to the institution
implied from the component list
B1.6 Vulnerability scanning cadence
Are the platform and the application scanned for vulnerabilities at least every six months?
N/A: falls to the institution
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 10 repo(s): Railgun-Privacy/contract ✗ no security policy file; Railgun-Privacy/circuits-v2 ✗ no security policy file; Railgun-Community/engine ✗ no security policy file; Railgun-Community/wallet ✗ no security policy file; Railgun-Community/shared-models ✗ no security policy file; Railgun-Community/deployments ✗ no security policy file; Railgun-Community/waku-broadcaster-client ✗ no security policy file; Railgun-Community/private-proof-of-innocence ✗ no security policy file; Railgun-Community/subsquid-integration ✗ no security policy file; Railway-Wallet/Railway-Wallet ✗ no security policy file
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
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)?
N/A: falls to the institution
implied from the component list
B2.3 Dependency and vulnerability scanning in CI
Do the public repositories run dependency or code scanning automatically?
Absentnone of 10 repo(s): Railgun-Privacy/contract ✗ no scanning config or workflow step found; Railgun-Privacy/circuits-v2 ✗ no scanning config or workflow step found; Railgun-Community/engine ✗ no scanning config or workflow step found; Railgun-Community/wallet ✗ no scanning config or workflow step found; Railgun-Community/shared-models ✗ no scanning config or workflow step found; Railgun-Community/deployments ✗ no scanning config or workflow step found; Railgun-Community/waku-broadcaster-client ✗ no scanning config or workflow step found; Railgun-Community/private-proof-of-innocence ✗ no scanning config or workflow step found; Railgun-Community/subsquid-integration ✗ no scanning config or workflow step found; Railway-Wallet/Railway-Wallet ✗ no scanning config or workflow step found
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
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)?
N/A: falls to the institution
implied from the component list
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?
N/A: falls to the institution
implied from the component list
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?
N/A: falls to the institution
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?
N/A: falls to the institution
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?
N/A: falls to the institution
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?
N/A: falls to the institution
implied from the component list
B5.2 API authentication, server to server
Are server-to-server calls authenticated with keys or PKI certificates, and are keys scoped and rotatable?
N/A: falls to the institution
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)?
N/A: falls to the institution
implied from the component list
B5.4 Export controls
If an API exports data, does it limit volumes and log exports?
N/A: falls to the institution
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?
N/A: falls to the institution
implied from the component list
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?
N/A: falls to the institution
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?
N/A: falls to the institution
implied from the component list
B6.4 Data protection impact assessment and roles
For systems holding personal data, has a DPIA been completed and are controller and processor defined?
N/A: falls to the institution
implied from the component list
B6.5 Data processing or sharing agreement available
Can a customer obtain a data processing agreement or equivalent?
N/A: falls to the institution
implied from the component list
Logging and monitoring
B7.1 Audit logging
Are account changes, logins and activity on important records logged and retained?
N/A: falls to the institution
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?
N/A: falls to the institution
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?
N/A: falls to the institution
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?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ no deployment configuration; Railgun-Privacy/circuits-v2 ✗ no deployment configuration; Railgun-Community/engine ✗ no deployment configuration; Railgun-Community/wallet ✗ no deployment configuration; Railgun-Community/shared-models ✗ no deployment configuration; Railgun-Community/deployments ✗ no deployment configuration; Railgun-Community/waku-broadcaster-client ✗ no deployment configuration; Railgun-Community/private-proof-of-innocence ✗ no deployment configuration; Railgun-Community/subsquid-integration ✓ deployment configuration: docker-compose.yml; Railway-Wallet/Railway-Wallet ✗ no deployment configuration
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
Engineering practice in public repositories
B9.1 Default branch protected
Does the default branch require reviews and passing checks, with no direct pushes?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Privacy/circuits-v2 ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Community/engine ✓ rules: deletion, non_fast_forward, pull_request, required_linear_history; Railgun-Community/wallet ✓ rules: deletion, non_fast_forward, pull_request, required_linear_history; Railgun-Community/shared-models ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Community/deployments ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Community/waku-broadcaster-client ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Community/private-proof-of-innocence ✗ no branch rules visible (classic branch protection is not readable without push access); Railgun-Community/subsquid-integration ✓ rules: deletion, non_fast_forward, pull_request, required_linear_history; Railway-Wallet/Railway-Wallet ✗ no branch rules visible (classic branch protection is not readable without push access)
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.2 CI runs on pull requests
Does every pull request trigger automated checks?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ no .github/workflows; Railgun-Privacy/circuits-v2 ✗ 1 workflow file(s); Railgun-Community/engine ✓ 5 workflow file(s); Railgun-Community/wallet ✓ 3 workflow file(s); Railgun-Community/shared-models ✓ 4 workflow file(s); Railgun-Community/deployments ✗ no .github/workflows; Railgun-Community/waku-broadcaster-client ✓ 3 workflow file(s); Railgun-Community/private-proof-of-innocence ✓ 2 workflow file(s); Railgun-Community/subsquid-integration ✗ no .github/workflows; Railway-Wallet/Railway-Wallet ✗ no .github/workflows
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.3 Tests run in CI
Do the CI workflows run the test suite?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ test command in a workflow; Railgun-Privacy/circuits-v2 ✓ test command in a workflow; Railgun-Community/engine ✓ test command in a workflow; Railgun-Community/wallet ✓ test command in a workflow; Railgun-Community/shared-models ✓ test command in a workflow; Railgun-Community/deployments ✗ test command in a workflow; Railgun-Community/waku-broadcaster-client ✓ test command in a workflow; Railgun-Community/private-proof-of-innocence ✓ test command in a workflow; Railgun-Community/subsquid-integration ✗ test command in a workflow; Railway-Wallet/Railway-Wallet ✗ test command in a workflow
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.4 Coverage reported
Is test coverage measured and reported (the partner expects 85%)?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ coverage tooling referenced; Railgun-Privacy/circuits-v2 ✗ coverage tooling referenced; Railgun-Community/engine ✓ coverage tooling referenced; Railgun-Community/wallet ✓ coverage tooling referenced; Railgun-Community/shared-models ✗ coverage tooling referenced; Railgun-Community/deployments ✗ coverage tooling referenced; Railgun-Community/waku-broadcaster-client ✗ coverage tooling referenced; Railgun-Community/private-proof-of-innocence ✗ coverage tooling referenced; Railgun-Community/subsquid-integration ✗ coverage tooling referenced; Railway-Wallet/Railway-Wallet ✗ coverage tooling referenced
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.5 Versioned releases
Are releases tagged with immutable semantic versions?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ no tags; Railgun-Privacy/circuits-v2 ✗ no tags; Railgun-Community/engine ✓ latest tags: v9.6.0, v9.5.4, v9.5.3; Railgun-Community/wallet ✓ latest tags: v10.9.0, v10.8.6, v10.8.5; Railgun-Community/shared-models ✓ latest tags: v8.0.1, v8.0.0, v7.6.2; Railgun-Community/deployments ✗ no tags; Railgun-Community/waku-broadcaster-client ✓ latest tags: v9.1.1, v9.1.0, v9.0.6; Railgun-Community/private-proof-of-innocence ✗ no tags; Railgun-Community/subsquid-integration ✗ no tags; Railway-Wallet/Railway-Wallet ✓ latest tags: v5.26.1, v5.24.21, v5.24.18
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.6 Signed tags or commits
Are release tags or recent commits cryptographically signed?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✓ 10 of 10 recent commits signed; Railgun-Privacy/circuits-v2 ✓ 10 of 10 recent commits signed; Railgun-Community/engine ✗ 2 of 10 recent commits signed; Railgun-Community/wallet ✗ 2 of 10 recent commits signed; Railgun-Community/shared-models ✓ 9 of 10 recent commits signed; Railgun-Community/deployments ✓ 10 of 10 recent commits signed; Railgun-Community/waku-broadcaster-client ✓ 9 of 10 recent commits signed; Railgun-Community/private-proof-of-innocence ✓ 5 of 10 recent commits signed; Railgun-Community/subsquid-integration ✗ 0 of 1 recent commits signed; Railway-Wallet/Railway-Wallet ✗ 2 of 10 recent commits signed
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.7 Changelog
Is a changelog maintained with the code?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ no changelog or release notes; Railgun-Privacy/circuits-v2 ✗ no changelog or release notes; Railgun-Community/engine ✗ no changelog or release notes; Railgun-Community/wallet ✗ no changelog or release notes; Railgun-Community/shared-models ✗ no changelog or release notes; Railgun-Community/deployments ✗ no changelog or release notes; Railgun-Community/waku-broadcaster-client ✗ no changelog or release notes; Railgun-Community/private-proof-of-innocence ✗ no changelog or release notes; Railgun-Community/subsquid-integration ✗ no changelog or release notes; Railway-Wallet/Railway-Wallet ✓ 10 release(s) with notes
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
B9.8 Contribution and branching model documented
Does the README or contribution guide state how changes are proposed, reviewed and released?
Evidencedsome of 10 repo(s): Railgun-Privacy/contract ✗ none found; Railgun-Privacy/circuits-v2 ✗ none found; Railgun-Community/engine ✗ none found; Railgun-Community/wallet ✓ contribution section in README; Railgun-Community/shared-models ✗ none found; Railgun-Community/deployments ✗ none found; Railgun-Community/waku-broadcaster-client ✗ none found; Railgun-Community/private-proof-of-innocence ✓ contribution section in README; Railgun-Community/subsquid-integration ✗ none found; Railway-Wallet/Railway-Wallet ✗ none found
source 1 · source 2 · source 3 · source 4 · source 5 · source 6 · source 7 · source 8 · source 9 · source 10
Architecture documentation
B10.1 Architecture documentation
Is there a public architecture document covering logical, infrastructure and integration architecture and the components used?
EvidencedLogical architecture only (contracts, UTXO Merkle tree, zk-SNARKs, broadcasters, SDK) on docs.railgun.org; integration via the SDK and Adapt Modules pages. No infrastructure view, as there is no operator-run infrastructure.
source 1
Commercial and financial
B11.1 Contracting entity
Which legal entity would an institution contract with, and in which jurisdiction?
N/A: falls to the institution
implied from the component list
B11.2 Funding of ongoing operation
How is ongoing operation and maintenance funded (revenue, foundation, grants, fee switch), per a primary source?
EvidencedOnchain fee switch. 0.25% on shield and unshield goes to the treasury contract, distributed to RAIL stakers (4.2% of the treasury every two weeks per the docs). No foundation or grant funding of maintenance was found.
The fees reward stakers, not a named maintainer; how contract and SDK development is paid for is not documented.
source 1 · source 2
B11.3 Termination terms
What happens to customer funds and data on termination by either side?
N/A: falls to the institution
implied from the component list
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)?
Absent
source 1
B12.2 AI controls documented
If AI is used, are monitoring, validation, override, decommissioning and bias evaluation documented?
Unknown
implied from the component list

Scope of assessment

Components in the payment path

ComponentRolePublicLicenceOperatorRequired
RailgunSmartWallet proxy and implementationcontractsYesnoneRAIL governance (upgrade and pause via ProxyAdmin)Yes
Circuits and proving artifacts (IPFS, circuits-v2)otherYesnonenone (static artifacts)Yes
RAILGUN engine, wallet and shared-models SDK (npm @railgun-community)sdkYesMITuserYes
Ethereum mainnet and a JSON-RPC endpoint of the user's choiceledgerYesLGPL-3.0Ethereum validators; RPC chosen by the userYes
Governance (Voting, Delegator, ProxyAdmin, VKeySetters)contractsYesnoneRAIL stakersNo
Broadcasters over Waku (waku-broadcaster-client)relayerYesMITindependent broadcaster operatorsNo
Hosted Subsquid indexer (rail-squid.squids.live, SDK default)indexerYesMITunknown (Subsquid Cloud deployment)No
IPFS gateway ipfs-lb.com (SDK default for artifacts)otherNoproprietaryunknownNo
Private Proof of Innocence aggregator (ppoi.fdi.network, Railway default)backendYesMITunknownNo
Railway Wallet (desktop and mobile)frontendYesAGPL-3.0Right to Privacy FoundationNo
Railway remote config and price APIs (CoinGecko, CoinPaprika, DefiLlama)apiNoproprietaryRight to Privacy Foundation; price vendorsNo

Repositories

Contracts

RoleAddressSource verified
RailgunSmartWallet proxy (PausableUpgradableProxy)0xFA70…A4b9 explorer · Sourcifysourcify
RailgunSmartWallet implementation0xD662…6A0C explorer · Sourcifysourcify
ProxyAdmin (upgrade and pause)0x4F8E…65c8 explorer · Sourcifysourcify
Delegator (governance executor)0xB6d5…B53B explorer · Sourcifysourcify
Voting (RAIL governance)0xc480…A3CC explorer · Sourcifysourcify

Assessor notes

Unit: Ethereum RailgunSmartWallet proxy 0xFA70…a4b9 (implementation 0xD662…6A0C) and its governance chain. Reads at block 26153471 via publicnode; Delegator permission logs via rpc.mevblocker.io (RevokePermission logs could not be fetched; current permissions were read with checkPermission). Railgun has no first-party frontend; Railway Wallet (Right to Privacy Foundation) is assessed as the reference client. npm @railgun-community/wallet latest is 11.2.0, published from outside the default branch; we pinned 10.9.0, whose gitHead is the default-branch commit we read. No transactions, UI runs, traces or self-host attempts.