MicroAI Paygate
AI 요청 결제 게이트웨이로 EIP-712 서명, 영수증 발행, 클라이언트 서명 검증 지원
SafeSend는 싱가포의 노년층과 청년이 암호화폐를 안전하게 보낼 수 있도록 도와줍니다
SafeSend helps older adults and young people in Singapore send crypto safely: recipient checks, payment pauses and a simple review by a trusted family member.
금융TypeScript · SolidityGitHub @Lakshmikanth-3온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기SafeSend: safer crypto payments for seniors and beginners in Singapore. Risky transfers pause in a smart contract, the reasons are shown in plain words, and a trusted family member approves or stops them with Face ID. Built on Monad.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗SafeSend makes crypto transfers safer for people who are new to crypto, especially older adults and young people in Singapore. It combines checks on who you are paying, payment pauses you can configure, and a simple review by a trusted family member.
Web3 for Social Good 2026 (SMU × GSR Foundation × UMA) · Tech Track · Monad testnet (chain 10143)
🌐 Live app: https://safesend-sg.vercel.app (testnet, test money)
▶ Demo video: https://youtu.be/SuMC1kGFgkk
The golden rule: fixed smart-contract rules and authorised people decide. AI only explains and guides. AI can never move money.
From the Singapore Police Force's Mid-Year Scam and Cybercrime Brief 2026 (PDF):
Safe and Coinbase already offer limits, delays, trusted contacts and recipient checks, built for people who already understand crypto. SafeSend makes the same protections easy to understand and use for beginners and their families: simple setup, reasons in plain words, and a guided review for the guardian.
| Protected user | Guardian |
|---|---|
| Mdm Tan, 68. Gets a call from a "bank officer" saying her money must be moved to a "safe account". | Wei Ming, her son. Reviews any paused payment with a checklist, and can add a backup guardian. |
| A 16-year-old with a first crypto account, tempted by "guaranteed" returns from a group chat. | Their parent. Approves anything unusual before it leaves. |
flowchart TD
A[Protected user taps Send] --> B["What is this payment for?<br/>Family · Shopping · Bills · Investment · Someone asked me to · Other"]
B --> C{"Smart contract checks the rules<br/>new recipient? reported? over a limit?"}
C -- no --> D[Paid straight away]
C -- yes --> E["Warning screen<br/>why, in plain words · safety tip · reports"]
E -- Cancel transfer --> F[Nothing is sent]
E -- Ask my guardian --> G[Money paused inside the vault]
G -- user cancels --> H[Money back to the user]
G --> I{"Guardian review<br/>reasons · purpose · reports · checklist · Call · AI guidance"}
I -. guardian unavailable .-> J[Backup guardian reviews]
J --> I
I -- Stop --> H
I -- Approve, after 'I spoke to them' --> K[2-minute cooling-off]
K -- user cancels --> H
K -- time passes --> L[Paid to the recipient]
G -- nobody answers in 30 min --> H
I -- Stop and report --> M[Shared onchain report warns other families]
Protected user taps Send
│
"What is this payment for?" Family · Shopping · Bills · Investment · Someone asked me to · Other
│
Will the contract pause this?
├─ no (saved recipient, within limits, no reports) ──► paid straight away
└─ yes ──► warning screen
• why it will be paused, in plain words
• "Banks, police and government officers will never ask you to move money to keep it safe."
• reports about the recipient: source, date, verified or not
[Cancel transfer] → nothing is sent
[Ask my guardian to check] → the contract holds the money in the vault
│
Guardian (or backup guardian) review, in this order:
1. amount, recipient, how long it has waited
2. why it was paused + what the user said it is for
3. reports, with source, date and status
4. checklist + guidance (AI or fixed rules, labelled) + a suggested question
5. Call [name], using only the number saved at setup
6. "Use the official number from their website, never one the caller gave."
7. [Stop transfer] (red) [Approve] (green, only after "I have spoken to [name] and checked this request")
│
Stop ─────────┼──────── Approve ──────────────────── Nobody answers
money back to user │ 2-minute cooling-off, then paid money back to user automatically
│ (the user can still cancel)
The user can also cancel a paused payment herself at any time: it only ever returns the money to her.
| Rule | What the user reads | Contract reason |
|---|---|---|
| The recipient has been reported | "Reported by others (2). Reports can be wrong." | NETWORK_FLAG |
| The recipient is new | "New recipient." | NEW_PAYEE |
| One payment is over the limit | "Over your $1,000 limit." | OVER_CAP |
| Payments in a day or week add up past the total limit | "Over your total limit for now." | OVER_PERIOD_LIMIT |
The guardian sees one or two short sentences on what the evidence shows and what is uncertain, plus one question fitted to the stated purpose. It comes from an AI model (openai/gpt-oss-120b through Groq; any OpenAI-compatible API works) when one is configured, and from fixed rules otherwise. The screen always says which. The pause has already happened before the guidance runs, and the guidance cannot change it. Evaluation on 20 scenarios (docs/ai-evaluation.md): 10 used once to tune the AI prompt, and 10 fresh ones written afterwards and never used for tuning.
| Guidance | Scams warned (all 20) | False alarms (all 20) | Scams warned (fresh 10 only) |
|---|---|---|---|
| Fixed rules (fallback) | 7 / 10 | 3 / 10 | 2 / 5 |
| AI (gpt-oss-120b) | 10 / 10 | 3 / 10 | 5 / 5 |
The AI catches every scam, including ones with no obvious keywords (a dating-app "friend", unlocking game winnings, a "son" on a new number), which the rules miss. Both still raise false alarms on genuine payments that mention police or banks. The guardian makes the final decision either way.
Sometimes the person pressuring an older adult is family. SafeSend limits what a guardian can do:
Body text is 18px or larger, buttons are at least 56px tall, text contrast is at least 4.5:1, and there is a Large text switch. Main screens have no crypto words; technical details live under Details.
flowchart LR
subgraph Phones["Two phones (web app, Face ID passkeys)"]
U["Protected user<br/>Mdm Tan"]
G["Guardian<br/>Wei Ming (+ backup)"]
end
subgraph Vercel["Vercel"]
W["Website + app<br/>(Next.js, Expo web)"]
R["Relayer<br/>pays network fees,<br/>no spending power"]
A["Agent<br/>alerts, guidance, keeper"]
B[("Vercel Blob<br/>names, invites, briefs")]
end
AI["AI model<br/>explains only,<br/>never moves money"]
subgraph Monad["Monad testnet"]
V["Vault contract<br/>pause rules · limits · holds<br/>cancel · cooling-off · backup guardian"]
S["Reports contract<br/>shared scam reports"]
end
U --> W
G --> W
W --> R
W --> A
R --> B
A --> B
A --> AI
R -- "signed by the user / guardian's Face ID" --> V
V --> S
A -- "expire, release" --> V
SafeSend could not keep its main promise with an ordinary app and database:
Path to real use
| Stage | What | Status |
|---|---|---|
| 1. Prototype | Full journey on Monad testnet with test money | Done |
| 2. Pilot | 10–20 families through SMU and community groups (for example, seniors' activity centres) on testnet; measure how often guardians stop and how long reviews take | Next |
| 3. Mainnet | Real stablecoins on an EVM chain, after a security audit of the contract | Later |
| 4. Embed | Offer the pause-and-review flow as a module that wallets and exchanges add to their own apps | Later |
Who pays
Running costs are low: the contract costs nothing to run; the relayer pays small network fees; the AI guidance is optional and falls back to fixed rules at no cost.
Risks and how we handle them
Needs Node 22+, pnpm 9+ and Foundry.
pnpm install
cp .env.example .env # fill in MONAD_RPC_URL, the three private keys, RELAYER_ADDRESS and AGENT_ADDRESS
pnpm dev # relayer :8787, agent :8788, app http://localhost:8081
The keys need testnet MON (https://faucet.monad.xyz). The relayer pays gas and the agent runs expiries. Neither can move anyone's money: spending needs the protected user's signature, and releasing a paused payment needs a guardian's Face ID, checked by the contract.
cd contracts && forge test # 126 passing
pnpm parity # TypeScript and Solidity agree on every signing challenge
pnpm typecheck && pnpm -r test
pnpm e2e # the whole journey on a local chain
pnpm e2e:testnet # the same journey on Monad testnet (needs pnpm dev running)
pnpm api:build # bundles the relayer and agent for Vercel
pnpm --filter @thunai/agent evaluate # regenerates docs/ai-evaluation.md
| Contract | Address |
|---|---|
Vault (ThunaiVault) | 0x918022A5aDd2d250617ec64F7b38C5EEcf28E48f |
Reports (ScamSignals) | 0x3b7e4d3B44E91d2C0396d781F2BcdfE5fa87Cd48 |
| Stand-in deposit token (tCTK) | 0xc79f8fa19F8D197a42100BbEf95F2db989266d3f |
| Stand-in dollar (tAUSD) | 0xA880e099Ca5134a992B3aEa6c7D7099ae4802771 |
To deploy your own: set RELAYER_ADDRESS and AGENT_ADDRESS in .env first (or both roles default to the deployer), run pnpm contracts:deploy, then mint tCTK to the relayer and tAUSD to the vault as backing. Both tokens are testnet stand-ins with open minting.
| Part | Vercel project | How |
|---|---|---|
Landing page, with the app at /app | safesend | node scripts/build-web.mjs, then cd frontend && vercel deploy --prod |
| Relayer and agent, as one serverless function | safesend-api | node scripts/build-api-vercel.mjs, then cd .vercel-api && vercel deploy --prod |
/relayer/* and /agent/* to safesend-api (RELAYER_URL and AGENT_URL on the safesend project), so the app, its servers and its passkeys share one origin.Contract and package names (ThunaiVault, ScamSignals, @thunai/*) are kept on purpose: renaming them would change the signing domain, every passkey challenge and the deployment files. See docs/safesend-map.md.
▶ Watch: https://youtu.be/SuMC1kGFgkk
Title → pain points → real incidents reported by the Singapore Police Force → the problem → the solution → target users and use cases → a real recording of the app on Monad testnet (setup, the scam paused, the guided review, Stop, a genuine gift approved with cooling-off, the user cancelling, Silent SOS) → architecture → working flow.
docs/chainabuse.md.MIT. See LICENSE.