implemented fromIdx and toIdx in transaction-pool request

This commit is contained in:
Mikelle
2021-03-30 12:10:13 +03:00
parent b565c9da1a
commit 22ffd93292
6 changed files with 52 additions and 11 deletions

View File

@@ -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)

View File

@@ -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 in: query
required: false required: false
description: Id of the account description: Id of the from account
schema:
$ref: '#/components/schemas/AccountIndex'
- name: toAccountIndex
in: query
required: false
description: Id of the to account
schema: schema:
$ref: '#/components/schemas/AccountIndex' $ref: '#/components/schemas/AccountIndex'
responses: responses:

View File

@@ -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 // Get from idx
idx, err := parseIdx(c) 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

View File

@@ -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)

View File

@@ -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, fromIdx)
args = append(args, idx) 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)

View File

@@ -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))
} }