<oembed><type>rich</type><version>1.0</version><author_name>npub1xqcwcttsyk0a64d63crrwsxp88pa42np37rw87hrfn4uku78g2aqltcnns</author_name><author_url>https://nostr.ae/npub1xqcwcttsyk0a64d63crrwsxp88pa42np37rw87hrfn4uku78g2aqltcnns</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2021-07-05&#xA;📝 Original message:I had the idea recently for proof of reserves&#xA;&lt;https://niccarter.info/proof-of-reserves/&gt; done in a way that can be used&#xA;to verify reserves are sufficient on an ongoing basis. I&#39;m curious if there&#xA;are any current approaches out there to proof of reserves that are similar.&#xA;&#xA;The idea is to have users create actual private keys using a seed in pretty&#xA;much the normal way. Users would generate a public key from this seed to&#xA;represent their account, and would give the public key to the custodian to&#xA;represent their account in a public record of account balances.&#xA;&#xA;When a user&#39;s account is credited, the custodian would update a map of&#xA;addresses (created from the public key of each account) to balances - this&#xA;map could be structured into a merkle tree in the usual &#34;merkle approach&#34;.&#xA;The custodian would also store funds on one or more HD wallets (each with&#xA;many addresses) and create a proof that they own each HD wallet. The proof&#xA;could be as simple as a single signature created with the xpub for the&#xA;wallet, which would be sufficient for proving ownership over the whole&#xA;list/tree of addresses.&#xA;&#xA;These two structures (the map and the HD wallet) would be combined and&#xA;hashed, and the hash published in an on chain transaction (possibly along&#xA;with a URI where the full data can be found), on something like a daily&#xA;basis. Software for each user could continuously validate that their&#xA;account has a balance that matches what it&#39;s supposed to have, and could&#xA;also verify that owned addresses have funds that have at least as many&#xA;coins as promised to accounts. If these things aren&#39;t verifiable (either&#xA;because the balances total to more than the HD wallet contains, or because&#xA;of data unavailability), people can raise hell about it.&#xA;&#xA;To give user&#39;s additional proving ability, a receipt system could be added.&#xA;Users could request a receipt for any balance update. Eg the user would&#xA;create a message with a timestamp, their custodial &#34;address&#34;, and the new&#xA;balance. The user would sign this receipt and send it to the custodian, who&#xA;would also sign it and send it back. This way, if something goes wrong, a&#xA;user can use this signed receipt to show that the custodian did in fact&#xA;promise a new updated balance at a particular time (which would cover the&#xA;case that the custodian records the wrong value in their map). Conversely,&#xA;the receipt would be useful to honest custodians as well, since they could&#xA;show the user&#39;s signed receipt request in the case a user is trying to lie&#xA;about what balance they should have. There is still the case that the&#xA;custodian simply refuses to return a signed receipt, in which case the&#xA;user&#39;s only recourse is to yell about it immediately and demand a receipt&#xA;or a refund.&#xA;&#xA;Why record it on chain? Doing that gives a clear record of proof of&#xA;reserves that can be verified later by anyone in the future. It prevents a&#xA;custodian from being able to change history when it suits them (by creating&#xA;a new records with false timestamps in the past). Many of these records&#xA;could be aggregated together and recorded in the same transaction (with a&#xA;single hash), so a single transaction per day could record the records of&#xA;all participating custodians. If all custodians are using a standard&#xA;system, one can cross verify that addresses claimed by one custodian aren&#39;t&#xA;also claimed by another custodian.&#xA;&#xA;Even tho the user is responsible for their keys in order to properly&#xA;verify, losing the keys isn&#39;t that big of a deal, since they could simply&#xA;create a new seed and give a new public key to the custodian - who would&#xA;have other identifying information they could use to validate that they own&#xA;the account. So it places less responsibility on the user, while still&#xA;introducing people, in a light-weight way, to self custody of keys.&#xA;&#xA;Having a record like this every day would reduce the possibility of&#xA;shenanigans like taking a short term loan of a large amount of&#xA;cryptocurrency. Sure, they could take a 10 minute loan once per day, but it&#xA;would also be possible to trace on-chain transactions so you could tell if&#xA;such a thing was going on. I wonder if there would be some way to include&#xA;the ability to prove balances held on the lightning network, but I suspect&#xA;that isn&#39;t generally possible.&#xA;&#xA;In any case, I&#39;m curious what people think of this kind of thing, and if&#xA;systems with similar properties are already out there.&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210705/fc1967cb/attachment.html&gt;</html></oembed>