Compare commits
17 Commits
49ae9bf0a1
...
1b22be73f1
Author | SHA1 | Date |
---|---|---|
Karl Kempe | 1b22be73f1 | |
Karl Kempe | 2fe1b50a61 | |
Karl Kempe | e40f29ad28 | |
Karl Kempe | 20cff589b0 | |
Karl Kempe | 0c77f095a1 | |
Karl Kempe | 9ad1a75ccb | |
Karl Kempe | fe5fa89201 | |
Karl Kempe | 3b41ec9ae2 | |
Karl Kempe | 3b6e8963e7 | |
Kevin Peters | 73e9c8cf42 | |
Karl Kempe | 3155cb88b9 | |
Karl Kempe | d059b46e85 | |
Drew Sterioti | 49916d6f4c | |
Drew Sterioti | a5c0e1d0b2 | |
Drew Sterioti | 65caca3c16 | |
Drew Sterioti | 466c1a3abd | |
Drew Sterioti | 6e3e5758b8 |
|
@ -1,12 +1,14 @@
|
||||||
## NativeSwap
|
## NativeSwap
|
||||||
|
|
||||||
|
https://certusone.github.io/wormhole-nativeswap-example/
|
||||||
|
|
||||||
This is a non-production example program.
|
This is a non-production example program.
|
||||||
|
|
||||||
Multi-chain native-to-native token swap using existing DEXes.
|
Multi-chain native-to-native token swap using existing DEXes.
|
||||||
|
|
||||||
### Details
|
### Details
|
||||||
|
|
||||||
Using liquidity of native vs UST (i.e. the UST highway), one can swap from native A on chain A to native B on chain B. For this specific example, we demonstrate a swap between Polygon (Mumbai testnet) and Ethereum (Goerli testnet) between MATIC and ETH. We wrote example smart contracts to interact with Uniswap V3 and Uniswap V2 forks (QuickSwap in this specific example for Polygon). Any DEX can be used to replace our example as long as the swap for a particular DEX has all of its parameters to perform the swap(s).
|
Using liquidity of native vs UST (i.e. the UST highway), one can swap from native A on chain A to native B on chain B. For this specific example, we demonstrate a swap between any combination of ETH (Goerli testnet), AVAX (Fuji testnet), MATIC (Mumbai testnet) and BNB (BSC testnet). We wrote example smart contracts to interact with Uniswap V3 and Uniswap V2 forks. Any DEX can be used to replace our example as long as the swap for a particular DEX has all of its parameters to perform the swap(s).
|
||||||
|
|
||||||
A protocol that hosts NativeSwap is expected to run its own relayer to enhance its user experience by only requiring a one-click transaction to perform the complete swap. Otherwise the user will have to perform an extra transaction to manually allow the final swap.
|
A protocol that hosts NativeSwap is expected to run its own relayer to enhance its user experience by only requiring a one-click transaction to perform the complete swap. Otherwise the user will have to perform an extra transaction to manually allow the final swap.
|
||||||
|
|
||||||
|
@ -49,8 +51,8 @@ cp .env.sample .env
|
||||||
Then deploy the example contracts:
|
Then deploy the example contracts:
|
||||||
|
|
||||||
```
|
```
|
||||||
./deploy_to_goerli.sh
|
./deploy_v2.sh
|
||||||
./deploy_to_mumbai.sh
|
./deploy_v3.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Then change into the react directory, copy sample.env to .env and replace YOUR-PROJECT-ID with your Infura Goerli and Mumbai Project IDs
|
Then change into the react directory, copy sample.env to .env and replace YOUR-PROJECT-ID with your Infura Goerli and Mumbai Project IDs
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
GOERLI_PROVIDER=https://goerli.infura.io/v3/YOUR-PROJECT-ID
|
GOERLI_PROVIDER="https://goerli.infura.io/v3/YOUR-PROJECT-ID"
|
||||||
MUMBAI_PROVIDER=https://polygon-mumbai.infura.io/v3/YOUR-PROJECT-ID
|
MUMBAI_PROVIDER="https://polygon-mumbai.infura.io/v3/YOUR-PROJECT-ID"
|
||||||
|
BSC_PROVIDER="https://data-seed-prebsc-1-s1.binance.org:8545"
|
||||||
|
FUJI_PROVIDER="https://api.avax-test.network/ext/bc/C/rpc"
|
||||||
ETH_PRIVATE_KEY=
|
ETH_PRIVATE_KEY=
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
root=$(dirname $0)
|
||||||
|
script="${root}/swap-with-vaa.js"
|
||||||
|
|
||||||
|
echo `which node`
|
||||||
|
|
||||||
|
node $script --in ETH --out MATIC
|
||||||
|
node $script --in ETH --out BNB
|
||||||
|
node $script --in ETH --out AVAX
|
||||||
|
node $script --in MATIC --out BNB
|
||||||
|
node $script --in MATIC --out AVAX
|
||||||
|
node $script --in BNB --out MATIC
|
||||||
|
|
||||||
|
echo "done"
|
|
@ -1,3 +1,4 @@
|
||||||
|
import yargs from "yargs";
|
||||||
import { ethers } from "ethers";
|
import { ethers } from "ethers";
|
||||||
|
|
||||||
import { NodeHttpTransport } from "@improbable-eng/grpc-web-node-http-transport";
|
import { NodeHttpTransport } from "@improbable-eng/grpc-web-node-http-transport";
|
||||||
|
@ -24,7 +25,7 @@ require("dotenv").config({ path: ".env" });
|
||||||
const SWAP_AMOUNT_IN_MATIC = "0.0069";
|
const SWAP_AMOUNT_IN_MATIC = "0.0069";
|
||||||
const SWAP_AMOUNT_IN_ETH = "0.000907";
|
const SWAP_AMOUNT_IN_ETH = "0.000907";
|
||||||
const SWAP_AMOUNT_IN_AVAX = "0.0075";
|
const SWAP_AMOUNT_IN_AVAX = "0.0075";
|
||||||
const SWAP_AMOUNT_IN_BNB = "0.015";
|
const SWAP_AMOUNT_IN_BNB = "0.0015";
|
||||||
const SWAP_AMOUNT_IN_UST = "3.40";
|
const SWAP_AMOUNT_IN_UST = "3.40";
|
||||||
|
|
||||||
const SWAP_DEADLINE = "1800";
|
const SWAP_DEADLINE = "1800";
|
||||||
|
@ -33,6 +34,34 @@ const SWAP_SLIPPAGE = "0.01";
|
||||||
// token bridge things
|
// token bridge things
|
||||||
const BRIDGE_RELAYER_FEE_UST = "0.25";
|
const BRIDGE_RELAYER_FEE_UST = "0.25";
|
||||||
|
|
||||||
|
interface Arguments {
|
||||||
|
in: string;
|
||||||
|
out: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseArgs(): Arguments {
|
||||||
|
const parsed = yargs(process.argv.slice(2))
|
||||||
|
.option("in", {
|
||||||
|
string: true,
|
||||||
|
description: "Name of inbound token",
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
.option("out", {
|
||||||
|
string: true,
|
||||||
|
description: "Name of outbound token",
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
.help("h")
|
||||||
|
.alias("h", "help").argv;
|
||||||
|
|
||||||
|
const args: Arguments = {
|
||||||
|
in: parsed.in,
|
||||||
|
out: parsed.out,
|
||||||
|
};
|
||||||
|
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
export function makeEvmWallet(
|
export function makeEvmWallet(
|
||||||
provider: ethers.providers.Provider
|
provider: ethers.providers.Provider
|
||||||
): ethers.Wallet {
|
): ethers.Wallet {
|
||||||
|
@ -347,19 +376,44 @@ async function swapEverythingExactOut(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTokenInfo(name: string) {
|
||||||
|
switch (name) {
|
||||||
|
case "ETH": {
|
||||||
|
return ETH_TOKEN_INFO;
|
||||||
|
}
|
||||||
|
case "MATIC": {
|
||||||
|
return MATIC_TOKEN_INFO;
|
||||||
|
}
|
||||||
|
case "UST": {
|
||||||
|
return UST_TOKEN_INFO;
|
||||||
|
}
|
||||||
|
case "AVAX": {
|
||||||
|
return AVAX_TOKEN_INFO;
|
||||||
|
}
|
||||||
|
case "BNB": {
|
||||||
|
return BNB_TOKEN_INFO;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw Error("invalid token name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
const args = parseArgs();
|
||||||
|
|
||||||
const testExactIn = true;
|
const testExactIn = true;
|
||||||
const isNative = true;
|
const isNative = true;
|
||||||
|
|
||||||
const swapper = new UniswapToUniswapExecutor();
|
const swapper = new UniswapToUniswapExecutor();
|
||||||
swapper.setTransport(NodeHttpTransport());
|
swapper.setTransport(NodeHttpTransport());
|
||||||
|
|
||||||
const tokenIn = ETH_TOKEN_INFO;
|
const tokenIn = getTokenInfo(args.in);
|
||||||
//const tokenOut = MATIC_TOKEN_INFO;
|
const tokenOut = getTokenInfo(args.out);
|
||||||
const tokenOut = UST_TOKEN_INFO;
|
//const tokenOut = UST_TOKEN_INFO;
|
||||||
|
|
||||||
//const recipientAddress = "0x4e2dfAD7D7d0076b5A0A41223E4Bee390C33251C";
|
const recipientAddress = "0x4e2dfAD7D7d0076b5A0A41223E4Bee390C33251C";
|
||||||
const recipientAddress = "terra1vewnsxcy5fqjslyyy409cw8js550esen38n8ey";
|
//const recipientAddress = "terra1vewnsxcy5fqjslyyy409cw8js550esen38n8ey";
|
||||||
|
|
||||||
if (testExactIn) {
|
if (testExactIn) {
|
||||||
console.info(`testing exact in. native=${isNative}`);
|
console.info(`testing exact in. native=${isNative}`);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
REACT_APP_GOERLI_PROVIDER=https://goerli.infura.io/v3/YOUR-PROJECT-ID
|
REACT_APP_GOERLI_PROVIDER="https://goerli.infura.io/v3/YOUR-PROJECT-ID"
|
||||||
REACT_APP_MUMBAI_PROVIDER=https://polygon-mumbai.infura.io/v3/YOUR-PROJECT-ID
|
REACT_APP_MUMBAI_PROVIDER="https://polygon-mumbai.infura.io/v3/YOUR-PROJECT-ID"
|
||||||
REACT_APP_FUJI_PROVIDER=
|
REACT_APP_FUJI_PROVIDER="https://api.avax-test.network/ext/bc/C/rpc"
|
||||||
REACT_APP_BSC_PROVIDER=
|
REACT_APP_BSC_PROVIDER="https://data-seed-prebsc-1-s1.binance.org:8545"
|
||||||
|
|
|
@ -5,7 +5,20 @@ import {
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import { TokenInfo } from "../utils/consts";
|
import {
|
||||||
|
AVAX_TOKEN_INFO,
|
||||||
|
BNB_TOKEN_INFO,
|
||||||
|
ETH_TOKEN_INFO,
|
||||||
|
MATIC_TOKEN_INFO,
|
||||||
|
TokenInfo,
|
||||||
|
UST_TOKEN_INFO,
|
||||||
|
} from "../utils/consts";
|
||||||
|
|
||||||
|
import ethIcon from "../icons/eth.svg";
|
||||||
|
import polygonIcon from "../icons/polygon.svg";
|
||||||
|
import terraIcon from "../icons/terra.svg";
|
||||||
|
import bscIcon from "../icons/bsc.svg";
|
||||||
|
import avaxIcon from "../icons/avax.svg";
|
||||||
|
|
||||||
const useStyles = makeStyles((theme) => ({
|
const useStyles = makeStyles((theme) => ({
|
||||||
select: {
|
select: {
|
||||||
|
@ -23,10 +36,27 @@ const useStyles = makeStyles((theme) => ({
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const createTokenMenuItem = ({ name, logo }: TokenInfo, classes: any) => (
|
const getLogo = (name: string) => {
|
||||||
|
switch (name) {
|
||||||
|
case ETH_TOKEN_INFO.name:
|
||||||
|
return ethIcon;
|
||||||
|
case MATIC_TOKEN_INFO.name:
|
||||||
|
return polygonIcon;
|
||||||
|
case UST_TOKEN_INFO.name:
|
||||||
|
return terraIcon;
|
||||||
|
case AVAX_TOKEN_INFO.name:
|
||||||
|
return avaxIcon;
|
||||||
|
case BNB_TOKEN_INFO.name:
|
||||||
|
return bscIcon;
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const createTokenMenuItem = ({ name }: TokenInfo, classes: any) => (
|
||||||
<MenuItem key={name} value={name}>
|
<MenuItem key={name} value={name}>
|
||||||
<ListItemIcon className={classes.listItemIcon}>
|
<ListItemIcon className={classes.listItemIcon}>
|
||||||
<img src={logo} alt={name} className={classes.icon} />
|
<img src={getLogo(name)} alt={name} className={classes.icon} />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
<ListItemText>{name}</ListItemText>
|
<ListItemText>{name}</ListItemText>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
|
@ -11,14 +11,14 @@ import {
|
||||||
export const CROSSCHAINSWAP_GAS_PARAMETERS_EIP1559 = {
|
export const CROSSCHAINSWAP_GAS_PARAMETERS_EIP1559 = {
|
||||||
gasLimit: "694200",
|
gasLimit: "694200",
|
||||||
//maxFeePerGas: "250000000000",
|
//maxFeePerGas: "250000000000",
|
||||||
maxFeePerGas: "25420690000",
|
maxFeePerGas: "100420690000",
|
||||||
maxPriorityFeePerGas: "1690000000",
|
maxPriorityFeePerGas: "1690000000",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const CROSSCHAINSWAP_GAS_PARAMETERS_EVM = {
|
export const CROSSCHAINSWAP_GAS_PARAMETERS_EVM = {
|
||||||
gasLimit: "694200",
|
gasLimit: "694200",
|
||||||
//gasPrice: "250000000000",
|
//gasPrice: "250000000000",
|
||||||
gasPrice: "25420690000",
|
gasPrice: "20420690000",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EVM_EIP1559_CHAIN_IDS = [
|
export const EVM_EIP1559_CHAIN_IDS = [
|
||||||
|
|
|
@ -7,12 +7,6 @@ import {
|
||||||
CHAIN_ID_BSC,
|
CHAIN_ID_BSC,
|
||||||
} from "@certusone/wormhole-sdk";
|
} from "@certusone/wormhole-sdk";
|
||||||
|
|
||||||
import ethIcon from "../icons/eth.svg";
|
|
||||||
import polygonIcon from "../icons/polygon.svg";
|
|
||||||
import terraIcon from "../icons/terra.svg";
|
|
||||||
import bscIcon from "../icons/bsc.svg";
|
|
||||||
import avaxIcon from "../icons/avax.svg";
|
|
||||||
|
|
||||||
export const EVM_POLYGON_NETWORK_CHAIN_ID = 80001;
|
export const EVM_POLYGON_NETWORK_CHAIN_ID = 80001;
|
||||||
export const EVM_ETH_NETWORK_CHAIN_ID = 5;
|
export const EVM_ETH_NETWORK_CHAIN_ID = 5;
|
||||||
export const EVM_AVAX_NETWORK_CHAIN_ID = 43113;
|
export const EVM_AVAX_NETWORK_CHAIN_ID = 43113;
|
||||||
|
@ -23,7 +17,6 @@ export interface TokenInfo {
|
||||||
address: string;
|
address: string;
|
||||||
chainId: ChainId;
|
chainId: ChainId;
|
||||||
evmChainId: number | undefined;
|
evmChainId: number | undefined;
|
||||||
logo: string;
|
|
||||||
maxAmount: number;
|
maxAmount: number;
|
||||||
ustPairedAddress: string | undefined;
|
ustPairedAddress: string | undefined;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +26,7 @@ export const MATIC_TOKEN_INFO: TokenInfo = {
|
||||||
address: "0x9c3c9283d3e44854697cd22d3faa240cfb032889",
|
address: "0x9c3c9283d3e44854697cd22d3faa240cfb032889",
|
||||||
chainId: CHAIN_ID_POLYGON,
|
chainId: CHAIN_ID_POLYGON,
|
||||||
evmChainId: EVM_POLYGON_NETWORK_CHAIN_ID,
|
evmChainId: EVM_POLYGON_NETWORK_CHAIN_ID,
|
||||||
logo: polygonIcon,
|
//logo: polygonIcon,
|
||||||
maxAmount: 0.1,
|
maxAmount: 0.1,
|
||||||
ustPairedAddress: "0xe3a1c77e952b57b5883f6c906fc706fcc7d4392c",
|
ustPairedAddress: "0xe3a1c77e952b57b5883f6c906fc706fcc7d4392c",
|
||||||
};
|
};
|
||||||
|
@ -43,7 +36,7 @@ export const ETH_TOKEN_INFO: TokenInfo = {
|
||||||
address: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
address: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||||||
chainId: CHAIN_ID_ETH,
|
chainId: CHAIN_ID_ETH,
|
||||||
evmChainId: EVM_ETH_NETWORK_CHAIN_ID,
|
evmChainId: EVM_ETH_NETWORK_CHAIN_ID,
|
||||||
logo: ethIcon,
|
//logo: ethIcon,
|
||||||
maxAmount: 0.01,
|
maxAmount: 0.01,
|
||||||
ustPairedAddress: "0x36Ed51Afc79619b299b238898E72ce482600568a",
|
ustPairedAddress: "0x36Ed51Afc79619b299b238898E72ce482600568a",
|
||||||
};
|
};
|
||||||
|
@ -53,7 +46,7 @@ export const AVAX_TOKEN_INFO: TokenInfo = {
|
||||||
address: "0x1d308089a2d1ced3f1ce36b1fcaf815b07217be3",
|
address: "0x1d308089a2d1ced3f1ce36b1fcaf815b07217be3",
|
||||||
chainId: CHAIN_ID_AVAX,
|
chainId: CHAIN_ID_AVAX,
|
||||||
evmChainId: EVM_AVAX_NETWORK_CHAIN_ID,
|
evmChainId: EVM_AVAX_NETWORK_CHAIN_ID,
|
||||||
logo: avaxIcon,
|
//logo: avaxIcon,
|
||||||
maxAmount: 0.01,
|
maxAmount: 0.01,
|
||||||
ustPairedAddress: "0xe09ed38e5cd1014444846f62376ac88c5232cde9",
|
ustPairedAddress: "0xe09ed38e5cd1014444846f62376ac88c5232cde9",
|
||||||
};
|
};
|
||||||
|
@ -63,7 +56,7 @@ export const BNB_TOKEN_INFO: TokenInfo = {
|
||||||
address: "0xae13d989dac2f0debff460ac112a837c89baa7cd",
|
address: "0xae13d989dac2f0debff460ac112a837c89baa7cd",
|
||||||
chainId: CHAIN_ID_BSC,
|
chainId: CHAIN_ID_BSC,
|
||||||
evmChainId: EVM_BSC_NETWORK_CHAIN_ID,
|
evmChainId: EVM_BSC_NETWORK_CHAIN_ID,
|
||||||
logo: bscIcon,
|
//logo: bscIcon,
|
||||||
maxAmount: 0.01,
|
maxAmount: 0.01,
|
||||||
ustPairedAddress: "0x7b8eae1e85c8b189ee653d3f78733f4f788bb2c1",
|
ustPairedAddress: "0x7b8eae1e85c8b189ee653d3f78733f4f788bb2c1",
|
||||||
};
|
};
|
||||||
|
@ -73,7 +66,7 @@ export const UST_TOKEN_INFO: TokenInfo = {
|
||||||
address: "uusd",
|
address: "uusd",
|
||||||
chainId: CHAIN_ID_TERRA,
|
chainId: CHAIN_ID_TERRA,
|
||||||
evmChainId: undefined,
|
evmChainId: undefined,
|
||||||
logo: terraIcon,
|
//logo: terraIcon,
|
||||||
maxAmount: 10.0,
|
maxAmount: 10.0,
|
||||||
ustPairedAddress: undefined,
|
ustPairedAddress: undefined,
|
||||||
};
|
};
|
||||||
|
|
|
@ -576,22 +576,39 @@ export default function Home() {
|
||||||
<Typography variant="subtitle1">{relayerTimeoutString}</Typography>
|
<Typography variant="subtitle1">{relayerTimeoutString}</Typography>
|
||||||
)}
|
)}
|
||||||
<Typography variant="subtitle2" color="error">
|
<Typography variant="subtitle2" color="error">
|
||||||
WARNING: this is a Testnet release only
|
WARNING: this is a testnet release only
|
||||||
</Typography>
|
</Typography>
|
||||||
</Paper>
|
</Paper>
|
||||||
<div className={classes.spacer} />
|
<div className={classes.spacer} />
|
||||||
<Footer />
|
<Footer />
|
||||||
<Link href="https://goerli-faucet.slock.it/" style={{ margin: "5px" }}>
|
<Link href="https://goerli-faucet.slock.it/"
|
||||||
Goerli faucet
|
target="_blank" style={{ margin: "5px" }}>
|
||||||
|
Goerli Faucet
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="https://faucet.polygon.technology/"
|
href="https://faucet.polygon.technology/"
|
||||||
|
target="_blank"
|
||||||
style={{ margin: "5px" }}
|
style={{ margin: "5px" }}
|
||||||
>
|
>
|
||||||
Mumbai faucet
|
Mumbai Faucet
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="https://faucet.avax-test.network/"
|
||||||
|
target="_blank"
|
||||||
|
style={{ margin: "5px" }}
|
||||||
|
>
|
||||||
|
Fuji Faucet
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="https://testnet.binance.org/faucet-smart/"
|
||||||
|
target="_blank"
|
||||||
|
style={{ margin: "5px" }}
|
||||||
|
>
|
||||||
|
BSC Faucet
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="https://github.com/certusone/wormhole-nativeswap-example/"
|
href="https://github.com/certusone/wormhole-nativeswap-example/"
|
||||||
|
target="_blank"
|
||||||
style={{ margin: "5px" }}
|
style={{ margin: "5px" }}
|
||||||
>
|
>
|
||||||
NativeSwap GitHub
|
NativeSwap GitHub
|
||||||
|
|
|
@ -5,22 +5,22 @@ SPY_SERVICE_HOST=localhost:7073
|
||||||
|
|
||||||
EVM_CHAINS=ETH,BSC,POLYGON,AVAX
|
EVM_CHAINS=ETH,BSC,POLYGON,AVAX
|
||||||
|
|
||||||
ETH_PROVIDER=https://goerli.infura.io/v3/your_project_id
|
ETH_PROVIDER=https://goerli.infura.io/v3/YOUR_PROJECT_ID
|
||||||
ETH_TOKEN_BRIDGE_ADDRESS=0xF890982f9310df57d00f659cf4fd87e65adEd8d7
|
ETH_TOKEN_BRIDGE_ADDRESS=0xF890982f9310df57d00f659cf4fd87e65adEd8d7
|
||||||
ETH_CHAIN_ID=2
|
ETH_CHAIN_ID=2
|
||||||
ETH_ABI=V3
|
ETH_ABI=V3
|
||||||
|
|
||||||
BSC_PROVIDER=
|
BSC_PROVIDER="https://data-seed-prebsc-1-s1.binance.org:8545"
|
||||||
BSC_TOKEN_BRIDGE_ADDRESS=0x9dcF9D205C9De35334D646BeE44b2D2859712A09
|
BSC_TOKEN_BRIDGE_ADDRESS=0x9dcF9D205C9De35334D646BeE44b2D2859712A09
|
||||||
BSC_CHAIN_ID=4
|
BSC_CHAIN_ID=4
|
||||||
BSC_ABI=V2
|
BSC_ABI=V2
|
||||||
|
|
||||||
POLYGON_PROVIDER=https://polygon-mumbai.infura.io/v3/your_project_id
|
POLYGON_PROVIDER=https://polygon-mumbai.infura.io/v3/YOUR_PROJECT_ID
|
||||||
POLYGON_TOKEN_BRIDGE_ADDRESS=0x377D55a7928c046E18eEbb61977e714d2a76472a
|
POLYGON_TOKEN_BRIDGE_ADDRESS=0x377D55a7928c046E18eEbb61977e714d2a76472a
|
||||||
POLYGON_CHAIN_ID=5
|
POLYGON_CHAIN_ID=5
|
||||||
POLYGON_ABI=V2
|
POLYGON_ABI=V2
|
||||||
|
|
||||||
AVAX_PROVIDER=
|
AVAX_PROVIDER="https://api.avax-test.network/ext/bc/C/rpc"
|
||||||
AVAX_TOKEN_BRIDGE_ADDRESS=0x61E44E506Ca5659E6c0bba9b678586fA2d729756
|
AVAX_TOKEN_BRIDGE_ADDRESS=0x61E44E506Ca5659E6c0bba9b678586fA2d729756
|
||||||
AVAX_CHAIN_ID=6
|
AVAX_CHAIN_ID=6
|
||||||
AVAX_ABI=V2
|
AVAX_ABI=V2
|
||||||
|
|
Loading…
Reference in New Issue