Helper Methods

Helper methods during cross-chain transfers

Listen for Cross-Chain Transfer Transaction

Once you have the deposit hash there are two ways of listening for cross-chain transfer transaction.

  1. One via SDK where you pass the callback method onFundsTransfered(data) in Hyphen constructor and let SDK call this method whenever a cross-chain transfer happens corresponding to the deposit transaction done by the user via SDK.

  2. Or you can call the SDK method checkDepositStatus({depositHash, fromChainId}) manually to check the status of cross-chain transfer for a given depositHash and fromChainId.

Via Callback Method in Contructor
Manually Checking Status via SDK
Via Callback Method in Contructor
let hyphen = new Hyphen(provider, {
// other options here
onFundsTransfered: (data) => {
/**
* data will contain following fields:
* fromChainId => Chain id from where funds were transferred
* toChainId => Chain id to where funds are transferred
* amount => Amount of tokens transferred in smallest unit of token
* tokenAddress => Address of token that was trasnferred
* depositHash => Deposit transacion hash on fromChainId
* exitHash => Transfer transaction hash on toChainId
**/
}
});
Manually Checking Status via SDK
import { RESPONSE_CODES } from "@biconomy/hyphen";
const EXIT_STATUS = {
PROCESSING: 1,
PROCESSED: 2,
FAILED: 3
}
​
let depsitHash = "";
let fromChainId = 80001;
​
// Assuming you already have the deposit transaction hash and the chain id
// where the transaction was done.
​
// Periodically call checkDepositStatus method unitll you get the response
const response = await hyphen.checkDepositStatus({
depositHash: depsitHash,
fromChainId: fromChainId
});
if(response && response.code === RESPONSE_CODES.SUCCESS) {
if(response.statusCode === EXIT_STATUS.PROCESSED && response.exitHash) {
// βœ… Cross-Chain transfer successfull
/**
* response will contain following fields:
*
* fromChainId => Chain id from where funds were transferred
* toChainId => Chain id to where funds are transferred
* amount => Amount of tokens transferred in smallest unit of token
* tokenAddress => Address of token that was trasnferred
* depositHash => Deposit transacion hash on fromChainId
* exitHash => Transfer transaction hash on toChainId
**/
} else if(response.statusCode === EXIT_STATUS.PROCESSING && response.exitHash) {
// Cross-chain transfer is initiated but transaction is not confirmed yet
/**
* response will contain following fields:
*
* fromChainId => Chain id from where funds were transferred
* toChainId => Chain id to where funds are transferred
* amount => Amount of tokens transferred in smallest unit of token
* tokenAddress => Address of token that was trasnferred
* depositHash => Deposit transacion hash on fromChainId
* exitHash => Transfer transaction hash on toChainId
**/
}
}
​
​
​

​

Trigger Cross-Chain Transfer Manually

In case you don't get the transfer transaction hash on the destination chain within few minutes and you are not getting the success response from checkDepositStatus method also, you can manually trigger the cross-chain transfer by calling triggerManualTransfer method.

// Assuming you already have the deposit transaction hash on fromChain
let depsitHash = "0x.....";
let fromChainId = "80001";
​
let transferStatus = await hyphen.triggerManualTransfer(depsitHash, fromChainId);
​
if(transferStatus && transferStatus.code === 200 && transferStatus.exitHash) {
// Successfuly got the transfer transaction hash on toChain
// transferStatus will contain following fields
/*
* "code": Status code. 200 for success else failure.
* "message": Human readable response message.
* "exitHash": transaction hash for trasnfer transaction on toChain
**/
}

​

​