Namespace Xrpl.Wallet
Classes
BatchSigningHelper
Helper methods for batch transaction signing operations. For general signer utilities, see SignerUtilities.
LoanSigningHelper
Helper for LoanSet multi-party signing (XLS-66d). LoanSet requires two signatures: the broker (Account) signs as the submitter (TxnSignature), and the borrower (Counterparty) provides a CounterpartySignature (inner STObject with SigningPubKey + TxnSignature).
Three signing patterns (analogous to Batch V1/V2/V3):
V1 — Automatic (both keys available):
var result = LoanSigningHelper.SignLoanSet(loanTx, brokerWallet, borrowerWallet);
await client.SubmitRequest(result.TxBlob);
V2 — Parallel (keys on separate devices, sign independently):
// Device A (borrower):
var counterpartySig = borrowerWallet.SignAsLoanCounterparty(preparedTxJson);
// Device B (broker):
var brokerSig = brokerWallet.Sign(preparedTxJson);
// Combiner:
var combined = LoanSigningHelper.CombineLoanSignatures(brokerSig.TxBlob, counterpartySig.TxBlob);
await client.SubmitRequest(combined);
V3 — Sequential (borrower signs first, passes to broker):
// Borrower signs, adds CounterpartySignature:
var withCounterparty = borrowerWallet.SignAsLoanCounterparty(preparedTxJson);
// Broker receives the partially signed blob, adds TxnSignature:
var final = LoanSigningHelper.BrokerSign(withCounterparty.TxBlob, brokerWallet);
await client.SubmitRequest(final.TxBlob);
Multisig borrower (Counterparty with a SignerList): each signer of the
borrower's list produces a portable Signer entry with the standard multisign
call, and the composer places them under CounterpartySignature.Signers
(rippled verifies them against the counterparty's SignerList over the same
multisign preimage as tx.Signers). Autofill with the signer count so the
fee covers them (rippled LoanSet::calculateBaseFee charges one base fee
per counterparty signer):
var prepared = LoanSigningHelper.PrepareForSigning(await client.Autofill(loanTx.ToDictionary(), signersCount: 2), brokerWallet);
var brokerPart = brokerWallet.Sign(prepared);
var part1 = signer1.Sign(prepared, multisign: true);
var part2 = signer2.Sign(prepared, multisign: true);
// ledger-driven routing (looks up the Counterparty's SignerList):
var composed = await client.ComposeSignatures(new[] { brokerPart.TxBlob, part1.TxBlob, part2.TxBlob });
// or offline, naming the borrower's signers:
var offline = LoanSigningHelper.CombineLoanSignatures(new[] { brokerPart.TxBlob, part1.TxBlob, part2.TxBlob }, new[] { signer1.ClassicAddress, signer2.ClassicAddress });
SignatureComposer
Composes a fully signed transaction from partially signed blobs (#43). Devices sign with whatever keys they hold — single main signature, sponsor or counterparty co-signature, or portable multisig Signer entries — and the composer routes everything into the right sections. Which section an entry belongs to is still decided here, by account, but it is no longer only the composer's business: since rippled's fixCleanup3_4_0 an entry in SponsorSignature.Signers or CounterpartySignature.Signers covers different bytes than one in tx.Signers, so the signer had to know its side already. It works that out from the transaction in every shape but one - see SignatureRole - and routing an entry into a section its signer did not sign for now produces a signature the node rejects rather than a portable one.
SignatureResult
Signer
SignerUtilities
Shared utilities for working with signers across multisign and batch signing operations. Contains common functionality used by Signer, BatchSigningHelper, and XrplWallet.
SignerUtilities.ByteArrayComparer
Comparer for byte arrays used in sorting by account ID.
SponsorSigningHelper
Helper for sponsored transaction signing (XLS-68). A sponsored transaction carries the common fields Sponsor and SponsorFlags (spfSponsorFee = 1, spfSponsorReserve = 2) and, when the sponsorship requires it, the sponsor's co-signature: SponsorSignature (inner STObject with SigningPubKey + TxnSignature over the same transaction, under the sponsor's own prefix).
Signing patterns (analogous to LoanSet broker/counterparty):
V1 — Automatic (both keys available):
var result = SponsorSigningHelper.SignSponsored(preparedTx, submitterWallet, sponsorWallet);
await client.SubmitRequest(result.TxBlob);
V2 — Parallel (keys on separate devices):
var sponsorSig = sponsorWallet.SignAsSponsor(preparedTx);
var submitterSig = submitterWallet.Sign(preparedTx);
var combined = SponsorSigningHelper.CombineSponsorSignatures(submitterSig.TxBlob, sponsorSig.TxBlob);
V3 — Sequential (sponsor signs first, passes to submitter):
var withSponsor = sponsorWallet.SignAsSponsor(preparedTx);
var final = SponsorSigningHelper.SubmitterSign(withSponsor.TxBlob, submitterWallet);
WalletSugar
WalletSugar.FaucetAccount
WalletSugar.FaucetNetwork
WalletSugar.FaucetWallet
WalletSugar.Funded
XChainAttestationSigner
Witness-side signing of XLS-38 bridge attestations. A witness that saw an
XChainCommit or XChainCreateAccountCommit on one chain attests it on the
other by submitting XChainAddClaimAttestation /
XChainAddAccountCreateAttestation carrying its public key and a signature over
the attested facts. The signed message is the canonical serialization of an STObject
holding exactly those facts (rippled AttestationClaim::message /
AttestationCreateAccount::message): no hash prefix, no transaction fields, so the
same bytes verify regardless of which account submits the attestation transaction.
XrplWallet
XummExtension
Extension methods for working with XRPL Secret Numbers format. Secret Numbers encode 16 bytes of entropy into 8 groups of 6 digits each, where 5 digits represent entropy and the 6th digit is a position-dependent checksum. This format is language-agnostic and allows real-time typo detection. See XLS-12d specification: https://github.com/XRPLF/XRPL-Standards/issues/15
Enums
SignatureRole
Which signature of a transaction a key is producing.