Skip to content

Ideas for contribution

MeerKatDev edited this page Nov 30, 2023 · 1 revision

CI improvements

  • Testing takes way too much time. This can be improved in some ways:
    • introducing parallellization on the UniFFI tool for testing
    • make one-file tests and hope for the best.
    • other ways ...
  • There is a CI worfklow for releasing on some package managers, but not for releasing here on Github. That would be very welcome.
  • Improving on the above - six other repositories are needed for the releasing part. Can we do everything in this repository?
  • Improve caching - cache takes up a lot of space
  • Introduce more aggressive (and automated) testing for the libraries for mobile (iOS, Android).
  • Build a package for macOS - that should work out of the box.

Code improvements

  • The error system is a patched-up mess and not admittedly great - we did the best we could because translating errors one by one. But there should be a better correspondence between errors, instead of using ZcashError everywhere.
  • Find a more generic way to translate enums. Hardcoding enums in this way:
match zsp {
            ZcashScanPriority::Ignored => Self::Ignored,
            ZcashScanPriority::Scanned => Self::Scanned,
 ...

is very error prone and introduces a lot of code. Some macro to solve this would be welcome. Other enums, with arguments for example, would welcome a similar tool but with some complexity.

  • There is a lot of cloning involved in the Rust code, and in some cases there might be some significant performance losses. This remains to be checked in detail for single cases
  • The code was built the way it was due to constraints from the way librustzcash was built. If improvements were made on that side, here it would be a lot easier, for example, by using more borrowing in place of cloning. Copy is often not available.
  • imports are made this way: use crate::{ZcashObject1, ZcashObject2, ... } which makes it difficult to locate where the structs are. Perhaps in the future UniFFI will allow a better way.
  • it might be that in some near future Arc won't be needed for every object.
  • In some cases Arc is not really needed, because an object can be rendered as a primitive type. Check in which cases (ZcashAmount ?).

Bigger ideas

  • The Orchard library is separated from librustzcash - should it be the same for this library? Should the Orchard library be separately translated?
Clone this wiki locally