UNPKG

@ericnordelo/cross-chain-bridge-helpers

Version:

This package is intented to be used alongside the Openzeppelin cross-chain libraries, to create the corresponding required bridge config for multiple bridges.

75 lines 3.55 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OptimismL1L2Bridge = void 0; /* eslint-disable @typescript-eslint/no-explicit-any */ const ABIs_1 = require("./ABIs"); const ethers_1 = require("ethers"); const L2Bridge_1 = require("../../L2Bridge"); class OptimismL1L2Bridge extends L2Bridge_1.L2Bridge { constructor(bridge) { super(bridge); this.bridge = bridge; if (bridge == 'Optimism-L1L2') { this.canonicalTransactionChain = '0x5E4e65926BA27467555EB562121fac00D24E9dD2'; } else if (bridge == 'Optimism-L1L2-Kovan') { this.canonicalTransactionChain = '0xf7B88A133202d41Fe5E2Ab22e6309a1A4D50AF74'; } } loadProviders(providers) { const _super = Object.create(null, { loadProviders: { get: () => super.loadProviders } }); return __awaiter(this, void 0, void 0, function* () { _super.loadProviders.call(this, providers); }); } getCrossChainTxConfigParameters(sender, destAddr, l2CallDataHex, l2CallValue) { return __awaiter(this, void 0, void 0, function* () { return this._getCrossChainTxConfigParams(sender, destAddr, l2CallDataHex, l2CallValue, this.l2Provider); }); } getCrossChainTxConfigBytes(sender, destAddr, l2CallDataHex, l2CallValue) { return __awaiter(this, void 0, void 0, function* () { const params = yield this.getCrossChainTxConfigParameters(sender, destAddr, l2CallDataHex, l2CallValue); const optParams = params; const gasLimit = optParams.gasLimit; return ethers_1.utils.defaultAbiCoder.encode(['bytes4', 'uint32', 'uint256'], [this.bridgeId, gasLimit, l2CallValue]); }); } _getCrossChainTxConfigParams(sender, destAddr, l2CallDataHex, l2CallValue, l2Provider) { return __awaiter(this, void 0, void 0, function* () { const zero = ethers_1.BigNumber.from(0); let gasLimit; // if is a deposit if (l2CallValue.gte(zero)) { gasLimit = zero; } else { gasLimit = yield l2Provider.estimateGas({ from: sender, to: destAddr, data: l2CallDataHex, value: zero, }); } // get current prepaid gas from CTC const ctc = new ethers_1.Contract(this.canonicalTransactionChain, ABIs_1.canonicalTransactionChainABI, this.l1Provider); const prepaidGas = yield ctc.enqueueL2GasPrepaid(); return { gasLimit: gasLimit > prepaidGas.toNumber() ? gasLimit : prepaidGas.toNumber(), }; }); } } exports.OptimismL1L2Bridge = OptimismL1L2Bridge; //# sourceMappingURL=OptimismL1L2.js.map