Skip to content

feat(qt): back Dash Platform GUI internals with real grovedb/drive/dpp crates - #67

Open
PastaPastaPasta wants to merge 265 commits into
developfrom
platform-gui-rust
Open

feat(qt): back Dash Platform GUI internals with real grovedb/drive/dpp crates#67
PastaPastaPasta wants to merge 265 commits into
developfrom
platform-gui-rust

Conversation

@PastaPastaPasta

@PastaPastaPasta PastaPastaPasta commented Aug 7, 2026

Copy link
Copy Markdown
Owner

What this is

The composite reference implementation of Dash Platform usernames, profiles, and DashPay contacts in dash-qt, assembled from the current train foundations (tracked in dashpay#7512). It exists to prove the whole path end-to-end — platform crates, core build, wallet seams, GUI — while the individual train PRs are reviewed and merged. It is an integration branch, not a merge candidate.

Branch structure (bottom-up)

  1. Base: build: add optional Rust and CXX bridge support dashpay/dash#7580 (feat/optional-rust-components, head eeb3b915) — opt-in Rust + cxxbridge build foundation, validated-hosts target set, Guix-baseline-proven.
  2. DIP-14 Derive256 (feat: add DIP-14 256-bit child key derivation (Derive256) dashpay/dash#7511, merged) — cherry-picked prerequisite until the base catches up with develop.
  3. Wallet seams: feat(wallet): add Platform key provider, data records and DIP-15 friendship keychain seams dashpay/dash#7581 (dashpay/wallet-seams) — DIP-13/14/15 key provider, opaque platform data records, fail-closed platform-seed pinning, friendship keychain import with preserved descriptor state. Includes the cross-implementation derivation vector against rust-dashcore's key-wallet (mobile parity).
  4. Platform client + FFI + GUI — the feat(qt): back Dash Platform GUI internals with real grovedb/drive/dpp crates #67 line of work: C++ mbedTLS/gRPC-Web transport with proof-gated reads, rust/platform cxx bridge over canonical Platform crates, Qt identity/username/profile/contacts flows.

--enable-platform-gui now layers on the base's --enable-rust (implies it, adds the platform crate feature and the mbedtls/tenderdash/protoc depends packages) instead of replacing it. Default builds do zero Rust work; dashd links no Platform code in any configuration.

Pinned upstream

rust/platform pins dashpay/platform#4389 head (2a6dbe390651, branch refactor/document-query-decode-builders, on current v4.2-dev) — the transport-free embedder series: dapi-grpc transport feature (dashpay#4344, merged), proof-vector corpus (dashpay#4345, merged), dash-platform-queries split (dashpay#4388), wire-request decode + pure DPNS/DashPay builders (dashpay#4389). Zero API drift from the previous pin; includes DashPay contract v2 (dashpay#4380 — optional profile payment-address fields; no changes required to the DIP-15 flows).

Validation

  • rust/platform: 31 crate tests green at the new pin.
  • C++: platformkeys_tests, dip14_tests, platform_client_tests, platform_dpp_tests, platform_drive_tests — 54 cases green; dash-qt links with 941 bridge symbols.
  • No-flag build: zero cargo/cxxbridge invocations, no Rust symbols.
  • Lints green. Full testnet E2E (username registration → profile → contact request → contact payment) previously proven on this line; re-run pending on this head.

Known follow-ups

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 284 files, which is 184 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 128797ba-b0f5-47f7-b978-f0efbf91b5b6

📥 Commits

Reviewing files that changed from the base of the PR and between e5e5997 and 703ec57.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • depends/patches/native_cxxbridge/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (284)
  • .cargo/config.toml.offline
  • .github/workflows/build-depends.yml
  • .github/workflows/build-src.yml
  • .github/workflows/build.yml
  • .github/workflows/cache-depends-sources.yml
  • .github/workflows/guix-build.yml
  • .gitignore
  • Cargo.toml
  • Makefile.am
  • ci/dash/matrix.sh
  • ci/test/00_setup_env_native_asan.sh
  • ci/test/00_setup_env_native_platform_gui.sh
  • ci/test/00_setup_env_native_rust.sh
  • ci/test/04_install.sh
  • configure.ac
  • contrib/containers/guix/scripts/guix-start
  • contrib/devtools/cargo-vendor-git-sources.sh
  • contrib/devtools/update-native-cxxbridge.py
  • contrib/devtools/update-rust-hashes.py
  • contrib/guix/guix-build
  • contrib/guix/libexec/build.sh
  • contrib/guix/manifest.scm
  • depends/Makefile
  • depends/README.md
  • depends/config.site.in
  • depends/funcs.mk
  • depends/packages/mbedtls.mk
  • depends/packages/native_cxxbridge.mk
  • depends/packages/native_protobuf.mk
  • depends/packages/native_rust.mk
  • depends/packages/packages.mk
  • depends/packages/rust_stdlib.mk
  • depends/packages/rustcxx.mk
  • depends/packages/tenderdash_sources.mk
  • depends/patches/native_cxxbridge/cargo-config.toml
  • depends/patches/native_rust/fix-elf-interpreter.sh
  • doc/README.md
  • doc/design/assumeutxo.md
  • doc/design/platform-rust-scope.md
  • doc/release-notes-25122.md
  • doc/release-notes-25504.md
  • doc/release-notes-7595.md
  • doc/release-notes-7600.md
  • doc/rust.md
  • rust-toolchain.toml
  • rust/Makefile.am
  • rust/Makefile.chirp.include
  • rust/Makefile.common.include
  • rust/Makefile.libs.include
  • rust/Makefile.platform.include
  • rust/chirp/Cargo.toml
  • rust/chirp/build.rs
  • rust/chirp/src/lib.rs
  • rust/dashrust/Cargo.toml
  • rust/dashrust/src/lib.rs
  • rust/platform/Cargo.toml
  • rust/platform/src/decode.rs
  • rust/platform/src/lib.rs
  • rust/platform/src/provider.rs
  • rust/platform/src/st.rs
  • rust/platform/src/types.rs
  • rust/platform/src/verify.rs
  • rust/platform/tests/decoders.rs
  • rust/platform/tests/from_proof.rs
  • rust/platform/tests/signing.rs
  • src/Makefile.am
  • src/Makefile.bench.include
  • src/Makefile.qt.include
  • src/Makefile.qttest.include
  • src/Makefile.test.include
  • src/bench/load_external.cpp
  • src/bls/bls.cpp
  • src/chain.h
  • src/coinjoin/client.cpp
  • src/coinjoin/coinjoin.cpp
  • src/coinjoin/coinjoin.h
  • src/coinjoin/server.cpp
  • src/coinjoin/server.h
  • src/evo/chainhelper.cpp
  • src/evo/chainhelper.h
  • src/evo/core_write.cpp
  • src/evo/deterministicmns.cpp
  • src/evo/deterministicmns.h
  • src/evo/evodb.cpp
  • src/evo/evodb.h
  • src/evo/providertx.cpp
  • src/evo/providertx.h
  • src/evo/providertx_service.cpp
  • src/evo/providertx_service.h
  • src/evo/smldiff.cpp
  • src/evo/specialtxman.cpp
  • src/governance/core_write.cpp
  • src/init.cpp
  • src/interfaces/chain.h
  • src/interfaces/node.h
  • src/interfaces/providertx.h
  • src/interfaces/wallet.h
  • src/llmq/blockprocessor.cpp
  • src/llmq/core_write.cpp
  • src/llmq/dkgsessionhandler.cpp
  • src/llmq/dkgsessionhandler.h
  • src/llmq/net_dkg.cpp
  • src/llmq/net_dkg.h
  • src/llmq/net_quorum.cpp
  • src/llmq/snapshot.cpp
  • src/masternode/payments.cpp
  • src/masternode/payments.h
  • src/node/blockstorage.cpp
  • src/node/blockstorage.h
  • src/node/chainstate.cpp
  • src/node/chainstate.h
  • src/node/interfaces.cpp
  • src/node/utxo_snapshot.cpp
  • src/node/utxo_snapshot.h
  • src/platform/README.md
  • src/platform/client.h
  • src/platform/dpp/document.cpp
  • src/platform/dpp/document.h
  • src/platform/dpp/identity.cpp
  • src/platform/dpp/identity.h
  • src/platform/dpp/statetransitions.cpp
  • src/platform/drive/queries.cpp
  • src/platform/drive/queries.h
  • src/platform/ffi/signer.h
  • src/platform/params.cpp
  • src/platform/params.h
  • src/platform/statetransitions.h
  • src/platform/transport/cbor.h
  • src/platform/transport/client.cpp
  • src/platform/transport/endpoint_retry.h
  • src/platform/transport/freshness.h
  • src/platform/transport/grpcweb.cpp
  • src/platform/transport/grpcweb.h
  • src/platform/transport/protobuf.cpp
  • src/platform/transport/protobuf.h
  • src/platform/transport/tls.cpp
  • src/platform/transport/tls.h
  • src/platform/types.h
  • src/platform/walletrecords.cpp
  • src/platform/walletrecords.h
  • src/qt/bitcoinaddressvalidator.cpp
  • src/qt/bitcoinaddressvalidator.h
  • src/qt/bitcoingui.cpp
  • src/qt/bitcoingui.h
  • src/qt/forms/optionsdialog.ui
  • src/qt/forms/sendcoinsentry.ui
  • src/qt/optionsdialog.cpp
  • src/qt/optionsmodel.cpp
  • src/qt/optionsmodel.h
  • src/qt/platform/contactflow.cpp
  • src/qt/platform/contactflow.h
  • src/qt/platform/contactpickerdialog.cpp
  • src/qt/platform/contactpickerdialog.h
  • src/qt/platform/contactsmodel.cpp
  • src/qt/platform/contactsmodel.h
  • src/qt/platform/contactspage.cpp
  • src/qt/platform/contactspage.h
  • src/qt/platform/createusernamewizard.cpp
  • src/qt/platform/createusernamewizard.h
  • src/qt/platform/identityflow.cpp
  • src/qt/platform/identityflow.h
  • src/qt/platform/platformpage.cpp
  • src/qt/platform/platformpage.h
  • src/qt/platform/platformrecovery.cpp
  • src/qt/platform/platformrecovery.h
  • src/qt/platform/platformservice.cpp
  • src/qt/platform/platformservice.h
  • src/qt/platform/profiledialog.cpp
  • src/qt/platform/profiledialog.h
  • src/qt/platform/usernamesearchdialog.cpp
  • src/qt/platform/usernamesearchdialog.h
  • src/qt/sendcoinsdialog.cpp
  • src/qt/sendcoinsdialog.h
  • src/qt/sendcoinsentry.cpp
  • src/qt/sendcoinsentry.h
  • src/qt/test/providertransactiontests.cpp
  • src/qt/test/providertransactiontests.h
  • src/qt/test/test_main.cpp
  • src/qt/test/uritests.cpp
  • src/qt/transactiondesc.cpp
  • src/qt/transactionfilterproxy.h
  • src/qt/transactionrecord.cpp
  • src/qt/transactionrecord.h
  • src/qt/transactiontablemodel.cpp
  • src/qt/transactionview.cpp
  • src/qt/walletframe.cpp
  • src/qt/walletframe.h
  • src/qt/walletmodel.cpp
  • src/qt/walletmodel.h
  • src/qt/walletview.cpp
  • src/qt/walletview.h
  • src/rpc/blockchain.cpp
  • src/rpc/client.cpp
  • src/rpc/coinjoin.cpp
  • src/rpc/evo.cpp
  • src/rpc/evo_util.cpp
  • src/rpc/evo_util.h
  • src/rpc/governance.cpp
  • src/rpc/masternode.cpp
  • src/rpc/mempool.cpp
  • src/rpc/mining.cpp
  • src/rpc/net.cpp
  • src/rpc/node.cpp
  • src/rpc/quorums.cpp
  • src/rpc/rawtransaction.cpp
  • src/rpc/util.cpp
  • src/rpc/util.h
  • src/test/blockmanager_tests.cpp
  • src/test/coinjoin_inouts_tests.cpp
  • src/test/coinstatsindex_tests.cpp
  • src/test/data/platform/dpp_identity_vectors.json
  • src/test/data/platform/dpp_st_vectors.json
  • src/test/data/platform/drive_query_vectors.json
  • src/test/data/platform/quorum_sig_vectors.json
  • src/test/evo_cbtx_tests.cpp
  • src/test/evo_db_tests.cpp
  • src/test/evo_deterministicmns_tests.cpp
  • src/test/evo_netinfo_tests.cpp
  • src/test/fuzz/dkg_message_framing.cpp
  • src/test/fuzz/load_external_block_file.cpp
  • src/test/interfaces_tests.cpp
  • src/test/llmq_dkg_tests.cpp
  • src/test/masternode_payments_tests.cpp
  • src/test/platform_client_tests.cpp
  • src/test/platform_dpp_tests.cpp
  • src/test/platform_drive_tests.cpp
  • src/test/system_tests.cpp
  • src/test/util/chainstate.h
  • src/test/util/llmq_tests.h
  • src/test/util/setup_common.cpp
  • src/test/util/setup_common.h
  • src/test/util_tests.cpp
  • src/test/validation_block_tests.cpp
  • src/test/validation_chainstate_tests.cpp
  • src/test/validation_chainstatemanager_tests.cpp
  • src/util/fs_helpers.cpp
  • src/util/fs_helpers.h
  • src/util/ranges_set.cpp
  • src/validation.cpp
  • src/validation.h
  • src/wallet/coinselection.cpp
  • src/wallet/coinselection.h
  • src/wallet/interfaces.cpp
  • src/wallet/platformkeys.cpp
  • src/wallet/platformkeys.h
  • src/wallet/platformseed.cpp
  • src/wallet/platformseed.h
  • src/wallet/receive.cpp
  • src/wallet/receive.h
  • src/wallet/rpc/backup.cpp
  • src/wallet/rpc/coins.cpp
  • src/wallet/rpc/spend.cpp
  • src/wallet/rpc/transactions.cpp
  • src/wallet/rpc/util.cpp
  • src/wallet/rpc/util.h
  • src/wallet/rpc/wallet.cpp
  • src/wallet/spend.cpp
  • src/wallet/test/coinselector_tests.cpp
  • src/wallet/test/fuzz/coinselection.cpp
  • src/wallet/test/platformkeys_tests.cpp
  • src/wallet/test/wallet_tests.cpp
  • src/wallet/test/walletdb_tests.cpp
  • src/wallet/test/walletload_tests.cpp
  • src/wallet/transaction.h
  • src/wallet/wallet.cpp
  • src/wallet/wallet.h
  • src/wallet/walletdb.cpp
  • src/wallet/walletdb.h
  • test/functional/feature_asset_locks.py
  • test/functional/feature_llmq_connections.py
  • test/functional/feature_llmq_dkg_intake.py
  • test/functional/feature_protx_version.py
  • test/functional/mempool_expiry.py
  • test/functional/p2p_quorum_data.py
  • test/functional/test_framework/messages.py
  • test/functional/wallet_basic.py
  • test/functional/wallet_dash_rpcs.py
  • test/functional/wallet_groups.py
  • test/functional/wallet_listreceivedby.py
  • test/functional/wallet_listsinceblock.py
  • test/functional/wallet_resendwallettransactions.py
  • test/lint/lint-circular-dependencies.py
  • test/sanitizer_suppressions/lsan
  • test/util/data/non-backported.txt

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

kwvg and others added 13 commits August 11, 2026 10:28
The conflict occurs due a difference in glibc version between the Guix
environment and the targets compiled, this is only a problem for Linux
targets so the issue doesn't extend to Windows
…ging

Merging per-crate staticlibs with 'ar -x' into a flat directory silently
drops object files once member basenames collide, which happens as soon as
two crates share dependencies (measured: 373 of 374 members collide between
two crates built from one workspace). Replace the merge with an umbrella
staticlib crate, rust/dashrust, that depends on each component as an rlib:
cargo deduplicates shared dependencies, applies LTO across the whole graph,
and emits a single archive. Component crates keep their own cxx bridges and
codegen; per-crate Makefile includes now contribute only cxxbridge artifacts.
Optional components become cargo features on the umbrella crate, plumbed
from configure via RUST_CRATE_FEATURES. Per-crate dist-hook recipes are
replaced by an aggregate dist-hook so additional crates do not collide on
automake's one-recipe-per-Makefile rule.
The dashpay/platform v4.1.0 workspace declares rust-version 1.92; rustc
1.85.1 refuses nine of its crates by name. Hashes regenerated with
contrib/devtools/update-rust-hashes.py. cxx/cxxbridge stay at 1.0.192,
which compiles unchanged under 1.92.
The offline cargo configuration was generated into the source tree, which
pollutes srcdir and races when multiple out-of-tree builds for different
hosts share one checkout. Cargo discovers .cargo/config.toml by walking up
from its invocation directory, so a config under the build tree's root
works for both in-tree and out-of-tree builds.
cargo vendor handles git dependencies, but consuming the vendor directory
offline requires per-git-source replacement stanzas in .cargo/config.toml,
which the build system previously did not generate (only crates.io was
redirected). Derive the stanzas deterministically from Cargo.lock with
contrib/devtools/cargo-vendor-git-sources.sh — output verified byte-identical
to what cargo vendor itself prints — and append them when generating the
offline config. Git dependencies are unavoidable for upcoming components:
crates.io copies of the dashpay/platform crates are stale or name-squatted.
PastaPastaPasta and others added 10 commits August 11, 2026 12:23
…d JSON

fc892c3 rpc: Fail to return undocumented or misdocumented JSON (MarcoFalke)
f4bc4a7 rpc: Add m_skip_type_check to RPCResult (MarcoFalke)

Pull request description:

  This avoids documentation shortcomings such as the ones fixed in commit e7b6272, 138d55e, 577bd51, f8c84e0, 0ee9a00, 13f4185, or faecb2e

ACKs for top commit:
  fanquake:
    ACK fc892c3 - tested that this catches issue, i.e bitcoin#24691:

Tree-SHA512: 9d0d7e6291bfc6f67541a4ff746d374ad8751fefcff6d103d8621c0298b190ab1d209ce96cfc3a0d4a6a5460a9f9bb790eb96027b16e5ff91f2512e40c92ca84

Co-authored-by: fanquake <fanquake@gmail.com>
… JSON-RPC interface

Includes 6a1a66c rpc: render Type::ANY in help text instead of aborting

RPCResult::Type::ANY triggers NONFATAL_UNREACHABLE() in ToSections(),
which crashes the help() RPC when a command uses Type::ANY in a
nested result field.

Previously this was never hit because Type::ANY was only used as a
top-level alternate result type, filtered out before ToSections() is
called.

getopenrpcinfo() will use this result type, so render it like other
types allowing it to be used in nested result definitions like schema.

Co-authored-by: will <will@256k1.dev>
PastaPastaPasta and others added 24 commits August 17, 2026 17:54
(cherry picked from commit 5f4a543)
…-builders base

Move all seven dashpay/platform git dependencies from the old feat/transport-free-embedder-core pin (e8e1961fe54f) to rev 2a6dbe39065104981b7f9bb4fbee598aab869fe4, the head of refactor/document-query-decode-builders (PR dashpay/platform#4389) whose content is the rebased equivalent on the current v4.2-dev base. No FFI-visible API drift: the crate builds unchanged and all 31 rust/platform tests pass against the new revision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Follow-up to the wallet-seams signature adaptation: the DashPay flow hardening commit routes both the send and accept paths through prepareReceivingKeychain, so the creation_time bound must be threaded through it. The accept path forwards the contact request document's created_at; the send path passes 0 (unknown) since it may re-run for a friendship first established before this session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The ENABLE_PLATFORM_GUI block linking libdash_platform.a and mbedtls into test_dash was lost while re-expressing the Rust link gating on the optional-rust-components base; the platform unit tests reference the client library directly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Thread PLATFORM_GUI through the Guix pipeline: the host-side pre-download now fetches the Rust standard libraries and vendored crates (network and git are unavailable inside the build container), the flag survives the --pure environment whitelist, and the in-container depends invocation enables the Platform packages. Default Guix builds are unchanged; the flag is opt-in via the environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Extract the identity flow's persisted record and the contact payment
cursor encoding into src/platform/walletrecords.{h,cpp} so they are
shared with the recovery orchestrator and unit-testable without Qt. Add
IdentityFlow::reload() for externally synthesized records, let a
recovered identity without a username (IDENTITY_CONFIRMED, empty label)
wait for the user and register just the name from its existing credits,
and let PlatformRecovery reuse ContactFlow's request crypto.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PlatformRecovery probes getIdentityByPublicKeyHash over MASTER auth
keys (gap limit 5, three-way found/proven-absent/unanswered tally so a
network outage is never read as 'no identity'), synthesizes the
identity/0 record from namesOfIdentity (REGISTERED with the proven name,
or IDENTITY_CONFIRMED so the GUI offers registration), restores
established contacts by decrypting their xpub from the incoming request
and re-importing friendship keychains, rebuilds outbound payment cursors
from wallet history, and starts a bounded background rescan. Armed from
updateNodeContext() once evonode endpoints exist; runs at most once per
session and leaves everything retryable when incomplete.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A recovered identity without a username shows a dedicated dashboard
state with a 'Choose a username' action, and the wizard starts at name
entry with funding-free wording instead of dead-ending on the progress
view.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Round-trips the shared identity record serialization (including the
nameless shape seed-only recovery synthesizes) and rejects malformed
payloads; pins the pure payment-cursor computation and its 4-byte LE
record encoding; and rebuilds a cursor end to end from a restored
wallet's transaction history via real DIP-15 derivations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The prebuilt rust binaries request /lib/ld-linux-*.so.1 which does not exist inside the guix shell container, so fix-elf-interpreter.sh must patch them. It silently skipped because patchelf was absent from the manifest, leaving cargo unable to exec (ENOENT) when native_cxxbridge built. Add patchelf to the manifest and make the script fail hard when patchelf is missing inside a Guix environment; the patch change also invalidates the stale native_rust depends cache.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With the interpreter patched, rustc still failed to start inside the guix container because librustc_driver needs libz.so.1 and no zlib is on any runtime search path there. Add zlib to the manifest and extend fix-elf-interpreter.sh to copy libz.so.1 (like libgcc_s.so.1) into the toolchain lib directory resolved via the ORIGIN-based RPATH.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mbedtls ships as a .tar.bz2 and tar delegates to lbzip2 inside the Guix container, which the manifest did not provide; extraction failed with Cannot exec. First bzip2-compressed depends package to enter the Guix path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cargo-compiled build scripts link libgcc_s.so.1 without an RPATH; in the Guix container GUIX_LD_WRAPPER_DISABLE_RPATH is set and the loader has no default search path providing it, so they fail to start. Set LD_LIBRARY_PATH in CARGO_ENV to the rustc sysroot lib directory, where the depends toolchain stages libgcc_s.so.1 and libz.so.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nces

libcxxbridge and libdashrust reference each other: C++ bridge wrappers call Rust-implemented externs while Rust code calls generated C++ shims like the WalletSigner one. With a single-pass linker, binaries that never call a bridge's C++ wrappers directly (dashd with the platform bridge) leave the shim object unextracted, and references introduced later by libdashrust fail with undefined platform_ffi cxxbridge symbols. List both archives twice in RUST_COMPONENT_LIBS so a second scan converges.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a workflow_dispatch trigger with a 'hosts' input (default x86_64-linux-gnu) that narrows the build matrix to a single host, and a 'platform_gui' boolean input that passes PLATFORM_GUI=1 into the guix-start invocation so dispatch runs can build the Platform GUI with vendored Rust crates. Also include the native_cxxbridge and top-level Cargo.lock files in the depends-sources cache key so stale source caches do not hide vendored crate changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The upstream slices were rebased after dropping an out-of-scope dapi-grpc doc hunk from dashpay/platform#4388, which moved the head of the stacked dashpay#4389 branch this pin tracks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The upstream query-core series was rebased onto the latest v4.2-dev, which absorbed the new having-range aggregate modules into the extracted crate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Follows the upstream re-export of DocumentQuerySdk alongside DocumentQuery and the restack it produced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Picks up the request-binding gate in verify_documents_response (rejects requests the server would not have proved) and the QuerySettings/block-info compatibility restorations upstream.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Track dashpay/platform refactor/document-query-decode-builders at 3285b1c99bca after its restack; over-cap document query limits now fail as Error::Drive(InvalidLimit) with pre-proof rejection of limits above 100 and out-of-bounds wire versions. No wrapper adaptations needed: the FFI suite passes unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
walletdb.cpp now reads platformkeys::SEED_ID_RECORD to tell seed-pin damage apart from opaque Platform cache damage, closing a wallet/platformseed -> wallet/scriptpubkeyman -> wallet/walletdb include cycle. The cycle exists on the wallet-seams foundation head itself; whitelist it here until the foundation PR breaks it properly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
wallet-seams removed the unused label parameter from importFriendshipKeychains; the receiving chain is labeled explicitly through setAddressBook instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Only a malformed reserved platform/seed-id record is fatal wallet corruption: silently dropping it could unpin the Platform seed and let a multi-seed wallet sign under another identity. All other Platform data records are opaque cache/metadata, so a damaged one now follows the wallet's noncritical-record policy instead of preventing the wallet from opening. The reserved record key moves to a shared constant, and walletdb_tests pins both sides of the policy.
GetPlatformSeed accepted any nonempty stored mnemonic, but CMnemonic::ToSeed hashes arbitrary strings, so a corrupt mnemonic record would silently derive an unrelated Platform key universe. Require the phrase to pass BIP39 validation before it can become a seed candidate; an invalid phrase is skipped like an unreadable one, so a pinned wallet fails closed. platformkeys_tests covers both the rejected invalid phrase and the unchanged valid-mnemonic path.
platform#4389 gained DPNS salt-contract docs, pub(crate) narrowing of the singular proto decoders, and aggregate-cap boundary tests. No FFI-surface changes; rust/platform suite passes 31/31 against the new rev.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants