async function startInflightExit() {
const hasToken = await rootChain.hasToken(erc20Exit.currency);
await rootChain.addToken({
token: erc20Exit.currency,
privateKey: erc20Exit.senderPrivateKey,
const transactionBody = await childChain.createTransaction({
owner: erc20Exit.receiver,
currency: erc20Exit.currency,
amount: erc20Exit.amount,
currency: erc20Exit.feeCurrency
const typedData = OmgUtil.transaction.getTypedData(
transactionBody.transactions[0],
const privateKeys = new Array(
transactionBody.transactions[0].inputs.length
).fill(erc20Exit.senderPrivateKey);
const signatures = childChain.signTransaction(typedData, privateKeys);
const signedTxn = childChain.buildSignedTransaction(
const exitData = await childChain.inFlightExitGetData(
OmgUtil.hexPrefix(signedTxn)
const exitReceipt = await rootChain.startInFlightExit({
inFlightTx: exitData.in_flight_tx,
inputTxs: exitData.input_txs,
inputUtxosPos: exitData.input_utxos_pos,
inputTxsInclusionProofs: exitData.input_txs_inclusion_proofs,
inFlightTxSigs: exitData.in_flight_tx_sigs,
privateKey: erc20Exit.senderPrivateKey,
const outputIndex = transactionBody.transactions[0].outputs.findIndex(
(e) => e.owner === erc20Exit.sender
await rootChain.piggybackInFlightExitOnOutput({
inFlightTx: exitData.in_flight_tx,
outputIndex: outputIndex,
privateKey: erc20Exit.senderPrivateKey