import { TransactionManagerRequest } from '../src/transaction-inputs/transaction-manager-request'; import { TransactionManager } from '../src/transaction-manager'; import { AlchemyApiConfig, TenderlyApiConfig } from '../src/types'; import { getTokenApprovalTransactionGoerli, getTokenApprovalTransactionMumbai, getTokenApprovalTransactionPolygon, getWallet, runTransactions, TEST_PASSPHRASE, } from './utils'; const jestConsole = console; const tenderlyApiConfig: TenderlyApiConfig = { userName: process.env.TENDERLY_USER_NAME || '', projectName: process.env.TENDERLY_PROJECT_NAME || '', accessKey: process.env.TENDERLY_ACCESS_KEY || '', }; const alchemyConfig: AlchemyApiConfig = {} alchemyConfig[`${process.env.GOERLI_CHAIN_ID || 5}`] = process.env.GOERLI_ALCHEMY_URL || '' alchemyConfig[`${process.env.MATIC_CHAIN_ID || 137}`] = process.env.MATIC_ALCHEMY_URL || '' alchemyConfig[`${process.env.MUMBAI_CHAIN_ID || 80001}`] = process.env.MUMBAI_ALCHEMY_URL || '' beforeEach(() => { global.console = require('console'); }); afterEach(() => { global.console = jestConsole; }); describe('Transaction manager tests', () => { test('Run sample transaction on mumbai', async () => { const maxLiveTransactions = 5; const maxRetries = 3; const timeOutInSeconds = 100000; const chainId = 80001; const network = 'maticmum'; const wallet = await getWallet(TEST_PASSPHRASE, network); console.log('Wallet address : ', wallet.address); const transactionManager = new TransactionManager( wallet, maxLiveTransactions, maxRetries, timeOutInSeconds, tenderlyApiConfig, alchemyConfig, ); const transactions: Array = []; // loop to generate some 50 transactions for ( let testTransactionCounter = 0; testTransactionCounter < 50; testTransactionCounter++ ) { const transaction: TransactionManagerRequest = getTokenApprovalTransactionMumbai( wallet, chainId, ); transactions.push(transaction); } await transactionManager.initialize(chainId); await runTransactions(chainId, transactions, transactionManager); }); test('Run sample transaction on goerli', async () => { const maxLiveTransactions = 5; const maxRetries = 3; const timeOutInSeconds = 60; const chainId = 5; const network = 'goerli'; const wallet = await getWallet(TEST_PASSPHRASE, network); console.log('Wallet address : ', wallet.address); const transactionManager = new TransactionManager( wallet, maxLiveTransactions, maxRetries, timeOutInSeconds, tenderlyApiConfig, alchemyConfig, ); const transactions: Array = []; // // loop to generate some 50 transactions for ( let testTransactionCounter = 0; testTransactionCounter < 50; testTransactionCounter++ ) { const transaction: TransactionManagerRequest = getTokenApprovalTransactionGoerli( wallet, chainId, ); transactions.push(transaction); } await transactionManager.initialize(chainId); // await transactionManager.start(); await runTransactions(chainId, transactions, transactionManager); }); // Test for matic network test('Run sample transaction on matic', async () => { const maxLiveTransactions = 5; // maximum number of concurrent transactions const maxRetries = 3; // maximum number of retries for failed transactions const timeOutInSeconds = 10000; // timeout for transaction confirmation const chainId = 137; // polygon chain id const network = 'matic'; // polygon network name const wallet = await getWallet(TEST_PASSPHRASE, network); const gasMultiplier = 2; console.log('Wallet address : ', wallet.address); const transactionManager = new TransactionManager( wallet, maxLiveTransactions, maxRetries, timeOutInSeconds, tenderlyApiConfig, alchemyConfig, gasMultiplier, ); // const transactions: Array = []; await transactionManager.initialize(chainId); // loop to generate some 50 transactions for ( let testTransactionCounter = 0; testTransactionCounter < 2; testTransactionCounter++ ) { const transaction: TransactionManagerRequest = getTokenApprovalTransactionPolygon( wallet, chainId, ); // transactions.push(transaction); const transactionManagerResponse = await transactionManager.queueTransaction( transaction, 1, ); let transactionTimeout = 5 * 60 * 60 * 1000; await transactionManagerResponse.wait(transactionTimeout); } // await runTransactions(chainId, transactions, transactionManager); }); });