diff --git a/package.json b/package.json index 0e8e739e60..468c1a8fa5 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,10 @@ "test:scripts": "jest -i --verbose ./test-scripts/*.test.ts" }, "dependencies": { - "@cosmjs/amino": "^0.32.2", "@balancer-labs/sdk": "^1.1.5", "@bancor/carbon-sdk": "^0.0.93-DEV", + "@chewyswap/swap-sdk": "^1.0.1", + "@cosmjs/amino": "^0.32.2", "@cosmjs/proto-signing": "^0.31.1", "@cosmjs/stargate": "^0.31.1", "@cosmjs/tendermint-rpc": "^0.32.2", @@ -50,6 +51,7 @@ "@pancakeswap/v3-sdk": "^3.7.0", "@pangolindex/sdk": "^1.1.0", "@perp/sdk-curie": "^1.16.0", + "@shibaswap/sdk": "^1.1.18", "@sushiswap/sdk": "^5.0.0-canary.116", "@taquito/rpc": "^17.0.0", "@taquito/signer": "^17.0.0", @@ -169,4 +171,4 @@ "resolutions": { "web3-utils": "1.7.3" } -} +} \ No newline at end of file diff --git a/src/chains/ethereum/ethereum.ts b/src/chains/ethereum/ethereum.ts index ca4b1ab5c7..06cc24291d 100644 --- a/src/chains/ethereum/ethereum.ts +++ b/src/chains/ethereum/ethereum.ts @@ -17,6 +17,8 @@ import { OpenoceanConfig } from '../../connectors/openocean/openocean.config'; import { Curve } from '../../connectors/curve/curve'; import { CarbonConfig } from '../../connectors/carbon/carbon.config'; import { BalancerConfig } from '../../connectors/balancer/balancer.config'; +import { ShibaswapConfig } from '../../connectors/shibaswap/shibaswap.config'; +import { ChewyswapConfig } from '../../connectors/chewyswap/chewyswap.config'; // MKR does not match the ERC20 perfectly so we need to use a separate ABI. const MKR_ADDRESS = '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2'; @@ -191,6 +193,16 @@ export class Ethereum extends EthereumBase implements Ethereumish { spender = PancakeSwapConfig.config.pancakeswapV3NftManagerAddress( this._chain, ); + } else if (reqSpender === 'shibaswap') { + spender = ShibaswapConfig.config.routerAddress( + this.chainName, + this._chain, + ); + } else if (reqSpender === 'chewyswap') { + spender = ChewyswapConfig.config.routerAddress( + this.chainName, + this._chain, + ); } else if (reqSpender === 'sushiswap') { spender = SushiswapConfig.config.sushiswapRouterAddress( this.chainName, @@ -199,7 +211,8 @@ export class Ethereum extends EthereumBase implements Ethereumish { } else if (reqSpender === 'uniswapLP') { spender = UniswapConfig.config.uniswapV3NftManagerAddress( this.chainName, - this._chain); + this._chain, + ); } else if (reqSpender === 'carbonamm') { spender = CarbonConfig.config.carbonContractsConfig( 'ethereum', diff --git a/src/chains/ethereum/ethereum.validators.ts b/src/chains/ethereum/ethereum.validators.ts index 9a6e6aed7e..7c6a8e37b1 100644 --- a/src/chains/ethereum/ethereum.validators.ts +++ b/src/chains/ethereum/ethereum.validators.ts @@ -39,7 +39,7 @@ export const isAddress = (str: string): boolean => { export const validateAddress: Validator = mkValidator( 'address', invalidAddressError, - (val) => typeof val === 'string' && isAddress(val) + (val) => typeof val === 'string' && isAddress(val), ); // given a request, look for a key called spender that is 'uniswap' or an Ethereum address @@ -65,7 +65,9 @@ export const validateSpender: Validator = mkValidator( val === 'curve' || val === 'carbonamm' || val === 'balancer' || - isAddress(val)) + val === 'shibaswap' || + val === 'chewyswap' || + isAddress(val)), ); export const validateNonce: Validator = mkValidator( @@ -74,33 +76,33 @@ export const validateNonce: Validator = mkValidator( (val) => typeof val === 'undefined' || (typeof val === 'number' && val >= 0 && Number.isInteger(val)), - true + true, ); export const validateMaxFeePerGas: Validator = mkValidator( 'maxFeePerGas', invalidMaxFeePerGasError, (val) => typeof val === 'string' && isNaturalNumberString(val), - true + true, ); export const validateMaxPriorityFeePerGas: Validator = mkValidator( 'maxPriorityFeePerGas', invalidMaxPriorityFeePerGasError, (val) => typeof val === 'string' && isNaturalNumberString(val), - true + true, ); export const validateChain: Validator = mkValidator( 'chain', invalidChainError, - (val) => typeof val === 'string' + (val) => typeof val === 'string', ); export const validateNetwork: Validator = mkValidator( 'network', invalidNetworkError, - (val) => typeof val === 'string' + (val) => typeof val === 'string', ); // request types and corresponding validators diff --git a/src/chains/shibarium/shibarium.ts b/src/chains/shibarium/shibarium.ts new file mode 100644 index 0000000000..cf4bebd6d5 --- /dev/null +++ b/src/chains/shibarium/shibarium.ts @@ -0,0 +1,89 @@ +import abi from '../ethereum/ethereum.abi.json'; +import { logger } from '../../services/logger'; +import { Contract, Transaction, Wallet } from 'ethers'; +import { EthereumBase } from '../ethereum/ethereum-base'; +import { getEthereumConfig as getShibariumConfig } from '../ethereum/ethereum.config'; +import { Provider } from '@ethersproject/abstract-provider'; +import { Ethereumish } from '../../services/common-interfaces'; +import { ConfigManagerV2 } from '../../services/config-manager-v2'; +import { EVMController } from '../ethereum/evm.controllers'; +import { ShibaswapConfig } from '../../connectors/shibaswap/shibaswap.config'; +import { ChewyswapConfig } from '../../connectors/chewyswap/chewyswap.config'; + +export class Shibarium extends EthereumBase implements Ethereumish { + private static _instances: { [name: string]: Shibarium }; + private _gasPrice: number; + private _nativeTokenSymbol: string; + private _chain: string; + public controller; + + private constructor(network: string) { + const config = getShibariumConfig('shibarium', network); + super( + 'shibarium', + config.network.chainID, + config.network.nodeURL, + config.network.tokenListSource, + config.network.tokenListType, + config.manualGasPrice, + config.gasLimitTransaction, + ConfigManagerV2.getInstance().get('server.nonceDbPath'), + ConfigManagerV2.getInstance().get('server.transactionDbPath'), + ); + this._chain = config.network.name; + this._nativeTokenSymbol = config.nativeCurrencySymbol; + this._gasPrice = config.manualGasPrice; + this.controller = EVMController; + } + + public static getInstance(network: string): Shibarium { + if (Shibarium._instances === undefined) { + Shibarium._instances = {}; + } + if (!(network in Shibarium._instances)) { + Shibarium._instances[network] = new Shibarium(network); + } + + return Shibarium._instances[network]; + } + + public static getConnectedInstances(): { [name: string]: Shibarium } { + return Shibarium._instances; + } + + public get gasPrice(): number { + return this._gasPrice; + } + + public get nativeTokenSymbol(): string { + return this._nativeTokenSymbol; + } + + public get chain(): string { + return this._chain; + } + + getContract(tokenAddress: string, signerOrProvider?: Wallet | Provider) { + return new Contract(tokenAddress, abi.ERC20Abi, signerOrProvider); + } + + getSpender(reqSpender: string): string { + let spender: string; + if (reqSpender === 'chewyswap') { + spender = ChewyswapConfig.config.routerAddress('shibarium', this._chain); + } else if (reqSpender === 'shibaswap') { + spender = ShibaswapConfig.config.routerAddress('shibarium', this._chain); + } else { + spender = reqSpender; + } + return spender; + } + + // cancel transaction + async cancelTx(wallet: Wallet, nonce: number): Promise { + logger.info( + 'Canceling any existing transaction(s) with nonce number ' + nonce + '.', + ); + return super.cancelTxWithGasPrice(wallet, nonce, this._gasPrice * 2); + } +} diff --git a/src/chains/shibarium/shibarium.validators.ts b/src/chains/shibarium/shibarium.validators.ts new file mode 100644 index 0000000000..7b261ab859 --- /dev/null +++ b/src/chains/shibarium/shibarium.validators.ts @@ -0,0 +1,40 @@ +import { + mkRequestValidator, + mkValidator, + RequestValidator, + Validator, + validateAmount, + validateToken, + validateTokenSymbols, +} from '../../services/validators'; +import { + isAddress, + validateNonce, + validateAddress, +} from '../ethereum/ethereum.validators'; + +export const invalidSpenderError: string = + 'The spender param is not a valid Shibarium address (0x followed by 40 hexidecimal characters).'; + +// given a request, look for a key called spender that is 'uniswap', 'sushi' or an Ethereum address +export const validateSpender: Validator = mkValidator( + 'spender', + invalidSpenderError, + (val) => + typeof val === 'string' && + (val === 'shibaswap' || val === 'chewyswap' || isAddress(val)), +); + +export const validateApproveRequest: RequestValidator = mkRequestValidator([ + validateAddress, + validateSpender, + validateToken, + validateAmount, + validateNonce, +]); + +export const validateAllowancesRequest: RequestValidator = mkRequestValidator([ + validateAddress, + validateSpender, + validateTokenSymbols, +]); diff --git a/src/connectors/chewyswap/chewy_pair_abi.json b/src/connectors/chewyswap/chewy_pair_abi.json new file mode 100644 index 0000000000..9855849c83 --- /dev/null +++ b/src/connectors/chewyswap/chewy_pair_abi.json @@ -0,0 +1,707 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0In", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1In", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Out", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Out", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint112", + "name": "reserve0", + "type": "uint112" + }, + { + "indexed": false, + "internalType": "uint112", + "name": "reserve1", + "type": "uint112" + } + ], + "name": "Sync", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MINIMUM_LIQUIDITY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getReserves", + "outputs": [ + { + "internalType": "uint112", + "name": "reserve0", + "type": "uint112" + }, + { + "internalType": "uint112", + "name": "reserve1", + "type": "uint112" + }, + { + "internalType": "uint32", + "name": "blockTimestampLast", + "type": "uint32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "kLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "price0CumulativeLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "price1CumulativeLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "skim", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Out", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Out", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "sync", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/src/connectors/chewyswap/chewyswap.config.ts b/src/connectors/chewyswap/chewyswap.config.ts new file mode 100644 index 0000000000..30ad3e72d4 --- /dev/null +++ b/src/connectors/chewyswap/chewyswap.config.ts @@ -0,0 +1,45 @@ +import { ConfigManagerV2 } from '../../services/config-manager-v2'; +import { AvailableNetworks } from '../../services/config-manager-types'; + +export namespace ChewyswapConfig { + export interface NetworkConfig { + allowedSlippage: string; + gasLimitEstimate: number; + ttl: number; + routerAddress: (chain: string, network: string) => string; + tradingTypes: Array; + chainType: string; + availableNetworks: Array; + } + + export const config: NetworkConfig = { + allowedSlippage: ConfigManagerV2.getInstance().get( + 'chewyswap.allowedSlippage', + ), + gasLimitEstimate: ConfigManagerV2.getInstance().get( + 'chewyswap.gasLimitEstimate', + ), + ttl: ConfigManagerV2.getInstance().get('chewyswap.ttl'), + routerAddress: (chain: string, network: string) => { + const address = ConfigManagerV2.getInstance().get( + 'chewyswap.contractAddresses.' + + chain + + '.' + + network + + '.routerAddress', + ); + if (address === undefined) { + throw new Error('Router address not found'); + } + return address; + }, + tradingTypes: ['AMM'], + chainType: 'EVM', + availableNetworks: [ + { + chain: 'shibarium', + networks: ['mainnet', 'puppynet'], + }, + ], + }; +} diff --git a/src/connectors/chewyswap/chewyswap.ts b/src/connectors/chewyswap/chewyswap.ts new file mode 100644 index 0000000000..01ac9cea02 --- /dev/null +++ b/src/connectors/chewyswap/chewyswap.ts @@ -0,0 +1,342 @@ +import { UniswapishPriceError } from '../../services/error-handler'; +import { ChewyswapConfig } from './chewyswap.config'; +import routerAbi from './chewyswap_router.json'; + +import { ContractInterface } from '@ethersproject/contracts'; + +import { + Percent, + Router, + Token, + CurrencyAmount, + Trade, + Pair, + SwapParameters, + Currency, + TradeType, +} from '@chewyswap/swap-sdk'; +import IChewyPair from './chewy_pair_abi.json'; +import { ExpectedTrade, Uniswapish } from '../../services/common-interfaces'; +import { Shibarium } from '../../chains/shibarium/shibarium'; + +import { + BigNumber, + Wallet, + Transaction, + Contract, + ContractTransaction, + ethers, +} from 'ethers'; +import { percentRegexp } from '../../services/config-manager-v2'; +import { logger } from '../../services/logger'; +import { getAddress } from 'ethers/lib/utils'; + +export class Chewyswap implements Uniswapish { + private static _instances: { [name: string]: Chewyswap }; + private chain: Shibarium; + private _router: string; + private _routerAbi: ContractInterface; + private _gasLimitEstimate: number; + private _ttl: number; + private chainId; + private tokenList: Record = {}; + private _ready: boolean = false; + + private constructor(chain: string, network: string) { + const config = ChewyswapConfig.config; + if (chain === 'shibarium') { + this.chain = Shibarium.getInstance(network); + } else { + throw new Error('unsupported chain'); + } + this.chainId = this.chain.chainId; + this._ttl = config.ttl; + this._routerAbi = routerAbi.abi; + this._gasLimitEstimate = config.gasLimitEstimate; + this._router = config.routerAddress(chain, network); + } + + public static getInstance(chain: string, network: string): Chewyswap { + if (Chewyswap._instances === undefined) { + Chewyswap._instances = {}; + } + if (!(chain + network in Chewyswap._instances)) { + Chewyswap._instances[chain + network] = new Chewyswap(chain, network); + } + + return Chewyswap._instances[chain + network]; + } + + /** + * Given a token's address, return the connector's native representation of + * the token. + * + * @param address Token address + */ + public getTokenByAddress(address: string): Token { + const { chainId, decimals, symbol, name } = + this.tokenList[getAddress(address)]; + return new Token(chainId, address, decimals, symbol, name); + } + + public async init() { + if (!this.chain.ready()) { + await this.chain.init(); + } + for (const token of this.chain.storedTokenList) { + this.tokenList[token.address] = new Token( + this.chainId, + token.address, + token.decimals, + token.symbol, + token.name, + ); + } + this._ready = true; + } + + public ready(): boolean { + return this._ready; + } + + /** + * Router address. + */ + public get router(): string { + return this._router; + } + + /** + * Router smart contract ABI. + */ + public get routerAbi(): ContractInterface { + return this._routerAbi; + } + + /** + * Default gas limit for swap transactions. + */ + public get gasLimitEstimate(): number { + return this._gasLimitEstimate; + } + + /** + * Default time-to-live for swap transactions, in seconds. + */ + public get ttl(): number { + return this._ttl; + } + + /** + * Gets the allowed slippage percent from configuration. + */ + getSlippagePercentage(): Percent { + const allowedSlippage = ChewyswapConfig.config.allowedSlippage; + const nd = allowedSlippage.match(percentRegexp); + if (nd) return new Percent(nd[1], nd[2]); + throw new Error( + 'Encountered a malformed percent string in the config for ALLOWED_SLIPPAGE.', + ); + } + + /** + * Fetches information about a pair and constructs a pair from the given two tokens. + * This is to replace the Fetcher Class + * @param baseToken first token + * @param quoteToken second token + */ + + async fetchData(baseToken: Token, quoteToken: Token): Promise { + const pairAddress = Pair.getAddress(baseToken, quoteToken); + const contract = new Contract(pairAddress, IChewyPair, this.chain.provider); + const [reserves0, reserves1] = await contract.getReserves(); + const balances = baseToken.sortsBefore(quoteToken) + ? [reserves0, reserves1] + : [reserves1, reserves0]; + const pair = new Pair( + CurrencyAmount.fromRawAmount(baseToken, balances[0]), + CurrencyAmount.fromRawAmount(quoteToken, balances[1]), + ); + return pair; + } + + /** + * Given the amount of `baseToken` to put into a transaction, calculate the + * amount of `quoteToken` that can be expected from the transaction. + * + * This is typically used for calculating token sell prices. + * + * @param baseToken Token input for the transaction + * @param quoteToken Output from the transaction + * @param amount Amount of `baseToken` to put into the transaction + */ + async estimateSellTrade( + baseToken: Token, + quoteToken: Token, + amount: BigNumber, + ): Promise { + const nativeTokenAmount = CurrencyAmount.fromRawAmount( + baseToken, + amount.toString(), + ); + + logger.info( + `Fetching pair data for ${baseToken.address}-${quoteToken.address}.`, + ); + + const pair: Pair = await this.fetchData(baseToken, quoteToken); + + const trades = Trade.bestTradeExactIn( + [pair], + nativeTokenAmount, + quoteToken, + { + maxHops: 1, + }, + ); + if (!trades || trades.length === 0) { + throw new UniswapishPriceError( + `priceSwapIn: no trade pair found for ${baseToken} to ${quoteToken}.`, + ); + } + logger.info( + `Best trade for ${baseToken.address}-${quoteToken.address}: ` + + `${trades[0].executionPrice.toFixed(6)}` + + `${baseToken.name}.`, + ); + const expectedAmount = trades[0].minimumAmountOut( + this.getSlippagePercentage(), + ); + + return { trade: trades[0], expectedAmount }; + } + + async estimateBuyTrade( + quoteToken: Token, + baseToken: Token, + amount: BigNumber, + ): Promise { + const nativeTokenAmount = CurrencyAmount.fromRawAmount( + baseToken, + amount.toString(), + ); + + const pair: Pair = await this.fetchData(quoteToken, baseToken); + + const trades = Trade.bestTradeExactOut( + [pair], + quoteToken, + nativeTokenAmount, + { + maxHops: 1, + }, + ); + if (!trades || trades.length === 0) { + throw new UniswapishPriceError( + `priceSwapOut: no trade pair found for ${quoteToken.address} to ${baseToken.address}.`, + ); + } + logger.info( + `Best trade for ${quoteToken.address}-${baseToken.address}: ` + + `${trades[0].executionPrice.invert().toFixed(6)} ` + + `${baseToken.name}.`, + ); + + const expectedAmount = trades[0].maximumAmountIn( + this.getSlippagePercentage(), + ); + return { trade: trades[0], expectedAmount }; + } + + async isFeeOnTransfer( + trade: Trade, + wallet: Wallet, + ): Promise { + const token: any = trade.inputAmount.currency; + + // We need request taxes info from the token contract and if the token has a transfer tax, we return true + const TOKEN_ABI = [ + 'function taxes() view returns (uint16 buy, uint16 sell, address feeReceiver)', + ]; + + try { + const tokenContract = new ethers.Contract( + token.address, + TOKEN_ABI, + wallet, + ); + const { buy, sell, feeReceiver } = await tokenContract.taxes(); + + logger.warn(`Token taxes: Buy ${buy / 100}%, Sell ${sell / 100}%`); + logger.warn(`Fee receiver: ${feeReceiver}`); + + return sell > 0 || buy > 0; + } catch (error) { + // Ignore errors and return false + } + + return false; + } + + /** + * Given a wallet and a Uniswap trade, try to execute it on blockchain. + * + * @param wallet Wallet + * @param trade Expected trade + * @param gasPrice Base gas price, for pre-EIP1559 transactions + * @param routerAddress Router smart contract address + * @param ttl How long the swap is valid before expiry, in seconds + * @param abi Router contract ABI + * @param gasLimit Gas limit + * @param nonce (Optional) EVM transaction nonce + * @param maxFeePerGas (Optional) Maximum total fee per gas you want to pay + * @param maxPriorityFeePerGas (Optional) Maximum tip per gas you want to pay + */ + async executeTrade( + wallet: Wallet, + trade: Trade, + gasPrice: number, + routerAddress: string, + ttl: number, + abi: ContractInterface, + gasLimit: number, + nonce?: number, + maxFeePerGas?: BigNumber, + maxPriorityFeePerGas?: BigNumber, + ): Promise { + const feeOnTransfer = await this.isFeeOnTransfer(trade, wallet); + const result: SwapParameters = Router.swapCallParameters(trade, { + feeOnTransfer, + ttl, + recipient: wallet.address, + allowedSlippage: this.getSlippagePercentage(), + }); + const contract: Contract = new Contract(routerAddress, abi, wallet); + return this.chain.nonceManager.provideNonce( + nonce, + wallet.address, + async (nextNonce) => { + let tx: ContractTransaction; + if (maxFeePerGas !== undefined || maxPriorityFeePerGas !== undefined) { + tx = await contract[result.methodName](...result.args, { + gasLimit: gasLimit.toFixed(0), + value: result.value, + nonce: nextNonce, + maxFeePerGas, + maxPriorityFeePerGas, + }); + } else { + tx = await contract[result.methodName](...result.args, { + gasPrice: (gasPrice * 1e9).toFixed(0), + gasLimit: gasLimit.toFixed(0), + value: result.value, + nonce: nextNonce, + }); + } + + logger.info(JSON.stringify(tx)); + return tx; + }, + ); + } +} diff --git a/src/connectors/chewyswap/chewyswap_router.json b/src/connectors/chewyswap/chewyswap_router.json new file mode 100644 index 0000000000..0fec084425 --- /dev/null +++ b/src/connectors/chewyswap/chewyswap_router.json @@ -0,0 +1,1924 @@ +{ + "abi": [ + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountADesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountTokenDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsOut", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETHSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapETHForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + } + }, + "interface": [ + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountADesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountTokenDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsOut", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETHSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapETHForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "" +} \ No newline at end of file diff --git a/src/connectors/connectors.routes.ts b/src/connectors/connectors.routes.ts index 56d45c1da2..b8712501b1 100644 --- a/src/connectors/connectors.routes.ts +++ b/src/connectors/connectors.routes.ts @@ -7,6 +7,7 @@ import { OpenoceanConfig } from './openocean/openocean.config'; import { PangolinConfig } from './pangolin/pangolin.config'; import { PerpConfig } from './perp/perp.config'; import { QuickswapConfig } from './quickswap/quickswap.config'; +import { ShibaswapConfig } from './shibaswap/shibaswap.config'; import { SushiswapConfig } from './sushiswap/sushiswap.config'; import { TraderjoeConfig } from './traderjoe/traderjoe.config'; import { UniswapConfig } from './uniswap/uniswap.config'; @@ -24,6 +25,7 @@ import { KujiraConfig } from './kujira/kujira.config'; import { OsmosisConfig } from '../chains/osmosis/osmosis.config'; import { CarbonConfig } from './carbon/carbon.config'; import { BalancerConfig } from './balancer/balancer.config'; +import { ChewyswapConfig } from './chewyswap/chewyswap.config'; export namespace ConnectorsRoutes { export const router = Router(); @@ -44,7 +46,7 @@ export namespace ConnectorsRoutes { trading_type: UniswapConfig.config.tradingTypes('LP'), chain_type: UniswapConfig.config.chainType, available_networks: JSON.parse( - JSON.stringify(UniswapConfig.config.availableNetworks) + JSON.stringify(UniswapConfig.config.availableNetworks), ), additional_spenders: ['uniswap'], }, @@ -72,6 +74,18 @@ export namespace ConnectorsRoutes { chain_type: PerpConfig.config.chainType, available_networks: PerpConfig.config.availableNetworks, }, + { + name: 'chewyswap', + trading_type: ChewyswapConfig.config.tradingTypes, + chain_type: ChewyswapConfig.config.chainType, + available_networks: ChewyswapConfig.config.availableNetworks, + }, + { + name: 'shibaswap', + trading_type: ShibaswapConfig.config.tradingTypes, + chain_type: ShibaswapConfig.config.chainType, + available_networks: ShibaswapConfig.config.availableNetworks, + }, { name: 'sushiswap', trading_type: SushiswapConfig.config.tradingTypes, @@ -185,6 +199,6 @@ export namespace ConnectorsRoutes { }, ], }); - }) + }), ); } diff --git a/src/connectors/shibaswap/shibaswap.config.ts b/src/connectors/shibaswap/shibaswap.config.ts new file mode 100644 index 0000000000..8a367d59f9 --- /dev/null +++ b/src/connectors/shibaswap/shibaswap.config.ts @@ -0,0 +1,49 @@ +import { ConfigManagerV2 } from '../../services/config-manager-v2'; +import { AvailableNetworks } from '../../services/config-manager-types'; + +export namespace ShibaswapConfig { + export interface NetworkConfig { + allowedSlippage: string; + gasLimitEstimate: number; + ttl: number; + routerAddress: (chain: string, network: string) => string; + tradingTypes: Array; + chainType: string; + availableNetworks: Array; + } + + export const config: NetworkConfig = { + allowedSlippage: ConfigManagerV2.getInstance().get( + 'shibaswap.allowedSlippage', + ), + gasLimitEstimate: ConfigManagerV2.getInstance().get( + 'shibaswap.gasLimitEstimate', + ), + ttl: ConfigManagerV2.getInstance().get('shibaswap.ttl'), + routerAddress: (chain: string, network: string) => { + const address = ConfigManagerV2.getInstance().get( + 'shibaswap.contractAddresses.' + + chain + + '.' + + network + + '.routerAddress', + ); + if (address === undefined) { + throw new Error('Router address not found'); + } + return address; + }, + tradingTypes: ['AMM'], + chainType: 'EVM', + availableNetworks: [ + { + chain: 'ethereum', + networks: ['mainnet'], + }, + { + chain: 'shibarium', + networks: ['mainnet', 'puppynet'], + }, + ], + }; +} diff --git a/src/connectors/shibaswap/shibaswap.ts b/src/connectors/shibaswap/shibaswap.ts new file mode 100644 index 0000000000..2669e1899d --- /dev/null +++ b/src/connectors/shibaswap/shibaswap.ts @@ -0,0 +1,345 @@ +import { UniswapishPriceError } from '../../services/error-handler'; +import { ShibaswapConfig } from './shibaswap.config'; +import routerAbi from './shibaswap_router.json'; + +import { ContractInterface } from '@ethersproject/contracts'; + +import { + Percent, + Router, + Token, + CurrencyAmount, + Trade, + Pair, + SwapParameters, + TokenAmount, +} from '@shibaswap/sdk'; +import IUniswapV2Pair from '@uniswap/v2-core/build/IUniswapV2Pair.json'; +import { ExpectedTrade, Uniswapish } from '../../services/common-interfaces'; +import { Shibarium } from '../../chains/shibarium/shibarium'; + +import { + BigNumber, + Wallet, + Transaction, + Contract, + ContractTransaction, + ethers, +} from 'ethers'; +import { percentRegexp } from '../../services/config-manager-v2'; +import { logger } from '../../services/logger'; +import { getAddress } from 'ethers/lib/utils'; +import { Ethereum } from '../../chains/ethereum/ethereum'; + +export class Shibaswap implements Uniswapish { + private static _instances: { [name: string]: Shibaswap }; + private chain: Shibarium | Ethereum; + private _router: string; + private _routerAbi: ContractInterface; + private _gasLimitEstimate: number; + private _ttl: number; + private chainId; + private tokenList: Record = {}; + private _ready: boolean = false; + + private constructor(chain: string, network: string) { + const config = ShibaswapConfig.config; + if (chain === 'shibarium') { + this.chain = Shibarium.getInstance(network); + } else if (chain === 'ethereum') { + this.chain = Ethereum.getInstance(network); + } else { + throw new Error('unsupported chain'); + } + this.chainId = this.chain.chainId; + this._ttl = config.ttl; + this._routerAbi = routerAbi.abi; + this._gasLimitEstimate = config.gasLimitEstimate; + this._router = config.routerAddress(chain, network); + } + + public static getInstance(chain: string, network: string): Shibaswap { + if (Shibaswap._instances === undefined) { + Shibaswap._instances = {}; + } + if (!(chain + network in Shibaswap._instances)) { + Shibaswap._instances[chain + network] = new Shibaswap(chain, network); + } + + return Shibaswap._instances[chain + network]; + } + + /** + * Given a token's address, return the connector's native representation of + * the token. + * + * @param address Token address + */ + public getTokenByAddress(address: string): Token { + const { chainId, decimals, symbol, name } = + this.tokenList[getAddress(address)]; + return new Token(chainId, address, decimals, symbol, name); + } + + public async init() { + if (!this.chain.ready()) { + await this.chain.init(); + } + for (const token of this.chain.storedTokenList) { + this.tokenList[token.address] = new Token( + this.chainId, + token.address, + token.decimals, + token.symbol, + token.name, + ); + } + this._ready = true; + } + + public ready(): boolean { + return this._ready; + } + + /** + * Router address. + */ + public get router(): string { + return this._router; + } + + /** + * Router smart contract ABI. + */ + public get routerAbi(): ContractInterface { + return this._routerAbi; + } + + /** + * Default gas limit for swap transactions. + */ + public get gasLimitEstimate(): number { + return this._gasLimitEstimate; + } + + /** + * Default time-to-live for swap transactions, in seconds. + */ + public get ttl(): number { + return this._ttl; + } + + /** + * Gets the allowed slippage percent from configuration. + */ + getSlippagePercentage(): Percent { + const allowedSlippage = ShibaswapConfig.config.allowedSlippage; + const nd = allowedSlippage.match(percentRegexp); + if (nd) return new Percent(nd[1], nd[2]); + throw new Error( + 'Encountered a malformed percent string in the config for ALLOWED_SLIPPAGE.', + ); + } + + /** + * Fetches information about a pair and constructs a pair from the given two tokens. + * This is to replace the Fetcher Class + * @param baseToken first token + * @param quoteToken second token + */ + + async fetchData(baseToken: Token, quoteToken: Token): Promise { + const pairAddress = Pair.getAddress(baseToken, quoteToken); + const contract = new Contract( + pairAddress, + IUniswapV2Pair.abi, + this.chain.provider, + ); + const [reserves0, reserves1] = await contract.getReserves(); + const balances = baseToken.sortsBefore(quoteToken) + ? [reserves0, reserves1] + : [reserves1, reserves0]; + const pair = new Pair( + new TokenAmount(baseToken, balances[0]), + new TokenAmount(quoteToken, balances[1]), + ); + return pair; + } + + /** + * Given the amount of `baseToken` to put into a transaction, calculate the + * amount of `quoteToken` that can be expected from the transaction. + * + * This is typically used for calculating token sell prices. + * + * @param baseToken Token input for the transaction + * @param quoteToken Output from the transaction + * @param amount Amount of `baseToken` to put into the transaction + */ + + async estimateSellTrade( + baseToken: Token, + quoteToken: Token, + amount: BigNumber, + ): Promise { + const nativeTokenAmount: CurrencyAmount = new TokenAmount( + baseToken, + amount.toString(), + ); + + logger.info( + `Fetching pair data for ${baseToken.address}-${quoteToken.address}.`, + ); + + const pair: Pair = await this.fetchData(baseToken, quoteToken); + + const trades: Trade[] = Trade.bestTradeExactIn( + [pair], + nativeTokenAmount, + quoteToken, + { + maxHops: 1, + }, + ); + if (!trades || trades.length === 0) { + throw new UniswapishPriceError( + `priceSwapIn: no trade pair found for ${baseToken} to ${quoteToken}.`, + ); + } + logger.info( + `Best trade for ${baseToken.address}-${quoteToken.address}: ` + + `${trades[0].executionPrice.toFixed(6)}` + + `${baseToken.name}.`, + ); + const expectedAmount = trades[0].minimumAmountOut( + this.getSlippagePercentage(), + ); + + return { trade: trades[0], expectedAmount }; + } + + async estimateBuyTrade( + quoteToken: Token, + baseToken: Token, + amount: BigNumber, + ): Promise { + const nativeTokenAmount: CurrencyAmount = new TokenAmount( + baseToken, + amount.toString(), + ); + + const pair: Pair = await this.fetchData(quoteToken, baseToken); + + const trades: Trade[] = Trade.bestTradeExactOut( + [pair], + quoteToken, + nativeTokenAmount, + { + maxHops: 1, + }, + ); + if (!trades || trades.length === 0) { + throw new UniswapishPriceError( + `priceSwapOut: no trade pair found for ${quoteToken.address} to ${baseToken.address}.`, + ); + } + logger.info( + `Best trade for ${quoteToken.address}-${baseToken.address}: ` + + `${trades[0].executionPrice.invert().toFixed(6)} ` + + `${baseToken.name}.`, + ); + + const expectedAmount = trades[0].maximumAmountIn( + this.getSlippagePercentage(), + ); + return { trade: trades[0], expectedAmount }; + } + + async isFeeOnTransfer(trade: Trade, wallet: Wallet): Promise { + const token: any = trade.inputAmount.currency; + + // We need request taxes info from the token contract and if the token has a transfer tax, we return true + const TOKEN_ABI = [ + 'function taxes() view returns (uint16 buy, uint16 sell, address feeReceiver)', + ]; + + try { + const tokenContract = new ethers.Contract( + token.address, + TOKEN_ABI, + wallet, + ); + const { buy, sell, feeReceiver } = await tokenContract.taxes(); + + logger.warn(`Token taxes: Buy ${buy / 100}%, Sell ${sell / 100}%`); + logger.warn(`Fee receiver: ${feeReceiver}`); + + return sell > 0 || buy > 0; + } catch (error) { + // Ignore errors and return false + } + + return false; + } + + /** + * Given a wallet and a Uniswap trade, try to execute it on blockchain. + * + * @param wallet Wallet + * @param trade Expected trade + * @param gasPrice Base gas price, for pre-EIP1559 transactions + * @param routerAddress Router smart contract address + * @param ttl How long the swap is valid before expiry, in seconds + * @param abi Router contract ABI + * @param gasLimit Gas limit + * @param nonce (Optional) EVM transaction nonce + * @param maxFeePerGas (Optional) Maximum total fee per gas you want to pay + * @param maxPriorityFeePerGas (Optional) Maximum tip per gas you want to pay + */ + async executeTrade( + wallet: Wallet, + trade: Trade, + gasPrice: number, + routerAddress: string, + ttl: number, + abi: ContractInterface, + gasLimit: number, + nonce?: number, + maxFeePerGas?: BigNumber, + maxPriorityFeePerGas?: BigNumber, + ): Promise { + const feeOnTransfer = await this.isFeeOnTransfer(trade, wallet); + const result: SwapParameters = Router.swapCallParameters(trade, { + feeOnTransfer, + ttl, + recipient: wallet.address, + allowedSlippage: this.getSlippagePercentage(), + }); + const contract: Contract = new Contract(routerAddress, abi, wallet); + return this.chain.nonceManager.provideNonce( + nonce, + wallet.address, + async (nextNonce) => { + let tx: ContractTransaction; + if (maxFeePerGas !== undefined || maxPriorityFeePerGas !== undefined) { + tx = await contract[result.methodName](...result.args, { + gasLimit: gasLimit.toFixed(0), + value: result.value, + nonce: nextNonce, + maxFeePerGas, + maxPriorityFeePerGas, + }); + } else { + tx = await contract[result.methodName](...result.args, { + gasPrice: (gasPrice * 1e9).toFixed(0), + gasLimit: gasLimit.toFixed(0), + value: result.value, + nonce: nextNonce, + }); + } + + return tx; + }, + ); + } +} diff --git a/src/connectors/shibaswap/shibaswap_router.json b/src/connectors/shibaswap/shibaswap_router.json new file mode 100644 index 0000000000..0fec084425 --- /dev/null +++ b/src/connectors/shibaswap/shibaswap_router.json @@ -0,0 +1,1924 @@ +{ + "abi": [ + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountADesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountTokenDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsOut", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETHSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapETHForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + } + }, + "interface": [ + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountADesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountTokenDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsOut", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETHSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapETHForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "" +} \ No newline at end of file diff --git a/src/services/common-interfaces.ts b/src/services/common-interfaces.ts index 4fd53df531..b46357ccb2 100644 --- a/src/services/common-interfaces.ts +++ b/src/services/common-interfaces.ts @@ -38,6 +38,20 @@ import { Trade as TradeQuickswap, Fraction as QuickswapFraction, } from 'quickswap-sdk'; +import { + Trade as ChewyswapTrade, + Token as ChewyswapToken, + TradeType as ChewyswapTradeType, + Currency as ChewyswapCurrency, + CurrencyAmount as ChewyswapCurrencyAmount, + Fraction as ChewyswapFraction, +} from '@chewyswap/swap-sdk'; +import { + Trade as ShibaswapTrade, + Token as ShibaswapToken, + CurrencyAmount as ShibaswapCurrencyAmount, + Fraction as ShibaswapFraction, +} from '@shibaswap/sdk'; import { Trade as SushiswapTrade, Token as SushiToken, @@ -126,6 +140,8 @@ export type Tokenish = | TokenQuickswap | TokenTraderjoe | UniswapCoreToken + | ShibaswapToken + | ChewyswapToken | SushiToken | PancakeSwapToken | MMFToken @@ -147,6 +163,8 @@ export type UniswapishTrade = | UniswapV3Trade | TradeQuickswap | TradeTraderjoe + | ShibaswapTrade + | ChewyswapTrade | SushiswapTrade | TradeUniswap | PancakeSwapTrade< @@ -182,6 +200,8 @@ export type UniswapishAmount = | CurrencyAmountQuickswap | UniswapCoreCurrencyAmount | CurrencyAmountTraderjoe + | ShibaswapCurrencyAmount + | ChewyswapCurrencyAmount | SushiCurrencyAmount | PancakeSwapCurrencyAmount | CurrencyAmountMMF @@ -194,6 +214,8 @@ export type Fractionish = | PangolinFraction | QuickswapFraction | TraderjoeFraction + | ShibaswapFraction + | ChewyswapFraction | SushiFraction | PancakeSwapFraction | FractionMMF @@ -361,7 +383,7 @@ export interface RefAMMish { */ parseTrade( trades: EstimateSwapView[], - side: string + side: string, ): { estimatedPrice: string; expectedAmount: string; @@ -381,7 +403,7 @@ export interface RefAMMish { baseToken: TokenMetadata, quoteToken: TokenMetadata, amount: string, - allowedSlippage?: string + allowedSlippage?: string, ): Promise<{ trade: EstimateSwapView[]; expectedAmount: string }>; /** @@ -398,7 +420,7 @@ export interface RefAMMish { quoteToken: TokenMetadata, baseToken: TokenMetadata, amount: string, - allowedSlippage?: string + allowedSlippage?: string, ): Promise<{ trade: EstimateSwapView[]; expectedAmount: string }>; /** @@ -417,7 +439,7 @@ export interface RefAMMish { amountIn: string, tokenIn: TokenMetadata, tokenOut: TokenMetadata, - allowedSlippage?: string + allowedSlippage?: string, ): Promise; } @@ -538,7 +560,7 @@ export interface UniswapLPish { gasPrice: number, nonce?: number, maxFeePerGas?: BigNumber, - maxPriorityFeePerGas?: BigNumber + maxPriorityFeePerGas?: BigNumber, ): Promise; /** @@ -558,7 +580,7 @@ export interface UniswapLPish { gasPrice: number, nonce?: number, maxFeePerGas?: BigNumber, - maxPriorityFeePerGas?: BigNumber + maxPriorityFeePerGas?: BigNumber, ): Promise; /** @@ -643,7 +665,7 @@ export interface Perpish { isLong: boolean, tickerSymbol: string, minBaseAmount: string, - allowedSlippage?: string + allowedSlippage?: string, ): Promise; /** @@ -653,7 +675,7 @@ export interface Perpish { */ closePosition( tickerSymbol: string, - allowedSlippage?: string + allowedSlippage?: string, ): Promise; } @@ -669,7 +691,7 @@ export interface Chain extends BasicChainMethods, EthereumBase { cancelTx(wallet: Wallet, nonce: number): Promise; getContract( tokenAddress: string, - signerOrProvider?: Wallet | Provider + signerOrProvider?: Wallet | Provider, ): Contract; } @@ -679,7 +701,7 @@ export interface Xdcish extends BasicChainMethods, XdcBase { cancelTx(wallet: XdcWallet, nonce: number): Promise; getContract( tokenAddress: string, - signerOrProvider?: XdcWallet | XdcProviders.Provider + signerOrProvider?: XdcWallet | XdcProviders.Provider, ): XdcContract; } @@ -715,7 +737,7 @@ export interface CLOBish { ticker(req: ClobTickerRequest): Promise<{ markets: MarketInfo }>; orders( - req: ClobGetOrderRequest + req: ClobGetOrderRequest, ): Promise<{ orders: ClobGetOrderResponse['orders'] }>; postOrder(req: ClobPostOrderRequest): Promise<{ txHash: string }>; @@ -821,4 +843,4 @@ export interface FullTransferResponse { gasUsed: string; gasWanted: string; txHash: string; -} \ No newline at end of file +} diff --git a/src/services/connection-manager.ts b/src/services/connection-manager.ts index f247b534cc..e5a193db1b 100644 --- a/src/services/connection-manager.ts +++ b/src/services/connection-manager.ts @@ -4,6 +4,7 @@ import { Cronos } from '../chains/cronos/cronos'; import { Ethereum } from '../chains/ethereum/ethereum'; import { BinanceSmartChain } from '../chains/binance-smart-chain/binance-smart-chain'; import { Harmony } from '../chains/harmony/harmony'; +import { Shibarium } from '../chains/shibarium/shibarium'; import { Polygon } from '../chains/polygon/polygon'; import { Xdc } from '../chains/xdc/xdc'; import { Tezos } from '../chains/tezos/tezos'; @@ -19,6 +20,8 @@ import { PancakeSwap } from '../connectors/pancakeswap/pancakeswap'; import { Uniswap } from '../connectors/uniswap/uniswap'; import { UniswapLP } from '../connectors/uniswap/uniswap.lp'; import { VVSConnector } from '../connectors/vvs/vvs'; +import { Shibaswap } from '../connectors/shibaswap/shibaswap'; + import { CLOBish, Ethereumish, @@ -47,6 +50,7 @@ import { PancakeswapLP } from '../connectors/pancakeswap/pancakeswap.lp'; import { XRPLCLOB } from '../connectors/xrpl/xrpl'; import { Carbonamm } from '../connectors/carbon/carbonAMM'; import { Balancer } from '../connectors/balancer/balancer'; +import { Chewyswap } from '../connectors/chewyswap/chewyswap'; export type ChainUnion = | Algorand @@ -146,6 +150,8 @@ export async function getChainInstance( connection = Kujira.getInstance(network); } else if (chain === 'telos') { connection = Telos.getInstance(network); + } else if (chain === 'shibarium') { + connection = Shibarium.getInstance(network); } else { connection = undefined; } @@ -163,7 +169,7 @@ export type ConnectorUnion = | Plenty | XRPLCLOB | Curve - | KujiraCLOB + | KujiraCLOB; export type Connector = T extends Uniswapish ? Uniswapish @@ -183,7 +189,11 @@ export type Connector = T extends Uniswapish ? XRPLCLOB : T extends KujiraCLOB ? KujiraCLOB - : never; + : T extends Shibaswap + ? Shibaswap + : T extends Chewyswap + ? Chewyswap + : never; export async function getConnector( chain: string, @@ -237,6 +247,13 @@ export async function getConnector( connectorInstance = Tinyman.getInstance(network); } else if (connector === 'plenty') { connectorInstance = Plenty.getInstance(network); + } else if ( + ['shibarium', 'ethereum'].includes(chain) && + connector === 'shibaswap' + ) { + connectorInstance = Shibaswap.getInstance(chain, network); + } else if (chain === 'shibarium' && connector === 'chewyswap') { + connectorInstance = Chewyswap.getInstance(chain, network); } else { throw new Error('unsupported chain or connector'); } diff --git a/src/services/schema/chewyswap-schema.json b/src/services/schema/chewyswap-schema.json new file mode 100644 index 0000000000..9aedfa649f --- /dev/null +++ b/src/services/schema/chewyswap-schema.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "allowedSlippage": { + "type": "string" + }, + "gasLimitEstimate": { + "type": "integer" + }, + "ttl": { + "type": "integer" + }, + "contractAddresses": { + "type": "object", + "patternProperties": { + "^[\\w-]+$": { + "type": "object", + "patternProperties": { + "^\\w+$": { + "type": "object", + "properties": { + "routerAddress": { + "type": "string" + } + }, + "required": [ + "routerAddress" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "allowedSlippage", + "gasLimitEstimate", + "ttl", + "contractAddresses" + ] +} \ No newline at end of file diff --git a/src/services/schema/shibaswap-schema.json b/src/services/schema/shibaswap-schema.json new file mode 100644 index 0000000000..9aedfa649f --- /dev/null +++ b/src/services/schema/shibaswap-schema.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "allowedSlippage": { + "type": "string" + }, + "gasLimitEstimate": { + "type": "integer" + }, + "ttl": { + "type": "integer" + }, + "contractAddresses": { + "type": "object", + "patternProperties": { + "^[\\w-]+$": { + "type": "object", + "patternProperties": { + "^\\w+$": { + "type": "object", + "properties": { + "routerAddress": { + "type": "string" + } + }, + "required": [ + "routerAddress" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "allowedSlippage", + "gasLimitEstimate", + "ttl", + "contractAddresses" + ] +} \ No newline at end of file diff --git a/src/services/validators.ts b/src/services/validators.ts index 576c64e1ac..1bf5bf14f7 100644 --- a/src/services/validators.ts +++ b/src/services/validators.ts @@ -61,7 +61,7 @@ export const mkBranchingValidator = ( branchingKey: string, branchingCondition: (req: any, key: string) => boolean, validator1: Validator, - validator2: Validator + validator2: Validator, ): Validator => { return (req: any) => { let errors: Array = []; @@ -81,7 +81,7 @@ export const mkBranchingValidator = ( export const mkSelectingValidator = ( branchingKey: string, branchingCondition: (req: any, key: string) => string, - validators: { [id: string]: Validator } + validators: { [id: string]: Validator }, ): Validator => { return (req: any) => { let errors: Array = []; @@ -90,11 +90,11 @@ export const mkSelectingValidator = ( Object.keys(validators).includes(branchingCondition(req, branchingKey)) ) { errors = errors.concat( - validators[branchingCondition(req, branchingKey)](req) + validators[branchingCondition(req, branchingKey)](req), ); } else { errors.push( - `No validator exists for ${branchingCondition(req, branchingKey)}.` + `No validator exists for ${branchingCondition(req, branchingKey)}.`, ); } } else { @@ -108,7 +108,7 @@ export const mkValidator = ( key: string, errorMsg: string, condition: (x: any) => boolean, - optional: boolean = false + optional: boolean = false, ): Validator => { return (req: any) => { const errors: Array = []; @@ -127,12 +127,12 @@ export const mkValidator = ( }; export const mkRequestValidator = ( - validators: Array + validators: Array, ): RequestValidator => { return (req: any) => { let errors: Array = []; validators.forEach( - (validator: Validator) => (errors = errors.concat(validator(req))) + (validator: Validator) => (errors = errors.concat(validator(req))), ); throwIfErrorsExist(errors); }; @@ -164,7 +164,7 @@ export const isBase58 = (value: string): boolean => export const validateToken: Validator = mkValidator( 'token', invalidTokenError, - (val) => typeof val === 'string' + (val) => typeof val === 'string', ); // if amount exists, confirm that it is a string of a natural number @@ -172,11 +172,11 @@ export const validateAmount: Validator = mkValidator( 'amount', invalidAmountError, (val) => typeof val === 'string' && isNaturalNumberString(val), - true + true, ); export const validateTxHash: Validator = mkValidator( 'txHash', invalidTxHashError, - (val) => typeof val === 'string' + (val) => typeof val === 'string', ); diff --git a/src/services/wallet/wallet.validators.ts b/src/services/wallet/wallet.validators.ts index ac53a621c4..d721d448f4 100644 --- a/src/services/wallet/wallet.validators.ts +++ b/src/services/wallet/wallet.validators.ts @@ -118,6 +118,11 @@ export const validatePrivateKey: Validator = mkSelectingValidator( invalidCosmosPrivateKeyError, (val) => typeof val === 'string' && isCosmosPrivateKey(val), ), + shibarium: mkValidator( + 'privateKey', + invalidEthPrivateKeyError, + (val) => typeof val === 'string' && isEthPrivateKey(val), + ), polygon: mkValidator( 'privateKey', invalidEthPrivateKeyError, @@ -157,7 +162,7 @@ export const validatePrivateKey: Validator = mkSelectingValidator( ); export const invalidChainError: string = - 'chain must be "ethereum", "avalanche", "near", "harmony", "cosmos", "osmosis", "binance-smart-chain", or "kujira"'; + 'chain must be "ethereum", "avalanche", "near", "harmony", "cosmos", "osmosis", "binance-smart-chain", "shibarium" or "kujira"'; export const invalidNetworkError: string = 'expected a string for the network key'; @@ -189,7 +194,8 @@ export const validateChain: Validator = mkValidator( val === 'tezos' || val === 'xrpl' || val === 'kujira' || - val === 'telos'), + val === 'telos' || + val === 'shibarium'), ); export const validateNetwork: Validator = mkValidator( diff --git a/src/templates/chewyswap.yml b/src/templates/chewyswap.yml new file mode 100644 index 0000000000..566e9b2375 --- /dev/null +++ b/src/templates/chewyswap.yml @@ -0,0 +1,16 @@ +# how much the execution price is allowed to move unfavorably from the trade +# execution price. It uses a rational number for precision. +allowedSlippage: '1/100' + +# the maximum gas used to estimate cost of a traderjoe trade. +gasLimitEstimate: 300000 + +# how long a trade is valid in seconds. After time passes traderjoe will not +# perform the trade, but the gas will still be spent. +ttl: 300 + +contractAddresses: + shibarium: + mainnet: + routerAddress: '0x2875F2D86d83635A859029872e745581530cEec7' + diff --git a/src/templates/lists/shibarium_tokens_mainnet.json b/src/templates/lists/shibarium_tokens_mainnet.json new file mode 100644 index 0000000000..2a065a111a --- /dev/null +++ b/src/templates/lists/shibarium_tokens_mainnet.json @@ -0,0 +1,1062 @@ +{ + "name": "mainnet", + "tokens": [ + { + "decimals": 18, + "address": "0xa253fb19cea0d3cde270ab85d1ac9c309fbf8771", + "name": "FAT Token", + "symbol": "FAT", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x6189aed802e9b64530e8046adbfe4d19f73c445f", + "name": "Hoime Token", + "symbol": "HOIME", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc6e3ab305c3d5e17c43fd6125f75f0f066215c2a", + "name": "Casual Games", + "symbol": "game", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x66df911c3bcbbcb5f24aa9fceb2bc0d93d5b3935", + "name": "Samuri Shib", + "symbol": "SAMURI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x33ae26d96af0f6cc78d1a42e2308444ea150f9ec", + "name": "Shiba Ape Yacht Token", + "symbol": "SAYT", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x55ba2bcf312961d556e21e56277e8948d40494cc", + "name": "978X", + "symbol": "978X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1909bc9a0b6e983370cf3d67c558e4c8f32b9798", + "name": "980X", + "symbol": "980X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x166ae4ad9ddca5ce366d499ffb8c98fd7e761d3c", + "name": "986X", + "symbol": "986X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xad26b8d4472b39d1e0af53a2b5cf0508e21a2b3b", + "name": "973X", + "symbol": "973X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4556e1f3db44792bfec59ac2498c0689bef9394b", + "name": "Uranus", + "symbol": "URANUS", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xba9f1a6aa4086b9c7ee6568370e6ba9e0bc6a555", + "name": "GhostToken", + "symbol": "GTK", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xdd111cd510d3a424e5af498e90edc41b9db7feaf", + "name": "975X", + "symbol": "975X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2c81104f88f55f3cf620564bcf3d1f7e4084069d", + "name": "DogOld", + "symbol": "DOGO", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x5303c1bc8364c9702ff27a222cf82a91cb016bbf", + "name": "SHTest", + "symbol": "SHTEST", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x3a93275d7c55a3f079f49d893e947d5330a72eef", + "name": "TestContract", + "symbol": "TestSh", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0xada0fa1f9a4ea8513b3b607efd31792336c09507", + "name": "Unification", + "symbol": "FUND", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3d664bbab0b0ac3c4feb261dd8ff85dc64a012f5", + "name": "DogOld", + "symbol": "DOGO", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x158dc7dcb3252e8a096a161b14f323a5cf175e95", + "name": "SHTEST2", + "symbol": "SHTEST2", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1e9fe76c57b67b5c487e681e1bcba2230a6d4b96", + "name": "976X", + "symbol": "976X", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0xadb50b08d195c088f1f67855800d6522d6b3b50c", + "name": "Sharbi", + "symbol": "SHARBI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc9f74b89e48d187221d240cdef3254c8cc6897ca", + "name": "972X", + "symbol": "972X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xef99cd3e619c058658043f8775ed9077105d8581", + "name": "BAD IDEA AI", + "symbol": "BAD", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3313282478c5482220a3556ca92d0f341ecf3474", + "name": "WOOF SWAP BEST TEAM EVER", + "symbol": "Wbest", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1e628d0f43010d51c82851fac766b7be126813c8", + "name": "979X", + "symbol": "979X", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x0da5aae7f402f4afbbdd045fadcd447835983a91", + "name": "Sharbi", + "symbol": "SHARBI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2ba41273083fe970f4c564ac2b6254d5f2f50e18", + "name": "977X", + "symbol": "977X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x9f76c5f8cbdc91aa92ae1dd080c043a4e88a6e64", + "name": "974X", + "symbol": "974X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x17bc7d51251e37f526d81a8b0f240ff1dd5eb555", + "name": "To The Shib", + "symbol": "TTS", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x05446d46121ea0709581140612a1a4c49fc5ae86", + "name": "981X", + "symbol": "981X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4230c6209a4725af63bfc73ccbf99a22b9e85eb4", + "name": "982X", + "symbol": "982X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xa6a4a59ec17946bbdf58e837793a48935e3f0cf1", + "name": "Yeah Coin", + "symbol": "YEAH", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x31d2fa098b70ea688b6e97c09142af2ff39bbdb2", + "name": "985X", + "symbol": "985X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xde80496fde552ed677e0f8a8e62669273cc36ac5", + "name": "HERO", + "symbol": "Krypto", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3633e5488c2d683dd795e28f9fd943819515ca52", + "name": "984X", + "symbol": "984X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1e7c803b1094d0a7715ab933169e1ca31b4213a9", + "name": "JUST A MEME ", + "symbol": "JAM", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd87816d68175b844223afe43cfffcc6e988a89f2", + "name": "983X", + "symbol": "983X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x91fbb2503ac69702061f1ac6885759fc853e6eae", + "name": "K9 Finance DAO", + "symbol": "KNINE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xe40545f5093556f260c0f2390e19314b6bc93ee5", + "name": "Zen-The Inner Peace", + "symbol": "Zen", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1d1deb317850e1b017f49bb23a514d2bd4c5cb2f", + "name": "test33333", + "symbol": "test3", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb65e76f2287a820d21d65d9f184db18033843e2f", + "name": "SHIB SHARK", + "symbol": "S$S", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x9ee1fabe85a5a65c2b17fd17d430fbf72fa895af", + "name": "Financial and Educational Freedom ", + "symbol": "FEF", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xece898edcc0af91430603175f945d8de75291c70", + "name": "Sol Killer", + "symbol": "DAMN", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc76f4c819d820369fb2d7c1531ab3bb18e6fe8d8", + "name": "Shibarium Wrapped BONE", + "symbol": "BONE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc76f4c819d820369fb2d7c1531ab3bb18e6fe8d8", + "name": "Shibarium Wrapped BONE", + "symbol": "WBONE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x495eea66b0f8b636d441dc6a98d8f5c3d455c4c0", + "name": "SHIBA INU", + "symbol": "SHIB", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x65218a41fb92637254b4f8c97448d3df343a3064", + "name": "DOGE KILLER", + "symbol": "LEASH", + "chainId": 109 + }, + { + "decimals": 6, + "address": "0xf010f12dca0b96d2d6685bf4db3dbb4ad500b6ad", + "name": "USD Coin", + "symbol": "USDC", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x8ed7d143ef452316ab1123d28ab302dc3b80d3ce", + "name": "Wrapped Ether", + "symbol": "WETH", + "chainId": 109 + }, + { + "decimals": 8, + "address": "0xe984d89fb00d0b44e798a55dc41ea598b0b0899d", + "name": "Wrapped BTC", + "symbol": "WBTC", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xa5f49726c4f67fd2e8cb819c6091c7687cf4ea1f", + "name": "Dontbuy", + "symbol": "Dontbuy", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xee824089e12715c4072d5ec64f4e59e1f041f3db", + "name": "SPET", + "symbol": "SPET", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4dcdcd83f480230c58114649418af27d10d1c137", + "name": "Chad", + "symbol": "CHAD", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x97a81866bb5c68a14153fe37e2ff757fada1d8ff", + "name": "TREAT PEPE", + "symbol": "TREAT PEPE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xced59cf7d7219f21575b0717a611dba7525612eb", + "name": "FLORA", + "symbol": "FLR", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x33ca1d9305d5bb1cbeba0440c1b0fd5e1f8c81b9", + "name": "Bone Whale", + "symbol": "BONEWHALE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5a4810fe3cc3119667e308343391bd38e743b450", + "name": "ShibaSwap LP Token", + "symbol": "SSLP", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb196130282958155dc64debdaedeadf13ff9cdb5", + "name": "DOG•GO•TO•THE•MOON", + "symbol": "$DOG", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x6d6633597093856b360133ceaa7ed4f9e0c0ebe3", + "name": "DOG•GO•TO•THE•MOON", + "symbol": "DOG", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xa08a2b88e72446187259a9b85bc9e5455139667d", + "name": "unknown", + "symbol": "unknown", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x7e64bd4198a521416a7989fc34761ec90c41f4b6", + "name": "unknown", + "symbol": "unknown", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x0d5ea9051d32e176afeecfc253eb17e13333a9f4", + "name": "LIVES", + "symbol": "LVS", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xda4cda845a8c539b7fcb750e79458bfa3ec2c774", + "name": "Shibizens Punk", + "symbol": "PUNK", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x40f56856cda7d7f9254fca86503e260e79cdb0c7", + "name": "ESTABLISH", + "symbol": "EST.", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5f5b5731648250dd59b2f5de14aa9638418755bf", + "name": "ZAZA Chain", + "symbol": "ZaZa", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x0b4fd6288b6d32171cc515bffc9340026f56a358", + "name": "Pre-sale Killer", + "symbol": "PIKA", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd714294047a60c0af3a5e497b22c81e261b5fe6f", + "name": "Turbo", + "symbol": "TURBO", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4944b32adf7e96f7d54ed5abc4152856ce06540e", + "name": "MeanEyebrows", + "symbol": "BROW", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3c9b2b930ed1b6040f8539cceb35dd189f4733dd", + "name": "1 CENT DREAM", + "symbol": "CENT", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x06768790a96d80ee3acfddf35800294bc9bb4680", + "name": "Peipei", + "symbol": "PEIPEI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xefa5ff6827ab2f4d633f3fd67e9cc482d8796ef1", + "name": "Coyote ", + "symbol": "CYO", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x6be8230c1ebd725d74dae5a6b6577f917f64bd6b", + "name": "LUCIE SHIB", + "symbol": "LUCIE", + "chainId": 109 + }, + { + "decimals": 6, + "address": "0xab082b8ad96c7f47ed70ed971ce2116469954cfb", + "name": "Tether USD", + "symbol": "USDT", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x560d9e3c39798647d41e6f667c232d01643debb1", + "name": "988X", + "symbol": "988X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x46a7d94e6ba59e873beb3314671748cf2da84b3b", + "name": "WALK Token", + "symbol": "WALK", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x9a9cdfa4a78f0f54f312decb030ddfdbd21ad8c5", + "name": "995X", + "symbol": "995X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x38c47f03e0bbc88d7cf864414c64cc8b76e2df72", + "name": "998X", + "symbol": "998X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc1f0e746b5aaefbbe2e99ab08897766ae20f6236", + "name": "994X", + "symbol": "994X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x93ffe7b31d2e3cae91356b0206db3d338a48ec7e", + "name": "990X", + "symbol": "990X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1be62534f12976d24e5db536c79e5108578f6dea", + "name": "989X", + "symbol": "989X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x68abcf81ad1f36316883ac5dcf3ea16105fecc89", + "name": "991X", + "symbol": "991X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2ab554e73e74a6b7e9555bb33aa5c7a57bb17bf3", + "name": "993X", + "symbol": "993X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x04dd02ef0334906f01d387b741df81070127ac52", + "name": "987X", + "symbol": "987X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x38622ced4a2daea3345153b0a159f6c918bf8ccd", + "name": "996X", + "symbol": "996X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf0e348a0cbf1276e1676b23e05cf97a020b7eeb5", + "name": "992X", + "symbol": "992X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3645ab9dbb7628e688cf11a2b2356afd3b89fc52", + "name": "999X", + "symbol": "999X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x896a0487ea41e7aeb5c6d706ddd2830c7f7fd15c", + "name": "997X", + "symbol": "997X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3dab7ed18dbd51bc5ac79013163f1129cff5c62d", + "name": "SHIBANA", + "symbol": "SHIBANA", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf464b2a4b4f9d62e7ac26078ccbaa42d57b8c112", + "name": "Pomegranate", + "symbol": "Pomegranate", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb9f88b6f9d921d8be8df3f18732917b3a1ede0f1", + "name": "test111111", + "symbol": "test1", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xed916ccab104362159b787af525328b85ea42825", + "name": "AMC", + "symbol": "AMC", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3429153f568ef6e8e1a03c6cc0fa006023ce8b5a", + "name": "ERIKINU", + "symbol": "ERIK", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xab480e2cbd554db9f83f5ee593890abee14e924d", + "name": "989X", + "symbol": "989X", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2d628dcadfb82937d875c6fb7cb92b57842d147d", + "name": "Tapir", + "symbol": "Tapir", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x7b1a357a03800018e8ae3d6d91cde0d959a283b5", + "name": "KUKU", + "symbol": "KUKU", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x9228701bfaeb38496815be6d24504696ab587076", + "name": "SHIB WIF HAT", + "symbol": "SIT", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xa84209a15a53dff28b4c4bf1c042bef0decaf34c", + "name": "1Cent+", + "symbol": "1Cent+", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x93060bf9540541bc00f6d5f144ba3c0c9ed871f5", + "name": "Ryoshis Katana", + "symbol": "Ryka", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x911c1b1abe06d95413d8411cc02743853c7805b2", + "name": "Penguin", + "symbol": "PNG", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf702dbb2073ea1f329e05e48dd3a93582442dc2f", + "name": "X1000", + "symbol": "X1000", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0xfd722863bc1d8e771f9507a4ccef540416864567", + "name": "Beaf Warket", + "symbol": "BEAF", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x94f8c01d235aee29e772fb2a370bf3d14d488870", + "name": "Tiger", + "symbol": "Tiger", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4fc2281639f9441f0fcb8b6d922038277c4408c1", + "name": "BURY", + "symbol": "BURY", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2761723006d3eb0d90b19b75654dbe543dcd974f", + "name": "CHEWY", + "symbol": "ChewySwap", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xe5dbb0aa123057fadd46cd69c21452134a939dab", + "name": "MarSwap LPs", + "symbol": "Mars-LP", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc7055fa6a9ed9ff9695f79fc19787246e4e5e3f9", + "name": "SHIBA 7.0", + "symbol": "SHIBA7.0", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd2e9e1a41e97912f3f966a3553e4c9bb6861f0a6", + "name": "Bark", + "symbol": "Bark", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xdc1f323acd2ad9358b892b5dad99254a4e7732cc", + "name": "CLOWN TOKEN BY SATOSHI NAKAMOTO", + "symbol": "CLOWN HAHAHA", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf32dd87d69070377c909680e0ce45f6eda9066df", + "name": "Mickey Boat", + "symbol": "MICKEY", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x8cc82045e761329fa13c9b0a0a31d76615fec109", + "name": "CorruptFun", + "symbol": "CFUN", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x2bb0469cc500154a6f2f91af46e739a0cc21bf00", + "name": "Ralph", + "symbol": "$RALPH", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5212b42ef96a47af93f3a6c801227b650edeb12f", + "name": "Sideshow 404", + "symbol": "SKULLZ", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd73fcda60e66492adbda953d4237082e619b582e", + "name": "BONE1000$", + "symbol": "BONE1000$", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x3a71e24aec6f1004780450db9bfaf6dcb72965fb", + "name": "Sharbi", + "symbol": "SHARBI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x46a9223f5307bf93acf52c66a0c2ad989b75a163", + "name": "StrongTeam", + "symbol": "ST", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb7fa48daadb6401349a08eff22cb610f801bc45e", + "name": "The 8 Show", + "symbol": "SHOW", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x99cddd5a52dd4122b6a75afc0d4dae6355df5d56", + "name": "Shibarium of PEPE", + "symbol": "PEPE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x6df1f0250c14131462143166313845a32b83d882", + "name": "Thesirion", + "symbol": "TSO", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3751d1a5e0cddd08bf91a8e115e44ba5359e52b1", + "name": "Ryoshi's Coin", + "symbol": "RYOSHI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x0726959d22361b79e4d50a5d157b044a83ec870d", + "name": "Dai Stablecoin", + "symbol": "DAI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5b16893c38b517d24b3ed2fa93313fa595867c95", + "name": "Mojo", + "symbol": "MOJO", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd0cc6627fb2c2d2f4293abd5e11889d687825f54", + "name": "1000X", + "symbol": "1000X", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0xee70777c4649b7937a86343f5a54718892572859", + "name": "Shytoshi's Coin", + "symbol": "SHYTOSHI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xd0daa7b6ff1b40d3cc6f0b2cf7e85cb993d1c834", + "name": "WoofSwap", + "symbol": "WOOF", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x165e8b1faeff503963f113dc81afc49cea2baba9", + "name": "Shups Token", + "symbol": "SHUPS", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x0f21a2a674d495a818394c53db0e9e9e725290ca", + "name": "Start", + "symbol": "START", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb27c21ba040f1a6d4f955799d877c22a68a4448f", + "name": "Bone One Hundred", + "symbol": "HUNDRED", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x4ca05e9066d9bcb9a3bf4ecf7507034a650a7e3e", + "name": "All Day", + "symbol": "Real G's", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x7ba1dd676e8407b42c3f2721e9d27fa9274f8135", + "name": "4:20", + "symbol": "420", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3347743c7db64c3b11856947d743789ee8d5a8d2", + "name": "Meme Bank Coin", + "symbol": "ABC", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5373220817432485a9e4fc7ab6c985f0a9a8c5a1", + "name": "Trac", + "symbol": "Trac", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf75d777678910f4aa87097c1597d71d635a796c3", + "name": "CLOWN", + "symbol": "CLOWN", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x7d8f6f29c515ba3db465d681bd44885f3dd29b39", + "name": "test333333", + "symbol": "test3", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x706c1f9f9215977d69e1eb1bf811d193f7d5bb7b", + "name": "Ryoshis Guard ", + "symbol": "Anubis ", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xe063dab453125460a158307b748692d9905a19d3", + "name": "69", + "symbol": "69", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x7e0849246dbc88bf455a5496bd3ab61d16730ba3", + "name": "RSIC•GENESIS•RUNE", + "symbol": "RUNECOIN", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc31fd4ad97824d0e6601ff3ea319d1c646451958", + "name": " Ordinals", + "symbol": "ORDI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x6b34034fb513221ae064d81e442d5f4a86e089a9", + "name": "SATOSHI•NAKAMOTO", + "symbol": " SATOSHI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x18a1ba23d5ec9d13085a0b53058c22d9892ca426", + "name": "Bakchodi Token", + "symbol": "BAKCHODI", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xc3704797a4d0bcd8173482b161fc36caa75ca416", + "name": "D3", + "symbol": "D3", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x34bb08ded025196b068dcb3c79f0612f113d70ba", + "name": "erc5011", + "symbol": "erc50", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3e07514349f5837fc6ae7a996b4d8e4d79a5f487", + "name": "Shibarium of Meme", + "symbol": "SOME", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x27851e482690d5dbcfb312f579467b51e74480e3", + "name": "TRUMP", + "symbol": "TRUMP", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xb9ae1d4e474cc154f48e5c2f0559eb3a78ad1f09", + "name": "Shibinals", + "symbol": "SHIBS", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x65feca76c0ab1f9af14de4e98d41fbd4d53cc412", + "name": "Shibarium Gems Alert", + "symbol": "SGA", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x5fb59e18f8ed0e9f867e7d9d12356c05dda8fc79", + "name": "StrongTeam", + "symbol": "ST", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x1fa31c850e68dab3950b728bf1d7a43248dd1283", + "name": "BULL", + "symbol": "BULL", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xf90b777203b2f53fe50592d36c5d4fcd62b493e4", + "name": "Blue Nile", + "symbol": "BLUE ", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0x8f40329b95871dd721cf80795cc2ceee09998546", + "name": "PePe", + "symbol": "PEPE", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0x3b025cb2764a363283761210ee1a2e6be0d5f431", + "name": "PESO", + "symbol": "PESO", + "chainId": 109 + }, + { + "decimals": 18, + "address": "0xfe10f4147567033ca377343b6ed8d4d4ca03bca6", + "name": "CATA", + "symbol": "CATA", + "chainId": 109 + }, + { + "decimals": 9, + "address": "0xcdbe27acb4579b1e2ef2f4efc4c4a6f7e63933b2", + "name": "Brick by Brick", + "symbol": "BRICK", + "chainId": 109 + } + ] +} \ No newline at end of file diff --git a/src/templates/lists/shibarium_tokens_puppynet.json b/src/templates/lists/shibarium_tokens_puppynet.json new file mode 100644 index 0000000000..44d8eea451 --- /dev/null +++ b/src/templates/lists/shibarium_tokens_puppynet.json @@ -0,0 +1,201 @@ +{ + "name": "puppynet", + "tokens": [ + { + "decimals": 18, + "name": "App Shib Club", + "symbol": "COIN", + "address": "0xedb3d5532090d068e540ac09f361ec8762d6e4ec", + "chainId": 157 + }, + { + "decimals": 18, + "name": "K9 Staked BONE", + "symbol": "knBONE", + "address": "0xc7e29ea23e3dab1e1bc891674dcf631cb8569f00", + "chainId": 157 + }, + { + "decimals": 18, + "name": "K9 Finance DAO", + "symbol": "KNINE", + "address": "0x19d24464203362a60d970df754301407041a7afd", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token 1", + "symbol": "T1", + "address": "0x94c0c36fa2befb55d939f36cc827f40073b82355", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token 2 (2)", + "symbol": "T2", + "address": "0xe5233ca22b083ed91fd75437f160a26dd9764d6d", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Secret BONUS v2", + "symbol": "BONUS", + "address": "0xf50e32e480f8488043d0b7f08e349c284b3f48e5", + "chainId": 157 + }, + { + "decimals": 12, + "name": "Token 12d", + "symbol": "Token 12d", + "address": "0xd125dcfda3aae1ccfd4e149a94102a676c45896e", + "chainId": 157 + }, + { + "decimals": 6, + "name": "Token 6d", + "symbol": "Token 6d", + "address": "0xf4589d84f1b1b3b1375f5efd1be7b79b13d205cf", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token 3", + "symbol": "T3", + "address": "0x9aa70bce440e15d642147e1eaa6f83056d0e8c0e", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token4", + "symbol": "T4", + "address": "0x86873e69c5dbe4a659741e98a2c9bdfa6b5fbf52", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Lion", + "symbol": "Lion", + "address": "0x729e6350714777b3148ef71701db0dded3a869ba", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Elephant", + "symbol": "Elephant", + "address": "0x805d4ba77a629dbd3014c4b5d2afa2307f393a0f", + "chainId": 157 + }, + { + "decimals": 18, + "name": "CLOCK", + "symbol": "CLOCK", + "address": "0x93f45d9d03d85567ece5fa0dbe606db854a1f342", + "chainId": 157 + }, + { + "decimals": 18, + "name": "ILoveShiba", + "symbol": "ILS", + "address": "0x24ed1864f3778d33db0f0cde6f08b7321569d0b1", + "chainId": 157 + }, + { + "decimals": 18, + "name": "DAMN", + "symbol": "DAMN", + "address": "0xbed5d6474821ed685fed03ae62d93b00eaeb6ae4", + "chainId": 157 + }, + { + "decimals": 18, + "name": "WS", + "symbol": "WS", + "address": "0xdf51baf56d8b15cf43a4d8fcf5b0272ce3759f62", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Test", + "symbol": "TEST", + "address": "0x921de6d2d9c3a023e76ac598f7247764cfc87f8c", + "chainId": 157 + }, + { + "decimals": 9, + "name": "BabyFOMO", + "symbol": "$BFOMO", + "address": "0x418feeaeb456dc46ad617bf1146b2972094f67e7", + "chainId": 157 + }, + { + "decimals": 6, + "name": "USD Coin", + "symbol": "USDC", + "address": "0x63e22542204da9978218fbb3c10e1c0f6d1dc2a7", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token", + "symbol": "Token", + "address": "0x7d134300fa3178cdee12485e95d1816806d13286", + "chainId": 157 + }, + { + "decimals": 18, + "name": "MyToken", + "symbol": "MTK", + "address": "0x47e92e226af370502f180f9c6fd5fea4ff0b7081", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Wrapped Ether", + "symbol": "WETH", + "address": "0x0c477ae2e8e5ce1666468e44b066542fa46f9f72", + "chainId": 157 + }, + { + "decimals": 18, + "name": "SHIBA INU", + "symbol": "SHIB", + "address": "0xac720702df63fa92416b3deb24dc4a1854f73330", + "chainId": 157 + }, + { + "decimals": 6, + "name": "Maker DAO", + "symbol": "DAI", + "address": "0x6e1c21a5263bc6be0f193ea76e4dd57769484d83", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token pool - 2", + "symbol": "Token2", + "address": "0xef1079a16cefabfbaa21f9a3cb72daa4215e78f9", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Token pool - 1", + "symbol": "Token1", + "address": "0xf0a89fb40c75501f2d4bc4b3a35d9b521d117416", + "chainId": 157 + }, + { + "decimals": 6, + "name": "Tether USD", + "symbol": "USDT", + "address": "0x236a6f60b554813486d84d581747217d77af05ff", + "chainId": 157 + }, + { + "decimals": 18, + "name": "Shibarium Wrapped BONE", + "symbol": "WBONE", + "address": "0x41c3f37587ebcd46c0f85ef43e38bcfe1e70ab56", + "chainId": 157 + } + ] +} \ No newline at end of file diff --git a/src/templates/root.yml b/src/templates/root.yml index f62e5c2790..6557ddd3f6 100644 --- a/src/templates/root.yml +++ b/src/templates/root.yml @@ -139,3 +139,15 @@ configurations: $namespace telos: configurationPath: telos.yml schemaPath: ethereum-schema.json + + $namespace shibarium: + configurationPath: shibarium.yml + schemaPath: ethereum-schema.json + + $namespace shibaswap: + configurationPath: shibaswap.yml + schemaPath: shibaswap-schema.json + + $namespace chewyswap: + configurationPath: chewyswap.yml + schemaPath: chewyswap-schema.json \ No newline at end of file diff --git a/src/templates/shibarium.yml b/src/templates/shibarium.yml new file mode 100644 index 0000000000..b1ae208cf7 --- /dev/null +++ b/src/templates/shibarium.yml @@ -0,0 +1,15 @@ +networks: + mainnet: + chainID: 109 + nodeURL: https://www.shibrpc.com + tokenListType: FILE + tokenListSource: conf/lists/shibarium_tokens_mainnet.json + nativeCurrencySymbol: BONE + puppynet: + chainID: 157 + nodeURL: https://puppynet.shibrpc.com + tokenListType: FILE + tokenListSource: conf/lists/shibarium_tokens_puppynet.json + nativeCurrencySymbol: BONE +manualGasPrice: 1 +gasLimitTransaction: 300000 diff --git a/src/templates/shibaswap.yml b/src/templates/shibaswap.yml new file mode 100644 index 0000000000..95a1ec4127 --- /dev/null +++ b/src/templates/shibaswap.yml @@ -0,0 +1,22 @@ +# how much the execution price is allowed to move unfavorably from the trade +# execution price. It uses a rational number for precision. +allowedSlippage: '5/100' + +# the maximum gas used to estimate cost of a traderjoe trade. +gasLimitEstimate: 300000 + +# how long a trade is valid in seconds. After time passes traderjoe will not +# perform the trade, but the gas will still be spent. +ttl: 300 + +contractAddresses: + ethereum: + mainnet: + routerAddress: '0x03f7724180AA6b939894B5Ca4314783B0b36b329' + + shibarium: + mainnet: + routerAddress: '0xEF83bbB63E8A7442E3a4a5d28d9bBf32D7c813c8' + puppynet: + routerAddress: '0x48717E3f404031B00ECA7A69E3918f541c496E0d' + diff --git a/yarn.lock b/yarn.lock index 92e05d55b2..1bd280aa76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -729,6 +729,18 @@ bignumber.js "9.1.1" sha.js "^2.4.11" +"@chewyswap/swap-sdk@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chewyswap/swap-sdk/-/swap-sdk-1.0.1.tgz#4ad3e772f465fe290f47241ff8d74a70aa100ef0" + integrity sha512-ru/mG43bXF9f0MEaVtkqNOe6E62Cj7/0+EZlwNf4fJXzDGnLihCMz2t2PLNgjMxlg+k9UnXhHjDtA6pZFY7eOA== + dependencies: + big.js "^5.2.2" + decimal.js-light "^2.5.0" + jsbi "^3.1.4" + tiny-invariant "^1.1.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1525,137 +1537,137 @@ "@ethersproject-xdc/abi@file:vendor/@ethersproject-xdc/abi": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9457f91c-656c-45f8-accd-88c60c421b74-1722024267831/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-50c7325b-2be8-4569-9532-974ecd1ffb1a-1730896356325/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/abstract-provider@file:vendor/@ethersproject-xdc/abstract-provider": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-869e3b8a-9f27-4025-81b7-75f515723076-1722024267829/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-ba191d26-8897-4ef3-9d2d-fe68ddaabb21-1730896356324/node_modules/@ethersproject-xdc/web" "@ethersproject-xdc/abstract-signer@file:vendor/@ethersproject-xdc/abstract-signer": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-b247168a-39ca-4f20-9123-8ddcaf991bbd-1722024267829/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-b247168a-39ca-4f20-9123-8ddcaf991bbd-1722024267829/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-b247168a-39ca-4f20-9123-8ddcaf991bbd-1722024267829/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-b247168a-39ca-4f20-9123-8ddcaf991bbd-1722024267829/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-b247168a-39ca-4f20-9123-8ddcaf991bbd-1722024267829/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/abstract-provider" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-46aa1100-81da-44f5-be79-35b4c8cb6eb1-1730896356323/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-46aa1100-81da-44f5-be79-35b4c8cb6eb1-1730896356323/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-46aa1100-81da-44f5-be79-35b4c8cb6eb1-1730896356323/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-46aa1100-81da-44f5-be79-35b4c8cb6eb1-1730896356323/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-46aa1100-81da-44f5-be79-35b4c8cb6eb1-1730896356323/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/address@file:vendor/@ethersproject-xdc/address": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-3d35392c-46a2-4095-9578-b1c662140208-1722024267830/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-3d35392c-46a2-4095-9578-b1c662140208-1722024267830/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-3d35392c-46a2-4095-9578-b1c662140208-1722024267830/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-3d35392c-46a2-4095-9578-b1c662140208-1722024267830/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/rlp" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-3d35392c-46a2-4095-9578-b1c662140208-1722024267830/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-28ac789f-a5f9-4c11-89e6-352279765833-1730896356324/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-28ac789f-a5f9-4c11-89e6-352279765833-1730896356324/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-28ac789f-a5f9-4c11-89e6-352279765833-1730896356324/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-28ac789f-a5f9-4c11-89e6-352279765833-1730896356324/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/rlp" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-28ac789f-a5f9-4c11-89e6-352279765833-1730896356324/node_modules/@ethersproject-xdc/rlp" "@ethersproject-xdc/base64@file:vendor/@ethersproject-xdc/base64": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-1f97f3ce-07a3-4341-8125-1028bb4c9a25-1722024267830/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-35a02a13-7723-4d4a-9265-8700a48a9890-1730896356324/node_modules/@ethersproject-xdc/bytes" "@ethersproject-xdc/basex@file:vendor/@ethersproject-xdc/basex": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-45845583-7ce8-42a3-9e84-1bfa1ac5f1f5-1722024267830/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-45845583-7ce8-42a3-9e84-1bfa1ac5f1f5-1722024267830/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-9455bba6-5685-4895-b56e-6de591cbe54b-1730896356328/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-9455bba6-5685-4895-b56e-6de591cbe54b-1730896356328/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/bignumber@file:vendor/@ethersproject-xdc/bignumber": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-057b377e-1191-49ee-bec7-53e44f5b62f4-1722024267832/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-057b377e-1191-49ee-bec7-53e44f5b62f4-1722024267832/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-0d31fc54-c4d6-43f1-a22a-d971faa6f8b7-1730896356326/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-0d31fc54-c4d6-43f1-a22a-d971faa6f8b7-1730896356326/node_modules/@ethersproject-xdc/logger" bn.js "^5.2.1" "@ethersproject-xdc/bytes@file:vendor/@ethersproject-xdc/bytes": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-681be9a2-4233-4320-b482-75e11e9eff3f-1722024267830/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-8f3abeaa-fc0d-42ab-8d70-d4067a5566e0-1730896356326/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/constants@file:vendor/@ethersproject-xdc/constants": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-f5106590-3574-4f86-ad0a-55d46c09651f-1722024267832/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-df1a11ae-e1f1-4bdb-832a-1bd184bf86fc-1730896356325/node_modules/@ethersproject-xdc/bignumber" "@ethersproject-xdc/contracts@file:vendor/@ethersproject-xdc/contracts": version "5.6.0" dependencies: - "@ethersproject-xdc/abi" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-9b838c25-c070-4c90-bf8e-814c0c2eb6f1-1722024267831/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abi" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-edd10c01-cb11-4607-9bb9-6fa941705a86-1730896356326/node_modules/@ethersproject-xdc/transactions" "@ethersproject-xdc/hash@file:vendor/@ethersproject-xdc/hash": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-3c78b44e-e513-492f-9e82-96023e35fdec-1722024267832/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-74f309c1-d4fd-4019-a042-2096f7125965-1730896356328/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/hdnode@file:vendor/@ethersproject-xdc/hdnode": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/basex" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/sha2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19b6a6e2-2ef5-49fd-a61a-419287f12f66-1722024267833/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/basex" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/sha2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-54c67069-ad87-4e14-9df4-002ec14c4582-1730896356335/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/json-wallets@file:vendor/@ethersproject-xdc/json-wallets": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hdnode" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-b20d9fb8-9937-41d7-bf47-41001c4b2c7e-1722024267834/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hdnode" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-85a9426b-ff9e-4767-9a2e-02391a5bb30f-1730896356327/node_modules/@ethersproject-xdc/transactions" aes-js "3.0.0" scrypt-js "3.0.1" "@ethersproject-xdc/keccak256@file:vendor/@ethersproject-xdc/keccak256": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-4e2af197-21d5-4594-b07a-f8644a17bf38-1722024267833/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-4832a9da-d286-44bd-ac8c-73514495142b-1730896356329/node_modules/@ethersproject-xdc/bytes" js-sha3 "0.8.0" "@ethersproject-xdc/logger@file:vendor/@ethersproject-xdc/logger": @@ -1664,67 +1676,67 @@ "@ethersproject-xdc/networks@file:vendor/@ethersproject-xdc/networks": version "5.7.1" dependencies: - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-51e3db8f-9650-42c0-beaa-c433c9beb6de-1722024267833/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-99a6ca01-0d2a-465f-8cd7-4ec02a35d43b-1730896356329/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/pbkdf2@file:vendor/@ethersproject-xdc/pbkdf2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-555dab01-7c3f-4991-bebf-af199d9370d0-1722024267833/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/sha2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-555dab01-7c3f-4991-bebf-af199d9370d0-1722024267833/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-79a1a00b-bf6f-4506-a64f-c6818e5a3791-1730896356329/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/sha2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-79a1a00b-bf6f-4506-a64f-c6818e5a3791-1730896356329/node_modules/@ethersproject-xdc/sha2" "@ethersproject-xdc/properties@file:vendor/@ethersproject-xdc/properties": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-a34c3ceb-2053-4b5d-b0c3-71ec27218c09-1722024267834/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-03348f13-dc69-45cb-b94f-862bf3f63138-1730896356329/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/providers@file:vendor/@ethersproject-xdc/providers": version "5.6.2" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/basex" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-206ef461-6233-4a5e-8f1c-1875a725e5b5-1722024267840/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/abstract-provider" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/basex" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-8135e1bc-f31b-4bcd-a84c-b8ded815a4a7-1730896356332/node_modules/@ethersproject-xdc/web" bech32 "1.1.4" ws "7.4.6" "@ethersproject-xdc/random@file:vendor/@ethersproject-xdc/random": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-050a2df2-acde-4040-a1f1-95b7a4f27bfe-1722024267834/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-050a2df2-acde-4040-a1f1-95b7a4f27bfe-1722024267834/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-ccb3dec3-d796-42ae-ac1d-974e0b1e4542-1730896356329/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-ccb3dec3-d796-42ae-ac1d-974e0b1e4542-1730896356329/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/rlp@file:vendor/@ethersproject-xdc/rlp": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-4e09738b-93a1-4623-b6f5-c451296c6fe6-1722024267838/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-4e09738b-93a1-4623-b6f5-c451296c6fe6-1722024267838/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-1491ed86-0c20-4a24-9af0-d89afef8b9ba-1730896356335/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-1491ed86-0c20-4a24-9af0-d89afef8b9ba-1730896356335/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/sha2@file:vendor/@ethersproject-xdc/sha2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-1c6142e3-63c9-4ebc-afd0-4aff2c45ea47-1722024267835/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-1c6142e3-63c9-4ebc-afd0-4aff2c45ea47-1722024267835/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-19dd36fb-3903-4136-bfcf-cc65041757c4-1730896356333/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-19dd36fb-3903-4136-bfcf-cc65041757c4-1730896356333/node_modules/@ethersproject-xdc/logger" hash.js "1.1.7" "@ethersproject-xdc/signing-key@file:vendor/@ethersproject-xdc/signing-key": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-ccfde916-890d-4f26-b523-0131077fad6c-1722024267834/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-ccfde916-890d-4f26-b523-0131077fad6c-1722024267834/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-ccfde916-890d-4f26-b523-0131077fad6c-1722024267834/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-7604e098-c06e-4c44-ab93-b205d6f284ad-1730896356330/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-7604e098-c06e-4c44-ab93-b205d6f284ad-1730896356330/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-7604e098-c06e-4c44-ab93-b205d6f284ad-1730896356330/node_modules/@ethersproject-xdc/properties" bn.js "^5.2.1" elliptic "6.5.4" hash.js "1.1.7" @@ -1732,76 +1744,76 @@ "@ethersproject-xdc/solidity@file:vendor/@ethersproject-xdc/solidity": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/sha2" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-5bb6c2fd-fae3-480b-b04e-ad1768992c25-1722024267839/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/sha2" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-4f501adf-a909-40da-884f-f082cb1f592d-1730896356333/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/strings@file:vendor/@ethersproject-xdc/strings": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-731ed324-ce77-4d19-b903-ae94ab07696c-1722024267835/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-731ed324-ce77-4d19-b903-ae94ab07696c-1722024267835/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-731ed324-ce77-4d19-b903-ae94ab07696c-1722024267835/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-cd60ca5b-2323-44c5-aa3f-440b901fffa1-1730896356334/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-cd60ca5b-2323-44c5-aa3f-440b901fffa1-1730896356334/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-cd60ca5b-2323-44c5-aa3f-440b901fffa1-1730896356334/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/transactions@file:vendor/@ethersproject-xdc/transactions": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/rlp" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/signing-key" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-a9eb8415-944e-4cd8-b37d-f6469eb5a577-1722024267836/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/rlp" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/signing-key" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-f203c259-512b-4c4a-833c-02c9ce26cdcc-1730896356334/node_modules/@ethersproject-xdc/signing-key" "@ethersproject-xdc/units@file:vendor/@ethersproject-xdc/units": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-ffed6bd4-009f-4521-ba08-d3308a3ae74b-1722024267842/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-ffed6bd4-009f-4521-ba08-d3308a3ae74b-1722024267842/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-ffed6bd4-009f-4521-ba08-d3308a3ae74b-1722024267842/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-beee6625-03ba-4147-b12d-8b1d5e942938-1730896356335/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-beee6625-03ba-4147-b12d-8b1d5e942938-1730896356335/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-beee6625-03ba-4147-b12d-8b1d5e942938-1730896356335/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/wallet@file:vendor/@ethersproject-xdc/wallet": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/signing-key" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a1070b7b-190d-411e-9d49-dc156e065b9f-1722024267843/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-provider" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/signing-key" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58f98678-9707-428a-b0dd-ca4c2be3057a-1730896356336/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/web@file:vendor/@ethersproject-xdc/web": version "5.7.1" dependencies: - "@ethersproject-xdc/base64" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-2e25c629-58ed-4341-a938-d9d3da54a6ba-1722024267844/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-2e25c629-58ed-4341-a938-d9d3da54a6ba-1722024267844/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-2e25c629-58ed-4341-a938-d9d3da54a6ba-1722024267844/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-2e25c629-58ed-4341-a938-d9d3da54a6ba-1722024267844/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-2e25c629-58ed-4341-a938-d9d3da54a6ba-1722024267844/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/base64" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-466a9c54-9de0-4c51-9d6a-38d7a88b147e-1730896356336/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-466a9c54-9de0-4c51-9d6a-38d7a88b147e-1730896356336/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-466a9c54-9de0-4c51-9d6a-38d7a88b147e-1730896356336/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-466a9c54-9de0-4c51-9d6a-38d7a88b147e-1730896356336/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-466a9c54-9de0-4c51-9d6a-38d7a88b147e-1730896356336/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/wordlists@file:vendor/@ethersproject-xdc/wordlists": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-b87ba8fd-6587-4636-9f68-c0efe680928e-1722024267844/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-b87ba8fd-6587-4636-9f68-c0efe680928e-1722024267844/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-b87ba8fd-6587-4636-9f68-c0efe680928e-1722024267844/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-b87ba8fd-6587-4636-9f68-c0efe680928e-1722024267844/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-b87ba8fd-6587-4636-9f68-c0efe680928e-1722024267844/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-60b4990a-ec9c-4aec-9e38-0ba00f2a6c88-1730896356335/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-60b4990a-ec9c-4aec-9e38-0ba00f2a6c88-1730896356335/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-60b4990a-ec9c-4aec-9e38-0ba00f2a6c88-1730896356335/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-60b4990a-ec9c-4aec-9e38-0ba00f2a6c88-1730896356335/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-60b4990a-ec9c-4aec-9e38-0ba00f2a6c88-1730896356335/node_modules/@ethersproject-xdc/strings" "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -3756,6 +3768,19 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@shibaswap/sdk@^1.1.18": + version "1.1.18" + resolved "https://registry.yarnpkg.com/@shibaswap/sdk/-/sdk-1.1.18.tgz#1285bf621777f98efc29655107f3ea9fb6b19273" + integrity sha512-hMRRcnGam4ddl6LLv7kYi+CjOEVJtM9FNIS5L6MPBS0BRkc/FilmvLKCLSiRgnF2irwU7JUBXWRyqGmjSbG3ug== + dependencies: + "@uniswap/v2-core" "^1.0.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + jsbi "^3.1.1" + tiny-invariant "^1.1.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -8352,36 +8377,36 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: "ethers-xdc@file:./vendor/ethers-xdc": version "5.7.2" dependencies: - "@ethersproject-xdc/abi" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/basex" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/contracts" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/contracts" - "@ethersproject-xdc/hash" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/pbkdf2" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/providers" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/providers" - "@ethersproject-xdc/random" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/solidity" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/solidity" - "@ethersproject-xdc/strings" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/units" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/units" - "@ethersproject-xdc/wallet" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/wallet" - "@ethersproject-xdc/web" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/web" - "@ethersproject-xdc/wordlists" "file:../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-c9e1019b-a8b6-46a4-8ae5-48f9882328ad-1722024267819/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abi" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/basex" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/contracts" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/contracts" + "@ethersproject-xdc/hash" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/pbkdf2" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/providers" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/providers" + "@ethersproject-xdc/random" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/solidity" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/solidity" + "@ethersproject-xdc/strings" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/units" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/units" + "@ethersproject-xdc/wallet" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/wallet" + "@ethersproject-xdc/web" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/wordlists" "file:../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-3167488e-4b3b-4846-9cfb-da4b5ad887f2-1730896356311/node_modules/@ethersproject-xdc/wordlists" ethers@4.0.0-beta.3: version "4.0.0-beta.3"