Requesting a TSS Signature
The Threshold Signature Scheme (TSS) Signing Process enables users to request a BandChain TSS group to sign various types of messages in a secure and decentralized manner. This ensures that sensitive cryptographic operations, such as signing transactions, verifying oracle results, and price feed data aggregation, are performed without exposing private key material.
Requesting a Signature
To request a TSS signature, a user must submit a signing request on BandChain. The request can include one of the following SignatureOrder types:
OracleResultSignatureOrder
: Requests a signature for an oracle result within the oracle module.TextSignatureOrder
: Requests a signature for an arbitrary text message.FeedsSignatureOrder
: Requests a signature for price data within the feeds module.
Each signature order type serves a distinct purpose, ensuring secure and verifiable signing for various applications on BandChain.
// MsgRequestSignature is a request message used for initiating the signing process.
message MsgRequestSignature {
option (cosmos.msg.v1.signer) = "sender";
option (amino.name) = "bandtss/MsgRequestSignature";
option (gogoproto.goproto_getters) = false;
// content is the signature order of this request signature message.
google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "Content"];
// memo is the additional note of the message.
string memo = 2;
// fee_limit is the maximum tokens that will be paid for this request.
repeated cosmos.base.v1beta1.Coin fee_limit = 3
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"];
// sender is the requester of the signing process.
string sender = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
// OracleResultSignatureOrder defines a request id to request bandtss signature from the oracle result.
message OracleResultSignatureOrder {
option (gogoproto.goproto_getters) = false;
// request_id is oracle's unique identifier for this oracle request.
uint64 request_id = 1 [(gogoproto.customname) = "RequestID", (gogoproto.casttype) = "RequestID"];
// encoder is the mode of encoding oracle result signature order.
Encoder encoder = 3;
}
// FeedsSignatureOrder defines a general signature order for feed data.
message FeedsSignatureOrder {
option (gogoproto.goproto_getters) = false;
// signal_ids is the list of signal ids that require signatures.
repeated string signal_ids = 1 [(gogoproto.customname) = "SignalIDs"];
// encoder is the mode of encoding feeds signature order.
Encoder encoder = 2;
}
// TextSignatureOrder defines a general text signature order.
message TextSignatureOrder {
option (cosmos_proto.implements_interface) = "Content";
// message is the data that needs to be signed.
bytes message = 1 [(gogoproto.casttype) = "github.com/cometbft/cometbft/libs/bytes.HexBytes"];
}