Browse Source

Return tx heights

pull/1/head
Aditya Kulkarni 5 years ago
parent
commit
e723c4e1d8
  1. 13
      frontend/service.go
  2. 36
      storage/sqlite3.go
  3. 96
      walletrpc/service.pb.go
  4. 4
      walletrpc/service.proto

13
frontend/service.go

@ -212,33 +212,34 @@ func (s *SqlStreamer) GetBlockRange(span *walletrpc.BlockRange, resp walletrpc.C
func (s *SqlStreamer) GetTransaction(ctx context.Context, txf *walletrpc.TxFilter) (*walletrpc.RawTransaction, error) {
var txBytes []byte
var txHeight int
var err error
if txf.Hash != nil {
leHashString := hex.EncodeToString(txf.Hash)
txBytes, err = storage.GetTxByHash(ctx, s.db, leHashString)
txBytes, txHeight, err = storage.GetTxByHash(ctx, s.db, leHashString)
if err != nil {
return nil, err
}
return &walletrpc.RawTransaction{Data: txBytes}, nil
return &walletrpc.RawTransaction{Data: txBytes, Height: uint64(txHeight)}, nil
}
if txf.Block.Hash != nil {
leHashString := hex.EncodeToString(txf.Hash)
txBytes, err = storage.GetTxByHashAndIndex(ctx, s.db, leHashString, int(txf.Index))
txBytes, txHeight, err = storage.GetTxByHashAndIndex(ctx, s.db, leHashString, int(txf.Index))
if err != nil {
return nil, err
}
return &walletrpc.RawTransaction{Data: txBytes}, nil
return &walletrpc.RawTransaction{Data: txBytes, Height: uint64(txHeight)}, nil
}
// A totally unset protobuf will attempt to fetch the genesis coinbase tx.
txBytes, err = storage.GetTxByHeightAndIndex(ctx, s.db, int(txf.Block.Height), int(txf.Index))
txBytes, txHeight, err = storage.GetTxByHeightAndIndex(ctx, s.db, int(txf.Block.Height), int(txf.Index))
if err != nil {
return nil, err
}
return &walletrpc.RawTransaction{Data: txBytes}, nil
return &walletrpc.RawTransaction{Data: txBytes, Height: uint64(txHeight)}, nil
}
// GetLightdInfo gets the LightWalletD (this server) info

36
storage/sqlite3.go

@ -189,34 +189,40 @@ func StoreTransaction(db *sql.DB, blockHeight int, blockHash string, txIndex int
}
// GetTxByHash retrieves a full transaction by its little-endian hash.
func GetTxByHash(ctx context.Context, db *sql.DB, txHash string) ([]byte, error) {
func GetTxByHash(ctx context.Context, db *sql.DB, txHash string) ([]byte, int, error) {
var txBytes []byte // avoid a copy with *RawBytes
query := "SELECT tx_bytes from transactions WHERE tx_hash = ?"
err := db.QueryRowContext(ctx, query, txHash).Scan(&txBytes)
var height int
query := "SELECT tx_bytes, block_height from transactions WHERE tx_hash = ?"
err := db.QueryRowContext(ctx, query, txHash).Scan(&txBytes, &height)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("getting tx with hash %s", txHash))
return nil, 0, errors.Wrap(err, fmt.Sprintf("getting tx with hash %s", txHash))
}
return txBytes, nil
return txBytes, height, nil
}
// GetTxByHeightAndIndex retrieves a full transaction by its parent block height and index
func GetTxByHeightAndIndex(ctx context.Context, db *sql.DB, blockHeight, txIndex int) ([]byte, error) {
func GetTxByHeightAndIndex(ctx context.Context, db *sql.DB, blockHeight, txIndex int) ([]byte, int, error) {
var txBytes []byte // avoid a copy with *RawBytes
query := "SELECT tx_bytes from transactions WHERE (block_height = ? AND tx_index = ?)"
err := db.QueryRowContext(ctx, query, blockHeight, txIndex).Scan(&txBytes)
var height int
query := "SELECT tx_bytes, block_height from transactions WHERE (block_height = ? AND tx_index = ?)"
err := db.QueryRowContext(ctx, query, blockHeight, txIndex).Scan(&txBytes, &height)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("getting tx (%d, %d)", blockHeight, txIndex))
return nil, 0, errors.Wrap(err, fmt.Sprintf("getting tx (%d, %d)", blockHeight, txIndex))
}
return txBytes, nil
return txBytes, height, nil
}
// GetTxByHashAndIndex retrieves a full transaction by its parent block hash and index
func GetTxByHashAndIndex(ctx context.Context, db *sql.DB, blockHash string, txIndex int) ([]byte, error) {
func GetTxByHashAndIndex(ctx context.Context, db *sql.DB, blockHash string, txIndex int) ([]byte, int, error) {
var txBytes []byte // avoid a copy with *RawBytes
query := "SELECT tx_bytes from transactions WHERE (block_hash = ? AND tx_index = ?)"
err := db.QueryRowContext(ctx, query, blockHash, txIndex).Scan(&txBytes)
var height int
query := "SELECT tx_bytes, block_height from transactions WHERE (block_hash = ? AND tx_index = ?)"
err := db.QueryRowContext(ctx, query, blockHash, txIndex).Scan(&txBytes, &height)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("getting tx (%x, %d)", blockHash, txIndex))
return nil, 0, errors.Wrap(err, fmt.Sprintf("getting tx (%x, %d)", blockHash, txIndex))
}
return txBytes, nil
return txBytes, height, nil
}

96
walletrpc/service.pb.go

@ -180,9 +180,11 @@ func (m *TxFilter) GetHash() []byte {
return nil
}
// RawTransaction contains the complete transaction data.
// RawTransaction contains the complete transaction data. It also optionally includes
// the block height in which the transaction was included
type RawTransaction struct {
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
Height uint64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -220,6 +222,13 @@ func (m *RawTransaction) GetData() []byte {
return nil
}
func (m *RawTransaction) GetHeight() uint64 {
if m != nil {
return m.Height
}
return 0
}
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"`
@ -567,48 +576,49 @@ func init() {
func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
var fileDescriptor_a0b84a42fa06f626 = []byte{
// 654 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdf, 0x4f, 0x13, 0x41,
0x10, 0x6e, 0xa5, 0x07, 0x74, 0x5a, 0x20, 0x6e, 0xc4, 0x34, 0x15, 0xb5, 0xae, 0x9a, 0xe0, 0xcb,
0x85, 0x20, 0xc6, 0x67, 0xa9, 0x4a, 0x48, 0x30, 0xd1, 0x6d, 0xf5, 0x01, 0x1f, 0xc8, 0x72, 0x3b,
0xd0, 0x93, 0xf6, 0xf6, 0xb2, 0xbb, 0x2d, 0xd5, 0x7f, 0xd0, 0xff, 0xc8, 0x67, 0xb3, 0x73, 0x57,
0xb8, 0x06, 0xcf, 0xf6, 0x6d, 0x67, 0xef, 0x9b, 0x6f, 0x7e, 0x7d, 0xb3, 0x07, 0x1b, 0x16, 0xcd,
0x24, 0x8e, 0x30, 0x4c, 0x8d, 0x76, 0x9a, 0x6d, 0x47, 0xd2, 0x0e, 0xc2, 0x5f, 0xe1, 0xb5, 0x1c,
0x0e, 0xd1, 0x85, 0x56, 0x5d, 0x85, 0x26, 0x8d, 0xda, 0xdb, 0x91, 0x1e, 0xa5, 0x32, 0x72, 0x67,
0x17, 0xda, 0x8c, 0xa4, 0xb3, 0x19, 0x9a, 0xbf, 0x81, 0xb5, 0xc3, 0xa1, 0x8e, 0xae, 0x8e, 0xdf,
0xb3, 0x87, 0xb0, 0x3a, 0xc0, 0xf8, 0x72, 0xe0, 0x5a, 0xd5, 0x4e, 0x75, 0xb7, 0x26, 0x72, 0x8b,
0x31, 0xa8, 0x0d, 0xa4, 0x1d, 0xb4, 0xee, 0x75, 0xaa, 0xbb, 0x4d, 0x41, 0x67, 0xee, 0x00, 0xc8,
0x4d, 0xc8, 0xe4, 0x12, 0xd9, 0x01, 0x04, 0xd6, 0x49, 0x93, 0x39, 0x36, 0xf6, 0x9f, 0x84, 0xff,
0x4c, 0x21, 0xcc, 0x03, 0x89, 0x0c, 0xcc, 0xf6, 0x60, 0x05, 0x13, 0x45, 0xb4, 0x8b, 0x7d, 0x3c,
0x94, 0xff, 0x80, 0xf5, 0xfe, 0xf4, 0x63, 0x3c, 0x74, 0x68, 0x7c, 0xcc, 0x73, 0xff, 0x6d, 0xd9,
0x98, 0x04, 0x66, 0x0f, 0x20, 0x88, 0x13, 0x85, 0x53, 0x8a, 0x5a, 0x13, 0x99, 0x71, 0x53, 0xe1,
0x4a, 0xa1, 0xc2, 0x17, 0xb0, 0x29, 0xe4, 0x75, 0xdf, 0xc8, 0xc4, 0xca, 0xc8, 0xc5, 0x3a, 0xf1,
0x28, 0x25, 0x9d, 0xa4, 0x80, 0x4d, 0x41, 0x67, 0xfe, 0x19, 0x9a, 0x3d, 0x4c, 0x94, 0x40, 0x9b,
0xea, 0xc4, 0x22, 0xdb, 0x81, 0x3a, 0x1a, 0xa3, 0x4d, 0x57, 0x2b, 0x24, 0x60, 0x20, 0x6e, 0x2f,
0x18, 0x87, 0x26, 0x19, 0x9f, 0xd0, 0x5a, 0x79, 0x89, 0x94, 0x44, 0x5d, 0xcc, 0xdd, 0xf1, 0x06,
0xd4, 0xbb, 0x03, 0x19, 0x27, 0xbd, 0x14, 0x23, 0xbe, 0x06, 0xc1, 0x87, 0x51, 0xea, 0x7e, 0xf2,
0x73, 0x80, 0x13, 0x3f, 0x0c, 0x75, 0x9c, 0x5c, 0x68, 0xd6, 0x82, 0xb5, 0x09, 0x1a, 0x1b, 0xeb,
0x84, 0x62, 0xd4, 0xc5, 0xcc, 0xf4, 0x33, 0x9c, 0x60, 0xa2, 0xb4, 0xc9, 0xb9, 0x73, 0xcb, 0x47,
0x76, 0x52, 0x29, 0xd3, 0x1b, 0xa7, 0xa9, 0x36, 0x8e, 0x2a, 0x5d, 0x17, 0x73, 0x77, 0x3c, 0x04,
0x46, 0xe5, 0xa6, 0xd2, 0x60, 0xe2, 0xde, 0x29, 0x65, 0xd0, 0x5a, 0x1f, 0x4b, 0x66, 0xc7, 0x59,
0xac, 0xdc, 0xe4, 0x06, 0x1e, 0xdf, 0xc5, 0x53, 0xbf, 0xf3, 0x11, 0x95, 0xba, 0xb2, 0xb7, 0x10,
0x18, 0xaf, 0x9c, 0x7c, 0xf8, 0xcf, 0xfe, 0x37, 0x3c, 0x92, 0x98, 0xc8, 0xf0, 0xfc, 0x77, 0x15,
0x6a, 0x5f, 0xdd, 0x54, 0xb3, 0xee, 0x3c, 0x77, 0x63, 0xff, 0x55, 0x09, 0xc7, 0xdd, 0x14, 0x6f,
0xd3, 0x60, 0x50, 0x73, 0xd3, 0x58, 0xcd, 0x94, 0xed, 0xcf, 0xac, 0x03, 0x0d, 0x3d, 0x76, 0xe9,
0xd8, 0x1d, 0x93, 0x4e, 0x56, 0x48, 0x27, 0xc5, 0x2b, 0xdf, 0x63, 0x1b, 0x99, 0x38, 0x75, 0xad,
0x1a, 0xf9, 0xe5, 0x96, 0xd7, 0xd6, 0x44, 0x0e, 0xc7, 0xd8, 0x0a, 0x32, 0x6d, 0x91, 0x51, 0xd8,
0xaa, 0xd5, 0xe2, 0x56, 0xed, 0xff, 0x09, 0xe0, 0x7e, 0x37, 0x5b, 0xc9, 0xfe, 0xb4, 0xe7, 0x0c,
0xca, 0x11, 0x1a, 0xd6, 0x87, 0xcd, 0x23, 0x74, 0x27, 0xd2, 0xa1, 0x75, 0x54, 0x3d, 0xeb, 0x94,
0xd4, 0x75, 0x23, 0x92, 0xf6, 0x02, 0xe9, 0xf3, 0x0a, 0xfb, 0x02, 0xeb, 0x47, 0x98, 0xf3, 0x2d,
0x40, 0xb7, 0x9f, 0x97, 0xc5, 0xcb, 0x72, 0x25, 0x18, 0xaf, 0xb0, 0xef, 0xb0, 0x31, 0xa3, 0xcc,
0xde, 0x80, 0xc5, 0x33, 0x5c, 0x92, 0x7a, 0xaf, 0xca, 0x4e, 0xa9, 0x0b, 0xc5, 0xdd, 0x7b, 0x5a,
0x36, 0xdd, 0xfc, 0x39, 0x68, 0xbf, 0x2c, 0x01, 0xcc, 0xef, 0x30, 0xaf, 0xb0, 0x33, 0xd8, 0xf2,
0x1b, 0x5b, 0x24, 0x5f, 0xce, 0xb7, 0x34, 0xfd, 0xe2, 0x03, 0xc0, 0x2b, 0xec, 0x1b, 0x35, 0xdb,
0x8b, 0xd4, 0xb2, 0xe5, 0x45, 0xd9, 0x7e, 0x54, 0x02, 0xf5, 0x44, 0xd4, 0x14, 0x03, 0x5b, 0x47,
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,
// 662 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x41, 0x6f, 0x13, 0x3d,
0x10, 0x4d, 0xda, 0x6c, 0xdb, 0x4c, 0xd2, 0x56, 0x9f, 0xf5, 0x15, 0x45, 0xa1, 0x40, 0x30, 0x42,
0x2a, 0x97, 0x55, 0x55, 0x8a, 0xb8, 0x70, 0xa1, 0x01, 0xaa, 0x4a, 0x45, 0x02, 0x27, 0x70, 0x28,
0x87, 0xca, 0x5d, 0x4f, 0x9b, 0xa5, 0xc9, 0x7a, 0x65, 0x3b, 0x69, 0xe0, 0x0f, 0xf2, 0x8f, 0x38,
0x23, 0xcf, 0x6e, 0xda, 0x8d, 0xca, 0x92, 0xdc, 0x3c, 0xde, 0x37, 0xef, 0xd9, 0x33, 0x6f, 0xbc,
0xb0, 0x69, 0xd1, 0x4c, 0xe2, 0x08, 0xc3, 0xd4, 0x68, 0xa7, 0xd9, 0x4e, 0x24, 0xed, 0x20, 0xfc,
0x19, 0xde, 0xc8, 0xe1, 0x10, 0x5d, 0x68, 0xd5, 0x75, 0x68, 0xd2, 0xa8, 0xbd, 0x13, 0xe9, 0x51,
0x2a, 0x23, 0x77, 0x7e, 0xa9, 0xcd, 0x48, 0x3a, 0x9b, 0xa1, 0xf9, 0x2b, 0x58, 0x3f, 0x1a, 0xea,
0xe8, 0xfa, 0xe4, 0x1d, 0x7b, 0x00, 0x6b, 0x03, 0x8c, 0xaf, 0x06, 0xae, 0x55, 0xed, 0x54, 0xf7,
0x6a, 0x22, 0x8f, 0x18, 0x83, 0xda, 0x40, 0xda, 0x41, 0x6b, 0xa5, 0x53, 0xdd, 0x6b, 0x0a, 0x5a,
0x73, 0x07, 0x40, 0x69, 0x42, 0x26, 0x57, 0xc8, 0x0e, 0x21, 0xb0, 0x4e, 0x9a, 0x2c, 0xb1, 0x71,
0xf0, 0x38, 0xfc, 0xeb, 0x11, 0xc2, 0x5c, 0x48, 0x64, 0x60, 0xb6, 0x0f, 0xab, 0x98, 0x28, 0xa2,
0x5d, 0x9c, 0xe3, 0xa1, 0xfc, 0x3b, 0x6c, 0xf4, 0xa7, 0x1f, 0xe2, 0xa1, 0x43, 0xe3, 0x35, 0x2f,
0xfc, 0xb7, 0x65, 0x35, 0x09, 0xcc, 0xfe, 0x87, 0x20, 0x4e, 0x14, 0x4e, 0x49, 0xb5, 0x26, 0xb2,
0xe0, 0xf6, 0x86, 0xab, 0x85, 0x1b, 0xbe, 0x81, 0x2d, 0x21, 0x6f, 0xfa, 0x46, 0x26, 0x56, 0x46,
0x2e, 0xd6, 0x89, 0x47, 0x29, 0xe9, 0x24, 0x09, 0x36, 0x05, 0xad, 0x0b, 0x35, 0x5b, 0x29, 0xd6,
0x8c, 0x7f, 0x82, 0x66, 0x0f, 0x13, 0x25, 0xd0, 0xa6, 0x3a, 0xb1, 0xc8, 0x76, 0xa1, 0x8e, 0xc6,
0x68, 0xd3, 0xd5, 0x0a, 0x89, 0x20, 0x10, 0x77, 0x1b, 0x8c, 0x43, 0x93, 0x82, 0x8f, 0x68, 0xad,
0xbc, 0x42, 0xe2, 0xaa, 0x8b, 0xb9, 0x3d, 0xde, 0x80, 0x7a, 0x77, 0x20, 0xe3, 0xa4, 0x97, 0x62,
0xc4, 0xd7, 0x21, 0x78, 0x3f, 0x4a, 0xdd, 0x0f, 0x7e, 0x01, 0x70, 0xea, 0x05, 0xd5, 0x49, 0x72,
0xa9, 0x59, 0x0b, 0xd6, 0x27, 0x68, 0x6c, 0xac, 0x13, 0xd2, 0xa8, 0x8b, 0x59, 0xe8, 0xcf, 0x39,
0xc1, 0x44, 0x69, 0x93, 0x73, 0xe7, 0x91, 0x57, 0x76, 0x52, 0x29, 0xd3, 0x1b, 0xa7, 0xa9, 0x36,
0x8e, 0x2a, 0xb0, 0x21, 0xe6, 0xf6, 0x78, 0x08, 0x8c, 0xca, 0x90, 0x4a, 0x83, 0x89, 0x7b, 0xab,
0x94, 0x41, 0x6b, 0xbd, 0x96, 0xcc, 0x96, 0x33, 0xad, 0x3c, 0xe4, 0x06, 0x1e, 0xdd, 0xc7, 0x53,
0x1f, 0xf2, 0xd6, 0x95, 0xa6, 0xb2, 0xd7, 0x10, 0x18, 0xef, 0xa8, 0xdc, 0x14, 0x4f, 0xff, 0xd5,
0x54, 0xb2, 0x9e, 0xc8, 0xf0, 0xfc, 0x57, 0x15, 0x6a, 0x5f, 0xdc, 0x54, 0xb3, 0xee, 0x3c, 0x77,
0xe3, 0xe0, 0x45, 0x09, 0xc7, 0xfd, 0x23, 0xde, 0x1d, 0x83, 0x41, 0xcd, 0x4d, 0x63, 0x35, 0x73,
0xbc, 0x5f, 0xb3, 0x0e, 0x34, 0xf4, 0xd8, 0xa5, 0x63, 0x77, 0x42, 0xfe, 0x59, 0xa5, 0x76, 0x17,
0xb7, 0x7c, 0x8d, 0x6d, 0x64, 0xe2, 0xd4, 0xb5, 0x6a, 0x94, 0x97, 0x47, 0xde, 0x73, 0x13, 0x39,
0x1c, 0x63, 0x2b, 0xc8, 0x3c, 0x47, 0x41, 0xc1, 0x39, 0x6b, 0x45, 0xe7, 0x1c, 0xfc, 0x0e, 0xe0,
0xbf, 0x6e, 0x36, 0xaa, 0xfd, 0x69, 0xcf, 0x19, 0x94, 0x23, 0x34, 0xac, 0x0f, 0x5b, 0xc7, 0xe8,
0x4e, 0xa5, 0x43, 0xeb, 0xe8, 0xf6, 0xac, 0x53, 0x72, 0xaf, 0x5b, 0x93, 0xb4, 0x17, 0x8c, 0x04,
0xaf, 0xb0, 0xcf, 0xb0, 0x71, 0x8c, 0x39, 0xdf, 0x02, 0x74, 0xfb, 0x59, 0x99, 0x5e, 0x76, 0x56,
0x82, 0xf1, 0x0a, 0xfb, 0x06, 0x9b, 0x33, 0xca, 0xec, 0x6d, 0x58, 0xdc, 0xc3, 0x25, 0xa9, 0xf7,
0xab, 0xec, 0x8c, 0xaa, 0x50, 0x9c, 0xc9, 0x27, 0x65, 0xdd, 0xcd, 0x9f, 0x89, 0xf6, 0xf3, 0x12,
0xc0, 0xfc, 0x6c, 0xf3, 0x0a, 0x3b, 0x87, 0x6d, 0x3f, 0xb1, 0x45, 0xf2, 0xe5, 0x72, 0x4b, 0x8f,
0x5f, 0x7c, 0x00, 0x78, 0x85, 0x7d, 0xa5, 0x62, 0x7b, 0x93, 0x5a, 0xb6, 0xbc, 0x29, 0xdb, 0x0f,
0x4b, 0xa0, 0x9e, 0x88, 0x8a, 0x62, 0x60, 0xfb, 0x18, 0x67, 0xf0, 0xfe, 0x34, 0x56, 0x96, 0x1d,
0x2e, 0x4d, 0x5f, 0x18, 0xcb, 0xa5, 0x4b, 0xb5, 0x5f, 0x65, 0x82, 0xba, 0x5c, 0x78, 0x79, 0x76,
0x4b, 0x72, 0xe9, 0x95, 0x6a, 0x97, 0x79, 0xe0, 0x8e, 0x80, 0x57, 0x8e, 0x1a, 0x67, 0xf5, 0xec,
0xb3, 0x49, 0xa3, 0x8b, 0x35, 0xfa, 0x3b, 0xbd, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x39, 0x0c,
0xff, 0xa5, 0xdc, 0x06, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

4
walletrpc/service.proto

@ -27,9 +27,11 @@ message TxFilter {
bytes hash = 3;
}
// RawTransaction contains the complete transaction data.
// RawTransaction contains the complete transaction data. It also optionally includes
// the block height in which the transaction was included
message RawTransaction {
bytes data = 1;
uint64 height = 2;
}
message SendResponse {

Loading…
Cancel
Save