Hey @steve.b welcome to the forum, this is quite an old project that was awarded a grant in 2018 completed back in 2019:
But doesn’t seem to have been kept up to date. If it’s something you would be interested/able to work on and get working with upcoming NU5 Halo (this month) I’m sure the Zcash Community Grants Committee would consider supporting updating it: https://zcashcommunitygrants.org/
I wouldn’t worry about trying to turn it around before NU5, Halo introduces new address types (UAs) and many other improvements so the code will probably need significant revision to be compatible.
That said, if it’s brought up to date, it could be a good foundation for others for work/fork from and support Zcash in thier wallets.
One thing I see as generating a lot of interest would be supporting a plugin architecture running on the electrum server. To generate maximal interest, I would like plugins to be any license a person or organization chooses; be it MIT, GPL, or proprietary.
Was just reading the discussions on BOSL (this being the original one: BOSL or MIT - Orchard - #29 by fireice_uk) If the electrum port of the server for ZEC’s stake chain is governed by BOSL, would that requirement also have to extend to plugins? Logic tells me no, but…
[I understand the reason for the BOSL (though I might have suggested a grace period of 2 years instead of one…)]
The plugins would have to be run in a separate server process, as a separate suite of REST, and/or websocket or graphql endpoints. While this would introduce additional processor memory space overhead when run on the same server, or network latency when run as a cluster, it could allow for greater resources to be marshalled on the electrum server when the plugins are run on their own dedicated server…
Edit: Just to be clear, I am referring to shielded addresses. ElectrumZ used to support Zcash but transparent addresses only. Since this grant specifically refers to NU5+HALO, it seems to target Orchard shielded addresses.
Yes, I am aware of that. I have a proposal to extend the electrum command set to support passage of the keys necessary to interpret addresses; in all other respects, the command set is downlevel compatible with btc. It could be run against the bitcoin blockchain to support operation with btc; but using the extension arguments and the server has a toggle to indicate it’s running against the zcash blockchain, it acts the same way.
That’s why I am leveraging off the Electrum PERSONAL Server codebase (as opposed to, say, ElectrumX…); you wouldn’t want to be sending keys up to a shared server. Also: Electrum Personal Server supports pruning; that would be essential for a private node. And it would permit the interoperation with a node being run in pruned mode as the zcash blockchain grows (what can I say? I’m optimistic…)
The strategy of having an electrum server that supports both btc and zec:
It assists with regression testing. If it doesn’t work for btc, you know the same codebase can’t work for zec.
It provides an easier on-ramp to zcash for bitcoin developers who are familiar with electrum
Using existing electrum wallet code, it’s easier to derive a “wallet plugin” for zcash (that’s a follow-on step once the server is tested out…) The electrum wallet has ~100,000 lines of code -that’s a wheel I would rather not completely reinvent.
Incidentally: I have already modified Electrum Personal Server to support multiple connections (something the standard Personal Server does not do yet…)
A nice thing about a zcash grant (for the zcash grants committee) is they don’t have to pay until you deliver a working product…
Please bear in mind that users would compromise their privacy if they send their viewing keys to the server. Also from a technical perspective, scanning server side for every user would induce a hefty load.
It’s a personal server; private, down the road run alongside a wallet on the same machine instance. It could point to a shared node living elsewhere, or a dedicated node running on the same device. But the personal server does not send keys to the node; a wallet sends keys to the dedicated personal server.
Think of it as a microservice…
PS Wallets should be run on dedicated devices; if I were to do an installer (i.e., I get the grant…), I would require an acknowledgement to be made that that is understood…
No; the Personal server can talk to a remote node via SSL (you could configure stunnel…)
But if you like autonomy, full nodes are nice. And as I pointed out: you can always run one alongside pruned, thanks to Personal Server supporting that.
If the node is going to support wallet calls -then yeah; you would need that the node run alongside the wallet. But no big since you can run it pruned. [Personal Server leverages off a node’s wallet; a wallet must be enabled on the node…]
My installer plans to manage setup of three components:
a zcash node
an Electrum Personal Server that interoperates with that node
a “plugin server” that can host microservices that can access the Personal Server; this could host a wallet plugin (a subsequent proposal…); a SQL blockchain ingester; or whatever you like…
The interesting thing about the plugin server is that it will honor execution of each microservice plugin by means of forked sockets (each plugin running in its own process…) This permits a GPL3, MIT, or other licensed plugin to access the ElectrumZ server while still honoring the constraints of a GPL3 license (which BOSL licenses convert to…) So people get motivated to write plugins for the ElectrumZ server (which adds utility to the zcash ecosystem and fosters its growth…)
If the installer sees you want to run a wallet, it does set up a dedicated node of yours on the same machine for you (so in that case, you get your own node, run pruned if you like -it will ask…)