rubic-sdk-next
Version:
Simplify dApp creation
80 lines • 4.89 kB
JavaScript
;
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