diff --git a/.changeset/two-pandas-jump.md b/.changeset/two-pandas-jump.md new file mode 100644 index 000000000..934305031 --- /dev/null +++ b/.changeset/two-pandas-jump.md @@ -0,0 +1,6 @@ +--- +"@rabbitholegg/questdk-plugin-symbiosis": minor +"@rabbitholegg/questdk-plugin-registry": minor +--- + +implement symbiosis bridge plugin diff --git a/packages/registry/package.json b/packages/registry/package.json index 172408b40..40bd0a7e2 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -56,6 +56,7 @@ "@rabbitholegg/questdk-plugin-paraswap": "workspace:*", "@rabbitholegg/questdk-plugin-polygon": "workspace:*", "@rabbitholegg/questdk-plugin-stargate": "workspace:*", + "@rabbitholegg/questdk-plugin-symbiosis": "workspace:*", "@rabbitholegg/questdk-plugin-tally": "workspace:*", "@rabbitholegg/questdk-plugin-uniswap": "workspace:*", "viem": "^1.16.6" diff --git a/packages/registry/src/index.ts b/packages/registry/src/index.ts index 715bc0804..58b919037 100644 --- a/packages/registry/src/index.ts +++ b/packages/registry/src/index.ts @@ -25,6 +25,7 @@ import { Tally } from '@rabbitholegg/questdk-plugin-tally' import { BasePaint } from '@rabbitholegg/questdk-plugin-basepaint' import { Hyphen } from '@rabbitholegg/questdk-plugin-hyphen' import { Paraswap } from '@rabbitholegg/questdk-plugin-paraswap' +import { Symbiosis } from '@rabbitholegg/questdk-plugin-symbiosis' import { ENTRYPOINT } from './contract-addresses' export const plugins: Record = { @@ -42,6 +43,7 @@ export const plugins: Record = { [BasePaint.pluginId]: BasePaint, [Hyphen.pluginId]: Hyphen, [Paraswap.pluginId]: Paraswap, + [Symbiosis.pluginId]: Symbiosis, } export const getPlugin = (pluginId: string) => { diff --git a/packages/symbiosis/CHANGELOG.md b/packages/symbiosis/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/symbiosis/README.md b/packages/symbiosis/README.md new file mode 100644 index 000000000..ce2229cff --- /dev/null +++ b/packages/symbiosis/README.md @@ -0,0 +1,21 @@ +# Symbiosis Bridge Plugin + +This plugin is designed to filter valid bridge transactions using the Symbiosis cross-chain bridge. + +## Overview + +The Symbiosis bridge plugin prioritizes the most popular assets on each chain, which include ETH, stablecoins, and certain chain-specific tokens like OP and ARB. By leaving the tokenAddress undefined, the filter should allow any asset to pass, as long as all the other criteria is met. This allows for additional flexibility for quest creators. The plugin utilizes the symbiosis SDK to get the latest contract addresses for their metaRouter contracts. An overview of how the bridge operates can be [found here](https://docs.symbiosis.finance/main-concepts/cross-chain-swaps-with-symbiosis) + +## Filtering Criteria + +The plugin filters transactions based on certain predefined criteria to identify valid bridge transactions. The criteria can include the following aspects: + +- Source chain and Destination chain +- Involved assets (e.g., ETH, USDC, wETH, OP, ARB) +- Amount +- Contract Address +- Recipient + +## Sample Transaction +- https://etherscan.io/tx/0xc97deae76c21cb57498d2873babd212fa589eae9e4d2e979f4a10a3428f376ee + diff --git a/packages/symbiosis/package.json b/packages/symbiosis/package.json new file mode 100644 index 000000000..8b71ce3de --- /dev/null +++ b/packages/symbiosis/package.json @@ -0,0 +1,52 @@ +{ + "name": "@rabbitholegg/questdk-plugin-symbiosis", + "version": "1.0.0-alpha.4", + "type": "module", + "exports": { + "require": "./dist/cjs/index.js", + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts" + }, + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "packageManager": "pnpm@8.3.1", + "description": "", + "scripts": { + "bench": "vitest bench", + "bench:ci": "CI=true vitest bench", + "build": "pnpm run clean && pnpm run build:cjs && pnpm run build:esm && pnpm run build:types", + "build:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esm": "tsc --project tsconfig.build.json --module es2015 --outDir ./dist/esm && echo > ./dist/esm/package.json '{\"type\":\"module\",\"sideEffects\":false}'", + "build:types": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "clean": "rimraf dist", + "format": "rome format . --write", + "lint": "rome check .", + "lint:fix": "pnpm lint --apply", + "preinstall": "npx only-allow pnpm", + "test": "vitest dev", + "test:cov": "vitest dev --coverage", + "test:ci": "CI=true vitest --coverage", + "test:ui": "vitest dev --ui" + }, + "keywords": [], + "author": "", + "license": "ISC", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "devDependencies": { + "@types/node": "^20.4.5", + "@vitest/coverage-v8": "^0.33.0", + "rimraf": "^5.0.1", + "rome": "^12.1.3", + "ts-node": "^10.9.1", + "tsconfig": "workspace:*", + "typescript": "^5.1.6", + "vitest": "^0.33.0" + }, + "dependencies": { + "@rabbitholegg/questdk": "2.0.0-alpha.22", + "ethers": "^5.2.0", + "symbiosis-js-sdk": "^3.0.9", + "viem": "^1.2.15" + } +} diff --git a/packages/symbiosis/src/Symbiosis.test.ts b/packages/symbiosis/src/Symbiosis.test.ts new file mode 100644 index 000000000..fa28ceaad --- /dev/null +++ b/packages/symbiosis/src/Symbiosis.test.ts @@ -0,0 +1,138 @@ +import { GreaterThanOrEqual, apply } from '@rabbitholegg/questdk/filter' +import { describe, expect, test } from 'vitest' +import { bridge } from './Symbiosis' +import { + PASSING_TEST_TRANSACTIONS, + FAILING_TEST_TRANSACTIONS, + controlTransaction, +} from './test-transactions' +import { metaBurnABI, metaRouteABI } from './abi' +import { ETH_CHAIN_ID, OPTIMISM_CHAIN_ID } from './constants' +import { symbiosis } from './symbiosis-sdk' + +const TEST_USER = '0xB7e98B3F16CC915B9C7a321c1bd95fa406BDbabe' +const OPTIMISM_USDCe_ADDRESS = '0x7F5c764cBc14f9669B88837ca1490cCa17c31607' + +describe('Given the symbiosis plugin', () => { + describe('When handling the bridge', () => { + test('should return a valid action filter', async () => { + const filter = await bridge({ + sourceChainId: OPTIMISM_CHAIN_ID, + destinationChainId: ETH_CHAIN_ID, + tokenAddress: OPTIMISM_USDCe_ADDRESS, + amount: GreaterThanOrEqual(100000n), + recipient: TEST_USER, + }) + + expect(filter).to.deep.equal({ + chainId: 10, + to: symbiosis.metaRouter(10).address, + input: { + $abi: metaRouteABI, + _metarouteTransaction: { + approvedTokens: [OPTIMISM_USDCe_ADDRESS], + amount: { + $gte: '100000', + }, + otherSideCalldata: { + $abiAbstract: metaBurnABI, + _metaBurnTransaction: { + chainID: 1, + chain2address: TEST_USER, + }, + }, + }, + }, + }) + }) + }) + describe('should pass filter with valid transactions', () => { + PASSING_TEST_TRANSACTIONS.forEach((testTransaction) => { + test(testTransaction.description, async () => { + const { + transaction, + destinationChainId, + tokenAddress, + amount, + recipient, + } = testTransaction + + const filter = await bridge({ + sourceChainId: transaction.chainId, + destinationChainId, + tokenAddress, + amount: GreaterThanOrEqual(amount), + recipient, + }) + expect(apply(transaction, filter)).to.be.true + }) + }) + }) + describe('should not pass filter with invalid parameters', () => { + test('when sourceChainId is incorrect', async () => { + const { transaction, tokenAddress, recipient } = controlTransaction + + const filter = await bridge({ + sourceChainId: 1, // 42161 + destinationChainId: 5000, + tokenAddress, + amount: GreaterThanOrEqual(10000n), + recipient, + }) + expect(apply(transaction, filter)).to.be.false + }) + test('when bridge contract address is incorrect', async () => { + const { transaction, tokenAddress, recipient } = controlTransaction + + const filter = await bridge({ + sourceChainId: 42161, + destinationChainId: 5000, + contractAddress: '0x1DCfbC3fA01b2a86bC3a3f43479cCe9E8D438Adc', + tokenAddress, + amount: GreaterThanOrEqual(10000n), + recipient, + }) + expect(apply(transaction, filter)).to.be.false + }) + FAILING_TEST_TRANSACTIONS.forEach((testTransaction) => { + test(testTransaction.description, async () => { + const { + transaction, + destinationChainId, + tokenAddress, + amount, + recipient, + } = testTransaction + + const filter = await bridge({ + sourceChainId: transaction.chainId, + destinationChainId, + tokenAddress, + amount: GreaterThanOrEqual(amount), + recipient, + }) + expect(apply(transaction, filter)).to.be.false + }) + }) + }) + describe('control transaction should pass filter', () => { + test(controlTransaction.description, async () => { + const { + transaction, + destinationChainId, + tokenAddress, + amount, + recipient, + } = controlTransaction + + const filter = await bridge({ + sourceChainId: transaction.chainId, + destinationChainId, + tokenAddress, + amount: GreaterThanOrEqual(amount), + recipient, + }) + expect(apply(transaction, filter)).to.be.true + }) + }) +}) diff --git a/packages/symbiosis/src/Symbiosis.ts b/packages/symbiosis/src/Symbiosis.ts new file mode 100644 index 000000000..102a2fe91 --- /dev/null +++ b/packages/symbiosis/src/Symbiosis.ts @@ -0,0 +1,54 @@ +import { + type TransactionFilter, + type BridgeActionParams, + compressJson, +} from '@rabbitholegg/questdk' +import { type Address } from 'viem' +import { CHAIN_ID_ARRAY, CHAIN_TO_TOKENS } from './constants' +import { metaBurnABI, metaRouteABI } from './abi' +import { symbiosis } from './symbiosis-sdk' + +export const bridge = async ( + bridge: BridgeActionParams, +): Promise => { + const { + sourceChainId, + destinationChainId, + contractAddress, + tokenAddress, + amount, + recipient, + } = bridge + + const bridgeContract: Address = + contractAddress ?? (symbiosis.metaRouter(sourceChainId).address as Address) + + return compressJson({ + chainId: sourceChainId, + to: bridgeContract, + input: { + $abi: metaRouteABI, + _metarouteTransaction: { + approvedTokens: tokenAddress ? [tokenAddress] : undefined, // if tokenAddress is undefined, any input token will pass filter + amount: amount, + otherSideCalldata: { + $abiAbstract: metaBurnABI, + _metaBurnTransaction: { + chainID: destinationChainId, + chain2address: recipient, + }, + }, + }, + }, + }) +} + +export const getSupportedTokenAddresses = async ( + _chainId: number, +): Promise => { + return CHAIN_TO_TOKENS[_chainId] ?? [] +} + +export const getSupportedChainIds = async (): Promise => { + return CHAIN_ID_ARRAY +} diff --git a/packages/symbiosis/src/abi.ts b/packages/symbiosis/src/abi.ts new file mode 100644 index 000000000..ba0b77130 --- /dev/null +++ b/packages/symbiosis/src/abi.ts @@ -0,0 +1,135 @@ +export const metaRouteABI = [ + { + inputs: [ + { + components: [ + { internalType: 'bytes', name: 'firstSwapCalldata', type: 'bytes' }, + { + internalType: 'bytes', + name: 'secondSwapCalldata', + type: 'bytes', + }, + { + internalType: 'address[]', + name: 'approvedTokens', + type: 'address[]', + }, + { + internalType: 'address', + name: 'firstDexRouter', + type: 'address', + }, + { + internalType: 'address', + name: 'secondDexRouter', + type: 'address', + }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'bool', name: 'nativeIn', type: 'bool' }, + { + internalType: 'address', + name: 'relayRecipient', + type: 'address', + }, + { internalType: 'bytes', name: 'otherSideCalldata', type: 'bytes' }, + ], + internalType: 'struct MetaRouteStructs.MetaRouteTransaction', + name: '_metarouteTransaction', + type: 'tuple', + }, + ], + name: 'metaRoute', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, +] + +export const metaBurnABI = [ + { + inputs: [ + { + components: [ + { + internalType: 'uint256', + name: 'stableBridgingFee', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'address', + name: 'syntCaller', + type: 'address', + }, + { + internalType: 'address', + name: 'finalReceiveSide', + type: 'address', + }, + { + internalType: 'address', + name: 'sToken', + type: 'address', + }, + { + internalType: 'bytes', + name: 'finalCallData', + type: 'bytes', + }, + { + internalType: 'uint256', + name: 'finalOffset', + type: 'uint256', + }, + { + internalType: 'address', + name: 'chain2address', + type: 'address', + }, + { + internalType: 'address', + name: 'receiveSide', + type: 'address', + }, + { + internalType: 'address', + name: 'oppositeBridge', + type: 'address', + }, + { + internalType: 'address', + name: 'revertableAddress', + type: 'address', + }, + { + internalType: 'uint256', + name: 'chainID', + type: 'uint256', + }, + { + internalType: 'bytes32', + name: 'clientID', + type: 'bytes32', + }, + ], + internalType: 'struct MetaRouteStructs.MetaBurnTransaction', + name: '_metaBurnTransaction', + type: 'tuple', + }, + ], + name: 'metaBurnSyntheticToken', + outputs: [ + { + internalType: 'bytes32', + name: 'internalID', + type: 'bytes32', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, +] diff --git a/packages/symbiosis/src/constants.ts b/packages/symbiosis/src/constants.ts new file mode 100644 index 000000000..605478464 --- /dev/null +++ b/packages/symbiosis/src/constants.ts @@ -0,0 +1,67 @@ +import type { Address } from 'viem' + +export const ETH_CHAIN_ID = 1 +export const OPTIMISM_CHAIN_ID = 10 +export const POLYGON_CHAIN_ID = 137 +export const ZK_ERA_CHAIN_ID = 324 +export const MANTLE_CHAIN_ID = 5000 +export const BASE_CHAIN_ID = 8453 +export const ARBITRUM_CHAIN_ID = 42161 + +export const CHAIN_ID_ARRAY = [ + ETH_CHAIN_ID, + OPTIMISM_CHAIN_ID, + POLYGON_CHAIN_ID, + ZK_ERA_CHAIN_ID, + MANTLE_CHAIN_ID, + BASE_CHAIN_ID, + ARBITRUM_CHAIN_ID, +] + +export const CHAIN_TO_TOKENS: { + [chainId: number]: Address[] +} = { + [ETH_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // ETH + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT + '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC + ], + [OPTIMISM_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // ETH + '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', // USDC.e + '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', // USDT + '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', // DAI + '0x4200000000000000000000000000000000000042', // OP + ], + [POLYGON_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // MATIC + '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC.e + '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', // USDT + '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', // DAI + '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', // WETH + ], + [ZK_ERA_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // ETH + '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', // USDC + '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C', // USDT + ], + [MANTLE_CHAIN_ID]: [ + '0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111', // WETH + '0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9', // USDC + '0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE', // USDT + ], + [BASE_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // ETH + '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', // USDbC + '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', // DAI + ], + [ARBITRUM_CHAIN_ID]: [ + '0x0000000000000000000000000000000000000000', // ETH + '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC.e + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', // USDT + '0x912CE59144191C1204E64559FE8253a0e49E6548', // ARB + ], +} diff --git a/packages/symbiosis/src/index.ts b/packages/symbiosis/src/index.ts new file mode 100644 index 000000000..4e331e78d --- /dev/null +++ b/packages/symbiosis/src/index.ts @@ -0,0 +1,19 @@ +import { + type IActionPlugin, + PluginActionNotImplementedError, +} from '@rabbitholegg/questdk' + +import { + bridge, + getSupportedChainIds, + getSupportedTokenAddresses, +} from './Symbiosis.js' + +export const Symbiosis: IActionPlugin = { + pluginId: 'symbiosis', + getSupportedTokenAddresses, + getSupportedChainIds, + bridge, + swap: async () => new PluginActionNotImplementedError(), + mint: async () => new PluginActionNotImplementedError(), +} diff --git a/packages/symbiosis/src/symbiosis-sdk.ts b/packages/symbiosis/src/symbiosis-sdk.ts new file mode 100644 index 000000000..2b430a97d --- /dev/null +++ b/packages/symbiosis/src/symbiosis-sdk.ts @@ -0,0 +1,4 @@ +import { Symbiosis } from 'symbiosis-js-sdk' + +// initialize and export symbiosis sdk instance +export const symbiosis = new Symbiosis('mainnet', 'bridge') diff --git a/packages/symbiosis/src/test-transactions.ts b/packages/symbiosis/src/test-transactions.ts new file mode 100644 index 000000000..9952fa2de --- /dev/null +++ b/packages/symbiosis/src/test-transactions.ts @@ -0,0 +1,126 @@ +import type { Address, Hash } from 'viem' +import { parseEther } from 'viem' + +interface Transaction { + chainId: number + from: Address + hash?: Hash + input: string + to: Address + value: string +} + +interface TestTransaction { + transaction: Transaction + destinationChainId: number + amount: bigint | number + tokenAddress?: Address + recipient?: Address + description: string +} + +export const PASSING_TEST_TRANSACTIONS: TestTransaction[] = [ + { + transaction: { + chainId: 1, + from: '0x27229c5c34c018e6a43d2a00f8f81e06f54a9a5d', + hash: '0xc97deae76c21cb57498d2873babd212fa589eae9e4d2e979f4a10a3428f376ee', + input: + '0xa11b11980000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a800000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000004d0e30db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000a04ce654c1700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e00000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d000000000000000000000000000000000000000000000000000000000000dbe00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000000000260000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000006400000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d73796d62696f7369732d6170700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001ce4e75e2bd6bbbacde1e10d6813228138337e86000000000000000000000000e3db9ad5a3c6387bece39fafc26dbb2b594fb7ff00000000000000000000000000000000000000000000000000000000000002e41e859a050000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c48f6bdeaa00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000378224e87c9b8000000000000000000000000000000000000000000000000000377a9ae76526d3c2000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e000000000000000000000000000000000000000000000000000000000653b51d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bcc2637dfa64999f75abb53a7265b5b4932e40eb00000000000000000000000000000000000000000000000000000000000000020000000000000000000000001ce4e75e2bd6bbbacde1e10d6813228138337e86000000000000000000000000e3db9ad5a3c6387bece39fafc26dbb2b594fb7ff00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424e691a2aa0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000037915d9d196a94eb000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000006e2b76966cbd9cf4cc2fa0d76d24d5241e0abc2f000000000000000000000000e3db9ad5a3c6387bece39fafc26dbb2b594fb7ff00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000c400000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d00000000000000000000000039de19c9ff25693a2311aad1dc5c790194084a39000000000000000000000000b0d30ad9c1a7b303977db7ea073a4329d930d94c00000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d000000000000000000000000000000000000000000000000000000000000014473796d62696f7369732d61707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022812aa3caf000000000000000000000000a9305c3c14757bae2e73ef7f66fe241f5f6bf3470000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a91000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000a9305c3c14757bae2e73ef7f66fe241f5f6bf34700000000000000000000000027229c5c34c018e6a43d2a00f8f81e06f54a9a5d000000000000000000000000000000000000000000000000378f3beab68d14eb0000000000000000000000000000000000000000000000003773ece9b06260530000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a00000000000000000000000000000000000000000000006c00005600001a0020d6bdbf785aea5775959fbc2557cc8789bc1bf90a239d9a9141215aea5775959fbc2557cc8789bc1bf90a239d9a9100042e1a7d4d0000000000000000000000000000000000000000000000000000000000000000c0616e2b76966cbd9cf4cc2fa0d76d24d5241e0abc2f000000000000000000000000000000000000000000008b1ccac80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + to: '0x1dcfbc3fa01b2a86bc3a3f43479cce9e8d438adc', + value: '4000000000000000000', + }, + destinationChainId: 324, + amount: parseEther('3.5'), + tokenAddress: '0x0000000000000000000000000000000000000000', + description: 'when bridging >= 2 ETH from Mainnet to ZK Sync', + }, + { + transaction: { + chainId: 10, + from: '0x2108791df451e953a0e356be2f5dca3e7b8e2a76', + hash: '0xce06592607e69b1b20becfd1dba2b0ae1907b066f5fe15d8f960cf5c631d1cd3', + input: + '0xa11b119800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000005667db60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000292fc50e4eb66c3f6514b9e402dbc25961824d6200000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000000000000000000000000000000000000000008a4ce654c17000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000493e00000000000000000000000000000000000000000000000000000000005667db60000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e833d3ce2b1871fef88742e007254ff73b6d2866000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e0000000000000000000000002108791df451e953a0e356be2f5dca3e7b8e2a76000000000000000000000000000000000000000000000000000000000000dbe00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000000000260000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a8000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002108791df451e953a0e356be2f5dca3e7b8e2a7673646b2d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f072f11bf151038bd8732cd1088b7c98762b839c000000000000000000000000eeae2132f2e21f68d862c535d7d9857803fbcf3f00000000000000000000000000000000000000000000000000000000000002e41e859a050000000000000000000000000000000000000000000000000000000005667db600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c48f6bdeaa000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000561e9d600000000000000000000000000000000000000000000000000000000055e750e000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000018b5788695d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006148fd6c649866596c3d8a971fc313e5ece848820000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f072f11bf151038bd8732cd1088b7c98762b839c000000000000000000000000eeae2132f2e21f68d862c535d7d9857803fbcf3f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4e691a2aa000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000000000000000000000000000000000000561e6ea000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000eeae2132f2e21f68d862c535d7d9857803fbcf3f00000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000044000000000000000000000000e833d3ce2b1871fef88742e007254ff73b6d286600000000000000000000000001a3c8e513b758ebb011f7afaf6c37616c9c24d90000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e0000000000000000000000002108791df451e953a0e356be2f5dca3e7b8e2a76000000000000000000000000000000000000000000000000000000000000a4b173646b2d6170700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8bc80f1a8000000000000000000000000e833d3ce2b1871fef88742e007254ff73b6d286600000000000000000000000000000000000000000000000000000000055d530a000000000000000000000000000000000000000000000000000000000559d425000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008e295789c9465487074a65b1ae9ce0351172393fea698b470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + to: '0x1a039ce63ae35a67bf0e9f6dbfae969639d59ec8', + value: '0', + }, + destinationChainId: 42161, + amount: 90000000n, + tokenAddress: '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + recipient: '0xE833D3cE2B1871fef88742E007254fF73b6d2866', + description: 'when bridging >= 90 USDC.e from Optimism to Arbitrum', + }, + { + transaction: { + chainId: 10, + from: '0xa99f898530df1514a566f1a6562d62809e99557d', + hash: '0xa0d4809a4835d84d15467a9fddfde73d1e57fa5121e56fff2a0526c448011c21', + input: + '0xa11b119800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001800000000000000000000000004200000000000000000000000000000000000006000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000292fc50e4eb66c3f6514b9e402dbc25961824d6200000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000004d0e30db00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000a44ce654c1700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000004200000000000000000000000000000000000006000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000dbe00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000000000260000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a800000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d73796d62696f7369732d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000983e6839e84004e78fbfe76431d879cf9cf2f084000000000000000000000000a6e6c78746f873db8545b7571dd1c5d87cc9576300000000000000000000000000000000000000000000000000000000000002e41e859a050000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c48f6bdeaa0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000010f903280265cf000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e000000000000000000000000000000000000000000000000000000000653d989f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bcc2637dfa64999f75abb53a7265b5b4932e40eb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000983e6839e84004e78fbfe76431d879cf9cf2f084000000000000000000000000a6e6c78746f873db8545b7571dd1c5d87cc9576300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000464e691a2aa000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000001b48eb57e00000000000000000000000000000000000000000000000000000110ed8b84a7330000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e000000000000000000000000025c030116feb2e7bba054b9de0915e5f51b03e31000000000000000000000000a6e6c78746f873db8545b7571dd1c5d87cc9576300000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000128000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000292fc50e4eb66c3f6514b9e402dbc25961824d620000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000138873796d62696f7369732d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000264ac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000012475ceafe6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f38fccf2933000000000000000000000000000000000000000000000000114865d812ebb843c00000000000000000000000000000000000000000000000000000000653d98aa000000000000000000000000000000000000000000000000000000000000002bdeaddeaddeaddeaddeaddeaddeaddeaddead1111000bb878c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + to: '0x1a039ce63ae35a67bf0e9f6dbfae969639d59ec8', + value: '5000000000000000', + }, + destinationChainId: 5000, + amount: parseEther('0.005'), + tokenAddress: '0x0000000000000000000000000000000000000000', + recipient: '0xA99F898530dF1514A566f1a6562D62809e99557D', + description: 'when bridging ETH from Optimism to Mantle', + }, + { + transaction: { + chainId: 8453, + from: '0xa99f898530df1514a566f1a6562d62809e99557d', + input: + '0xa11b11980000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad4000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ee981b2459331ad268cc63ce6167b446af4161f80000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000024812aa3caf000000000000000000000000e37e799d5077682fa0a244d46e5649f71457bd09000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000d9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca000000000000000000000000e37e799d5077682fa0a244d46e5649f71457bd090000000000000000000000006f0f6393e45fe0e7215906b6f9cfeff53ea139cf000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000aca33af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a100000000000000000000000000000000000000000000008300002000000600206b4be0b940414200000000000000000000000000000000000006d0e30db002a00000000000000000000000000000000000000000000000000000000000000001ee63c1e5814c36388be6f416a29c8d8eee81c771ce6be14b1842000000000000000000000000000000000000061111111254eeb25477b68fb85ed929f73a960582000000000000000000000000000000000000000000000000000000000000008b1ccac8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca0000000000000000000000000000000000000000000000000000000000001524ce654c17000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000000000000000000000000000000000000adaa6ca000000000000000000000000d9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000dbe00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000000000260000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a800000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d73796d62696f7369732d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dd1a897f92c14cda3ab7023b094615a7068d01fa0000000000000000000000007d6ec42b5d9566931560411a8652cea00b90d98200000000000000000000000000000000000000000000000000000000000002e41e859a05000000000000000000000000000000000000000000000000000000000adaa6ca00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c48f6bdeaa00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad612ea000000000000000000000000000000000000000000000000000000000ab708e1000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e000000000000000000000000000000000000000000000000000000000654079820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006148fd6c649866596c3d8a971fc313e5ece848820000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dd1a897f92c14cda3ab7023b094615a7068d01fa0000000000000000000000007d6ec42b5d9566931560411a8652cea00b90d98200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f44e691a2aa00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000003981ae0000000000000000000000000000000000000000000000000000000000ad5352b000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000006352a56caadc4f1e25cd6c75970fa768a3304e640000000000000000000000007d6ec42b5d9566931560411a8652cea00b90d98200000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000104000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000000173796d62696f7369732d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4490411a32000000000000000000000000c27d980b71d5978f8b6de9e1ba01ed001d8760d3000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000c27d980b71d5978f8b6de9e1ba01ed001d8760d3000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d00000000000000000000000000000000000000000000000000000000073d1a4b00000000000000000000000000000000000000000000000000f2047f855daef000000000000000000000000000000000000000000000000000f42a8e4a37abbd00000000000000000000000000000000000000000000000000000000000000020000000000000000000000003254ae00947e44b7fd03f50b93b9acfed59f96200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002449f865422000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104e5b07cdb0000000000000000000000006c83b0feef04139eb5520b1ce0e78069c6e7e2c500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c27d980b71d5978f8b6de9e1ba01ed001d8760d300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002ea0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb8ae7ab96520de3a18e5e111b5eaab095312d7fe840000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003a451a74316000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8400000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064eb5625d9000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f6702200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000843df0212400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000648a6a1e85000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000353c1f0bc78fbbc245b3c93ef77b1dcc5b77d2a000050000000000000000000000000000000000000000000000f449d321a885ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49f865422000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d1660f99000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + to: '0x6f0f6393e45fe0e7215906b6f9cfeff53ea139cf', + value: '100000000000000000', + }, + destinationChainId: 1, + amount: parseEther('0.1'), + tokenAddress: '0x0000000000000000000000000000000000000000', + recipient: '0xa99f898530df1514a566f1a6562d62809e99557d', + description: 'when bridging >= 0.1 ETH from Base to Mainnet', + }, +] + +const bridgeTx: Transaction = { + chainId: 42161, + from: '0xa99f898530df1514a566f1a6562d62809e99557d', + input: + '0xa11b119800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002200000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad4000000000000000000000000000000000000000000000000000000000115ac18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a3c8e513b758ebb011f7afaf6c37616c9c24d9000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000a8e449022e000000000000000000000000000000000000000000000000000000000115ac1800000000000000000000000000000000000000000000000000000000011176b6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000018000000000000000000000008e295789c9465487074a65b1ae9ce0351172393f8b1ccac800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000000000000000000000000000000000007c4ce654c17000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000000000000000000000000000000000000115a0ce000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a80000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000dbe00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cb28fbe3e9c0fea62e0e63ff3f232cecfe555ad40000000000000000000000000000000000000000000000000000000000000260000000000000000000000000b8f275fbf7a959f4bce59999a2ef122a099e81a800000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d73796d62696f7369732d617070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eeae2132f2e21f68d862c535d7d9857803fbcf3f00000000000000000000000085ec8da79bd2e54724ab8aa4a7a209b1f66d6ec000000000000000000000000000000000000000000000000000000000000002e41e859a05000000000000000000000000000000000000000000000000000000000115a0ce00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c48f6bdeaa000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000001110cee00000000000000000000000000000000000000000000000000000000010b91a0000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e00000000000000000000000000000000000000000000000000000000065407e9b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006148fd6c649866596c3d8a971fc313e5ece848820000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eeae2132f2e21f68d862c535d7d9857803fbcf3f00000000000000000000000085ec8da79bd2e54724ab8aa4a7a209b1f66d6ec0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4e691a2aa0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000c350000000000000000000000000000000000000000000000000000000000111140a000000000000000000000000b79a4f5828eb55c10d7abf4bfe9a9f5d11aa84e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085ec8da79bd2e54724ab8aa4a7a209b1f66d6ec000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000292fc50e4eb66c3f6514b9e402dbc25961824d620000000000000000000000005523985926aa12ba58dc5ad00ddca99678d7227e000000000000000000000000a99f898530df1514a566f1a6562d62809e99557d000000000000000000000000000000000000000000000000000000000000138873796d62696f7369732d6170700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + to: '0xca506793a420e901bbca8066be5661e3c52c84c2', + value: '0', +} + +export const controlTransaction: TestTransaction = { + transaction: bridgeTx, + destinationChainId: 5000, + amount: 10000000n, + tokenAddress: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + recipient: '0xa99f898530df1514a566f1a6562d62809e99557d', + description: 'when all parameters are correctly set', +} + +export const FAILING_TEST_TRANSACTIONS: TestTransaction[] = [ + { + ...controlTransaction, + destinationChainId: 10, // 5000 + description: 'when destination chain is incorrect', + }, + { + ...controlTransaction, + amount: 20000000n, // 10000000n + description: 'when amount is insufficient', + }, + { + ...controlTransaction, + tokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // wrong USDC token + description: 'when input token is incorrect', + }, + { + ...controlTransaction, + recipient: '0xB7e98B3F16CC915B9C7a321c1bd95fa406BDbabe', + description: 'when recipient is incorrect', + }, +] diff --git a/packages/symbiosis/tsconfig.build.json b/packages/symbiosis/tsconfig.build.json new file mode 100644 index 000000000..2e27369d5 --- /dev/null +++ b/packages/symbiosis/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "tsconfig/base.json", + "include": ["src"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.test-d.ts", + "src/**/*.bench.ts", + "src/_test", + "scripts/**/*" + ], + "compilerOptions": { + "resolveJsonModule": true, + "sourceMap": true, + "rootDir": "./src" + } +} diff --git a/packages/symbiosis/tsconfig.json b/packages/symbiosis/tsconfig.json new file mode 100644 index 000000000..c76405177 --- /dev/null +++ b/packages/symbiosis/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/base.json", + "include": ["src/**/*", "src/chain-data.ts"], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0119add8..e84da1b2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -328,6 +328,7 @@ importers: '@rabbitholegg/questdk-plugin-paraswap': workspace:* '@rabbitholegg/questdk-plugin-polygon': workspace:* '@rabbitholegg/questdk-plugin-stargate': workspace:* + '@rabbitholegg/questdk-plugin-symbiosis': workspace:* '@rabbitholegg/questdk-plugin-tally': workspace:* '@rabbitholegg/questdk-plugin-uniswap': workspace:* '@types/node': ^20.8.7 @@ -353,6 +354,7 @@ importers: '@rabbitholegg/questdk-plugin-paraswap': link:../paraswap '@rabbitholegg/questdk-plugin-polygon': link:../polygon '@rabbitholegg/questdk-plugin-stargate': link:../stargate + '@rabbitholegg/questdk-plugin-symbiosis': link:../symbiosis '@rabbitholegg/questdk-plugin-tally': link:../tally '@rabbitholegg/questdk-plugin-uniswap': link:../uniswap viem: 1.16.6_typescript@5.2.2 @@ -391,6 +393,35 @@ importers: typescript: 5.1.6 vitest: 0.33.0 + packages/symbiosis: + specifiers: + '@rabbitholegg/questdk': 2.0.0-alpha.22 + '@types/node': ^20.4.5 + '@vitest/coverage-v8': ^0.33.0 + ethers: ^5.2.0 + rimraf: ^5.0.1 + rome: ^12.1.3 + symbiosis-js-sdk: ^3.0.9 + ts-node: ^10.9.1 + tsconfig: workspace:* + typescript: ^5.1.6 + viem: ^1.2.15 + vitest: ^0.33.0 + dependencies: + '@rabbitholegg/questdk': 2.0.0-alpha.22_typescript@5.2.2 + ethers: 5.7.2 + symbiosis-js-sdk: 3.0.10_ethers@5.7.2 + viem: 1.16.6_typescript@5.2.2 + devDependencies: + '@types/node': 20.8.7 + '@vitest/coverage-v8': 0.33.0_vitest@0.33.0 + rimraf: 5.0.5 + rome: 12.1.3 + ts-node: 10.9.1_wgftluouiaediqiazhryzwhram + tsconfig: link:../tsconfig + typescript: 5.2.2 + vitest: 0.33.0 + packages/tally: specifiers: '@rabbitholegg/questdk': 2.0.0-alpha.25 @@ -476,6 +507,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@adraffy/ens-normalize/1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@adraffy/ens-normalize/1.9.0: resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} dev: false @@ -1955,6 +1990,24 @@ packages: - zod dev: false + /@rabbitholegg/questdk/2.0.0-alpha.22_typescript@5.2.2: + resolution: {integrity: sha512-MBKDHYEmaKLScFEqDcLkg9s2BehA+Mh8brBwEhz/QE7OKHQkyAC1udxkXsSDGjg9q4e5y0apNdcpel3ktwnV+g==} + peerDependencies: + typescript: '>=5.1.6' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + abitype: 0.9.10_typescript@5.2.2 + rimraf: 5.0.5 + typescript: 5.2.2 + viem: 1.16.6_typescript@5.2.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /@rabbitholegg/questdk/2.0.0-alpha.25_typescript@5.1.6: resolution: {integrity: sha512-KhTZSfBlfG3rUNQ+9r2eAW/bR3eTD3y1TPiF7ydZEPI44w6rgW7gzrSuwX/lHYBRMSVm6nHryk2JXaJtfsS0AQ==} peerDependencies: @@ -2140,6 +2193,10 @@ packages: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} dev: true + /@tronweb3/google-protobuf/3.21.2: + resolution: {integrity: sha512-IVcT2GfWX3K6tHUVhs14NP5uzKhQt4KeDya1g9ACxuZsUzsaoGUIGzceK2Ltu7xp1YV94AaHOf4yxLAivlvEkQ==} + dev: false + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -2287,6 +2344,10 @@ packages: /@types/node/12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + /@types/node/18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: false + /@types/node/20.4.5: resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} dev: true @@ -2768,6 +2829,10 @@ packages: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} dev: false + /aes-js/4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: false + /agent-base/7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -3000,6 +3065,14 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: false + /axios/0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.3 + transitivePeerDependencies: + - debug + dev: false + /axios/1.3.3: resolution: {integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==} dependencies: @@ -4568,6 +4641,22 @@ packages: - utf-8-validate dev: false + /ethers/6.8.0: + resolution: {integrity: sha512-zrFbmQRlraM+cU5mE4CZTLBurZTs2gdp2ld0nG/f3ecBK+x6lZ69KSxBqZ4NjclxwfTxl5LeNufcBbMsTdY53Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /ethjs-unit/0.1.6: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -4581,6 +4670,10 @@ packages: engines: {node: '>=6'} dev: false + /eventemitter3/3.1.2: + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} + dev: false + /eventemitter3/4.0.4: resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} dev: false @@ -5419,6 +5512,10 @@ packages: /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + /injectpromise/1.0.0: + resolution: {integrity: sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA==} + dev: false + /inquirer/7.3.3: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} engines: {node: '>=8.0.0'} @@ -5742,6 +5839,15 @@ packages: - encoding dev: false + /isomorphic-unfetch/3.1.0: + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + dependencies: + node-fetch: 2.7.0 + unfetch: 4.2.0 + transitivePeerDependencies: + - encoding + dev: false + /isomorphic-ws/5.0.0_ws@8.12.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -6026,6 +6132,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash.flatmap/4.5.0: + resolution: {integrity: sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==} + dev: false + /lodash.get/4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true @@ -7248,6 +7358,11 @@ packages: strict-uri-encode: 1.1.0 dev: false + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: false + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -8161,6 +8276,30 @@ packages: - utf-8-validate dev: false + /symbiosis-js-sdk/3.0.10_ethers@5.7.2: + resolution: {integrity: sha512-HSibJuopOONZ68U7dSKZp28cNjamvWNklDITUcWnYEwQPAxWNdEBX9SwDWvyMtIW/xmfgekJAwA8Seq7a+u/tA==} + engines: {node: '>=10'} + peerDependencies: + ethers: ^5.2.0 + dependencies: + big.js: 5.2.2 + bignumber.js: 9.1.2 + decimal.js-light: 2.5.1 + ethers: 5.7.2 + isomorphic-unfetch: 3.1.0 + jsbi: 3.2.5 + lodash.flatmap: 4.5.0 + tiny-invariant: 1.3.1 + tiny-warning: 1.0.3 + toformat: 2.0.0 + tronweb: 5.3.1 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + dev: false + /table/6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} @@ -8323,6 +8462,28 @@ packages: engines: {node: '>=8'} dev: true + /tronweb/5.3.1: + resolution: {integrity: sha512-JF3HE0ab8KQWJWETCF7UqZHD4uMNNGlEPrquBoObu5bWc8A8eerBV9M2PJq+HcSYBivmEHeBqFgmpMAQP3ofpw==} + dependencies: + '@babel/runtime': 7.23.2 + '@ethersproject/abi': 5.7.0 + '@tronweb3/google-protobuf': 3.21.2 + axios: 0.26.1 + bignumber.js: 9.1.2 + ethereum-cryptography: 2.1.2 + ethers: 6.8.0 + eventemitter3: 3.1.2 + injectpromise: 1.0.0 + lodash: 4.17.21 + querystring-es3: 0.2.1 + semver: 5.7.2 + validator: 13.11.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + /ts-essentials/9.4.1_typescript@5.2.2: resolution: {integrity: sha512-oke0rI2EN9pzHsesdmrOrnqv1eQODmJpd/noJjwj2ZPC3Z4N2wbjrOEqnsEgmvlO2+4fBb0a794DCna2elEVIQ==} peerDependencies: @@ -8432,6 +8593,10 @@ packages: /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: false + /tslib/2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true @@ -8658,6 +8823,10 @@ packages: /undici-types/5.25.3: resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /unfetch/4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: false + /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -8795,6 +8964,11 @@ packages: builtins: 5.0.1 dev: true + /validator/13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: false + /varint/5.0.2: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} dev: false @@ -9797,6 +9971,19 @@ packages: optional: true dev: false + /ws/8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xhr-request-promise/0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} dependencies: