diff --git a/.vscode/settings.json b/.vscode/settings.json index 1bf0ac094e8..d88f4bac9c9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -28,6 +28,7 @@ "blockscout", "CBOR", "ccip", + "CCTP", "CELO", "chainlink", "commify", @@ -39,6 +40,8 @@ "MOVR", "Numberish", "NUON", + "offchain", + "offramp", "preact", "preconfigured", "quickstarts", diff --git a/public/images/ccip/detailed-architecture.png b/public/images/ccip/detailed-architecture.png new file mode 100644 index 00000000000..a5a6c0bdbf5 Binary files /dev/null and b/public/images/ccip/detailed-architecture.png differ diff --git a/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details-success.jpg b/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details-success.jpg new file mode 100644 index 00000000000..c8263e3372e Binary files /dev/null and b/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details-success.jpg differ diff --git a/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details.jpg b/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details.jpg new file mode 100644 index 00000000000..0b475cb5a78 Binary files /dev/null and b/public/images/ccip/tutorials/ccip-explorer-send-usdc-message-pay-link-tx-details.jpg differ diff --git a/public/images/ccip/tutorials/mumbai-usdc-messagedetails-pay-link.jpg b/public/images/ccip/tutorials/mumbai-usdc-messagedetails-pay-link.jpg new file mode 100644 index 00000000000..d714e283e3a Binary files /dev/null and b/public/images/ccip/tutorials/mumbai-usdc-messagedetails-pay-link.jpg differ diff --git a/public/images/ccip/usdc-diagram.png b/public/images/ccip/usdc-diagram.png new file mode 100644 index 00000000000..96142f4a4e9 Binary files /dev/null and b/public/images/ccip/usdc-diagram.png differ diff --git a/src/config/data/ccip/data.ts b/src/config/data/ccip/data.ts index f0b4ff5378c..afccc54851e 100644 --- a/src/config/data/ccip/data.ts +++ b/src/config/data/ccip/data.ts @@ -1,6 +1,10 @@ import { ChainsConfig, LanesConfig, TokensConfig, Environment, Version } from "./types" // For mainnet +import chainsMainnetv120 from "@config/data/ccip/v1_2_0/mainnet/chains.json" +import lanesMainnetv120 from "@config/data/ccip/v1_2_0/mainnet/lanes.json" +import tokensMainnetv120 from "@config/data/ccip/v1_2_0/mainnet/tokens.json" + import chainsMainnetv100 from "@config/data/ccip/v1_0_0/mainnet/chains.json" import lanesMainnetv100 from "@config/data/ccip/v1_0_0/mainnet/lanes.json" import tokensMainnetv100 from "@config/data/ccip/v1_0_0/mainnet/tokens.json" @@ -22,7 +26,11 @@ export const loadReferenceData = ({ environment, version }: { environment: Envir let lanesReferenceData: LanesConfig let tokensReferenceData: TokensConfig - if (environment === Environment.Mainnet && version === Version.V1_0_0) { + if (environment === Environment.Mainnet && version === Version.V1_2_0) { + chainsReferenceData = chainsMainnetv120 as unknown as ChainsConfig + lanesReferenceData = lanesMainnetv120 as unknown as LanesConfig + tokensReferenceData = tokensMainnetv120 as unknown as TokensConfig + } else if (environment === Environment.Mainnet && version === Version.V1_0_0) { chainsReferenceData = chainsMainnetv100 as unknown as ChainsConfig lanesReferenceData = lanesMainnetv100 as unknown as LanesConfig tokensReferenceData = tokensMainnetv100 as unknown as TokensConfig @@ -52,6 +60,9 @@ export const getAllChains = ({ let chainsTestnetKeys: string[] = [] switch (mainnetVersion) { + case Version.V1_2_0: + chainsMainnetKeys = Object.keys(chainsMainnetv120) + break case Version.V1_0_0: chainsMainnetKeys = Object.keys(chainsMainnetv100) break diff --git a/src/config/data/ccip/v1_0_0/mainnet/lanes.json b/src/config/data/ccip/v1_0_0/mainnet/lanes.json index e99d4ad0151..cfb0293439c 100644 --- a/src/config/data/ccip/v1_0_0/mainnet/lanes.json +++ b/src/config/data/ccip/v1_0_0/mainnet/lanes.json @@ -264,13 +264,6 @@ }, "mainnet": { "supportedTokens": { - "R": { - "rateLimiterConfig": { - "capacity": "500000000000000000000000", - "isEnabled": true, - "rate": "139000000000000000000" - } - }, "NUON": { "rateLimiterConfig": { "capacity": "100000000000000000000000", @@ -439,13 +432,6 @@ }, "ethereum-mainnet-base-1": { "supportedTokens": { - "R": { - "rateLimiterConfig": { - "capacity": "500000000000000000000000", - "isEnabled": true, - "rate": "139000000000000000000" - } - }, "NUON": { "rateLimiterConfig": { "capacity": "100000000000000000000000", diff --git a/src/config/data/ccip/v1_0_0/mainnet/tokens.json b/src/config/data/ccip/v1_0_0/mainnet/tokens.json index 7e6bfc48825..228cd2432ab 100644 --- a/src/config/data/ccip/v1_0_0/mainnet/tokens.json +++ b/src/config/data/ccip/v1_0_0/mainnet/tokens.json @@ -353,26 +353,6 @@ "decimals": 18 } }, - "R": { - "ethereum-mainnet-base-1": { - "tokenAddress": "0xaFB2820316e7Bc5Ef78d295AB9b8Bb2257534576", - "allowListEnabled": false, - "poolAddress": "0x19ef16366Ec4D8c8F022A3708735289538ef6D16", - "poolType": "burnMint", - "name": "R Stablecoin", - "symbol": "R", - "decimals": 18 - }, - "mainnet": { - "tokenAddress": "0x183015a9bA6fF60230fdEaDc3F43b3D788b13e21", - "allowListEnabled": false, - "poolAddress": "0xD0b84F42b3B88eeF7AA88c48Ac8EC08130d48595", - "poolType": "lockRelease", - "name": "R Stablecoin", - "symbol": "R", - "decimals": 18 - } - }, "snxUSD": { "ethereum-mainnet-optimism-1": { "tokenAddress": "0xb2F30A7C980f052f02563fb518dcc39e6bf38175", diff --git a/src/config/data/ccip/v1_2_0/mainnet/chains.json b/src/config/data/ccip/v1_2_0/mainnet/chains.json new file mode 100644 index 00000000000..2ee54324095 --- /dev/null +++ b/src/config/data/ccip/v1_2_0/mainnet/chains.json @@ -0,0 +1,37 @@ +{ + "mainnet": { + "chainSelector": "5009297550715157269", + "router": "0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", + "feeTokens": ["LINK", "WETH"] + }, + "ethereum-mainnet-optimism-1": { + "chainSelector": "3734403246176062136", + "router": "0x3206695CaE29952f4b0c22a169725a865bc8Ce0f", + "feeTokens": ["LINK", "WETH"] + }, + "ethereum-mainnet-arbitrum-1": { + "chainSelector": "4949039107694359620", + "router": "0x141fa059441E0ca23ce184B6A78bafD2A517DdE8", + "feeTokens": ["LINK", "WETH"] + }, + "matic-mainnet": { + "chainSelector": "4051577828743386545", + "router": "0x849c5ED5a80F5B408Dd4969b78c2C8fdf0565Bfe", + "feeTokens": ["LINK", "WMATIC"] + }, + "avalanche-mainnet": { + "chainSelector": "6433500567565415381", + "router": "0xF4c7E640EdA248ef95972845a62bdC74237805dB", + "feeTokens": ["LINK", "WAVAX"] + }, + "bsc-mainnet": { + "chainSelector": "11344663589394136015", + "router": "0x34B03Cb9086d7D758AC55af71584F81A598759FE", + "feeTokens": ["LINK", "WBNB"] + }, + "ethereum-mainnet-base-1": { + "chainSelector": "15971525489660198786", + "router": "0x881e3A65B4d4a04dD529061dd0071cf975F58bCD", + "feeTokens": ["LINK", "WETH"] + } +} diff --git a/src/config/data/ccip/v1_2_0/mainnet/lanes.json b/src/config/data/ccip/v1_2_0/mainnet/lanes.json new file mode 100644 index 00000000000..d25ad3cfd3b --- /dev/null +++ b/src/config/data/ccip/v1_2_0/mainnet/lanes.json @@ -0,0 +1,676 @@ +{ + "avalanche-mainnet": { + "bsc-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "matic-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + } + }, + "bsc-mainnet": { + "avalanche-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "ethereum-mainnet-base-1": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "matic-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "THE": { + "rateLimiterConfig": { + "capacity": "750000000000000000000000", + "isEnabled": true, + "rate": "417000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + } + }, + "ethereum-mainnet-arbitrum-1": { + "ethereum-mainnet-base-1": { + "supportedTokens": { + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "DFX": { + "rateLimiterConfig": { + "capacity": "5000000000000000000000000", + "isEnabled": true, + "rate": "57000000000000000000" + } + }, + "HYPE": { + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "555000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + } + }, + "ethereum-mainnet-base-1": { + "bsc-mainnet": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "ethereum-mainnet-arbitrum-1": { + "supportedTokens": { + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "ethereum-mainnet-optimism-1": { + "supportedTokens": { + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "LINK": { + "rateLimiterConfig": { + "capacity": "50000000000000000000000", + "isEnabled": true, + "rate": "13880000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + } + }, + "ethereum-mainnet-optimism-1": { + "ethereum-mainnet-base-1": { + "supportedTokens": { + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "snxUSD": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "matic-mainnet": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + } + }, + "mainnet": { + "avalanche-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "bsc-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "ethereum-mainnet-arbitrum-1": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "DFX": { + "rateLimiterConfig": { + "capacity": "5000000000000000000000000", + "isEnabled": true, + "rate": "57000000000000000000" + } + }, + "HYPE": { + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "555000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "ethereum-mainnet-base-1": { + "supportedTokens": { + "NUON": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "55550000000000000000" + } + }, + "suUSD": { + "rateLimiterConfig": { + "capacity": "200000000000000000000000", + "isEnabled": true, + "rate": "2314000000000000000" + } + }, + "suETH": { + "rateLimiterConfig": { + "capacity": "150000000000000000000", + "isEnabled": true, + "rate": "1700000000000000" + } + }, + "suBTC": { + "rateLimiterConfig": { + "capacity": "8000000000000000000", + "isEnabled": true, + "rate": "92600000000000" + } + }, + "LINK": { + "rateLimiterConfig": { + "capacity": "50000000000000000000000", + "isEnabled": true, + "rate": "13880000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "ethereum-mainnet-optimism-1": { + "supportedTokens": { + "snxUSD": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "USDC": { + "rateLimiterConfig": { + "capacity": "0", + "isEnabled": false, + "rate": "0" + } + } + }, + "rateLimiterConfig": { + "capacity": "1000000000000000000000000", + "isEnabled": true, + "rate": "277000000000000000000" + } + }, + "matic-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "DFX": { + "rateLimiterConfig": { + "capacity": "5000000000000000000000000", + "isEnabled": true, + "rate": "57000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "600000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + } + }, + "matic-mainnet": { + "avalanche-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "bsc-mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "THE": { + "rateLimiterConfig": { + "capacity": "750000000000000000000000", + "isEnabled": true, + "rate": "417000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "ethereum-mainnet-optimism-1": { + "rateLimiterConfig": { + "capacity": "100000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + }, + "mainnet": { + "supportedTokens": { + "BETS": { + "rateLimiterConfig": { + "capacity": "30000000000000000000000000", + "isEnabled": true, + "rate": "50000000000000000000000" + } + }, + "DFX": { + "rateLimiterConfig": { + "capacity": "5000000000000000000000000", + "isEnabled": true, + "rate": "57000000000000000000" + } + } + }, + "rateLimiterConfig": { + "capacity": "600000000000000000000000", + "isEnabled": true, + "rate": "167000000000000000000" + } + } + } +} diff --git a/src/config/data/ccip/v1_2_0/mainnet/tokens.json b/src/config/data/ccip/v1_2_0/mainnet/tokens.json new file mode 100644 index 00000000000..3ccc04e4c85 --- /dev/null +++ b/src/config/data/ccip/v1_2_0/mainnet/tokens.json @@ -0,0 +1,423 @@ +{ + "LINK": { + "mainnet": { + "tokenAddress": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "allowListEnabled": false, + "poolAddress": "0xC2291992A08eBFDfedfE248F2CCD34Da63570DF4", + "poolType": "lockRelease", + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + }, + "ethereum-mainnet-optimism-1": { + "tokenAddress": "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6", + "allowListEnabled": false, + "poolAddress": "0x841b32B5309ba30cFbf4534667fC3D99EdF05B7A", + "poolType": "lockRelease", + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + }, + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4", + "allowListEnabled": false, + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + }, + "matic-mainnet": { + "tokenAddress": "0xb0897686c545045aFc77CF20eC7A532E3120E0F1", + "allowListEnabled": false, + "poolAddress": "0x086892015567fb8764d02c6845C85C25C8FcA389", + "poolType": "lockRelease", + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + }, + "avalanche-mainnet": { + "tokenAddress": "0x5947BB275c521040051D82396192181b413227A3", + "allowListEnabled": false, + "poolAddress": "0x8A3e8D8614189d7ad0CF3f1a0D787Da79eBCEc17", + "poolType": "lockRelease", + "name": "Chainlink Token", + "symbol": "LINK.e", + "decimals": 18 + }, + "bsc-mainnet": { + "tokenAddress": "0x404460C6A5EdE2D891e8297795264fDe62ADBB75", + "allowListEnabled": false, + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0x88Fb150BDc53A65fe94Dea0c9BA0a6dAf8C6e196", + "allowListEnabled": false, + "poolAddress": "0x1568A4131760231712E59778DAB9EFE67911f4ff", + "poolType": "burnMint", + "name": "ChainLink Token", + "symbol": "LINK", + "decimals": 18 + } + }, + "WETH": { + "mainnet": { + "tokenAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "allowListEnabled": false, + "name": "Wrapped Ether", + "symbol": "WETH", + "decimals": 18 + }, + "ethereum-mainnet-optimism-1": { + "tokenAddress": "0x4200000000000000000000000000000000000006", + "allowListEnabled": false, + "name": "Wrapped Ether", + "symbol": "WETH", + "decimals": 18 + }, + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + "allowListEnabled": false, + "name": "Wrapped Ether", + "symbol": "WETH", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0x4200000000000000000000000000000000000006", + "allowListEnabled": false, + "name": "Wrapped Ether", + "symbol": "WETH", + "decimals": 18 + } + }, + "WMATIC": { + "matic-mainnet": { + "tokenAddress": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "allowListEnabled": false, + "poolAddress": "0x3ea1AaCeE48171d48a7982db5C66b1B282338F33", + "poolType": "lockRelease", + "name": "Wrapped Matic", + "symbol": "WMATIC", + "decimals": 18 + } + }, + "WAVAX": { + "avalanche-mainnet": { + "tokenAddress": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", + "allowListEnabled": false, + "poolAddress": "0x8CB50A8C8D009aCeFC8685999D989B552909ebEb", + "poolType": "lockRelease", + "name": "Wrapped AVAX", + "symbol": "WAVAX", + "decimals": 18 + } + }, + "WBNB": { + "bsc-mainnet": { + "tokenAddress": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + "allowListEnabled": false, + "name": "Wrapped BNB", + "symbol": "WBNB", + "decimals": 18 + } + }, + "BETS": { + "avalanche-mainnet": { + "tokenAddress": "0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5", + "allowListEnabled": true, + "poolAddress": "0x3757f459E0Ac186E360F561080aA28EC578064ad", + "poolType": "burnMint", + "name": "BetSwirl v2", + "symbol": "BETS", + "decimals": 18 + }, + "bsc-mainnet": { + "tokenAddress": "0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5", + "allowListEnabled": true, + "poolAddress": "0x00CE37b1C949BF938DE4281d8C4261ee421E4ce7", + "poolType": "burnMint", + "name": "BetSwirl v2", + "symbol": "BETS", + "decimals": 18 + }, + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5", + "allowListEnabled": true, + "poolAddress": "0x84968c789Fc403714992fa43ecE311fE0a9173D2", + "poolType": "burnMint", + "name": "BetSwirl v2", + "symbol": "BETS", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5", + "allowListEnabled": true, + "poolAddress": "0xf0D19c04f04382048fC9ad157C529CeB2c7be823", + "poolType": "burnMint", + "name": "BetSwirl v2", + "symbol": "BETS", + "decimals": 18 + }, + "matic-mainnet": { + "tokenAddress": "0x94025780a1aB58868D9B2dBBB775f44b32e8E6e5", + "allowListEnabled": true, + "poolAddress": "0x1264EF0A81f17f5104258FcAb4611B9AC3742b74", + "poolType": "burnMint", + "name": "BetSwirl v2", + "symbol": "BETS", + "decimals": 18 + } + }, + "USDC": { + "avalanche-mainnet": { + "tokenAddress": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + "allowListEnabled": false, + "poolAddress": "0x0F36Bf4eeAA4432C29Fb777cD9fF00767a46f4f7", + "poolType": "usdc", + "name": "USD Coin", + "symbol": "USDC", + "decimals": 6 + }, + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + "allowListEnabled": false, + "poolAddress": "0x69Ee2fC63B9Ff218EEcEDD2F2375D11da229BdA9", + "poolType": "usdc", + "name": "USD Coin", + "symbol": "USDC", + "decimals": 6 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "allowListEnabled": false, + "poolAddress": "0x55A5786ca51c31623F3EFb8bBfcc8DF9A4C61bA9", + "poolType": "usdc", + "name": "USD Coin", + "symbol": "USDC", + "decimals": 6 + }, + "ethereum-mainnet-optimism-1": { + "tokenAddress": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85", + "allowListEnabled": false, + "poolAddress": "0x04336603557FEb138B36075156E92f9e551dFC5d", + "poolType": "usdc", + "name": "USD Coin", + "symbol": "USDC", + "decimals": 6 + }, + "mainnet": { + "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "allowListEnabled": false, + "poolAddress": "0xA81f4AB595dE5C14759245DE5ce9899D380FeFda", + "poolType": "usdc", + "name": "USD Coin", + "symbol": "USDC", + "decimals": 6 + } + }, + "THE": { + "bsc-mainnet": { + "tokenAddress": "0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11", + "allowListEnabled": false, + "poolAddress": "0x9E668ee3A9588326A3F37CD12A864b82E8CEA52E", + "poolType": "lockRelease", + "name": "THENA", + "symbol": "THE", + "decimals": 18 + }, + "matic-mainnet": { + "tokenAddress": "0x27DfD2D7b85e0010542da35C6EBcD59E45fc949D", + "allowListEnabled": false, + "poolAddress": "0xfa6B7be83e9aC5A90A27932986C654dBe2E16B02", + "poolType": "burnMint", + "name": "THENA", + "symbol": "THE", + "decimals": 18 + } + }, + "NUON": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0xfb9Fed8cB962548A11fE7F6F282949061395c7F5", + "allowListEnabled": false, + "poolAddress": "0x57DfB084069620dBa08B69f38888ce92299B6104", + "poolType": "lockRelease", + "name": "NUON", + "symbol": "NUON", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0xCA160D11087E03fd398d40f561cd4768825f4958", + "allowListEnabled": false, + "poolAddress": "0x419cbF914C3Fd8d1b315e9A2FcACB47aF2039228", + "poolType": "burnMint", + "name": "NUON", + "symbol": "NUON", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0xCA160D11087E03fd398d40f561cd4768825f4958", + "allowListEnabled": false, + "poolAddress": "0x57D3bb46aF4A9b210FAE046796013090D428475F", + "poolType": "burnMint", + "name": "NUON", + "symbol": "NUON", + "decimals": 18 + } + }, + "suUSD": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x8BF591Eae535f93a242D5A954d3Cde648b48A5A8", + "allowListEnabled": false, + "poolAddress": "0x29B3b71FB61591a2c535f00841a4aE7137984ce0", + "poolType": "burnMint", + "name": "Sumerian USD", + "symbol": "suUSD", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0x8BF591Eae535f93a242D5A954d3Cde648b48A5A8", + "allowListEnabled": false, + "poolAddress": "0xDA5Aa67b0CA4d9f3De7207170FD9Bd2Ff1b13b6F", + "poolType": "burnMint", + "name": "Sumerian USD", + "symbol": "suUSD", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0x8BF591Eae535f93a242D5A954d3Cde648b48A5A8", + "allowListEnabled": false, + "poolAddress": "0xcd196D3905AfA0eCB4e0e62C2D7d6c52f9C73526", + "poolType": "burnMint", + "name": "Sumerian USD", + "symbol": "suUSD", + "decimals": 18 + } + }, + "suETH": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x1c22531AA9747d76fFF8F0A43b37954ca67d28e0", + "allowListEnabled": false, + "poolAddress": "0xCE8E12B4C38eAB46044Ac9cAdea701D9AC1108E3", + "poolType": "burnMint", + "name": "Sumerian ETH", + "symbol": "suETH", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0x1c22531AA9747d76fFF8F0A43b37954ca67d28e0", + "allowListEnabled": false, + "poolAddress": "0x34bc9BeB51d98B7E40862B3B4EDa97aD68d0475e", + "poolType": "burnMint", + "name": "Sumerian ETH", + "symbol": "suETH", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0x1c22531AA9747d76fFF8F0A43b37954ca67d28e0", + "allowListEnabled": false, + "poolAddress": "0x2dd317E7e36544C5222818F228d607c209517470", + "poolType": "burnMint", + "name": "Sumerian ETH", + "symbol": "suETH", + "decimals": 18 + } + }, + "suBTC": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0xe85411C030fB32A9D8b14Bbbc6CB19417391F711", + "allowListEnabled": false, + "poolAddress": "0xD550449aC82d2a0121F32d6e0a3B29e693071739", + "poolType": "burnMint", + "name": "Sumerian BTC", + "symbol": "suBTC", + "decimals": 18 + }, + "ethereum-mainnet-base-1": { + "tokenAddress": "0xe85411C030fB32A9D8b14Bbbc6CB19417391F711", + "allowListEnabled": false, + "poolAddress": "0x0f0F719a2417C01D9afF5DE6fAD2813eE4Dbd917", + "poolType": "burnMint", + "name": "Sumerian BTC", + "symbol": "suBTC", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0xe85411C030fB32A9D8b14Bbbc6CB19417391F711", + "allowListEnabled": false, + "poolAddress": "0x123ed44f3B863a684437Ebf18F8a744c250Ee5cA", + "poolType": "burnMint", + "name": "Sumerian BTC", + "symbol": "suBTC", + "decimals": 18 + } + }, + "DFX": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x27f485b62C4A7E635F561A87560Adf5090239E93", + "allowListEnabled": false, + "poolAddress": "0x0242F309138dd28fc665C30776d8EB6a88dB1F7c", + "poolType": "burnMint", + "name": "DFX Token (L2)", + "symbol": "DFX", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0x888888435FDe8e7d4c54cAb67f206e4199454c60", + "allowListEnabled": false, + "poolAddress": "0x50f6631B377be52E132DF35a2F05eA54fda882ac", + "poolType": "lockRelease", + "name": "DFX Token", + "symbol": "DFX", + "decimals": 18 + }, + "matic-mainnet": { + "tokenAddress": "0x27f485b62C4A7E635F561A87560Adf5090239E93", + "allowListEnabled": false, + "poolAddress": "0x30F4283a3d6302f968909Ff7c02ceCB2aC6C27Ac", + "poolType": "burnMint", + "name": "DFX Token (L2)", + "symbol": "DFX", + "decimals": 18 + } + }, + "HYPE": { + "ethereum-mainnet-arbitrum-1": { + "tokenAddress": "0x85225Ed797fd4128Ac45A992C46eA4681a7A15dA", + "allowListEnabled": false, + "poolAddress": "0x403Ec7c5f1E0ED5394CBAbcBe285c47e64C2B148", + "poolType": "burnMint", + "name": "Hyperbolic Protocol", + "symbol": "HYPE", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0x85225Ed797fd4128Ac45A992C46eA4681a7A15dA", + "allowListEnabled": false, + "poolAddress": "0x55562A08104837FF55E3A66c49A1419b6311c1E6", + "poolType": "lockRelease", + "name": "Hyperbolic Protocol", + "symbol": "HYPE", + "decimals": 18 + } + }, + "snxUSD": { + "ethereum-mainnet-optimism-1": { + "tokenAddress": "0xb2F30A7C980f052f02563fb518dcc39e6bf38175", + "allowListEnabled": true, + "poolAddress": "0xe470A3068302CF045Eec3B800dDBFf42B42e18D8", + "poolType": "burnMint", + "name": "Synthetic USD Token v3", + "symbol": "snxUSD", + "decimals": 18 + }, + "mainnet": { + "tokenAddress": "0xb2F30A7C980f052f02563fb518dcc39e6bf38175", + "allowListEnabled": true, + "poolAddress": "0x057152DB365B47851B0A0bd431644b8eE21fE1b4", + "poolType": "burnMint", + "name": "Synthetic USD Token v3", + "symbol": "snxUSD", + "decimals": 18 + } + } +} diff --git a/src/config/data/ccip/v1_2_0/testnet/lanes.json b/src/config/data/ccip/v1_2_0/testnet/lanes.json index c8fa96206d6..cb86ef92857 100644 --- a/src/config/data/ccip/v1_2_0/testnet/lanes.json +++ b/src/config/data/ccip/v1_2_0/testnet/lanes.json @@ -41,16 +41,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "matic-testnet": { @@ -71,16 +71,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "bsc-testnet": { @@ -124,16 +124,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } } }, @@ -273,16 +273,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "bsc-testnet": { @@ -326,16 +326,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } } }, @@ -381,16 +381,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "matic-testnet": { @@ -411,16 +411,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "ethereum-testnet-goerli-base-1": { @@ -441,16 +441,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } } }, @@ -636,16 +636,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "ethereum-testnet-goerli-optimism-1": { @@ -666,16 +666,16 @@ }, "USDC": { "rateLimiterConfig": { - "capacity": "100000000000", - "isEnabled": true, - "rate": "167000000" + "capacity": "0", + "isEnabled": false, + "rate": "0" } } }, "rateLimiterConfig": { - "capacity": "100000000000000000000000", + "capacity": "1000000000000000000000000", "isEnabled": true, - "rate": "167000000000000000000" + "rate": "277000000000000000000" } }, "bsc-testnet": { diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index 0beb9a11e54..d43d03f111c 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -827,7 +827,11 @@ export const SIDEBAR: Partial> = { url: "ccip/supported-networks", children: [ { - title: "Mainnet v1.0.0", + title: "Mainnet v1.2.0", + url: "ccip/supported-networks/v1_2_0/mainnet", + }, + { + title: "Mainnet v1.0.0 (Deprecated)", url: "ccip/supported-networks/v1_0_0/mainnet", }, { @@ -858,17 +862,21 @@ export const SIDEBAR: Partial> = { url: "ccip/tutorials/cross-chain-tokens", }, { - title: "Transfer Tokens With Data", + title: "Transfer Tokens with Data", url: "ccip/tutorials/programmable-token-transfers", }, { - title: "Transfer Tokens With Data - Defensive Example", + title: "Transfer Tokens with Data - Defensive Example", url: "ccip/tutorials/programmable-token-transfers-defensive", }, { - title: "Transfer Tokens Between EOAs", + title: "Transfer Tokens between EOAs", url: "ccip/tutorials/cross-chain-tokens-from-eoa", }, + { + title: "Transfer USDC with Data", + url: "ccip/tutorials/usdc", + }, { title: "Send Arbitrary Data", url: "ccip/tutorials/send-arbitrary-data", diff --git a/src/content/ccip/architecture.mdx b/src/content/ccip/architecture.mdx index cd15e45cc78..6614dcf4b3f 100644 --- a/src/content/ccip/architecture.mdx +++ b/src/content/ccip/architecture.mdx @@ -30,7 +30,7 @@ Below is a diagram displaying the basic architecture of CCIP. Routers are smart Pools](#token-pools) section to understand the various mechanisms that are used to transfer value across chains. - + ## CCIP terminology @@ -44,7 +44,7 @@ CCIP enables a _sender_ on a _source blockchain_ to send a _message_ to a _recei | Receiver | A smart contract or an EOA. **Note**: An EOA cannot receive arbitrary data. It can only receive tokens. | | Destination Blockchain | The blockchain the receiver resides on. | -## CCIP components +## Detailed Architecture The figure below outlines the different components involved in a cross-chain transaction: @@ -52,7 +52,7 @@ The figure below outlines the different components involved in a cross-chain tra - The contracts in dark blue are the CCIP interface ([Router](#router)). To use CCIP, users need only to understand how to interact with the router; they don't need to understand the whole CCIP architecture. **Note**: The CCIP interface is static and remains consistent over time to provide reliability and stability to the users. - The contracts in light blue are internal to the CCIP protocol and subject to change. - + ### Onchain components @@ -145,7 +145,7 @@ The rate limits are enforced at both the source and destination blockchains for For each supported token on each individual [lane](/ccip/concepts#lane), the token pool rate limit manages the total number of tokens that can be transferred within a given time. This limit is independent of the USD value of the token. -For example, the maximum capacity of the suUSD token pool on the [Ethereum mainnet → Base mainnet lane](/ccip/supported-networks/v1_0_0/mainnet#ethereum-mainnet-base-mainnet) is 200,000 suUSD. The refill rate is 2 suUSD per second. If 200,000 suUSD are transferred on that lane, the entire capacity is consumed. After that, if a user wants to send 20 suUSD, they must wait at least 10 seconds as the capacity refills. The maximum throughput for this token on the lane is 1200 suUSD every 10 minutes. +For example, the maximum capacity of the suUSD token pool on the [Ethereum mainnet → Base mainnet lane](/ccip/supported-networks/v1_2_0/mainnet#ethereum-mainnet-base-mainnet) is 200,000 suUSD. The refill rate is 2 suUSD per second. If 200,000 suUSD are transferred on that lane, the entire capacity is consumed. After that, if a user wants to send 20 suUSD, they must wait at least 10 seconds as the capacity refills. The maximum throughput for this token on the lane is 1200 suUSD every 10 minutes. ### Aggregate rate limit diff --git a/src/content/ccip/billing.mdx b/src/content/ccip/billing.mdx index 2f4d2a4faaf..a7485b65173 100644 --- a/src/content/ccip/billing.mdx +++ b/src/content/ccip/billing.mdx @@ -4,25 +4,87 @@ date: Last Modified title: "CCIP Billing" --- -import { Aside, ClickToZoom } from "@components" +import { Aside } from "@components" +import Billing from "@features/ccip/components/Billing.astro" -The CCIP billing model uses the `feeToken` specified in the [message](/ccip/api-reference/client#evm2anymessage) to pay a single fee on the source chain. CCIP uses a gas-locked fee payment mechanism, referred to as _Smart Execution_, to help ensure the reliable execution of cross-chain transactions regardless of destination chain gas spikes. For developers, this means you can simply pay on the source chain and CCIP will take care of execution on the destination chain. +The CCIP billing model uses the `feeToken` specified in the [message](/ccip/api-reference/client#evm2anymessage) to pay a single fee on the source blockchain. CCIP uses a gas-locked fee payment mechanism, referred to as _Smart Execution_, to help ensure the reliable execution of cross-chain transactions regardless of destination blockchain gas spikes. For developers, this means you can simply pay on the source blockchain and CCIP will take care of execution on the destination blockchain. -On each source chain, CCIP maintains a cache of destination gas prices, denominated in each `feeToken`. To prevent staleness, these prices are routinely updated by either piggybacking user messages or timeouts. CCIP supports fee payments in LINK and in alternative assets, which currently includes blockchain-native gas tokens and their ERC20 wrapped versions. The payment model for CCIP is designed to significantly reduce friction for users and quickly scale CCIP to more blockchains by supporting fee payments that originate across a multitude of chains over time. +CCIP supports fee payments in LINK and in alternative assets, which currently includes blockchain-native gas tokens and their ERC-20 wrapped versions. The payment model for CCIP is designed to significantly reduce friction for users and quickly scale CCIP to more blockchains by supporting fee payments that originate across a multitude of blockchains over time. -## Overheads and fees +Aside from billing, remember to [carefully estimate the `gasLimit` that you set](/ccip/best-practices#setting-gaslimit) for your destination contract so CCIP can have enough gas to execute `ccipReceive()`, if applicable. Any unspent gas from this user-set limit is not refunded. -Users should note that CCIP fees include both gas cost overhead and a flat/basis points premium as follows: +## Billing mechanism -- **Destination gas overhead:** This is the average overhead incurred on the destination chain by CCIP to process the message and/or token transfer. -- **Flat network premium for messages:** this fee is a static amount that users pay when sending cross-chain messages. -- **Basis point based premium for tokens:** This is a percentage-based fee that users pay for cross-chain token transfers. It is calculated using the following expression: `tokenAmount x price x bps ratio`. `price` is initially denominated in USD and translated into the `feeToken`. +The fee is calculated by the following formula: -Current CCIP premium fees are in line with industry standards within the cross-chain ecosystem, but these values are subject to change. The premium portion of fees paid in alternative assets will have a surcharge of 10% when compared to LINK payments. To understand service limits, read the [CCIP Service Limits](/ccip/service-limits) page. + ``` + fee = message fee + network fee + ``` -Aside from billing, overhead costs, and fees, remember to [carefully estimate the `gasLimit` that you set](/ccip/best-practices#setting-gaslimit) for your destination contract so CCIP can have enough gas to execute `ccipReceive()`, if applicable. Any unspent gas from this user-set limit is not refunded. +Where: + + - `fee`: The total fee for processing a [CCIP message](/ccip/api-reference/client#evm2anymessage). **Note:** Users can call the [getFee](/ccip/api-reference/i-router-client#getfee) function to estimate the fee. + - `message fee`: This represents an estimation of the gas cost the node operators will pay to deliver the CCIP message to the destination blockchain. + - `network fee`: Premium paid to CCIP service providers, including node operators running the [Decentralized Oracle Network](/ccip/concepts#decentralized-oracle-network-don) and [Risk Management Network](/ccip/concepts#risk-management-network). + +### Message fee + +The message fee is calculated by the following formula: + + ``` + message fee = execution cost + data availability cost + ``` + +#### Execution cost + +The execution cost is directly correlated with the estimated gas usage to execute the transaction on the destination blockchain: + + ``` + execution cost = gas price * gas usage * gas multiplier + ``` + +Where: + + - `gas price`: The destination gas price. CCIP maintains a cache of destination gas prices on each source blockchain, denominated in each `feeToken`. + - `gas multiplier`: Scaling factor for _Smart Execution_. This multiplier ensures the reliable execution of transactions regardless of destination blockchain gas spikes. + - `gas usage`: + + ``` + gas usage = gas limit + destination gas overhead + destination gas per payload + gas for token transfers` + ``` + + Where: + + - `gas limit`: This specifies the maximum amount of gas CCIP can consume to execute [ccipReceive()](/ccip/api-reference/ccip-receiver#ccipreceive) on the receiver contract located on the destination blockchain. Users set the gas limit in the [extra argument field](/ccip/api-reference/client#evmextraargsv1) of the CCIP message. **Note:** Remember to [carefully estimate the `gasLimit` that you set](/ccip/best-practices#setting-gaslimit) for your destination contract so CCIP can have enough gas to execute `ccipReceive()`. Any unspent gas from this user-set limit is not refunded. + - `destination gas overhead`: This is the fixed gas cost incurred on the destination blockchain by CCIP (Committing DON + Executing DON) and Risk Management Network. + - `destination gas per payload`: This variable gas depends on the length of the data field in the [CCIP message](/ccip/api-reference/client#evm2anymessage). If there is no payload (CCIP only transfers tokens), the value is `0`. + - `gas for token transfers`: This variable gas cost is for transferring tokens onto the destination blockchain. If there are no token transfers, the value is `0`. + +#### Data availability cost + +This cost is only relevant if the destination blockchain is a [L2 layer](https://chain.link/education-hub/what-is-layer-2). Some L2s charge fees for [data availability](https://ethereum.org/en/developers/docs/data-availability). For instance, [optimistic rollups](https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/) process the transactions offchain then post the transaction data to Ethereum as calldata, which costs additional gas. + +### Network fee + +The premium paid to CCIP service providers, including node operators running the [Decentralized Oracle Network](/ccip/concepts#decentralized-oracle-network-don) and [Risk Management Network](/ccip/concepts#risk-management-network) is calculated as follows: + +- For token transfers or programmable transfers (token + data), the fee uses a percentage-based premium. For each token, the premium is calculated using the following expression: + + ``` + tokenAmount * price * percentage + ``` + + Where: + + - `tokenAmount`: The amount of tokens. + - `price`: Initially denominated in USD and translated into the `feeToken`. + - `percentage`: The values are listed in the table below. + +- For messaging (only data): The fee is a static amount. The values denominated in USD are listed in the table below. + + diff --git a/src/content/ccip/index.mdx b/src/content/ccip/index.mdx index e6762904832..0ca1f3de8d9 100644 --- a/src/content/ccip/index.mdx +++ b/src/content/ccip/index.mdx @@ -19,12 +19,23 @@ import { ClickToZoom, Aside } from "@components" building on mainnet. + + + + + +
diff --git a/src/content/ccip/supported-networks/v1_2_0/mainnet.mdx b/src/content/ccip/supported-networks/v1_2_0/mainnet.mdx new file mode 100644 index 00000000000..66fcf13ba73 --- /dev/null +++ b/src/content/ccip/supported-networks/v1_2_0/mainnet.mdx @@ -0,0 +1,37 @@ +--- +section: ccip +date: Last Modified +title: "CCIP Supported Networks Mainnet - v1.2.0" +--- + +import { Aside } from "@components" +import Main from "@features/ccip/components/supported-networks/Main.astro" +import { Environment, Version } from "@config/data/ccip" + + + + + + + +
diff --git a/src/content/ccip/supported-networks/v1_2_0/testnet.mdx b/src/content/ccip/supported-networks/v1_2_0/testnet.mdx index af741b259d9..5ec8df15e35 100644 --- a/src/content/ccip/supported-networks/v1_2_0/testnet.mdx +++ b/src/content/ccip/supported-networks/v1_2_0/testnet.mdx @@ -8,6 +8,16 @@ import { Aside } from "@components" import Main from "@features/ccip/components/supported-networks/Main.astro" import { Environment, Version } from "@config/data/ccip" + +