-
Notifications
You must be signed in to change notification settings - Fork 4
Ideas for contribution
MeerKatDev edited this page Nov 30, 2023
·
1 revision
- 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.
- 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
?).
- The Orchard library is separated from librustzcash - should it be the same for this library? Should the Orchard library be separately translated?