Inspiration

Self-custody is the cornerstone of sovereign finance, yet it harbors a dark, unsolved anxiety: what happens to your Bitcoin if you become incapacitated or die?

Currently, the options are terrifyingly insecure:

Write it down on paper: High risk of theft, loss, or house fire. Trust a custodian or lawyer: Defeats the point of trustless self-custody and introduces expensive counterparty risks. Do nothing: The assets are permanently burned and lost to your loved ones forever. I was inspired to build DeadDrop Vault to solve this once and for all: a completely trustless, self-custodied, Bitcoin-native inheritance executor and emergency recovery tool that is mathematically guaranteed by on-chain smart contract execution.

What it does

DeadDrop Vault is a secure smart contract that manages on-chain assets on the Liquid Network under a three-path conditional spending model:

Path 1 — Normal Spend (Owner-Controlled): As long as the owner is active, they maintain full, absolute 1-of-1 control over their funds at any second. Transactions are signed using a standard BIP340 Schnorr signature. Path 2 — Deadman's Switch (Inheritance): If the owner stops interacting for a specified relative block duration (e.g., 2 blocks in our testnet demo, representing weeks or months in production), the vault decays programmatically. The designated Heir is then authorized to claim the assets via their own signature. Path 3 — Joint Recovery (Emergency): If the owner’s primary key is compromised, the owner and a trusted Guardian (who alone has no spending authority) can sign a joint 2-of-2 transaction to immediately bypass the timelock and sweep the funds to safety. All of this is accomplished native to the UTXO layer. There are no global states, no centralized multisig controllers, and no platform risks.

How I built it

I designed and validated the entire vault framework during this hackathon:

SimplicityHL Smart Contract: Written in Simplicity's high-level language, leveraging its unique functional tree architecture to construct isolated spend-path verification conditions, relative lock distances (jet::check_lock_distance), and Schnorr jet assertions (jet::bip_0340_verify). Rust Command Line Interface (CLI): Built a custom CLI engine to compile the contract parameters dynamically, derive hierarchical keypairs from a common seed, construct complex transaction witnesses, and handle transaction signing using Liquid Testnet specifications. Live Blockstream API Integration: Integrated the CLI directly with Blockstream’s Liquid Testnet API to query contract UTXOs and broadcast verified transactions to the network. Frosted Glass Web Dashboard: Created a gorgeous, mobile-responsive tech-noir dashboard in pure HTML/CSS/JS. It polls Liquid API endpoints every 15 seconds to display vault balances, current tip heights, and maps an active horizontal progress timeline showing the countdown blocks remaining until the timelock satisfies!

Challenges I ran into

Building a complex three-path contract on an emerging smart contract language meant breaking through several paradigms:

Thinking Functionally without traditional if blocks: SimplicityHL lacks dynamic execution branches or standard variable assignments. We had to learn to write pure, formally verifiable combinator graphs using nested pattern matching via match and structural product/sum types. Param/Witness Disconnect: Separating variables known at compile time (like the public keys and the timelock threshold in the param block) from values only known at spend time (like path selectors and signatures in the witness block) required precise coordination in our Rust compiler wrapper. BIP68 Relative Timelock Compliance: Getting the Rust CLI to correctly encode block heights into input sequence fields so that the Liquid consensus layer would accept relative timelocks was a major technical hurdle. I resolved this by manually injecting hex sequence structures matching the BIP68 specification into transaction inputs before signature generation.

Accomplishments that I am proud of

Full Testnet Validation: I successfully executed and broadcast transactions for every single spend path (Normal, Inheritance, and Emergency) on the Liquid Testnet! Bulletproof Timelock Enforcement: We demonstrated that attempting to claim inheritance before the timelock expiration is strictly blocked by the mempool, rejecting with RPC error -26: non-BIP68-final exactly as intended. Elegant Developer and User Experience: I turned highly technical, lower-level Simplicity code execution into a single copy-paste CLI utility and a gorgeous visual web interface.

What I learned

Formal Verification is the Future: Working with Simplicity taught me how I can guarantee mathematical security before a transaction is even sent. By knowing the exact execution bound of my contract, I eliminate the risk of unexpected infinite loops, reentrancy bugs, or locked-up funds. Jets are Cryptographic Magic: I learned how jets allow us to run complex computations like 256-bit Schnorr signature verifications at optimized hardware speeds without exploding gas or transaction costs.

What's next for DeadDrop Vault

Oracle-Driven Multi-Decay: Adding price oracle feeds to trigger automatic emergency withdrawals if collateral balances drop below liquidation margins. Taproot Integration: Upgrading the contract address wrapping to Taproot (P2TR), allowing the three spending paths to remain completely hidden inside a Script Tree on the blockchain, only revealing the specific path used during execution to ensure absolute user privacy.

Built With

Share this project:

Updates