Skip to content
Open
Show file tree
Hide file tree
Changes from 72 commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
cc3f148
build(deps)!: update Platform to v5.1-dev 063589bf
lklimek Oct 24, 2026
82eecdd
refactor: adapt to the rust-dashcore cryptography API
lklimek Oct 24, 2026
e18e7f2
fix: adapt to protocol version 14 upstream types
lklimek Oct 24, 2026
2bb9fed
fix(sdk): follow the network's protocol version
lklimek Oct 24, 2026
173a135
test(platform): guard the protocol 13 tables and transitions
lklimek Oct 24, 2026
6a4e6e7
fix(errors): explain protocol 14 refusals that existing actions can hit
lklimek Oct 24, 2026
d75a159
docs: record the Platform v5.1-dev bump and protocol tracking
lklimek Oct 24, 2026
7ff2beb
fix(identity): choose signing keys Platform accepts on protocol 14
lklimek Oct 24, 2026
da62100
fix(errors): explain signing key refusals
lklimek Oct 24, 2026
2f4ae19
docs(user-stories): add IDN-024 for signing with keys that can sign
lklimek Oct 24, 2026
82d3ef2
fix(ui): sign each action with a key that can sign it, from the walle…
lklimek Oct 24, 2026
74695e7
fix(errors): explain moderation, gas sponsorship and distribution lim…
lklimek Oct 24, 2026
4452ae0
merge: bring the moderation, gas sponsorship and distribution limit r…
lklimek Oct 24, 2026
53d3fb2
fix(context): keep one system contract set per protocol version
lklimek Oct 25, 2026
e698c7a
fix(platform): confirm only a verified protocol version without the e…
lklimek Oct 25, 2026
4abf4d5
fix(wallet): erase the secp256k1 signing key after use
lklimek Oct 25, 2026
5536745
test(protocol): guard a contested name built with the contest fund at…
lklimek Oct 25, 2026
93cea96
fix(ui): say plainly what the app cannot edit or sign yet
lklimek Oct 25, 2026
16c1c7f
chore: keep AGENTS.md and the marketplace comment as on v1.0-dev
lklimek Oct 25, 2026
98e38af
merge: bring the review fixes of the Platform bump into the signing k…
lklimek Oct 25, 2026
04a848d
fix(identity): unlock the wallet of the key chosen for a username
lklimek Oct 25, 2026
9b3ce31
fix(identity): take the least privileged key for every document action
lklimek Oct 25, 2026
d6035a8
fix(ui): label key chooser entries as whole sentences
lklimek Oct 25, 2026
407bbaa
fix(test): prove the protocol version the headless refresh learns
lklimek Oct 25, 2026
c77e83e
merge: bring the headless refresh test fix into the signing key branch
lklimek Oct 25, 2026
9c54f99
test: drop the protocol 13 transition encoding tests
lklimek Oct 26, 2026
0555714
refactor(context): read the network's protocol version from the SDK
lklimek Oct 26, 2026
e7a9a45
refactor(context): set the fee multiplier from each proved epoch read
lklimek Oct 26, 2026
318ef38
docs(context): say why proved epochs need no ordering
lklimek Oct 26, 2026
8a18bff
test: drop the protocol 13 client tables snapshot
lklimek Oct 26, 2026
325ec45
fix(context): decode saved contracts at the proof verifier's version
lklimek Oct 26, 2026
7db8d30
fix(wallet): report a failed signed-message envelope instead of panic…
lklimek Oct 26, 2026
749f8bd
style: drop blank lines left by the removed secp256k1 context
lklimek Oct 26, 2026
26dc4b8
merge: bring the Platform bump's protocol version cleanup into the si…
lklimek Oct 26, 2026
2e097f4
Merge branch 'v1.0-dev' (squash of #1114) into fix/protocol14-signing…
lklimek Oct 26, 2026
fe69a15
Merge branch 'v1.0-dev' into fix/protocol14-signing-key-selection
lklimek Oct 26, 2026
2740cca
Merge branch 'v1.0-dev' into fix/protocol14-signing-key-selection
lklimek Oct 26, 2026
a797ee1
fix(identity): pick document keys in upstream platform-wallet's order
lklimek Oct 26, 2026
fd73522
fix(dashpay): build and read contact QR codes with platform-wallet
lklimek Oct 26, 2026
609acee
Merge branch 'v1.0-dev' into fix/protocol14-signing-key-selection
lklimek Oct 26, 2026
5dadbbd
Merge DashPay QR work into the v1.0-dev merge
lklimek Oct 26, 2026
9808ca9
fix(identity): pass over unobtainable keys and accept MASTER document…
lklimek Oct 26, 2026
429f270
merge: bring v1.0-dev (aca9bb40e, Platform 575d961f) into the signing…
lklimek Oct 26, 2026
b693a12
fix(identity): register usernames with ECDSA keys and judge readiness…
lklimek Oct 27, 2026
375140a
fix(ui): judge key chooser entries and its no-key gate by one rule
lklimek Oct 27, 2026
961488b
fix(tokens): sign token transfers with a TRANSFER key when no authent…
lklimek Oct 27, 2026
05dcfc6
fix(dashpay): check the signing wallet's lock before sending from a s…
lklimek Oct 27, 2026
0f489a9
fix(context): own an unlinked identity by its signing-key wallet first
lklimek Oct 27, 2026
b5003c9
test(kittest): register usernames with an ECDSA fixture key
lklimek Oct 27, 2026
294d51d
fix(tokens): gate token claims like their key choice and skip keys Pl…
lklimek Oct 27, 2026
573c26c
Merge remote-tracking branch 'origin/v1.0-dev' into HEAD
lklimek Oct 28, 2026
895ff8a
fix(identity): gate token forms on the key the transition signs with
lklimek Oct 28, 2026
3884cf6
Merge v1.0-dev into fix/protocol14-signing-key-selection
lklimek Oct 28, 2026
057bbe1
fix(dashpay): drop a contact QR code generated for another identity
lklimek Oct 28, 2026
a727ac6
fix(dpns): stop reporting a key saved by an older version as ready
lklimek Oct 28, 2026
6da52f9
fix(identity): open key choosers and token action forms only for keys…
lklimek Oct 28, 2026
7afed21
fix(security): keep no plaintext copy of a key entered on its Key Inf…
lklimek Oct 28, 2026
b2f42b4
fix(identity): pick and gate credit and username keys by what Platfor…
lklimek Oct 29, 2026
b691463
fix(identity): name the payout and owner keys when a node withdrawal …
lklimek Oct 29, 2026
e7e2076
Merge v1.0-dev into fix/protocol14-signing-key-selection
lklimek Oct 30, 2026
e0d7d6e
Merge v1.0-dev into fix/protocol14-signing-key-selection
lklimek Oct 30, 2026
3ef9441
Merge v1.0-dev into fix/protocol14-signing-key-selection
lklimek Nov 4, 2026
2f41924
fix(identity): skip filed keys the identity no longer holds
lklimek Nov 4, 2026
2622ac7
fix(tokens): gate a node's token claim by the claim's key choice
lklimek Nov 4, 2026
02f10bc
fix(contracts): say when the identity has no key that can sign the co…
lklimek Nov 4, 2026
b06feb0
fix(dashpay): let the QR scanner send again after a failed request
lklimek Nov 4, 2026
2e9e927
test: draw identity_holding and provider-test keys at runtime
lklimek Nov 4, 2026
d392657
fix(tokens): let the user choose a contract-group key for a token action
lklimek Nov 4, 2026
4373bc5
fix(tokens): render the form and say why its key chooser opened
lklimek Nov 4, 2026
afb5fb7
fix(dashpay): derive the contact QR code key from the identity's own …
lklimek Nov 4, 2026
6a63dc5
fix(identity): sign an identity update with the live master key
lklimek Nov 4, 2026
39d41fd
fix(tokens): look up no unlock wallet while no key is chosen
lklimek Nov 4, 2026
0044d4d
Merge v1.0-dev into fix/protocol14-signing-key-selection
lklimek Nov 5, 2026
1e47ac2
fix(tokens): pick the signing key on refresh once one became usable
lklimek Nov 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion docs/user-stories.md
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,15 @@ As a user, I want to remove an identity from this device from the identity's own

---

### IDN-024: Signing avoids keys that cannot sign [Implemented]
**Persona:** Alex, Priya

As a user, I want the app to sign with a key that can actually sign the action, so that my actions are not refused because of an expired, used-up or out-of-scope key.

- Automatic key choice skips disabled and expired keys, keys limited to other contracts or document types, and keys bound to a contract group.
- Only keys this device holds the private key of are chosen; among those, one without limits is preferred over a limited one.
- Where the user picks the key, limited and expired keys stay selectable, and the key chooser shows a warning explaining the limit. Keys bound to another contract or document type are not offered.

## DPNS (DPN)

### DPN-001: Register a username [Implemented]
Expand Down Expand Up @@ -1109,7 +1118,8 @@ As a user, I want to view past payments sent and received through DashPay so tha

As an everyday user, I want to generate a DashPay QR code so that someone nearby can scan it to add me as a contact or send a payment.

- QR code encodes DashPay profile or payment info.
- The QR code is a DashPay contact code in the standard DashPay format (DIP-15), so other DashPay wallets can scan it. It shows the identity's username and works for one hour.
- Scanning another wallet's contact QR code sends that contact a request it can accept automatically. An expired or unreadable code is refused before anything is sent.

### DPY-009: Edit contact info [Implemented]
**Persona:** Alex, Priya
Expand Down
48 changes: 17 additions & 31 deletions src/backend_task/dashpay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ use crate::context::AppContext;
use dash_sdk::Sdk;
use std::sync::Arc;

pub mod auto_accept_handler;
pub mod auto_accept_proof;
pub mod avatar_processing;
pub mod contact_info;
pub mod contact_requests;
Expand Down Expand Up @@ -85,12 +83,12 @@ pub enum DashPayTask {
to_username: String,
account_label: Option<String>,
},
/// Send a contact request to the owner of a scanned contact QR code,
/// carrying the auto-accept proof its key signs.
SendContactRequestWithProof {
identity: QualifiedIdentity,
signing_key: IdentityPublicKey,
to_identity_id: Identifier,
account_label: Option<String>,
qr_auto_accept: crate::backend_task::dashpay::auto_accept_proof::AutoAcceptProofData,
qr: crate::model::dashpay::ContactQr,
},
AcceptContactRequest {
identity: QualifiedIdentity,
Expand Down Expand Up @@ -138,13 +136,11 @@ pub enum DashPayTask {
DetectIncomingContactPayments {
outputs: Vec<crate::model::dashpay::DetectedIncomingOutput>,
},
/// Build an auto-accept contact QR payload. Resolves the ENCRYPTION key and
/// derives the auto-accept key through the JIT chokepoint in the backend, so
/// the UI never reads a seed.
/// Build the identity's contact QR code through upstream platform-wallet;
/// the wallet seed is read through the secret seam in the backend, so the
/// UI never reads a seed.
GenerateAutoAcceptQrCode {
identity: QualifiedIdentity,
account_reference: u32,
validity_hours: u32,
},
}

Expand Down Expand Up @@ -206,18 +202,15 @@ impl AppContext {
DashPayTask::SendContactRequestWithProof {
identity,
signing_key,
to_identity_id,
account_label,
qr_auto_accept,
qr,
} => Ok(contact_requests::send_contact_request_with_proof(
self,
sdk,
identity,
signing_key,
to_identity_id
.to_string(dash_sdk::dpp::platform_value::string_encoding::Encoding::Base58),
account_label,
Some(qr_auto_accept),
qr.dpns_name(),
None,
Some(qr),
)
.await?),
DashPayTask::AcceptContactRequest {
Expand Down Expand Up @@ -375,20 +368,13 @@ impl AppContext {
))
}
}
DashPayTask::GenerateAutoAcceptQrCode {
identity,
account_reference,
validity_hours,
} => {
let proof = auto_accept_proof::generate_auto_accept_proof(
&identity,
account_reference,
validity_hours,
)
.await?;
Ok(BackendTaskSuccessResult::DashPayAutoAcceptQrCode(
proof.to_qr_string(),
))
DashPayTask::GenerateAutoAcceptQrCode { identity } => {
let seed_hash = self.contact_qr_wallet_seed_hash(&identity)?;
let uri = self
.wallet_backend()?
.dashpay_build_auto_accept_qr(&identity, seed_hash)
.await?;
Ok(BackendTaskSuccessResult::DashPayAutoAcceptQrCode(uri))
}
}
}
Expand Down
117 changes: 0 additions & 117 deletions src/backend_task/dashpay/auto_accept_handler.rs

This file was deleted.

Loading
Loading