├── LICENSE ├── README.md ├── SecurityAudits └── v1_1 │ ├── Avalanche_Bridge_Security_Audit_Report_Halborn_v1_1.pdf │ ├── Avalanche_Bridge_Smart_Contract_Security_Audit_Halborn_v1.pdf │ └── Avalanche_Warden_Security_Audit_Report_Halborn_v1_1.pdf ├── SmartContracts ├── BridgeToken.sol └── Roles.sol ├── avalanche_contract_address.json ├── avalanche_contract_address.test.json ├── cctp ├── cctp_config.json └── cctp_config.test.json ├── token_list.json ├── token_list.test.json └── tokens ├── 1INCH └── logo.png ├── AAVE └── logo.png ├── ALPHA └── logo.png ├── BAT └── logo.png ├── BUSD └── logo.png ├── COMP └── logo.png ├── CRV └── logo.png ├── DAI └── logo.png ├── GRT └── logo.png ├── INFRA └── logo.png ├── LINK └── logo.png ├── MKR └── logo.png ├── RUNE └── logo.png ├── SHIB └── logo.png ├── SNX └── logo.png ├── SUSHI └── logo.png ├── SWAP └── logo.png ├── UMA └── logo.png ├── UNI └── logo.png ├── USDC └── logo.png ├── USDT └── logo.png ├── WBTC └── logo.png ├── WETH └── logo.png ├── WOO └── logo.png ├── YFI └── logo.png └── ZRX └── logo.png /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Ava Labs, Inc. 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Listing a New Token on the Avalanche Bridge 2 | 3 | The Avalanche Bridge was built to provide trustworthy and secure access to the growing Avalanche ecosystem. With this in mind, we intentionally take a deliberate approach to supporting assets. For listing consideration, please [fill out the following form](https://avalancheavax.typeform.com/to/FJ6fa1uC) and our team will contact your shortly thereafter. 4 | 5 | -------------------------------------------------------------------------------- /SecurityAudits/v1_1/Avalanche_Bridge_Security_Audit_Report_Halborn_v1_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/SecurityAudits/v1_1/Avalanche_Bridge_Security_Audit_Report_Halborn_v1_1.pdf -------------------------------------------------------------------------------- /SecurityAudits/v1_1/Avalanche_Bridge_Smart_Contract_Security_Audit_Halborn_v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/SecurityAudits/v1_1/Avalanche_Bridge_Smart_Contract_Security_Audit_Halborn_v1.pdf -------------------------------------------------------------------------------- /SecurityAudits/v1_1/Avalanche_Warden_Security_Audit_Report_Halborn_v1_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/SecurityAudits/v1_1/Avalanche_Warden_Security_Audit_Report_Halborn_v1_1.pdf -------------------------------------------------------------------------------- /SmartContracts/BridgeToken.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; 5 | import "./Roles.sol"; 6 | 7 | contract BridgeToken is ERC20Burnable { 8 | using Roles for Roles.Role; 9 | 10 | Roles.Role private bridgeRoles; 11 | 12 | string private constant TOKEN_NAME = "Example Token"; 13 | string private constant TOKEN_SYMBOL = "EXMP.e"; 14 | uint8 private constant TOKEN_DECIMALS = 18; 15 | 16 | struct SwapToken { 17 | address tokenContract; 18 | uint256 supply; 19 | } 20 | mapping(address => SwapToken) swapTokens; 21 | 22 | mapping(uint256 => bool) public chainIds; 23 | 24 | event Mint( 25 | address to, 26 | uint256 amount, 27 | address feeAddress, 28 | uint256 feeAmount, 29 | bytes32 originTxId 30 | ); 31 | event Unwrap(uint256 amount, uint256 chainId); 32 | event AddSupportedChainId(uint256 chainId); 33 | event MigrateBridgeRole(address newBridgeRoleAddress); 34 | event AddSwapToken(address contractAddress, uint256 supplyIncrement); 35 | event RemoveSwapToken(address contractAddress, uint256 supplyDecrement); 36 | event Swap(address token, uint256 amount); 37 | 38 | constructor() ERC20(TOKEN_NAME, TOKEN_SYMBOL) { 39 | bridgeRoles.add(msg.sender); 40 | chainIds[0] = true; 41 | } 42 | 43 | function decimals() public view virtual override returns (uint8) { 44 | return TOKEN_DECIMALS; 45 | } 46 | 47 | /** 48 | * @dev Mint function used by bridge. Optional FeeAddress and FeeAmount parameters used to mint small percentage of transfered assets directly to bridge. 49 | * @param to Address to mint funds to. 50 | * @param amount Amount of funds to mint. 51 | * @param feeAddress Address to mint bridge fees to. 52 | * @param feeAmount Amount to mint as bridge fees. 53 | * @param feeAmount Amount to mint as bridge fees. 54 | * @param originTxId Transaction ID from external network that triggered this minting. 55 | */ 56 | function mint( 57 | address to, 58 | uint256 amount, 59 | address feeAddress, 60 | uint256 feeAmount, 61 | bytes32 originTxId 62 | ) public { 63 | require(bridgeRoles.has(msg.sender), "Unauthorized."); 64 | _mint(to, amount); 65 | if (feeAmount > 0) { 66 | _mint(feeAddress, feeAmount); 67 | } 68 | emit Mint(to, amount, feeAddress, feeAmount, originTxId); 69 | } 70 | 71 | /** 72 | * @dev Add new chainId to list of supported Ids. 73 | * @param chainId ChainId to add. 74 | */ 75 | function addSupportedChainId(uint256 chainId) public { 76 | require(bridgeRoles.has(msg.sender), "Unauthorized."); 77 | 78 | // Check that the chain ID is not the chain this contract is deployed on. 79 | uint256 currentChainId; 80 | assembly { 81 | currentChainId := chainid() 82 | } 83 | require(chainId != currentChainId, "Cannot add current chain ID."); 84 | 85 | // Already supported, no-op. 86 | if (chainIds[chainId] == true) { 87 | return; 88 | } 89 | 90 | chainIds[chainId] = true; 91 | emit AddSupportedChainId(chainId); 92 | } 93 | 94 | /** 95 | * @dev Burns assets and signals bridge to migrate funds to the same address on the provided chainId. 96 | * @param amount Amount of asset to unwrap. 97 | * @param chainId ChainId to unwrap or migrate funds to. Only used for multi-network bridge deployment. 98 | * Zero by default for bridge deployment with only 2 networks. 99 | */ 100 | function unwrap(uint256 amount, uint256 chainId) public { 101 | require(tx.origin == msg.sender, "Contract calls not supported."); 102 | require(chainIds[chainId] == true, "Chain ID not supported."); 103 | _burn(msg.sender, amount); 104 | emit Unwrap(amount, chainId); 105 | } 106 | 107 | /** 108 | * @dev Provide Bridge Role (Admin Role) to new address. 109 | * @param newBridgeRoleAddress New bridge role address. 110 | */ 111 | function migrateBridgeRole(address newBridgeRoleAddress) public { 112 | require(bridgeRoles.has(msg.sender), "Unauthorized."); 113 | bridgeRoles.remove(msg.sender); 114 | bridgeRoles.add(newBridgeRoleAddress); 115 | emit MigrateBridgeRole(newBridgeRoleAddress); 116 | } 117 | 118 | /** 119 | * @dev Add Token to accept swaps from or increase supply of existing swap token. 120 | * @param contractAddress Token Address to allow swaps. 121 | * @param supplyIncrement Amount of assets allowed to be swapped (or incremental increase in amount). 122 | */ 123 | function addSwapToken(address contractAddress, uint256 supplyIncrement) 124 | public 125 | { 126 | require(bridgeRoles.has(msg.sender), "Unauthorized."); 127 | require(isContract(contractAddress), "Address is not contract."); 128 | 129 | // If the swap token is not already supported, add it with the total supply of supplyIncrement. 130 | // Otherwise, increment the current supply. 131 | if (swapTokens[contractAddress].tokenContract == address(0)) { 132 | swapTokens[contractAddress] = SwapToken({ 133 | tokenContract: contractAddress, 134 | supply: supplyIncrement 135 | }); 136 | } else { 137 | swapTokens[contractAddress].supply = 138 | swapTokens[contractAddress].supply + 139 | supplyIncrement; 140 | } 141 | emit AddSwapToken(contractAddress, supplyIncrement); 142 | } 143 | 144 | /** 145 | * @dev Remove amount of swaps allowed from existing swap token. 146 | * @param contractAddress Token Address to remove swap amount. 147 | * @param supplyDecrement Amount to remove from the swap supply. 148 | */ 149 | function removeSwapToken(address contractAddress, uint256 supplyDecrement) 150 | public 151 | { 152 | require(bridgeRoles.has(msg.sender), "Unauthorized"); 153 | require(isContract(contractAddress), "Address is not contract."); 154 | require( 155 | swapTokens[contractAddress].tokenContract != address(0), 156 | "Swap token not supported" 157 | ); 158 | 159 | // If the decrement is less than the current supply, decrement it from the current supply. 160 | // Otherwise, if the decrement is greater than or equal to the current supply, delete the mapping value. 161 | if (swapTokens[contractAddress].supply > supplyDecrement) { 162 | swapTokens[contractAddress].supply = 163 | swapTokens[contractAddress].supply - 164 | supplyDecrement; 165 | } else { 166 | delete swapTokens[contractAddress]; 167 | } 168 | emit RemoveSwapToken(contractAddress, supplyDecrement); 169 | } 170 | 171 | /** 172 | * @dev Fetch the remaining amount allowed for a swap token. 173 | * @param token Address of swap token. 174 | * @return amount of swaps remaining. 175 | */ 176 | function swapSupply(address token) public view returns (uint256) { 177 | return swapTokens[token].supply; 178 | } 179 | 180 | /** 181 | * @dev Perform Swap. 182 | * @param token Address of token to be swapped. 183 | * @param amount Amount of token to be swapped. 184 | */ 185 | function swap(address token, uint256 amount) public { 186 | require(isContract(token), "Token is not a contract."); 187 | require( 188 | swapTokens[token].tokenContract != address(0), 189 | "Swap token is not a contract." 190 | ); 191 | require( 192 | amount <= swapTokens[token].supply, 193 | "Swap amount is more than supply." 194 | ); 195 | 196 | // Update the allowed swap amount. 197 | swapTokens[token].supply = swapTokens[token].supply - amount; 198 | 199 | // Burn the old token. 200 | ERC20Burnable swapToken = ERC20Burnable( 201 | swapTokens[token].tokenContract 202 | ); 203 | swapToken.burnFrom(msg.sender, amount); 204 | 205 | // Mint the new token. 206 | _mint(msg.sender, amount); 207 | 208 | emit Swap(token, amount); 209 | } 210 | 211 | /** 212 | * @dev Check if provided address is a contract. 213 | * @param addr Address to check. 214 | * @return hasCode 215 | */ 216 | function isContract(address addr) private view returns (bool hasCode) { 217 | uint256 length; 218 | assembly { 219 | length := extcodesize(addr) 220 | } 221 | return length > 0; 222 | } 223 | } 224 | -------------------------------------------------------------------------------- /SmartContracts/Roles.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | library Roles { 5 | struct Role { 6 | mapping(address => bool) bearer; 7 | } 8 | 9 | /** 10 | * @dev Give an account access to this role. 11 | */ 12 | function add(Role storage role, address account) internal { 13 | require(!has(role, account), "Roles: account already has role"); 14 | role.bearer[account] = true; 15 | } 16 | 17 | /** 18 | * @dev Remove an account's access to this role. 19 | */ 20 | function remove(Role storage role, address account) internal { 21 | require(has(role, account), "Roles: account does not have role"); 22 | role.bearer[account] = false; 23 | } 24 | 25 | /** 26 | * @dev Check if an account has this role. 27 | * @return bool 28 | */ 29 | function has(Role storage role, address account) 30 | internal 31 | view 32 | returns (bool) 33 | { 34 | require(account != address(0), "Roles: account is the zero address"); 35 | return role.bearer[account]; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /avalanche_contract_address.json: -------------------------------------------------------------------------------- 1 | { 2 | "1INCH.e": "0xd501281565bf7789224523144Fe5D98e8B28f267", 3 | "AAVE.e": "0x63a72806098Bd3D9520cC43356dD78afe5D386D9", 4 | "BAT.e": "0x98443B96EA4b0858FDF3219Cd13e98C7A4690588", 5 | "BUSD.e": "0x19860CCB0A68fd4213aB9D8266F7bBf05A8dDe98", 6 | "COMP.e": "0xc3048E19E76CB9a3Aa9d77D8C03c29Fc906e2437", 7 | "CRV.e": "0x249848BeCA43aC405b8102Ec90Dd5F22CA513c06", 8 | "DAI.e": "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", 9 | "GRT.e": "0x8a0cAc13c7da965a312f08ea4229c37869e85cB9", 10 | "INFRA.e": "0xa4FB4F0Ff2431262D236778495145EcBC975c38B", 11 | "LINK.e": "0x5947BB275c521040051D82396192181b413227A3", 12 | "MKR.e": "0x88128fd4b259552A9A1D457f435a6527AAb72d42", 13 | "SNX.e": "0xBeC243C995409E6520D7C41E404da5dEba4b209B", 14 | "SUSHI.e": "0x37B608519F91f70F2EeB0e5Ed9AF4061722e4F76", 15 | "SWAP.e": "0xc7B5D72C836e718cDA8888eaf03707fAef675079", 16 | "UMA.e": "0x3Bd2B1c7ED8D396dbb98DED3aEbb41350a5b2339", 17 | "UNI.e": "0x8eBAf22B6F053dFFeaf46f4Dd9eFA95D89ba8580", 18 | "USDC.e": "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", 19 | "USDT.e": "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", 20 | "WBTC.e": "0x50b7545627a5162F82A992c33b87aDc75187B218", 21 | "WETH.e": "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", 22 | "YFI.e": "0x9eAaC1B23d935365bD7b542Fe22cEEe2922f52dc", 23 | "ZRX.e": "0x596fA47043f99A4e0F122243B841E55375cdE0d2", 24 | "ALPHA.e": "0x2147EFFF675e4A4eE1C2f918d181cDBd7a8E208f", 25 | "WOO.e": "0xaBC9547B534519fF73921b1FBA6E672b5f58D083", 26 | "SHIB.e": "0x02D980A0D7AF3fb7Cf7Df8cB35d9eDBCF355f665" 27 | } 28 | -------------------------------------------------------------------------------- /avalanche_contract_address.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "LINK.e": "0x1741B9C475e0861a43B03F984928082Ac4f3fB95", 3 | "FAU.e": "0xB4E0F6FEF81BdFea0856bB846789985c9CFf7e85", 4 | "WETH.e": "0x7fCDc2C1EF3e4A0bCC8155a558bB20a7218f2b05", 5 | "DAI.e": "0x2F10B211817694a2fa00c6b5481Ac4A95b896643", 6 | "USDC.e": "0xC20386B7B8DC5d930511261aa789516f96A7eb16", 7 | "USDT.e": "0xBcE59D73868899a7B7896B46DA20A06F663BAF10", 8 | "WBTC.e": "0xa0526dF369774af18299deb370D66Ae8723804d9" 9 | } -------------------------------------------------------------------------------- /cctp/cctp_config.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "chainId": 1, 4 | "domain": 0, 5 | "tokenRouterAddress": "0xD835dbD135AD8a27214ecdEE79E7a41337865648", 6 | "messageTransmitterAddress": "0x0a992d191deec32afe36203ad87d7d289a738f81", 7 | "minimumConfirmations": 96, 8 | "tokens": [ 9 | { 10 | "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", 11 | "name": "USD Coin", 12 | "symbol": "USDC", 13 | "decimals": 6 14 | } 15 | ] 16 | }, 17 | { 18 | "chainId": 43114, 19 | "domain": 1, 20 | "tokenRouterAddress": "0xD835dbD135AD8a27214ecdEE79E7a41337865648", 21 | "messageTransmitterAddress": "0x8186359af5f57fbb40c6b14a588d2a59c0c29880", 22 | "minimumConfirmations": 20, 23 | "tokens": [ 24 | { 25 | "address": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", 26 | "name": "USD Coin", 27 | "symbol": "USDC", 28 | "decimals": 6 29 | } 30 | ] 31 | } 32 | ] -------------------------------------------------------------------------------- /cctp/cctp_config.test.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "chainId": 11155111, 4 | "domain": 0, 5 | "tokenRouterAddress": "0x2DBd09Bfb9DaB73334d1Ee0dd38b6e530B816d44", 6 | "messageTransmitterAddress": "0x7865fAfC2db2093669d92c0F33AeEF291086BEFD", 7 | "minimumConfirmations": 10, 8 | "tokens": [ 9 | { 10 | "address": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", 11 | "name": "USD Coin", 12 | "symbol": "USDC", 13 | "decimals": 6 14 | } 15 | ] 16 | }, 17 | { 18 | "chainId": 43113, 19 | "domain": 1, 20 | "tokenRouterAddress": "0x3002ad2c7c43f191afd39d6fffdbf8f7e2b13da1", 21 | "messageTransmitterAddress": "0xa9fb1b3009dcb79e2fe346c16a604b8fa8ae0a79", 22 | "minimumConfirmations": 2, 23 | "tokens": [ 24 | { 25 | "address": "0x5425890298aed601595a70ab815c96711a31bc65", 26 | "name": "USD Coin", 27 | "symbol": "USDC", 28 | "decimals": 6 29 | } 30 | ] 31 | } 32 | ] 33 | -------------------------------------------------------------------------------- /token_list.json: -------------------------------------------------------------------------------- 1 | { 2 | "USDT": { 3 | "nativeNetwork": "ethereum", 4 | "nativeContractAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7", 5 | "denomination": 6, 6 | "chainlinkFeedAddress": "0x0bF499444525a23E7Bb61997539725cA2e928138", 7 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/USDT/logo.png", 8 | "coingeckoId": "tether" 9 | }, 10 | "DAI": { 11 | "nativeNetwork": "ethereum", 12 | "nativeContractAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F", 13 | "denomination": 18, 14 | "chainlinkFeedAddress": "0x773616E4d11A78F511299002da57A0a94577F1f4", 15 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/DAI/logo.png", 16 | "coingeckoId": "dai" 17 | }, 18 | "LINK": { 19 | "nativeNetwork": "ethereum", 20 | "nativeContractAddress": "0x514910771AF9Ca656af840dff83E8264EcF986CA", 21 | "denomination": 18, 22 | "chainlinkFeedAddress": "0xDC530D9457755926550b59e8ECcdaE7624181557", 23 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/LINK/logo.png", 24 | "coingeckoId": "chainlink" 25 | }, 26 | "SUSHI": { 27 | "nativeNetwork": "ethereum", 28 | "nativeContractAddress": "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", 29 | "denomination": 18, 30 | "chainlinkFeedAddress": "0xe572CeF69f43c2E488b33924AF04BDacE19079cf", 31 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/SUSHI/logo.png", 32 | "coingeckoId": "sushi" 33 | }, 34 | "BUSD": { 35 | "nativeNetwork": "ethereum", 36 | "nativeContractAddress": "0x4Fabb145d64652a948d72533023f6E7A623C7C53", 37 | "denomination": 18, 38 | "chainlinkFeedAddress": "0x833D8Eb16D306ed1FbB5D7A2E019e106B960965A", 39 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/BUSD/logo.png", 40 | "coingeckoId": "binance-usd" 41 | }, 42 | "UNI": { 43 | "nativeNetwork": "ethereum", 44 | "nativeContractAddress": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", 45 | "denomination": 18, 46 | "chainlinkFeedAddress": "0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e", 47 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/UNI/logo.png", 48 | "coingeckoId": "uniswap" 49 | }, 50 | "WETH": { 51 | "nativeNetwork": "ethereum", 52 | "nativeContractAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", 53 | "denomination": 18, 54 | "chainlinkFeedAddress": "0x0000000000000000000000000000000000000000", 55 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/WETH/logo.png", 56 | "coingeckoId": "weth" 57 | }, 58 | "GRT": { 59 | "nativeNetwork": "ethereum", 60 | "nativeContractAddress": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", 61 | "denomination": 18, 62 | "chainlinkFeedAddress": "0x17D054eCac33D91F7340645341eFB5DE9009F1C1", 63 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/GRT/logo.png", 64 | "coingeckoId": "the-graph" 65 | }, 66 | "AAVE": { 67 | "nativeNetwork": "ethereum", 68 | "nativeContractAddress": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", 69 | "denomination": 18, 70 | "chainlinkFeedAddress": "0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012", 71 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/AAVE/logo.png", 72 | "coingeckoId": "aave" 73 | }, 74 | "BAT": { 75 | "nativeNetwork": "ethereum", 76 | "nativeContractAddress": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", 77 | "denomination": 18, 78 | "chainlinkFeedAddress": "0x0d16d4528239e9ee52fa531af613AcdB23D88c94", 79 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/BAT/logo.png", 80 | "coingeckoId": "basic-attention-token" 81 | }, 82 | "ZRX": { 83 | "nativeNetwork": "ethereum", 84 | "nativeContractAddress": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", 85 | "denomination": 18, 86 | "chainlinkFeedAddress": "0x2Da4983a622a8498bb1a21FaE9D8F6C664939962", 87 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/ZRX/logo.png", 88 | "coingeckoId": "0x" 89 | }, 90 | "UMA": { 91 | "nativeNetwork": "ethereum", 92 | "nativeContractAddress": "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", 93 | "denomination": 18, 94 | "chainlinkFeedAddress": "0xf817B69EA583CAFF291E287CaE00Ea329d22765C", 95 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/UMA/logo.png", 96 | "coingeckoId": "uma" 97 | }, 98 | "WBTC": { 99 | "nativeNetwork": "ethereum", 100 | "nativeContractAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", 101 | "denomination": 8, 102 | "chainlinkFeedAddress": "0xdeb288F737066589598e9214E782fa5A8eD689e8", 103 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/WBTC/logo.png", 104 | "coingeckoId": "wrapped-bitcoin" 105 | }, 106 | "1INCH": { 107 | "nativeNetwork": "ethereum", 108 | "nativeContractAddress": "0x111111111117dC0aa78b770fA6A738034120C302", 109 | "denomination": 18, 110 | "chainlinkFeedAddress": "0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8", 111 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/1INCH/logo.png", 112 | "coingeckoId": "1inch" 113 | }, 114 | "SNX": { 115 | "nativeNetwork": "ethereum", 116 | "nativeContractAddress": "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", 117 | "denomination": 18, 118 | "chainlinkFeedAddress": "0x79291A9d692Df95334B1a0B3B4AE6bC606782f8c", 119 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/SNX/logo.png", 120 | "coingeckoId": "havven" 121 | }, 122 | "YFI": { 123 | "nativeNetwork": "ethereum", 124 | "nativeContractAddress": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", 125 | "denomination": 18, 126 | "chainlinkFeedAddress": "0x7c5d4F8345e66f68099581Db340cd65B078C41f4", 127 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/YFI/logo.png", 128 | "coingeckoId": "yearn-finance" 129 | }, 130 | "COMP": { 131 | "nativeNetwork": "ethereum", 132 | "nativeContractAddress": "0xc00e94Cb662C3520282E6f5717214004A7f26888", 133 | "denomination": 18, 134 | "chainlinkFeedAddress": "0x1B39Ee86Ec5979ba5C322b826B3ECb8C79991699", 135 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/COMP/logo.png", 136 | "coingeckoId": "compound-governance-token" 137 | }, 138 | "MKR": { 139 | "nativeNetwork": "ethereum", 140 | "nativeContractAddress": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", 141 | "denomination": 18, 142 | "chainlinkFeedAddress": "0x24551a8Fb2A7211A25a17B1481f043A8a8adC7f2", 143 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/MKR/logo.png", 144 | "coingeckoId": "maker" 145 | }, 146 | "SWAP": { 147 | "nativeNetwork": "ethereum", 148 | "nativeContractAddress": "0xCC4304A31d09258b0029eA7FE63d032f52e44EFe", 149 | "denomination": 18, 150 | "chainlinkFeedAddress": "0xffa4Bb3a24B60C0262DBAaD60d77a3c3fa6173e8", 151 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/SWAP/logo.png", 152 | "coingeckoId": "trustswap" 153 | }, 154 | "USDC": { 155 | "nativeNetwork": "ethereum", 156 | "nativeContractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", 157 | "denomination": 6, 158 | "chainlinkFeedAddress": "0x986b5E1e1755e3C2440e960477f25201B0a8bbD4", 159 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/USDC/logo.png", 160 | "coingeckoId": "usd-coin" 161 | }, 162 | "CRV": { 163 | "nativeNetwork": "ethereum", 164 | "nativeContractAddress": "0xD533a949740bb3306d119CC777fa900bA034cd52", 165 | "denomination": 18, 166 | "chainlinkFeedAddress": "0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e", 167 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/CRV/logo.png", 168 | "coingeckoId": "curve-dao-token" 169 | }, 170 | "ALPHA": { 171 | "nativeNetwork": "ethereum", 172 | "nativeContractAddress": "0xa1faa113cbE53436Df28FF0aEe54275c13B40975", 173 | "denomination": 18, 174 | "chainlinkFeedAddress": "0x89c7926c7c15fD5BFDB1edcFf7E7fC8283B578F6", 175 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/ALPHA/logo.png", 176 | "coingeckoId": "alpha-finance" 177 | }, 178 | "WOO": { 179 | "nativeNetwork": "ethereum", 180 | "nativeContractAddress": "0x4691937a7508860F876c9c0a2a617E7d9E945D4B", 181 | "denomination": 18, 182 | "chainlinkFeedAddress": "0x926a93B44a887076eDd00257E5D42fafea313363", 183 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/WOO/logo.png", 184 | "coingeckoId": "woo-network" 185 | }, 186 | "SHIB": { 187 | "nativeNetwork": "ethereum", 188 | "nativeContractAddress": "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", 189 | "denomination": 18, 190 | "chainlinkFeedAddress": "0x8dD1CD88F43aF196ae478e91b9F5E4Ac69A97C61", 191 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/SHIB/logo.png", 192 | "coingeckoId": "shiba-inu" 193 | }, 194 | "INFRA": { 195 | "nativeNetwork": "ethereum", 196 | "nativeContractAddress": "0x013062189dc3dcc99e9Cee714c513033b8d99e3c", 197 | "denomination": 18, 198 | "chainlinkFeedAddress": "0x0000000000000000000000000000000000000000", 199 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/INFRA/logo.png", 200 | "coingeckoId": "bware" 201 | } 202 | } -------------------------------------------------------------------------------- /token_list.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "LINK": { 3 | "nativeNetwork": "ethereum", 4 | "nativeContractAddress": "0x01BE23585060835E02B77ef475b0Cc51aA1e0709", 5 | "denomination": 18, 6 | "chainlinkFeedAddress": "0xd8bD0a1cB028a31AA859A21A3758685a95dE4623", 7 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/LINK/logo.png", 8 | "coingeckoId": "chainlink" 9 | }, 10 | "WETH": { 11 | "nativeNetwork": "ethereum", 12 | "nativeContractAddress": "0xc778417E063141139Fce010982780140Aa0cD5Ab", 13 | "denomination": 18, 14 | "chainlinkFeedAddress": "0x0000000000000000000000000000000000000000", 15 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/WETH/logo.png", 16 | "coingeckoId": "weth" 17 | }, 18 | "USDC": { 19 | "nativeNetwork": "ethereum", 20 | "nativeContractAddress": "0xeb8f08a975Ab53E34D8a0330E0D34de942C95926", 21 | "denomination": 6, 22 | "chainlinkFeedAddress": "0xdCA36F27cbC4E38aE16C4E9f99D39b42337F6dcf", 23 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/USDC/logo.png", 24 | "coingeckoId": "usd-coin" 25 | }, 26 | "USDT": { 27 | "nativeNetwork": "ethereum", 28 | "nativeContractAddress": "0x3B00Ef435fA4FcFF5C209a37d1f3dcff37c705aD", 29 | "denomination": 6, 30 | "chainlinkFeedAddress": "0xdCA36F27cbC4E38aE16C4E9f99D39b42337F6dcf", 31 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/USDT/logo.png", 32 | "coingeckoId": "tether" 33 | }, 34 | "DAI": { 35 | "nativeNetwork": "ethereum", 36 | "nativeContractAddress": "0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735", 37 | "denomination": 18, 38 | "chainlinkFeedAddress": "0x74825DbC8BF76CC4e9494d0ecB210f676Efa001D", 39 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/DAI/logo.png", 40 | "coingeckoId": "dai" 41 | }, 42 | "WBTC": { 43 | "nativeNetwork": "ethereum", 44 | "nativeContractAddress": "0x577D296678535e4903D59A4C929B718e1D575e0A", 45 | "denomination": 8, 46 | "chainlinkFeedAddress": "0x2431452A0010a43878bF198e170F6319Af6d27F4", 47 | "logo": "https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/tokens/WBTC/logo.png", 48 | "coingeckoId": "wrapped-bitcoin" 49 | } 50 | } -------------------------------------------------------------------------------- /tokens/1INCH/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/1INCH/logo.png -------------------------------------------------------------------------------- /tokens/AAVE/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/AAVE/logo.png -------------------------------------------------------------------------------- /tokens/ALPHA/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/ALPHA/logo.png -------------------------------------------------------------------------------- /tokens/BAT/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/BAT/logo.png -------------------------------------------------------------------------------- /tokens/BUSD/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/BUSD/logo.png -------------------------------------------------------------------------------- /tokens/COMP/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/COMP/logo.png -------------------------------------------------------------------------------- /tokens/CRV/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/CRV/logo.png -------------------------------------------------------------------------------- /tokens/DAI/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/DAI/logo.png -------------------------------------------------------------------------------- /tokens/GRT/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/GRT/logo.png -------------------------------------------------------------------------------- /tokens/INFRA/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/INFRA/logo.png -------------------------------------------------------------------------------- /tokens/LINK/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/LINK/logo.png -------------------------------------------------------------------------------- /tokens/MKR/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/MKR/logo.png -------------------------------------------------------------------------------- /tokens/RUNE/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/RUNE/logo.png -------------------------------------------------------------------------------- /tokens/SHIB/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/SHIB/logo.png -------------------------------------------------------------------------------- /tokens/SNX/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/SNX/logo.png -------------------------------------------------------------------------------- /tokens/SUSHI/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/SUSHI/logo.png -------------------------------------------------------------------------------- /tokens/SWAP/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/SWAP/logo.png -------------------------------------------------------------------------------- /tokens/UMA/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/UMA/logo.png -------------------------------------------------------------------------------- /tokens/UNI/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/UNI/logo.png -------------------------------------------------------------------------------- /tokens/USDC/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/USDC/logo.png -------------------------------------------------------------------------------- /tokens/USDT/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/USDT/logo.png -------------------------------------------------------------------------------- /tokens/WBTC/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/WBTC/logo.png -------------------------------------------------------------------------------- /tokens/WETH/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/WETH/logo.png -------------------------------------------------------------------------------- /tokens/WOO/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/WOO/logo.png -------------------------------------------------------------------------------- /tokens/YFI/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/YFI/logo.png -------------------------------------------------------------------------------- /tokens/ZRX/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/97e5c9339712704c7bdbc2de6df40315db5c5c7c/tokens/ZRX/logo.png --------------------------------------------------------------------------------