* 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>
* add all comsig code, update to master branch
* refactor code into libwallet, remove some redundancy and update type exports
* added api calls and unit test for comsig request creation
* Addition of JSON-RPC mwixnet function call
* attempt to debug invalid params
* additions to support json doctesting for comsig creation
* tweaks to testing and documentation updates
* dependencies for tests
* Simple contracts restructured v3 (#675)
* Add prototype contract implementation
Lacks:
- Payment proofs (add early payment proofs)
- Tests
- Better structure
* Separate contract utilities
* Simplify the main setup/sign code flow
* Remove commented initial_sec_key assignment
* Simplify sign::compute function
* Add logic for "removal" of secret keys from the context
* Further simplify a bit sign and setup
* No need for mutable context when adding outputs
* Refactor the commented code (lol)
* Refactor a bit
* tmp
---------
Co-authored-by: oryhp <gtrphyro@gmail.com>
* contract test fixes (#676)
* [Contracts] Experimental Slate v5 (#677)
* beginning to add and modify slate version 5
* completion of conversions from V5 to V4 Slate
* timestamp and memo fields
* upgrade/downgrade serialization of v5 slates
* add v5 binary slate versions + start of tests
* add bin slate ser/deser to tests
* ensure serialization of timestamp always excludes milliseconds
* start to update v5 tests, update v5 documentation
* add fn to generate populated internal slate for conversion testing
* add basic tests to convert all slate versions
* update
* commit cargo.lock
* [WIP] [Contracts] Early payment proofs (#681)
* add types and beginnings of signature utils
* add proof serialization
* serialisation of proof data + signature operation
* add serialization type for invoice proof + separate bin wrapper version
* add witness data + serializion to invoice payment proof, insert verfication functions in place in order to begin verification testing
* tests and infrastructure in place for validation
* verification of promise sig
* added verification of promise signature, infrastructure up to the point where a signature must be subtracted
* attempting to figure out differences between recipient nonce that's getting stored and calculated recipient nonce
* implementation of witness verification function, retrieve relevant values and re-validate derived recipient partial signature
* move stored portion of invoice proof into core types for storage, need to rename invoice proof
* define/refine the stored portion of payment proofs type 2?
* Folding all proof data into tx log entry storage
* back to importing master
* remove cargo files from diffs
* remove a lot of extra debug output
* return proof witness as part of proof retrieval, define json serialization of invoice proof + witness fields
* finish adding verification steps to foreign API
* remove redundant promise sig field
* move lcation of sign/verify calls
* Replace Azure Pipelines with Github Actions (#688)
* Update CI Badge on README.MD (#690)
* Trigger CI on push and pull request (#693)
* Update versioning to 5.2.0-beta.1 against grin 5.2.0-beta.3 (#691)
* update versioning to 5.2.0-beta.1 against grin 5.2.0-beta.3
* tweak for CI trigger
---------
Co-authored-by: Quentin Le Sceller <q.lesceller@gmail.com>
---------
Co-authored-by: Quentin Le Sceller <q.lesceller@gmail.com>
* fix Cargo.lock
* Contracts - Test fixes + warning cleanups (#694)
* clean up warnings in libwallet crate
* clean up warnings in controller crate
* update all contract tests with awareness of new proof structure
* added explicit payment proof tests for both rsr and srs (#695)
* Basic mwmixnet send (#696)
* integrating onion library
* updates and changes to support newly included mwmixnet types
* add (incorrect) owner api function
* turn off test for now
* switch working grin branch to master
* fix doctests for build
* update cargo lock in attempt to fix croaring build on CI server
* update cargo lock with upstream thiserror crate
* update test dependency for croaring
* [Contracts] Add self spend transaction state (#697)
* Add self spend transaction state
* subtle errors with output states and tx lookups - fixes
* [Contracts] Slatepack v5 Deserialization fix (#698)
* add V5 deserialization test + fixes
* clarify comment
* upwrap fix during v4 deserialization
* further unwrap removal
* update cargo lock, use latest grin packages
* addition of self-spend cancel + tests (#699)
* add tests + legacy self send cancel (#702)
* [Contracts] Cancel self-spend TX Pt. 2 (#703)
* add tests + legacy self send cancel
* add missing file
* Update grin to latest master, change versioning label to include contracts (#712)
* Add owner_api_listen_interface as hidden configuration field (#714)
* updates for rust 1.80
* updates for rust 1.80
---------
Co-authored-by: oryhp <gtrphyro@gmail.com>
Co-authored-by: Quentin Le Sceller <q.lesceller@gmail.com>
* update sysinfo package to fix build error
* update tor process sysinfo calls to new api
* update deprecation warnings
* small logic cleanup
* tweak to retrigger CI
* new_all() not required
* give longer for test thread to stop to hopefully alleviate inconsistent CI failures
* updated util and libwallet with thiserror
* update impl crate to thiserror
* api crate converted to thiserror
* update of controller crate to thiserror
* update final bin + tests to thiserror
* update unused import
* remove failure derive
* reset import of grin to master
* update cargo lock
* update from master
* remove grin libs re-export from util crate :(
* temp local
* point code at bleeding edge grin master branch
* updated util and libwallet with thiserror
* update impl crate to thiserror
* api crate converted to thiserror
* update of controller crate to thiserror
* update final bin + tests to thiserror
* update unused import
* remove failure derive
* reset import of grin to master
* update cargo lock
* update from master
* Remove method from grin-wallet.yml and keybase.rs from adapters
* Remove keybase_notify_ttl from config
* Remove keybase_notify_ttl from config
* Fix tests
Co-authored-by: rstetsurin <rstetsurin@coinloan.io>
* tor bridge config and args
* migration `config_file_version=2`
* small fixes typo, comment etc..
* support: snowflake, meek_lite, obsf4 and tor proxy
* remove useless serde
* improve migrate function
* few fixes
* add bridge flags to pay and receive + few fixes
* some improvements
* change fee to fee_fields in various structs and fix tests for new fee calculation
* set up accept_fee_base param in grin-wallet.toml
* fix bug and adopt new tx_fee interface
* Fix doctests
* Remove left over debug statement
* revert field name feef to fee to remain slate compatible
* use into() for some literal fee_fields
* add height arguments to FeeFields methods where necessary
* Fix tests
* Rename fee_fields -> fee on Context
* Rename fee_fields -> fee on TxLogEntry
* Update to grin master
* replace fee(0) by fee(2*YEAR_HEIGHT) to get fee masking
* Fix compilation error and revert Cargo lock
* fix wrong height passed into next_difficulty
Co-authored-by: Jasper van der Maarel <j@sper.dev>
* Change versioning on master to 4.1.x development
* Remove SlateV3, V3 References from command-line code
* continue to remove pre HF3 functionality, remove participant_id from slate, remove is_compact, derive slate state based on slate state field
* slate no longer needs explicit compact step
* version/build coinbase doctest cleanup
* don't attempt to store transaction during tx lock if it doesn't exist
* repair incorrectly removed logic
* last test fixes (hopefully)