syntax = "proto3";
package flow.access;
service AccessAPI {
// The following is copied from https://docs.onflow.org/access-api/
// You should also reference https://github.com/onflow/flow/blob/master/protobuf/flow/access/access.proto
rpc Ping(PingRequest) returns (PingResponse);
rpc GetLatestBlockHeader (GetLatestBlockHeaderRequest) returns (BlockHeaderResponse);
rpc GetBlockHeaderByID (GetBlockHeaderByIdRequest) returns (BlockHeaderResponse);
rpc GetBlockHeaderByHeight (GetBlockHeaderByHeightRequest) returns (BlockHeaderResponse);
rpc GetLatestBlock (GetLatestBlockRequest) returns (BlockResponse);
rpc GetBlockByID (GetBlockByIdRequest) returns (BlockResponse);
rpc GetBlockByHeight (GetBlockByHeightRequest) returns (BlockResponse);
rpc GetCollectionByID (GetCollectionByIdRequest) returns (CollectionResponse);
rpc SendTransaction (SendTransactionRequest) returns (SendTransactionResponse);
rpc GetTransaction (GetTransactionRequest) returns (TransactionResponse);
rpc GetTransactionResult (GetTransactionRequest) returns (TransactionResultResponse);
rpc GetAccountAtLatestBlock(GetAccountAtLatestBlockRequest) returns (AccountResponse);
rpc GetAccountAtBlockHeight(GetAccountAtBlockHeightRequest) returns (AccountResponse);
rpc ExecuteScriptAtLatestBlock (ExecuteScriptAtLatestBlockRequest) returns (ExecuteScriptResponse);
rpc ExecuteScriptAtBlockID (ExecuteScriptAtBlockIdRequest) returns (ExecuteScriptResponse);
rpc ExecuteScriptAtBlockHeight (ExecuteScriptAtBlockHeightRequest) returns (ExecuteScriptResponse);
rpc GetEventsForHeightRange(GetEventsForHeightRangeRequest) returns (EventsResponse);
rpc GetEventsForBlockIDs(GetEventsForBlockIdsRequest) returns (EventsResponse);
rpc GetNetworkParameters (GetNetworkParametersRequest) returns (GetNetworkParametersResponse);
rpc GetLatestProtocolStateSnapshot (GetLatestProtocolStateSnapshotRequest) returns (ProtocolStateSnapshotResponse);
rpc GetExecutionResultForBlockID(GetExecutionResultForBlockIdRequest) returns (ExecutionResultForBlockIdResponse);
}
// ping
message PingRequest {}
message PingResponse {}
// block headers
message BlockHeaderResponse {
BlockHeader block = 1;
}
message GetLatestBlockHeaderRequest {
bool is_sealed = 1;
}
message GetBlockHeaderByIdRequest {
bytes id = 1;
}
message GetBlockHeaderByHeightRequest {
uint64 height = 1;
}
// blocks
message BlockResponse {
Block block = 1;
}
message GetLatestBlockRequest {
bool is_sealed = 1;
}
message GetBlockByIdRequest {
bytes id = 1;
}
message GetBlockByHeightRequest {
uint64 height = 1;
}
// collections
message CollectionResponse {
Collection collection = 1;
}
message GetCollectionByIdRequest {
bytes id = 1;
}
// transactions
message SendTransactionResponse {
bytes id = 1;
}
message SendTransactionRequest {
Transaction transaction = 1;
}
message GetTransactionRequest {
bytes id = 1;
}
message TransactionResponse {
Transaction transaction = 1;
}
message TransactionResultResponse {
TransactionStatus status = 1;
uint32 status_code = 2;
string error_message = 3;
repeated Event events = 4;
}
// accounts
message AccountResponse {
Account account = 1;
}
message GetAccountAtLatestBlockRequest {
bytes address = 1;
}
message GetAccountAtBlockHeightRequest {
bytes address = 1;
uint64 block_height = 2;
}
// scripts
message ExecuteScriptResponse {
bytes value = 1;
}
message ExecuteScriptAtLatestBlockRequest {
bytes script = 1;
repeated bytes arguments = 2;
}
message ExecuteScriptAtBlockIdRequest {
bytes block_id = 1;
bytes script = 2;
repeated bytes arguments = 3;
}
message ExecuteScriptAtBlockHeightRequest {
uint64 block_height = 1;
bytes script = 2;
repeated bytes arguments = 3;
}
// events
message EventsResponse {
message Result {
bytes block_id = 1;
uint64 block_height = 2;
repeated Event events = 3;
Timestamp block_timestamp = 4;
}
repeated Result results = 1;
}
message GetEventsForHeightRangeRequest {
string type = 1;
uint64 start_height = 2;
uint64 end_height = 3;
}
message GetEventsForBlockIdsRequest {
string type = 1;
repeated bytes block_ids = 2;
}
// network parameters
message GetNetworkParametersResponse {
string chain_id = 1;
}
message GetNetworkParametersRequest {}
// protocol state
message ProtocolStateSnapshotResponse {
bytes serializedSnapshot = 1;
}
message GetLatestProtocolStateSnapshotRequest {}
// execution results
message ExecutionResultForBlockIdResponse {
ExecutionResult execution_result = 1;
}
message GetExecutionResultForBlockIdRequest {
bytes block_id = 1;
}
message Block {
bytes id = 1;
bytes parent_id = 2;
uint64 height = 3;
Timestamp timestamp = 4;
repeated CollectionGuarantee collection_guarantees = 5;
repeated BlockSeal block_seals = 6;
repeated bytes signatures = 7;
}
message BlockHeader {
bytes id = 1;
bytes parent_id = 2;
uint64 height = 3;
}
message BlockSeal {
bytes block_id = 1;
bytes execution_receipt_id = 2;
repeated bytes execution_receipt_signatures = 3;
repeated bytes result_approval_signatures = 4;
}
message Collection {
bytes id = 1;
repeated bytes transaction_ids = 2;
}
message CollectionGuarantee {
bytes collection_id = 1;
repeated bytes signatures = 2;
}
message Transaction {
bytes script = 1;
repeated bytes arguments = 2;
bytes reference_block_id = 3;
uint64 gas_limit = 4;
TransactionProposalKey proposal_key = 5;
bytes payer = 6;
repeated bytes authorizers = 7;
repeated TransactionSignature payload_signatures = 8;
repeated TransactionSignature envelope_signatures = 9;
}
message TransactionProposalKey {
bytes address = 1;
uint32 key_id = 2;
uint64 sequence_number = 3;
}
message TransactionSignature {
bytes address = 1;
uint32 key_id = 2;
bytes signature = 3;
}
enum TransactionStatus {
UNKNOWN = 0;
PENDING = 1;
FINALIZED = 2;
EXECUTED = 3;
SEALED = 4;
EXPIRED = 5;
}
message Account {
bytes address = 1;
uint64 balance = 2;
bytes code = 3;
repeated AccountKey keys = 4;
map<string, bytes> contracts = 5;
}
message AccountKey {
uint32 id = 1;
bytes public_key = 2;
uint32 sign_algo = 3;
uint32 hash_algo = 4;
uint32 weight = 5;
uint32 sequence_number = 6;
bool revoked = 7;
}
message Event {
string type = 1;
bytes transaction_id = 2;
uint32 transaction_index = 3;
uint32 event_index = 4;
bytes payload = 5;
}
message ExecutionResult {
bytes previous_result_id = 1;
bytes block_id = 2;
repeated Chunk chunks = 3;
repeated ServiceEvent service_events = 4;
}
message Chunk {
bytes start_state = 1;
bytes event_collection = 2;
bytes block_id = 3;
uint64 total_computation_used = 4;
uint64 number_of_transactions = 5;
uint64 index = 6;
bytes end_state = 7;
}
message ServiceEvent {
string type = 1;
bytes payload = 2;
}
message Timestamp {
// Represents seconds of UTC time since Unix epoch
// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
// 9999-12-31T23:59:59Z inclusive.
int64 seconds = 1;
// Non-negative fractions of a second at nanosecond resolution. Negative
// second values with fractions must still have non-negative nanos values
// that count forward in time. Must be from 0 to 999,999,999
// inclusive.
int32 nanos = 2;
}