Hi Max,

There a few DoS vectors that need to be fixed. Its just a proof of concept that 
I wanted to share with everyone to get feedback which could be improved over 
time. There is also a warning at the bottom of README to not use this on 
mainnet as it might have bugs.

I will continue the development with coinjoin transactions on signet for a few 
weeks until there is a stable release with no bugs. 

I have a few ideas in mind for various relay types that might be used 
concurrently to prevent numerous problems. Custom relays are supported by 
Nostr. Examples include paying a fee to register for a round, subscribing with 
a time limit, or using invite-only relays. I will run a free and open nostr 
relay for this project and try to fix the Dos issues before a mainnet version 
is released for python script(for nerds) and android app (for all users).

Related links: 

https://github.com/fiatjaf/relayer
https://github.com/fiatjaf/expensive-relay
https://github.com/fiatjaf/relayer/tree/master/whitelisted

/dev/fd0


Sent with Proton Mail secure email.

------- Original Message -------
On Saturday, August 20th, 2022 at 10:04 AM, Max Hillebrand 
<m...@towardsliberty.com> wrote:


> Great to see an implementation of the idea.
> 
> Maybe I misunderstand, but isn't there a vulnerability of denial of service 
> here?
> 
> A user who registers one input will receive the round secret identifier, and 
> this is all the information required for output registration. However, that 
> malicious user can now register multiple outputs, providing the same secret, 
> and nobody can link the malicious outputs to any specific input. Therefor 
> there cannot be a blame round where the malicious input is removed, and thus 
> there can be a ongoing free denial of service attack without attribution or 
> defense.
> 
> Skol
> Max
> 
> 
> On August 20, 2022 10:20:00 AM GMT+02:00, alicexbt via bitcoin-dev 
> <bitcoin-dev@lists.linuxfoundation.org> wrote:
> 
> > Hi Bitcoin Developers,
> > 
> > I have written a python script as proof of concept for the [coinjoin 
> > implementation][1] using [nostr][2]. I used a lot of Python scripts created 
> > by others in school, so it feels nice to offer something that could be 
> > useful to others.
> > 
> > The implementation uses Bitcoin Core wallet and RPCs: `listunspent`, 
> > `getnewaddress`, `scantxoutset`, `createpsbt`, `combinepsbt`, 
> > `finalizepsbt` and `sendrawtransaction`. It requires python-nostr library 
> > because nostr is used for coordination between peers. Nostr is a 
> > decentralized network based on cryptographic keypairs. It is not 
> > peer-to-peer however simple and scalable.
> > 
> > Every step is published as an event using a nostr relay and 5 peers 
> > coordinate to create, sign and broadcast a coinjoin transaction.  I need to 
> > write a NIP that would be an alternative to blind signatures. Relay will 
> > share a random secret with clients for one round which should be present in 
> > output registration request although never gets published. If someone tries 
> > to register an output without registering any inputs, request would not 
> > have the number initially shared with inputs so request would get rejected 
> > or published as unverified. Relay would not be able to link inputs and 
> > outputs as the number is same for all inputs in a round and they get 
> > registered at different times with new keys and IP address. Clients can use 
> > multiple relays at the same time to avoid trusting one relay. This would 
> > result in different shared secret number but same process. If a relay tries 
> > to cheat, users will not sign the transaction and avoid using it in future.
> > 
> > Usage:
> > 
> >  1)Run `python coinjoin.py` and enter descriptor for one of the inputs.
> >  2)Script will check inputs for this round in every 30 seconds and register 
> > a new adddress for output once 5 inputs are registered.
> >  3)Similar check happens every 30 seconds for outputs. Last peer should 
> > create a PSBT.
> >  4)Unsigned PSBT will be printed and signed by wallet with 
> > `walletprocesspsbt` RPC.
> >  5)Script will check signed PSBTs and last peer to sign should finalize 
> > coinjoin transaction once 5 signed PSBTs are received.
> >  6)Coinjoin transaction will be broadcasted and txid will printed.
> > 
> > Example:
> > 
> > ```
> > List of utxos in wallet:
> > 
> > wpkh([53830dca/84'/1'/0'/0/0]02449be5fb74725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5
> > 
> > Enter descriptor for the input registration: 
> > wpkh([53830dca/84'/1'/0'/0/0]02449be5fb74725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5
> > 
> > event id:  bcbbe62d75d99fed73f1e50ac58a38d1840b658951893e63c0322b378d7d56f0
> > 
> > ```
> > ```
> > tb1qhxrp4zl54ul0twtyz0gury5399q7z0kvqqrl6m registered for output
> > 
> > event id: 9449c9065bef356d21507a98f88b028b17fc1c49eb195c8d4420604fcaaef041
> > ```
> > ```
> > Unsigned PSBT: 
> > cHNidP8BAP1yAQIAAAAFtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOrRRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA/////zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfzcDwAQAAAAD/////wMa4XAgnU+39Ien+KG9rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42ID6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GNSM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz71uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPSZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAAABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAAAAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgAAAAAAAAAAAAAAAAAAAA==
> > 
> > event id: 976744b38fa9343fb79e1b5215512ead6ee08e5890d79a201fc5b872f6de4eba
> > ```
> > ```
> > Signed PSBT: 
> > cHNidP8BAP1yAQIAAAAFtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOrRRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA/////zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfzcDwAQAAAAD/////wMa4XAgnU+39Ien+KG9rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42ID6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GNSM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz71uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPSZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAAABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAAAAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgAAAAAAAQBxAgAAAAG+qpMXZCy6tBuUlgo8JD0GVXKp60FkhwDeg2sF1fkFkwMAAAAA/f///wLo9wEAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUWwMAAAAAAAAWABRfPf//hwMjHB4OKj87cU19XOSh7yOWAQABAR/o9wEAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUAQhrAkcwRAIgOIhLoC5348U8YkEr4GU1K4yWskIOEXgW4Wsk/W2cR7ICIEJXqtOuDJ5CkwrSuwJLWtzab4dslbN3KuL/pyooMnOCASECRJvl+3RyUlXu61DrqTD6h3BfIemdE81xDPLB8hFTyAgAAAAAACICA77Cnd6o3kr0yc+91eabpOn5igs/MUMbudNYSS6oyMWMGFODDcpUAACAAQAAgAAAAIAAAAAAFAAAAAAAAAAA
> > 
> > event id: 5846b6e6902f3c5a43496d7d9785ed62444aa74963f03c33d637d8b09ee7a139
> > ```
> > ```
> > Coinjoin tx: 
> > 75e490b10b15a6a0422f25ff66ad98ef70390c8fecaac02712705dce8cc3564b
> > 
> > event id: 9b5d4bf279b59e2b6e539e683fba83da72dce2b640360aa95db1b1400be93190
> > ```
> > 
> > There are lot of things that could be improved and a few suggestions are in 
> > the gist that described the [idea][3]. I would love read to any opinions 
> > about this experiment and will start working on creating an Android app for 
> > joinstr next week.
> > 
> > Credits:
> > 
> > - fiatjaf (Nostr)
> > - Andrew Chow (PSBT)
> > - Jeff Thibault (python-nostr)
> > - Existing coinjoin implmentations
> > 
> > [1]: https://github.com/1440000bytes/joinstr
> > [2]: https://github.com/nostr-protocol/nostr
> > [3]: https://gist.github.com/1440000bytes/1c305097b070c8374cc3b91f50314a45
> > 
> > /dev/fd0
> > 
> > Sent with Proton Mail secure email.
> > 
> > bitcoin-dev mailing list
> > bitcoin-dev@lists.linuxfoundation.org
> > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to