YouPI-PG
자체 호스팅 UPI·COD 결제 게이트웨이, 거래당 플랫폼 수수료 0
XMR을 wsXMR로 교환, BNB Chain·Base·Robinhood Chain에서 원자형 발행·소각으로 200% 이상 초과 담보 지원
Exchange XMR for wsXMR backed by >200% overcollateralization through atomic mints and burns on BNB Chain, Base, and Robinhood Chain.
금융JavaScript · SolidityGitHub @madschristensen99온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Wrapsynth is bringing Monero's anonymity set to DeFi and DeFi liquidity to Monero
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A trustless cross-chain ferry for Monero. wsXMR deploys per-chain on BNB Chain (QQQB collateral), Base (cbBTC), and Robinhood Chain (SPY), backed by overcollateralized LP vaults and Ed25519 atomic swap commitments — one interface, pick your chain.
WrapSynth brings Monero's anonymity set to DeFi and DeFi liquidity to Monero. Users swap XMR for wsXMR through atomic-swap mechanics enforced on-chain: LPs post collateral (the collateral asset is per-deployment — see Roadmap), mint/burn settlement is gated by Ed25519 secret reveals verified on-chain, and timeout-based slashing protects both sides. No custodian, no federation, no trusted intermediary — every swap settles peer-to-peer between a user and an LP vault. Each chain runs an independent wsXMR deployment; there is no bridging between them.
solana/)Deployed at block 128040249. All contracts verified on BscScan; deployer powers permanently locked (deployerOperationsLocked / hubLocked verified on-chain).
| Contract | Address |
|---|---|
| wsXMR Token | 0x9B8d1851bCc06ac265c1c1ACaBD0F71E69DD312c |
| wsXmrHub | 0x15bb9ba8236De055090a262F45a7e213F6040320 |
| Liquidity Router | 0x1034259f355566fcE4571F792d239a99BBa1b9b4 |
| StataQQQB (collateral share token) | 0xd821A7D919e007b6b39925f672f1219dB4865Fba |
| wsXMR/QQQB PancakeSwap V3 Pool (0.05%) | 0x9711698489150C9Fbc377C7d5aBC735D6198A845 |
| Facet | Address |
|---|---|
| BnbOracleFacet | 0xb694120Ecdc69fbbEe3Ae21831d7B76ab8a9169B |
| VaultFacet | 0x6ABAEB70c9BA9EA497Ff5e20D08bd20Ca1E02139 |
| MintFacet | 0xb6251797386a8C5a2a4A8783f430Ef2ED5c63BeF |
| BurnFacet | 0xCE92E887d225D06c21a16d845D88E980d536FA2b |
| LiquidationFacet | 0xd6Ee29f9ae035aDB0f2741228eD55F0fC6dBb6c2 |
| BnbYieldFacet | 0xD1f77F73Ca47a726875D884cc45EFf289f6176E3 |
| CoLPFacet | 0x8e3EF1e28262E351EB066374df1bEd36CC704dDA |
Machine-readable manifest: frontend/deployment.bnb.json · ethereum/deployments/bnb-deployment.json
Deployed at block 52775153. All contracts verified on BaseScan; deployer powers permanently locked. Exercised end-to-end on mainnet: mint → burn round-trip, co-LP open + unwind (position 6297447 left live seeding the pool), and swaps through Uniswap SwapRouter02. Collateral is cbBTC; the vault is funded and active.
| Contract | Address |
|---|---|
| wsXMR Token | 0x9E50B436901A573DC4f0676150B282135f0C0623 |
| wsXmrHub | 0xF22f1550829E1413f1bc538Be419071728DD53b8 |
| Liquidity Router | 0x53E46B60D79d33D031A0e222029A382146d5a15F |
| StataCbBTC (collateral share token) | 0x64f05A6c0E19Fe7Ae76Ca88740D63EA069A5CA28 |
| wsXMR/cbBTC Uniswap V3 Pool (0.05%) | 0xEac27935Dc31AF9215822505174404c38c5A3FEc |
| Ed25519Helper | 0xA1b9115450c3e3dCAD11c04Cf9Bf4092335B3A64 |
| SwapHelper | 0x313166bb40927D94e969c51Af227bc22F30df6D2 |
| Facet | Address |
|---|---|
| BaseOracleFacet | 0x147F829Fa732811A0f54E50310eCB71218B4511a |
| VaultFacet | 0x97166ED3478759199442BFc6570F386884b4917B |
| MintFacet | 0xBfCDA75903920cDe32F0B17eD1a57974Bab4bc66 |
| BurnFacet | 0xAa32790EF174Db5457AdF7c268fEa4Bc527eB140 |
| LiquidationFacet | 0x7c7BD2D57Db2C08F39d3050fabC002593183fF69 |
| YieldFacet | 0xF1fBBb13004410dCA48360872004870B6C85a214 |
| CoLPFacet | 0xA6b4F4Ea557e2f7F2f23F32EDA9D17aB7F48dd49 |
Machine-readable manifest: frontend/deployment.base.json · ethereum/deployments/base-deployment.json
Prior beta deployment on Gnosis Chain (ChainID 100) is preserved in
frontend/deployment.gnosis.json.
All protocol state and collateral live in a single contract, wsXmrHub, which dispatches calls to stateless logic facets via a selector → facet table:
wsXmrStorage), holds all collateral, and is the only address authorized to mint/burn wsXMR ┌────────────────────────────┐
│ wsXmrHub │
│ state · collateral · token │
│ selector → facet dispatch │
└──────────┬─────────────────┘
┌──────────┬─────────┬──┴──────┬───────────┬──────────┬─────────┐
VaultFacet MintFacet BurnFacet Liquidation YieldFacet OracleFacet CoLPFacet
(LP vaults) (XMR→wsXMR)(wsXMR→XMR) Facet (per-chain) (RedStone + TWAP) (co-LP)
scalarMultBase(secret) and checks it against the user's commitment, binding settlement to the same key material used on the Monero sideStata* share adapter; YieldFacet harvests and accounts for vault yieldwsXMRLiquidityRouter deploys vault collateral as V3 concentrated liquidity (PancakeSwap on BNB, Uniswap on Base/Robinhood) paired against user-supplied wsXMR, putting backing capital to work instead of letting it sit idleethereum/lp-node/, Rust) — monitors events, manages Monero RPC, prices quotes, runs arbitrage, and exposes a REST API for the frontendinitiateMint — user posts a claim commitment (Ed25519 point) and griefing deposit; the LP vault's capacity is reservedsetMintReady — LP confirms XMR receipt on-chainrevealSecret + finalizeMint — user reveals the secret scalar; the contract verifies scalarMultBase(secret) matches the commitment, then anyone calls finalizeMint to mint wsXMR and refund the depositrequestBurn — user locks wsXMR and posts a hash commitment with their Monero destination; LP collateral is reserved against the burn and a deadline startsconfirmMoneroLock — LP signals the XMR payment is underwayfinalizeBurn settles with the secret reveal, burning the wsXMR and releasing the LP's collateralabortBurn — clean unwind before settlement, returning wsXMR to the userforceSettleBurn / claimSlashedCollateral — if the LP misses the deadline, the user seizes collateral at oracle price; bad outcomes hit the responsible vault, not the systemThe protocol has been through two rounds of security review, with all critical and high-severity findings resolved and locked in by regression tests (AuditRegressionTest.t.sol). Notable findings fixed:
requestBurn / abortBurn / forceSettleBurn state machine to remove griefing and stuck-funds pathswsXMR.replaceHub(), wsXmrHub.addSelectors() / removeSelectors()) that could repoint the
token at an arbitrary minter or add/brick facet routes at any time after launch. Both are now
closed by a one-way lockHub() / lockDeployer() pair that the deployment script calls as
its final step, so the admin key is permanently powerless once setup completes.| Power | Holder | Reachable after lockDeployer() / lockHub() |
|---|---|---|
registerFacets | hub deployer | ❌ no (and already one-time) |
addFacet (non-core facets e.g. CoLPFacet) | hub deployer | ❌ no |
addSelectors / removeSelectors | hub deployer | ❌ no |
setLiquidityRouter | hub deployer | ❌ no |
setPriceUpdater (oracle) | hub deployer | ❌ no |
wsXMR.replaceHub / setHub | token _deployer | ❌ no |
updatePrices | priceUpdater only | ✅ yes (required for oracle liveness) |
✅ Every deployment executes lockHub() / lockDeployer() as its final step — the
deployer key can no longer repoint the minter or alter facet routes. Verified on-chain at
deploy time (hubLocked() == true, deployerOperationsLocked() == true).
BurnSolvencyInvariantTest.t.sol — 633-line Foundry invariant suite asserting system solvency across randomized mint/burn/liquidation sequencesE2EFullCycle, E2EComprehensive, E2EAdvancedScenarios) plus Hardhat unit suites per facettest/)⚠️ This is early-stage protocol software. Reviews to date do not eliminate risk:
setMintReady) or release a user's XMR from the shared 2-of-2 address (by revealing lpSecret). After a mint timeout the LP has LP_CLAIM_WINDOW_BLOCKS (~1 hour at the deployment's block time) to reveal; a live LP always will — it earns the parked griefing deposit and loses nothing. If the LP is unresponsive past the window, the key bond is slashed to the user (reclaimParkedDeposit / sweepUnclaimedExpiredMint). This means an LP outage longer than the window forfeits the bond even for mints where the user never sent XMR — the chain cannot distinguish a real deposit from a phantom oneNode.js v18+, Foundry, Rust (for the LP node), Hardhat (via npm).
git clone https://github.com/madschristensen99/wrapsynth.git
cd wrapsynth/ethereum
npm install
cp .env.example .env # add PRIVATE_KEY and per-chain RPC URLs (BNB_RPC_URL, BASE_RPC_URL, ROBINHOOD_RPC_URL)
# Compile + test
npx hardhat compile
npm test # Hardhat suites
forge test # Foundry invariant + E2E suites
cd ethereum/lp-node
cargo build --release
cargo run --release -- --config config.toml
cd solana/anchor-program
anchor build && anchor test
wrapsynth/
├── ethereum/
│ ├── contracts/
│ │ ├── core/ # wsXmrHub, wsXmrStorage
│ │ ├── facets/ # Vault, Mint, Burn, Liquidation, Yield, Oracle
│ │ ├── router/ # wsXMRLiquidityRouter (co-LP V3)
│ │ ├── Ed25519.sol # On-chain Ed25519 scalar mult
│ │ └── wsXMR.sol # ERC-20 (8 decimals, matching XMR)
│ ├── test/ # Foundry invariant/E2E + Hardhat suites
│ └── lp-node/ # Rust LP node (events, Monero RPC, quotes, API)
├── solana/anchor-program/ # Solana port (Anchor)
├── frontend/ # Web app
└── docs/ # Sequence diagrams, seed storage design
The strategy is parallel collateral experiments across chains — deploy everywhere, let the market decide which venues get traction. Each deployment pairs wsXMR with a different collateral asset, spanning the censorship-resistance spectrum from native gas tokens to issuer-custodied tokenized equities.
| Chain | Collateral | Collateral type | Status |
|---|---|---|---|
| BNB Chain | QQQB (bStocks tokenized Nasdaq) | Tokenized equity | ✅ Live — deployed, verified, end-to-end tested on mainnet |
| Base | cbBTC (Coinbase Wrapped BTC) | Custodial wrapped asset | ✅ Live — deployed, verified, end-to-end tested on mainnet |
| Robinhood Chain | SPY (Robinhood tokenized S&P 500) | Tokenized equity | ✅ Live — deployed, verified, end-to-end tested on mainnet |
| Solana | Native SOL | Maximal censorship resistance — no issuer | 🔄 In development |
| HyperEVM | sUSDe (HyperLend) | Yield-bearing stablecoin | ⛔ Deprecated — removed from repo |
| Gnosis | sDAI | Yield-bearing stablecoin | ⛔ Beta (superseded) |
The oracle model minimizes external dependencies: XMR/USD comes from RedStone signed calldata, and collateral prices are computed fully on-chain from V3 TWAP pools — no second oracle provider per deployment.
Experimental protocol software provided "as is." It has undergone security review but not formal third-party audit certification or formal verification. The developers assume no liability for losses. Interact at your own risk.
If you find WrapSynth useful, consider supporting the project:
XMR: 83PvXnBHDNmN4TtRdKXMr4Vq1uHerTthZDRjrTG4hMUyeLSd7pNYwM31eCmDdX9D3F61FsdA2XvTmT92eQzqWFwR9CJ4gb8
MIT
Built with ❤️ for privacy and decentralization