jeffro256: part-time dev work 2022Q3
What
I propose to spend 20 hours a week for 3 months working on Monero Core and the Monero GUI. Here are some areas, in tentative order of descending importance/specificity, that I'd work on:
- Work with @selsta to protect GUI users in "simple mode" by implementing a trusted community node system
- Create a RPC SSL connection integrity indicator for the CLI and GUI wallets
- Allow GUI users more fine-grained control of their SSL connections
- Create a more thorough UI for warning users of GUI mode of high fees
- Draft a formal Levin/Cryptonote protocol specification
- Revamp Doxygen documentation
- Do other general documentation of the codebase
- Transition legacy OpenSSL code to comply with OpenSSL 3.0 (already started)
- Explore using faster & smaller EC OpenSSL certificates in place of traditional RSA certificates
- Continue to remove dead code, and simplify codebase, especially the (epee module)[https://github.com/monero-project/monero/pull/8211]
- Misc developing / reviews
Who
I have always been fascinated with cryptography and digital privacy, so learning about Monero during the altcoin boom of 2017 was eye-opening and exciting. Soon enough, supporting Monero became a no-brainer for someone who is passionate about digital privacy.
I got my first PR merged on March 18th, and you can see the rest of them here: https://github.com/monero-project/monero/pulls?q=is%3Apr+is%3Amerged+author%3Ajeffro256. So far I have been doing it as a hobby, but I would love to spend more time on this project than I currently am, as I am rather busy with schoolwork and my job. As this is my first CCS proposal, I am very open to criticism and questions, so don't be afraid to ask! I will do my best to respond in the comments below.
Why
Trusted community node system and high fees (1 & 4)
As can be seen in this issue, among others, there appear to be malicious node(s) which advertise themselves as public nodes, allow users using the GUI wallet in "simple node" to connect, and respond with insanely high fees. This issue runs even deeper, and this exploit can be used to deanonymize GUI users to a certain degree in simple mode when they send transactions. There's no replacement for running your own node (and double-checking your fee amounts), but for those who choose not to, they should be able to expect at a minimum to not have their funds stolen from them.
RPC connection integrity indicator and fine-grained SSL control (2 & 3)
Getting SSL right is difficult and nuanced. You can verify with system certificates, user-supplied certificates, accept any connection as long as it is secured, or any combination of these options. You can have certificates which sign other certificates. As it stands, the way the GUI wallet secures connections is not ideal. It more or less accepts any connection, using SSL if its available, but for no specific ccertificate, and there is not a way to specify how to connect with SSL (unlike in the CLI wallet). I want to afford the users two things: the ability to quickly asses the quality of their connections to their nodes via an elegant UI element, and the ability to tweak their SSL settings if so desired.
Levin/Cryptonote Specification (5)
Unclear protocols cause bugs and choke out emerging projects which wish to incorporate into the ecosystem. Here are a couple recent PRs to fix bugs with the p2p/relay code:
- https://github.com/monero-project/monero/pull/8330
- https://github.com/monero-project/monero/pull/8326
- https://github.com/monero-project/monero/pull/8324
While it would be quite a feat to document ALL of the cryptonote protocol, it could be helpful to more thoroughly document the Levin protocol commands and the expectations surrounding the calls (interface, relay rules, ban criteria, etc). The p2p protocol of Monero is useful not only for nodes, but also for wallets and light wallet servers, especially when using untrusted connections. This was already started in this document, but could certainly be fleshed out.
OpenSSL 3.0 Compatibility (8)
It's always a nice thing to have your code compile on all your targets. In newer versions of OpenSSL, they have deprecated a large portion of the API, much of which we rely on to secure connections in Monero, particularly RPC.
EC OpenSSL certificates (9)
Currently, we use RSA certificates for RPC SSL, but EC certificates are smaller and thus faster. This could offer speed improvements while syncing, etc. @hyc suggested the idea while I was working on moving certain parts of the codebase to OpenSSL 3.0: https://github.com/monero-project/monero/pull/8335.
Nice-to-haves (6, 7, 10, 11)
All of these points do not directly affect the end-user experience but will ultimately improve the developer experience, reducing friction in the future, contributing to the long-term health of the codebase.
Funding
- Wage: 30 USD/hr
- Hours: 12 weeks x 20 hours/week = 240 hours
- Total pay in USD: 240 hours x 30 USD/hr = $7200 USD
- Exchange rate: $116.41 USD/XMR. Calculated from one week simple average of closing prices on coinmarketcap.com
- 24 June: $126.47
- 23 June: $122.70
- 22 June: $111.18
- 21 June: $118.80
- 20 June: $117.30
- 19 June: $114.22
- 18 June: $104.18
- Total pay in XMR: $7200 USD / $116.41 USD/XMR = 61.85 XMR
Expiration Date 1 August, 2022
Merge request reports
Activity
"as I am rather busy with schoolwork and my job"
Can you honestly commit to 30 hours a week for 3 months?
edit: i'm not a coder
edit: my opinion on the technical merit of this proposal is irrelevant, but what i can say is selsta will benefit from help, and i will wait for the devs to provide opinions on this proposal, and that jeff seems like a nice guy who has contributed to monero already :)Edited by plowsofI think @plowsof makes a valid point- maybe just clarify that the hours will be achieved regardless of whether or not they're in the 3 month timeframe.
Beyond that, watching the dev chat, I think you're doing a great job, you have a great attitude, and it's refreshing to see someone attempting to clean up and improve the existing codebase.
I look forward to funding this CCS and encouraging others to do so as well.
Good luck!
-Gramps
@plowsof @RealCryptoGrampy Thanks for taking the time to look at this proposal, it really means a lot! I should clarify what I meant by the sentence "as I am rather busy with schoolwork and my job". Currently, I have to work at my part-time job to meet some of my day-to-day expenses. The combination of both school and work means I can't spend as much time on Monero as I would like, but the funding, if provided, would allow me to tune down my hours at my job and focus on Monero development instead. I have worked >20 hours during the school year with little to no issues, and since the majority of the hours will occur during the summer, I have even more time allocated to work instead of school, which can be reduced to make room for Monero development.
Furthermore, I plan on keeping a log of my hours and reporting each month to maintain a certain level of accountability. If something comes up in the 3 months which I can't foresee and I am unable to complete all 360 hours in the allotted time frame, I will either 1) push back the payout date or 2) complete the hours regardless after the timeframe. I truly am passionate about this project and intend to stay as long as the community deems me useful.
Beyond that, watching the dev chat, I think you're doing a great job, you have a great attitude, and it's refreshing to see someone attempting to clean up and improve the existing codebase.
Thanks :D
Supporting based on what @plowsof and @RealCryptoGrampy say. Also because I belive protecting monero-newcomers in simple mode from getting scammed out of their XMR is really important.
I like working with you, but I'm also sure that you'll run out of "dead code" to clean up very soon. This is the simplest and lowest hanging fruit out there, that's not very nutritious at the same time.
What I'd personally wish from you, if I may, is to review just a few PRs of mine at a time and approve or discuss to help approving them. You did this well for the Unity Builds. Some of my PRs are hard, I know. Therefore I didn't really expect you to review them for free, but you did make the steps that make me confident, that you can handle the rest, once you get funded. But like I said: one after another, as reviewing other people's code is a demanding activity.
but I'm also sure that you'll run out of "dead code" to clean up very soon
Yes, I sure hope I do!
What I'd personally wish from you, if I may, is to review just a few PRs of mine at a time and approve or discuss to help approving them
I try to review anyone PRs if I can. For those PRs which I don't have the knowledge to review, I will not. Some of your PRs are beneficial, but outside of the scope of my immediate knowledge, so I put off reviewing them indefinitely or until I can fully understand the changes made. What I want to avoid is approving any negative changes, so I try to be conservative about which PRs I leave a review on.
Some of your PRs are beneficial, but outside of the scope of my immediate knowledge, so I put off reviewing them indefinitely or until I can fully understand the changes made. What I want to avoid is approving any negative changes, so I try to be conservative about which PRs I leave a review on.
Yes, always this way. Obviously. But thanks for saying it for those to whom this isn't obvious.
Edited by mjActually honest (and I really mean honest) reviews by various/diverse parties are the only way of safeguarding projects from malicious takeovers by groups of closely cooperarating malicious individuals. Many times cooperating covertly.
Bear in mind that you will easy spot them by apparent lack of empathy or "soul", as they have too little mental energy to be able enjoy any higher emotions, thus are forced by nature to be parasitic.
Truth will always win.
Edited by mjI also think so! word wipe
Hi all, it has been a full month since I first pushed the proposal, and I hope you are doing well! Since it is getting closer to the school year, I have dialed back my hours on this proposal in make sure that I don't over-promise on the hours I can deliver. I have also updated the exchange rate from $153.11 USD/XMR to $139.26 USD/XMR. You can double-check my numbers here: https://coinmarketcap.com/currencies/monero/historical-data/
Edited by jeffro256mentioned in commit e3f4690e
Update
Hello! Thank you to everyone who donated to my proposal! I can never thank you guys enough; you're a huge reason why the Monero community is so great. I also want to thank those who supported my propsoal and spread the word. Without you all, I would not have been able to spend as much time as I did on this project the last month. It blew my mind how fast the proposal was funded once it reached funding stage, so much so that I was not fully prepared for development on this project, as I was still working another job. I gave them my 2-weeks notice immediately to focus on my work here. It has been over a month since I was funded, so I want to drop an update report. Here are some links to some of my recent work on Github:
Authored PRs:
- https://github.com/monero-project/monero/pull/8543
- https://github.com/monero-project/monero/pull/8557
- https://github.com/monero-project/monero/pull/8565
- https://github.com/monero-project/monero/pull/8569
- https://github.com/monero-project/monero/pull/8572
- https://github.com/monero-project/monero/pull/8578
Reviewed PRs:
- https://github.com/monero-project/monero/pull/8490
- https://github.com/monero-project/monero/pull/8491
- https://github.com/monero-project/monero/pull/8495
- https://github.com/monero-project/monero/pull/8496
- https://github.com/monero-project/monero/pull/8498
- https://github.com/monero-project/monero/pull/8502
- https://github.com/monero-project/monero/pull/8516
- https://github.com/monero-project/monero/pull/8519
- https://github.com/monero-project/monero/pull/8525
- https://github.com/monero-project/monero/pull/8526
- https://github.com/monero-project/monero/pull/8527
- https://github.com/monero-project/monero/pull/8529
- https://github.com/monero-project/monero/pull/8538
- https://github.com/monero-project/monero/pull/8540
- https://github.com/monero-project/monero/pull/8544
- https://github.com/monero-project/monero/pull/8547
- https://github.com/monero-project/monero/pull/8548
- https://github.com/monero-project/monero/pull/8556
- https://github.com/monero-project/monero/pull/8564
- https://github.com/monero-project/monero/pull/8574
- https://github.com/monero-project/monero/pull/8575
Here's an incomplete timesheet of the times where I sat down for bigger blocks of time and worked. This timesheet is not exhaustive, as I spent a lot of time outside of the listed times to do research, compile others' builds, do smaller reviews, debug, get more familiar with the core codebase, etc. I also stopped counting hours after September 17th once I hit the 80 hour mark. I don't want to be compensated a certain amount for if I do less work, so this milestone took a little longer than one month, and for that I apologize.
Week of August 7th
- August 9th -- 4 hours -- serde: create serialization-side basic functions
- August 10th -- 4.5 hours -- serde: first epee binary deserializer
- Augest 12th -- 5 hours -- serde: resdeign the visitor so no template knowledge is needed for Deserializers to interface with it
- August 13th -- 3 hours -- serde: start struch.h (similar to keyvalue_serialization.h)
- Augest 14th -- 3 hours -- serde: linear key search in struct.h
Week of August 14th
- August 15th -- 3 hours -- serde: struct.h first compile
- August 16th -- 3 hours -- serde: refactoring
- August 17th -- 5 hours -- serde: visitor visit_end + SelfDescribingDeserializer + simplify visitor + refacor dependencies
- August 18th -- 5 hours -- serde: switch deserialize base function to ADL operators, start working copy of serde branch
- August 19th -- 2 hours -- serde: keyvalue macros and working tests
- August 20th -- 2 hours -- serde: KV_SERIALIZE_PARENT required redesigning how struct fields are handled
Week of August 21st
- August 23rd -- 6 hours -- serde: JSON arbitrary values and deserializer
- August 24th -- 5 hours -- pull 8535 and further serde work
- August 25th -- 4 hours -- serde: compat folder and storages/serde_template_helper by analyzing exceptions and API usage of portable_storage_template_helper.h
- August 26th -- 4 hours -- serde: blob overhaul
- August 27th -- 2 hours -- serde: blob overhaul
Week of August 28th
- August 30th -- 5 hours -- serde: more blob factoring and std::set support
- September 1st -- 4.5 hours -- serde: visit number by lexical string and network addr variant
- September 2nd -- 4.5 hours -- serde: cleanup visitor and network addr variant
- September 3rd -- 2 hours -- serde: model/limits.h
Week of September 4th
- September 5th -- 3 hours -- serde: model/limits.h and Deserializer state
- September 6th -- 6 hours -- serde: almost finished on working branch
- September 7th -- 4 hours -- serde: serde compiles and pushed
- September 8th -- 4 hours -- serde: more testing and filling out custom serializations
- September 9th -- 2 hour -- review #8556, #8544, and #8540
Week of September 11th
- September 17th -- 5 hours -- reviewing #8564 and generally debugging Ubuntu 22 builds
As you can see, the majority of my time was taken up by this PR: https://github.com/monero-project/monero/pull/8557. I started this about 1.5 weeks before I knew I was going to be funded, and I didn't want to the work to go to waste because it is genuinely needed. If you would like, you can read more about it in that link. @vtnerd is currently working on a goal similar to this, and after I created the inital pull request, him and I have begun talking more about the direction of this feature and how to combine our efforts. My PR is closer to being "completed", as replace_p2p_serialization does not yet have JSON working publicly, but his is more performant and makes smaller binaries. Deserialization/serialization was not specifically in my original CCS proposal, and while it IS related to the crytonote protocol and will help me towards my goal #5 (closed) in my proposal, if the community deems that it is too off-topic, then I will not count those hours towards my milestone.
Goal #8 (closed) was completed here: https://github.com/monero-project/monero/pull/8340. Goal #9 (closed) did not end up working out: https://github.com/monero-project/monero/pull/8354.
The Future:
For this next month, I plan to work almost exclusively on the GUI wallet (goals #1 (closed), #2, #3 (closed), and #4 (closed)) and wherever else needs immediate work. My priority will be securing remote GUI connections with SSL. I will communicate more with vtnerd to finish up the serialization/deserialization code, even on off time, but I won't put that in my offical hours. I plan to begin counting new hours starting September 24th, 2022.
Payment:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 I, jeffro256, wish to be paid for CCS milestone 1 from proposal "jeffro256: part-time dev work 2022Q3" at https://repo.getmonero.org/monero-project/ccs-proposals/-/merge_requests/319 to the following address: 8A1ua1oW2DJQZVr8h7UNRS1Y41Zx3UvDV5L9chiiYTgWULaXEHFzRThJdKgtG8yNAvLAAMCojW7dSW2GZULU6JHc4jrG6xs -----BEGIN PGP SIGNATURE----- iQHLBAEBCgA1FiEELqrJMOa5DLAZwB6Ab3l5em45JEIFAmMuRCwXHGplZmZybzI1 NkB0dXRhbm90YS5jb20ACgkQb3l5em45JELTWAwAleDy3PwValVnSf1DYqOTzBKe RsbbiAcJdlkuOPF4QKrPxMMJesmsmaNTTi0jzgLm97rOnTyYhChD5g5z3JBE+1Av Eixmqz4GrKP3bTG6FQfJS/+FVdRBeewRSnv/4Sp33acVCL+p2s8350LgJ+0J3pym ilYPQ/xjLxvXa6jkZDwb6MemQcS17BP1lSSBrDy4iILkb7/s3zFTx0kQ+7H4rCaF b1Kz0vrCBx8xpGwkEb29lGCmkXNflTjd1OTGkjDBF8A5PQVsUPJM6i/Qrg34egcg 4flHeobs9XxsWHLraKXiTD/qyxy2oplcNj29568OUltGn72InzP42WZdu9Rto4P8 SCNrmgR2BfaY+4coHmJcFgWd7wkjGu/NiQapgexqYxkcNkgDqUgTyKLlL7CJcOFP Mjgl3/mEMFopEUN55Wbeog3NWPzGRdRZZDo9ycsGBx6F7NnoJhi9c5cQgs1jehAX tCKgQvpAWH1uCih52Qp9Flo/+nTFB8ZmFwlxFZGq =dR5E -----END PGP SIGNATURE-----
Thanks for your extraordinary dedication
I wish I could just give all my drags a 2 week notice
Edited by mjHowdy, I'm back again with another milestone update!
Milestone update 2
This month I mainly worked on the community node goal. I opened a Github issue to gather ideas, critiques, and awareness from the community. I began writing the community node selection code here. I started on writing the NodeRPCProxy refactorings here, here, and here. The NodeRPCProxy refactorings are currently awaiting review of @j-berman's
scan_tx
PR. This next milestone period, I plan on fleshing out the node selection code, pushing more NodeRPCProxy refactorings through, and adding that support to the GUI wallet.Here is a list of PRs I authored during this milestone period:
- https://github.com/monero-project/monero/pull/8605
- https://github.com/monero-project/monero/pull/8632
- https://github.com/monero-project/monero/pull/8637
- https://github.com/monero-project/monero/pull/8638
- https://github.com/monero-project/monero/pull/8643
- https://github.com/monero-project/monero/pull/8644
And here is a list of PRs I reviewed during this milestone period:
- https://github.com/monero-project/monero/pull/8566
- https://github.com/monero-project/monero/pull/8593
- https://github.com/monero-project/monero/pull/8597
- https://github.com/monero-project/monero/pull/8598
- https://github.com/monero-project/monero/pull/8610
- https://github.com/monero-project/monero/pull/8618
- https://github.com/monero-project/monero/pull/8627
- https://github.com/monero-project/monero/pull/8628
- https://github.com/monero-project/monero/pull/8635
- https://github.com/monero-project/monero/pull/8636
- https://github.com/monero-project/monero/pull/8642
Again, I want to thank everyone who contributed to this proposal, thanks to everyone who participated in the community node discussion, and I'm sorry this milestone took longer than expected. If you would like any questions answered, I'll be happy to answer!
Edited by jeffro256Hello, this is my final milestone update!
Authored PRs:
- https://github.com/monero-project/monero/pull/8632
- https://github.com/monero-project/monero/pull/8643
- https://github.com/monero-project/monero/pull/8644
- https://github.com/monero-project/monero/pull/8648
- https://github.com/monero-project/monero/pull/8649
- https://github.com/monero-project/monero/pull/8650
- https://github.com/monero-project/monero/pull/8686
- https://github.com/monero-project/monero/pull/8699
- https://github.com/monero-project/monero/pull/8707
- https://github.com/monero-project/monero/pull/8715
- https://github.com/monero-project/monero/pull/8724
- https://github.com/monero-project/monero/pull/8735
- https://github.com/monero-project/monero/pull/8747
- https://github.com/monero-project/monero/pull/8750
- https://github.com/monero-project/monero/pull/8781
- https://github.com/monero-project/monero/pull/8786
- https://github.com/monero-project/monero/pull/8789
- https://github.com/monero-project/monero/pull/8792
- https://github.com/monero-project/monero/pull/8798
- https://github.com/monero-project/monero/pull/8799
- https://github.com/monero-project/monero/pull/8802
- https://github.com/monero-project/monero/pull/8808
- https://github.com/monero-project/monero/pull/8813
- https://github.com/monero-project/monero/pull/8815
Reviewed PRs:
- https://github.com/monero-project/monero/pull/8076
- https://github.com/monero-project/monero/pull/8610
- https://github.com/monero-project/monero/pull/8618
- https://github.com/monero-project/monero/pull/8627
- https://github.com/monero-project/monero/pull/8628
- https://github.com/monero-project/monero/pull/8635
- https://github.com/monero-project/monero/pull/8636
- https://github.com/monero-project/monero/pull/8640
- https://github.com/monero-project/monero/pull/8641
- https://github.com/monero-project/monero/pull/8642
- https://github.com/monero-project/monero/pull/8645
- https://github.com/monero-project/monero/pull/8660
- https://github.com/monero-project/monero/pull/8662
- https://github.com/monero-project/monero/pull/8663
- https://github.com/monero-project/monero/pull/8675
- https://github.com/monero-project/monero/pull/8679
- https://github.com/monero-project/monero/pull/8682
- https://github.com/monero-project/monero/pull/8683
- https://github.com/monero-project/monero/pull/8691
- https://github.com/monero-project/monero/pull/8693
- https://github.com/monero-project/monero/pull/8694
- https://github.com/monero-project/monero/pull/8697
- https://github.com/monero-project/monero/pull/8703
- https://github.com/monero-project/monero/pull/8704
- https://github.com/monero-project/monero/pull/8712
- https://github.com/monero-project/monero/pull/8723
- https://github.com/monero-project/monero/pull/8730
- https://github.com/monero-project/monero/pull/8733
- https://github.com/monero-project/monero/pull/8736
- https://github.com/monero-project/monero/pull/8737
- https://github.com/monero-project/monero/pull/8738
- https://github.com/monero-project/monero/pull/8748
- https://github.com/monero-project/monero/pull/8758
- https://github.com/monero-project/monero/pull/8760
- https://github.com/monero-project/monero/pull/8765
- https://github.com/monero-project/monero/pull/8784
- https://github.com/monero-project/monero/pull/8788
- https://github.com/monero-project/monero/pull/8794
- https://github.com/monero-project/monero/pull/8796
- https://github.com/monero-project/monero/pull/8800
Some more notable contributions this period by myself was the decoy algorithm PR which avoids using coinbase enotes as decoys when spending non-coinbase and vice versa, a PR to protect against accidental double spending added into the protocol from a certain cache change, and a PR to make obtaining the RCT output distribution from the blockchain database faster. On the tx_extra limitation PR by tevador, I also contributed a snippet of code which will cause an error when trying to construct a transaction which breakes the tx_extra limitation relay rule, instead of it erorring out before trying to send it to a node for broadcast.
Thank you to all who contributed!
Edited by jeffro256