@kaiachain/kss-bridges-celer
Version:
TypeScript client and use-cases for cBridge
48 lines • 3.45 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.burnCanonicalTokenRefund = void 0;
const jsdom_1 = require("jsdom");
const { window } = new jsdom_1.JSDOM();
global.XMLHttpRequest = window.XMLHttpRequest;
const dotenv_1 = require("dotenv");
(0, dotenv_1.config)();
const core_1 = require("../core");
const core_2 = require("../core");
const PeggedTokenBridge_json_1 = __importDefault(require("../core/contract/abi/pegged/PeggedTokenBridge.sol/PeggedTokenBridge.json"));
const PeggedTokenBridgeV2_json_1 = __importDefault(require("../core/contract/abi/pegged/PeggedTokenBridgeV2.sol/PeggedTokenBridgeV2.json"));
async function burnCanonicalTokenRefund(CBRIDGE_GATEWAY_URL, WALLET_ADDRESS, SRC_CHAIN_ID, DST_CHAIN_ID, SRC_CHAIN_RPC, PRIVATE_KEY, SLIPPAGE_TOLERANCE, TOKEN_SYMBOL, BURN_ID, AMOUNT, CONFIRMATIONS) {
// const BURN_ID = "0x8b7b9a37a88342c5e0c53b518544a073b46d1677c490d2c4a9eb663404b36421"; //Replace your transfer Id here
// const amount = process.env.AMOUNT ? process.env.AMOUNT: "0"; // Replace mint amount here (if not set in .env file)
const transferConfigs = await (0, core_1.getTransferConfigs)(CBRIDGE_GATEWAY_URL);
const peggedTokenBridgeAddress = transferConfigs.pegged_pair_configs.find(config => config.pegged_chain_id === SRC_CHAIN_ID && config.bridge_version < 2)?.pegged_burn_contract_addr;
const peggedTokenBridge = (0, core_2.getContract)(peggedTokenBridgeAddress || '', PeggedTokenBridge_json_1.default.abi, SRC_CHAIN_RPC, PRIVATE_KEY);
const peggedTokenBridgeV2Address = transferConfigs.pegged_pair_configs.find(config => config.pegged_chain_id === SRC_CHAIN_ID && config.bridge_version === 2)?.pegged_burn_contract_addr;
const peggedTokenBridgeV2 = (0, core_2.getContract)(peggedTokenBridgeV2Address || '', PeggedTokenBridgeV2_json_1.default.abi, SRC_CHAIN_RPC, PRIVATE_KEY);
if (!peggedTokenBridgeAddress && !peggedTokenBridgeV2Address)
throw new Error('SRC_CHAIN_ID not supported by cBridge');
const pegConfig = (0, core_2.getPegConfig)(transferConfigs, SRC_CHAIN_ID, DST_CHAIN_ID, TOKEN_SYMBOL);
const bridgeVersion = pegConfig?.bridge_version;
const peggedTokenContact = bridgeVersion === 2 ? peggedTokenBridgeV2 : peggedTokenBridge;
console.log("1. Initiating refund request");
// Transfer status should not be 0, 5 OR 10
const transferStatus = await (0, core_1.getTransferStatus)(CBRIDGE_GATEWAY_URL, BURN_ID);
if (transferStatus.status === 0) {
throw new Error("cBRIDGE => TRANSFER_ID UNKNOWN / INVALID");
}
else if (transferStatus.status === 5) {
throw new Error("cBRIDGE => TRANSFER_ALREADY_COMPLETED / NON_REFUNDABLE");
}
else if (transferStatus.status === 10) {
throw new Error("cBRIDGE => TRANSFER_ALREADY_REFUNDED");
}
else {
console.log("1. Estimating refund request...");
const estimated = await (0, core_1.getEstimation)(CBRIDGE_GATEWAY_URL, WALLET_ADDRESS, SRC_CHAIN_ID, TOKEN_SYMBOL, AMOUNT, SLIPPAGE_TOLERANCE);
return await (0, core_1.requestRefund)("BURN", peggedTokenContact, CBRIDGE_GATEWAY_URL, BURN_ID, estimated, SRC_CHAIN_RPC, PRIVATE_KEY, CONFIRMATIONS);
}
}
exports.burnCanonicalTokenRefund = burnCanonicalTokenRefund;
//# sourceMappingURL=burnCanonicalTokenRefund.js.map