Browse Source

implemented fromIdx and toIdx in transaction-pool request

feature/getPoolTxs
Mikelle 3 years ago
parent
commit
22ffd93292
6 changed files with 52 additions and 11 deletions
  1. +12
    -0
      api/parsers.go
  2. +8
    -2
      api/swagger.yml
  3. +9
    -3
      api/txspool.go
  4. +1
    -1
      api/txspool_test.go
  5. +21
    -4
      db/l2db/apiqueries.go
  6. +1
    -1
      db/l2db/l2db_test.go

+ 12
- 0
api/parsers.go

@ -172,6 +172,18 @@ func parseIdx(c querier) (*common.Idx, error) {
return stringToIdx(idxStr, name) return stringToIdx(idxStr, name)
} }
func parseFromIdx(c querier) (*common.Idx, error) {
const name = "fromAccountIndex"
idxStr := c.Query(name)
return stringToIdx(idxStr, name)
}
func parseToIdx(c querier) (*common.Idx, error) {
const name = "toAccountIndex"
idxStr := c.Query(name)
return stringToIdx(idxStr, name)
}
func parseExitFilters(c querier) (*common.TokenID, *ethCommon.Address, *babyjub.PublicKeyComp, *common.Idx, error) { func parseExitFilters(c querier) (*common.TokenID, *ethCommon.Address, *babyjub.PublicKeyComp, *common.Idx, error) {
// TokenID // TokenID
tid, err := parseQueryUint("tokenId", nil, 0, maxUint32, c) tid, err := parseQueryUint("tokenId", nil, 0, maxUint32, c)

+ 8
- 2
api/swagger.yml

@ -427,10 +427,16 @@ paths:
description: State of the transactions, e.g. "pend" description: State of the transactions, e.g. "pend"
schema: schema:
$ref: '#/components/schemas/PoolL2TransactionState' $ref: '#/components/schemas/PoolL2TransactionState'
- name: accountIndex
- name: fromAccountIndex
in: query
required: false
description: Id of the from account
schema:
$ref: '#/components/schemas/AccountIndex'
- name: toAccountIndex
in: query in: query
required: false required: false
description: Id of the account
description: Id of the to account
schema: schema:
$ref: '#/components/schemas/AccountIndex' $ref: '#/components/schemas/AccountIndex'
responses: responses:

+ 9
- 3
api/txspool.go

@ -56,8 +56,14 @@ func (a *API) getPoolTx(c *gin.Context) {
} }
func (a *API) getPoolTxs(c *gin.Context) { func (a *API) getPoolTxs(c *gin.Context) {
// Get idx
idx, err := parseIdx(c)
// Get from idx
fromIdx, err := parseFromIdx(c)
if err != nil {
retBadReq(err, c)
return
}
// Get to idx
toIdx, err := parseToIdx(c)
if err != nil { if err != nil {
retBadReq(err, c) retBadReq(err, c)
return return
@ -69,7 +75,7 @@ func (a *API) getPoolTxs(c *gin.Context) {
return return
} }
// Fetch txs from l2DB // Fetch txs from l2DB
txs, err := a.l2.GetPoolTxs(idx, state)
txs, err := a.l2.GetPoolTxs(fromIdx, toIdx, state)
if err != nil { if err != nil {
retSQLErr(err, c) retSQLErr(err, c)
return return

+ 1
- 1
api/txspool_test.go

@ -233,7 +233,7 @@ func TestPoolTxs(t *testing.T) {
fetchedTxs := testPoolTxsResponse{} fetchedTxs := testPoolTxsResponse{}
require.NoError(t, doGoodReq( require.NoError(t, doGoodReq(
"GET", "GET",
endpoint+"?accountIndex=hez:ETH:263",
endpoint+"?fromAccountIndex=hez:ETH:263",
nil, &fetchedTxs)) nil, &fetchedTxs))
assert.Equal(t, 1, len(fetchedTxs.Txs)) assert.Equal(t, 1, len(fetchedTxs.Txs))
assert.Equal(t, "hez:ETH:263", fetchedTxs.Txs[0].FromIdx) assert.Equal(t, "hez:ETH:263", fetchedTxs.Txs[0].FromIdx)

+ 21
- 4
db/l2db/apiqueries.go

@ -129,7 +129,7 @@ func (l2db *L2DB) GetTxAPI(txID common.TxID) (*PoolTxAPI, error) {
} }
// GetPoolTxs return Txs from the pool // GetPoolTxs return Txs from the pool
func (l2db *L2DB) GetPoolTxs(idx *common.Idx, state *common.PoolL2TxState) ([]*PoolTxAPI, error) {
func (l2db *L2DB) GetPoolTxs(fromIdx, toIdx *common.Idx, state *common.PoolL2TxState) ([]*PoolTxAPI, error) {
cancel, err := l2db.apiConnCon.Acquire() cancel, err := l2db.apiConnCon.Acquire()
defer cancel() defer cancel()
if err != nil { if err != nil {
@ -145,7 +145,8 @@ func (l2db *L2DB) GetPoolTxs(idx *common.Idx, state *common.PoolL2TxState) ([]*P
args = append(args, state) args = append(args, state)
nextIsAnd = true nextIsAnd = true
} }
if idx != nil {
if fromIdx != nil && toIdx != nil {
if nextIsAnd { if nextIsAnd {
queryStr += "AND (" queryStr += "AND ("
} else { } else {
@ -153,8 +154,24 @@ func (l2db *L2DB) GetPoolTxs(idx *common.Idx, state *common.PoolL2TxState) ([]*P
} }
queryStr += "tx_pool.from_idx = ? " queryStr += "tx_pool.from_idx = ? "
queryStr += "OR tx_pool.to_idx = ?) " queryStr += "OR tx_pool.to_idx = ?) "
args = append(args, idx)
args = append(args, idx)
args = append(args, fromIdx)
args = append(args, toIdx)
} else if fromIdx != nil {
if nextIsAnd {
queryStr += "AND "
} else {
queryStr += "WHERE "
}
queryStr += "tx_pool.from_idx = ?"
args = append(args, fromIdx)
} else if toIdx != nil {
if nextIsAnd {
queryStr += "AND "
} else {
queryStr += "WHERE "
}
queryStr += "tx_pool.to_idx = ?"
args = append(args, toIdx)
} }
queryStr += "AND NOT external_delete;" queryStr += "AND NOT external_delete;"
query := l2db.dbRead.Rebind(queryStr) query := l2db.dbRead.Rebind(queryStr)

+ 1
- 1
db/l2db/l2db_test.go

@ -328,7 +328,7 @@ func TestL2DB_GetPoolTxs(t *testing.T) {
pendingTxs = append(pendingTxs, &poolL2Txs[i]) pendingTxs = append(pendingTxs, &poolL2Txs[i])
} }
} }
fetchedTxs, err := l2DBWithACC.GetPoolTxs(&idx, &state)
fetchedTxs, err := l2DBWithACC.GetPoolTxs(&idx, &idx, &state)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, len(pendingTxs), len(fetchedTxs)) assert.Equal(t, len(pendingTxs), len(fetchedTxs))
} }

Loading…
Cancel
Save