<oembed><type>rich</type><version>1.0</version><title>Billy Tetrud [ARCHIVE] wrote</title><author_name>Billy Tetrud [ARCHIVE] (npub1xq…tcnns)</author_name><author_url>https://yabu.me/npub1xqcwcttsyk0a64d63crrwsxp88pa42np37rw87hrfn4uku78g2aqltcnns</author_url><provider_name>njump</provider_name><provider_url>https://yabu.me</provider_url><html>📅 Original date posted:2023-01-23&#xA;🗒️ Summary of this message: A simple way to create a wallet vault without requiring key deletion is to create an N-of-N multisig address and pre-sign transactions from it with N-1 keys.&#xA;📝 Original message:In the discussion around James&#39; OP_VAULT proposal, it was implied that&#xA;precomputed vaults must use ephemeral keys that must be deleted as part of&#xA;the vaulting protocol, like Bryan Bishop&#39;s proposal&#xA;&lt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-August/017229.html&gt;.&#xA;Looking around, I haven&#39;t been able to find any wallet vault proposal that&#xA;doesn&#39;t require ephemeral keys, so at the risk of posting something that&#39;s&#xA;obvious to everyone, I wanted to share a simple way to do a wallet vault&#xA;without requiring any key deletion.&#xA;&#xA;The basic idea is to create an N-of-N multisig address, and pre-sign some&#xA;transactions from it with N-1 keys to an address with several timelocked&#xA;spend paths. This has the fallback that funds can always be spent&#xA;immediately if you use all the keys, just like a normal N-of-N multisig&#xA;address (since that&#39;s what it is at its core), but the usage of any of the&#xA;pre-signed transactions leads to an address that guarantees a clawback&#xA;within a time window. Here&#39;s a 3-of-3 example:&#xA;&#xA;*Vault Initialization*:&#xA;1. Create 3 of 3 Vault Address&#xA;2. Create an Interim Address that can send with:&#xA; * 1 of 3 keys after a timelock of 1 month&#xA; * 2 of 3 keys after a timelock of 1 week&#xA; * 3 of 3 keys with no timelock&#xA;&#xA;*Vaulting*:&#xA;1. Create a transaction sending an output to the Vault Address&#xA;2. Create a transaction spending that Vault Address output to the Interim&#xA;Address&#xA;3. Presign one copy of the step-2 transaction for each of the three&#xA;combinations of two keys.&#xA;4. Store seeds separately, store the wallet config as well as the three&#xA;presigned transactions with each seed.&#xA;&#xA;*Unvaulting*:&#xA;1. Sign one of the pre-signed transactions with the missing signature.&#xA;2. Broadcast&#xA;3. Wait the appropriate timelock for the number of keys you want to sign&#xA;with.&#xA;4. Create a transaction sending from the Interim Address.&#xA;5. Broadcast&#xA;&#xA;*Recovering *(after unvaulting step 2 after the broadcasted transaction to&#xA;the Interim Address has been mined):&#xA;1. Sign the utxo with all three keys to any destination. Alternatively sign&#xA;with two keys, wait 1 week.&#xA;2. Broadcast it&#xA;&#xA;This has the usual downsides of pre-signed vaults that you need to backup&#xA;these transactions for each vaulting, complications involving the&#xA;flexibility (or lack thereof) of fees, and inflexibility in how much to&#xA;unvault (must be the whole utxo, no change). This could of course be&#xA;augmented with various techniques to make fee handling more flexible&#xA;(anchor outputs, multiple versions of the presigned transactions with&#xA;different fees, etc). More complicated presigning schemes could allow for&#xA;some flexibility in unvaulting amount (eg by sending change back into the&#xA;vault, and creating additional pre-signed transactions for that new output).&#xA;&#xA;It also has the same downside that OP_CTV vaults have, where a stolen key&#xA;can steal funds from the interim address by racing the owner with their own&#xA;transaction once the necessary delay has passed. Note that James&#39; OP_VAULT&#xA;opcode wouldn&#39;t have this problem.&#xA;&#xA;But not requiring any toxic waste keys seems like a pretty good benefit&#xA;over Bryan Bishop&#39;s original proposal.&#xA;&#xA;Anyways sorry if this was already on people&#39;s radar and just too obvious to&#xA;post about.&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230123/eb519e3d/attachment.html&gt;</html></oembed>