mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-12 11:10:35 +00:00
rpc: provide timestamps in getnep5transfers
Set default value for the first timestamp to a week ago.
This commit is contained in:
parent
9aa7b7fc97
commit
fe5e5ff44a
2 changed files with 60 additions and 11 deletions
|
@ -721,6 +721,18 @@ func (s *Server) getNEP5Transfers(ps request.Params) (interface{}, *response.Err
|
|||
return nil, response.ErrInvalidParams
|
||||
}
|
||||
|
||||
p1, p2 := ps.Value(1), ps.Value(2)
|
||||
start, end, err := getTimestamps(p1, p2)
|
||||
if err != nil {
|
||||
return nil, response.NewInvalidParamsError("", err)
|
||||
}
|
||||
if p2 == nil {
|
||||
end = uint32(time.Now().Unix())
|
||||
if p1 == nil {
|
||||
start = uint32(time.Now().Add(-time.Hour * 24 * 7).Unix())
|
||||
}
|
||||
}
|
||||
|
||||
bs := &result.NEP5Transfers{
|
||||
Address: address.Uint160ToString(u),
|
||||
Received: []result.NEP5Transfer{},
|
||||
|
@ -728,6 +740,9 @@ func (s *Server) getNEP5Transfers(ps request.Params) (interface{}, *response.Err
|
|||
}
|
||||
tr := new(state.NEP5Transfer)
|
||||
err = s.chain.ForEachNEP5Transfer(u, tr, func() error {
|
||||
if tr.Timestamp < start || tr.Timestamp > end {
|
||||
return nil
|
||||
}
|
||||
transfer := result.NEP5Transfer{
|
||||
Timestamp: tr.Timestamp,
|
||||
Asset: tr.Asset,
|
||||
|
|
|
@ -191,15 +191,20 @@ var rpcTestCases = map[string][]rpcTestCase{
|
|||
params: `["notahex"]`,
|
||||
fail: true,
|
||||
},
|
||||
{
|
||||
name: "invalid timestamp",
|
||||
params: `["AKkkumHbBipZ46UMZJoFynJMXzSRnBvKcs", "notanumber"]`,
|
||||
fail: true,
|
||||
},
|
||||
{
|
||||
name: "positive",
|
||||
params: `["AKkkumHbBipZ46UMZJoFynJMXzSRnBvKcs"]`,
|
||||
params: `["AKkkumHbBipZ46UMZJoFynJMXzSRnBvKcs", 0]`,
|
||||
result: func(e *executor) interface{} { return &result.NEP5Transfers{} },
|
||||
check: checkNep5Transfers,
|
||||
},
|
||||
{
|
||||
name: "positive_hash",
|
||||
params: `["a90f00d94349a320376b7cb86c884b53ad76aa2b"]`,
|
||||
params: `["a90f00d94349a320376b7cb86c884b53ad76aa2b", 0]`,
|
||||
result: func(e *executor) interface{} { return &result.NEP5Transfers{} },
|
||||
check: checkNep5Transfers,
|
||||
},
|
||||
|
@ -1159,6 +1164,24 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []
|
|||
t.Run("TooBigStart", func(t *testing.T) { testGetUTXO(t, "", 300, 0) })
|
||||
t.Run("RestrictAll", func(t *testing.T) { testGetUTXO(t, "", 202, 203) })
|
||||
})
|
||||
|
||||
t.Run("getnep5transfers", func(t *testing.T) {
|
||||
ps := []string{`"AKkkumHbBipZ46UMZJoFynJMXzSRnBvKcs"`}
|
||||
h, err := e.chain.GetHeader(e.chain.GetHeaderHash(207))
|
||||
require.NoError(t, err)
|
||||
ps = append(ps, strconv.Itoa(int(h.Timestamp)))
|
||||
h, err = e.chain.GetHeader(e.chain.GetHeaderHash(208))
|
||||
require.NoError(t, err)
|
||||
ps = append(ps, strconv.Itoa(int(h.Timestamp)))
|
||||
|
||||
p := strings.Join(ps, ", ")
|
||||
rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "getnep5transfers", "params": [%s]}`, p)
|
||||
body := doRPCCall(rpc, httpSrv.URL, t)
|
||||
res := checkErrGetResult(t, body, false)
|
||||
actual := new(result.NEP5Transfers)
|
||||
require.NoError(t, json.Unmarshal(res, actual))
|
||||
checkNep5TransfersAux(t, e, actual, true)
|
||||
})
|
||||
}
|
||||
|
||||
func (tc rpcTestCase) getResultPair(e *executor) (expected interface{}, res interface{}) {
|
||||
|
@ -1214,6 +1237,10 @@ func checkNep5Balances(t *testing.T, e *executor, acc interface{}) {
|
|||
}
|
||||
|
||||
func checkNep5Transfers(t *testing.T, e *executor, acc interface{}) {
|
||||
checkNep5TransfersAux(t, e, acc, false)
|
||||
}
|
||||
|
||||
func checkNep5TransfersAux(t *testing.T, e *executor, acc interface{}, onlyFirst bool) {
|
||||
res, ok := acc.(*result.NEP5Transfers)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "AKkkumHbBipZ46UMZJoFynJMXzSRnBvKcs", res.Address)
|
||||
|
@ -1224,20 +1251,27 @@ func checkNep5Transfers(t *testing.T, e *executor, acc interface{}) {
|
|||
assetHashOld, err := util.Uint160DecodeStringLE(testContractHashOld)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 3, len(res.Received))
|
||||
if onlyFirst {
|
||||
require.Equal(t, 1, len(res.Received))
|
||||
} else {
|
||||
require.Equal(t, 3, len(res.Received))
|
||||
}
|
||||
|
||||
require.Equal(t, "1000", res.Received[0].Amount)
|
||||
require.Equal(t, assetHashOld, res.Received[0].Asset)
|
||||
require.Equal(t, address.Uint160ToString(assetHashOld), res.Received[0].Address)
|
||||
|
||||
require.Equal(t, "2", res.Received[1].Amount)
|
||||
require.Equal(t, assetHash, res.Received[1].Asset)
|
||||
require.Equal(t, "AWLYWXB8C9Lt1nHdDZJnC5cpYJjgRDLk17", res.Received[1].Address)
|
||||
require.Equal(t, uint32(0), res.Received[1].NotifyIndex)
|
||||
if !onlyFirst {
|
||||
require.Equal(t, "2", res.Received[1].Amount)
|
||||
require.Equal(t, assetHash, res.Received[1].Asset)
|
||||
require.Equal(t, "AWLYWXB8C9Lt1nHdDZJnC5cpYJjgRDLk17", res.Received[1].Address)
|
||||
require.Equal(t, uint32(0), res.Received[1].NotifyIndex)
|
||||
|
||||
require.Equal(t, "1", res.Received[2].Amount)
|
||||
require.Equal(t, assetHash, res.Received[2].Asset)
|
||||
require.Equal(t, "AWLYWXB8C9Lt1nHdDZJnC5cpYJjgRDLk17", res.Received[2].Address)
|
||||
require.Equal(t, uint32(1), res.Received[2].NotifyIndex)
|
||||
require.Equal(t, "1", res.Received[2].Amount)
|
||||
require.Equal(t, assetHash, res.Received[2].Asset)
|
||||
require.Equal(t, "AWLYWXB8C9Lt1nHdDZJnC5cpYJjgRDLk17", res.Received[2].Address)
|
||||
require.Equal(t, uint32(1), res.Received[2].NotifyIndex)
|
||||
}
|
||||
|
||||
require.Equal(t, 1, len(res.Sent))
|
||||
require.Equal(t, "123", res.Sent[0].Amount)
|
||||
|
|
Loading…
Reference in a new issue