Transactions APIs

1. Create Transaction

When a user starts swapping or when a step of swap succeeds, to get the transaction for the next step, this endpoint should be called.

In multi-step swaps created by Rango, you should loop over the routeResponse.route array and call createTransaction per each step.

const transaction = await rangoClient.createTransaction({
    requestId: bestRoute.requestId,
    step: 1,
    userSettings: { 'slippage': '1' },
    validations: { balance: true, fee: true },
})

A single route step might need multiple approvals (e.g. in Harmony Bridge), so you should call createTransaction and check approval again and again until isApprovalTx field turns to false.

In general, always check your code with a new token that your wallet has not already approved to make sure your approval scenario works well

Create Transaction Request

ParamDescription

requestId *

The unique ID which is generated in the best route endpoint.

step *

1-based step number of a complex multi-step swap, e.g. 1, 2, ...

userSettings *

User settings for the swap, including slippage.

validations

The validation checks we are interested to check by Rango before starting the swap.

Create Transaction Response

FieldDescription

ok

If true, Rango has created a non-null transaction, and the error message is null.

error

Error message about the incident if ok == false.

transaction

Transaction's raw data. It is one of the transaction possible interfaces: EvmTransaction, CosmosTransaction and TransferTransaction or null.

2. Check Transaction Status

After that user signed a transaction on his/her wallet you should call this endpoint periodically to see what's the status of that transaction.

const transaction = await rangoClient.checkStatus({
    requestId: bestRoute.requestId,
    step: 1,
    txId: 'TX HASH RETUREN BY WALLET',
})

This endpoint is not determined for checking approval and only for the original transaction. In case of multiStepTx, where more than one transaction should be signed in a single step, txId should be the latest transaction signed by user.

Check Transaction Status Request

ParamDescription

requestId *

The unique ID which is generated in the best route endpoint.

step *

1-based step number of a complex multi-step swap, e.g. 1, 2, ...

txId *

Tx hash that wallet returned, e.g. 0xa1a37ce2063c4764da27d990a22a0c89ed8...

Check Transaction Status Response

FieldDescription

status

Status of the transaction, while the status is running or null, the client should retry until it turns into success orfailed.

timestamp

The timestamp of the executed transaction. Beware that timestamp can be null even if the status is successful or failed, e.g. 1635271424813

extraMessage

A message in case of failure, that could be shown to the user.

outputAmount

The output amount of the transaction if it was successful, e.g. 0.28.

newTx

if a transaction needs more than one-step transaction to be signed by the user, the next step transaction will be returned in this field.

diagnosisUrl

In some special cases (e.g. AnySwap), the user should follow some steps outside Rango to get its assets back (refund). You could show this link to the user to help him

explorerUrl

List of explorer URLs for the transactions that happened in this step.

referrals

List of referral reward for the dApp and Rango.

Use diagnosisUrl if it's not null to help user more easily refund a failed transaction.

3. Check Approval Status

When createTransaction returns an approval transaction, and the user signs that tx, you should periodically call check-approval to see if the approval tx is completed. After a successful check, you should call createTransaction again to receive the main transaction (or the next approval transaction).

const transaction = await rangoClient.checkApproval({
    requestId: bestRoute.requestId
})

If the result of createTransaction is an approval transaction, you should use this function to check the approval status instead of checkStatus.

Check Approval Request

ParamDescription

requestId *

The unique ID which is generated in the best route endpoint.

Check Approval Response

FieldDescription

isApproved

A flag that indicates that the approval tx is done or not.

4. Report Transaction Failure

Use it when the user rejects the transaction in the wallet or the wallet fails to handle the transaction. Calling this endpoint is not required, but is useful for reporting and we recommend calling it.

const transaction = await rangoClient.reportFailure({
    requestId: bestRoute.requestId,
    eventType: 'TX_FAIL',
    data: { 
        extraMessage: "Error sending transaction",
        extraMessageDetail: "User Denied",
        eventType: "smart_contract_call_failed"
    }
})

It's an optional action and does not affect the flow of swap, but it can help us improve our API if the data is informative enough

Report Failure Request

ParamDescription

requestId *

The unique ID which is generated in the best route endpoint.

eventType *

TX_FAIL

data *

Failure reason

Last updated