From 99dc6ca44750f2a71631325d5b5e0ee8149f6a58 Mon Sep 17 00:00:00 2001 From: Jay Daraniya <40439741+JAYDARANIYA@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:51:13 +0530 Subject: [PATCH 1/3] feat: Add Arbitrum Sepolia market to marketsConfig --- src/ui-config/marketsConfig.tsx | 20 ++++++++++++++++++++ src/ui-config/networksConfig.ts | 13 +++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/ui-config/marketsConfig.tsx b/src/ui-config/marketsConfig.tsx index e8fb4653..f0c59d22 100644 --- a/src/ui-config/marketsConfig.tsx +++ b/src/ui-config/marketsConfig.tsx @@ -53,6 +53,7 @@ export type MarketDataType = { export enum CustomMarket { etherlink_testnet = 'etherlink_testnet', + arb_sepolia = 'arb_sepolia', } export const marketsData: { @@ -77,4 +78,23 @@ export const marketsData: { }, faucetUrl: 'https://faucet.plend.finance/receiveFaucetTokens', }, + [CustomMarket.arb_sepolia]: { + marketTitle: 'Arbitrum Sepolia', + chainId: 421614, //ChainId.etherlink_testnet, + v3: true, + enabledFeatures: { + liquiditySwap: false, + collateralRepay: false, + faucet: false, + }, + addresses: { + LENDING_POOL_ADDRESS_PROVIDER: '0xfAF21dcB6185571128306B2ffAdef9600cF6E922', + LENDING_POOL: '0xa8b69d6fE496554d0292D058aDd7DC858CA95E5F', + WALLET_BALANCE_PROVIDER: '0xBAF39030C44Ef4E959aFb47F1B7820F562F4CC94', + UI_POOL_DATA_PROVIDER: '0x9C937bf9377Cf90Eea5Dbe3aA2F101E286958509', + UI_INCENTIVE_DATA_PROVIDER: '0xeFcDF7327c897812f2e09442a579Db942F2486ba', + WETH_GATEWAY: '0xC947242338Eb580E2F8212586755F36D20449153', + }, + faucetUrl: 'https://faucet.plend.finance/receiveFaucetTokens', + }, } as const; diff --git a/src/ui-config/networksConfig.ts b/src/ui-config/networksConfig.ts index 5f4d1406..8b06716b 100644 --- a/src/ui-config/networksConfig.ts +++ b/src/ui-config/networksConfig.ts @@ -51,6 +51,7 @@ export type BaseNetworkConfig = Omit; export enum ChainId { mainnet = 1, etherlink_testnet = 128123, + arb_sepolia = 421614, } export const ChainIdToNetwork: Record = { @@ -94,4 +95,16 @@ export const networkConfigs: Record = { isTestnet: true, networkLogoPath: '/icons/networks/etherlink.svg', }, + [ChainId.arb_sepolia]: { + name: 'Arbitrum Sepolia', + publicJsonRPCUrl: ['https://arb-sepolia.g.alchemy.com/v2/yCPtGQdadgolaqzEQN5WJUt50kGyM939'], + publicJsonRPCWSUrl: 'wss://arb-sepolia.g.alchemy.com/v2/yCPtGQdadgolaqzEQN5WJUt50kGyM939', + baseUniswapAdapter: '0x0', + baseAssetSymbol: 'ETH', + wrappedBaseAssetSymbol: 'WETH', + baseAssetDecimals: 18, + explorerLink: 'https://sepolia.arbiscan.io', + isTestnet: true, + networkLogoPath: '/icons/networks/etherlink.svg', + }, } as const; From cc8a471369d2194c4e52abe7e366cfa66c1fd68a Mon Sep 17 00:00:00 2001 From: Jay Daraniya <40439741+JAYDARANIYA@users.noreply.github.com> Date: Wed, 5 Jun 2024 15:30:50 +0530 Subject: [PATCH 2/3] feat: Add Polygon Amoy market to marketsConfig --- src/ui-config/marketsConfig.tsx | 20 ++++++++++++++++++++ src/ui-config/networksConfig.ts | 16 +++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/ui-config/marketsConfig.tsx b/src/ui-config/marketsConfig.tsx index f0c59d22..d1b404f5 100644 --- a/src/ui-config/marketsConfig.tsx +++ b/src/ui-config/marketsConfig.tsx @@ -54,6 +54,7 @@ export type MarketDataType = { export enum CustomMarket { etherlink_testnet = 'etherlink_testnet', arb_sepolia = 'arb_sepolia', + polygon_amoy = 'polygon_amoy', } export const marketsData: { @@ -97,4 +98,23 @@ export const marketsData: { }, faucetUrl: 'https://faucet.plend.finance/receiveFaucetTokens', }, + [CustomMarket.polygon_amoy]: { + marketTitle: 'Polygon Amoy', + chainId: 80002, //ChainId.etherlink_testnet, + v3: true, + enabledFeatures: { + liquiditySwap: false, + collateralRepay: false, + faucet: false, + }, + addresses: { + LENDING_POOL_ADDRESS_PROVIDER: '0xb764c672f31A83B3929845E737DB6F20928890C9', + LENDING_POOL: '0x1fe68e15Ec31894501667129615117f5AA37fa68', + WALLET_BALANCE_PROVIDER: '0x14D5EA200025011533cB5A5954Ab3e08116EddDC', + UI_POOL_DATA_PROVIDER: '0x1b8A658e134883194A16c85622Ad35ceE14c46F8', + UI_INCENTIVE_DATA_PROVIDER: '0x855FEEf492CA6Da186a4F4F98e9D5B8b689E7aAA', + WETH_GATEWAY: '0x56130f7f03600FC86aa3c49C72d7e3C7C3b3394E', + }, + faucetUrl: 'https://faucet.plend.finance/receiveFaucetTokens', + }, } as const; diff --git a/src/ui-config/networksConfig.ts b/src/ui-config/networksConfig.ts index 8b06716b..ecdeda12 100644 --- a/src/ui-config/networksConfig.ts +++ b/src/ui-config/networksConfig.ts @@ -52,11 +52,14 @@ export enum ChainId { mainnet = 1, etherlink_testnet = 128123, arb_sepolia = 421614, + amoy = 80002, } export const ChainIdToNetwork: Record = { 1: 'mainnet', 128123: 'etherlink_testnet', + 421614: 'arb_sepolia', + 80002: 'amoy', }; export const networkConfigs: Record = { @@ -105,6 +108,17 @@ export const networkConfigs: Record = { baseAssetDecimals: 18, explorerLink: 'https://sepolia.arbiscan.io', isTestnet: true, - networkLogoPath: '/icons/networks/etherlink.svg', + networkLogoPath: '/icons/networks/arbitrum.svg', + }, + [ChainId.amoy]: { + name: 'Amoy', + publicJsonRPCUrl: ['https://rpc-amoy.polygon.technology'], + baseUniswapAdapter: '0x0', + baseAssetSymbol: 'MATIC', + wrappedBaseAssetSymbol: 'WMATIC', + baseAssetDecimals: 18, + explorerLink: 'https://amoyscan.io', + isTestnet: true, + networkLogoPath: '/icons/networks/polygon.svg', }, } as const; From 5f24bfc5d9d5d0c63681e004dd4484cf3f88606e Mon Sep 17 00:00:00 2001 From: Jay Daraniya <40439741+JAYDARANIYA@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:02:04 +0530 Subject: [PATCH 3/3] feat: Add move button to move position from arb to amoy and amoy to arb --- .../SuppliedPositionsListItem.tsx | 95 +- src/ui-config/marketsConfig.tsx | 3 + src/utils/contracts/ERC20.ts | 714 ++++++++++++ src/utils/contracts/PortalSend.ts | 1016 +++++++++++++++++ src/utils/contracts/common.ts | 37 + src/utils/dashboardSortUtils.ts | 2 +- 6 files changed, 1863 insertions(+), 4 deletions(-) create mode 100644 src/utils/contracts/ERC20.ts create mode 100644 src/utils/contracts/PortalSend.ts create mode 100644 src/utils/contracts/common.ts diff --git a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx index a1e26833..4172fb58 100644 --- a/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx +++ b/src/modules/dashboard/lists/SuppliedPositionsList/SuppliedPositionsListItem.tsx @@ -14,6 +14,12 @@ import { ListButtonsColumn } from '../ListButtonsColumn'; import { ListItemUsedAsCollateral } from '../ListItemUsedAsCollateral'; import { ListItemWrapper } from '../ListItemWrapper'; import { ListValueColumn } from '../ListValueColumn'; +import { useWeb3React } from '@web3-react/core'; +import { BigNumber, constants, Contract, providers } from 'ethers'; +import { useWeb3Context } from 'src/libs/hooks/useWeb3Context'; +import { PortalSend, PortalSendABI } from '../../../../utils/contracts/PortalSend'; +import { ERC20, ERC20ABI } from '../../../../utils/contracts/ERC20'; +import { ChainId } from 'src/ui-config/networksConfig'; export const SuppliedPositionsListItem = ({ reserve, @@ -28,6 +34,9 @@ export const SuppliedPositionsListItem = ({ const { openSupply, openWithdraw, openCollateralChange, openSwap } = useModalContext(); const { debtCeiling } = useAssetCaps(); const isSwapButton = isFeatureEnabled.liquiditySwap(currentMarketData); + const { library: provider } = useWeb3React(); + const { currentAccount } = useWeb3Context(); + const { reserves } = useAppDataContext(); const canBeEnabledAsCollateral = !debtCeiling.isMaxed && @@ -36,6 +45,76 @@ export const SuppliedPositionsListItem = ({ user.isolatedReserve?.underlyingAsset === reserve.underlyingAsset || (reserve.isIsolated && user.totalCollateralMarketReferenceCurrency === '0')); + const doPortalSend = async (underlyingAsset: string) => { + console.log("underlyingAsset", underlyingAsset); + const portalSender = currentMarketData.addresses.PORTAL_SENDER; + console.log("portalSender", portalSender); + const signer = provider?.getSigner(currentAccount); + const portalSendContract = new Contract( + portalSender!, + PortalSendABI, + signer + ) as PortalSend; + + const aTokenAddress = reserves.filter((item) => item.symbol === 'WETH')[0].aTokenAddress; + const asset_address = reserves.filter((item) => item.symbol === 'WETH')[0].underlyingAsset; + + console.log("aTokenAddress", aTokenAddress); + console.log("asset_address", asset_address); + + const aTokenInstance = new Contract(aTokenAddress, ERC20ABI, signer) as ERC20; + + + const approvalAmt = await aTokenInstance.allowance( + currentAccount, + portalSender! + ); + + // console.log("approvalAmt", approvalAmt); + if (approvalAmt.eq(BigNumber.from('0'))) { + console.log("approvalAmt is 0"); + const aTokenTx = await aTokenInstance.approve( + portalSender!, + constants.MaxUint256.toString() + ); + await aTokenTx.wait(1); + // console.log(aTokenTx); + } + + + + const sendAmount = 0.01 * Math.pow(10, 18); + const relayFees = 0.000001 * Math.pow(10, 18); + + // console.log("sendAmount", sendAmount); + // console.log("relayFees", relayFees); + + // log all params + // console.log("ChainId", currentMarketData.chainId === ChainId.amoy ? + // "Arbitrum" : "Amoy"); + // console.log("asset_address", asset_address); + // console.log("sendAmount", sendAmount.toString()); + // console.log("relayFees", relayFees.toString()); + // console.log("currentAccount", currentAccount); + + const tx = await portalSendContract.bridgeTokens( + currentMarketData.chainId === ChainId.amoy ? + "Arbitrum" : "Amoy", + currentAccount, + asset_address.trim(), + sendAmount.toString(), + relayFees.toString(), + ); + + console.log("tx", tx); + + await tx.wait(1); + console.log(tx); + + // const portalSend = getPortalSend(underlyingAsset); + // portalSend.withdraw(); + } + return ( @@ -84,6 +162,17 @@ export const SuppliedPositionsListItem = ({ Withdraw + {(reserve.symbol === 'ETH' || reserve.symbol === 'WETH') && ( + + )} + {isSwapButton ? (