* Update rust edition to 2021 (#749) * build: update rust edition 2021 * cargo: format all * build: fix tests and warnings * Save last scanned block info for wallet scanning (#748) * scan: save last scanned block info for initial wallet scanning * scan: save start height at scanned block info on outputs collecting * scan: 10k blocks batches * fix: include last height into batch on scan * scan: save hash of last block * scan: add larger window (2880 blocks) to scan outputs when updating wallet state * add test batched scan and resume, add scan doc * rename corrupted restore test --------- Co-authored-by: Joerg <wiesche89@googlemail.com> * Bump openssl from 0.10.68 to 0.10.80 (#752) * Update lmdb (#755) * wallet: update lmdb from store crate, migrate single backend from trait to struct, update tests cargo deps and design doc * backend: do not panic on iter and directory creation * return iterator errors * build: update to last node revision * fix: height selection for scan, remove unused mutability for wallet * wallet: remove unused mutability conversion * tx: store slate state at database * build: cargo fmt * fix: do not return error when slate not found on tx slate state update * lmdb: do not collect all tx log records at iterator, show read errors at log * fix: save slate state, return error if slate not found * tx: specify amount of bad txs on slate state update error --------- Co-authored-by: Joerg <wiesche89@googlemail.com> * Node submodules (#758) * build: use node submodule as dependency * ci: checkout submodules * docs: add contributing and build instruction * ci: update release build * git: remove old submodule * git: grin staging submodule * git: add submodule dir * Integrated Tor arti Client (#750) * tor: integrated client for listener, update tokio to last version * tor: send transaction with integrated client * build: code format * tor: optimize bootstrap percent check * tor: handle config build error * tor: do not show slatepack address if tor not launched * tor: handle keystore errors * tor: keep service launched * tor: bootstrap timeout, clean cache before client launch * tor: post request timeout * fix: post timeout * build: update deps after merge * tor: store arti runtime * tor: do not send over tor if `manual` arg presents or `skip_send_attempt` set at config * fix: arg name * tor: handle arti runtime creation error * tor: handle connection error * tor: handle bootstrap error * tor: handle start service name error * tor: handle service config creation error * tor: service proxy errors * tor: handle service key creation emptiness * build: format code * build: update arti to 0.43, hyper to 0.10.1 * api: start foreign listener before tor connection * tor: handle json parse errors * tor: prevent to create several client runtimes, ability to recreate * tor: return bootstrap error * tor: handle host parse error * tor: restart proxy on error * tor: do not use integrated client when config value use_integrated is missing, add logging * build: update lock file * Global Tor client state (#762) * tor: global client state * tor: optimize init client thread-safety * tor: handle config change on client init * tor: add logging for client reuse or reinit * tor: do not reuse arti client for requests * Optimize tor sync flow (#763) * Connection timeout (#765) * Update deps (#768) * build: update grin submodule to last staging * build: update grin submodule * build: remove remove_dir_all dependency * build: update rpassword * build: update semver * build: remove unused deps * build: update ring * build: update lock file deps * build: update rustyline * build: update ed25519-dalek * build: update curve25519-dalek * build: update age * build: update uuid * fix: uuid test * build: update x25519-dalek * fix: x25519-dalek build * build: update arti * build: update grin submodule * build: update hyper * fix: initialize rustls provider for tests * build: update grin submodule * fix: rustls install provider * tor: share getting private key * fix: show an error on node version parse * cli: renamed prompt password method * fix: replace into_boxed_slice with try_from * fix: dalek tests for onion * config: comment expanded secret key * fix: import api body for controller * password: handle prompt error * wallet: parse node error message * tests: do not use random values for sign messages * build: make hook executable * build: cargo format all * rustls: do not install provider at tests and globally * build: update grin submodule * build: fix api channel from grin submodule * args: use read_password for piped prompt * build: remove unused dep * test: fixed signature * preserve piped pw input --------- Co-authored-by: wiesche <wiesche89@googlemail.com> * Bump lodash from 4.17.21 to 4.18.1 (#774) * build: update lodash to 4.18.1 * fix: readme * docs: add owner api authentication setup * build: update package-lock.json to version 3 * fix: token result, inline some vars --------- Co-authored-by: ardocrat <ardocrat@gri.mw> * Global config instance (#769) * config: global instance * fix: cli tests * fix: owner api tests * config: save tor config * fix: owner rpc tests * fix: set config file path on init and owner api call * tor: store launched services, get global config at command loop, remove unused listen args, check for empty global config to set default, do not save empty tor config at owner * api: update config in memory after successful file write * arti: restart proxy in loop * fix: comment for tor config save * config: set or init, update without error * config: scoped tor config * build: update lock file * config: ability to store multiple configurations at memory from config path * tor: restart service on config change * fix: owner api test * foreign: pass tor config from args, stop service, error handling * arti: move runtime wrapper to single file * config: read existing config from file at create_config * config: handle error on read * arti: single dir for cache * foreign: register config listener before launch * config: save temp * config: remove unused error type * config: make path and members not optional, return an error on config creation if it exists, pass default tor config to send if not set * arti: non public runtime wrapper * config: migrate comments * fix: rpc tests * config: return from cache if exists * config: save disabled tor config when null provided at owner and tor section was not set * config: update tor with args at listener * config: pass pathbuf directly on creation * config: unique tmp file name, setting permissions and providing config version * fix global config handling * fix config persistence * fix tor service restart * fix config synchronization * require wallet close before changing data directory * unify global config updates --------- Co-authored-by: wiesche <wiesche89@googlemail.com> * Wrong Slatepack address fix (#773) * Use native tls for client (#779) * client: use native tls and disable default features for reqwest * build: bring back reqwest default features except tls * client: remove tls selection * expose mwixnet onion apis (#781) * Update jayson and uuid (#777) * build: update jayson and uuid * npm: update lock file to v3 * npm: update lock file --------- Co-authored-by: ardocrat <ardocrat@gri.mw> * Optimize outputs scan and selection (#780) * Make updater APIs public (#782) * Add mwixnet wallet request support * mwixnet key conversion tests * validate and track mwixnet requests * fix Arti HTTP POST request formatting * add mwixnet wallet CLI submission * unlock mwixnet outputs when requests are not sent * support automatic mwixnet output selection * move mwixnet response parsing to libwallet * limit mwixnet hops * centralize grin workspace dependencies * fix tx filter * handle unavailable terminal colors * reject invalid invoice locking * clarify bip32 derivation paths * restore derivation path comments * tor: downgrade arti to 0.43 * owner: put active account on top of list * account table layout * fix: some typos, imports, unwraps and formatting * tx: lock outputs before sending with tor * accounts: display balances at CLI and from owner API when min confirmations are set * unpack plain slatepacks without password (#805) * unpack plain slatepacks without password * cli: better open wallet handling on wallet subcommand --------- Co-authored-by: ardocrat <ardocrat@gri.mw> * account: do not skip info from serialization, fix owner rpc test * reject zero send amounts (#799) * cli: fix short for min confirmations at accounts subcommand * accounts: optimize accounts selection * owner: document minimum_confirmations for accounts * accounts: optimize selection * preserve accounts api compatibi and clean up balances * avoid empty wallet seeds (#801) * fix empty wallet seeds * mnemonic: return actual error with entropy size on recovering * seed: extend mnemonic error description * seed: clarify mnemonic errors * seed: clarify mnemonic errors, fix missing phrase test * Clean up seed handling add test --------- Co-authored-by: ardocrat <ardocrat@gri.mw> * owner: use same wallet lock for selecting and locking outputs on send * fix: do not lock for late lock * cli: explain how to cancel * fix: error message for offline address and integrated tor * test: late lock for cli and owner api * wallet: persistence for active account * fix: owner_rpc test * fix: lock wallet till lock outputs on send * fix: update docs when to call tx_lock_outputs * build: update grin submodule * tests: get rid of owner_single_use to use correct config path * test: parallel send attempts * fix: cancel hint * fix: late lock test refresh balance * fix: set active account at single batch * owner: document persistence of set_active_account * cli: error when create and active args are present at account * fix: keep display account type as str * restore windows test fixes * fix locking docs cancel hint and tests * test cli send failure * fix current account flag * fix active account use * test account persistence * fix cli account selection * fix: cmd tests * fix: cmd test * fix account test * Show HTTP status when node requests fail (#820) * ci: cargo clippy * fix submodule checkout * update grin for clippy fixes * isolate tests * fix cli test * fix clippy warnings * fix mwixnet output lookup * build: update grin submodule * git: add clippy to hook * fix review nits * fix checks * mwixnet: use MwixnetServerPublicKey wrapper for hop * build: update grin submodule * build: clippy fixes * mwixnet: rename dalek public key * simplify mwixnet keys * clarify mwixnet docs * clarify arti usage * simplify mwixnet tests * tidy mwixnet code and docs * skip spent outputs * simplify mwixnet send * drop host clone * fix mwixnet selection and arti errors * make mwixnet fee optional * mwixnet: use fee at amount format, show min on error * fix: fee per hop test * fix: fee error text check * tor: increase circuit timeout to 60 * fix mwixnet refresh and help * build: update grin submodule and mwixnet tests * cli: do not update wallet state on cancellation of tx after failed mwixnet request * mwixnet: create separate owner api method to send request, do not cancel tx on failed mwixnet request * fix mwixnet cli args and error messages --------- Co-authored-by: ardocrat <ardocrat@gri.mw> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Grin Wallet
This is the reference implementation of Grin's wallet. It consists of 2 major pieces:
-
The Grin Wallet APIs, which are intended for use by Grin community wallet developers. The wallet APIs can be directly linked into other projects or invoked via a JSON-RPC interface.
-
A reference command-line wallet, which provides a baseline wallet for Grin and demonstrates how the wallet APIs should be called.
Contributing
To get involved, read our contributing docs.
Find us:
- Telegram: Grin Development
- Chat: Keybase, more instructions on how to join here.
Usage
To use the command-line wallet, we recommend using the latest release from the Releases page. There are distributions for Linux, MacOS and Windows.
Full documentation outlining how to use the command line wallet can be found on Grin's Wiki
To build locally install Rust and execute in the project directory:
git submodule update --init --recursive
cargo build --release
./target/release/grin-wallet
License
Apache License v2.0