2019-11-24 13:40:00 -08:00
# zcash-android-wallet
2021-08-24 11:13:05 -07:00
A sample Android wallet using the [Zcash Android SDK ](https://github.com/zcash/zcash-android-wallet-sdk ).
2020-06-10 08:11:25 -07:00
### Motivation
Update README.md
- clarify that this is maintained by ECC
- delete duplicate sentence about the wallet threat model (kept in the disclaimers, deleted in the intro).
- delete "Traffic analysis, like in other cryptocurrency wallets, can leak some privacy of the user." --we agreed that we didn't want to give off the impression that our wallet is worse than other apps, when it is actually better for privacy.
- delete "We recommend backing up your seed and using this with amounts of funds..." --we reiterate that this is not a product, and Taylor has looked at our code enough to feel confident about our wallets not losing funds.
- delete "We aim to make it as beautiful as it is useful. Internally, we will continue to extensively use it to innovate and interate on everything from [protocol changes](https://electriccoin.co/blog/introducing-heartwood/) to [lottie animations](https://lottiefiles.com/popular). Of course, Zcash has a strong history of being open-source, even when it's difficult. It would be easier to keep this internal-only so that we could fill it with crash-reporting and feedback tools but, instead, we decided to disable those things and make it available as a community resource." -- this takes away from the point that this is only for dogfooding, and that this is not a product.
2020-06-10 10:43:05 -07:00
[Dogfooding ](https://en.wikipedia.org/wiki/Eating_your_own_dog_food ) - _transitive verb_ - is the practice of an organization using its own product. This app was created to help us learn.
2020-06-10 08:11:25 -07:00
Update README.md
- clarify that this is maintained by ECC
- delete duplicate sentence about the wallet threat model (kept in the disclaimers, deleted in the intro).
- delete "Traffic analysis, like in other cryptocurrency wallets, can leak some privacy of the user." --we agreed that we didn't want to give off the impression that our wallet is worse than other apps, when it is actually better for privacy.
- delete "We recommend backing up your seed and using this with amounts of funds..." --we reiterate that this is not a product, and Taylor has looked at our code enough to feel confident about our wallets not losing funds.
- delete "We aim to make it as beautiful as it is useful. Internally, we will continue to extensively use it to innovate and interate on everything from [protocol changes](https://electriccoin.co/blog/introducing-heartwood/) to [lottie animations](https://lottiefiles.com/popular). Of course, Zcash has a strong history of being open-source, even when it's difficult. It would be easier to keep this internal-only so that we could fill it with crash-reporting and feedback tools but, instead, we decided to disable those things and make it available as a community resource." -- this takes away from the point that this is only for dogfooding, and that this is not a product.
2020-06-10 10:43:05 -07:00
Please take note: the wallet is not an official product by ECC, but rather a tool for learning about our libraries that it is built on. This means that we do not have robust infrasturcture or user support for this application. We open sourced it as a resource to make wallet development easier for the Zcash ecosystem.
2020-06-10 08:11:25 -07:00
2021-07-21 12:54:53 -07:00
# Disclaimers
There are some known areas for improvement:
2020-06-10 08:11:25 -07:00
2021-07-21 12:54:53 -07:00
- This app is mainly intended for learning and improving the related libraries that it uses. There may be bugs.
- Traffic analysis, like in other cryptocurrency wallets, can leak some privacy of the user.
- The wallet requires a trust in the server to display accurate transaction information.
See the [Wallet App Threat Model ](https://zcash.readthedocs.io/en/latest/rtd_pages/wallet_threat_model.html )
for more information about the security and privacy limitations of the wallet.
If you'd like to sign up to help us test, reach out on discord and let us know! We're always happy to get feedback!
# Description
2021-08-24 11:13:05 -07:00
This a sample wallet for the following set of features:
2021-07-21 12:54:53 -07:00
- z2z transactions w/ encrypted memos
- reply-to formatted memos
- z2t transactions
- transparent receive-only
- autoshielding on threshold from receive only t-address
2020-06-10 08:11:25 -07:00
2021-07-21 12:54:53 -07:00
note: z means sapling shielded addresses.
# Prerequisites
2020-06-11 14:10:36 -07:00
- [The code ](https://github.com/zcash/zcash-android-wallet )
- [Android Studio ](https://developer.android.com/studio/index.html ) or [adb ](https://www.xda-developers.com/what-is-adb/ )
2021-08-24 11:13:05 -07:00
- An Android device or emulator
2020-05-28 15:43:14 -07:00
2021-07-21 12:54:53 -07:00
# Building the App
To run, clone the repo, open it in Android Studio and press play. It should just work.™
## Install from Android Studio
2021-08-24 11:13:05 -07:00
1. [Install Android Studio ](https://developer.android.com/studio/install ) and setup an emulator
2020-06-15 10:05:28 -07:00
1a. If using a device, be sure to [put it in developer mode ](https://developer.android.com/studio/debug/dev-options ) to enable side-loading apps
2020-06-11 14:10:36 -07:00
2. `Import` the zcash-android-wallet folder.
It will be recognized as an Android project.
3. Press play (once it is done opening and indexing)
2020-06-10 08:11:25 -07:00
2021-07-21 12:54:53 -07:00
## OR Install from the command line
2020-06-10 08:11:25 -07:00
To build from the command line, [setup ADB ](https://www.xda-developers.com/install-adb-windows-macos-linux/ ) and connect your device. Then simply run this and it will both build and install the app:
```bash
cd /path/to/zcash-android-wallet
./gradlew
```
2021-09-07 08:38:01 -07:00
Note: The lack of an explicit Gradle task is not a typo. A default task is configured via [build.gradle.kts ](build.gradle.kts ).
2021-08-24 11:13:05 -07:00
Tip: On macOS and Linux, Gradle is invoked with `./gradlew` . On Windows, Gradle is invoked with `gradlew` .
2020-06-10 08:11:25 -07:00
2022-01-16 05:50:08 -08:00
# Included builds
To simplify implementation of SDK features in conjunction with changes to the app, a Gradle [Included Build ](https://docs.gradle.org/current/userguide/composite_builds.html ) can be configured.
1. Check out the SDK to a directory path of `../zcash-android-sdk` relative to the root of this app's repo. For example:
parent/
zcash-android-wallet/
zcash-android-sdk/
1. Verify that the `zcash-android-sdk` builds correctly on its own
1. Build `zcash-android-wallet` , setting the Gradle property `IS_SDK_INCLUDED_BUILD=true`
There are some limitations of included builds:
1. Properties from `zcash-android-wallet` will override those set in `zcash-android-sdk` with the same name
1. Modules in each project cannot share the same name. For this reason, build-conventions have different names in each repo (`zcash-android-sdk/build-conventions` vs `secant-android-wallet/build-convention` )
1. Kotlin and KSP versions will need to be coordinated between the two projects, because KSP is tightly coupled to the Kotlin version
2021-07-21 12:54:53 -07:00
# Contributing
Update README.md
- clarify that this is maintained by ECC
- delete duplicate sentence about the wallet threat model (kept in the disclaimers, deleted in the intro).
- delete "Traffic analysis, like in other cryptocurrency wallets, can leak some privacy of the user." --we agreed that we didn't want to give off the impression that our wallet is worse than other apps, when it is actually better for privacy.
- delete "We recommend backing up your seed and using this with amounts of funds..." --we reiterate that this is not a product, and Taylor has looked at our code enough to feel confident about our wallets not losing funds.
- delete "We aim to make it as beautiful as it is useful. Internally, we will continue to extensively use it to innovate and interate on everything from [protocol changes](https://electriccoin.co/blog/introducing-heartwood/) to [lottie animations](https://lottiefiles.com/popular). Of course, Zcash has a strong history of being open-source, even when it's difficult. It would be easier to keep this internal-only so that we could fill it with crash-reporting and feedback tools but, instead, we decided to disable those things and make it available as a community resource." -- this takes away from the point that this is only for dogfooding, and that this is not a product.
2020-06-10 10:43:05 -07:00
2021-07-21 12:54:53 -07:00
Contributions are very much welcomed! Please read our [Contributing Guidelines ](/CONTRIBUTING.md ) and [Code of Conduct ](/CONDUCT.md ). Our backlog has many Issues tagged with the `good first issue` label. Please fork the repo and make a pull request for us to review.
2020-05-28 15:43:14 -07:00
2021-07-21 12:54:53 -07:00
# Reporting an issue
2020-06-10 08:11:25 -07:00
2021-07-21 12:54:53 -07:00
If you wish to report a security issue, please follow our [Responsible Disclosure guidelines ](https://github.com/zcash/zcash-android-wallet-sdk/blob/master/responsible_disclosure.md ).
Update README.md
- clarify that this is maintained by ECC
- delete duplicate sentence about the wallet threat model (kept in the disclaimers, deleted in the intro).
- delete "Traffic analysis, like in other cryptocurrency wallets, can leak some privacy of the user." --we agreed that we didn't want to give off the impression that our wallet is worse than other apps, when it is actually better for privacy.
- delete "We recommend backing up your seed and using this with amounts of funds..." --we reiterate that this is not a product, and Taylor has looked at our code enough to feel confident about our wallets not losing funds.
- delete "We aim to make it as beautiful as it is useful. Internally, we will continue to extensively use it to innovate and interate on everything from [protocol changes](https://electriccoin.co/blog/introducing-heartwood/) to [lottie animations](https://lottiefiles.com/popular). Of course, Zcash has a strong history of being open-source, even when it's difficult. It would be easier to keep this internal-only so that we could fill it with crash-reporting and feedback tools but, instead, we decided to disable those things and make it available as a community resource." -- this takes away from the point that this is only for dogfooding, and that this is not a product.
2020-06-10 10:43:05 -07:00
2021-08-24 11:13:05 -07:00
For other kind of inquiries, feel welcome to open an Issue if you encounter a bug or would like to request a feature.