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

Fork electrum to zcash and enable shielded transactions #21

Open
johanssonlc opened this Issue May 14, 2018 · 29 comments

Comments

Projects
None yet
7 participants
@johanssonlc

johanssonlc commented May 14, 2018

Electrum is a great piece of software that would be valuable to the zcash community.

To start with, it would offer a lightweight alternative to the zcash full node which would allow desktop workstations with poor performance and bandwidth to have access to the network.

Second, it would add wallet functionality to zcash that other wallets are simply missing, like for example deterministic desktop wallet and connecting your hardware wallet to your desktop wallet. The latter is important for two reasons:

  1. You get an alternative implementation to the desktop clients of e.g. Ledger and Trezor which mitigates the risks associated with having only a single implementation
  2. With zcashd, an Electrum Server and Electrum client under your control to which you have connected your hardware wallet, you are not reliant on the third party transaction validation performed by e.g. Ledger and Trezor. What you get then is something very powerful. You get the trustlessness of running your own full node and the security of a hardware wallet.

What is needed in order to make all this happen then?

Step 1 - Transparent addresses and hardware wallet
In this step, the electrum client is simply forked to support zcash. The Electrum (X) Server should already support zcash transparent addresses, so this step should be quite low complexity.

Step 2 - Shielded addresses
In this step, the Electrum client and Electrum X Server needs to be extended to support shielded addresses. This is potentially quite high complexity.

All-in-all I think the two steps could be accomplished in five months at a monthly rate of at least $2000, i.e. in total $10000.

EDIT: Old proposal description below (no longer applicable)

Zcash involves concepts that are complex to the extent that it might discourage junior developers to contribute. Luckily there is a great way of doing hands-on software development contributions that with low complexity leverages of hundreds to thousands of hours of design and implementation work that can be put to good use in the zcash ecosystem at relatively low cost / effort. In the process this thing that I am talking about also provides good introductary training for the people involved.

I am of course talking about forking software projects from other communities to zcash. There are many open source projects in cryptocurrency communities such as bitcoin, zclassic, zencash, decred etc that could be put to good use if ever rewritten to work with zcash

So what are the potential gains here?

  1. The zcash community gains more software alternatives and in the process 2) the active community developers get training to so that they at a later stage can do even more advanced contributions to the ecosystem.

Unfortunately, that does not always complete the equation. The developers have to give time that they instead might have used to make a living. To reduce that cost for the developer, you could incentivize development by rewarding the developer with cryptocurrency of the sort that the developer is contributing to - zcash - which further incentivizes the developer.

I have created two projects so far that I have placed in a repo ( https://github.com/zcash-community/ ) for the purpose mentioned above:

  1. Zcash Full-Node Desktop Wallet (https://github.com/zcash-community/zcash-full-node-wallet)
    This project is a fully functioning wallet which has been forked from Ivan Vaklinov's Zencash wallet

  2. ZEC Electrum (https://github.com/zcash-community/electrum-zec)
    This project is a fork of the light client electrum which offers great wallet functionality at low performance requirements. Currently this project is yet to have its first release since I with full time job and family life have not managed to find all the time needed to complete it.

First and foremost these two projects needs to be completed and then maintained - either by me or someone else or both. I would be happy to surrender the control of the source code and the funds if deemed necessary for e.g. separation of concerns - but, with that said, I would also be happy keeping the control.

Prior to this grant proposal I have received two anonymous donations to the address t1ZuuZYVKCsTA9iPJT4WgmQgHJrqHpjxU3E for the purpose of funding the development of the two existing projects. I have not touched the funds yet and like with the grant funds I would also be happy to surrender the control of these two donations if deemed necessary.

More donations from the Zcash Foundation would be put to good use in these two projects and future projects that the community perhaps could have a say in. More funding would enable me and/or someone else to spend a larger portion of our days working in the zcash community's service.__

@johanssonlc johanssonlc changed the title from Build community developer competence by forking software projects from other communities to zcash to Building community developer competence and gaining more software alternatives by forking projects May 14, 2018

@mineZcash

This comment has been minimized.

mineZcash commented May 20, 2018

These are both good projects, I know that David Mercer has used Vaklinovs GUI in WinZEC. https://winzec.com

I would personally like to see work that moves beyond that severely outdated GUI. It was a good start but it's still hard to update without a complete rebuild.

I do like the idea of a nice Electrum wallet for Zcash (especially if it supports private transactions!) Have you seen the BTCP fork of Electrum? https://github.com/BTCPrivate/electrum-btcp/releases/

A updated version that supports private transactions would be of use to many of the Zcash forks.

Edit- there is also a wallet from ZenCash that is interesting https://github.com/zencashio/eleos/

It would be great to have something that could be merged with Zcash core since the developers are busy with the back end, there is no development of better GUIs.

I don't care who we fork it from ;)

@johanssonlc

This comment has been minimized.

johanssonlc commented May 22, 2018

Yeah, there are some great projects that are low hanging fruit. The current electrum client fork that I am working on is actually forked from the BTCP project, so I am aiming to complete that fork by just retracing their steps initially. Then adding shielded transactions to that is a bit more tricky but it is the ultimate goal.

I have glanced at Eleos as well previously and it seems to be a great wallet. The Eleos UI is nicer than the Swing wallet but the it was more work so I focused on Vaklinov's wallet since he himself did not support it for Zcash anymore.

Regardless, my point is we can with relatively low effort accomplish a lot by leveraging existing projects.

PS. Also, I have noticed that I accidentally named my repo very similar to your community page zcashcommunity.com which has caused some confusion for people thinking the repo and the web page are interlinked. Apologies for that. Might make sense to collaborate to some extent, if you would be interested in that DS.

@b-g-goodell

This comment has been minimized.

b-g-goodell commented May 22, 2018

Can you elaborate on details for this pre-proposal? Will you be the lead on this project, and if not you, who? How much funding are you requesting, how will funds be distributed?

@johanssonlc

This comment has been minimized.

johanssonlc commented May 24, 2018

I am the natural lead for the umbrella project since I have initiated the work. All I am trying to say is that I want the project to be bigger than me. I don't want to be seen as the owner or rights-holder of these subprojects but instead more of a custodian of projects that are a joint responsibility of the community. Any donations received should be directly channeled to developers or similar active contributors in a transparent manner.

I guess it would be somewhat like the zcash foundation it-self but only focused on development of FOSS forks and with active continuous involvement in the subprojects. Instead of giving away large chunks for big projects, there would be price on issue / pull request level. Micro level as opposed to Zcash foundation's macro level.

The level of funding determines the level of ambition along with the number of unrenumerated contributors. If there were five unrenumerated contributors like me, then development would progress at a fair pace without funding. If only me, then I would need some renumeration so that I could spend less time on my dayjob. Funding would also potentially attract freelancing developers that are outside of the zcash community.

I see the umbrella project as a continuous project that could initially survive on $1500 per month without progress halting to a stop. These funds would be channelled to development of the subprojects and in some cases infrastructure (e.g. electrum requires an internet location where the client can download a header file).

@amiller

This comment has been minimized.

amiller commented May 24, 2018

This is a cool proposal. I think this would make sense as a program where you can lead by coordinating the projects and try to match-make between proposed projects and contributors looking for something to participate in. Since this is in particular meant to appeal to junior developers, maybe we could also try to connect contributors with mentors/reviewers? It would be neat to amortize some of the communication and organization, for example hosting a weekly / monthly status meeting or dev hangout for developers in this program.

@tromer

This comment has been minimized.

Collaborator

tromer commented May 25, 2018

@johanssonlc, I suggest making this proposal more concrete by breaking it up into specific projects for the individual forks. You can file a separate issue for each, to facilitate focused discussion, budgeting, evaluation and prioritization.

If there is a need for an umbrella project and resources for it, beyond those required by the specific forks, then you can make this case here.

(Regarding filing the new issues: the pre-proposal deadline has passed, but speaking as the review committee chair, I'm fine with accepting these as spin-offs of the pre-proposal that was already filed before the deadline.)

@tromer tromer added the wallet label May 25, 2018

@johanssonlc

This comment has been minimized.

johanssonlc commented May 25, 2018

@tromer Ok, I can actually narrow this one down to be quite explicit and change the description, if necessary. I have two zcash projects where one is ~done so there is really only the "electrum for zcash" project that needs financing. Would there be an interest to add new projects when the electrum project is done, then they will have to be funded through separate grant applications. Does that sound ok? If so, I'll rewrite this one

@tromer

This comment has been minimized.

Collaborator

tromer commented May 25, 2018

@johanssonlc, that sounds great, please go ahead (ASAP, so we can get the Electrum-specific discussion going).

About future projects, there will be another grant round in 2018Q4, and if you're ready for the next project well before that, then other funding mechanisms may also be available.

@tromer tromer added the info-needed label May 25, 2018

@johanssonlc johanssonlc changed the title from Building community developer competence and gaining more software alternatives by forking projects to Fork electrum to zcash and enable shielded transactions May 27, 2018

@johanssonlc

This comment has been minimized.

johanssonlc commented May 29, 2018

I have now updated the information. Do you feel there is anything missing?

@tromer tromer added ux and removed info-needed labels May 29, 2018

@tromer

This comment has been minimized.

Collaborator

tromer commented May 30, 2018

Have you considered adding Zcash support to Copay, instead? It supports all major desktop and mobile wallets, and I'm told that Copay's UX is much better than Electrum's.

In any case, are you proposing to do the development work yourself? If so, can you tell us about your pertinent dev experience?

@mineZcash

This comment has been minimized.

mineZcash commented May 30, 2018

I do like the idea of having more desktop wallets that support Z-addresses, and a Electrum fork is a step towards that but the GUI isn't much better than the Vaklinov GUI.

The Copay GUI is one of the nicest ones I have seen, and it's open-source MIT licensed: https://github.com/bitpay/copay

As far as development goes ( like Tromer mentioned) can you give a bit more details about the team you plan to use? Would you be willing to team up/enlist help to have a high likely hood of a successful project?

Depending on team and experience we can recommend funds to ensure the success of this kind of project.

@johanssonlc

This comment has been minimized.

johanssonlc commented May 31, 2018

The UI of Copay seems nice but it does not seem to support hardware wallets, which makes it uninteresting to me. A good looking UI is nice but I think security comes first. It seems to have other security features as well but still...

The team consists of me at the moment. I would like to team up with others. I work as a lead developer of a risk system at a bank. Work there with java but also lots of python scripting. Before that I have worked with a python-based trading system for banks in Switzerland and the middle east

@tromer

This comment has been minimized.

Collaborator

tromer commented Jun 1, 2018

The Zcash Foundation Grant Review committee has reviewed your pre-proposal, including the above discussion, to evaluate its potential and competitiveness relative to other proposals. Every pre-proposal was evaluated by at least 3 (and typically more than 4) committee members .

The committee's opinion is that your pre-proposal is a promising candidate funding in this round, and the committee therefore invites you to submit a full proposal.
Please submit a full proposal by June 15th, following the detailed structure described in the Call for Proposals. We encourage you to submit a draft as early as possible, to allow for community feedback.

@tromer tromer added the invited-full label Jun 1, 2018

@johanssonlc

This comment has been minimized.

johanssonlc commented Jun 15, 2018

Attached is a last second full proposal attached.
electrum-for-zcash.pdf

@tromer

This comment has been minimized.

Collaborator

tromer commented Jun 26, 2018

Shielded transaction support for light wallets will require new cryptographic protocols and their implementation in supporting libraries. It is not yet clear when these will be available.

I suggest to cut down this proposal to just t-address support at this time. Once the requisite protocols and libraries for lightweight shielded wallets are available, the project can be resumed, whether in the next grant program or by dedicated funding.

@johanssonlc, is this acceptable? What would be your budget for just the t-address stage?

@tromer tromer added the info-needed label Jun 26, 2018

@johanssonlc

This comment has been minimized.

johanssonlc commented Jun 26, 2018

My understanding was that light wallet support would be available quite soon, but sure. I estimate t-account support to require $2.000 out of those $10.000

@sonyamann

This comment has been minimized.

Collaborator

sonyamann commented Nov 6, 2018

I'm thrilled to inform you that the Grant Review Committee and the Zcash Foundation Board of Directors have approved your proposal, pending a final compliance review. Congratulations, and thank you for the excellent submission!

Next steps: Please email josh@z.cash.foundation from an email address that will be a suitable point of contact going forward. We plan to proceed with disbursements following a final confirmation that your grant is within the strictures of our 501(c)(3) status, and that our payment to you will comply with the relevant United States regulations.

We also wish to remind you of the requirement for monthly progress updates to the Foundation’s general mailing list, as noted in the call for proposals.

Before the end of this week, the Zcash Foundation plans to publish a blog post announcing grant winners to the public at large, including a lightly edited version of the Grant Review Committee’s comments on your project. The verbatim original text of the comments can be found below.

Congratulations again!

Grant Review Committee comments:

Electrum is a popular Bitcoin wallet and was one of the first to have a basic GUI. It does not have the most attractive interface but the code is believed to be solid and can serve as a base for other wallet applications to be build upon it. Having a Electrum version for Zcash would be good for the ecosystem and potentially serve as a tool for other wallet builders. The proposer is Mikael Johansson who proposed to be able to complete the basic transparent address integration within a "few weeks" while requesting up to 5 months (at a rate of $2000.00) per month for private address integration. The review committee felt that since Sapling is so close and the spec is not quite ready that this proposal could move forward with funding for transparent address support only and funding for one month of the developers time.

We recommend funding this proposal, at a reduced level of $2,000 for the reduced scope.

@johanssonlc

This comment has been minimized.

johanssonlc commented Nov 6, 2018

Great! Thank you very much

@sonyamann

This comment has been minimized.

Collaborator

sonyamann commented Nov 10, 2018

Question from Reddit: "Will it support the ledger hardware wallet like the original electrum does?"

@mms710

This comment has been minimized.

mms710 commented Nov 19, 2018

@johanssonlc Hi! I'd love to help provide any engineering support you might need from the engineers at Zcash Company. Would you be interested in getting a more regular line of communication set up between you and Zcash Company engineers so you can ask questions or get help? If so, would you be okay using a Rocketchat channel or do you have another preferred method of communication?

@johanssonlc

This comment has been minimized.

johanssonlc commented Nov 19, 2018

@mms710 Rocketchat is perfect. Thanks!

@mms710

This comment has been minimized.

mms710 commented Nov 19, 2018

@johanssonlc Great! Please feel free to ping me (@mms) in the #zcash-dev channel in Rocketchat anytime and I'll make sure to find you answers/help if you need it!

@mms710

This comment has been minimized.

mms710 commented Nov 19, 2018

@johanssonlc sorry for the confusion, actually our preferred method of communication would be for you to email ecosystem@z.cash so that we can help answer any questions you might have. Would that work for you?

@johanssonlc

This comment has been minimized.

johanssonlc commented Nov 19, 2018

@mms710 no worries. Should I do any progress reporting at some frequency to this e-mail? weekly, bi-weekly or similar?

@mms710

This comment has been minimized.

mms710 commented Nov 19, 2018

@johanssonlc Blah sorry I'm causing way too much confusion today - I clearly need to work slower. I misunderstood a request internally and so my initial instinct was correct. Please feel free to just reach out to me via Rocketchat (#zcash-dev) if you need any help. You do not need to provide status updates of any kind; I just want to make sure we're here in case you need help. That being said, if you'd like to ping me with status updates that's totally cool too; it's up to you and I don't want to put any unneeded extra work on your plate!

@johanssonlc

This comment has been minimized.

johanssonlc commented Nov 19, 2018

@mms710 i would like to do some sort of progress reporting to ensure it is a focused effort. I'll send a status update every friday starting in december. Until then I'm busy moving to a new house

@sonyamann

This comment has been minimized.

Collaborator

sonyamann commented Nov 19, 2018

A point of clarification: The Foundation still wants monthly progress reports sent to our general mailing list. You're welcome to share them with the Company as well but it's not necessary.

(That may have already been clear, but just in case.)

@johanssonlc

This comment has been minimized.

johanssonlc commented Nov 21, 2018

Thank you @sonyamann , good that you told me. I seem to have missed that. Would you mind giving me the specifics of that reporting, like when and the format and also the e-mail address?

@sonyamann

This comment has been minimized.

Collaborator

sonyamann commented Nov 21, 2018

No problem! Here's the mailing list: https://lists.z.cash.foundation/mailman/listinfo/general

The email address is general@lists.z.cash.foundation. We haven't established a specific format, so an informal summary of what you've been working on is fine. Bullet points, brief paragraphs, whatever.

Near the end of the month is a natural time to send updates. Starting in December, I'll ping all the grant winners with a reminder around the 25th of each month.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment