Cleanup after tx fetching changes

- unused API methods are removed
- some unusued code is removed too
- API docs are updated

That's just a portion of clean up that should be done,
but the rest of it will probably happen in different PR
with changes to the way how we watch to chain updates.
This commit is contained in:
Roman Volosovskyi 2020-02-07 12:26:00 +02:00
parent 0b6ad662b5
commit dc80cb0e06
No known key found for this signature in database
GPG Key ID: 0238A4B5ECEE70DE
5 changed files with 21 additions and 139 deletions

View File

@ -1 +1 @@
0.43.1
0.43.2

View File

@ -25,77 +25,6 @@ To correctly start the service two values need to be changed in the config:
API
----------
#### wallet_getTransfers
Returns avaiable transfers in a given range.
##### Parameters
- `start`: `BIGINT` - start of the range
- `end`: `BIGINT` - end of the range. if nil query will return all transfers from start.
##### Examples
```json
{"jsonrpc":"2.0","id":14,"method":"wallet_getTransfers","params":[0,20]}
{"jsonrpc":"2.0","id":14,"method":"wallet_getTransfers","params":[0,null]}
{"jsonrpc":"2.0","id":13,"method":"wallet_getTransfers","params":[0]}
```
##### Returns
List of objects like:
```
[
{
"id": "0xac14e5fb9a81fd7d0517e51e23c4f3a8040459bfe0c4bee97b813db2d0438e2e",
"type": "eth",
"blockNumber": "0x1",
"blockhash": "0x1471b02682f2308ce74314d89009251afb1f2d5dedc6835d069b1ad6edf98257",
"timestamp": "0x5d25a873",
"gasPrice": "0xa",
"gasLimit": "0xf4240",
"gasUsed": "0x5208",
"nonce": "0x0",
"input": "0x",
"txStatus": "0x1",
"txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"value": "0xde0b6b3a7640000",
"from": "0xd1c9bfa31ae8c085ba4672b165151245b9bfc25e",
"to": "0x9dfc85106d84405a83271c2fe0cdfc1ca311a1f5",
"contract": "0x0000000000000000000000000000000000000000"
},
{
"id": "0x2629ee5f443d558ee4ae9e1cf202d76c04e262051b8d8acde7b766bb9d95068e",
"type": "erc20",
"blockNumber": "0x2",
"blockhash": "0x046ad915b86a5eaa6026c8cdd09ea2f09fd3e603dd6e1ea86e8318f4a4b7d4e0",
"timestamp": "0x5d25a88a",
"gasPrice": "0x1",
"gasLimit": "0xb0b8",
"gasUsed": "0xb0b8",
"nonce": "0x1",
"txStatus": "0x1",
"input": "0xa9059cbb000000000000000000000000f759c6683dfc5dad899eb86529dfaf4d0b25af1b0000000000000000000000000000000000000000000000000000000000000064",
"txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"value": "0x64",
"from": "0xbd691e87d65b2857de55ac44598161ea135f73f6",
"to": "0xf759c6683dfc5dad899eb86529dfaf4d0b25af1b",
"contract": "0xd2439b0e20823e1e4c08df2d19c3b6a4c5f8f2d1"
}
]
```
##### Examples
```json
{"jsonrpc":"2.0","id":14,"method":"wallet_getTransfers","params":[0,20]}
{"jsonrpc":"2.0","id":14,"method":"wallet_getTransfers","params":[0,null]}
{"jsonrpc":"2.0","id":13,"method":"wallet_getTransfers","params":[0]}
```
#### wallet_getTransfersByAddress
Returns avaiable transfers in a given range.
@ -103,13 +32,13 @@ Returns avaiable transfers in a given range.
##### Parameters
- `address`: `HEX` - ethereum address encoded in hex
- `start`: `BIGINT` - start of the range
- `end`: `BIGINT` - end of the range. if nil query will return all transfers from start.
- `toBlock`: `BIGINT` - end of the range. if nil query will return last transfers.
- `limit`: `BIGINT` - limit of returned transfers.
##### Examples
```json
{"jsonrpc":"2.0","id":7,"method":"wallet_getTransfersByAddress","params":["0xb81a6845649fa8c042dfaceb3f7a684873406993","0x0"]}
{"jsonrpc":"2.0","id":7,"method":"wallet_getTransfersByAddress","params":["0xb81a6845649fa8c042dfaceb3f7a684873406993","0x0","0x5"]}
```
##### Returns

View File

@ -24,69 +24,22 @@ type API struct {
s *Service
}
// GetTransfers returns transfers in range of blocks. If `end` is nil all transfers from `start` will be returned.
// TODO(dshulyak) benchmark loading many transfers from database. We can avoid json unmarshal/marshal if we will
// read header, tx and receipt as a raw json.
func (api *API) GetTransfers(ctx context.Context, start, end *hexutil.Big) ([]TransferView, error) {
log.Debug("call to get transfers", "start", start, "end", end)
if start == nil {
return nil, errors.New("start of the query must be provided. use 0 if you want to load all transfers")
}
if api.s.db == nil {
return nil, ErrServiceNotInitialized
}
rst, err := api.s.db.GetTransfers((*big.Int)(start), (*big.Int)(end))
if err != nil {
return nil, err
}
log.Debug("result from database for transfers", "start", start, "end", end, "len", len(rst))
return castToTransferViews(rst), nil
}
type StatsView struct {
BlocksStats map[int64]int64 `json:"blocksStats"`
TransfersCount int64 `json:"transfersCount"`
}
// GetTransfersFromBlock
func (api *API) GetTransfersFromBlock(ctx context.Context, address common.Address, block *hexutil.Big) ([]TransferView, error) {
log.Debug("[WalletAPI:: GetTransfersFromBlock] get transfers from block", "address", address, "block", block)
if api.s.db == nil {
return nil, ErrServiceNotInitialized
}
blocksByAddress := make(map[common.Address][]*big.Int)
blocksByAddress[address] = []*big.Int{block.ToInt()}
txCommand := &loadTransfersCommand{
accounts: []common.Address{address},
db: api.s.db,
chain: api.s.reactor.chain,
client: api.s.client,
blocksByAddress: blocksByAddress,
}
err := txCommand.Command()(ctx)
if err != nil {
return nil, err
}
rst, err := api.s.db.GetTransfersInRange(address, block.ToInt(), block.ToInt())
if err != nil {
return nil, err
}
return castToTransferViews(rst), nil
}
// GetTransfersByAddress returns transfers for a single address
func (api *API) GetTransfersByAddress(ctx context.Context, address common.Address, beforeBlock, limit *hexutil.Big) ([]TransferView, error) {
log.Info("call to get transfers for an address", "address", address, "block", beforeBlock, "limit", limit)
func (api *API) GetTransfersByAddress(ctx context.Context, address common.Address, toBlock, limit *hexutil.Big) ([]TransferView, error) {
log.Debug("[WalletAPI:: GetTransfersByAddress] get transfers for an address", "address", address, "block", toBlock, "limit", limit)
if api.s.db == nil {
log.Error("[WalletAPI:: GetTransfersByAddress] db is not initialized")
return nil, ErrServiceNotInitialized
}
rst, err := api.s.db.GetTransfersByAddress(address, beforeBlock.ToInt(), limit.ToInt().Int64())
var toBlockBN *big.Int
if toBlock != nil {
toBlockBN = toBlock.ToInt()
}
rst, err := api.s.db.GetTransfersByAddress(address, toBlockBN, limit.ToInt().Int64())
if err != nil {
log.Error("[WalletAPI:: GetTransfersByAddress] can't fetch transfers", "err", err)
return nil, err
}
@ -142,7 +95,7 @@ func (api *API) GetTransfersByAddress(ctx context.Context, address common.Addres
if err != nil {
return nil, err
}
rst, err = api.s.db.GetTransfersByAddress(address, beforeBlock.ToInt(), limit.ToInt().Int64())
rst, err = api.s.db.GetTransfersByAddress(address, toBlockBN, limit.ToInt().Int64())
if err != nil {
return nil, err
}

View File

@ -234,11 +234,11 @@ func (db *Database) GetTransfersInRange(address common.Address, start, end *big.
}
// GetTransfersByAddress loads transfers for a given address between two blocks.
func (db *Database) GetTransfersByAddress(address common.Address, fromBlock *big.Int, limit int64) (rst []Transfer, err error) {
func (db *Database) GetTransfersByAddress(address common.Address, toBlock *big.Int, limit int64) (rst []Transfer, err error) {
query := newTransfersQuery().
FilterNetwork(db.network).
FilterAddress(address).
FilterEnd(fromBlock).
FilterEnd(toBlock).
FilterLoaded(1).
Limit(limit)
@ -250,7 +250,7 @@ func (db *Database) GetTransfersByAddress(address common.Address, fromBlock *big
return query.Scan(rows)
}
// GetTransfersByAddress loads transfers for a given address between two blocks.
// GetBlocksByAddress loads blocks for a given address.
func (db *Database) GetBlocksByAddress(address common.Address, limit int) (rst []*big.Int, err error) {
query := `SELECT blk_number FROM blocks
WHERE address = ? AND network_id = ? AND loaded = 0

View File

@ -85,7 +85,7 @@ func (q *transfersQuery) FilterBlockHash(blockHash common.Hash) *transfersQuery
}
func (q *transfersQuery) Limit(pageSize int64) *transfersQuery {
q.buf.WriteString(" ORDER BY blk_number DESC ")
q.buf.WriteString(" ORDER BY blk_number DESC, hash ASC ")
q.buf.WriteString(" LIMIT ?")
q.args = append(q.args, pageSize)
return q