Commit Graph
197 Commits
Author SHA1 Message Date
jwinterm 42fe2149c7 create_mwixnet_req: take server public keys, not secrets
MixnetReqCreationParams carried the mix servers' SECRET keys and derived each
x25519 onion pubkey from them — a test artifact, since a wallet only knows the
servers' public keys. Take the x25519 onion public keys directly.

- MixnetReqCreationParams.server_keys (Vec<SecretKey>) -> server_pubkeys
  (Vec<x25519 PublicKey>) with a vec_xpubkey_hex serde helper (hex list).
- create_mwixnet_req uses the pubkeys directly as the onion hop keys.
- owner RPC parses hex pubkeys; docs/examples updated; tests derive the pubkeys
  from their known secrets so coverage is unchanged.
- add x25519-dalek to api and controller.
2026-06-04 15:14:45 -04:00
jwinterm ce779188b1 Expose mwixnet onion crypto for the swap server
The mwixnet swap server consumes the onion primitives from this crate
(mimblewimble/mwixnet re-imports them rather than vendoring its own). Master's
#726 mwixnet kept onion/crypto private and several helpers test-only — fine for
the wallet, but the server needs them.

- Make mwixnet::onion and onion::crypto public.
- Un-gate the crypto the server uses in production: secp::{commit, sign},
  dalek::{sign, option_dalek_pubkey_serde, dalek_sig_serde}; re-export RangeProof.
- Gate the test-only helpers (new_hop, test_util) behind a new `test-helpers`
  feature, off by default, so the server's tests can use them.
2026-06-04 13:08:16 -04:00
jwinterm b7b7a6d21d Merge upstream staging into contracts
Bring the branch current with upstream staging (= master + #748). The earlier
"Merge branch master into contracts" used a stale local master snapshot, which
left the branch ~41 commits behind; this merges the current tip, including the
grin 5.4.0 dependency bump (#745) and the tx-delete / retrieve_txs fixes.

Only Cargo.lock conflicted (regenerated). Full cargo test --workspace green
(52 binaries / 185 tests).
2026-06-03 15:27:43 -04:00
jwinterm 3fcf3b7816 De-panic output_amounts(): fallible make-outputs parsing
OutputSelectionArgs::output_amounts() unwrap()'d the float parse of each
make-outputs value, panicking on bad input via the API path (the CLI now
validates earlier). Return Result instead; sum_output_amounts() propagates.
num_custom_outputs() now counts CSV entries without parsing, so it stays
infallible and the debug! macros that use it are unaffected.
2026-06-03 13:56:32 -04:00
jwinterm 9d040b40f1 Harden the contract signing-context forget invariant
Remove the broken, commented-out SEC_KEY_FAKE key-scrubbing: a zero secret
key is rejected by secp, and the scrubbing was redundant. The signing
context holding sec_key/sec_nonce is forgotten by deleting the private
context in save_step once signed (retained only at step2 for safe cancel),
and contexts are keyed by slate.id so a nonce is never reused across
messages.

Make that guarantee enforced rather than assumed: after a signed,
non-step2 save_step, verify the private context was actually removed and
error otherwise. Document the invariant at the sign site.
2026-06-03 08:03:35 -04:00
jwinterm 3a86bb4fce Replace reachable panics in contract flow with typed errors
Contract setup/sign and output selection used panic! on
protocol-reachable invariant violations: receiver fee exceeding
net_change, net_change / num_participants mismatch between the setup and
sign phases, a negative change output, conflicting selection args, and a
failed kernel-excess computation. A crafted or inconsistent counterparty
slate could abort the wallet. Return Error::GenericError (or propagate the
underlying error) instead; build_output_amount_list now returns Result.
2026-06-03 07:29:04 -04:00
jwinterm 25dab9fe5b Harden v5 payment-proof deserialization against malformed input
ProofWrap::read unwrapped on the sender/receiver address, promise
signature, and memo_type while parsing untrusted slatepack bytes, so a
malformed payment proof would panic the wallet. Propagate CorruptedData
instead, matching the timestamp path already in this function.
2026-06-02 20:58:22 -04:00
jwinterm 46999ce9f5 Make payment proofs opt-in to fix #729
Default ProofArgs.suppress_proof to true. With it false, the receiver's
`contract sign` unconditionally built an invoice promise, but the sender
address is never plumbed through, so a bare send/receive failed with
NoSenderAddressProvided (#729). The CLI never sets this field, so every
default `contract sign --receive` hit the broken path; the basic tests
passed only because they set suppress_proof = true by hand.

Drop those workarounds from contract_srs/contract_rsr so they now exercise
the default path, and opt the proof-using tests (contract_early_proofs_srs,
contract_early_proofs_rsr, contract_accounts) into proofs explicitly.
2026-06-02 20:25:48 -04:00
jwinterm 79a403127b Fix VersionedSlate::version() misreporting V5 slates as V4
version() returned SlateVersion::V4 for the V5 variant, so any
version-aware logic downstream would misidentify a V5 slate as V4.
Return V5 for V5.
2026-06-02 18:27:12 -04:00
jwinterm f7d3692ee8 Merge branch 'master' into contracts
Bring the contracts feature branch up to current master, which has since
landed rust 1.80 support (#722), the canonical mwixnet onion code (#726),
and node-client proxy support (#738).

Conflict resolution:
- libwallet/src/mwixnet/*: take master's (#726), dropping the contracts
  branch's older divergent copy. owner.rs::create_mwixnet_req updated to
  master's API (use_test_rng) and master's flat re-export imports.
- Cargo manifests/lock/.cargo: master's deps & version; re-add serde_with
  for Slate v5; keep contracts' .cargo/config.toml (Windows static-CRT).
- lib.rs: keep serde_derive AND serde_with macro_use; single mwixnet decl.
- error.rs: union of master + contracts variants; flat mwixnet re-exports.
- api/libwallet owner.rs: master's #738 + create_mwixnet_req plus the
  contract_* entry points; drop duplicate older create_mwixnet_req method.
- slatepack/armor.rs, node_clients/resp_types.rs: take master's.

Workspace builds; libwallet lib tests pass (34/34). The Slate version()
bug, issue #729 fix, and de-panicking follow in subsequent commits.
2026-06-02 18:26:08 -04:00
129ad2f5fb 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>
2026-06-02 20:09:50 +02:00
ardocratandGitHub 602d79e868 Update rust edition to 2021 (#749)
* build: update rust edition 2021

* cargo: format all

* build: fix tests and warnings
2026-05-14 12:58:22 +02:00
David BurkettandGitHub e732cbdc44 Merge pull request #745 from ardocrat/grin_5.4.0
Grin 5.4.0 update
2026-03-23 15:54:57 -04:00
ardocrat c4f473568f tx: ability to delete transaction from database 2026-03-21 22:48:52 +03:00
ardocrat d2edbe12d3 build: update deps to grin 5.4.0 and hyper 0.14 2026-03-10 03:32:20 +03:00
ardocrat b49e2dfecd fix: retrieve txs for an account with custom query arguments 2026-03-04 18:43:04 +03:00
YeastplumeandGitHub 3b0cc2401a Versioning updates for alpha release (#727) 2024-11-01 12:40:48 +00:00
YeastplumeandGitHub 6566fc184e Add mwixnet code to master (#726)
* 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
2024-11-01 10:45:09 +00:00
yeastplume 7ac35f134b Revert "[CONTRACTS] Contracts branch update for 1.80 (#718)"
This reverts commit cdd63fb565.
2024-09-19 09:05:44 +00:00
YeastplumeandGitHub 5327f2cdda [CONTRACTS] Add Owner API function to create mwixnet request (#720)
* update srs test

* updating comsig creation, attempt to get working

* implementation of comsig given an output commit

* lock output on mwixnet creation, add further testing
2024-09-03 16:06:35 +01:00
YeastplumeandGitHub 96b5d240bb [CONTRACTS] update/rename mwixnet onion classes (#719)
* update/rename mwixnet onion classes

* fix serialize trait errors
2024-08-27 13:25:18 +01:00
cdd63fb565 [CONTRACTS] Contracts branch update for 1.80 (#718)
* 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>
2024-08-27 12:30:22 +01:00
YeastplumeandGitHub 765f11b168 Update working version on master (#713)
* Update working version on master

* update cargo lock
2024-05-21 10:20:09 +01:00
YeastplumeandGitHub c06c91d41a Update grin to latest master, change versioning label to include contracts (#712) 2024-05-20 09:56:05 +01:00
YeastplumeandGitHub 8069de9a56 Revert "update and versioning for v5.3.1 (#709)" (#710)
This reverts commit 3d6f4b8437.
2024-05-14 09:36:39 +01:00
YeastplumeandGitHub 3d6f4b8437 update and versioning for v5.3.1 (#709) 2024-05-14 09:35:42 +01:00
Yeastplume 57bf8be0cb merge from 5.3.0 master release 2024-04-30 11:11:25 +01:00
YeastplumeandGitHub 7741812599 Update versioning, dependencies for 5.3.0 release (#708) 2024-04-24 10:20:16 +01:00
YeastplumeandGitHub 297c828532 Prevent wallet attempting to re-pay a cancelled invoice transaction (#707) 2024-04-24 09:03:58 +01:00
YeastplumeandGitHub 6f226ea3e2 [Contracts] Cancel self-spend TX Pt. 2 (#703)
* add tests + legacy self send cancel

* add missing file
2024-02-23 09:24:47 +00:00
YeastplumeandGitHub 75363a9a25 Invoice owner API update (#701) 2024-02-20 11:04:42 +00:00
YeastplumeandGitHub f28b8c653a Compilation fixes for master (#700)
* update to use grin master, cargo update

* and remaining crates
2024-02-16 11:19:01 +00:00
YeastplumeandGitHub 074fa243b5 addition of self-spend cancel + tests (#699) 2024-02-15 10:04:18 +00:00
YeastplumeandGitHub b3d90c92e8 [Contracts] Slatepack v5 Deserialization fix (#698)
* add V5 deserialization test + fixes

* clarify comment

* upwrap fix during v4 deserialization

* further unwrap removal
2023-11-21 13:51:46 +00:00
YeastplumeandGitHub febffd4c68 [Contracts] Add self spend transaction state (#697)
* Add self spend transaction state

* subtle errors with output states and tx lookups - fixes
2023-10-19 11:04:44 +01:00
YeastplumeandGitHub 165632b1dc 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
2023-10-03 14:45:59 +01:00
YeastplumeandGitHub fa78d72d35 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
2023-08-10 13:24:25 +01:00
e3148d0305 [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>
2023-08-08 11:35:14 +01:00
Yeastplume e674c4a2f0 Merge branch 'master' into contracts 2023-08-08 11:16:32 +01:00
12a25f82f1 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>
2023-08-03 12:40:04 +01:00
YeastplumeandGitHub 063e91d5e5 [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
2023-04-18 09:57:38 +01:00
f0cf8b0a7d 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>
2023-03-20 10:09:17 +00:00
Yeastplume 319b9ca7e0 move result count limiting to after sorting 2022-12-06 09:51:50 +00:00
Yeastplume 2a599027f5 more tweaks based on review 2022-12-05 11:14:46 +00:00
Yeastplume b1beca4206 remove _inc from field names 2022-12-01 09:44:51 +00:00
Yeastplume 1188f3287d add doctest exercising advanced query JSON API 2022-11-29 09:30:45 +00:00
Yeastplume 13b1fc8e01 addition of tx statuses to sort fields, fixes to total amount queries, inclusion of bigint, addition of unit tests to exercise filtering 2022-11-28 15:10:29 +00:00
Yeastplume 806aa985d7 added transaction filtering implementation, addition of internal libwallet test to be filled out 2022-11-23 15:36:42 +00:00
Yeastplume cd3203be23 update transaction
api calls throughout
2022-11-22 13:25:44 +00:00
Yeastplume 746c1831c5 add query pagination options struct 2022-11-22 12:04:17 +00:00