diff --git a/node/pkg/accountant/audit.go b/node/pkg/accountant/audit.go index 7ba76ad2a..ab50b9c13 100644 --- a/node/pkg/accountant/audit.go +++ b/node/pkg/accountant/audit.go @@ -66,7 +66,7 @@ type ( // TransferStatus contains the status returned for a transfer. TransferStatus struct { Committed *TransferStatusCommitted `json:"committed"` - Pending *TransferStatusPending `json:"pending"` + Pending *[]TransferStatusPending `json:"pending"` } // TransferStatusCommitted contains the data returned for a committed transfer. @@ -85,7 +85,11 @@ type ( // TransferStatusPending contains the data returned for a committed transfer. 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)) respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query)) 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 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))) @@ -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)) respBytes, err := acct.wormchainConn.SubmitQuery(acct.ctx, acct.contract, []byte(query)) 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 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) diff --git a/node/pkg/accountant/query_test.go b/node/pkg/accountant/query_test.go index 04a16522b..221729de5 100644 --- a/node/pkg/accountant/query_test.go +++ b/node/pkg/accountant/query_test.go @@ -108,5 +108,40 @@ func TestParseBatchTransferStatusNotFoundResponse(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])) }