add documentation for lightwalletd APIs and data types

This commit is contained in:
Larry Ruane 2020-02-26 09:36:55 -07:00 committed by Larry Ruane
parent 48f4de0efb
commit 40f9dab995
8 changed files with 123 additions and 119 deletions

13
.gitignore vendored
View File

@ -1,8 +1,5 @@
*.conf
*.config
*.log
*.sqlite
*.pem
*.key
*.elf
coverage.*
server
server.log
coverage.out
test-log
lwd-api.html

View File

@ -14,9 +14,9 @@ GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v '*_test.go'
GO_TEST_FILES := $(shell find . -name '*_test.go' -type f | rev | cut -d "/" -f2- | rev | sort -u)
GO_BUILD_FILES := $(shell find . -name 'main.go')
.PHONY: all dep build clean test coverage coverhtml lint
.PHONY: all dep build clean test coverage coverhtml lint doc
all: build
all: build doc
# Lint golang files
lint:
@ -52,8 +52,10 @@ coverage_html: coverage
go tool cover -html=coverage.out
# Generate documents
docs:
@echo "Generating docs..."
doc: lwd-api.html
lwd-api.html: walletrpc/compact_formats.proto walletrpc/service.proto
./docgen.sh $^ >lwd-api.html
# Generate docker image
docker_img:

23
docgen.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
#
# read argument files, construct simple html
echo '<html>'
echo '<head>'
echo '<title>Lightwalletd reference API</title>'
echo '</head>'
echo '<body>'
echo '<h1>Lightwalletd API reference</h1>'
for f
do
echo "<h2>$f</h2>"
echo '<pre>'
# list of reserved words https://developers.google.com/protocol-buffers/docs/proto3
sed <$f '
s/\/\/.*/<font color="grey">&<\/font>/
s/\(^\|[^a-zA-Z_.]\)\(message\|service\|enum\)\($\|[^a-zA-Z_0-9]\)/\1<font color="red">\2<\/font>\3/
s/\(^\|[^a-zA-Z_.]\)\(rpc\|reserved\|repeated\|enum|stream\)\($\|[^a-zA-Z_0-9]\)/\1<font color="green">\2\3<\/font>\3/
s/\(^\|[^a-zA-Z_.]\)\(double\|float\|int32\|int64\|uint32\|uint64\|sint32\|sint64\|fixed32\|fixed64\|sfixed32\|sfixed64\|bool\|string\|bytes\)\($\|[^a-zA-Z_0-9]\)/\1<font color="blue">\2<\/font>\3/'
echo '</pre>'
done
echo '</body>'
echo '</html>'

View File

@ -18,7 +18,6 @@ var (
ErrUnspecified = errors.New("request for unspecified identifier")
)
// the service type
type LwdStreamer struct {
cache *common.BlockCache
}
@ -27,6 +26,7 @@ func NewLwdStreamer(cache *common.BlockCache) (walletrpc.CompactTxStreamerServer
return &LwdStreamer{cache}, nil
}
// GetLatestBlock returns the height of the best chain, according to zcashd.
func (s *LwdStreamer) GetLatestBlock(ctx context.Context, placeholder *walletrpc.ChainSpec) (*walletrpc.BlockID, error) {
latestBlock := s.cache.GetLatestHeight()
@ -38,7 +38,9 @@ func (s *LwdStreamer) GetLatestBlock(ctx context.Context, placeholder *walletrpc
return &walletrpc.BlockID{Height: uint64(latestBlock)}, nil
}
func (s *LwdStreamer) GetAddressTxids( addressBlockFilter *walletrpc.TransparentAddressBlockFilter, resp walletrpc.CompactTxStreamer_GetAddressTxidsServer) error {
// GetAddressTxids is a streaming RPC that returns transaction IDs that have
// the given transparent address (taddr) as either an input or output.
func (s *LwdStreamer) GetAddressTxids(addressBlockFilter *walletrpc.TransparentAddressBlockFilter, resp walletrpc.CompactTxStreamer_GetAddressTxidsServer) error {
// Test to make sure Address is a single t address
match, err := regexp.Match("\\At[a-zA-Z0-9]{34}\\z", []byte(addressBlockFilter.Address))
if err != nil || !match {
@ -90,6 +92,8 @@ func (s *LwdStreamer) GetAddressTxids( addressBlockFilter *walletrpc.Transparent
return nil
}
// GetBlock returns the compact block at the requested height. Requesting a
// block by hash is not yet supported.
func (s *LwdStreamer) GetBlock(ctx context.Context, id *walletrpc.BlockID) (*walletrpc.CompactBlock, error) {
if id.Height == 0 && id.Hash == nil {
return nil, ErrUnspecified
@ -109,6 +113,9 @@ func (s *LwdStreamer) GetBlock(ctx context.Context, id *walletrpc.BlockID) (*wal
return cBlock, err
}
// GetBlockRange is a streaming RPC that returns blocks, in compact form,
// (as also returned by GetBlock) from the block height 'start' to height
// 'end' inclusively.
func (s *LwdStreamer) GetBlockRange(span *walletrpc.BlockRange, resp walletrpc.CompactTxStreamer_GetBlockRangeServer) error {
blockChan := make(chan walletrpc.CompactBlock)
errChan := make(chan error)
@ -129,6 +136,8 @@ func (s *LwdStreamer) GetBlockRange(span *walletrpc.BlockRange, resp walletrpc.C
}
}
// GetTransaction returns the raw transaction bytes that are returned
// by the zcashd 'getrawtransaction' RPC.
func (s *LwdStreamer) GetTransaction(ctx context.Context, txf *walletrpc.TxFilter) (*walletrpc.RawTransaction, error) {
if txf.Hash != nil {
txid := txf.Hash
@ -167,7 +176,8 @@ func (s *LwdStreamer) GetTransaction(ctx context.Context, txf *walletrpc.TxFilte
return nil, errors.New("Please call GetTransaction with txid")
}
// GetLightdInfo gets the LightWalletD (this server) info
// GetLightdInfo gets the LightWalletD (this server) info, and includes information
// it gets from its backend zcashd.
func (s *LwdStreamer) GetLightdInfo(ctx context.Context, in *walletrpc.Empty) (*walletrpc.LightdInfo, error) {
saplingHeight, blockHeight, chainName, consensusBranchId := common.GetSaplingInfo()

View File

@ -111,10 +111,10 @@ func (m *CompactBlock) GetVtx() []*CompactTx {
return nil
}
// Index and hash will allow the receiver to call out to chain
// explorers or other data structures to retrieve more information
// about this transaction.
type CompactTx struct {
// Index and hash will allow the receiver to call out to chain
// explorers or other data structures to retrieve more information
// about this transaction.
Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
// The transaction fee: present if server can provide. In the case of a

View File

@ -19,10 +19,10 @@ message CompactBlock {
repeated CompactTx vtx = 7; // compact transactions from this block
}
// Index and hash will allow the receiver to call out to chain
// explorers or other data structures to retrieve more information
// about this transaction.
message CompactTx {
// Index and hash will allow the receiver to call out to chain
// explorers or other data structures to retrieve more information
// about this transaction.
uint64 index = 1;
bytes hash = 2;

View File

@ -25,7 +25,7 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// A BlockID message contains identifiers to select a block: a height or a
// hash. If the hash is present it takes precedence.
// hash. Specification by hash is not implemented, but may be in the future.
type BlockID struct {
Height uint64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
@ -73,9 +73,8 @@ func (m *BlockID) GetHash() []byte {
return nil
}
// 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.
// BlockRange specifies a series of blocks from start to end inclusive.
// Both BlockIDs must be heights; specification by hash is not yet supported.
type BlockRange struct {
Start *BlockID `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"`
End *BlockID `protobuf:"bytes,2,opt,name=end,proto3" json:"end,omitempty"`
@ -125,6 +124,7 @@ func (m *BlockRange) GetEnd() *BlockID {
// A TxFilter contains the information needed to identify a particular
// transaction: either a block and an index, or a direct transaction hash.
// Currently, only specification by hash is supported.
type TxFilter struct {
Block *BlockID `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"`
Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
@ -229,6 +229,9 @@ func (m *RawTransaction) GetHeight() uint64 {
return 0
}
// A SendResponse encodes an error code and a string. It is currently used
// only by SendTransaction(). If error code is zero, the operation was
// successful; if non-zero, it and the message specify the failure.
type SendResponse struct {
ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode,proto3" json:"errorCode,omitempty"`
ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"`
@ -276,7 +279,7 @@ func (m *SendResponse) GetErrorMessage() string {
return ""
}
// Empty placeholder. Someday we may want to specify e.g. a particular chain fork.
// Chainspec is a placeholder to allow specification of a particular chain fork.
type ChainSpec struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -308,6 +311,7 @@ func (m *ChainSpec) XXX_DiscardUnknown() {
var xxx_messageInfo_ChainSpec proto.InternalMessageInfo
// Empty is for gRPCs that take no arguments, currently only GetLightdInfo.
type Empty struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -339,6 +343,8 @@ func (m *Empty) XXX_DiscardUnknown() {
var xxx_messageInfo_Empty proto.InternalMessageInfo
// The LightdInfo returns various information about this lightwalletd instance
// and the state of the blockchain.
type LightdInfo struct {
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
Vendor string `protobuf:"bytes,2,opt,name=vendor,proto3" json:"vendor,omitempty"`
@ -426,45 +432,8 @@ func (m *LightdInfo) GetBlockHeight() uint64 {
return 0
}
type TransparentAddress struct {
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransparentAddress) Reset() { *m = TransparentAddress{} }
func (m *TransparentAddress) String() string { return proto.CompactTextString(m) }
func (*TransparentAddress) ProtoMessage() {}
func (*TransparentAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_a0b84a42fa06f626, []int{8}
}
func (m *TransparentAddress) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransparentAddress.Unmarshal(m, b)
}
func (m *TransparentAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransparentAddress.Marshal(b, m, deterministic)
}
func (m *TransparentAddress) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransparentAddress.Merge(m, src)
}
func (m *TransparentAddress) XXX_Size() int {
return xxx_messageInfo_TransparentAddress.Size(m)
}
func (m *TransparentAddress) XXX_DiscardUnknown() {
xxx_messageInfo_TransparentAddress.DiscardUnknown(m)
}
var xxx_messageInfo_TransparentAddress proto.InternalMessageInfo
func (m *TransparentAddress) GetAddress() string {
if m != nil {
return m.Address
}
return ""
}
// TransparentAddressBlockFilter restricts the results to the given address
// or block range.
type TransparentAddressBlockFilter struct {
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
Range *BlockRange `protobuf:"bytes,2,opt,name=range,proto3" json:"range,omitempty"`
@ -477,7 +446,7 @@ func (m *TransparentAddressBlockFilter) Reset() { *m = TransparentAddres
func (m *TransparentAddressBlockFilter) String() string { return proto.CompactTextString(m) }
func (*TransparentAddressBlockFilter) ProtoMessage() {}
func (*TransparentAddressBlockFilter) Descriptor() ([]byte, []int) {
return fileDescriptor_a0b84a42fa06f626, []int{9}
return fileDescriptor_a0b84a42fa06f626, []int{8}
}
func (m *TransparentAddressBlockFilter) XXX_Unmarshal(b []byte) error {
@ -521,55 +490,54 @@ func init() {
proto.RegisterType((*ChainSpec)(nil), "cash.z.wallet.sdk.rpc.ChainSpec")
proto.RegisterType((*Empty)(nil), "cash.z.wallet.sdk.rpc.Empty")
proto.RegisterType((*LightdInfo)(nil), "cash.z.wallet.sdk.rpc.LightdInfo")
proto.RegisterType((*TransparentAddress)(nil), "cash.z.wallet.sdk.rpc.TransparentAddress")
proto.RegisterType((*TransparentAddressBlockFilter)(nil), "cash.z.wallet.sdk.rpc.TransparentAddressBlockFilter")
}
func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
var fileDescriptor_a0b84a42fa06f626 = []byte{
// 647 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xd1, 0x4e, 0x13, 0x41,
0x14, 0x6d, 0x4b, 0x97, 0xd2, 0x4b, 0x81, 0x30, 0x11, 0x6d, 0x1a, 0xd4, 0x3a, 0xc6, 0x84, 0x07,
0xb3, 0x21, 0x88, 0xd1, 0x07, 0x5f, 0x00, 0x15, 0x49, 0xd0, 0xe8, 0xb4, 0x4f, 0xf8, 0x40, 0x86,
0x9d, 0x4b, 0x77, 0xa5, 0x9d, 0xd9, 0xcc, 0x0c, 0xa5, 0xfa, 0x09, 0x7e, 0x84, 0x1f, 0xe2, 0xd7,
0x99, 0x99, 0xdd, 0xc2, 0x12, 0x5c, 0xda, 0xb7, 0xb9, 0x33, 0xe7, 0x9e, 0x73, 0xe7, 0xcc, 0xbd,
0xbb, 0xb0, 0x62, 0x50, 0x8f, 0x93, 0x08, 0xc3, 0x54, 0x2b, 0xab, 0xc8, 0x46, 0xc4, 0x4d, 0x1c,
0xfe, 0x0a, 0xaf, 0xf8, 0x70, 0x88, 0x36, 0x34, 0xe2, 0x22, 0xd4, 0x69, 0xd4, 0xd9, 0x88, 0xd4,
0x28, 0xe5, 0x91, 0x3d, 0x3d, 0x57, 0x7a, 0xc4, 0xad, 0xc9, 0xd0, 0xf4, 0x35, 0x34, 0xf6, 0x87,
0x2a, 0xba, 0x38, 0x7a, 0x4f, 0x1e, 0xc2, 0x62, 0x8c, 0xc9, 0x20, 0xb6, 0xed, 0x6a, 0xb7, 0xba,
0x55, 0x67, 0x79, 0x44, 0x08, 0xd4, 0x63, 0x6e, 0xe2, 0x76, 0xad, 0x5b, 0xdd, 0x6a, 0x31, 0xbf,
0xa6, 0x16, 0xc0, 0xa7, 0x31, 0x2e, 0x07, 0x48, 0x76, 0x21, 0x30, 0x96, 0xeb, 0x2c, 0x71, 0x79,
0xe7, 0x49, 0xf8, 0xdf, 0x12, 0xc2, 0x5c, 0x88, 0x65, 0x60, 0xb2, 0x0d, 0x0b, 0x28, 0x85, 0xa7,
0x9d, 0x9d, 0xe3, 0xa0, 0xf4, 0x07, 0x2c, 0xf5, 0x27, 0x1f, 0x93, 0xa1, 0x45, 0xed, 0x34, 0xcf,
0xdc, 0xd9, 0xbc, 0x9a, 0x1e, 0x4c, 0x1e, 0x40, 0x90, 0x48, 0x81, 0x13, 0xaf, 0x5a, 0x67, 0x59,
0x70, 0x7d, 0xc3, 0x85, 0xc2, 0x0d, 0xdf, 0xc1, 0x2a, 0xe3, 0x57, 0x7d, 0xcd, 0xa5, 0xe1, 0x91,
0x4d, 0x94, 0x74, 0x28, 0xc1, 0x2d, 0xf7, 0x82, 0x2d, 0xe6, 0xd7, 0x05, 0xcf, 0x6a, 0x45, 0xcf,
0xe8, 0x57, 0x68, 0xf5, 0x50, 0x0a, 0x86, 0x26, 0x55, 0xd2, 0x20, 0xd9, 0x84, 0x26, 0x6a, 0xad,
0xf4, 0x81, 0x12, 0xe8, 0x09, 0x02, 0x76, 0xb3, 0x41, 0x28, 0xb4, 0x7c, 0xf0, 0x19, 0x8d, 0xe1,
0x03, 0xf4, 0x5c, 0x4d, 0x76, 0x6b, 0x8f, 0x2e, 0x43, 0xf3, 0x20, 0xe6, 0x89, 0xec, 0xa5, 0x18,
0xd1, 0x06, 0x04, 0x1f, 0x46, 0xa9, 0xfd, 0x49, 0x7f, 0xd7, 0x00, 0x8e, 0x9d, 0xa2, 0x38, 0x92,
0xe7, 0x8a, 0xb4, 0xa1, 0x31, 0x46, 0x6d, 0x12, 0x25, 0xbd, 0x48, 0x93, 0x4d, 0x43, 0x57, 0xe8,
0x18, 0xa5, 0x50, 0x3a, 0x27, 0xcf, 0x23, 0x27, 0x6d, 0xb9, 0x10, 0xba, 0x77, 0x99, 0xa6, 0x4a,
0x5b, 0x6f, 0xc1, 0x12, 0xbb, 0xb5, 0xe7, 0x8a, 0x8f, 0x9c, 0xf4, 0x17, 0x3e, 0xc2, 0x76, 0xdd,
0xa7, 0xdf, 0x6c, 0x90, 0xb7, 0xf0, 0xc8, 0xf0, 0x74, 0x98, 0xc8, 0xc1, 0x5e, 0x64, 0x93, 0x31,
0x77, 0x5e, 0x7d, 0xca, 0x3c, 0x09, 0xbc, 0x27, 0x65, 0xc7, 0xe4, 0x25, 0xac, 0x47, 0xce, 0x1d,
0x69, 0x2e, 0xcd, 0xbe, 0xe6, 0x32, 0x8a, 0x8f, 0x44, 0x7b, 0xd1, 0xf3, 0xdf, 0x3d, 0x20, 0x5d,
0x58, 0xf6, 0x6f, 0x98, 0x73, 0x37, 0x3c, 0x77, 0x71, 0x8b, 0x86, 0x40, 0xfc, 0x7b, 0xa5, 0x5c,
0xa3, 0xb4, 0x7b, 0x42, 0x68, 0x34, 0xc6, 0x79, 0xc2, 0xb3, 0xe5, 0xd4, 0x93, 0x3c, 0xa4, 0x1a,
0x1e, 0xdf, 0xc5, 0xfb, 0x86, 0xc9, 0x7b, 0xac, 0x34, 0x95, 0xbc, 0x81, 0x40, 0xbb, 0xd6, 0xcf,
0xbb, 0xf7, 0xd9, 0x7d, 0xdd, 0xe7, 0x67, 0x84, 0x65, 0xf8, 0x9d, 0x3f, 0x01, 0xac, 0x1f, 0x64,
0x93, 0xd8, 0x9f, 0xf4, 0xac, 0x46, 0x3e, 0x42, 0x4d, 0xfa, 0xb0, 0x7a, 0x88, 0xf6, 0x98, 0x5b,
0x34, 0xd6, 0xe7, 0x90, 0x6e, 0x09, 0xe3, 0x75, 0x0f, 0x74, 0x66, 0x74, 0x3c, 0xad, 0x90, 0x6f,
0xb0, 0x74, 0x88, 0x39, 0xdf, 0x0c, 0x74, 0xe7, 0x79, 0x99, 0x5e, 0x56, 0xab, 0x87, 0xd1, 0x0a,
0xf9, 0x0e, 0x2b, 0x53, 0xca, 0x6c, 0xf4, 0x67, 0xdf, 0x7c, 0x4e, 0xea, 0xed, 0x2a, 0x39, 0xf1,
0x2e, 0x14, 0x47, 0xee, 0x69, 0x49, 0xea, 0xf4, 0x2b, 0xd0, 0x79, 0x51, 0x02, 0xb8, 0x3d, 0xba,
0xb4, 0x42, 0x4e, 0x61, 0xcd, 0x0d, 0x64, 0x91, 0x7c, 0xbe, 0xdc, 0xd2, 0xf2, 0x8b, 0xf3, 0x4d,
0x2b, 0x44, 0xc3, 0xda, 0x21, 0x4e, 0x9b, 0xa8, 0x3f, 0x49, 0x84, 0x21, 0xbb, 0x65, 0xd5, 0xdf,
0xd7, 0x74, 0x73, 0x5f, 0x69, 0xbb, 0x4a, 0x98, 0x7f, 0x8d, 0xc2, 0xfc, 0x6f, 0x96, 0xe4, 0xfa,
0x8f, 0x45, 0xa7, 0xec, 0xad, 0x6e, 0x08, 0x68, 0x65, 0x7f, 0xf5, 0xa4, 0x99, 0x1d, 0xeb, 0x34,
0xfa, 0x5b, 0xab, 0x9c, 0x2d, 0xfa, 0xff, 0xc4, 0xab, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x21,
0x51, 0x32, 0x07, 0x66, 0x06, 0x00, 0x00,
// 641 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xd1, 0x4e, 0x13, 0x4d,
0x14, 0x6e, 0x4b, 0x97, 0xd2, 0x43, 0x81, 0x30, 0xf9, 0xf9, 0x6d, 0x1a, 0xd4, 0x3a, 0xc6, 0x84,
0x0b, 0xb3, 0x21, 0x88, 0xd1, 0x0b, 0x6f, 0x00, 0x15, 0x49, 0xd0, 0xe8, 0xb4, 0x57, 0x78, 0x41,
0x86, 0x9d, 0x43, 0x77, 0xa5, 0x9d, 0xdd, 0xcc, 0x0c, 0xa5, 0xfa, 0x08, 0x3e, 0x84, 0x0f, 0xe2,
0xd3, 0x99, 0x3d, 0xbb, 0x85, 0x6d, 0x74, 0x69, 0xef, 0xf6, 0x9c, 0x39, 0xe7, 0xfb, 0xce, 0x9c,
0xf9, 0xbe, 0x85, 0x35, 0x8b, 0x66, 0x1c, 0x05, 0xe8, 0x27, 0x26, 0x76, 0x31, 0xdb, 0x0a, 0xa4,
0x0d, 0xfd, 0x1f, 0xfe, 0x8d, 0x1c, 0x0e, 0xd1, 0xf9, 0x56, 0x5d, 0xf9, 0x26, 0x09, 0x3a, 0x5b,
0x41, 0x3c, 0x4a, 0x64, 0xe0, 0xce, 0x2f, 0x63, 0x33, 0x92, 0xce, 0x66, 0xd5, 0xfc, 0x25, 0x34,
0x0e, 0x87, 0x71, 0x70, 0x75, 0xf2, 0x96, 0xfd, 0x0f, 0xcb, 0x21, 0x46, 0x83, 0xd0, 0xb5, 0xab,
0xdd, 0xea, 0x4e, 0x5d, 0xe4, 0x11, 0x63, 0x50, 0x0f, 0xa5, 0x0d, 0xdb, 0xb5, 0x6e, 0x75, 0xa7,
0x25, 0xe8, 0x9b, 0x3b, 0x00, 0x6a, 0x13, 0x52, 0x0f, 0x90, 0xed, 0x83, 0x67, 0x9d, 0x34, 0x59,
0xe3, 0xea, 0xde, 0x23, 0xff, 0x9f, 0x23, 0xf8, 0x39, 0x91, 0xc8, 0x8a, 0xd9, 0x2e, 0x2c, 0xa1,
0x56, 0x04, 0x3b, 0xbf, 0x27, 0x2d, 0xe5, 0xdf, 0x60, 0xa5, 0x3f, 0x79, 0x1f, 0x0d, 0x1d, 0x9a,
0x94, 0xf3, 0x22, 0x3d, 0x5b, 0x94, 0x93, 0x8a, 0xd9, 0x7f, 0xe0, 0x45, 0x5a, 0xe1, 0x84, 0x58,
0xeb, 0x22, 0x0b, 0x6e, 0x6f, 0xb8, 0x54, 0xb8, 0xe1, 0x1b, 0x58, 0x17, 0xf2, 0xa6, 0x6f, 0xa4,
0xb6, 0x32, 0x70, 0x51, 0xac, 0xd3, 0x2a, 0x25, 0x9d, 0x24, 0xc2, 0x96, 0xa0, 0xef, 0xc2, 0xce,
0x6a, 0xc5, 0x9d, 0xf1, 0xcf, 0xd0, 0xea, 0xa1, 0x56, 0x02, 0x6d, 0x12, 0x6b, 0x8b, 0x6c, 0x1b,
0x9a, 0x68, 0x4c, 0x6c, 0x8e, 0x62, 0x85, 0x04, 0xe0, 0x89, 0xbb, 0x04, 0xe3, 0xd0, 0xa2, 0xe0,
0x23, 0x5a, 0x2b, 0x07, 0x48, 0x58, 0x4d, 0x31, 0x93, 0xe3, 0xab, 0xd0, 0x3c, 0x0a, 0x65, 0xa4,
0x7b, 0x09, 0x06, 0xbc, 0x01, 0xde, 0xbb, 0x51, 0xe2, 0xbe, 0xf3, 0x9f, 0x35, 0x80, 0xd3, 0x94,
0x51, 0x9d, 0xe8, 0xcb, 0x98, 0xb5, 0xa1, 0x31, 0x46, 0x63, 0xa3, 0x58, 0x13, 0x49, 0x53, 0x4c,
0xc3, 0x74, 0xd0, 0x31, 0x6a, 0x15, 0x9b, 0x1c, 0x3c, 0x8f, 0x52, 0x6a, 0x27, 0x95, 0x32, 0xbd,
0xeb, 0x24, 0x89, 0x8d, 0xa3, 0x15, 0xac, 0x88, 0x99, 0x5c, 0x3a, 0x7c, 0x90, 0x52, 0x7f, 0x92,
0x23, 0x6c, 0xd7, 0xa9, 0xfd, 0x2e, 0xc1, 0x5e, 0xc3, 0x03, 0x2b, 0x93, 0x61, 0xa4, 0x07, 0x07,
0x81, 0x8b, 0xc6, 0x32, 0xdd, 0xd5, 0x87, 0x6c, 0x27, 0x1e, 0xed, 0xa4, 0xec, 0x98, 0x3d, 0x87,
0xcd, 0x20, 0xdd, 0x8e, 0xb6, 0xd7, 0xf6, 0xd0, 0x48, 0x1d, 0x84, 0x27, 0xaa, 0xbd, 0x4c, 0xf8,
0x7f, 0x1f, 0xb0, 0x2e, 0xac, 0xd2, 0x1b, 0xe6, 0xd8, 0x0d, 0xc2, 0x2e, 0xa6, 0xb8, 0x81, 0x87,
0xf4, 0x5e, 0x89, 0x34, 0xa8, 0xdd, 0x81, 0x52, 0x06, 0xad, 0x25, 0x01, 0xe4, 0x9a, 0x69, 0x43,
0x43, 0x66, 0xd9, 0xe9, 0x7a, 0xf2, 0x90, 0xbd, 0x02, 0xcf, 0xa4, 0x52, 0xce, 0xd5, 0xf8, 0xe4,
0x3e, 0x35, 0x91, 0xe6, 0x45, 0x56, 0xbf, 0xf7, 0xcb, 0x83, 0xcd, 0xa3, 0xcc, 0x59, 0xfd, 0x49,
0xcf, 0x19, 0x94, 0x23, 0x34, 0xac, 0x0f, 0xeb, 0xc7, 0xe8, 0x4e, 0xa5, 0x43, 0xeb, 0xa8, 0x87,
0x75, 0x4b, 0x10, 0x6f, 0xdf, 0xb4, 0x33, 0x47, 0xc1, 0xbc, 0xc2, 0xbe, 0xc0, 0xca, 0x31, 0xe6,
0x78, 0x73, 0xaa, 0x3b, 0x4f, 0xcb, 0xf8, 0xb2, 0x59, 0xa9, 0x8c, 0x57, 0xd8, 0x57, 0x58, 0x9b,
0x42, 0x66, 0x56, 0x9e, 0x7f, 0xf3, 0x05, 0xa1, 0x77, 0xab, 0xec, 0x8c, 0xb6, 0x50, 0xb4, 0xd0,
0xe3, 0x92, 0xd6, 0xa9, 0xab, 0x3b, 0xcf, 0x4a, 0x0a, 0x66, 0xad, 0xc8, 0x2b, 0xec, 0x1c, 0x36,
0x52, 0x83, 0x15, 0xc1, 0x17, 0xeb, 0x2d, 0x1d, 0xbf, 0xe8, 0x57, 0x5e, 0x61, 0x06, 0x36, 0x8e,
0x71, 0x2a, 0xa2, 0xfe, 0x24, 0x52, 0x96, 0xed, 0x97, 0x4d, 0x7f, 0x9f, 0xe8, 0x16, 0xbe, 0xd2,
0x6e, 0x95, 0x09, 0x7a, 0x8d, 0x82, 0x9f, 0xb7, 0x4b, 0x7a, 0xc9, 0xfc, 0x9d, 0xb2, 0xb7, 0xba,
0x03, 0xe0, 0x95, 0xc3, 0xf5, 0xb3, 0x66, 0x76, 0x6c, 0x92, 0xe0, 0x77, 0xad, 0x72, 0xb1, 0x4c,
0xff, 0xfd, 0x17, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x08, 0x42, 0x5c, 0xfd, 0x36, 0x06, 0x00,
0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -5,15 +5,14 @@ option swift_prefix = "";
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.
// hash. Specification by hash is not implemented, but may be in the future.
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.
// BlockRange specifies a series of blocks from start to end inclusive.
// Both BlockIDs must be heights; specification by hash is not yet supported.
message BlockRange {
BlockID start = 1;
BlockID end = 2;
@ -21,6 +20,7 @@ message BlockRange {
// A TxFilter contains the information needed to identify a particular
// transaction: either a block and an index, or a direct transaction hash.
// Currently, only specification by hash is supported.
message TxFilter {
BlockID block = 1;
uint64 index = 2;
@ -34,30 +34,34 @@ message RawTransaction {
uint64 height = 2;
}
// A SendResponse encodes an error code and a string. It is currently used
// only by SendTransaction(). If error code is zero, the operation was
// successful; if non-zero, it and the message specify the failure.
message SendResponse {
int32 errorCode = 1;
string errorMessage = 2;
}
// Empty placeholder. Someday we may want to specify e.g. a particular chain fork.
// Chainspec is a placeholder to allow specification of a particular chain fork.
message ChainSpec {}
// Empty is for gRPCs that take no arguments, currently only GetLightdInfo.
message Empty {}
// The LightdInfo returns various information about this lightwalletd instance
// and the state of the blockchain.
message LightdInfo {
string version = 1;
string vendor = 2;
bool taddrSupport = 3;
string chainName = 4;
uint64 saplingActivationHeight = 5;
string consensusBranchId = 6; // This should really be u32 or []byte, but string for readability
string consensusBranchId = 6;
uint64 blockHeight = 7;
}
message TransparentAddress {
string address = 1;
}
// TransparentAddressBlockFilter restricts the results to the given address
// or block range.
message TransparentAddressBlockFilter {
string address = 1;
BlockRange range = 2;