Securd is a decentralized lending protocol deployed on XRPL EVM (chain ID 1440000). Users supply assets to earn interest and borrow against their collateral. All interaction happens from the XRPL Ledger using any XRPL wallet (Xaman, Crossmark, GemWallet, or WalletConnect) — no EVM wallet is ever required. Cross-chain communication is handled by Axelar GMP and ITS.
XRPL Ledger (user)
│
│ XRPL Payment with Axelar memo
│ (signed via XRPL Connect — Xaman / Crossmark / Gem / WC)
▼
Axelar Network
│
│ GMP relay (borrow / withdraw)
│ ITS transfer (supply / repay)
▼
BridgeAdapter.sol ──► XRPLUserProxy.sol ──► Lending core
(per XRPL account, (Comptroller,
CREATE2 deterministic) cToken markets,
SecurdPriceOracle)
Each XRPL address gets a deterministic proxy contract on XRPL EVM (salt = keccak256(utf8(xrplAddress)) via CREATE2). All on-chain positions belong to that proxy. Users never need an EVM private key.
| Layer | Technology |
|---|---|
| Smart contracts | Solidity — lending core + Axelar adapters |
| XRPL EVM reads | viem publicClient (chain ID 1440000) |
| XRPL wallet | XRPL Connect (Xaman, Crossmark, GemWallet, WalletConnect) via xrpl-connect |
| Cross-chain bridge | Axelar GMP (enter/exit collateral, borrow/withdraw) + ITS (supply/repay) |
| Frontend | Next.js 14 App Router, Tailwind CSS, Zustand |
| Tx tracking | Axelarscan GMP API |
| Contract | Address |
|---|---|
| Comptroller | 0x46d364257112230022E72b086Df85a6b0f8D3F86 |
| SecurdPriceOracle | 0x517475AFaFfaE71491d9Bad598E07AAFD050Ca80 |
| XRPLUserProxyFactory | 0xB7f3ECe856063F48BC3bcC7A381aE875841663aA |
| BridgeAdapter | 0x7AC8Df85448037c6fE1eD5732c6ca71060069237 |
| sXRP (cToken) | 0x6ec503Ad093B8b8B74AD9168Acb3f547C79f0318 |
| XRPL Axelar Gateway | rNrjh1KGZk2jBR3wPfAQnoidtFFYQKbQn2 |
- XRPL EVM Explorer: https://explorer.testnet.xrplevm.org
- Axelarscan: https://testnet.axelarscan.io
- Node.js 18+
- An XRPL testnet account funded via the XRPL Faucet
- An EVM private key registered as the intent signer in the BridgeAdapter
npm installcp .env.local.example .env.localEdit .env.local:
# EVM private key of the intent signer registered in BridgeAdapter.
# On testnet this is the deployer key.
DEPLOYER_PRIVATE_KEY=0x<your-evm-private-key>
# WalletConnect project ID (used by the WalletConnect adapter)
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=<your-project-id>
# Optional — Xaman/Xumm API key for the Xaman adapter
NEXT_PUBLIC_XUMM_API_KEY=<your-xumm-api-key>npm run devOpen http://localhost:3000, connect any supported XRPL wallet, and navigate to Markets.
app/
markets/ # Main lending UI (supply, borrow, market detail)
api/
sign-intent/ # Server-side intent signing (private key never reaches browser)
components/
layout/ # Header, navigation
markets/ # All lending UI components
lib/
constants/ # Chain config, contract ABIs, market registry
data/ # Zustand store (markets[], userAccount)
helpers/ # Formatting and math (market.helpers.ts)
hooks/ # useMarketsData, useUserData, useXrplBalance
types/ # TypeScript types (market.types.ts, enums.ts)
utils/ # Proxy address derivation (xrplProxy.ts)
xrpl/ # Intent builder, XRPL payment builder, Axelar status
- DEPLOYMENT.md — step-by-step guide to run, test, and deploy the dapp
- ARCHITECTURE.md — full technical deep-dive
- CONTRIBUTING.md — adding markets, local development guide