mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* Add fee estimation to wallet * Add fee rate to kaspawallet parse * Update go version * Get rid of golint * Add RBF support to wallet * Fix bump_fee UTXO lookup and fix wrong change address * impl storage mass as per KIP9 * Use CalculateTransactionOverallMass where needed * Some fixes * Minor typos * Fix test * update version * BroadcastRBF -> BroadcastReplacement * rc3 * align proto files to only use camel case (fixed on RK as well) * Rename to FeePolicy and add MaxFee option + todo * apply max fee constrains * increase minChangeTarget to 10kas * fmt * Some fixes * fix description: maximum -> minimum * put min feerate check in the correct location * Fix calculateFeeLimits nil handling * Add validations to CLI flags * Change to rc6 * Add checkTransactionFeeRate * Add failed broadcast transactions on send error` * Fix estimateFee change value * Estimate fee correctly for --send-all * On estimateFee always assume that the recipient has ECDSA address * remove patch version --------- Co-authored-by: Michael Sutton <msutton@cs.huji.ac.il>
941 lines
25 KiB
Protocol Buffer
941 lines
25 KiB
Protocol Buffer
// RPC-related types. Request messages, response messages, and dependant types.
|
|
//
|
|
// Clients are expected to build RequestMessages and wrap them in KaspadMessage. (see messages.proto)
|
|
//
|
|
// Having received a RequestMessage, (wrapped in a KaspadMessage) the RPC server will respond with a
|
|
// ResponseMessage (likewise wrapped in a KaspadMessage) respective to the original RequestMessage.
|
|
//
|
|
// **IMPORTANT:** This API is a work in progress and is subject to break between versions.
|
|
//
|
|
syntax = "proto3";
|
|
package protowire;
|
|
|
|
option go_package = "github.com/kaspanet/kaspad/protowire";
|
|
|
|
// RPCError represents a generic non-internal error.
|
|
//
|
|
// Receivers of any ResponseMessage are expected to check whether its error field is not null.
|
|
message RPCError{
|
|
string message = 1;
|
|
}
|
|
|
|
message RpcBlock {
|
|
RpcBlockHeader header = 1;
|
|
repeated RpcTransaction transactions = 2;
|
|
RpcBlockVerboseData verboseData = 3;
|
|
}
|
|
|
|
message RpcBlockHeader {
|
|
uint32 version = 1;
|
|
repeated RpcBlockLevelParents parents = 12;
|
|
string hashMerkleRoot = 3;
|
|
string acceptedIdMerkleRoot = 4;
|
|
string utxoCommitment = 5;
|
|
int64 timestamp = 6;
|
|
uint32 bits = 7;
|
|
uint64 nonce = 8;
|
|
uint64 daaScore = 9;
|
|
string blueWork = 10;
|
|
string pruningPoint = 14;
|
|
uint64 blueScore = 13;
|
|
}
|
|
|
|
message RpcBlockLevelParents {
|
|
repeated string parentHashes = 1;
|
|
}
|
|
|
|
message RpcBlockVerboseData{
|
|
string hash = 1;
|
|
double difficulty = 11;
|
|
string selectedParentHash = 13;
|
|
repeated string transactionIds = 14;
|
|
bool isHeaderOnly = 15;
|
|
uint64 blueScore = 16;
|
|
repeated string childrenHashes = 17;
|
|
repeated string mergeSetBluesHashes = 18;
|
|
repeated string mergeSetRedsHashes = 19;
|
|
bool isChainBlock = 20;
|
|
}
|
|
|
|
message RpcTransaction {
|
|
uint32 version = 1;
|
|
repeated RpcTransactionInput inputs = 2;
|
|
repeated RpcTransactionOutput outputs = 3;
|
|
uint64 lockTime = 4;
|
|
string subnetworkId = 5;
|
|
uint64 gas = 6;
|
|
string payload = 8;
|
|
RpcTransactionVerboseData verboseData = 9;
|
|
}
|
|
|
|
message RpcTransactionInput {
|
|
RpcOutpoint previousOutpoint = 1;
|
|
string signatureScript = 2;
|
|
uint64 sequence = 3;
|
|
uint32 sigOpCount = 5;
|
|
RpcTransactionInputVerboseData verboseData = 4;
|
|
}
|
|
|
|
message RpcScriptPublicKey {
|
|
uint32 version = 1;
|
|
string scriptPublicKey = 2;
|
|
}
|
|
|
|
message RpcTransactionOutput {
|
|
uint64 amount = 1;
|
|
RpcScriptPublicKey scriptPublicKey = 2;
|
|
RpcTransactionOutputVerboseData verboseData = 3;
|
|
}
|
|
|
|
message RpcOutpoint {
|
|
string transactionId = 1;
|
|
uint32 index = 2;
|
|
}
|
|
|
|
message RpcUtxoEntry {
|
|
uint64 amount = 1;
|
|
RpcScriptPublicKey scriptPublicKey = 2;
|
|
uint64 blockDaaScore = 3;
|
|
bool isCoinbase = 4;
|
|
}
|
|
|
|
message RpcTransactionVerboseData{
|
|
string transactionId = 1;
|
|
string hash = 2;
|
|
uint64 mass = 4;
|
|
string blockHash = 12;
|
|
uint64 blockTime = 14;
|
|
}
|
|
|
|
message RpcTransactionInputVerboseData{
|
|
}
|
|
|
|
message RpcTransactionOutputVerboseData{
|
|
string scriptPublicKeyType = 5;
|
|
string scriptPublicKeyAddress = 6;
|
|
}
|
|
|
|
// GetCurrentNetworkRequestMessage requests the network kaspad is currently running against.
|
|
//
|
|
// Possible networks are: Mainnet, Testnet, Simnet, Devnet
|
|
message GetCurrentNetworkRequestMessage{
|
|
}
|
|
|
|
message GetCurrentNetworkResponseMessage{
|
|
string currentNetwork = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// SubmitBlockRequestMessage requests to submit a block into the DAG.
|
|
// Blocks are generally expected to have been generated using the getBlockTemplate call.
|
|
//
|
|
// See: GetBlockTemplateRequestMessage
|
|
message SubmitBlockRequestMessage{
|
|
RpcBlock block = 2;
|
|
bool allowNonDAABlocks = 3;
|
|
}
|
|
|
|
message SubmitBlockResponseMessage{
|
|
enum RejectReason {
|
|
NONE = 0;
|
|
BLOCK_INVALID = 1;
|
|
IS_IN_IBD = 2;
|
|
}
|
|
RejectReason rejectReason = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetBlockTemplateRequestMessage requests a current block template.
|
|
// Callers are expected to solve the block template and submit it using the submitBlock call
|
|
//
|
|
// See: SubmitBlockRequestMessage
|
|
message GetBlockTemplateRequestMessage{
|
|
// Which kaspa address should the coinbase block reward transaction pay into
|
|
string payAddress = 1;
|
|
string extraData = 2;
|
|
}
|
|
|
|
message GetBlockTemplateResponseMessage{
|
|
RpcBlock block = 3;
|
|
|
|
// Whether kaspad thinks that it's synced.
|
|
// Callers are discouraged (but not forbidden) from solving blocks when kaspad is not synced.
|
|
// That is because when kaspad isn't in sync with the rest of the network there's a high
|
|
// chance the block will never be accepted, thus the solving effort would have been wasted.
|
|
bool isSynced = 2;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NotifyBlockAddedRequestMessage registers this connection for blockAdded notifications.
|
|
//
|
|
// See: BlockAddedNotificationMessage
|
|
message NotifyBlockAddedRequestMessage{
|
|
}
|
|
|
|
message NotifyBlockAddedResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// BlockAddedNotificationMessage is sent whenever a blocks has been added (NOT accepted)
|
|
// into the DAG.
|
|
//
|
|
// See: NotifyBlockAddedRequestMessage
|
|
message BlockAddedNotificationMessage{
|
|
RpcBlock block = 3;
|
|
}
|
|
|
|
// GetPeerAddressesRequestMessage requests the list of known kaspad addresses in the
|
|
// current network. (mainnet, testnet, etc.)
|
|
message GetPeerAddressesRequestMessage{
|
|
}
|
|
|
|
message GetPeerAddressesResponseMessage{
|
|
repeated GetPeerAddressesKnownAddressMessage addresses = 1;
|
|
repeated GetPeerAddressesKnownAddressMessage bannedAddresses = 2;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetPeerAddressesKnownAddressMessage {
|
|
string Addr = 1;
|
|
}
|
|
|
|
// GetSelectedTipHashRequestMessage requests the hash of the current virtual's
|
|
// selected parent.
|
|
message GetSelectedTipHashRequestMessage{
|
|
}
|
|
|
|
message GetSelectedTipHashResponseMessage{
|
|
string selectedTipHash = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetMempoolEntryRequestMessage requests information about a specific transaction
|
|
// in the mempool.
|
|
message GetMempoolEntryRequestMessage{
|
|
// The transaction's TransactionID.
|
|
string txId = 1;
|
|
bool includeOrphanPool = 2;
|
|
bool filterTransactionPool = 3;
|
|
}
|
|
|
|
message GetMempoolEntryResponseMessage{
|
|
MempoolEntry entry = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetMempoolEntriesRequestMessage requests information about all the transactions
|
|
// currently in the mempool.
|
|
message GetMempoolEntriesRequestMessage{
|
|
bool includeOrphanPool = 1;
|
|
bool filterTransactionPool = 2;
|
|
}
|
|
|
|
message GetMempoolEntriesResponseMessage{
|
|
repeated MempoolEntry entries = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message MempoolEntry{
|
|
uint64 fee = 1;
|
|
RpcTransaction transaction = 3;
|
|
bool isOrphan = 4;
|
|
}
|
|
|
|
// GetConnectedPeerInfoRequestMessage requests information about all the p2p peers
|
|
// currently connected to this kaspad.
|
|
message GetConnectedPeerInfoRequestMessage{
|
|
}
|
|
|
|
message GetConnectedPeerInfoResponseMessage{
|
|
repeated GetConnectedPeerInfoMessage infos = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetConnectedPeerInfoMessage{
|
|
string id = 1;
|
|
string address = 2;
|
|
|
|
// How long did the last ping/pong exchange take
|
|
int64 lastPingDuration = 3;
|
|
|
|
// Whether this kaspad initiated the connection
|
|
bool isOutbound = 6;
|
|
int64 timeOffset = 7;
|
|
string userAgent = 8;
|
|
|
|
// The protocol version that this peer claims to support
|
|
uint32 advertisedProtocolVersion = 9;
|
|
|
|
// The timestamp of when this peer connected to this kaspad
|
|
int64 timeConnected = 10;
|
|
|
|
// Whether this peer is the IBD peer (if IBD is running)
|
|
bool isIbdPeer = 11;
|
|
}
|
|
|
|
// AddPeerRequestMessage adds a peer to kaspad's outgoing connection list.
|
|
// This will, in most cases, result in kaspad connecting to said peer.
|
|
message AddPeerRequestMessage{
|
|
string address = 1;
|
|
|
|
// Whether to keep attempting to connect to this peer after disconnection
|
|
bool isPermanent = 2;
|
|
}
|
|
|
|
message AddPeerResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// SubmitTransactionRequestMessage submits a transaction to the mempool
|
|
message SubmitTransactionRequestMessage{
|
|
RpcTransaction transaction = 1;
|
|
bool allowOrphan = 2;
|
|
}
|
|
|
|
message SubmitTransactionResponseMessage{
|
|
// The transaction ID of the submitted transaction
|
|
string transactionId = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NotifyVirtualSelectedParentChainChangedRequestMessage registers this connection for virtualSelectedParentChainChanged notifications.
|
|
//
|
|
// See: VirtualSelectedParentChainChangedNotificationMessage
|
|
message NotifyVirtualSelectedParentChainChangedRequestMessage{
|
|
bool includeAcceptedTransactionIds = 1;
|
|
}
|
|
|
|
message NotifyVirtualSelectedParentChainChangedResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// VirtualSelectedParentChainChangedNotificationMessage is sent whenever the DAG's selected parent
|
|
// chain had changed.
|
|
//
|
|
// See: NotifyVirtualSelectedParentChainChangedRequestMessage
|
|
message VirtualSelectedParentChainChangedNotificationMessage{
|
|
// The chain blocks that were removed, in high-to-low order
|
|
repeated string removedChainBlockHashes = 1;
|
|
|
|
// The chain blocks that were added, in low-to-high order
|
|
repeated string addedChainBlockHashes = 3;
|
|
|
|
// Will be filled only if `includeAcceptedTransactionIds = true` in the notify request.
|
|
repeated AcceptedTransactionIds acceptedTransactionIds = 2;
|
|
}
|
|
|
|
// GetBlockRequestMessage requests information about a specific block
|
|
message GetBlockRequestMessage{
|
|
// The hash of the requested block
|
|
string hash = 1;
|
|
|
|
// Whether to include transaction data in the response
|
|
bool includeTransactions = 3;
|
|
}
|
|
|
|
message GetBlockResponseMessage{
|
|
RpcBlock block = 3;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetSubnetworkRequestMessage requests information about a specific subnetwork
|
|
//
|
|
// Currently unimplemented
|
|
message GetSubnetworkRequestMessage{
|
|
string subnetworkId = 1;
|
|
}
|
|
|
|
message GetSubnetworkResponseMessage{
|
|
uint64 gasLimit = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetVirtualSelectedParentChainFromBlockRequestMessage requests the virtual selected
|
|
// parent chain from some startHash to this kaspad's current virtual
|
|
message GetVirtualSelectedParentChainFromBlockRequestMessage{
|
|
string startHash = 1;
|
|
bool includeAcceptedTransactionIds = 2;
|
|
}
|
|
|
|
message AcceptedTransactionIds{
|
|
string acceptingBlockHash = 1;
|
|
repeated string acceptedTransactionIds = 2;
|
|
}
|
|
|
|
message GetVirtualSelectedParentChainFromBlockResponseMessage{
|
|
// The chain blocks that were removed, in high-to-low order
|
|
repeated string removedChainBlockHashes = 1;
|
|
|
|
// The chain blocks that were added, in low-to-high order
|
|
repeated string addedChainBlockHashes = 3;
|
|
|
|
// The transactions accepted by each block in addedChainBlockHashes.
|
|
// Will be filled only if `includeAcceptedTransactionIds = true` in the request.
|
|
repeated AcceptedTransactionIds acceptedTransactionIds = 2;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetBlocksRequestMessage requests blocks between a certain block lowHash up to this
|
|
// kaspad's current virtual.
|
|
message GetBlocksRequestMessage{
|
|
string lowHash = 1;
|
|
bool includeBlocks = 2;
|
|
bool includeTransactions = 3;
|
|
}
|
|
|
|
message GetBlocksResponseMessage{
|
|
repeated string blockHashes = 4;
|
|
repeated RpcBlock blocks = 3;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetBlockCountRequestMessage requests the current number of blocks in this kaspad.
|
|
// Note that this number may decrease as pruning occurs.
|
|
message GetBlockCountRequestMessage{
|
|
}
|
|
|
|
message GetBlockCountResponseMessage{
|
|
uint64 blockCount = 1;
|
|
uint64 headerCount = 2;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetBlockDagInfoRequestMessage requests general information about the current state
|
|
// of this kaspad's DAG.
|
|
message GetBlockDagInfoRequestMessage{
|
|
}
|
|
|
|
message GetBlockDagInfoResponseMessage{
|
|
string networkName = 1;
|
|
uint64 blockCount = 2;
|
|
uint64 headerCount = 3;
|
|
repeated string tipHashes = 4;
|
|
double difficulty = 5;
|
|
int64 pastMedianTime = 6;
|
|
repeated string virtualParentHashes = 7;
|
|
string pruningPointHash = 8;
|
|
uint64 virtualDaaScore = 9;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message ResolveFinalityConflictRequestMessage{
|
|
string finalityBlockHash = 1;
|
|
}
|
|
|
|
message ResolveFinalityConflictResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message NotifyFinalityConflictsRequestMessage{
|
|
}
|
|
|
|
message NotifyFinalityConflictsResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message FinalityConflictNotificationMessage{
|
|
string violatingBlockHash = 1;
|
|
}
|
|
|
|
message FinalityConflictResolvedNotificationMessage{
|
|
string finalityBlockHash = 1;
|
|
}
|
|
|
|
// ShutDownRequestMessage shuts down this kaspad.
|
|
message ShutDownRequestMessage{
|
|
}
|
|
|
|
message ShutDownResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetHeadersRequestMessage requests headers between the given startHash and the
|
|
// current virtual, up to the given limit.
|
|
message GetHeadersRequestMessage{
|
|
string startHash = 1;
|
|
uint64 limit = 2;
|
|
bool isAscending = 3;
|
|
}
|
|
|
|
message GetHeadersResponseMessage{
|
|
repeated string headers = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NotifyUtxosChangedRequestMessage registers this connection for utxoChanged notifications
|
|
// for the given addresses.
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
//
|
|
// See: UtxosChangedNotificationMessage
|
|
message NotifyUtxosChangedRequestMessage {
|
|
repeated string addresses = 1; // Leave empty to get all updates
|
|
}
|
|
|
|
message NotifyUtxosChangedResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// UtxosChangedNotificationMessage is sent whenever the UTXO index had been updated.
|
|
//
|
|
// See: NotifyUtxosChangedRequestMessage
|
|
message UtxosChangedNotificationMessage {
|
|
repeated UtxosByAddressesEntry added = 1;
|
|
repeated UtxosByAddressesEntry removed = 2;
|
|
}
|
|
|
|
message UtxosByAddressesEntry {
|
|
string address = 1;
|
|
RpcOutpoint outpoint = 2;
|
|
RpcUtxoEntry utxoEntry = 3;
|
|
}
|
|
|
|
// StopNotifyingUtxosChangedRequestMessage unregisters this connection for utxoChanged notifications
|
|
// for the given addresses.
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
//
|
|
// See: UtxosChangedNotificationMessage
|
|
message StopNotifyingUtxosChangedRequestMessage {
|
|
repeated string addresses = 1;
|
|
}
|
|
|
|
message StopNotifyingUtxosChangedResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetUtxosByAddressesRequestMessage requests all current UTXOs for the given kaspad addresses
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
message GetUtxosByAddressesRequestMessage {
|
|
repeated string addresses = 1;
|
|
}
|
|
|
|
message GetUtxosByAddressesResponseMessage {
|
|
repeated UtxosByAddressesEntry entries = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetBalanceByAddressRequest returns the total balance in unspent transactions towards a given address
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
message GetBalanceByAddressRequestMessage {
|
|
string address = 1;
|
|
}
|
|
|
|
message GetBalanceByAddressResponseMessage {
|
|
uint64 balance = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetBalancesByAddressesRequestMessage {
|
|
repeated string addresses = 1;
|
|
}
|
|
|
|
message BalancesByAddressEntry{
|
|
string address = 1;
|
|
uint64 balance = 2;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetBalancesByAddressesResponseMessage {
|
|
repeated BalancesByAddressEntry entries = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetVirtualSelectedParentBlueScoreRequestMessage requests the blue score of the current selected parent
|
|
// of the virtual block.
|
|
message GetVirtualSelectedParentBlueScoreRequestMessage {
|
|
}
|
|
|
|
message GetVirtualSelectedParentBlueScoreResponseMessage {
|
|
uint64 blueScore = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NotifyVirtualSelectedParentBlueScoreChangedRequestMessage registers this connection for
|
|
// virtualSelectedParentBlueScoreChanged notifications.
|
|
//
|
|
// See: VirtualSelectedParentBlueScoreChangedNotificationMessage
|
|
message NotifyVirtualSelectedParentBlueScoreChangedRequestMessage {
|
|
}
|
|
|
|
message NotifyVirtualSelectedParentBlueScoreChangedResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// VirtualSelectedParentBlueScoreChangedNotificationMessage is sent whenever the blue score
|
|
// of the virtual's selected parent changes.
|
|
//
|
|
// See NotifyVirtualSelectedParentBlueScoreChangedRequestMessage
|
|
message VirtualSelectedParentBlueScoreChangedNotificationMessage {
|
|
uint64 virtualSelectedParentBlueScore = 1;
|
|
}
|
|
|
|
// NotifyVirtualDaaScoreChangedRequestMessage registers this connection for
|
|
// virtualDaaScoreChanged notifications.
|
|
//
|
|
// See: VirtualDaaScoreChangedNotificationMessage
|
|
message NotifyVirtualDaaScoreChangedRequestMessage {
|
|
}
|
|
|
|
message NotifyVirtualDaaScoreChangedResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// VirtualDaaScoreChangedNotificationMessage is sent whenever the DAA score
|
|
// of the virtual changes.
|
|
//
|
|
// See NotifyVirtualDaaScoreChangedRequestMessage
|
|
message VirtualDaaScoreChangedNotificationMessage {
|
|
uint64 virtualDaaScore = 1;
|
|
}
|
|
|
|
// NotifyPruningPointUTXOSetOverrideRequestMessage registers this connection for
|
|
// pruning point UTXO set override notifications.
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
//
|
|
// See: NotifyPruningPointUTXOSetOverrideResponseMessage
|
|
message NotifyPruningPointUTXOSetOverrideRequestMessage {
|
|
}
|
|
|
|
|
|
message NotifyPruningPointUTXOSetOverrideResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// PruningPointUTXOSetOverrideNotificationMessage is sent whenever the UTXO index
|
|
// resets due to pruning point change via IBD.
|
|
//
|
|
// See NotifyPruningPointUTXOSetOverrideRequestMessage
|
|
message PruningPointUTXOSetOverrideNotificationMessage {
|
|
}
|
|
|
|
// StopNotifyingPruningPointUTXOSetOverrideRequestMessage unregisters this connection for
|
|
// pruning point UTXO set override notifications.
|
|
//
|
|
// This call is only available when this kaspad was started with `--utxoindex`
|
|
//
|
|
// See: PruningPointUTXOSetOverrideNotificationMessage
|
|
message StopNotifyingPruningPointUTXOSetOverrideRequestMessage {
|
|
}
|
|
|
|
message StopNotifyingPruningPointUTXOSetOverrideResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// BanRequestMessage bans the given ip.
|
|
message BanRequestMessage{
|
|
string ip = 1;
|
|
}
|
|
|
|
message BanResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// UnbanRequestMessage unbans the given ip.
|
|
message UnbanRequestMessage{
|
|
string ip = 1;
|
|
}
|
|
|
|
message UnbanResponseMessage{
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// GetInfoRequestMessage returns info about the node.
|
|
message GetInfoRequestMessage{
|
|
}
|
|
|
|
message GetInfoResponseMessage{
|
|
string p2pId = 1;
|
|
uint64 mempoolSize = 2;
|
|
string serverVersion = 3;
|
|
bool isUtxoIndexed = 4;
|
|
bool isSynced = 5;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message EstimateNetworkHashesPerSecondRequestMessage{
|
|
uint32 windowSize = 1;
|
|
string startHash = 2;
|
|
}
|
|
|
|
message EstimateNetworkHashesPerSecondResponseMessage{
|
|
uint64 networkHashesPerSecond = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NotifyNewBlockTemplateRequestMessage registers this connection for
|
|
// NewBlockTemplate notifications.
|
|
//
|
|
// See: NewBlockTemplateNotificationMessage
|
|
message NotifyNewBlockTemplateRequestMessage {
|
|
}
|
|
|
|
message NotifyNewBlockTemplateResponseMessage {
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// NewBlockTemplateNotificationMessage is sent whenever a new updated block template is
|
|
// available for miners.
|
|
//
|
|
// See NotifyNewBlockTemplateRequestMessage
|
|
message NewBlockTemplateNotificationMessage {
|
|
}
|
|
|
|
message MempoolEntryByAddress{
|
|
string address = 1;
|
|
repeated MempoolEntry sending = 2;
|
|
repeated MempoolEntry receiving = 3;
|
|
}
|
|
|
|
message GetMempoolEntriesByAddressesRequestMessage{
|
|
repeated string addresses = 1;
|
|
bool includeOrphanPool = 2;
|
|
bool filterTransactionPool = 3;
|
|
}
|
|
|
|
message GetMempoolEntriesByAddressesResponseMessage{
|
|
repeated MempoolEntryByAddress entries = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetCoinSupplyRequestMessage{
|
|
}
|
|
|
|
message GetCoinSupplyResponseMessage{
|
|
uint64 maxSompi = 1; // note: this is a hard coded maxSupply, actual maxSupply is expected to deviate by upto -5%, but cannot be measured exactly.
|
|
uint64 circulatingSompi = 2;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message PingRequestMessage{
|
|
}
|
|
|
|
message PingResponseMessage { RPCError error = 1000; }
|
|
|
|
message ProcessMetrics {
|
|
uint64 residentSetSize = 1;
|
|
uint64 virtualMemorySize = 2;
|
|
uint32 coreNum = 3;
|
|
float cpuUsage = 4;
|
|
uint32 fdNum = 5;
|
|
uint64 diskIoReadBytes = 6;
|
|
uint64 diskIoWriteBytes = 7;
|
|
float diskIoReadPerSec = 8;
|
|
float diskIoWritePerSec = 9;
|
|
}
|
|
|
|
message ConnectionMetrics {
|
|
uint32 borshLiveConnections = 31;
|
|
uint64 borshConnectionAttempts = 32;
|
|
uint64 borshHandshakeFailures = 33;
|
|
|
|
uint32 jsonLiveConnections = 41;
|
|
uint64 jsonConnectionAttempts = 42;
|
|
uint64 jsonHandshakeFailures = 43;
|
|
|
|
uint32 activePeers = 51;
|
|
}
|
|
|
|
message BandwidthMetrics {
|
|
uint64 borshBytesTx = 61;
|
|
uint64 borshBytesRx = 62;
|
|
uint64 jsonBytesTx = 63;
|
|
uint64 jsonBytesRx = 64;
|
|
uint64 grpcP2pBytesTx = 65;
|
|
uint64 grpcP2pBytesRx = 66;
|
|
uint64 grpcUserBytesTx = 67;
|
|
uint64 grpcUserBytesRx = 68;
|
|
}
|
|
|
|
message ConsensusMetrics {
|
|
uint64 blocksSubmitted = 1;
|
|
uint64 headerCounts = 2;
|
|
uint64 depCounts = 3;
|
|
uint64 bodyCounts = 4;
|
|
uint64 txsCounts = 5;
|
|
uint64 chainBlockCounts = 6;
|
|
uint64 massCounts = 7;
|
|
|
|
uint64 blockCount = 11;
|
|
uint64 headerCount = 12;
|
|
uint64 mempoolSize = 13;
|
|
uint32 tipHashesCount = 14;
|
|
double difficulty = 15;
|
|
uint64 pastMedianTime = 16;
|
|
uint32 virtualParentHashesCount = 17;
|
|
uint64 virtualDaaScore = 18;
|
|
}
|
|
|
|
message StorageMetrics { uint64 storageSizeBytes = 1; }
|
|
|
|
message GetConnectionsRequestMessage { bool includeProfileData = 1; }
|
|
|
|
message ConnectionsProfileData {
|
|
double cpuUsage = 1;
|
|
uint64 memoryUsage = 2;
|
|
}
|
|
|
|
message GetConnectionsResponseMessage {
|
|
uint32 clients = 1;
|
|
uint32 peers = 2;
|
|
ConnectionsProfileData profileData = 3;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetSystemInfoRequestMessage {}
|
|
|
|
message GetSystemInfoResponseMessage {
|
|
string version = 1;
|
|
string systemId = 2;
|
|
string gitHash = 3;
|
|
uint32 coreNum = 4;
|
|
uint64 totalMemory = 5;
|
|
uint32 fdLimit = 6;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetMetricsRequestMessage {
|
|
bool processMetrics = 1;
|
|
bool connectionMetrics = 2;
|
|
bool bandwidthMetrics = 3;
|
|
bool consensusMetrics = 4;
|
|
bool storageMetrics = 5;
|
|
bool customMetrics = 6;
|
|
}
|
|
|
|
message GetMetricsResponseMessage {
|
|
uint64 serverTime = 1;
|
|
ProcessMetrics processMetrics = 11;
|
|
ConnectionMetrics connectionMetrics = 12;
|
|
BandwidthMetrics bandwidthMetrics = 13;
|
|
ConsensusMetrics consensusMetrics = 14;
|
|
StorageMetrics storageMetrics = 15;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetServerInfoRequestMessage {}
|
|
|
|
message GetServerInfoResponseMessage {
|
|
uint32 rpcApiVersion = 1;
|
|
uint32 rpcApiRevision = 2;
|
|
string serverVersion = 3;
|
|
string networkId = 4;
|
|
bool hasUtxoIndex = 5;
|
|
bool isSynced = 6;
|
|
uint64 virtualDaaScore = 7;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetSyncStatusRequestMessage {}
|
|
|
|
message GetSyncStatusResponseMessage {
|
|
bool isSynced = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetDaaScoreTimestampEstimateRequestMessage {
|
|
repeated uint64 daaScores = 1;
|
|
}
|
|
|
|
message GetDaaScoreTimestampEstimateResponseMessage{
|
|
repeated uint64 timestamps = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message RpcFeerateBucket {
|
|
// Fee/mass of a transaction in `sompi/gram` units
|
|
double feerate = 1;
|
|
double estimatedSeconds = 2;
|
|
}
|
|
|
|
// Data required for making fee estimates.
|
|
//
|
|
// Feerate values represent fee/mass of a transaction in `sompi/gram` units.
|
|
// Given a feerate value recommendation, calculate the required fee by
|
|
// taking the transaction mass and multiplying it by feerate: `fee = feerate *
|
|
// mass(tx)`
|
|
message RpcFeeEstimate {
|
|
// Top-priority feerate bucket. Provides an estimation of the feerate required
|
|
// for sub-second DAG inclusion.
|
|
RpcFeerateBucket priority_bucket = 1;
|
|
|
|
// A vector of *normal* priority feerate values. The first value of this
|
|
// vector is guaranteed to exist and provide an estimation for sub-*minute*
|
|
// DAG inclusion. All other values will have shorter estimation times than all
|
|
// `lowBuckets` values. Therefor by chaining `[priority] | normal | low` and
|
|
// interpolating between them, one can compose a complete feerate function on
|
|
// the client side. The API makes an effort to sample enough "interesting"
|
|
// points on the feerate-to-time curve, so that the interpolation is
|
|
// meaningful.
|
|
repeated RpcFeerateBucket normalBuckets = 2;
|
|
|
|
// A vector of *low* priority feerate values. The first value of this vector
|
|
// is guaranteed to exist and provide an estimation for sub-*hour* DAG
|
|
// inclusion.
|
|
repeated RpcFeerateBucket lowBuckets = 3;
|
|
}
|
|
|
|
message RpcFeeEstimateVerboseExperimentalData {
|
|
uint64 mempoolReadyTransactionsCount = 1;
|
|
uint64 mempoolReadyTransactionsTotalMass = 2;
|
|
uint64 networkMassPerSecond = 3;
|
|
|
|
double nextBlockTemplateFeerateMin = 11;
|
|
double nextBlockTemplateFeerateMedian = 12;
|
|
double nextBlockTemplateFeerateMax = 13;
|
|
}
|
|
|
|
message GetFeeEstimateRequestMessage {}
|
|
|
|
message GetFeeEstimateResponseMessage {
|
|
RpcFeeEstimate estimate = 1;
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetFeeEstimateExperimentalRequestMessage { bool verbose = 1; }
|
|
|
|
message GetFeeEstimateExperimentalResponseMessage {
|
|
RpcFeeEstimate estimate = 1;
|
|
RpcFeeEstimateVerboseExperimentalData verbose = 2;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
message GetCurrentBlockColorRequestMessage { string hash = 1; }
|
|
|
|
message GetCurrentBlockColorResponseMessage {
|
|
bool blue = 1;
|
|
|
|
RPCError error = 1000;
|
|
}
|
|
|
|
// SubmitTransactionReplacementRequestMessage submits a transaction to the
|
|
// mempool, applying a mandatory Replace by Fee policy
|
|
message SubmitTransactionReplacementRequestMessage {
|
|
RpcTransaction transaction = 1;
|
|
}
|
|
|
|
message SubmitTransactionReplacementResponseMessage {
|
|
// The transaction ID of the submitted transaction
|
|
string transactionId = 1;
|
|
|
|
// The previous transaction replaced in the mempool by the newly submitted one
|
|
RpcTransaction replacedTransaction = 2;
|
|
|
|
RPCError error = 1000;
|
|
} |