Failure conversion
Occasionally, RippleNet payments fail, for example due to an exchange outage. When this happens, RippleNet Server marks the payment as FAILED
and your funds may not reach the destination currency.
RippleNet's failure conversion ensures that the funds from failed payments are made available in a fiat currency quickly. Depending on your use case, failure conversion identifies the fund's location on the liquidity path and continues a failed payment's process until it either arrives in the Sender Segregated Account or until you manually recapture the funds from the failed payment.
Note:
The process for manually recapturing funds depends on the exchange you're using.
Contact your RippleNet liaison for more information.
Failure conversion ensures that during liquidation, your payment's value is converted to fiat currency and that any slippage is accounted for.
Use cases
We recommend that you use the following combination of On-Demand Liquidity (ODL) features, depending on your use case:
-
Two wallets and
two exchanges
- The wallet at the source exchange is used for the XRP withdrawal and the wallet at the destination exchange for the XRP deposit and subsequently the liquidation trade.
Wallet Send Wallet Receive SLS Failure conversion SSA Individual payments yes yes yes yes yes Bulk funding yes yes yes yes no Internal treasury yes yes yes no no
-
Two wallets and
one exchange
- One wallet at the destination exchange is used for the XRP withdrawal and the other wallet at the destination exchange for the XRP deposit and subsequently the liquidation trade.
Wallet Send Wallet Receive SLS Failure conversion SSA Individual payments yes yes yes yes yes Bulk funding yes yes yes yes no
-
One wallet and one exchange - The wallet at the destination exchange is used for the liquidation trade.
Wallet Send Wallet Receive SLS Failure conversion SSA Internal treasury yes yes yes no no
For more information about your failure conversion use case, contact your RippleNet liaison.
Prerequisites
If you want to use failure conversion with the Sender Segregated Account, consider the following:
Note:
By default, failure conversion is disabled (set to false
) in ODL-RippleNet.
Check failure conversion status
When your payment's status is FAILED
with a sub-state of PUSH_FORWARD
, it indicates that the failure conversion process has started.
{
"json": { },
"created_at": "2022-12-13T18:37:11.138Z",
"subState": "PUSH_FORWARD"
}
Failure conversion behaves differently depending on where in the payment process the failure occurs.
- If the failure occurs after XRP withdrawal and before deposit confirmation at the receiving exchange, failure conversion will retry the payment once per 30 minutes for up to 12 hours.
- If the failure occurs during the destination liquidation at the receiving exchange, failure conversion will retry the payment once per hour for up to 24 hours.
Note:
Original payments that are subject to failure conversion continue to be marked as FAILED
even after failure conversion is successful.
To check a payment's failure conversion status:
-
To retrieve your payment, use the
Get payments
operation with"status": "FAILED"
and with"with_labels" = "PUSH_FORWARD,SSA_FUNDING_COMPLETED"
. -
In the response, check the
content.push_forward_execution_result
array of objects.
You should see values like in this example:"push_forward_execution_results": [ { "execution_result_id": "cc004b30-2e4e-4ede-9ef2-8f6c9dddcd17", "execution_timestamp": "2022-12-13T18:36:05.363Z", "execution_result_type": "CRYPTO_TRANSFER", "execution_result_order": "3", "sender_address": "sender_address@example", "receiver_address": "receiver_address@example", "sending_amount": "77.045351000", "receiving_amount": "77.045351000", "sending_fee": "0.000000000", "receiving_fee": "0.000000000", "sending_currency_code": null, "receiving_currency_code": null, "fx_rate": null, "transfer_currency_code": "XRP", "intermediary_delta": null, "incentive_type": null, "incentive_value": null, "transaction_hash": null, "venue_id": "0f397fd5-825c-40c6-b4f1-2595c8e7521f", "fiat_adjusted_value": null, "odl_payment_id": "726970706C6578766961-01670956230-489-001-244E41524B968BB8C9A0534175A87163A30EEB95CC91B752B4582801E61F1499" } ]
Note:
The
content.execution_results
array of objects doesn't get populated for failed payments, onlypush_forward_execution_results
. -
Check the
content.user_info.settlement_declined
array of objects.
ThesubState
field should showPUSH_FORWARD
and there should be an object with fields pertaining to the SSA transfer, like in this example:"settlement_declined": [ . . . { "json": { }, "created_at": "2022-12-13T18:37:11.138Z", "subState": "PUSH_FORWARD" }, { "json": { "ssa_remote_transfer_id": "2558c823-6737-4955-9ad9-aeec4f94c2f4", "transfer_amount": "1669.50", "transfer_currency": "PHP", "funding_account": "funding_account@example", "ssa_account": "ssa_account@example", "transfer_state": "EXECUTED" }, "created_at": "2022-12-13T18:41:14.599Z", "subState": "SSA_FUNDING_COMPLETED" }, . . . ]