Pygo
A service that allows users to send PYUSD and check crypto prices over SMS
Problem Statement
What if every phone number could be a stablecoin wallet? Pygo lets anyone send and receive ETH and PYUSD on Ethereum using plain SMS; no apps or internet needed. Users register with a PIN, get a custodial wallet, check balances, send tokens with a two-step SMS confirmation, fetch BTC/ETH prices via Pyth Hermes, and retrieve their wallet address. It’s designed as a simple, secure bridge between feature phones and crypto.
Solution
Core:Node.js + Express API with MongoDB (Mongoose) for users, transactions, and pending confirmations.Twilio handles inbound/outbound SMS; an SMS parser interprets commands (REGISTER, BALANCE, SEND, CONFIRM, YES, WALLET, PRICE).Custodial wallets are generated per user with ethers.js; private keys are AES-encrypted at rest; PINs are salted SHA-256 hashes; accounts lock after repeated failures.Transactions use ethers.js: native ETH sends and ERC‑20 transfer for PYUSD; balances refresh from chain.Two-step send flow: creates a short‑lived PendingTransaction with TTL; user confirms with YES or CONFIRM<CODE><PIN>.Prices (Pyth Hermes)Primary path uses price feed IDs via v2/updates/price/latest?ids[]&parsed=true (env-configured for BTCUSD/ETHUSD).Fallback discovery with v2/price_feeds?query=... if IDs aren’t set; final fallback to v2/price/latest?symbols=....Notable hacks/pragmaticsSymbol normalization and feed discovery to handle BTC/ETH variants if IDs aren’t provided.Simple formatting rules for prices and token decimals (18 for ETH, env-configurable for PYUSD).Minimal, explicit SMS templates and confirmations to fit the 160‑char UX, with helpful errors.StackExpress, Mongoose, ethers.js, Twilio, CryptoJS (AES/SHA‑256), Winston, Pyth Hermes HTTP.Configurable via env: ETH RPC/chain, PYUSD address/decimals, Twilio creds, encryption key, Pyth feed IDs.
Hackathon
ETHOnline 2025
2025
Contributors
- Arihaan
10 contributions