syntax = "proto3";
package cdk_mint_wallet_v1;
// Operator management of the mint's on-chain wallet.
service WalletService {
// Creates a fresh address for operator deposits. Funds sent to this
// address are wallet capital and do not satisfy a mint quote.
rpc CreateDepositAddress(CreateDepositAddressRequest) returns (CreateDepositAddressResponse) {}
// Returns the wallet balance split by confirmation status.
rpc GetBalance(GetBalanceRequest) returns (GetBalanceResponse) {}
// Returns wallet transactions, newest first.
rpc ListTransactions(ListTransactionsRequest) returns (ListTransactionsResponse) {}
// Returns addresses that the wallet has revealed, in derivation order.
rpc ListAddresses(ListAddressesRequest) returns (ListAddressesResponse) {}
}
message CreateDepositAddressRequest {
}
message CreateDepositAddressResponse {
// Bitcoin address in network-specific display encoding.
string address = 1;
}
message GetBalanceRequest {
}
message GetBalanceResponse {
// Confirmed, spendable balance.
uint64 confirmed_sat = 1;
// Unconfirmed outputs created by a wallet transaction.
uint64 trusted_pending_sat = 2;
// Unconfirmed outputs received from an external wallet.
uint64 untrusted_pending_sat = 3;
// Confirmed coinbase outputs that are not mature yet.
uint64 immature_sat = 4;
// Confirmed plus trusted-pending balance.
uint64 trusted_spendable_sat = 5;
// All value currently visible to the wallet.
uint64 total_sat = 6;
// Bitcoin network used by the wallet, e.g. "bitcoin" or "regtest".
string network = 7;
// Height of the wallet's latest local chain checkpoint.
uint32 synced_height = 8;
}
message ListTransactionsRequest {
// Number of transactions to return. Zero uses the server default. The
// server rejects values above its maximum.
uint32 limit = 1;
// Number of transactions to skip from the newest transaction.
uint32 offset = 2;
}
message WalletTransaction {
// Transaction ID in display encoding.
string txid = 1;
// Inputs spent by this transaction, in input order.
repeated WalletTransactionInput inputs = 10;
// Non-change payment outputs in transaction output order.
repeated WalletTransactionOutput outputs = 9;
// Value sent to wallet scripts, including change.
uint64 received_sat = 2;
// Value consumed from wallet inputs.
uint64 sent_sat = 3;
// Transaction fee when all previous outputs are known.
optional uint64 fee_sat = 4;
// Net effect on the wallet balance.
sint64 balance_delta_sat = 5;
// Confirmation block height, when confirmed.
optional uint32 confirmation_height = 6;
// Confirmation block timestamp, when confirmed.
optional uint64 confirmation_time = 7;
// First-seen timestamp, when known for an unconfirmed transaction.
optional uint64 first_seen = 8;
}
message WalletTransactionInput {
// Previous outpoint transaction ID in display encoding.
string txid = 1;
// Previous outpoint output index.
uint32 vout = 2;
// Value of the previous output, when known to the wallet.
optional uint64 amount_sat = 3;
// Address of the previous output, when it belongs to the wallet.
optional string address = 4;
}
message WalletTransactionOutput {
// Transaction output index.
uint32 vout = 1;
// Bitcoin address in network-specific display encoding.
string address = 2;
// Output value in satoshis.
uint64 amount_sat = 3;
// Quote associated with this output, when managed by the payment backend.
optional string quote_id = 4;
}
message ListTransactionsResponse {
// Requested page of transactions.
repeated WalletTransaction transactions = 1;
// Total relevant transactions before pagination.
uint64 total = 2;
}
message ListAddressesRequest {
// Number of addresses to return. Zero uses the server default. The server
// rejects values above its maximum.
uint32 limit = 1;
// Number of addresses to skip.
uint32 offset = 2;
}
enum KeychainKind {
KEYCHAIN_KIND_UNSPECIFIED = 0;
KEYCHAIN_KIND_EXTERNAL = 1;
KEYCHAIN_KIND_INTERNAL = 2;
}
message WalletAddress {
// Bitcoin address in network-specific display encoding.
string address = 1;
// Descriptor keychain containing the address.
KeychainKind keychain = 2;
// Child derivation index.
uint32 derivation_index = 3;
// Whether the address has appeared in a wallet transaction.
bool used = 4;
// Total current unspent balance assigned to this address.
uint64 balance_sat = 5;
// Confirmed current unspent balance assigned to this address.
uint64 confirmed_balance_sat = 6;
}
message ListAddressesResponse {
// Requested page of revealed addresses.
repeated WalletAddress addresses = 1;
// Total revealed addresses before pagination.
uint64 total = 2;
}