UNPKG

rubic-sdk-next

Version:
80 lines 4.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScrollBridgeTrade = void 0; const sdk_1 = require("@arbitrum/sdk"); const providers_1 = require("@ethersproject/providers"); const errors_1 = require("../../../../../common/errors"); const blockchain_name_1 = require("../../../../../core/blockchain/models/blockchain-name"); const blockchain_id_1 = require("../../../../../core/blockchain/utils/blockchains-info/constants/blockchain-id"); const injector_1 = require("../../../../../core/injector/injector"); const outbox_abi_1 = require("../arbitrum-rbc-bridge/constants/outbox-abi"); const retryable_factory_abi_1 = require("../arbitrum-rbc-bridge/constants/retryable-factory-abi"); const evm_api_cross_chain_trade_1 = require("../../../../ws-api/chains/evm/evm-api-cross-chain-trade"); class ScrollBridgeTrade extends evm_api_cross_chain_trade_1.EvmApiCrossChainTrade { // @TODO API static async claimTargetTokens(sourceTransaction, options) { const web3Private = injector_1.Injector.web3PrivateService.getWeb3PrivateByBlockchain(blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM); await web3Private.checkBlockchainCorrect(blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM); const rpcProviders = injector_1.Injector.web3PublicService.rpcProvider; const l1Provider = new providers_1.JsonRpcProvider(rpcProviders[blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM].rpcList[0], blockchain_id_1.blockchainId[blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM]); const l2Provider = new providers_1.JsonRpcProvider(rpcProviders[blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM].rpcList[0], blockchain_id_1.blockchainId[blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM]); const targetReceipt = await l2Provider.getTransactionReceipt(sourceTransaction); const l2TxReceipt = new sdk_1.L2TransactionReceipt(targetReceipt); const [event] = l2TxReceipt.getL2ToL1Events(); if (!event) { throw new errors_1.RubicSdkError('Transaction is not ready'); } const messageReader = new sdk_1.L2ToL1MessageReader(l1Provider, event); const proof = await messageReader.getOutboxProof(l2Provider); const l2network = await (0, sdk_1.getL2Network)(blockchain_id_1.blockchainId[blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM]); const { onConfirm, gasLimit, gasPriceOptions } = options; const onTransactionHash = (hash) => { if (onConfirm) { onConfirm(hash); } }; return web3Private.tryExecuteContractMethod(l2network.ethBridge.outbox, outbox_abi_1.outboxAbi, 'executeTransaction', [ proof, event.position.toString(), event.caller, event.destination, event.arbBlockNum.toString(), event.ethBlockNum.toString(), event.timestamp.toString(), event.callvalue.toString(), event.data ], { onTransactionHash, gas: gasLimit, gasPriceOptions }); } // @TODO API static async redeemTokens(sourceTransactionHash, options) { const rpcProviders = injector_1.Injector.web3PublicService.rpcProvider; const l1Provider = new providers_1.JsonRpcProvider(rpcProviders[blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM].rpcList[0], blockchain_id_1.blockchainId[blockchain_name_1.BLOCKCHAIN_NAME.ETHEREUM]); const l2Provider = new providers_1.JsonRpcProvider(rpcProviders[blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM].rpcList[0], blockchain_id_1.blockchainId[blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM]); const receipt = await l1Provider.getTransactionReceipt(sourceTransactionHash); const messages = await new sdk_1.L1TransactionReceipt(receipt).getL1ToL2Messages(l2Provider); const creationIdMessage = messages.find(el => el.retryableCreationId); if (!creationIdMessage) { throw new errors_1.RubicSdkError('Can not find creation id message.'); } const { retryableCreationId } = creationIdMessage; const web3Private = injector_1.Injector.web3PrivateService.getWeb3PrivateByBlockchain(blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM); await web3Private.checkBlockchainCorrect(blockchain_name_1.BLOCKCHAIN_NAME.ARBITRUM); const { onConfirm, gasLimit, gasPriceOptions } = options; const onTransactionHash = (hash) => { if (onConfirm) { onConfirm(hash); } }; return web3Private.tryExecuteContractMethod('0x000000000000000000000000000000000000006E', retryable_factory_abi_1.retryableFactoryAbi, 'redeem', [retryableCreationId], { onTransactionHash, gas: gasLimit, gasPriceOptions }); } } exports.ScrollBridgeTrade = ScrollBridgeTrade; //# sourceMappingURL=scroll-bridge-trade.js.map