The First Reversible Transaction Protocol on Blockchain
"Never lose crypto to mistakes again."
π Live Demo β’ π Documentation β’ π API β’ π‘οΈ Security
| Component | Status | Details |
|---|---|---|
| π ReversoVault | β Deployed on Ethereum | Verified on Etherscan β 1,194 lines, 5-layer protection |
| π‘οΈ EmergencyGuardian | β Deployed on Ethereum | Verified on Etherscan β Multi-sig + 24h timelock |
| ποΈ ReversoMonitor | β Deployed on Ethereum | Verified on Etherscan β Anomaly detection + auto-pause |
| π§ͺ Test Suite | β 109 tests passing | Unit tests + integration tests + security tests + gas benchmarks |
| π Enterprise API | β Live | HMAC auth, rate limiting, fraud prevention |
| π Website | β Live β reverso.one | Interactive demo with wallet connection |
| βοΈ Multi-chain | β 7 Chains Live | Ethereum, BSC, Base, Arbitrum, Polygon, Optimism, Avalanche |
| π Fuzz Testing | β 13,000+ runs | 13 property tests Γ 1,000 random inputs (Foundry) |
All 3 contracts deployed and wired on 7 chains: Ethereum, BSC, Base, Arbitrum, Polygon, Optimism, Avalanche.
Every year, billions of dollars in crypto are lost forever due to:
| Problem | Annual Loss |
|---|---|
| π£ Phishing & Scams | $3.8B |
| π Wrong Address | $1.2B |
| π Lost Access | $2.1B |
| π Smart Contract Bugs | $1.5B |
| TOTAL | $8.6B+ |
Blockchain's immutability is a feature... until it's a bug.
REVERSO introduces time-locked reversible transfers with up to 5 layers of protection:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π REVERSO TRANSFER FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SEND βββΆ LOCK PERIOD βββΆ CLAIM WINDOW βββΆ COMPLETE β
β β β β β β
β β [CANCEL OK] [RECIPIENT β β
β β CLAIMS] β β
β β β β β
β ββββββββββββββββββββββββββββ΄ββββββββββββββββ β
β β
β π‘οΈ 5 LAYERS OF PROTECTION: β
β βββ Layer 1: Cancel during lock period β
β βββ Layer 2: Recovery Address 1 (hardware wallet) β
β βββ Layer 3: Recovery Address 2 (exchange backup) β
β βββ Layer 4: Auto-refund after expiry β
β βββ Layer 5: Rescue abandoned funds (90 days) β
β β
β π PREMIUM INSURANCE (+0.2%): β
β βββ Full refund even if scammer claims your funds! β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Feature | Description |
|---|---|
| Reversible Transfers | Cancel any transfer during lock period |
| Time-Lock Options | 1 hour to 30 days - you choose |
| Triple Recovery | 2 backup addresses + original sender |
| Auto-Refund | Unclaimed transfers return automatically |
| Multi-Token | ETH + any ERC-20 token |
| Multi-Chain | ETH, BSC, Base, Arbitrum, Polygon, Optimism, Avalanche β all live |
| Tier | Amount | Fee | Example |
|---|---|---|---|
| π Retail | < $1,000 | 0.3% | $100 β $0.30 fee |
| πΌ Standard | $1K - $100K | 0.5% | $10,000 β $50 fee |
| π Whale | > $100,000 | 0.7% | $1M β $7,000 fee |
Pay 0.2% extra β Insurance coverage (per policy, fino al pool disponibile)
Even if scammer claims your funds:
βββ You contact us with proof
βββ We verify the scam
βββ You get refunded from Insurance Pool π°
Example: 10 ETH with insurance
βββ Base fee: 0.05 ETH (0.5%)
βββ Insurance: 0.02 ETH (0.2%)
βββ Total cost: 0.07 ETH (0.7%)
βββ Protection: coverage subject to policy/pool β
- Pay salaries, stipends and reimbursements with a lock window β cancel before the recipient claims if something goes wrong.
- HMAC/nonce/timestamp API auth: keys stay server-side, no bearer tokens in frontend.
- Recovery addresses and auto-refund: if the recipient doesn't claim, funds return automatically.
- Optional insurance (+0.2%) to cover fraud or erroneous claims.
- Rate limiting and audit-first rollout: mainnet gated until external audit is completed.
| Chain | Status | Chain ID |
|---|---|---|
| Ethereum | β Deployed & Verified | 1 |
| BSC | β Deployed | 56 |
| Base | β Deployed | 8453 |
| Arbitrum | β Deployed | 42161 |
| Polygon | β Deployed | 137 |
| Optimism | β Deployed | 10 |
| Avalanche | β Deployed | 43114 |
| zkSync Era | π Planned | 324 |
| Linea | π Planned | 59144 |
| Scroll | π Planned | 534352 |
| Mantle | π Planned | 5000 |
| Blast | π Planned | 81457 |
| Mode | π Planned | 34443 |
| Celo | π Planned | 42220 |
| Gnosis | π Planned | 100 |
# Clone the repository
git clone https://github.com/conditional-team/REVERSO.git
cd REVERSO
# Install dependencies
npm install
# Compile contracts
npx hardhat compile
# Run tests
npx hardhat run scripts/test-functions.ts --network hardhat
# Deploy locally
npx hardhat run scripts/deploy.ts --network hardhat
# Deploy to testnet
npx hardhat run scripts/deploy.ts --network sepolia
# Deploy multichain (usa config hardhat)
npx hardhat run scripts/deploy-multichain.tsFull protocol stack deployed and verified on Ethereum Mainnet. All contracts are source-code verified on Etherscan, ownership has been transferred to the EmergencyGuardian multi-sig, and the monitoring layer is active.
| Contract | Address | Etherscan | Role |
|---|---|---|---|
| π ReversoVault | 0x31ec8EeeCb341c7cefAefA6BC0Dd84BE9Bd11085 |
β Verified Source | Core vault β reversible transfers, fees, insurance |
| π‘οΈ EmergencyGuardian | 0x7F1CB513B7A582A11f3057F104D561E9A9126A7d |
β Verified Source | Multi-sig owner of Vault β timelock + emergency pause |
| ποΈ ReversoMonitor | 0x152935935E86ab06ce75b6871c500f6Eb57f5332 |
β Verified Source | Anomaly detection β auto-pause on critical alerts |
| π° Treasury | 0x211a8C2d4f5924d4378162b48bC759a3E3e57dD8 |
View | Receives protocol fees |
Deployed February 24, 2026. Same 3-contract stack on every chain.
| Contract | Address |
|---|---|
| π ReversoVault | 0x6Ec438bEfE7f956d115c4Aa2B9eB80996df4d322 |
| π‘οΈ EmergencyGuardian | 0x7C962938cce85737eB25147667279117f40dE23a |
| ποΈ ReversoMonitor | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
| Contract | Address |
|---|---|
| π ReversoVault | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
| π‘οΈ EmergencyGuardian | 0x038516Fd2EbF5AC7c6E4A85858CDaF908F4650C9 |
| ποΈ ReversoMonitor | 0xA8854b60A3c150BA0b4FB7418eD7b15d577a129b |
| Contract | Address |
|---|---|
| π ReversoVault | 0x6Ec438bEfE7f956d115c4Aa2B9eB80996df4d322 |
| π‘οΈ EmergencyGuardian | 0x7C962938cce85737eB25147667279117f40dE23a |
| ποΈ ReversoMonitor | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
| Contract | Address |
|---|---|
| π ReversoVault | 0x6Ec438bEfE7f956d115c4Aa2B9eB80996df4d322 |
| π‘οΈ EmergencyGuardian | 0x7C962938cce85737eB25147667279117f40dE23a |
| ποΈ ReversoMonitor | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
| Contract | Address |
|---|---|
| π ReversoVault | 0x6Ec438bEfE7f956d115c4Aa2B9eB80996df4d322 |
| π‘οΈ EmergencyGuardian | 0x7C962938cce85737eB25147667279117f40dE23a |
| ποΈ ReversoMonitor | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
| Contract | Address |
|---|---|
| π ReversoVault | 0x6Ec438bEfE7f956d115c4Aa2B9eB80996df4d322 |
| π‘οΈ EmergencyGuardian | 0x7C962938cce85737eB25147667279117f40dE23a |
| ποΈ ReversoMonitor | 0x1610DA56f09555a388AB8a095F180A2069FDA4F1 |
ReversoVault.owner() β EmergencyGuardian β
EmergencyGuardian.vault β ReversoVault β
ReversoMonitor.guardian β EmergencyGuardian β
Deploy Block: 24520800 Β· Compiler: Solidity 0.8.20 Β· Optimizer: 200 runs
| Contract | Address | Network | Status |
|---|---|---|---|
| ReversoVault v1 | 0x2F5c8E09FBf360777153dd6F7F636077890e61DF |
Sepolia | β Verified |
| ReversoVault v2 | 0x3D1f9d1cEaf350885A91f7Fb05c99a78Bc544ED8 |
Sepolia | β Deployed |
| TestToken (TTK) | 0x72E847D973f9b215C7F561CD059CBd7a1601Fe3C |
Sepolia | β Verified |
| Treasury | 0x6a5729177bF2AE13351F43af0999767B59d9b059 |
Sepolia | β Receives fees |
Deploy Date: December 29, 2025
| TX Hash | 0x3176b0d6... |
| Amount Sent | 0.001 ETH |
| Amount After Fee | 0.000997 ETH (0.3% fee) |
| Recipient | 0x...dEaD (burn address for test) |
| Delay | 1 hour |
| Memo | "Test REVERSO" |
| Gas Used | 383,452 |
| Status | β
SUCCESS - Transfer created with status Pending |
| TX Hash | 0x3c4fcf76... |
| Transfer ID | 1 |
| Action | Cancel pending transfer |
| Gas Used | 64,138 |
| Result | β
SUCCESS - Funds returned to sender, status changed to Cancelled |
| TX Hash | 0x325757b3... |
| Transfer ID | 3 |
| Gas Used | 332,176 |
| Status | β SUCCESS - Then cancelled to recover funds |
| TX Hash | 0x824265692f... |
| Transfer ID | 4 |
| Amount After Fees | 0.000995 ETH (0.5% fee + 0.2% insurance) |
| Has Insurance | β
true |
| Insurance Pool | Increased by +0.000002 ETH |
| Gas Used | 358,128 |
| Status | β SUCCESS - Premium transfer with insurance flag, then cancelled |
| Tested | Cancel on transfers #3 and #4 |
| Gas Used | ~64,000 |
| Result | β SUCCESS - All cancelled transfers refunded correctly |
| Token | TestToken (TTK) - 0x72E847D9... |
| Vault | 0x3D1f9d1c... |
| Approve TX | 0xac3168a9... |
| sendToken TX | 0x3ecacf50... |
| Amount | 100 TTK |
| Gas Used | 433,095 |
| Cancel TX | 0x91d099ab... (67,951 gas) |
| Status | β SUCCESS - ERC20 transfer created, cancelled, tokens refunded |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π SEPOLIA TESTNET - LIVE TESTS
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Test 1: sendETH() β PASSED (383,452 gas)
βββ 0.001 ETH sent with 1h delay, 0.3% fee collected
β
Test 2: cancel() β PASSED (64,138 gas)
βββ Funds returned to sender, status = Cancelled
β
Test 3: sendETH() β PASSED (332,176 gas)
βββ Additional transfer test, cancelled to recover
β
Test 4: sendETHPremium() β PASSED (358,128 gas)
βββ Insurance flag set, pool increased +0.000002 ETH
β
Test 5: cancel() β PASSED (multiple)
βββ All pending transfers successfully cancelled
β
Test 6: sendToken() β PASSED (433,095 gas)
βββ ERC20 (TestToken) transfer + cancel working
β
Test 7: claim() β PASSED (190,303 gas)
βββ Recipient claimed after 1h unlock period!
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
7/7 TESTS PASSED β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| TX Hash | 0x3e866e52... |
| Vault | 0x3D1f9d1c... |
| Transfer ID | 2 |
| Claimer | 0xb9279e38f6eab17f986E7133C60a46DE527628e3 (receiver wallet) |
| Amount Claimed | 0.001994 ETH |
| Wait Time | 1 hour (unlock period) |
| Gas Used | 190,303 |
| Status | β
SUCCESS - Transfer status changed to Claimed, funds transferred to recipient |
| Test | Function | Description | Status |
|---|---|---|---|
| 8 | refundExpired() |
Auto-refund after expiry | β³ Requires 7+ days |
| 9 | recoverToBackup() |
Recovery address claim | β³ Requires expiry |
| 10 | freezeTransfer() |
Guardian blocks suspicious transfer | β³ Requires Guardian setup |
| 11 | rescueAbandoned() |
Rescue funds after 90+ days | β Not feasible on testnet |
Note: Tests 8-11 sono verificati nei test Hardhat locali (vedi sezione sotto). Su testnet richiedono tempi reali troppo lunghi.
| Wallet | Address | Purpose |
|---|---|---|
| Sender | 0x6a5729177bF2AE13351F43af0999767B59d9b059 |
Deploys contracts, sends transfers |
| Receiver | 0xb9279e38f6eab17f986E7133C60a46DE527628e3 |
Claims transfers (for claim() test) |
| Treasury | 0x6a5729177bF2AE13351F43af0999767B59d9b059 |
Receives protocol fees |
- claim(): Cannot send to self (
_recipient != msg.sendercheck). Using 2nd wallet as recipient. - Time-dependent tests: Testnet doesn't allow time manipulation. Must wait real time.
- rescueAbandoned(): Requires 90+ days - verified in local Hardhat tests only.
Suite Hardhat in locale (ETH + ERC20 + insurance + rescue):
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ͺ REVERSO - TEST RESULTS
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TEST 1: CREATE TRANSFER (sendETH)
πΈ Sending: 1 ETH
π€ To: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8
β±οΈ Delay: 1 hour
β
Transfer created!
π Transfer ID: 1
π° Amount after fee: 0.995 ETH (0.5% fee applied)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TEST 2: CANCEL TRANSFER
π° Sender balance before: 9998.99 ETH
β
Transfer CANCELLED!
π° Sender balance after: 9999.99 ETH
π Refunded: ~0.995 ETH β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TEST 3: CLAIM TRANSFER
π° Recipient balance before: 10000.0 ETH
β
Transfer CLAIMED!
π° Recipient balance after: 10000.497 ETH
π Status: Claimed β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TEST 4: FEE COLLECTION
π Total Transfers: 2
π¦ Treasury received fees β
TEST 5: ERC20 TRANSFER
π sendToken with fee tier
π¦ Treasury gets token fee
π TVL tracks token amount after fee
TEST 6: INSURANCE CLAIM
π‘οΈ sendETHPremium β claim β payInsuranceClaim
π¦ Insurance pool debits payout
π€ Victim receives compensation
TEST 7: RESCUE (TVL)
π§Ή rescueAbandoned reduces TVL after late recovery
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ALL TESTS PASSED!
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Function | Status | Description |
|---|---|---|
sendETH() |
β Passed | Create reversible transfer with delay |
sendETHSimple() |
β Passed | Quick transfer with 24h default |
cancel() |
β Passed | Cancel and receive full refund |
claim() |
β Passed | Recipient claims after delay |
calculateFee() |
β Passed | Progressive fee calculation |
| Fee Collection | β Passed | Treasury receives fees automatically |
// SIMPLE: Send with default 24h delay
reversoVault.sendETHSimple{value: 1 ether}(
recipient, // address to receive
"Payment #123" // optional memo
);
// ADVANCED: Custom delay, expiry, and DOUBLE recovery addresses
reversoVault.sendETH{value: 1 ether}(
recipient, // address to receive
6 hours, // delay before claim (min 1h, max 30d)
30 days, // expiry - time to claim (min 7d)
ledgerAddr, // recovery address 1 (your hardware wallet)
coinbaseAddr, // recovery address 2 (your exchange)
"Payment #123" // optional memo
);
// π PREMIUM: Full insurance coverage (recommended for large transfers)
reversoVault.sendETHPremium{value: 10 ether}(
recipient, // address to receive
7 days, // delay
30 days, // expiry
ledgerAddr, // recovery 1
coinbaseAddr, // recovery 2
"Large payment" // memo
);
// Pays: 0.5% base + 0.2% insurance = 0.7% total
// Gets: Full scam/theft protection!
// Cancel before delay expires (FREE!)
reversoVault.cancel(transferId);
// Claim after delay (recipient calls)
reversoVault.claim(transferId);
// Refund expired transfer (anyone can call after expiry)
reversoVault.refundExpired(transferId);
// Rescue abandoned funds (anyone can call after 90 days post-expiry)
reversoVault.rescueAbandoned(transferId);| Delay | Best For |
|---|---|
| 1 hour | Urgent but want minimal protection |
| 6 hours | Daily transactions |
| 24 hours | Standard protection (DEFAULT) |
| 7 days | Large amounts |
| 30 days | Escrow, major purchases |
REVERSO offers a powerful REST API for businesses, exchanges, and dApps.
| Plan | Price | TX/Month | Features |
|---|---|---|---|
| Starter | $99 | 100 | API Access, Email Support |
| Business | $499 | Unlimited | + Webhooks, Dashboard, Priority Support |
| Enterprise | $2,000 | Unlimited | + White-label, SLA 99.9%, 24/7 Support |
Production: https://reverso-tu3o.onrender.com/api/v1
Development: http://localhost:3000/api/v1
curl -H "Authorization: Bearer rsk_business_xxx..." \
https://reverso-tu3o.onrender.com/api/v1/transfers// 1. Register for API key
const register = await fetch('/api/v1/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'dev@company.com',
password: 'secure123',
company: 'Acme Inc',
plan: 'business'
})
});
const { apiKey } = await register.json();
// β οΈ Save apiKey.key - shown only once!
// 2. Create reversible transfer
const transfer = await fetch('/api/v1/transfers', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey.key}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
chainId: 1, // Ethereum
to: '0x...', // Recipient
amount: '1000000000000000000', // 1 ETH in wei
withInsurance: true // +0.2% for full protection
})
});
const { transaction } = await transfer.json();
// Sign `transaction` with ethers.js and broadcast!| Method | Endpoint | Description |
|---|---|---|
POST |
/auth/register |
Create account & get API key |
POST |
/auth/login |
Login existing user |
GET |
/auth/plans |
List subscription plans |
POST |
/transfers |
Create reversible transfer |
GET |
/transfers/:id |
Get transfer status |
GET |
/transfers |
List all transfers |
POST |
/transfers/:id/cancel |
Generate cancel transaction |
POST |
/transfers/:id/confirm |
Confirm after blockchain tx |
GET |
/webhooks |
List webhooks (Business+) |
POST |
/webhooks |
Create webhook (Business+) |
GET |
/admin/usage |
View API usage (Business+) |
GET |
/admin/stats |
Analytics (Enterprise) |
PUT |
/admin/branding |
White-label config (Enterprise) |
GET |
/admin/sla |
SLA status (Enterprise) |
Receive real-time notifications for transfer events:
{
"type": "transfer.claimed",
"data": {
"id": "uuid",
"txHash": "0x...",
"from": "0x...",
"to": "0x...",
"amount": "1000000000000000000",
"status": "claimed"
},
"createdAt": "2025-12-26T12:00:00Z"
}Available Events:
transfer.created- New transfer createdtransfer.claimed- Recipient claimed fundstransfer.cancelled- Sender cancelled transfertransfer.refunded- Expired transfer refunded
cd api
npm install
cp .env.example .env
npm run dev
# Server runs on http://localhost:3000
### API Security (HMAC)
All protected endpoints require these headers:
- `Authorization: Bearer <apiKey>`
- `x-reverso-timestamp`: Epoch milliseconds (Β±5 minutes tolerance)
- `x-reverso-nonce`: Unique UUID to prevent replay attacks
- `x-reverso-signature`: HMAC-SHA256 of `timestamp.nonce.METHOD.URL.sha256(body)` signed with `signingSecret`
**Rate Limiting:** 300 req/min per API key + transaction limit per plan.
### Multi-Chain Configuration
- Config source: [api/config/chains.json](api/config/chains.json) + `.env` variables for RPC and vault addresses
- After deployment, update `.env` with actual contract addresses
### Transaction Encoding
```solidity
// ETH transfers
sendETH(recipient, delay, expiryPeriod, recovery1, recovery2, memo)
// ERC20 transfers
sendToken(token, recipient, amount, delay, expiryPeriod, recovery1, recovery2, memo)Note: Memo max 256 characters; recovery addresses cannot be zero address.
---
## π Revenue Model
| Stream | Source | Estimated Revenue |
|--------|--------|-------------------|
| **Progressive Fees** | 0.3-0.7% on transfers | ~$5.8M/year @ $1B volume |
| **Insurance Premiums** | 0.2% on premium transfers | ~$600K/year |
| **Enterprise API** | $99-$2000/month subscriptions | ~$600K/year |
| **TOTAL** | | **~$7M/year** |
---
## π Security
### Security Architecture (3-Contract System)
REVERSO uses a **3-layer security architecture** that provides enterprise-grade protection:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ποΈ REVERSO SECURITY STACK β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β ποΈ ReversoMonitor β β β β β’ Anomaly detection (volume spikes, suspicious tx) β β β β β’ Auto-pause on CRITICAL alerts β β β β β’ Watchlist management β β β β β’ Chainlink Automation compatible β β β βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ β β β triggers β β βββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ β β β π‘οΈ EmergencyGuardian β β β β β’ Multi-signature (2-of-2 for critical actions) β β β β β’ 24-hour timelock on admin changes β β β β β’ Instant emergency pause β β β β β’ Recovery system with dual confirmation β β β βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ β β β owns β β βββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ β β β π ReversoVault β β β β β’ Core reversible transfer logic β β β β β’ 5-layer user protection β β β β β’ Progressive fees + insurance β β β β β’ Circuit breaker β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
### Contract Details
| Contract | Lines | Purpose |
|----------|-------|---------|
| **ReversoVault.sol** | 1,119 | Core vault - reversible transfers, fees, insurance |
| **EmergencyGuardian.sol** | 401 | Multi-sig owner, timelock, emergency controls |
| **ReversoMonitor.sol** | 320 | Real-time monitoring, anomaly detection, auto-pause |
### EmergencyGuardian Features
```solidity
// π¨ INSTANT - Any guardian can pause immediately
guardian.emergencyPause("Suspicious activity detected");
// β±οΈ TIMELOCK - Critical actions need 24h + dual confirmation
guardian.proposeAction(ActionType.CHANGE_TREASURY, newTreasury);
// ... 24 hours later, DIFFERENT guardian confirms ...
guardian.confirmAction(actionId);
guardian.executeAction(actionId);
// π MULTI-SIG - Two keys required for sensitive operations
// Primary key: Hot wallet (daily operations)
// Secondary key: Hardware wallet (backup, confirms critical actions)
// π Automatic anomaly detection
monitor.recordTransaction(sender, amount);
// Triggers alerts on:
// - Single tx > 50 ETH (HIGH alert)
// - Hourly volume > 100 ETH (HIGH alert)
// - Hourly volume > 200 ETH (CRITICAL β auto-pause)
// - Watchlisted address activity (MEDIUM alert)
// π€ Chainlink Automation compatible
(bool upkeepNeeded, bytes memory data) = monitor.checkUpkeep("");- β ReentrancyGuard on all external functions
- β Pausable for emergency stops
- β Circuit breaker (auto-pause on suspicious activity)
- β Timelock on admin changes (24 hours via Guardian)
- β Multi-signature for critical operations
- β Guardian system for freezing suspicious transfers
- β OpenZeppelin battle-tested contracts
- β Anomaly detection with auto-pause
| Protection | Layer | Description |
|---|---|---|
| Content Security Policy | Website | Strict CSP blocking unauthorized scripts, iframes, and connections |
| X-Content-Type-Options | Website | Prevents MIME-type sniffing attacks |
| Referrer Policy | Website | Controls information leakage to external sites |
| Frame-ancestors: none | Website | Anti-clickjacking β prevents iframe embedding |
| Upgrade-insecure-requests | Website | Forces HTTPS on all resources |
| XSS Sanitizer | Website | escapeHtml() on all user-interpolated data |
| CORS Lockdown | API | Restricted to reverso.one only (no wildcard) |
| Helmet.js | API | HSTS (1 year + preload), CSP, referrer policy |
| HMAC-SHA256 | API | Request signature verification with timestamp + nonce |
| Replay Protection | API | Nonce-based deduplication prevents replay attacks |
| Rate Limiting | API | Global: 1000 req/15min β Per-key: 300 req/min |
| Bcrypt (10 rounds) | API | Industry-standard hashing for API key credentials |
| JWT Auth | API | 30-day token expiry with strong secret |
| Error Masking | API | 500 errors masked in production, no path leakage |
| Input Validation | API | Email regex, address regex, amount checks |
Layer 1: CANCEL
βββ Sender can cancel anytime during lock period
βββ 100% refund, zero questions asked
Layer 2: RECOVERY ADDRESS 1
βββ If sender loses access, funds go here
βββ Recommended: Hardware wallet (Ledger, Trezor)
Layer 3: RECOVERY ADDRESS 2
βββ If recovery 1 fails, try recovery 2
βββ Recommended: Exchange account (Coinbase, Binance)
Layer 4: AUTO-REFUND
βββ If recipient never claims, auto-refund after expiry
βββ Anyone can trigger (gas incentive)
Layer 5: RESCUE
βββ After 90 days post-expiry, rescue abandoned funds
βββ Tries all 3 addresses, then treasury for manual handling
π Security First Approach β Mainnet Live
- Smart contract follows OpenZeppelin best practices
- ReentrancyGuard, Pausable, SafeERC20 implemented
- Bug bounty program active (up to $50K)
Current Status:
- β Ethereum Mainnet deployed (all 3 contracts verified on Etherscan)
- β 7 chains live β Ethereum, BSC, Base, Arbitrum, Polygon, Optimism, Avalanche
- β Testnet validation completed (Sepolia β 7/7 live tests passed)
- β 109 Hardhat tests passing (unit + integration + security + gas benchmarks)
- β 13,000+ Foundry fuzz runs (13 property-based tests Γ 1,000 random inputs each)
- β Slither static analysis (143 items reviewed, 0 true-positive criticals)
- β Gas benchmarks β all operations within L2-friendly limits
- β Website live at reverso.one
- β Enterprise API live at reverso-tu3o.onrender.com
- π External audit planned Q3 2026 (OpenZeppelin / Trail of Bits)
| Severity | Reward |
|---|---|
| Critical | Up to $50,000 |
| High | Up to $20,000 |
| Medium | Up to $5,000 |
| Low | Up to $1,000 |
| Requirement | Details |
|---|---|
| Eligibility | Transfers with hasInsurance = true and Claimed status |
| Claim Window | Within 30 days of the incident |
| Evidence Required | Screenshots, tx hash, sender signature |
| Decision Timeline | Security committee within 7 days |
| Coverage | Up to full transfer amount (limited by pool balance) |
| Exclusions | Price/market errors; only confirmed phishing/scams |
- Send Screen: Display fee breakdown (0.3/0.5/0.7% + 0.2% premium) and net amount
- Claim/Cancel: Show time window, estimated gas cost, quick cancel button
- Notifications: Alert on unlock, approaching expiry, auto-refund, rescue events
- Token Approvals: Prefer targeted approvals over infinite approvals
REVERSO/
βββ π contracts/ # Solidity smart contracts
β βββ ReversoVault.sol # Core vault (1,119 lines)
β βββ EmergencyGuardian.sol # Multi-sig guardian (401 lines)
β βββ ReversoMonitor.sol # Anomaly detection (320 lines)
β βββ interfaces/
β βββ IReversoVault.sol # Contract interface
βββ π test/ # Test suites
β βββ ReversoVault.test.ts # Vault tests
β βββ SecurityContracts.test.ts # Guardian + Monitor tests
β βββ GasBenchmarks.test.ts # Gas benchmarks
βββ π api/ # Enterprise REST API
β βββ src/
β β βββ index.ts # Express server
β β βββ routes/ # Transfer, auth, webhooks, admin
β β βββ middleware/ # HMAC, rate limiting, API keys
β βββ sdk/ # JavaScript/TypeScript SDK
β βββ config/ # Multi-chain configuration
βββ π website/ # Production website (Vite)
β βββ src/
β β βββ main.js # App logic
β β βββ styles/ # CSS
β βββ index.html # Entry point
βββ π scripts/ # Deploy scripts
β βββ deploy.ts # Single chain deploy
β βββ deploy-multichain.ts # Multi-chain deploy
βββ π hardhat.config.ts # Multi-chain configuration
βββ π README.md # This file
βββ π PITCH_INVESTORS.md # Investor documentation
"I accidentally approved a malicious contract. With REVERSO, I had 24 hours to cancel before my funds were stolen."
"We send contractor payments through REVERSO. If there's a dispute or error, we can cancel within the grace period."
"I send my daughter's allowance through REVERSO. She can see it's coming, and I can cancel if plans change."
"Instead of complex escrow contracts, we use REVERSO with a 7-day delay for large purchases."
"I scheduled transfers to my heirs with maximum delays. If something happens to me, funds auto-release."
"Our exchange integrated REVERSO API. Now all withdrawals have a 1-hour safety window."
- Core smart contracts
- Progressive fee structure
- Insurance system
- Multi-chain configuration (15+ chains)
- Enterprise API
- Basic documentation
- Ethereum Mainnet deployment (3 contracts verified)
- Testnet validation (Sepolia β 7/7 live tests passed)
- Security audits (OpenZeppelin, Trail of Bits)
- Multi-chain deployments (BSC, Base, Arbitrum, Polygon, Optimism, Avalanche)
- SDK release (JavaScript/TypeScript)
- Mobile app (React Native)
- Cross-chain reversible transfers
- Wallet integrations (MetaMask Snap, WalletConnect)
- CEX partnerships (Coinbase, Binance)
- DAO governance launch
- REVERSO token launch
- Fiat on-ramp with reversibility
- Insurance protocol integration (Nexus Mutual)
- Enterprise white-label solutions
REVERSO is designed to integrate with the broader DeFi ecosystem:
| Category | Integrations |
|---|---|
| Wallets | MetaMask, WalletConnect, Ledger, Trezor |
| Exchanges | Coinbase, Binance, Kraken |
| DeFi | Uniswap, Aave, Compound |
| Infrastructure | Chainlink, The Graph, Alchemy |
| Insurance | Nexus Mutual, InsurAce |
- Node.js 18+
- npm or yarn
- Git
# Clone repo
git clone https://github.com/conditional-team/REVERSO.git
cd REVERSO
# Install dependencies
npm install
# Setup environment
cp .env.example .env
# Edit .env with your keys
# Compile
npx hardhat compile
# Test
npx hardhat test
# Coverage
npx hardhat coverage
# Deploy
npx hardhat run scripts/deploy.ts --network sepolia# Required
PRIVATE_KEY=your-deployer-private-key
ETHERSCAN_API_KEY=your-etherscan-key
# Optional (for multi-chain)
ARBISCAN_API_KEY=
BASESCAN_API_KEY=
OPTIMISM_API_KEY=
POLYGONSCAN_API_KEY=MIT License - see LICENSE
| Resource | Link |
|---|---|
| π Website | reverso.one |
| π API (Live) | reverso-tu3o.onrender.com |
| π¦ Repository | github.com/conditional-team/REVERSO |
| π Documentation | This README |
| π API Docs | Enterprise API Section |
| πΌ Investor Pitch | PITCH_INVESTORS.md |
REVERSO/
βββ π contracts/ # 3 Solidity smart contracts (1,840 lines total)
β βββ ReversoVault.sol # Core vault with 5-layer protection
β βββ EmergencyGuardian # Multi-sig + timelock + emergency pause
β βββ ReversoMonitor # Anomaly detection + auto-pause
β βββ interfaces/ # Contract interfaces
βββ π test/ # Hardhat test suite (109 tests)
βββ π security/ # Security suite (Foundry fuzz 13,000+ runs + Slither)
βββ π api/ # Enterprise REST API
β βββ src/routes/ # Transfer, auth, webhooks, admin
β βββ src/middleware/ # HMAC, rate limiting, API keys
β βββ sdk/ # JavaScript/TypeScript SDK
βββ π website/ # Production website (Vite + vanilla JS)
βββ π scripts/ # Deploy scripts (single & multi-chain)
βββ π README.md # This file
βββ π PITCH_INVESTORS.md # Investor documentation
βββ π hardhat.config.ts # Multi-chain configuration (15+ chains)
# Deploy all 3 contracts + wire them together automatically
npx hardhat run scripts/deploy-stack.ts --network ethereumThis script performs all 6 steps automatically:
- Deploy ReversoVault (treasury address from
.env) - Deploy EmergencyGuardian (secondary guardian from
.env) vault.transferOwnership(guardian)β guardian becomes vault ownerguardian.linkVault(vault)β guardian knows which vault to protect- Deploy ReversoMonitor (vault address as constructor arg)
monitor.setGuardian(guardian)β monitor can trigger guardian alerts
# 1. Deploy ReversoVault
npx hardhat run scripts/deploy.ts --network ethereum
# 2-6. The deploy-stack.ts script handles wiring automatically.
# See scripts/deploy-stack.ts for the full deployment flow.ReversoVault Β· EmergencyGuardian Β· ReversoMonitor
109 tests passing Β· 3-contract security stack Β· Enterprise REST API
Built with β€οΈ for a safer crypto future
REVERSO Protocol β Because everyone deserves a second chance.
Β© 2024-2026 REVERSO Protocol