Repository navigation
Conversation
…ning identity - Protocol field on GenerateKeyMessage/SignTxMessage; client CreateWalletWithProtocol - DklsMessage binary frame; signature covers route, recipient, sender, phase and payload - identity Sign/VerifyDklsMessage; keygen result carries the DKLs23 public key and chain code
- Session runs keygen/sign rounds; Service wires sessions to a node's pubsub, key store and peers - Router gives one wildcard subscription per node and buffers early bundles, so no peer-ready barrier - Per-recipient binary bundles, HD derivation for non-hardened paths, typed signatures - Behind the dkls build tag; make targets for the Rust library, tests and benchmarks
- Signing/keygen wrapper consumers publish DKLs23 requests to their own subjects - DklsConsumer handles verify, dedupe with TTL, result publishing and retry-later - DKLs23 signing runs concurrently; tss-lib keeps its serial handling - cmd/mpcium starts the backend through a dkls build-tag pair
- keygen-dkls and sign-dkls23 commands; keygen-dkls prints the wallet ID and waits for the DKLs23 result
- examples/dkls: keygen, sign with master and child key, verify both locally - benchmark/dklsvstss: in-process tss-lib vs DKLs23 benchmark - benchmark/results: report, CSV, chart and raw runs (1000 tx, VPS and local)
Key info lives in shared Consul while shares are local, so a sign request could reach a node that had not finished saving its share after keygen.
Opt-in via E2E_DKLS=1; needs an mpcium binary built with -tags dkls.
Rotates every share while keeping the public key and chain code. Refresh excludes signing per wallet so a sign never mixes old and new shares. Requests go through mpc:dkls:refresh and results arrive on the reshare result subject.
vietddude
force-pushed
the
feat/dkls23
branch
from
October 15, 2026 06:55
fc59448 to
2732566
Compare
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Adds DKLs23 as an opt-in threshold-ECDSA backend (secp256k1), selected per request with
types.ProtocolDkls23.dklsbuild tag (submodulethird_party/dkls23); the default build is unchanged.mpc:dkls:generate,mpc:dkls:sign,mpc:dkls:refresh; results reuse the existing result events (DKLSPubKey,DKLSChainCodeon keygen).DerivationPath) on sign.RefreshDkls): rotates every share, keeps the public key and chain code. All participants must be online.keygen-dkls,sign-dkls23), a runnable example, and a DKLs23 vs tss-lib comparison inbenchmark/results.Notes
master.third_party/dkls23points tofystack/DKLs23@17d3b91(adds theRefreshSessionbinding), already pushed todev.Test plan
go test -tags dkls ./pkg/mpc/dkls/... ./pkg/eventconsumer/... ./pkg/client/... ./pkg/types/...E2E_DKLS=1 go test -run TestDklsSigning ./e2e(3 nodes: keygen, sign, child-key sign, refresh, sign after refresh, refresh on an unknown wallet, refresh with a node offline), 3 runs in a rowmpciumwithout thedklstag, so the test skips there