Files
dshackle/proto/blockchain.proto
2021-12-08 19:36:13 -05:00

256 lines
6.0 KiB
Protocol Buffer

syntax = "proto3";
package emerald;
option java_package = "io.emeraldpay.api.proto";
import "common.proto";
service Blockchain {
rpc SubscribeHead (Chain) returns (stream ChainHead) {}
rpc SubscribeBalance (BalanceRequest) returns (stream AddressBalance) {}
rpc SubscribeTxStatus (TxStatusRequest) returns (stream TxStatus) {}
rpc GetBalance (BalanceRequest) returns (stream AddressBalance) {}
/**
* Fee Estimation service. The server tries to estimate a fair fee based on the last N blocks.
*/
rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse) {}
rpc NativeCall (NativeCallRequest) returns (stream NativeCallReplyItem) {}
rpc NativeSubscribe (NativeSubscribeRequest) returns (stream NativeSubscribeReplyItem) {}
rpc Describe (DescribeRequest) returns (DescribeResponse) {}
rpc SubscribeStatus (StatusRequest) returns (stream ChainStatus) {}
}
message NativeCallRequest {
ChainRef chain = 1;
repeated NativeCallItem items = 2;
Selector selector = 3;
int32 quorum = 4;
AvailabilityEnum min_availability = 5;
}
message NativeCallItem {
uint32 id = 1;
string method = 3;
bytes payload = 4;
}
message NativeCallReplyItem {
uint32 id = 1;
bool succeed = 2;
bytes payload = 3;
string errorMessage = 4;
}
message NativeSubscribeRequest {
ChainRef chain = 1;
string method = 2;
bytes payload = 3;
}
message NativeSubscribeReplyItem {
bytes payload = 1;
}
message ChainHead {
ChainRef chain = 1;
uint64 height = 2;
string block_id = 3;
uint64 timestamp = 4;
bytes weight = 5;
uint64 reorg = 6;
}
message TxStatusRequest {
ChainRef chain = 1;
string tx_id = 2;
uint32 confirmation_limit = 3;
}
message TxStatus {
string tx_id = 1;
bool broadcasted = 2;
bool mined = 3;
BlockInfo block = 4;
uint32 confirmations = 5;
}
message BalanceRequest {
Asset asset = 1;
AnyAddress address = 2;
bool include_utxo = 3;
}
message AddressBalance {
Asset asset = 1;
SingleAddress address = 2;
string balance = 3;
bool confirmed = 4;
repeated Utxo utxo = 5;
}
message Utxo {
string tx_id = 1;
uint64 index = 2;
string balance = 3;
bool spent = 4;
}
message DescribeRequest {
}
message DescribeResponse {
repeated DescribeChain chains = 1;
}
message DescribeChain {
ChainRef chain = 1;
ChainStatus status = 2;
repeated NodeDetails nodes = 3;
repeated string supportedMethods = 4;
repeated string excludedMethods = 5;
repeated Capabilities capabilities = 6;
}
message StatusRequest {
repeated ChainRef chains = 1;
}
message ChainStatus {
ChainRef chain = 1;
AvailabilityEnum availability = 2;
uint32 quorum = 3;
}
enum AvailabilityEnum {
AVAIL_UNKNOWN = 0;
AVAIL_OK = 1;
AVAIL_LAGGING = 2;
AVAIL_IMMATURE = 3;
AVAIL_SYNCING = 4;
AVAIL_UNAVAILABLE = 5;
}
message NodeDetails {
uint32 quorum = 1;
repeated Label labels = 2;
}
enum Capabilities {
CAP_NONE = 0;
CAP_CALLS = 1;
CAP_BALANCE = 2;
}
message Label {
string name = 1;
string value = 2;
}
message Selector {
oneof selector_type {
LabelSelector labelSelector = 1;
OrSelector orSelector = 2;
AndSelector andSelector = 3;
NotSelector notSelector = 4;
ExistsSelector existsSelector = 5;
}
}
message LabelSelector {
string name = 1;
repeated string value = 2;
}
message OrSelector {
repeated Selector selectors = 1;
}
message AndSelector {
repeated Selector selectors = 1;
}
message NotSelector {
Selector selector = 1;
}
message ExistsSelector {
string name = 1;
}
/**
* Request for Fee Estimation Service
*/
message EstimateFeeRequest {
// Target chain
ChainRef chain = 1;
// The way how the fee should be estimated
FeeEstimationMode mode = 2;
// How many blocks the server is supposed to use to estimate current fee. Note that the server may use value, depending on configuration
uint32 blocks = 3;
}
/**
* Responset for Fee Estimation Service
*/
message EstimateFeeResponse {
// May return different struct, depending on the blockchain
oneof fee_type {
// Standard Ethereum Fee, supported by majority of forks and by Ethereum Mainnet before EIP-1559
EthereumStdFees ethereumStd = 1;
// Ethereum Fee for EIP-1559 compatible forks
EthereumExtFees ethereumExtended = 2;
// Standard Bitcoin Fee
BitcoinStdFees bitcoinStd = 3;
}
}
/**
* The mode of how the fee must be estimated
*/
enum FeeEstimationMode {
INVALID = 0;
// Average over last transaction in each block
AVG_LAST = 1;
// Average over transaction 5th from the end in each block
AVG_T5 = 2;
// Average over transaction 20th from the end in each block
AVG_T20 = 3;
// Average over transaction 50th from the end in each block
AVG_T50 = 4;
// Minimal fee that would be accepted by every last block
MIN_ALWAYS = 5;
// Average over transaction in the middle of each block
AVG_MIDDLE = 6;
// Average over transaction in head of each block. Note that for Bitcoin it doesn't count COINBASE tx as top tx.
AVG_TOP = 7;
}
/**
* Standard Ethereum Fee, supported by majority of forks and by Ethereum Mainnet before EIP-1559
*/
message EthereumStdFees {
// Fee value in Wei
string fee = 1;
}
/**
* Ethereum Fee for EIP-1559 compatible forks
*/
message EthereumExtFees {
// Estimated fee that would be actually paid. I.e. it's the Base Fee + Priority Fee
string expect = 1;
// Priority Fee in Wei
string priority = 2;
// Max Fee value in Wei. Note that it only indicated current preference and actual Max may be significantly lower, depending on the usage scenario.
string max = 3;
}
/**
* Standard Bitcoin Fee
*/
message BitcoinStdFees {
// Fee in Satoshi per Kilobyte. Note that the actual fee calculation MUST divide it by 1024 at the last step to get a fair fee.
string satPerKb = 1;
}