Add transparent txns

This commit is contained in:
Aditya Kulkarni 2019-09-13 16:02:58 -07:00
parent 7644852fc6
commit d36126ba9d
4 changed files with 220 additions and 43 deletions

View File

@ -160,7 +160,7 @@ func main() {
} }
// Compact transaction service initialization // Compact transaction service initialization
service, err := frontend.NewSQLiteStreamer(opts.dbPath, rpcClient) service, err := frontend.NewSQLiteStreamer(opts.dbPath, rpcClient, log)
if err != nil { if err != nil {
log.WithFields(logrus.Fields{ log.WithFields(logrus.Fields{
"db_path": opts.dbPath, "db_path": opts.dbPath,

View File

@ -13,6 +13,7 @@ import (
"github.com/adityapk00/btcd/rpcclient" "github.com/adityapk00/btcd/rpcclient"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/sirupsen/logrus"
// blank import for sqlite driver support // blank import for sqlite driver support
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
@ -29,9 +30,10 @@ var (
type SqlStreamer struct { type SqlStreamer struct {
db *sql.DB db *sql.DB
client *rpcclient.Client client *rpcclient.Client
log *logrus.Entry
} }
func NewSQLiteStreamer(dbPath string, client *rpcclient.Client) (walletrpc.CompactTxStreamerServer, error) { func NewSQLiteStreamer(dbPath string, client *rpcclient.Client, log *logrus.Entry) (walletrpc.CompactTxStreamerServer, error) {
db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?_busy_timeout=10000&cache=shared", dbPath)) db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?_busy_timeout=10000&cache=shared", dbPath))
db.SetMaxOpenConns(1) db.SetMaxOpenConns(1)
if err != nil { if err != nil {
@ -44,7 +46,7 @@ func NewSQLiteStreamer(dbPath string, client *rpcclient.Client) (walletrpc.Compa
return nil, err return nil, err
} }
return &SqlStreamer{db, client}, nil return &SqlStreamer{db, client, log}, nil
} }
func (s *SqlStreamer) GracefulStop() error { func (s *SqlStreamer) GracefulStop() error {
@ -86,6 +88,61 @@ func (s *SqlStreamer) GetBlock(ctx context.Context, id *walletrpc.BlockID) (*wal
return cBlock, err return cBlock, err
} }
func (s *SqlStreamer) GetAddressTxids(addressBlockFilter *walletrpc.TransparentAddressBlockFilter, resp walletrpc.CompactTxStreamer_GetAddressTxidsServer) error {
params := make([]json.RawMessage, 1)
st := "{\"addresses\": [\"" + addressBlockFilter.Address + "\"]," +
"\"start\": " + strconv.FormatUint(addressBlockFilter.Range.Start.Height, 10) +
", \"end\": " + strconv.FormatUint(addressBlockFilter.Range.End.Height, 10) + "}"
params[0] = json.RawMessage(st)
result, rpcErr := s.client.RawRequest("getaddresstxids", params)
var err error
var errCode int64
// For some reason, the error responses are not JSON
if rpcErr != nil {
s.log.Errorf("Got error: %s", rpcErr.Error())
errParts := strings.SplitN(rpcErr.Error(), ":", 2)
errCode, err = strconv.ParseInt(errParts[0], 10, 32)
//Check to see if we are requesting a height the zcashd doesn't have yet
if err == nil && errCode == -8 {
return nil
}
return nil
}
var txids []string
err = json.Unmarshal(result, &txids)
if err != nil {
s.log.Errorf("Got error: %s", err.Error())
return nil
}
timeout, cancel := context.WithTimeout(resp.Context(), 30*time.Second)
defer cancel()
for _, txidstr := range txids {
txid, _ := hex.DecodeString(txidstr)
// Txid is read as a string, which is in big-endian order. But when converting
// to bytes, it should be little-endian
for left, right := 0, len(txid)-1; left < right; left, right = left+1, right-1 {
txid[left], txid[right] = txid[right], txid[left]
}
tx, err := s.GetTransaction(timeout, &walletrpc.TxFilter{Hash: txid})
if err != nil {
s.log.Errorf("Got error: %s", err.Error())
return nil
}
resp.Send(tx)
}
return nil
}
func (s *SqlStreamer) GetUtxos(address *walletrpc.TransparentAddress, resp walletrpc.CompactTxStreamer_GetUtxosServer) error { func (s *SqlStreamer) GetUtxos(address *walletrpc.TransparentAddress, resp walletrpc.CompactTxStreamer_GetUtxosServer) error {
utxos, _ := s.client.GetAddressUtxos(address.Address) utxos, _ := s.client.GetAddressUtxos(address.Address)

View File

@ -424,6 +424,53 @@ func (m *TransparentAddress) GetAddress() string {
return "" return ""
} }
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"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransparentAddressBlockFilter) Reset() { *m = TransparentAddressBlockFilter{} }
func (m *TransparentAddressBlockFilter) String() string { return proto.CompactTextString(m) }
func (*TransparentAddressBlockFilter) ProtoMessage() {}
func (*TransparentAddressBlockFilter) Descriptor() ([]byte, []int) {
return fileDescriptor_a0b84a42fa06f626, []int{9}
}
func (m *TransparentAddressBlockFilter) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransparentAddressBlockFilter.Unmarshal(m, b)
}
func (m *TransparentAddressBlockFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransparentAddressBlockFilter.Marshal(b, m, deterministic)
}
func (m *TransparentAddressBlockFilter) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransparentAddressBlockFilter.Merge(m, src)
}
func (m *TransparentAddressBlockFilter) XXX_Size() int {
return xxx_messageInfo_TransparentAddressBlockFilter.Size(m)
}
func (m *TransparentAddressBlockFilter) XXX_DiscardUnknown() {
xxx_messageInfo_TransparentAddressBlockFilter.DiscardUnknown(m)
}
var xxx_messageInfo_TransparentAddressBlockFilter proto.InternalMessageInfo
func (m *TransparentAddressBlockFilter) GetAddress() string {
if m != nil {
return m.Address
}
return ""
}
func (m *TransparentAddressBlockFilter) GetRange() *BlockRange {
if m != nil {
return m.Range
}
return nil
}
type Utxo struct { type Utxo struct {
Address *TransparentAddress `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Address *TransparentAddress `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
Txid []byte `protobuf:"bytes,2,opt,name=txid,proto3" json:"txid,omitempty"` Txid []byte `protobuf:"bytes,2,opt,name=txid,proto3" json:"txid,omitempty"`
@ -440,7 +487,7 @@ func (m *Utxo) Reset() { *m = Utxo{} }
func (m *Utxo) String() string { return proto.CompactTextString(m) } func (m *Utxo) String() string { return proto.CompactTextString(m) }
func (*Utxo) ProtoMessage() {} func (*Utxo) ProtoMessage() {}
func (*Utxo) Descriptor() ([]byte, []int) { func (*Utxo) Descriptor() ([]byte, []int) {
return fileDescriptor_a0b84a42fa06f626, []int{9} return fileDescriptor_a0b84a42fa06f626, []int{10}
} }
func (m *Utxo) XXX_Unmarshal(b []byte) error { func (m *Utxo) XXX_Unmarshal(b []byte) error {
@ -513,51 +560,55 @@ func init() {
proto.RegisterType((*Empty)(nil), "cash.z.wallet.sdk.rpc.Empty") proto.RegisterType((*Empty)(nil), "cash.z.wallet.sdk.rpc.Empty")
proto.RegisterType((*LightdInfo)(nil), "cash.z.wallet.sdk.rpc.LightdInfo") proto.RegisterType((*LightdInfo)(nil), "cash.z.wallet.sdk.rpc.LightdInfo")
proto.RegisterType((*TransparentAddress)(nil), "cash.z.wallet.sdk.rpc.TransparentAddress") proto.RegisterType((*TransparentAddress)(nil), "cash.z.wallet.sdk.rpc.TransparentAddress")
proto.RegisterType((*TransparentAddressBlockFilter)(nil), "cash.z.wallet.sdk.rpc.TransparentAddressBlockFilter")
proto.RegisterType((*Utxo)(nil), "cash.z.wallet.sdk.rpc.Utxo") proto.RegisterType((*Utxo)(nil), "cash.z.wallet.sdk.rpc.Utxo")
} }
func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) } func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
var fileDescriptor_a0b84a42fa06f626 = []byte{ var fileDescriptor_a0b84a42fa06f626 = []byte{
// 607 bytes of a gzipped FileDescriptorProto // 654 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x41, 0x6f, 0x13, 0x3d, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdf, 0x4f, 0x13, 0x41,
0x10, 0x4d, 0xbe, 0x26, 0x6d, 0x33, 0x49, 0xfb, 0x09, 0x8b, 0xa2, 0x28, 0x54, 0x10, 0x0c, 0x48, 0x10, 0x6e, 0xa5, 0x07, 0x74, 0x5a, 0x20, 0x6e, 0xc4, 0x34, 0x15, 0xb5, 0xae, 0x9a, 0xe0, 0xcb,
0xe5, 0xb2, 0xaa, 0x0a, 0xfc, 0x00, 0x1a, 0xa0, 0xaa, 0x54, 0x24, 0x70, 0x02, 0x87, 0x72, 0xa8, 0x85, 0x20, 0xc6, 0x67, 0xa9, 0x4a, 0x48, 0x30, 0xd1, 0x6d, 0xf5, 0x01, 0x1f, 0xc8, 0x72, 0x3b,
0xdc, 0xf5, 0xb4, 0xbb, 0x34, 0x59, 0x5b, 0xb6, 0x93, 0x06, 0x8e, 0xfc, 0x39, 0xfe, 0x16, 0xf2, 0xd0, 0x93, 0xf6, 0xf6, 0xb2, 0xbb, 0x2d, 0xd5, 0x7f, 0xd0, 0xff, 0xc8, 0x67, 0xb3, 0x73, 0x57,
0xec, 0xa6, 0xdd, 0x08, 0x96, 0xe6, 0xe6, 0xf1, 0xbe, 0x79, 0xcf, 0x33, 0x6f, 0x66, 0x61, 0xcb, 0xb8, 0x06, 0xcf, 0xf6, 0x6d, 0x67, 0xef, 0x9b, 0x6f, 0x7e, 0x7d, 0xb3, 0x07, 0x1b, 0x16, 0xcd,
0xa1, 0x9d, 0xa5, 0x31, 0x46, 0xc6, 0x6a, 0xaf, 0xd9, 0x4e, 0x2c, 0x5d, 0x12, 0xfd, 0x88, 0xae, 0x24, 0x8e, 0x30, 0x4c, 0x8d, 0x76, 0x9a, 0x6d, 0x47, 0xd2, 0x0e, 0xc2, 0x5f, 0xe1, 0xb5, 0x1c,
0xe5, 0x78, 0x8c, 0x3e, 0x72, 0xea, 0x2a, 0xb2, 0x26, 0xee, 0xed, 0xc4, 0x7a, 0x62, 0x64, 0xec, 0x0e, 0xd1, 0x85, 0x56, 0x5d, 0x85, 0x26, 0x8d, 0xda, 0xdb, 0x91, 0x1e, 0xa5, 0x32, 0x72, 0x67,
0xcf, 0x2e, 0xb4, 0x9d, 0x48, 0xef, 0x72, 0x34, 0x7f, 0x0d, 0x1b, 0x87, 0x63, 0x1d, 0x5f, 0x1d, 0x17, 0xda, 0x8c, 0xa4, 0xb3, 0x19, 0x9a, 0xbf, 0x81, 0xb5, 0xc3, 0xa1, 0x8e, 0xae, 0x8e, 0xdf,
0xbf, 0x65, 0x0f, 0x60, 0x3d, 0xc1, 0xf4, 0x32, 0xf1, 0xdd, 0x7a, 0xbf, 0xbe, 0xd7, 0x10, 0x45, 0xb3, 0x87, 0xb0, 0x3a, 0xc0, 0xf8, 0x72, 0xe0, 0x5a, 0xd5, 0x4e, 0x75, 0xb7, 0x26, 0x72, 0x8b,
0xc4, 0x18, 0x34, 0x12, 0xe9, 0x92, 0xee, 0x7f, 0xfd, 0xfa, 0x5e, 0x47, 0xd0, 0x99, 0x7b, 0x00, 0x31, 0xa8, 0x0d, 0xa4, 0x1d, 0xb4, 0xee, 0x75, 0xaa, 0xbb, 0x4d, 0x41, 0x67, 0xee, 0x00, 0xc8,
0x4a, 0x13, 0x32, 0xbb, 0x44, 0xf6, 0x0a, 0x9a, 0xce, 0x4b, 0x9b, 0x27, 0xb6, 0x0f, 0x1e, 0x45, 0x4d, 0xc8, 0xe4, 0x12, 0xd9, 0x01, 0x04, 0xd6, 0x49, 0x93, 0x39, 0x36, 0xf6, 0x9f, 0x84, 0xff,
0x7f, 0x7d, 0x42, 0x54, 0x08, 0x89, 0x1c, 0xcc, 0xf6, 0x61, 0x0d, 0x33, 0x45, 0xb4, 0x77, 0xe7, 0x4c, 0x21, 0xcc, 0x03, 0x89, 0x0c, 0xcc, 0xf6, 0x60, 0x05, 0x13, 0x45, 0xb4, 0x8b, 0x7d, 0x3c,
0x04, 0x28, 0xff, 0x06, 0x9b, 0xa3, 0xf9, 0xfb, 0x74, 0xec, 0xd1, 0x06, 0xcd, 0xf3, 0xf0, 0x6d, 0x94, 0xff, 0x80, 0xf5, 0xfe, 0xf4, 0x63, 0x3c, 0x74, 0x68, 0x7c, 0xcc, 0x73, 0xff, 0x6d, 0xd9,
0x55, 0x4d, 0x02, 0xb3, 0xfb, 0xd0, 0x4c, 0x33, 0x85, 0x73, 0x52, 0x6d, 0x88, 0x3c, 0xb8, 0xa9, 0x98, 0x04, 0x66, 0x0f, 0x20, 0x88, 0x13, 0x85, 0x53, 0x8a, 0x5a, 0x13, 0x99, 0x71, 0x53, 0xe1,
0x70, 0xad, 0x54, 0xe1, 0x33, 0xd8, 0x16, 0xf2, 0x7a, 0x64, 0x65, 0xe6, 0x64, 0xec, 0x53, 0x9d, 0x4a, 0xa1, 0xc2, 0x17, 0xb0, 0x29, 0xe4, 0x75, 0xdf, 0xc8, 0xc4, 0xca, 0xc8, 0xc5, 0x3a, 0xf1,
0x05, 0x94, 0x92, 0x5e, 0x92, 0x60, 0x47, 0xd0, 0x99, 0x7f, 0x84, 0xce, 0x10, 0x33, 0x25, 0xd0, 0x28, 0x25, 0x9d, 0xa4, 0x80, 0x4d, 0x41, 0x67, 0xfe, 0x19, 0x9a, 0x3d, 0x4c, 0x94, 0x40, 0x9b,
0x19, 0x9d, 0x39, 0x64, 0xbb, 0xd0, 0x42, 0x6b, 0xb5, 0x1d, 0x68, 0x85, 0x04, 0x6c, 0x8a, 0xdb, 0xea, 0xc4, 0x22, 0xdb, 0x81, 0x3a, 0x1a, 0xa3, 0x4d, 0x57, 0x2b, 0x24, 0x60, 0x20, 0x6e, 0x2f,
0x0b, 0xc6, 0xa1, 0x43, 0xc1, 0x07, 0x74, 0x4e, 0x5e, 0x22, 0x3d, 0xa2, 0x25, 0x96, 0xee, 0x78, 0x18, 0x87, 0x26, 0x19, 0x9f, 0xd0, 0x5a, 0x79, 0x89, 0x94, 0x44, 0x5d, 0xcc, 0xdd, 0xf1, 0x06,
0x1b, 0x5a, 0x83, 0x44, 0xa6, 0xd9, 0xd0, 0x60, 0xcc, 0x37, 0xa0, 0xf9, 0x6e, 0x62, 0xfc, 0x77, 0xd4, 0xbb, 0x03, 0x19, 0x27, 0xbd, 0x14, 0x23, 0xbe, 0x06, 0xc1, 0x87, 0x51, 0xea, 0x7e, 0xf2,
0x7e, 0x0e, 0x70, 0x12, 0xcc, 0x50, 0xc7, 0xd9, 0x85, 0x66, 0x5d, 0xd8, 0x98, 0xa1, 0x75, 0xa9, 0x73, 0x80, 0x13, 0x3f, 0x0c, 0x75, 0x9c, 0x5c, 0x68, 0xd6, 0x82, 0xb5, 0x09, 0x1a, 0x1b, 0xeb,
0xce, 0x48, 0xa3, 0x25, 0x16, 0x61, 0xf0, 0x70, 0x86, 0x99, 0xd2, 0xb6, 0xe0, 0x2e, 0xa2, 0xa0, 0x84, 0x62, 0xd4, 0xc5, 0xcc, 0xf4, 0x33, 0x9c, 0x60, 0xa2, 0xb4, 0xc9, 0xb9, 0x73, 0xcb, 0x47,
0xec, 0xa5, 0x52, 0x76, 0x38, 0x35, 0x46, 0x5b, 0x4f, 0x95, 0x6e, 0x8a, 0xa5, 0x3b, 0x1e, 0x01, 0x76, 0x52, 0x29, 0xd3, 0x1b, 0xa7, 0xa9, 0x36, 0x8e, 0x2a, 0x5d, 0x17, 0x73, 0x77, 0x3c, 0x04,
0xa3, 0x72, 0x8d, 0xb4, 0x98, 0xf9, 0x37, 0x4a, 0x59, 0x74, 0x2e, 0x68, 0xc9, 0xfc, 0xb8, 0xd0, 0x46, 0xe5, 0xa6, 0xd2, 0x60, 0xe2, 0xde, 0x29, 0x65, 0xd0, 0x5a, 0x1f, 0x4b, 0x66, 0xc7, 0x59,
0x2a, 0x42, 0xfe, 0xab, 0x0e, 0x8d, 0xcf, 0x7e, 0xae, 0xd9, 0x60, 0x19, 0xd2, 0x3e, 0x78, 0x51, 0xac, 0xdc, 0xe4, 0x06, 0x1e, 0xdf, 0xc5, 0x53, 0xbf, 0xf3, 0x11, 0x95, 0xba, 0xb2, 0xb7, 0x10,
0x61, 0xc6, 0x9f, 0xf4, 0x37, 0x6c, 0xa1, 0xbb, 0x7e, 0x9e, 0xaa, 0xc5, 0x94, 0x85, 0x33, 0xeb, 0x18, 0xaf, 0x9c, 0x7c, 0xf8, 0xcf, 0xfe, 0x37, 0x3c, 0x92, 0x98, 0xc8, 0xf0, 0xfc, 0x77, 0x15,
0x43, 0x5b, 0x4f, 0xbd, 0x99, 0xfa, 0x63, 0xf2, 0x6c, 0x8d, 0x3c, 0x2b, 0x5f, 0x85, 0x7a, 0x5d, 0x6a, 0x5f, 0xdd, 0x54, 0xb3, 0xee, 0x3c, 0x77, 0x63, 0xff, 0x55, 0x09, 0xc7, 0xdd, 0x14, 0x6f,
0x6c, 0x53, 0xe3, 0xbb, 0x0d, 0xca, 0x2b, 0xa2, 0xe0, 0xf3, 0x4c, 0x8e, 0xa7, 0xd8, 0x6d, 0xe6, 0xd3, 0x60, 0x50, 0x73, 0xd3, 0x58, 0xcd, 0x94, 0xed, 0xcf, 0xac, 0x03, 0x0d, 0x3d, 0x76, 0xe9,
0x3e, 0x53, 0x50, 0x9a, 0xf0, 0xf5, 0xf2, 0x84, 0x1f, 0xfc, 0x6c, 0xc2, 0xbd, 0x41, 0xbe, 0x1e, 0xd8, 0x1d, 0x93, 0x4e, 0x56, 0x48, 0x27, 0xc5, 0x2b, 0xdf, 0x63, 0x1b, 0x99, 0x38, 0x75, 0xad,
0xa3, 0xf9, 0xd0, 0x5b, 0x94, 0x13, 0xb4, 0x6c, 0x04, 0xdb, 0x47, 0xe8, 0x4f, 0xa4, 0x47, 0xe7, 0x1a, 0xf9, 0xe5, 0x96, 0xd7, 0xd6, 0x44, 0x0e, 0xc7, 0xd8, 0x0a, 0x32, 0x6d, 0x91, 0x51, 0xd8,
0x69, 0x8c, 0x58, 0xbf, 0xa2, 0xae, 0x1b, 0xc3, 0x7a, 0x77, 0x8c, 0x21, 0xaf, 0xb1, 0x4f, 0xb0, 0xaa, 0xd5, 0xe2, 0x56, 0xed, 0xff, 0x09, 0xe0, 0x7e, 0x37, 0x5b, 0xc9, 0xfe, 0xb4, 0xe7, 0x0c,
0x79, 0x84, 0x05, 0xdf, 0x1d, 0xe8, 0xde, 0xd3, 0x2a, 0xbd, 0xfc, 0xad, 0x04, 0xe3, 0x35, 0xf6, 0xca, 0x11, 0x1a, 0xd6, 0x87, 0xcd, 0x23, 0x74, 0x27, 0xd2, 0xa1, 0x75, 0x54, 0x3d, 0xeb, 0x94,
0x15, 0xb6, 0x16, 0x94, 0xf9, 0x3e, 0x3e, 0xf9, 0x17, 0x2f, 0x41, 0x56, 0xa4, 0xde, 0xaf, 0xb3, 0xd4, 0x75, 0x23, 0x92, 0xf6, 0x02, 0xe9, 0xf3, 0x0a, 0xfb, 0x02, 0xeb, 0x47, 0x98, 0xf3, 0x2d,
0x53, 0xea, 0x42, 0x79, 0x0f, 0x1e, 0x57, 0xb9, 0x5b, 0xac, 0x66, 0xef, 0x79, 0x05, 0x60, 0x79, 0x40, 0xb7, 0x9f, 0x97, 0xc5, 0xcb, 0x72, 0x25, 0x18, 0xaf, 0xb0, 0xef, 0xb0, 0x31, 0xa3, 0xcc,
0x9f, 0x78, 0x8d, 0x9d, 0xc1, 0xff, 0x61, 0x7b, 0xca, 0xe4, 0xab, 0xe5, 0x56, 0x3e, 0xbf, 0xbc, 0xde, 0x80, 0xc5, 0x33, 0x5c, 0x92, 0x7a, 0xaf, 0xca, 0x4e, 0xa9, 0x0b, 0xc5, 0xdd, 0x7b, 0x5a,
0x8c, 0xbc, 0xc6, 0xbe, 0x50, 0xb3, 0xc3, 0x90, 0x3a, 0xb6, 0xfa, 0x50, 0xf6, 0x1e, 0x56, 0x40, 0x36, 0xdd, 0xfc, 0x39, 0x68, 0xbf, 0x2c, 0x01, 0xcc, 0xef, 0x30, 0xaf, 0xb0, 0x33, 0xd8, 0xf2,
0x03, 0x11, 0x35, 0x45, 0x50, 0xc7, 0x4b, 0x1b, 0xb9, 0x5b, 0x91, 0x41, 0xdb, 0xdb, 0xab, 0xf2, 0x1b, 0x5b, 0x24, 0x5f, 0xce, 0xb7, 0x34, 0xfd, 0xe2, 0x03, 0xc0, 0x2b, 0xec, 0x1b, 0x35, 0xdb,
0xe3, 0x96, 0x80, 0xd7, 0x0e, 0xdb, 0xa7, 0xad, 0xfc, 0xb3, 0x35, 0xf1, 0xf9, 0x3a, 0xfd, 0x9d, 0x8b, 0xd4, 0xb2, 0xe5, 0x45, 0xd9, 0x7e, 0x54, 0x02, 0xf5, 0x44, 0xd4, 0x14, 0x03, 0x5b, 0x47,
0x5f, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x3d, 0x76, 0xac, 0xdc, 0x05, 0x00, 0x00, 0x38, 0x83, 0xf7, 0xa7, 0xb1, 0xb2, 0xec, 0x60, 0x69, 0xfa, 0xc2, 0x5a, 0x2e, 0xdd, 0xaa, 0xbd,
0x2a, 0x13, 0x34, 0xe5, 0xc2, 0xcb, 0xb3, 0x53, 0xe2, 0x4b, 0xaf, 0x54, 0xbb, 0x4c, 0x03, 0xb7,
0x04, 0xbc, 0x72, 0xd8, 0x38, 0xad, 0x67, 0x9f, 0x4d, 0x1a, 0x9d, 0xaf, 0xd2, 0x5f, 0xe8, 0xf5,
0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x7b, 0x3e, 0x9f, 0xc4, 0x06, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -581,6 +632,7 @@ type CompactTxStreamerClient interface {
SendTransaction(ctx context.Context, in *RawTransaction, opts ...grpc.CallOption) (*SendResponse, error) SendTransaction(ctx context.Context, in *RawTransaction, opts ...grpc.CallOption) (*SendResponse, error)
// t-Address support // t-Address support
GetUtxos(ctx context.Context, in *TransparentAddress, opts ...grpc.CallOption) (CompactTxStreamer_GetUtxosClient, error) GetUtxos(ctx context.Context, in *TransparentAddress, opts ...grpc.CallOption) (CompactTxStreamer_GetUtxosClient, error)
GetAddressTxids(ctx context.Context, in *TransparentAddressBlockFilter, opts ...grpc.CallOption) (CompactTxStreamer_GetAddressTxidsClient, error)
// Misc // Misc
GetLightdInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LightdInfo, error) GetLightdInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LightdInfo, error)
} }
@ -693,6 +745,38 @@ func (x *compactTxStreamerGetUtxosClient) Recv() (*Utxo, error) {
return m, nil return m, nil
} }
func (c *compactTxStreamerClient) GetAddressTxids(ctx context.Context, in *TransparentAddressBlockFilter, opts ...grpc.CallOption) (CompactTxStreamer_GetAddressTxidsClient, error) {
stream, err := c.cc.NewStream(ctx, &_CompactTxStreamer_serviceDesc.Streams[2], "/cash.z.wallet.sdk.rpc.CompactTxStreamer/GetAddressTxids", opts...)
if err != nil {
return nil, err
}
x := &compactTxStreamerGetAddressTxidsClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type CompactTxStreamer_GetAddressTxidsClient interface {
Recv() (*RawTransaction, error)
grpc.ClientStream
}
type compactTxStreamerGetAddressTxidsClient struct {
grpc.ClientStream
}
func (x *compactTxStreamerGetAddressTxidsClient) Recv() (*RawTransaction, error) {
m := new(RawTransaction)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *compactTxStreamerClient) GetLightdInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LightdInfo, error) { func (c *compactTxStreamerClient) GetLightdInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LightdInfo, error) {
out := new(LightdInfo) out := new(LightdInfo)
err := c.cc.Invoke(ctx, "/cash.z.wallet.sdk.rpc.CompactTxStreamer/GetLightdInfo", in, out, opts...) err := c.cc.Invoke(ctx, "/cash.z.wallet.sdk.rpc.CompactTxStreamer/GetLightdInfo", in, out, opts...)
@ -713,6 +797,7 @@ type CompactTxStreamerServer interface {
SendTransaction(context.Context, *RawTransaction) (*SendResponse, error) SendTransaction(context.Context, *RawTransaction) (*SendResponse, error)
// t-Address support // t-Address support
GetUtxos(*TransparentAddress, CompactTxStreamer_GetUtxosServer) error GetUtxos(*TransparentAddress, CompactTxStreamer_GetUtxosServer) error
GetAddressTxids(*TransparentAddressBlockFilter, CompactTxStreamer_GetAddressTxidsServer) error
// Misc // Misc
GetLightdInfo(context.Context, *Empty) (*LightdInfo, error) GetLightdInfo(context.Context, *Empty) (*LightdInfo, error)
} }
@ -739,6 +824,9 @@ func (*UnimplementedCompactTxStreamerServer) SendTransaction(ctx context.Context
func (*UnimplementedCompactTxStreamerServer) GetUtxos(req *TransparentAddress, srv CompactTxStreamer_GetUtxosServer) error { func (*UnimplementedCompactTxStreamerServer) GetUtxos(req *TransparentAddress, srv CompactTxStreamer_GetUtxosServer) error {
return status.Errorf(codes.Unimplemented, "method GetUtxos not implemented") return status.Errorf(codes.Unimplemented, "method GetUtxos not implemented")
} }
func (*UnimplementedCompactTxStreamerServer) GetAddressTxids(req *TransparentAddressBlockFilter, srv CompactTxStreamer_GetAddressTxidsServer) error {
return status.Errorf(codes.Unimplemented, "method GetAddressTxids not implemented")
}
func (*UnimplementedCompactTxStreamerServer) GetLightdInfo(ctx context.Context, req *Empty) (*LightdInfo, error) { func (*UnimplementedCompactTxStreamerServer) GetLightdInfo(ctx context.Context, req *Empty) (*LightdInfo, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetLightdInfo not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetLightdInfo not implemented")
} }
@ -861,6 +949,27 @@ func (x *compactTxStreamerGetUtxosServer) Send(m *Utxo) error {
return x.ServerStream.SendMsg(m) return x.ServerStream.SendMsg(m)
} }
func _CompactTxStreamer_GetAddressTxids_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(TransparentAddressBlockFilter)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(CompactTxStreamerServer).GetAddressTxids(m, &compactTxStreamerGetAddressTxidsServer{stream})
}
type CompactTxStreamer_GetAddressTxidsServer interface {
Send(*RawTransaction) error
grpc.ServerStream
}
type compactTxStreamerGetAddressTxidsServer struct {
grpc.ServerStream
}
func (x *compactTxStreamerGetAddressTxidsServer) Send(m *RawTransaction) error {
return x.ServerStream.SendMsg(m)
}
func _CompactTxStreamer_GetLightdInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _CompactTxStreamer_GetLightdInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty) in := new(Empty)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -915,6 +1024,11 @@ var _CompactTxStreamer_serviceDesc = grpc.ServiceDesc{
Handler: _CompactTxStreamer_GetUtxos_Handler, Handler: _CompactTxStreamer_GetUtxos_Handler,
ServerStreams: true, ServerStreams: true,
}, },
{
StreamName: "GetAddressTxids",
Handler: _CompactTxStreamer_GetAddressTxids_Handler,
ServerStreams: true,
},
}, },
Metadata: "service.proto", Metadata: "service.proto",
} }

View File

@ -52,6 +52,11 @@ message TransparentAddress {
string address = 1; string address = 1;
} }
message TransparentAddressBlockFilter {
string address = 1;
BlockRange range = 2;
}
message Utxo { message Utxo {
TransparentAddress address = 1; TransparentAddress address = 1;
bytes txid = 2; bytes txid = 2;
@ -73,6 +78,7 @@ service CompactTxStreamer {
// t-Address support // t-Address support
rpc GetUtxos(TransparentAddress) returns (stream Utxo) {} rpc GetUtxos(TransparentAddress) returns (stream Utxo) {}
rpc GetAddressTxids(TransparentAddressBlockFilter) returns (stream RawTransaction) {}
// Misc // Misc
rpc GetLightdInfo(Empty) returns (LightdInfo) {} rpc GetLightdInfo(Empty) returns (LightdInfo) {}