Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions integration-tests/coreum/contract_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3030,6 +3030,13 @@ func TestEnableAndDisableXRPLOriginatedToken(t *testing.T) {
require.NoError(t, err)
}

// manually claim refunds
pendingRefunds, err := contractClient.GetPendingRefunds(ctx, coreumRecipient)
require.NoError(t, err)
require.Len(t, pendingRefunds, 1)
require.EqualValues(t, pendingRefunds[0].Coin.String(), coinToSendBack.String())
contractClient.ClaimRefund(ctx, coreumRecipient, pendingRefunds[0].ID)

// check the successful refunding
recipientBalanceRes, err = bankClient.Balance(ctx, &banktypes.QueryBalanceRequest{
Address: coreumRecipient.String(),
Expand Down Expand Up @@ -3226,6 +3233,13 @@ func TestEnableAndDisableCoreumOriginatedToken(t *testing.T) {
require.NoError(t, err)
}

// claim refunds
pendingRefunds, err := contractClient.GetPendingRefunds(ctx, coreumSenderAddress)
require.NoError(t, err)
require.Len(t, pendingRefunds, 1)
require.EqualValues(t, pendingRefunds[0].Coin.String(), coinToSendFromCoreumToXRPL.String())
contractClient.ClaimRefund(ctx, coreumSenderAddress, pendingRefunds[0].ID)

// check the successful refunding
senderBalanceRes, err := bankClient.Balance(ctx, &banktypes.QueryBalanceRequest{
Address: coreumSenderAddress.String(),
Expand Down
52 changes: 52 additions & 0 deletions relayer/coreum/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const (
ExecRecoveryXRPLTokenRegistration ExecMethod = "recover_xrpl_token_registration"
ExecUpdateXRPLToken ExecMethod = "update_xrpl_token"
ExecUpdateCoreumToken ExecMethod = "update_coreum_token"
ExecClaimRefund ExecMethod = "claim_refund"
)

// TransactionResult is transaction result.
Expand Down Expand Up @@ -73,6 +74,7 @@ const (
QueryMethodCoreumTokens QueryMethod = "coreum_tokens"
QueryMethodPendingOperations QueryMethod = "pending_operations"
QueryMethodAvailableTickets QueryMethod = "available_tickets"
QueryMethodPendingRefunds QueryMethod = "pending_refunds"
)

// Relayer is the relayer information in the contract config.
Expand Down Expand Up @@ -284,6 +286,10 @@ type updateCoreumTokenRequest struct {
State TokenState `json:"state"`
}

type claimRefundRequest struct {
PendingRefundID string `json:"pending_refund_id"`
}

type xrplTransactionEvidenceTicketsAllocationOperationResult struct {
Tickets []uint32 `json:"tickets"`
}
Expand Down Expand Up @@ -328,6 +334,15 @@ type availableTicketsResponse struct {
Tickets []uint32 `json:"tickets"`
}

type pendingRefundsResponse struct {
PendingRefunds []PendingRefund `json:"pending_refunds"`
}

type PendingRefund struct {
ID string `json:"id"`
Coin sdk.Coin `json:"coin"`
}

type pagingRequest struct {
Offset *uint64 `json:"offset"`
Limit *uint32 `json:"limit"`
Expand Down Expand Up @@ -818,6 +833,26 @@ func (c *ContractClient) UpdateCoreumToken(
return txRes, nil
}

// ClaimRefund executes `claim_refund` method.
func (c *ContractClient) ClaimRefund(
ctx context.Context,
sender sdk.AccAddress,
pendingRefundID string,
) (*sdk.TxResponse, error) {
txRes, err := c.execute(ctx, sender, execRequest{
Body: map[ExecMethod]claimRefundRequest{
ExecClaimRefund: {
PendingRefundID: pendingRefundID,
},
},
})
if err != nil {
return nil, err
}

return txRes, nil
}

// ******************** Query ********************

// GetContractConfig returns contract config.
Expand Down Expand Up @@ -946,6 +981,23 @@ func (c *ContractClient) GetAvailableTickets(ctx context.Context) ([]uint32, err
return response.Tickets, nil
}

// GetPendingRefunds returns the list of pending refunds for and address.
func (c *ContractClient) GetPendingRefunds(ctx context.Context, address sdk.AccAddress) ([]PendingRefund, error) {
var response pendingRefundsResponse
err := c.query(ctx, map[QueryMethod]interface{}{
QueryMethodPendingRefunds: struct {
Address string `json:"address"`
}{
Address: address.String(),
},
}, &response)
if err != nil {
return nil, err
}

return response.PendingRefunds, nil
}

func (c *ContractClient) getPaginatedXRPLTokens(
ctx context.Context,
offset *uint64,
Expand Down