Bona Fide puts a refundable USDC deposit behind opening a PR or issue. contracts/src/BonaFideEscrow.sol holds one deposit per keyOf(repoId, kind, number), takes it in a single gasless signature through USDC's EIP-3009 depositWithAuthorization, lets the keeper refund early and anyone refund after the deadline, and forfeits at most MAX_FORFEIT_BPS (50%) only on the maintainer's EIP-712 Forfeit signature checked with SignatureChecker for EOAs and ERC-1271 wallets. Forfeits land in CharityRouter.sol, an ownerless CCTP forwarder whose flush() burns to one fixed mintRecipient via depositForBurn. BountyWalletFactory.sol deploys a per-(repo, owner) BountyWallet at a predictable CREATE2 address with keeper payout limits. All three are verified on Arc mainnet (chain 5042) at 0xe2fe798427CFb43134FC37F6EE054c2da818fAc9, 0xe36fe5152C6A54946b15df3fEBDc068AF48581dc and 0xEda45D2931B1A36D5920edefA621Ff5533c98C42. Around them sit @bona-fide/sdk with typed ABIs, keys and EIP-712 typed data, a GitHub App in app/ that turns escrow state into a check run and refunds on merge, and an MCP server in agent/src/server.ts with tools such as prepare_signed_deposit.
| Contract | Address | Proof |
|---|---|---|
| BonaFideEscrow | 0xe2fe798427CFb43134FC37F6EE054c2da818fAc9 | Sourcify ✓ |
| CharityRouter | 0xe36fe5152C6A54946b15df3fEBDc068AF48581dc | Sourcify ✓ |
| BountyWalletFactory | 0xEda45D2931B1A36D5920edefA621Ff5533c98C42 | Sourcify ✓ |
Let's build the future together!
Refundable good-faith Deposits for open-source contributions, on Arc