syntax = "proto3"; import "types/types.proto"; package remote; option go_package = "./remote;remote"; service ETHBACKEND { rpc Etherbase(EtherbaseRequest) returns (EtherbaseReply); rpc NetVersion(NetVersionRequest) returns (NetVersionReply); // ProtocolVersion returns the Ethereum protocol version number (e.g. 66 for ETH66). rpc ProtocolVersion(ProtocolVersionRequest) returns (ProtocolVersionReply); // ClientVersion returns the Ethereum client version string using node name convention (e.g. TurboGeth/v2021.03.2-alpha/Linux). rpc ClientVersion(ClientVersionRequest) returns (ClientVersionReply); rpc Subscribe(SubscribeRequest) returns (stream SubscribeReply); // GetWork returns a work package for external miner. // // The work package consists of 3 strings: // result[0] - 32 bytes hex encoded current block header pow-hash // result[1] - 32 bytes hex encoded seed hash used for DAG // result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty // result[3] - hex encoded block number rpc GetWork(GetWorkRequest) returns (GetWorkReply); // SubmitWork can be used by external miner to submit their POW solution. // It returns an indication if the work was accepted. // Note either an invalid solution, a stale work a non-existent work will return false. rpc SubmitWork(SubmitWorkRequest) returns (SubmitWorkReply); // SubmitHashRate can be used for remote miners to submit their hash rate. // This enables the node to report the combined hash rate of all miners // which submit work through this node. // // It accepts the miner hash rate and an identifier which must be unique // between nodes. rpc SubmitHashRate(SubmitHashRateRequest) returns (SubmitHashRateReply); // GetHashRate returns the current hashrate for local CPU miner and remote miner. rpc GetHashRate(GetHashRateRequest) returns (GetHashRateReply); // Mining returns an indication if this node is currently mining and it's mining configuration rpc Mining(MiningRequest) returns (MiningReply); } enum Event { HEADER = 0; PENDING_LOGS = 1; PENDING_BLOCK = 2; } message EtherbaseRequest {} message EtherbaseReply { types.H160 address = 1; } message NetVersionRequest {} message NetVersionReply { uint64 id = 1; } message ProtocolVersionRequest {} message ProtocolVersionReply { uint64 id = 1; } message ClientVersionRequest {} message ClientVersionReply { string nodeName = 1; } message SubscribeRequest { Event type = 1; } message SubscribeReply { Event type = 1; bytes data = 2; // serialized data } message GetWorkRequest {} message GetWorkReply { string headerHash = 1; // 32 bytes hex encoded current block header pow-hash string seedHash = 2; // 32 bytes hex encoded seed hash used for DAG string target = 3; // 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty string blockNumber = 4; // hex encoded block number } message SubmitWorkRequest { bytes blockNonce = 1; bytes powHash = 2; bytes digest = 3; } message SubmitWorkReply { bool ok = 1; } message SubmitHashRateRequest { uint64 rate = 1; bytes id = 2; } message SubmitHashRateReply { bool ok = 1; } message GetHashRateRequest {} message GetHashRateReply { uint64 hashRate = 1; } message MiningRequest {} message MiningReply { bool enabled = 1; bool running = 2; }