Lock your SOL in an on-chain vault for a set duration. When the timer expires, unlock and get it back. Built with Rails 8 and a custom Anchor program.
Unlocks in 3m 24s
Unlocks in 1m 08s
Ready to unlock
Unlock →Three steps. No accounts, no passwords, no custody.
Sign in with Phantom, Solflare, or any Solana wallet. No account needed.
Choose an amount and duration. Your SOL is stored in an on-chain program account.
Watch the countdown. When time is up, unlock and your SOL returns to your wallet.
Not a smart contract wrapper. A full-stack Rails app that talks to Solana.
SOL is locked in a program account with an expiration timestamp enforced by the Anchor program. Not custodial.
The solrengine-programs gem parses the Anchor IDL and generates Ruby models for on-chain accounts with Borsh encoding.
Each lock shows a real-time countdown with a progress bar. Know exactly when your SOL is ready to unlock.
Sign In With Solana — Ed25519 signature verification in Ruby. No passwords, no emails. Just your wallet.
Your SOL stays in a program-derived account on Solana. The app never holds your funds — only you can unlock.
Hotwire, Turbo, Stimulus, Tailwind 4, esbuild. No React. Server-side instruction building, client-side signing.
Parse IDL, read on-chain accounts, build instructions — all in Ruby.
class PiggyBank::Lock < Solrengine::Programs::Account
borsh_field :dst, "pubkey"
borsh_field :exp, "u64"
def expired?
exp < Time.now.to_i
end
def self.for_wallet(addr)
query(filters: [{ "memcmp" => { "offset" => 8, "bytes" => addr } }])
end
end
def build_lock
ix = PiggyBank::LockInstruction.new(
amt: amount_lamports,
exp: expiration,
payer: current_user.wallet_address,
dst: current_user.wallet_address,
lock: lock_address
)
render json: {
instruction_data: ix.to_instruction[:data],
program_id: PiggyBank::PROGRAM_ID,
blockhash: blockhash_data[:blockhash]
}
end
Open-source Ruby gems for building Solana dApps with Rails 8. Wallet auth, RPC, tokens, transactions, and program interaction out of the box.
$
bundle add solrengine