Signing PSBTs for "proof of reserves" BIP127
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 8.6k
- Forks
- 3.5k
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 61
Description
It would be cool, if Electrum could sign BIP127 "proof of reserves" PSBTs that were produced externally for an Electrum wallet.
Here is the story:
https://ulrichard.ch/blog/?p=2587
and
https://ulrichard.ch/blog/index.php/2021/12/10/proof-of-reserves/
Essentially, I'm trying to sign the following PSBT:
cHNidP8BANABAAAABMErBiXTxwDcvvvq771RVgP1SYJh3scx0WBImDi7rvmsAAAAAAD/////fpjOaPHeO8iuqOAAXNYTHduKraGwzE2T6uyQKv/xMiUAAAAAAP////+PIkY8icgEgelHPdjKJ5IhDDRuUpEz0MPJDo3DQjfXhwEAAAAA//////7fKpENlBvDb0Sk/pIj4asvxgJZeAl+c7QitalQiCs8AAAAAAD/////AYk6AwAAAAAAGXapFJ9/0JbTftLA4/fwz8kkvu9P/OtoiKwAAAAAAAEBCgAAAAAAAAAAAVEBBwAAAQEr2YwBAAAAAAAiACA0+1ZWhppfL2hexzK/hNEDRcsqMYpj2eygJvctc04rRiICA85usXGOxyWoB2tjhap+sMe5WMQylChyoIyPQw7YwOWYSDBFAiEAhX/LdNf2yZEB0PNIGJVIJLGp2XYnc8iZHS+0Fb8plLwCIDXlhRegpeS6T5Pvs1zBcmOAh7bpnV2UePcs3Njn+FW+AQEFR1IhA85usXGOxyWoB2tjhap+sMe5WMQylChyoIyPQw7YwOWYIQP91mGneajoVZMtGRkFWvx2ZGUYvEEA6X8IfZK8g8r8slKuIgYDzm6xcY7HJagHa2OFqn6wx7lYxDKUKHKgjI9DDtjA5ZgMXJ6u1wAAAAABAAAAIgYD/dZhp3mo6FWTLRkZBVr8dmRlGLxBAOl/CH2SvIPK/LIM9/UCiwAAAAABAAAAAAEBKxAnAAAAAAAAIgAg0akE2gMCFP1o4HslEN0ysMFhG0q2Y74tPzXhjtUSxU4iAgL6ZTC3eAZapDHPGJ2NyXB4eo7srM6X2c3zbj09qV98AUcwRAIgFHZJzHZrXUeXxxRQtiPrM0Ays6fq1Z+rIHHsQSIjOiICID5SN2tjMSlmiO7nNz3LMKRtHoLwJcv6mGU+/LhJGBTXAQEFR1IhAugJEDOoQ6+rqj7YlxPlMPumDknI/5BHw6QEDGtBVWZoIQL6ZTC3eAZapDHPGJ2NyXB4eo7srM6X2c3zbj09qV98AVKuIgYC6AkQM6hDr6uqPtiXE+Uw+6YOScj/kEfDpAQMa0FVZmgM9/UCiwAAAAAAAAAAIgYC+mUwt3gGWqQxzxidjclweHqO7KzOl9nN8249PalffAEMXJ6u1wAAAAAAAAAAAAEBK6CGAQAAAAAAIgAg++9Wlf87jJ5jDHvPj8fVofJ+/SOcaGpEaLAEJD068pIiAgK9OsDWjXhF2nZ0y1pgMJhdcAlmSzG3Bd1U40ONUA+/7EcwRAIgQGAgXVcwm2X9H5s0q9W9WUNhfwIilld+ldETrlYFx/sCIEhvT+/pE4cM0xGKJk4G7d2E/Zn5YfTtD3Ojf50qbONPAQEFR1IhAr06wNaNeEXadnTLWmAwmF1wCWZLMbcF3VTjQ41QD7/sIQNzF2pZRGQFPkASin8Ll0vqni2CK5T56jLut+XRIeq0dVKuIgYCvTrA1o14Rdp2dMtaYDCYXXAJZksxtwXdVONDjVAPv+wMXJ6u1wAAAAACAAAAIgYDcxdqWURkBT5AEop/C5dL6p4tgiuU+eoy7rfl0SHqtHUM9/UCiwAAAAACAAAAAAA=
for the following wallet:
{
"addr_history": {
"tb1q0v3yu6rxuvd90ur0g6hx69dhlemjdqz7fgzly8hzhwpp7kntg0dsfa0964": [],
"tb1q36kysjh3mv6sgc5amzmysn3neqr230f0qjrfx8ersfkqhcf6z33ss04lp9": [],
"tb1q53qxdzdxmnkuckg9lv7mk8djgq2nqkjgku5vlmg73y8an80k4f5qn9hr05": []
},
"addresses": {
"change": [
"tb1q7s26yhh8hmq2t6r8wa7ckpjhcugkhjshnw5hsg0m9u82kmmy5zrqdm2qc2",
"tb1qewjj5nzrfj9fc73k392sr6pgeeyfvfy3vrxtczr4pyjwpzhez7eqtypafe",
"tb1q36kysjh3mv6sgc5amzmysn3neqr230f0qjrfx8ersfkqhcf6z33ss04lp9"
],
"receiving": [
"tb1q6x5sfksrqg20668q0vj3phfjkrqkzx62ke3mutflxhsca4gjc48qgeusmx",
"tb1qxna4v45xnf0j76z7cuetlpx3qdzuk2333f3anm9qymmj6u6w9drq4zzqm2",
"tb1ql0h4d90l8wxfuccv008cl37458e8alfrn35x53rgkqzzg0f672fqms35mw"
]
},
"channel_backups": {},
"fiat_value": {},
"invoices": {},
"labels": {},
"payment_requests": {},
"prevouts_by_scripthash": {},
"seed_version": 33,
"spent_outpoints": {},
"transactions": {},
"tx_fees": {},
"txi": {},
"txo": {},
"use_encryption": false,
"verified_tx3": {},
"wallet_type": "2of2",
"x1/": {
"derivation": "m/1'",
"pw_hash_version": 1,
"root_fingerprint": "f6083804",
"seed": "maximum assume mention girl puppy stereo river tourist gossip level panda life",
"type": "bip32",
"xprv": "Vprv1AEubNnoCJHpVL2TLDscvM6bEC7Q4ZxqkrdhxCHFb6EJtADGoSkb9cXt9tTFYqgEVSJGhM96eZmwK1G88SW2Zg1LayXACst8XFYSgS8dK8b",
"xpub": "Vpub5gvwjnq3LfyVNo4FDsYDKkkhoDdLDu9kLAEVEiKZ1N2hieU3RqaBL79kL2wP5YNj2aL9Bbe5bFXm2BFbpStm5ixxo8SKQrCBK5DxSrJhq7k"
},
"x2/": {
"derivation": "m/1'",
"pw_hash_version": 1,
"root_fingerprint": "b88448fb",
"type": "bip32",
"xprv": null,
"xpub": "Vpub5gUii5ZKgrJs2sZfyHrKFrKdZqmek7iLGoX3jmREfdMscpyaDPLAcYm1mED7PexvD4JQPMJL3AGtMewxSjFhcUX64fKFR2bgLXAY7xPgJaX"
}
}
Or even better this PSBT:
cHNidP8BANABAAAABMErBiXTxwDcvvvq771RVgP1SYJh3scx0WBImDi7rvmsAAAAAAD/////R2T53Je0wwuCC4sB4y303f5x1sXi67Sbt5GHyNJYSL8BAAAAAP////+hyKIxvTPJ++2fJ9IP+0veP366E6M3+d5ndrRywC+CdQAAAAAA/////85xD7HXF5RHqDqqrmbkuSHlVkWpGr8AQkxbX0GeWMLMAQAAAAD/////ARY4AwAAAAAAGXapFJ9/0JbTftLA4/fwz8kkvu9P/OtoiKwAAAAAAAEBCgAAAAAAAAAAAVEBBwAAAQEroIYBAAAAAAAiACA/WR3mqmBSknWlsU4tF2FirFI49AnBJ/RF3Y8MOVvj6QEFR1IhAjzWg4H+LS0DMvvpzPOBG82hnO3F2EH1ij0DfnUjXwzeIQK4J7EzNMFN5ZpMS9nZLqkSInlZWY+fv9RtNaePd/ZN7FKuIgYCPNaDgf4tLQMy++nM84EbzaGc7cXYQfWKPQN+dSNfDN4Mw7inHwAAAAADAAAAIgYCuCexMzTBTeWaTEvZ2S6pEiJ5WVmPn7/UbTWnj3f2TewMRyCUewAAAAADAAAAAAEBK2aKAQAAAAAAIgAgyuBYb4qmZ5NOo9az+sc19GSGVUza3boreImwW0wqdvMBBUdSIQIj9OEMidD0v63giswaS/zatG5LqLt/jqwauILs+Ne57CECvQAhlTCAChOhr3dosTr3S3sVmD/ogjLDtuXgi4VihPFSriIGAiP04QyJ0PS/reCKzBpL/Nq0bkuou3+OrBq4guz417nsDMO4px8AAAAAAgAAACIGAr0AIZUwgAoToa93aLE690t7FZg/6IIyw7bl4IuFYoTxDEcglHsAAAAAAgAAAAABASsQJwAAAAAAACIAIPrEeWr/BapLkLBg2LsEzljOP3I90GNzv8xyvl5bM7xEAQVHUiECSDumk7HdO7lTOGMBO/B5bxsj8qp/L2f3QJzzNL+WtsMhA++dVhrt7uwufhjJcNk1+Nh1w4ipjbjCnWzfcHwJSkSCUq4iBgJIO6aTsd07uVM4YwE78HlvGyPyqn8vZ/dAnPM0v5a2wwxHIJR7AAAAAAEAAAAiBgPvnVYa7e7sLn4YyXDZNfjYdcOIqY24wp1s33B8CUpEggzDuKcfAAAAAAEAAAAAAA==
for the wallet:
{
"addr_history": {
"tb1q4dhcva207vq225ljqfht0xr3ydfmcjj9mcnn9rqc322fpndehhqq9d596z": [],
"tb1q4n590s3wlqtsz4g6jzmfc8whn0fvun3vmjzpuj5740gr56jfjy2qpglrkv": [],
"tb1q6cdpn4d373nnkvn682s37dsyhvy3y6lksdqpuzr9k3ch72mxmhzsa8ed32": []
},
"addresses": {
"change": [
"tb1qwvcpet99frsw8v6rkuymw969uwrc9vs5dpy04ru8f45xl8s6u3kq96tt6m",
"tb1qg2cdtu7c860qgm894l65m4drzpvhskmvsx8cr6h7c72gmmeys6aqvj8cya",
"tb1q6cdpn4d373nnkvn682s37dsyhvy3y6lksdqpuzr9k3ch72mxmhzsa8ed32"
],
"receiving": [
"tb1q4n590s3wlqtsz4g6jzmfc8whn0fvun3vmjzpuj5740gr56jfjy2qpglrkv",
"tb1qltz8j6hlqk4yhy9svrvtkpxwtr8r7u3a6p3h807vw2l9ukenh3zql3lyr5",
"tb1qets9smu25enexn4r66el43e473jgv42vmtwm52mc3xc9knp2wmes48skss"
]
},
"channel_backups": {},
"fiat_value": {},
"invoices": {},
"labels": {},
"payment_requests": {},
"prevouts_by_scripthash": {},
"seed_version": 33,
"spent_outpoints": {},
"transactions": {},
"tx_fees": {},
"txi": {},
"txo": {},
"use_encryption": false,
"verified_tx3": {},
"wallet_type": "2of2",
"x1/": {
"derivation": "m/48'/1'/0'/2'",
"hw_type": "bitbox02",
"label": "bb2 (27d81095)",
"root_fingerprint": "27d81095",
"soft_device_id": "27d81095",
"type": "hardware",
"xpub": "Vpub5mUs4UNPA6T3VAmcTWTJ2nCV2oAEFQqBNQQDH62NQNpdAMSyL2Nd3vZXF6uQfNeiCst7asUapZWM9AKmsYCK1BjUrEVhiVm9M4qnbHvDRDe"
},
"x2/": {
"derivation": "m/48'/100'/0'/2'",
"hw_type": "trezor",
"label": "T-Rex",
"root_fingerprint": "6bfac2d6",
"soft_device_id": "EE735C3D13E9A60902B42A02",
"type": "hardware",
"xpub": "Vpub5mTgvNLEMssnVd4fezZgnDhLefVaYCb94GsjHfgrhXksbrHRbMa2AwjWX9eczB1dG19oZmEnVNCeVLWoygXQrkL8nuyAgWDxnePWUQ5fE3N"
}
}
Of course, it would be cool, if Electrum had full support for BIP127 proof of reserves, but being able to sign would be a good first step.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Read BIP127 and the two linked proof-of-reserves explanations, then reproduce the supplied PSBT signing request in Electrum. Trace Electrum's existing PSBT signing entry point and determine what BIP127 handling is missing. Done means externally produced BIP127 PSBTs can be signed for supported Electrum wallets, with the supplied examples serving as validation cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cryptography, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100