plugai_updsrv/deps/github.com/ledgerwatch/interfaces/execution/execution.proto

105 lines
3.1 KiB
Protocol Buffer

syntax = "proto3";
package execution;
import "types/types.proto";
option go_package = "./execution;execution";
enum ValidationStatus {
Success = 0; // State transition simulation is successful.
InvalidChain = 1; // State transition simulation is Unsuccessful.
TooFarAway = 2; // Chain hash is too far away from current chain head and unfeasible to validate.
MissingSegment = 3; // Chain segments are missing.
}
message ForkChoiceReceipt {
bool success = 1; // Forkchoice is either successful or unsuccessful.
types.H256 latestValidHash = 2; // Return latest valid hash in case of halt of execution.
}
// Result we receive after validation
message ValidationReceipt {
ValidationStatus validationStatus = 1;
types.H256 latestValidHash = 2;
optional types.H256 missingHash = 3; // The missing hash, in case we receive MissingSegment so that we can reverse download it.
};
message IsCanonicalResponse {
bool canonical = 1; // Whether hash is canonical or not.
}
// Header is an header for execution
message Header {
types.H256 parentHash = 1;
types.H160 coinbase = 2;
types.H256 stateRoot = 3;
types.H256 receiptRoot = 4;
types.H2048 logsBloom = 5;
types.H256 mixDigest = 6;
uint64 blockNumber = 7;
uint64 gasLimit = 8;
uint64 gasUsed = 9;
uint64 timestamp = 10;
uint64 nonce = 11;
bytes extraData = 12;
types.H256 difficulty = 13;
types.H256 blockHash = 14; // We keep this so that we can validate it
types.H256 ommerHash = 15;
types.H256 transactionHash = 16;
optional types.H256 baseFeePerGas = 17;
optional types.H256 withdrawalHash = 18;
}
// Body is a block body for execution
message BlockBody {
types.H256 blockHash = 1;
uint64 blockNumber = 2;
// Raw transactions in byte format.
repeated bytes transactions = 3;
repeated Header uncles = 4;
repeated types.Withdrawal withdrawals = 5;
}
message GetHeaderResponse {
optional Header header = 1;
}
message GetBodyResponse {
optional BlockBody body = 1;
}
message GetHeaderHashNumberResponse {
optional uint64 blockNumber = 1; // null if not found.
}
message GetSegmentRequest {
// Get headers/body by number or hash, invalid if none set.
optional uint64 blockNumber = 1;
optional types.H256 blockHash = 2;
}
message InsertHeadersRequest {
repeated Header headers = 1;
}
message InsertBodiesRequest {
repeated BlockBody bodies = 1;
}
message EmptyMessage {}
service Execution {
// Chain Putters.
rpc InsertHeaders(InsertHeadersRequest) returns(EmptyMessage);
rpc InsertBodies(InsertBodiesRequest) returns(EmptyMessage);
// Chain Validation and ForkChoice.
rpc ValidateChain(types.H256) returns(ValidationReceipt);
rpc UpdateForkChoice(types.H256) returns(ForkChoiceReceipt);
rpc AssembleBlock(EmptyMessage) returns(types.ExecutionPayload); // Builds on top of current head.
// Chain Getters.
rpc GetHeader(GetSegmentRequest) returns(GetHeaderResponse);
rpc GetBody(GetSegmentRequest) returns(GetBodyResponse);
rpc IsCanonicalHash(types.H256) returns(IsCanonicalResponse);
rpc GetHeaderHashNumber(types.H256) returns(GetHeaderHashNumberResponse);
}