syntax = "proto3"; package cash.z.wallet.sdk.rpc; option go_package = "walletrpc"; import "compact_formats.proto"; // A BlockID message contains identifiers to select a block: a height or a // hash. If the hash is present it takes precedence. message BlockID { uint64 height = 1; bytes hash = 2; } // BlockRange technically allows ranging from hash to hash etc but this is not // currently intended for support, though there is no reason you couldn't do // it. Further permutations are left as an exercise. message BlockRange { BlockID start = 1; BlockID end = 2; } // A TxFilter contains the information needed to identify a particular // transaction: either a block and an index, or a direct transaction hash. message TxFilter { BlockID block = 1; uint64 index = 2; bytes hash = 3; } // RawTransaction contains the complete transaction data. message RawTransaction { bytes data = 1; } message SendResponse { int32 errorCode = 1; string errorMessage = 2; } // Empty placeholder. Someday we may want to specify e.g. a particular chain fork. message ChainSpec {} message Empty {} message LightdInfo { string version = 1; string vendor = 2; bool taddrSupport = 3; } message TransparentAddress { string address = 1; } message TransparentAddressBlockFilter { string address = 1; BlockRange range = 2; } message Utxo { TransparentAddress address = 1; bytes txid = 2; uint64 outputIndex = 3; bytes script = 4; uint64 value = 5; uint64 height = 6; } service CompactTxStreamer { // Compact Blocks rpc GetLatestBlock(ChainSpec) returns (BlockID) {} rpc GetBlock(BlockID) returns (CompactBlock) {} rpc GetBlockRange(BlockRange) returns (stream CompactBlock) {} // Transactions rpc GetTransaction(TxFilter) returns (RawTransaction) {} rpc SendTransaction(RawTransaction) returns (SendResponse) {} // t-Address support rpc GetUtxos(TransparentAddress) returns (stream Utxo) {} rpc GetAddressTxids(TransparentAddressBlockFilter) returns (stream RawTransaction) {} // Misc rpc GetLightdInfo(Empty) returns (LightdInfo) {} }