Reversible Transaction Protocol for EVM Chains
Time-locked transfers with cancel, recovery, and insurance β deployed on 7 chains.
π 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 | β 163 tests passing | 131 Hardhat (contracts) + 32 Jest (API) β HMAC, validation, denylist, plans |
| π Enterprise API | β Live | HMAC auth, email verification, password reset, fraud denylist, webhooks with retry |
| π 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.
Blockchain transactions are irreversible by design. Phishing, wrong-address sends, lost access, and contract bugs cause significant losses every year. Once confirmed, there is no undo.
REVERSO adds a time-locked reversibility layer on top of standard EVM transfers β letting senders cancel, recover, or auto-refund before finalization.
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 (subject to pool balance)
Even if scammer claims your funds:
βββ You contact us with proof
βββ We verify the scam
βββ You get refunded from Insurance Pool π°
Fully tested: payInsuranceClaim(), withdrawExcessInsurance(),
reject on non-insured transfer, reject on empty 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 |
# Clone the repository
git clone https://github.com/Faraone-Dev/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 (uses hardhat config)
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 | β Verified in Hardhat (ETH + ERC20) |
| 9 | freezeTransfer() |
Guardian blocks suspicious transfer | β Verified in Hardhat (ETH + ERC20) |
| 10 | rescueAbandoned() |
Rescue funds after 90+ days | β Verified in Hardhat (TVL consistent) |
Note: Tests 8-10 are fully verified in local Hardhat tests (131 passing) including ERC20 lifecycle. On testnet they require real wait times.
| 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.
Local Hardhat suite (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 |
sendETHPremium() |
β Passed | Transfer with insurance (+0.2%) |
sendToken() |
β Passed | ERC20 transfer with fee-on-transfer support |
cancel() |
β Passed | Cancel and receive full refund (ETH + ERC20) |
claim() |
β Passed | Recipient claims after delay (ETH + ERC20) |
refundExpired() |
β Passed | Auto-refund after expiry (ETH + ERC20) |
batchRefundExpired() |
β Passed | Batch refund with DoS protection |
freezeTransfer() |
β Passed | Guardian freeze + refund (ETH + ERC20) |
manualRefund() |
β Passed | Owner manual refund for edge cases |
rescueAbandoned() |
β Passed | TVL-consistent late recovery |
payInsuranceClaim() |
β Passed | Insurance payout from pool |
withdrawExcessInsurance() |
β Passed | Excess pool withdrawal to treasury |
calculateFee() |
β Passed | Progressive fee tiers (retail/standard/whale) |
setCircuitBreakerLimits() |
β Passed | Circuit breaker configuration |
setAlertThreshold() |
β Passed | Alert threshold with bounds check |
| 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: Scam/theft coverage from insurance pool
// 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 |
REST API for programmatic access to reversible transfers.
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 |
POST |
/auth/quick-key |
Instant API key (email only) |
GET |
/auth/plans |
List subscription plans |
POST |
/auth/verify-email/send |
Send verification email (JWT) |
GET |
/auth/verify-email?token= |
Verify email address |
POST |
/auth/forgot-password |
Request password reset |
POST |
/auth/reset-password |
Set new password with token |
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 |
POST |
/usecases/checkout |
E-commerce checkout flow (Enterprise) |
POST |
/usecases/payroll |
Batch payroll (Enterprise) |
POST |
/usecases/escrow |
Escrow transfer (Enterprise) |
GET |
/webhooks |
List webhooks (Business+) |
POST |
/webhooks |
Create webhook (Business+) |
PATCH |
/webhooks/:id |
Update webhook (Business+) |
DELETE |
/webhooks/:id |
Delete webhook (Business+) |
POST |
/webhooks/:id/test |
Send test event (Business+) |
GET |
/admin/usage |
View API usage (Business+) |
GET |
/admin/stats |
Real-time analytics from SQLite (Enterprise) |
GET |
/admin/denylist |
List blocked addresses (Enterprise) |
POST |
/admin/denylist |
Block address (Enterprise) |
DELETE |
/admin/denylist/:addr |
Unblock address (Enterprise) |
PUT |
/admin/branding |
White-label config (Enterprise) |
GET |
/admin/sla |
SLA status (Enterprise) |
GET |
/admin/export |
Export transfer data (Business+) |
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:3000All protected endpoints require these headers:
Authorization: Bearer <apiKey>x-reverso-timestamp: Epoch milliseconds (Β±5 minutes tolerance)x-reverso-nonce: Unique UUID to prevent replay attacksx-reverso-signature: HMAC-SHA256 oftimestamp.nonce.METHOD.URL.sha256(body)signed withsigningSecret
Rate Limiting: 300 req/min per API key + transaction limit per plan.
- Config source: api/config/chains.json +
.envvariables for RPC and vault addresses - After deployment, update
.envwith actual contract addresses
// 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.
---
## π Security
### Security Architecture (3-Contract System)
REVERSO uses a **3-layer security architecture**:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ποΈ 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
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)
- β 163 tests passing (131 Hardhat + 32 API Jest β HMAC, validation, denylist, plans)
- β 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 (not yet scheduled)
If you find a security vulnerability, please report it responsibly via GitHub Issues or email. Severity-based rewards will be evaluated on a case-by-case basis.
Transfers sent with hasInsurance = true are eligible for coverage from the insurance pool if funds are claimed by a confirmed scammer. Coverage is subject to pool balance and requires evidence submission within 30 days.
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 (131 Hardhat tests)
β βββ ReversoVault.test.ts # Vault tests (68 tests)
β βββ SecurityContracts.test.ts # Guardian + Monitor tests (48 tests)
β βββ GasBenchmarks.test.ts # Gas benchmarks (15 tests)
βββ π api/ # Enterprise REST API
β βββ src/
β β βββ index.ts # Express server
β β βββ routes/ # Transfer, auth, webhooks, admin, usecases, billing
β β βββ middleware/ # HMAC, rate limiting, API keys
β β βββ utils/ # Fraud denylist (file + env + runtime)
β βββ test/ # API tests (32 Jest tests)
β βββ sdk/ # TypeScript SDK with HMAC signing
β βββ config/ # Multi-chain configuration
βββ π website/ # Production website (Vite)
β βββ src/
β β βββ main.js # App logic
β β βββ styles/ # CSS
β βββ index.html # Entry point
βββ π keeper/ # Keeper bot (WebSocket + Monitor)
β βββ src/index.ts # Event listener, reconnection, stats
βββ π scripts/ # Deploy scripts
β βββ deploy.ts # Single chain deploy
β βββ deploy-stack.ts # Full 3-contract deploy + wiring
β βββ deploy-multichain.ts # Multi-chain deploy
βββ π security/ # Security suite
β βββ foundry-fuzz/ # Foundry fuzz tests (13,000+ runs)
β βββ slither/ # Static analysis reports
β βββ gas-benchmarks/ # Gas profiling
βββ π .github/workflows/ci.yml # CI pipeline (contracts + API + website)
βββ π hardhat.config.ts # Multi-chain configuration (15+ chains)
βββ π README.md # This file
- 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)
- Multi-chain deployments (BSC, Base, Arbitrum, Polygon, Optimism, Avalanche)
- TypeScript SDK with HMAC signing
- Email verification + password reset
- Webhook delivery with retry + exponential backoff
- Fraud denylist (env + file + admin API)
- CI/CD pipeline (GitHub Actions)
- 163 total tests (131 Hardhat + 32 API)
- External security audit
- Node.js 18+
- npm or yarn
- Git
# Clone repo
git clone https://github.com/Faraone-Dev/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=Transparency note: REVERSO is a production-grade MVP. The sections below describe what is fully shipped and what is still in development.
| Component | Status | Notes |
|---|---|---|
| Smart Contracts | β Production | Deployed on 7 chains, verified on Etherscan, immutable |
| Hardhat Tests | β 131 passing | Full coverage of vault, guardian, monitor |
| API Tests | β 32 passing | HMAC, error handlers, validation, denylist logic, plan features |
| Foundry Fuzz Tests | β 13,000+ runs | Invariant + property-based |
| HMAC + Replay Protection | β Production | SHA-256, nonce DB, 60s drift window |
| Webhook Delivery | β Real POST | Exponential backoff retry (3 attempts, 1s/2s/4s), auto-disable after 10 failures |
| Fraud Denylist | β File + Env + API | Hot-reloaded every 60s, admin CRUD endpoints, persisted to JSON |
| Admin Stats | β Real SQLite | byStatus, byChain, successRate, insurance aggregation |
| Email Verification | β Production | Token-based, 24h expiry, Resend integration |
| Password Reset | β Production | SHA-256 hashed tokens, 1h expiry, anti-enumeration |
| Usecase Persistence | β SQLite | Checkout/payroll/escrow persist to DB (not in-memory) |
| CI/CD | β GitHub Actions | Contracts compile+test, API type-check+test, website build |
| Stripe Billing | β Production | Checkout sessions, webhook signature verification, plan upgrades |
| SDK | β Production | TypeScript SDK with HMAC signing, full CRUD |
| Keeper Bot | β Code complete | WebSocket listener, Monitor integration, reconnection logic |
| Database | π‘ SQLite (WAL) | Good for MVP; migration to PostgreSQL recommended at scale |
| White-Label | π‘ Placeholder | Endpoints exist, config not persisted to DB |
| SLA Reporting | π‘ Placeholder | Returns static values, no real uptime tracking yet |
| Email Delivery | π‘ Optional | Requires RESEND_API_KEY; gracefully skipped when absent |
MIT License - see LICENSE
| Resource | Link |
|---|---|
| π Website | reverso.one |
| π API (Live) | reverso-tu3o.onrender.com |
| π¦ Repository | github.com/Faraone-Dev/REVERSO |
| π Documentation | This README |
| π API Docs | Enterprise API Section |
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 (131 tests)
βββ π security/ # Security suite (Foundry fuzz 13,000+ runs + Slither)
βββ π api/ # Enterprise REST API (32 API tests)
β βββ src/routes/ # Transfer, auth, webhooks, admin, usecases, billing
β βββ src/middleware/ # HMAC, rate limiting, API keys
β βββ src/utils/ # Fraud denylist (file + env + runtime)
β βββ sdk/ # TypeScript SDK with HMAC signing
βββ π website/ # Production website (Vite + vanilla JS)
βββ π scripts/ # Deploy scripts (single & multi-chain)
βββ π README.md # This file
βββ π 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
131 Hardhat + 32 API 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