Skip to content
Wallet Proof of Concept
Branch: master
Clone or download
gmale Merge pull request #19 from rex4539/ecc
Update README to reflect Electric Coin Company name change
Latest commit c763963 Mar 29, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
assets Updated diagrams to reflect latest state of SDK Mar 27, 2019
gradle/wrapper version updates Dec 1, 2018
src Move SQL backend into librustzcash Mar 13, 2019
.gitignore Remove now-unused ValueReceived protobuf Jan 31, 2019
Cargo.lock Move SQL backend into librustzcash Mar 13, 2019
Cargo.toml Move SQL backend into librustzcash Mar 13, 2019
LICENSE initial commit of sample project code Nov 20, 2018
README.md Merge pull request #19 from rex4539/ecc Mar 29, 2019
build-ndk-standalone.bat Update build-ndk-standalone scripts. Dec 1, 2018
build-ndk-standalone.sh build script: Exit if ANDROID_HOME environment variable is not set Feb 1, 2019
build-rust.bat Add NDK binaries to path so the cc crate can find them Nov 21, 2018
build-rust.sh Add NDK binaries to path so the cc crate can find them Nov 21, 2018
build.gradle version updates Dec 1, 2018
custom-tasks.gradle
gradle.properties add gradle wrapper Nov 21, 2018
gradlew
gradlew.bat add gradle wrapper Nov 21, 2018
proguard-rules.pro initial commit of sample project code Nov 20, 2018
settings.gradle add ability to publish to the local repo Nov 21, 2018

README.md

Security Disclaimer

⚠️ WARNING: This is an early preview


In the spirit of transparency, we provide this as a window into what we are actively developing. This is an alpha build, not yet intended for 3rd party use. Please be advised of the following:

  • 🛑 This code currently is not audited 🛑
  • This is a public, active branch with no support
  • The code does not have documentation that is reviewed and approved by our Documentation team
  • The code does not have adequate unit tests, acceptance tests and stress tests
  • The code does not have automated tests that use the officially supported CI system
  • The code has not been subjected to thorough review by engineers at the Electric Coin Company
  • This product does not run compatibly with the latest version of zcashd
  • The product is majorly broken in several ways including:
    • master seed management is left to the 3rd party wallet developer (beacause that's what wallets do best)
    • secure spending key management is left to the 3rd party wallet developer
  • The library only runs on testnet
  • The library does not run on mainnet and cannot run on regtest
  • We are actively changing the codebase and adding features where/when needed
  • We do not undertake appropriate security coverage (threat models, review, response, etc.)
  • ✔️ There is a product manager for this library
  • ✔️ Electric Coin Company maintains the library as we discover bugs and do network upgrades/minor releases
  • ✔️ Users can expect to get a response within a few weeks after submitting an issue
  • The User Support team had not yet been briefed on the features provided to users and the functionality of the associated test-framework
  • The code is unpolished
  • The code is not documented
  • The code is not yet published (to Bintray/Maven Central)
  • Requires external lightwalletd server

🛑 Use of this code may lead to a loss of funds 🛑

Use of this code in its current form or with modifications may lead to loss of funds, loss of "expected" privacy, or denial of service for a large portion of users, or a bug which could leverage any of those kinds of attacks (especially a "0 day" where we suspect few people know about the vulnerability).

👀 At this time, this is for preview purposes only. 👀


Zcash Android SDK

This lightweight SDK connects Android to Zcash. It welds together Rust and Kotlin in a minimal way, allowing third-party Android apps to send and receive shielded transactions easily, securely and privately.

Usage

⚠️ Presently, the latest stable code lives in the preview branch, under active development, and is not yet released.

Compilation requires Cargo and has been tested on Ubuntu, MacOS and Windows. To compile the SDK run:

./gradlew assembleZcashtestnetRelease

This creates a testnet build of the SDK that can be used to preview basic functionality for sending and receiving shielded transactions. If you do not have Rust and Cargo installed, the build script will let you know and provide further instructions for installation.

Structure

From an app developer's perspective, this SDK will encapsulate the most complex aspects of using Zcash, freeing the developer to focus on UI and UX, rather than scanning blockchains and building commitment trees! Internally, the SDK is structured as follows:

SDK Diagram

Thankfully, the only thing an app developer has to be concerned with is the following:

SDK Diagram Developer Perspective

The primary steps for a 3rd party developer to make use of this SDK are simply:

  1. Start the synchronizer
  2. Consume wallet data via channels

The Sychronizer takes care of

- Connecting to the light wallet server
- Downloading the latest compact blocks in a privacy-sensitive way
- Scanning and trial decrypting those blocks for shielded transactions related to the wallet
- Processing those related transactions into useful data for the UI
- Sending payments to a full node through the light wallet server
- Monitoring sent payments for status updates

At a high level, the Synchronizer provides ReceiveChannels that broadcast transaction and balance information. This allows the wallet to simply subscribe to those channels and stay updated with the latest shielded transaction information.

At a more granular level...

Visit the preview branch for more detailed documentation and the latest code.

⚠️ Presently, the latest stable code lives in the preview branch, under active development, and is not yet released.

You can’t perform that action at this time.