Node/Acct: Pending status query fix (#2320)

* Node/Acct: Pending status query fix

* Node/Acct: Test should actually verify the results
This commit is contained in:
bruce-riley 2023-01-31 05:22:51 -06:00 committed by GitHub
parent 15f485885b
commit 4116f8454d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 7 deletions

View File

@ -66,7 +66,7 @@ type (
// TransferStatus contains the status returned for a transfer. // TransferStatus contains the status returned for a transfer.
TransferStatus struct { TransferStatus struct {
Committed *TransferStatusCommitted `json:"committed"` Committed *TransferStatusCommitted `json:"committed"`
Pending *TransferStatusPending `json:"pending"` Pending *[]TransferStatusPending `json:"pending"`
} }
// TransferStatusCommitted contains the data returned for a committed transfer. // TransferStatusCommitted contains the data returned for a committed transfer.
@ -85,7 +85,11 @@ type (
// TransferStatusPending contains the data returned for a committed transfer. // TransferStatusPending contains the data returned for a committed transfer.
TransferStatusPending struct { TransferStatusPending struct {
// TODO: Fill this in once we get a sample. Digest []byte `json:"digest"`
TxHash []byte `json:"tx_hash"`
Signatures string `json:"signatures"`
GuardianSetIndex uint32 `json:"guardian_set_index"`
EmitterChain uint16 `json:"emitter_chain"`
} }
) )
@ -277,12 +281,12 @@ func (acct *Accountant) queryMissingObservations() ([]MissingObservation, error)
acct.logger.Debug("acctaudit: submitting missing_observations query", zap.String("query", query)) acct.logger.Debug("acctaudit: submitting missing_observations query", zap.String("query", query))
respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query)) respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query))
if err != nil { if err != nil {
return nil, fmt.Errorf("missing_observations query failed: %w", err) return nil, fmt.Errorf("missing_observations query failed: %w, %s", err, query)
} }
var ret MissingObservationsResponse var ret MissingObservationsResponse
if err := json.Unmarshal(respBytes, &ret); err != nil { if err := json.Unmarshal(respBytes, &ret); err != nil {
return nil, fmt.Errorf("failed to parse missing_observations response: %w", err) return nil, fmt.Errorf("failed to parse missing_observations response: %w, resp: %s", err, string(respBytes))
} }
acct.logger.Debug("acctaudit: missing_observations query response", zap.Int("numEntries", len(ret.Missing)), zap.String("result", string(respBytes))) acct.logger.Debug("acctaudit: missing_observations query response", zap.Int("numEntries", len(ret.Missing)), zap.String("result", string(respBytes)))
@ -300,12 +304,12 @@ func (acct *Accountant) queryBatchTransferStatus(keys []TransferKey) (map[string
acct.logger.Debug("acctaudit: submitting batch_transfer_status query", zap.String("query", query)) acct.logger.Debug("acctaudit: submitting batch_transfer_status query", zap.String("query", query))
respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query)) respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query))
if err != nil { if err != nil {
return nil, fmt.Errorf("batch_transfer_status query failed: %w", err) return nil, fmt.Errorf("batch_transfer_status query failed: %w, %s", err, query)
} }
var response BatchTransferStatusResponse var response BatchTransferStatusResponse
if err := json.Unmarshal(respBytes, &response); err != nil { if err := json.Unmarshal(respBytes, &response); err != nil {
return nil, fmt.Errorf("failed to unmarshal response: %w", err) return nil, fmt.Errorf("failed to unmarshal response: %w, resp: %s", err, string(respBytes))
} }
ret := make(map[string]*TransferStatus) ret := make(map[string]*TransferStatus)

View File

@ -108,5 +108,40 @@ func TestParseBatchTransferStatusNotFoundResponse(t *testing.T) {
} }
func TestParseBatchTransferStatusPendingResponse(t *testing.T) { func TestParseBatchTransferStatusPendingResponse(t *testing.T) {
//TODO: Write this test once we get a sample response. responsesJson := []byte("{\"details\":[{\"key\":{\"emitter_chain\":2,\"emitter_address\":\"0000000000000000000000000290fb167208af455bb137780163b7b7a9a10c16\",\"sequence\":3},\"status\":{\"pending\":[{\"digest\":\"65hmAN4IbW9MBnSDzYmgoD/3ze+F8ik9NGeKR/vQ4J4=\",\"tx_hash\":\"CjHx8zExnr4JU8ewAu5/tXM6a5QyslKufGHZNSr0aE8=\",\"signatures\":\"1\",\"guardian_set_index\":0,\"emitter_chain\":2}]}}]}")
var response BatchTransferStatusResponse
err := json.Unmarshal(responsesJson, &response)
require.NoError(t, err)
require.Equal(t, 1, len(response.Details))
expectedEmitterAddress, err := vaa.StringToAddress("0000000000000000000000000290fb167208af455bb137780163b7b7a9a10c16")
require.NoError(t, err)
expectedDigest, err := hex.DecodeString("eb986600de086d6f4c067483cd89a0a03ff7cdef85f2293d34678a47fbd0e09e")
require.NoError(t, err)
expectedTxHash, err := hex.DecodeString("0a31f1f331319ebe0953c7b002ee7fb5733a6b9432b252ae7c61d9352af4684f")
require.NoError(t, err)
expectedResult := TransferDetails{
Key: TransferKey{
EmitterChain: uint16(vaa.ChainIDEthereum),
EmitterAddress: expectedEmitterAddress,
Sequence: 3,
},
Status: &TransferStatus{
Pending: &[]TransferStatusPending{
TransferStatusPending{
Digest: expectedDigest,
TxHash: expectedTxHash,
Signatures: "1",
GuardianSetIndex: 0,
EmitterChain: uint16(vaa.ChainIDEthereum),
},
},
},
}
// Use DeepEqual() because the response contains pointers.
assert.True(t, reflect.DeepEqual(expectedResult, response.Details[0]))
} }