feat: support multisig transfers - #15
Draft
cw35 wants to merge 9 commits into
Draft
Conversation
cw35
marked this pull request as draft
August 14, 2026 09:08
Contributor
Author
|
Follow-up self-review fixes in 541b134:
Verification rerun:
|
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
--sendersand--sender-thresholdsource flags--traceas create-or-join identity: create and sign a new transfer, or continue signing an existing oneCommands
mixin-cli transfer ... --trace ... --senders ... --sender-threshold ...mixin-cli transfer cancel ...(aliases:unlock,cancel-signature)mixin-cli transfer cancel-request --request ...mixin-cli safe transfer ... --trace ... --senders ... --sender-threshold ...mixin-cli safe transfer cancel --trace ...(aliases:unlock,cancel-signature)For legacy transfers, every signer supplies the same transfer fields because the legacy API has no lookup-by-trace endpoint. Existing Safe requests can be continued with
--tracealone.Test coverage
Added focused tests for deterministic signer ordering, exact-balance input selection, signed-output recovery, request and raw-transaction validation, malformed external UTXOs, duplicate/non-member signers, JSON receiver decoding, amount precision, and command registration.
Verification
go test ./...go test -race -vet=off ./...go vet ./cmd/safe ./cmd/transfergo buildplus CLI help smoke testsgit diff --check origin/master...HEADSelf-review also fixed a legacy output-selection TOCTOU race and a Safe create/read race before this PR was opened.
Documentation
README.md: documented legacy and Safe multisig transfer, join-signing, signature cancellation, and legacy request cancellation workflows.