add support for polygon and avalanche (#606)
* add support for polygon and avalanche, include the block explorers * add multicall addresses for polygon
This commit is contained in:
parent
1f9cd6b6c8
commit
1d65c9394f
|
@ -1,2 +1,3 @@
|
||||||
/target
|
/target
|
||||||
.vscode
|
.vscode
|
||||||
|
/.envrc
|
||||||
|
|
|
@ -27,6 +27,8 @@ pub static ADDRESS_BOOK: Lazy<HashMap<U256, Address>> = Lazy::new(|| {
|
||||||
(Chain::Goerli.into(), decode_address("77dca2c955b15e9de4dbbcf1246b4b85b651e50e")),
|
(Chain::Goerli.into(), decode_address("77dca2c955b15e9de4dbbcf1246b4b85b651e50e")),
|
||||||
(Chain::Kovan.into(), decode_address("2cc8688c5f75e365aaeeb4ea8d6a480405a48d2a")),
|
(Chain::Kovan.into(), decode_address("2cc8688c5f75e365aaeeb4ea8d6a480405a48d2a")),
|
||||||
(Chain::XDai.into(), decode_address("b5b692a88bdfc81ca69dcb1d924f59f0413a602a")),
|
(Chain::XDai.into(), decode_address("b5b692a88bdfc81ca69dcb1d924f59f0413a602a")),
|
||||||
|
(Chain::Polygon.into(), decode_address("11ce4B23bD875D7F5C6a31084f55fDe1e9A87507")),
|
||||||
|
(Chain::PolygonMumbai.into(), decode_address("08411ADd0b5AA8ee47563b146743C13b3556c9Cc")),
|
||||||
]
|
]
|
||||||
.into()
|
.into()
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,6 +10,10 @@ pub enum Chain {
|
||||||
Goerli,
|
Goerli,
|
||||||
Kovan,
|
Kovan,
|
||||||
XDai,
|
XDai,
|
||||||
|
Polygon,
|
||||||
|
PolygonMumbai,
|
||||||
|
Avalanche,
|
||||||
|
AvalancheFuji,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Chain {
|
impl fmt::Display for Chain {
|
||||||
|
@ -27,6 +31,10 @@ impl From<Chain> for u32 {
|
||||||
Chain::Goerli => 5,
|
Chain::Goerli => 5,
|
||||||
Chain::Kovan => 42,
|
Chain::Kovan => 42,
|
||||||
Chain::XDai => 100,
|
Chain::XDai => 100,
|
||||||
|
Chain::Polygon => 137,
|
||||||
|
Chain::PolygonMumbai => 80001,
|
||||||
|
Chain::Avalanche => 43114,
|
||||||
|
Chain::AvalancheFuji => 43113,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,21 @@ impl Client {
|
||||||
Url::parse(&format!("https://{}.etherscan.io", chain_name)),
|
Url::parse(&format!("https://{}.etherscan.io", chain_name)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Chain::Polygon => (
|
||||||
|
Url::parse("https://api.polygonscan.com/api"),
|
||||||
|
Url::parse("https://polygonscan.com"),
|
||||||
|
),
|
||||||
|
Chain::PolygonMumbai => (
|
||||||
|
Url::parse("https://api-testnet.polygonscan.com/api"),
|
||||||
|
Url::parse("https://mumbai.polygonscan.com"),
|
||||||
|
),
|
||||||
|
Chain::Avalanche => {
|
||||||
|
(Url::parse("https://api.snowtrace.io/api"), Url::parse("https://snowtrace.io"))
|
||||||
|
}
|
||||||
|
Chain::AvalancheFuji => (
|
||||||
|
Url::parse("https://api-testnet.snowtrace.io/api"),
|
||||||
|
Url::parse("https://testnet.snowtrace.io"),
|
||||||
|
),
|
||||||
chain => return Err(EtherscanError::ChainNotSupported(chain)),
|
chain => return Err(EtherscanError::ChainNotSupported(chain)),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54,7 +69,15 @@ impl Client {
|
||||||
/// Create a new client with the correct endpoints based on the chain and API key
|
/// Create a new client with the correct endpoints based on the chain and API key
|
||||||
/// from ETHERSCAN_API_KEY environment variable
|
/// from ETHERSCAN_API_KEY environment variable
|
||||||
pub fn new_from_env(chain: Chain) -> Result<Self> {
|
pub fn new_from_env(chain: Chain) -> Result<Self> {
|
||||||
Self::new(chain, std::env::var("ETHERSCAN_API_KEY")?)
|
let api_key = match chain {
|
||||||
|
Chain::Avalanche | Chain::AvalancheFuji => std::env::var("SNOWTRACE_API_KEY")?,
|
||||||
|
Chain::Polygon | Chain::PolygonMumbai => std::env::var("POLYGONSCAN_API_KEY")?,
|
||||||
|
Chain::Mainnet | Chain::Ropsten | Chain::Kovan | Chain::Rinkeby | Chain::Goerli => {
|
||||||
|
std::env::var("ETHERSCAN_API_KEY")?
|
||||||
|
}
|
||||||
|
Chain::XDai => String::default(),
|
||||||
|
};
|
||||||
|
Self::new(chain, api_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn etherscan_api_url(&self) -> &Url {
|
pub fn etherscan_api_url(&self) -> &Url {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
# shellcheck shell=bash
|
||||||
# run all examples
|
# run all examples
|
||||||
for file in examples/*.rs; do
|
for file in examples/*.rs; do
|
||||||
name=`echo $file | cut -f 1 -d '.'`
|
name="$(echo "$file" | cut -f 1 -d '.')"
|
||||||
cargo r -p ethers --example `basename $name`
|
cargo r -p ethers --example "$(basename "$name")"
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue