Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BOUNTY: Build Web UI #978

Closed
testthewatter opened this issue Aug 9, 2021 · 34 comments
Closed

BOUNTY: Build Web UI #978

testthewatter opened this issue Aug 9, 2021 · 34 comments

Comments

@testthewatter
Copy link

testthewatter commented Aug 9, 2021

I'd like to offer up a bounty for someone to build a Web UI. See below for bounty amount, currently over .4btc.

This enhancement will allow JoinMarket to be included as an application for the more user friendly node packages such as Umbrel. As these node deployments are used by many convicted, but less technical bitcoiners, this enhancement should, in theory, increase the market size for CJ yield generation & raise the floor of privacy preservation across the network.

@AdamISZ
Copy link
Member

AdamISZ commented Aug 9, 2021

There are two people actively working on an extension to #670, which distinct from the existing proof of concept repo https://github.com/Joinmarket-Org/jmcontrolcenter , is using react rather than Angular. That should appear on github shortly.

@testthewatter testthewatter changed the title Build Web UI BOUNTY: Build Web UI Aug 9, 2021
@grmkris
Copy link

grmkris commented Aug 9, 2021

If anyone wants to collaborate on this I am willing to tackle this bounty.
I have expirence with React so this would be my preffered technology to work on this.

@kristapsk
Copy link
Member

I could help with this, but guess first we need to wait on @AdamISZ mentioned extension to #670.

@pedromvpg
Copy link

Would be it helpful to work out a design a figma interactive prototype to discuss the interface and experience before committing to code?

@undeath
Copy link
Contributor

undeath commented Aug 10, 2021

Would be it helpful to work out a design

That's a fair question. UX is an area where joinmarket can definitely be improved.

Furthermore, defining a minimum feature set for the Web UI would be helpful, especially wrt bounties. I guess wallet and taker functionality is a must (basically what Qt can do right now). What about maker functionality?

@AdamISZ
Copy link
Member

AdamISZ commented Aug 10, 2021

Many points of reference may be helpful. First, w.r.t. the idea of a feature set, that's a great idea, if someone does that you might find the list 1-10 in this gist a useful starting point(?): https://gist.githubusercontent.com/AdamISZ/f062c7453c6973a8287897fe506b9d19/raw/0569de16cecf455fdf0fc2006c6c25e1e68cc1cd/API-Joinmarket

Second, #670, which implemented a rudimentary JSON-RPC API, but didn't yet have any session management, shouldn't be a blocker to anyone nor the existing repo https://github.com/Joinmarket-Org/jmcontrolcenter, in which there was a working implementiontation of unlock-view wallet-start and stop maker service and a couple other things. People can feel free to reuse them, build on them, ignore them, whatever works.

Third I want to shoutout at this point the "Summer of Bitcoin" participants @shobhitaa and @abhishek0405 who have started working on a new PoC implementation in React (they already have session management with JWT), using essentially the same backend as in #670. (I've been mentoring them). See https://github.com/shobhitaa/Joinmarket-SOB and https://github.com/abhishek0405/joinmarket-clientserver/tree/rpc-api-2 .

@AdamISZ
Copy link
Member

AdamISZ commented Aug 10, 2021

If anyone is interested in gory details, one thing that I think is tricky: implemented taker-side coinjoin (or indeed tumbler) seems a little bit trickier than any other feature to add, because of the server needing to "push" the outcome of the first round of communication with participants (the Taker callback filter_order_callback, which gets the client's acceptance of the join conditions). Websockets are one way to approach that, perhaps some other subscribe architecture, or perhaps something else.

On the more positive side, my original experiments suggest to me that pretty much everything else is not tricky (because the heavy lifting is already assumed to exist in the backend).

@AdamISZ
Copy link
Member

AdamISZ commented Aug 25, 2021

See #996

@modl21
Copy link

modl21 commented Sep 14, 2021

The Human Rights Foundation is providing an additional 25M sats to this bounty. We have setup a multisig address to hold bounty funds with myself, Ben Carman, and HRF holding a key.

https://blockstream.info/address/bc1q84n390t8eg70gxfnpz5kk7gg7njs7d95900hhd30ll28jw3q0h3sz2t3h3

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

bc1q84n390t8eg70gxfnpz5kk7gg7njs7d95900hhd30ll28jw3q0h3sz2t3h3 
-----BEGIN PGP SIGNATURE-----

iQG8BAEBCgAmHxxPREVMTCA8bWF0dG9kZWxsQHR1dGFub3RhLmNvbT4FAmE9CjYA
CgkQB68EUlnbYW0JMwv+LGqsI6ACOAWY6sTuBaTXY+pZKYF0HHWrTP/l2+KoRCvu
79d9l41BQk7giHu8xqyexNWf22gJWU1bHlWw9lxUWwchdaugkndduNYA8PC+27C1
2XDian69SAB5mt6dAwuy9qW2pgDdZKKlR5/sauj1wiHFsa5t7bV5obz+/nboa4nm
Av4KbzBPGgU7nCZeh3YuQXZxLFmFDc93pToL6F8gFlfIWXar/lAfRAsrCMALwMpV
bK3MKjNQDmAr8YGZjPLv/xi4XWu2js0EgAPN9bzokuGJtPvwhxvsE6BotbIYmHDH
liLTGLbWlU+Eb/N0bT8bEETtcm4A8FrIKiJ5x03WVLp8V6krYvasFeM5lGGlDrp3
mxhAwqGSmluD/vRpUaCzUcy3bBD4jEtXO1hcsltIrxtOwQwQ9PZ1QEQcZleM4ZbD
OP6NGxfSbjeTmuxxLVQ6jif3vEdjBkTI7VbAfsmgK031TszKbe+YYNjWJdXUfiRI
e+VbN+f7n3lfq7+tQtvA
=M2l8
-----END PGP SIGNATURE-----

@openoms
Copy link
Contributor

openoms commented Sep 14, 2021

[deleted as duplicate, see above]

@benthecarman
Copy link

benthecarman commented Sep 14, 2021

Here is my PGP signature of the address:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

bc1q84n390t8eg70gxfnpz5kk7gg7njs7d95900hhd30ll28jw3q0h3sz2t3h3
-----BEGIN PGP SIGNATURE-----

iQGzBAEBCgAdFiEECtg4d8HwzR7pvWYK18x3C4H9IqgFAmE9DDcACgkQ18x3C4H9
IqjVrgv6A37To/AkHJpSvUXqAc6nwpIGi+4hAS/ZXUyS+Yd/iTd0Xo41uVLyRglc
8rKK/AAOW+i5znjVG33rK79bPqwe9idRE2ir27z8byHH4Vr/Rce1Jikl8araMSBx
sXbzRSnxZYnFp4CFutRxFIM6+pMsMceaoJqYKhwbwzO7KI37LR3+IS9/y4aORpua
VaikPRld5gGbiu1I2wYIhuLBRMl+0o5b5CLP9ODVJpT/fUHETM+FtY+3vXvLd462
/Km5h8PggJLBCsgsNs9V9QbvBlAbtjPYUy9gn2KxjF++oRnOiUkhcT4fqqHjq9/l
ackaljcBHPgah/na2aCCGf7LjoxHVT/oQYoIHnXdpPSoY8X2D0zst0B1PZ1qDFXY
GHRpfFP7aWUxOb/Jtn03s/MLuoRdG2oHaOlU4xIcRE3bbq2xw2Kj4TGFMqt6X78L
xfCY0OWW7LzvmcyhtHxxhtotCBqwZlm7NlsSpLasq7KArrkefGPSj+NmYBqDGGDx
Xywdbj7W
=yJod
-----END PGP SIGNATURE-----

@testthewatter
Copy link
Author

Incredible. From those of us who have no clue how to build this: Thank you!

@modl21
Copy link

modl21 commented Sep 14, 2021

to be clear this is not an umbrel specific bounty, the result should be FOSS so other node projects can implement it as well

@modl21
Copy link

modl21 commented Sep 14, 2021

further clarification, result should have full functionality of joinmarket, including yield generation and payjoin

@GBKS
Copy link

GBKS commented Sep 15, 2021

Sounds very useful. I'd also recommend to flesh this out first in a design tool and then code, as @pedromvpg suggested.

@zndtoshi
Copy link

Aded 3M sat bounty. Small request if possible: would be awesome if the webserver would be accesible through TOR.
https://blockstream.info/search?q=13d227b795694583ccdf31ffd4589b6381be8fb39bee889161af7fff2b31b243

@AdamISZ
Copy link
Member

AdamISZ commented Sep 30, 2021

As of b527bbb there is a documented OpenAPI/swagger API definition and auto-generated docs for it (mentioning here in case anyone was thinking of starting work on a client).

@AdamISZ
Copy link
Member

AdamISZ commented Oct 10, 2021

Merged #996 which should provide what is needed for a client-side developer, as per above, see OpenAPI spec in this yaml file, and read this for a summary of what is provided and how to use it.

As you can see from the latter, this is giving all the basic wallet, taker and maker functions. There are a number of extra functions not yet implemented, but, walk before run etc. etc.

@nvk
Copy link

nvk commented Oct 18, 2021

Thank you.

@dergigi
Copy link

dergigi commented Oct 19, 2021

2.5m sats added to the bounty. If someone starts working on this please let me know, myself and another developer want to help.

@manasgandy
Copy link
Contributor

I'm trying a build a GUI for this but simple Python GET/POST requests is throwing 405 errors. Am I missing something silly?

@AdamISZ
Copy link
Member

AdamISZ commented Dec 7, 2021

Are you adding /api/v1 into the URLs? Can you give examples of the URLs you're sending to the backend? That's one of the most common ways you could end up with 405s.

@manasgandy
Copy link
Contributor

You're right, I was missing api/v1. API calls works now.

@manasgandy
Copy link
Contributor

manasgandy commented Dec 7, 2021

First working version of my GUI is ready: https://github.com/manasgandy/joinmarket-gui

It's built using Python Flask and Bootstrap and has the following features:

  • create wallet
  • unlock wallet
  • show total balance
  • deposit funds
  • create and fund fidelity bond
  • start maker with custom conjoin fees
  • stop maker
  • lock wallet

There's a lot of work left, but this minimal GUI can get you started with generating yield.

PS: Thanks for fixing the timelockaddress() API @AdamISZ

@dergigi
Copy link

dergigi commented Dec 8, 2021

Nice one @manasgandy!

FYI there are some people working on concepts and designs for the Web UI, as well as an implementation. For more information have a look at the JoinMarket Web UI Wiki.

The current plan is to build up on this prototype and package a first version of the Web UI for the RaspiBlitz, which is in the final testing phase now. See this PR: raspiblitz/raspiblitz#2747

It's an open group, so feel free to join us if you want to bounce around some ideas or combine forces! 😊

@manasgandy
Copy link
Contributor

Thanks @dergigi

  • I appreciate the design efforts in Figma. I might take use them with proper credits.
  • I plan to launch via myNode and Umbrel since that's what I use.
  • I would love to participate in the discussion but I don't like Telegram since it asks for a phone number.
  • I would definitely need help of the JoinMarket developers since the backend also needs a lot of work.

@dergigi
Copy link

dergigi commented Oct 18, 2022

Quick update: what started as the "JoinMarket Web UI" project above is now known as Jam and is live on Umbrel, Citadel, and Raspiblitz.

@editwentyone
Copy link

@modl21 and other supporter from the past

In behalf of, the still active, core team of JAM (Gigi is also part of) I would love to claim the blounty for the team so that we can discuss how to split or (hopefully) reinvest to develop further (as there is enough in the pipeline)

please get in touch with us or me

(hope it’s ok, first claim)

@benthecarman
Copy link

@editwentyone what is the best way to talk?

@editwentyone
Copy link

@benthecarman thanks, you can find me here:

nostr npub1llcej3uyrjzv2e6qruh72u5trxnk6lx963ksu0xs980n0leq230q2mjgwq
telegram @editwentyone
matrix @editwentyone:matrix.org

@editwentyone
Copy link

UPDATE: the team (@theborakompanioni, me and others) decided to donate the 0.5 BTC directly to www.opensats.org and we hope that @dergigi can pick this up and talk directly to @benthecarman and @modl21 but also Alex from HRF.

we hope that this money can be of good use :)

@modl21
Copy link

modl21 commented Sep 26, 2023

cheers, we will proceed with that

@theborakompanioni
Copy link
Contributor

Can this be closed? No more comments expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests