Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ ARBITRUM_ONE_RPC=https://arbitrum-one.public.blastapi.io
OP_MAINNET_RPC=https://optimism-mainnet.public.blastapi.io
POLYGON_MAINNET_RPC=https://polygon-bor-rpc.publicnode.com
UNICHAIN_RPC=https://mainnet.unichain.org
AVALANCHE_RPC=https://avalanche-c-chain-rpc.publicnode.com
BSC_RPC=https://bsc-mainnet.public.blastapi.io
LINEA_RPC=https://linea-rpc.publicnode.com

# Etherscan now uses a single API key for all chains.
ETHERSCAN_API_KEY=
Expand Down
4 changes: 3 additions & 1 deletion contracts/interfaces/IRoute.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ interface IRoute {
ARBITRUM_SEPOLIA,
BASE_SEPOLIA,
POLYGON_AMOY,
UNICHAIN
UNICHAIN,
BSC,
LINEA
}

enum Provider {
Expand Down
6 changes: 6 additions & 0 deletions contracts/utils/AdapterHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ abstract contract AdapterHelper is IRoute {
} else
if (destinationDomain == Domain.POLYGON_MAINNET) {
return 137;
} else
if (destinationDomain == Domain.BSC) {
return 56;
} else
if (destinationDomain == Domain.LINEA) {
return 59144;
} else {
revert UnsupportedDomain();
}
Expand Down
3 changes: 1 addition & 2 deletions contracts/utils/CCTPAdapter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ abstract contract CCTPAdapter is AdapterHelper {
address cctpTokenMessenger,
address cctpMessageTransmitter
) {
require(cctpTokenMessenger != address(0), ZeroAddress());
require(cctpMessageTransmitter != address(0), ZeroAddress());
// No check for address(0) to allow deployment on chains where CCTP V1 is not available
CCTP_TOKEN_MESSENGER = ICCTPTokenMessenger(cctpTokenMessenger);
CCTP_MESSAGE_TRANSMITTER = ICCTPMessageTransmitter(cctpMessageTransmitter);
}
Expand Down
6 changes: 6 additions & 0 deletions contracts/utils/StargateAdapter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ abstract contract StargateAdapter is AdapterHelper {
} else
if (destinationDomain == Domain.UNICHAIN) {
return 30320;
} else
if (destinationDomain == Domain.BSC) {
return 30102;
} else
if (destinationDomain == Domain.LINEA) {
return 30183;
} else {
revert UnsupportedDomain();
}
Expand Down
32 changes: 32 additions & 0 deletions deployments/deploy-avalanche.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
Deployment ID: MVP
Deploying Repayer
Using config for: AVALANCHE
Repayer: 0x36364Acc7B9c67692CA215af09A41CBd10439511
RepayerProxyAdmin: 0x2B5D04eF6b3279bCdA4B219b02FAF627dA1664CB
RepayerRoutes:
┌─────────┬──────────────────────────────────────────────┬────────────────┬─────────────┬───────────────────┐
│ (index) │ Pool │ Domain │ Provider │ SupportsAllTokens │
├─────────┼──────────────────────────────────────────────┼────────────────┼─────────────┼───────────────────┤
│ 0 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'CCTP' │ true │
│ 1 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'EVERCLEAR' │ true │
│ 2 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'STARGATE' │ true │
│ 3 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'CCTP' │ true │
│ 4 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'EVERCLEAR' │ true │
│ 5 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'STARGATE' │ true │
│ 6 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'CCTP' │ true │
│ 7 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'EVERCLEAR' │ true │
│ 8 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'STARGATE' │ true │
│ 9 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'CCTP' │ false │
│ 10 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'CCTP' │ false │
│ 11 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'CCTP' │ false │
│ 12 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'CCTP' │ false │
│ 13 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'CCTP' │ true │
│ 14 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 15 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'STARGATE' │ true │
│ 16 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'UNICHAIN' │ 'CCTP' │ true │
│ 17 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'UNICHAIN' │ 'EVERCLEAR' │ true │
│ 18 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'UNICHAIN' │ 'STARGATE' │ true │
│ 19 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'CCTP' │ true │
│ 20 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 21 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'STARGATE' │ true │
└─────────┴──────────────────────────────────────────────┴────────────────┴─────────────┴───────────────────┘
36 changes: 36 additions & 0 deletions deployments/deploy-bsc.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Deployment ID: MVP
Deploying Repayer
Using config for: BSC
Repayer: 0x36364Acc7B9c67692CA215af09A41CBd10439511
RepayerProxyAdmin: 0x2B5D04eF6b3279bCdA4B219b02FAF627dA1664CB
RepayerRoutes:
┌─────────┬──────────────────────────────────────────────┬────────────────┬─────────────┬───────────────────┐
│ (index) │ Pool │ Domain │ Provider │ SupportsAllTokens │
├─────────┼──────────────────────────────────────────────┼────────────────┼─────────────┼───────────────────┤
│ 0 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'ACROSS' │ true │
│ 1 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'EVERCLEAR' │ true │
│ 2 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'STARGATE' │ true │
│ 3 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'ACROSS' │ true │
│ 4 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'EVERCLEAR' │ true │
│ 5 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'STARGATE' │ true │
│ 6 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'ACROSS' │ true │
│ 7 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'EVERCLEAR' │ true │
│ 8 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'STARGATE' │ true │
│ 9 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'ACROSS' │ false │
│ 10 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'EVERCLEAR' │ false │
│ 11 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'STARGATE' │ false │
│ 12 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'ACROSS' │ false │
│ 13 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'EVERCLEAR' │ false │
│ 14 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'STARGATE' │ false │
│ 15 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'ACROSS' │ false │
│ 16 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'EVERCLEAR' │ false │
│ 17 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'STARGATE' │ false │
│ 18 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'ACROSS' │ false │
│ 19 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'EVERCLEAR' │ false │
│ 20 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'STARGATE' │ false │
│ 21 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'ACROSS' │ true │
│ 22 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 23 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'STARGATE' │ true │
│ 24 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 25 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'STARGATE' │ true │
└─────────┴──────────────────────────────────────────────┴────────────────┴─────────────┴───────────────────┘
36 changes: 36 additions & 0 deletions deployments/deploy-linea.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Deployment ID: MVP
Deploying Repayer
Using config for: LINEA
Repayer: 0x36364Acc7B9c67692CA215af09A41CBd10439511
RepayerProxyAdmin: 0x2B5D04eF6b3279bCdA4B219b02FAF627dA1664CB
RepayerRoutes:
┌─────────┬──────────────────────────────────────────────┬────────────────┬─────────────┬───────────────────┐
│ (index) │ Pool │ Domain │ Provider │ SupportsAllTokens │
├─────────┼──────────────────────────────────────────────┼────────────────┼─────────────┼───────────────────┤
│ 0 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'ACROSS' │ true │
│ 1 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'EVERCLEAR' │ true │
│ 2 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'ARBITRUM_ONE' │ 'STARGATE' │ true │
│ 3 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'ACROSS' │ true │
│ 4 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'EVERCLEAR' │ true │
│ 5 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'BASE' │ 'STARGATE' │ true │
│ 6 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'ACROSS' │ true │
│ 7 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'EVERCLEAR' │ true │
│ 8 │ '0x7C255279c098fdF6c3116D2BecD9978002c09f4b' │ 'OP_MAINNET' │ 'STARGATE' │ true │
│ 9 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'ACROSS' │ false │
│ 10 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'EVERCLEAR' │ false │
│ 11 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ARBITRUM_ONE' │ 'STARGATE' │ false │
│ 12 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'ACROSS' │ false │
│ 13 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'EVERCLEAR' │ false │
│ 14 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'BASE' │ 'STARGATE' │ false │
│ 15 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'ACROSS' │ false │
│ 16 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'EVERCLEAR' │ false │
│ 17 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'ETHEREUM' │ 'STARGATE' │ false │
│ 18 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'ACROSS' │ false │
│ 19 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'EVERCLEAR' │ false │
│ 20 │ '0xB58Bb9643884abbbad64FA7eBc874c5481E5c032' │ 'OP_MAINNET' │ 'STARGATE' │ false │
│ 21 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'ACROSS' │ true │
│ 22 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 23 │ '0x2781650E1d76b56b3BCD9836e4d16E04c86d3D07' │ 'ETHEREUM' │ 'STARGATE' │ true │
│ 24 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'EVERCLEAR' │ true │
│ 25 │ '0x5E8da448f3F7290cA355BbF7EF9F323ab8fDE422' │ 'ETHEREUM' │ 'STARGATE' │ true │
└─────────┴──────────────────────────────────────────────┴────────────────┴─────────────┴───────────────────┘
21 changes: 21 additions & 0 deletions deployments/deployments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,24 @@ eip155:130:
USDC: "0x078D782b760474a361dDA0AF3839290b0EF57AD6"
Rebalancer: "0xA85Cf46c150db2600b1D03E437bedD5513869888"
Repayer: "0x36364Acc7B9c67692CA215af09A41CBd10439511"

eip155:43114:
deployment id: MVP
name: AVALANCHE
env: prod
USDC: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
Repayer: "0x36364Acc7B9c67692CA215af09A41CBd10439511"

eip155:56:
deployment id: MVP
name: BSC
env: prod
USDC: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"
Repayer: "0x36364Acc7B9c67692CA215af09A41CBd10439511"

eip155:59144:
deployment id: MVP
name: LINEA
env: prod
USDC: "0x176211869cA2b568f2A7D4EE941E073a821EE1ff"
Repayer: "0x36364Acc7B9c67692CA215af09A41CBd10439511"
23 changes: 23 additions & 0 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,11 @@ const config: HardhatUserConfig = {
localhost: {
url: "http://127.0.0.1:8545/",
},
[Network.AVALANCHE]: {
chainId: networkConfig.AVALANCHE.ChainId,
url: process.env.AVALANCHE_RPC || "https://avalanche-c-chain-rpc.publicnode.com",
accounts,
},
[Network.BASE_SEPOLIA]: {
chainId: networkConfig.BASE_SEPOLIA.ChainId,
url: process.env.BASE_SEPOLIA_RPC || "https://sepolia.base.org",
Expand Down Expand Up @@ -610,6 +615,16 @@ const config: HardhatUserConfig = {
url: process.env.UNICHAIN_RPC || "https://mainnet.unichain.org",
accounts,
},
[Network.BSC]: {
chainId: networkConfig.BSC.ChainId,
url: process.env.BSC_RPC || "https://bsc-mainnet.public.blastapi.io",
accounts,
},
[Network.LINEA]: {
chainId: networkConfig.LINEA.ChainId,
url: process.env.LINEA_RPC || "https://linea-rpc.publicnode.com",
accounts,
},
hardhat: {
forking: {
url: isSet(process.env.DRY_RUN) || isSet(process.env.FORK_TEST)
Expand Down Expand Up @@ -647,6 +662,14 @@ const config: HardhatUserConfig = {
browserURL: "https://uniscan.xyz"
},
},
{
network: "linea",
chainId: networkConfig.LINEA.ChainId,
urls: {
apiURL: "https://api.etherscan.io/v2/api",
browserURL: "https://lineascan.build/"
},
},
],
},
warnings: {
Expand Down
Loading