Lend and borrow on Aave with nothing but a Solana wallet.
Your Solana wallet owns an address on Base Sepolia. Deposit ETH into Aave V3 and borrow USDC against it, one Phantom approval each. No bridge, no ETH to hold, no second wallet. A Solana program commits the exact transaction and verifies the signature on-chain before anything is broadcast.
Connect your Solana wallet
Phantom on devnet. This wallet is the owner — the Ethereum address in the next step is derived from its public key, and only it can request a signature for that address.
Derive your Ethereum address
Compute the Base Sepolia address that your Solana wallet owns. The soda program derives the same value on-chain from whoever signs, so the caller can never name an address it does not control.
Loading the committee key…
Send ETH on Base Sepolia
One Phantom approval. The Solana program commits the exact EVM transaction, the committee signs it, and secp256k1_recover checks the signature on-chain before it is broadcast. Gas is topped up automatically from the sponsor key.
The simplest possible action: move ETH from the derived address to any address you choose. No contract, no calldata, 21,000 gas.
Enter a recipient address.
Deposit into Aave V3 on Base Sepolia
Supplies 0.0001 ETH. The derived address receives aWETH — a lending position held by a Solana account, earning interest from the next block.
Borrow USDC against the deposit
Borrows 0.10 USDC at the variable rate against the aWETH collateral. Only the position's owner can do this, and the derived address ends up holding an asset it never had.
- Solana: sign_eth_transfereth_demo program · Solana devnetYour wallet is the only human approval in the whole run
- SigRequested emittedsoda program · SigRequest PDAThe request is now a fact on Solana, not a message to a server
- The committee signssoda-mpc-coordinator → soda-mpc-node-p1 + p2Two nodes, one signature, neither holds the key
- Solana: finalize_signaturesoda program · secp256k1_recover syscallThe chain checks the signature before the foreign chain ever sees it
- Broadcast to Base Sepoliasoda-relayer · eth_sendRawTransactionAssembled from the signature the chain recorded, not the one we computed