AgaPay
Agapay (from Filipino agapay, "to walk alongside") is a non-custodial, on-chain savings and smart spending vault protocol built on Arbitrum. It lets individuals and groups lock funds into a smart contract with a beneficiary list, a due date, and optional drip-release scheduling — no bank, no counterparty, no trust required. The contract enforces the terms. A keeper triggers release; fees are transparent and configurable at deploy time. The frontend connects via RainbowKit + wagmi — users bring their own wallet.
기술 스택
Solidity
Node
Next
설명
**Problem:** In many communities, savings are informal, trust-based arrangements that break down when members default, disappear, or dispute amounts. There is no self-enforcing primitive for group savings on-chain.
**Solution:** Agapay vaults are immutable savings agreements on Arbitrum:
- **Standard vault** — funds locked until a due date; released in one shot to one or more beneficiaries by a keeper.
- **Drip vault** — funds released in fixed installments at a configurable interval (daily, weekly, monthly). Each installment is capped at the vault's current balance.
- **Target gating** — vaults can require a funding target to be met before release is allowed.
- **Fee model** — a platform fee (bps) and an optional keeper tip (bps) are deducted from each release, remainder goes to beneficiaries according to their share split.
The contract is **UUPS-upgradeable** (OpenZeppelin), deployed behind a proxy so the implementation can be patched without migrating vault state.
| Layer | Choice |
|---|---|
| Smart contract | Solidity 0.8.27, Foundry, OpenZeppelin UUPS |
| Frontend | React 18, Vite, TypeScript |
| Wallet | RainbowKit + wagmi + viem |
| Chains | Arbitrum Sepolia (testnet), Robinhood Testnet (chain 46630) |
| Token | MockUSDC (6 decimals, mintable) |해커톤 진행 상황
Smart Contract)
- `AgapayVaults.sol` — UUPS upgradeable vault factory
- `createVault(name, token, target, dueDate, requireTarget, beneficiaries[], shareBps[])` — standard vault
- `createDripVault(name, token, target, dueDate, intervalSeconds, dripAmount, requireTarget, beneficiaries[], shareBps[])` — drip vault
- `fund(id, amount)` — ERC-20 deposit
- `release(id)` — one-shot release with fee deduction
- `releaseDrip(id)` — interval-based partial release
- `refund(id)` — returns balance to funder when conditions aren't met
- `MockUSDC.sol` — ERC-20 test token with public `mint()`
- **Test coverage: 23/23 tests passing, 95.58% line coverage** (Foundry)
- `via_ir = true` enabled to resolve stack-too-deep on `releaseDrip`
Frontend
- RainbowKit ` ` — MetaMask / injected wallet connect
- Chain switcher — Arbitrum Sepolia and Robinhood Testnet both configured
- Auto-mint on wallet connect (Anvil local only)
- Vault wizard — create standard or drip vault with beneficiary split UI
- Vault list — filtered by owner/beneficiary, live from chain via `nextVaultId` + batched `getVault` calls
- Fund modal — approve + fund in one UX flow
- Vault detail — release, refund, drip status, timeline
- Landing page — conversion-focused, single CTA
- Mercury design system — black background, `#8B9CEC` accent, Inter font
Deployments
Arbitrum Sepolia (chain 421614)
| Contract | Address |
| MockUSDC | `0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d` |
| AgapayVaults proxy | `0x95b2b6e2fb1256d77c5cfb240314b47be7c303f3` |
| Deploy block | 315,165,341 |
Robinhood Testnet (chain 46630)
| Contract | Address |
| MockUSDC | `0x1fa1be7637b769ddde5037d175b4895189226e80` |
| AgapayVaults proxy | `0x262a2c969cf93c8547c1b5caa94e2baedeefa279` |
| Deploy block | 127,982,156 |
Smoke Test — Robinhood Testnet
| Step | Tx Hash |
| Create vault | `0x23dd3...` |
| Approve USDC | `0x76d3a...` |
| Fund vault (2 USDC) | `0x8eae7...` |
| Release | `0x9b4f1...` |
Demo Vaults — Arbitrum Sepolia
| Vault | ID | Description | Status |
| School Fees | 6 | 70/30 split, 8/20 USDC funded | Active |
| Rent Reserve | 7 | Keeper-released after creation | Released |
| Emergency Fund | 8 | Target-gated, 3/8 USDC (shortfall demo) | Active |
자금 모금 상태
Agapay is currently pre-revenue and not seeking external funding at this stage.
The project was built as a public-good savings primitive. Potential monetisation paths, if the protocol gains adoption:
- Protocol fee: 0.5% on release (already implemented, configurable at deploy)
- Keeper tip: 0.1% on release (goes to the address that triggers `release()`)
- Managed vaults: a hosted keeper service that auto-releases on schedule for users who don't want to self-keep
No tokens, no DAO, no roadmap promises. The contract is deployed and functional on two Arbitrum chains. This submission is the working product.