* 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>
* Store address_index into tx log entry to get address and decrypt slatepack message, increment over all values
* Provide address index on send and issue_invoice command
* Keep 0 index for receive
* Use sender address index at payment proof
Rust API users need to update to SlatepackAddressIndex and the Slatepack methods
Keep a wallet database backup for pending transactions and saved address indices. Seed recovery alone does not restore these, and the address counter restarts at 1.
* 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>
* 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
* 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>
contract view was in the CLI help but the command returned Not
implemented, and there was no owner API entry point for the existing
libwallet implementation. Add owner::contract_view through to the CLI
and the owner RPC, with a display for the result.
The slate is taken from --input or prompted for, as receive does.
is_executed was hardcoded to false. Derive it from our own tx log entry
for the slate, which is confirmed once the contract has executed.
A legacy send proof uses no V5 field: V4 carries the sender and receiver
addresses and the signature, and only the timestamp and memo need V5.
Sending those as V5 stopped V4-only wallets from reading the slate.
Add SlateVersion::lowest_for and use it from create_slatepack and from
the contract owner API methods, which returned V4 unconditionally and so
dropped the timestamp and memo that an early proof's promise signature
binds. contract_sign keeps the version the counterparty sent when the
slate does not need more.
VersionedSlate and VersionedBinSlate are untagged and try V5 first, so
without a version check a V4 slate parses as V5. Only visible without a
payment proof; with one the V4 and V5 proof shapes differ enough for
serde to pick the right variant by chance.
Reject a mismatched version in the V4 and V5 deserializers, for both the
JSON and binary encodings, and set the declared version from the
conversion so it always matches the structure emitted. Add V4/V5 round
trip tests over both encodings, with and without a proof.
The V3 API examples showed V4 slates declaring version 5; they now
declare 4.
Brings the branch current with staging for review.
- ed25519-dalek 1.0.0-pre.4 to 2: PublicKey is now VerifyingKey, Keypair
is replaced by SigningKey, and from_bytes takes a fixed-size array.
Ported the contract proof code and the V5 slate serializers, following
the pattern staging already uses in v4_bin.
- owner_single_use and foreign_single_use now take the wallet instance
and a config path rather than an optional API handle. Updated the
contract call sites in command.rs and the contract tests.
- update_tx_slate_state moved to api_impl::types; dropped the local copy.
- Took staging's fixed-size-array form of the slate signature guards; it
is equivalent to 25a5434 and keeps the file in sync with upstream.
- The grin node is now a submodule, so a build needs
git submodule update --init.
* 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>