Skip to content

Commit

Permalink
problem: incompatible with new sepolia testnet
Browse files Browse the repository at this point in the history
  • Loading branch information
splix committed Apr 23, 2024
1 parent 83a178c commit f3eb9de
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 74 deletions.
2 changes: 1 addition & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Chat with us via https://gitter.im/emeraldpay/community[Gitter]

== License

Copyright 2019 EmeraldPay, Inc
Copyright 2024 EmeraldPay, Ltd

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Expand Down
2 changes: 2 additions & 0 deletions proto/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,6 @@ enum BlockchainId {
CHAIN_GOERLI = 10005;
CHAIN_ROPSTEN = 10006;
CHAIN_RINKEBY = 10007;
CHAIN_HOLESKY = 10008;
CHAIN_SEPOLIA = 10009;
}
29 changes: 24 additions & 5 deletions src/blockchain/chains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ pub enum EthereumChainId {
Kovan,
/// Goerli Testnet
Goerli,
Custom(u8)
Holesky,
Sepolia,
Custom(u64)
}

#[derive(Clone, Copy, PartialEq, Eq, Debug)]
Expand All @@ -28,14 +30,16 @@ pub enum Blockchain {
Ethereum = 100,
EthereumClassic = 101,
KovanTestnet = 10002,
GoerliTestnet = 10005
GoerliTestnet = 10005,
HoleskyTestnet = 10008,
SepoliaTestnet = 10009,
}

impl Blockchain {
pub fn get_type(&self) -> BlockchainType {
match self {
Blockchain::BitcoinTestnet | Blockchain::Bitcoin => BlockchainType::Bitcoin,
Blockchain::Ethereum | Blockchain::EthereumClassic | Blockchain::KovanTestnet | Blockchain::GoerliTestnet => {
Blockchain::Ethereum | Blockchain::EthereumClassic | Blockchain::KovanTestnet | Blockchain::GoerliTestnet | Blockchain::HoleskyTestnet | Blockchain::SepoliaTestnet => {
BlockchainType::Ethereum
}
}
Expand Down Expand Up @@ -64,6 +68,8 @@ impl From<Blockchain> for EthereumChainId {
Blockchain::EthereumClassic => EthereumChainId::EthereumClassic,
Blockchain::KovanTestnet => EthereumChainId::Kovan,
Blockchain::GoerliTestnet => EthereumChainId::Goerli,
Blockchain::HoleskyTestnet => EthereumChainId::Holesky,
Blockchain::SepoliaTestnet => EthereumChainId::Sepolia,
_ => panic!("not an ethereum blockchain"),
}
}
Expand All @@ -78,6 +84,8 @@ impl TryFrom<EthereumChainId> for Blockchain {
EthereumChainId::EthereumClassic => Ok(Blockchain::EthereumClassic),
EthereumChainId::Kovan => Ok(Blockchain::KovanTestnet),
EthereumChainId::Goerli => Ok(Blockchain::GoerliTestnet),
EthereumChainId::Holesky => Ok(Blockchain::HoleskyTestnet),
EthereumChainId::Sepolia => Ok(Blockchain::SepoliaTestnet),
_ => panic!("custom ethereum blockchain"),
}
}
Expand All @@ -94,6 +102,8 @@ impl TryFrom<u32> for Blockchain {
101 => Ok(Blockchain::EthereumClassic),
10002 => Ok(Blockchain::KovanTestnet),
10005 => Ok(Blockchain::GoerliTestnet),
10008 => Ok(Blockchain::HoleskyTestnet),
10009 => Ok(Blockchain::SepoliaTestnet),
_ => Err(()),
}
}
Expand All @@ -117,20 +127,24 @@ impl FromStr for EthereumChainId {
Ok(EthereumChainId::EthereumClassic)
}
"goerli" => Ok(EthereumChainId::Goerli),
"holesky" => Ok(EthereumChainId::Holesky),
"sepolia" => Ok(EthereumChainId::Sepolia),
_ => Err(()),
}
}
}

impl EthereumChainId {
/// chain_id for current Chain
pub fn as_chainid(&self) -> u8 {
pub fn as_chainid(&self) -> u64 {
match self {
EthereumChainId::Ethereum => 1,
EthereumChainId::Kovan => 42,
EthereumChainId::EthereumClassic => 61,
EthereumChainId::Goerli => 5,
EthereumChainId::Custom(v) => *v
EthereumChainId::Holesky => 17000,
EthereumChainId::Sepolia => 11155111,
EthereumChainId::Custom(v) => *v,
}
}
}
Expand Down Expand Up @@ -176,6 +190,11 @@ mod tests {
Blockchain::try_from(Into::<u32>::into(Blockchain::GoerliTestnet)).unwrap()
);

assert_eq!(
Blockchain::SepoliaTestnet,
Blockchain::try_from(Into::<u32>::into(Blockchain::SepoliaTestnet)).unwrap()
);

assert_eq!(
Blockchain::Bitcoin,
Blockchain::try_from(Into::<u32>::into(Blockchain::Bitcoin)).unwrap()
Expand Down
24 changes: 17 additions & 7 deletions src/blockchain/ethereum/signature.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use secp256k1::{
All, ecdsa::{RecoverableSignature, RecoveryId},
};
use std::{convert::TryFrom, fmt, ops, str};
use std::fmt::Display;
use std::str::FromStr;
use rlp::RlpStream;
use crate::chains::EthereumChainId;
Expand Down Expand Up @@ -101,10 +102,14 @@ impl EthereumBasicSignature {
/// Used to find a signature that can verify such EIP-155 transaction.
pub fn recover_eip155(&self, chain_id: EthereumChainId) -> EthereumBasicSignature {
if self.v == 27 || self.v == 28 {
return self.clone()
return self.clone()
}
if chain_id.as_chainid() > 127 {
// Vault is supposed to use EIP-1559 for transactions on modern chains. Legacy chains do not have large chainId.
panic!("Large chainId are not supported with legacy signatures")
}
EthereumBasicSignature {
v: self.v - chain_id.as_chainid() * 2 - 35 + 27,
v: self.v - (chain_id.as_chainid() as u8) * 2 - 35 + 27,
r: self.r,
s: self.s,
}
Expand All @@ -113,9 +118,13 @@ impl EthereumBasicSignature {
///
/// Convert (or ensure) the signature to EIP-155 format which includes chain_id as part of the V
pub fn to_eip155(&self, chain_id: EthereumChainId) -> EthereumBasicSignature {
if chain_id.as_chainid() > 127 {
// Vault is supposed to use EIP-1559 for transactions on modern chains. Legacy chains do not have large chainId.
panic!("Large chainId are not supported with legacy signatures")
}
if self.v == 27 || self.v == 28 {
EthereumBasicSignature {
v: self.v + chain_id.as_chainid() * 2 + 35 - 27,
v: self.v + (chain_id.as_chainid() as u8) * 2 + 35 - 27,
r: self.r,
s: self.s,
}
Expand Down Expand Up @@ -182,14 +191,15 @@ impl Into<(u8, [u8; 32], [u8; 32])> for EthereumBasicSignature {
}
}

impl ToString for EthereumBasicSignature {
fn to_string(&self) -> String {
format!(
impl Display for EthereumBasicSignature {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let str = format!(
"0x{}{}{:x}",
hex::encode(self.r),
hex::encode(self.s),
self.v,
)
);
write!(f, "{}", str)
}
}

Expand Down
39 changes: 12 additions & 27 deletions src/blockchain/ethereum/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -370,43 +370,28 @@ mod tests {
}

#[test]
fn should_sign_transaction_for_testnet() {
let tx = EthereumLegacyTransaction {
chain_id: EthereumChainId::Kovan,
nonce: 1048585,
gas_price: /* 20000000000 */
BigUint::from_str_radix("00000000000000000000000000000\
000000000000000000000000004a817c800", 16).unwrap(),
gas_limit: 21000,
to: Some("0x163b454d1ccdd0a12e88341b12afb2c98044c599"
fn should_sign_transaction_for_sepolia_testnet() {
let tx = EthereumEIP1559Transaction {
chain_id: EthereumChainId::Sepolia,
nonce: 0x123,
max_gas_price: BigUint::from_str_radix("4A817C800", 16).unwrap(),
priority_gas_price: BigUint::from_str_radix("3B9ACA00", 16).unwrap(),
gas_limit: 0x249F0,
to: Some("0x3535353535353535353535353535353535353535"
.parse::<EthereumAddress>()
.unwrap()),
value: /* 562 ETC */
BigUint::from_str_radix("000000000000000000000000000000\
00000000000000001e7751166579880000", 16).unwrap(),
value: BigUint::from_str_radix("DE0B6B3A7640000", 16).unwrap(), // 1 ether
data: Vec::new(),
access: vec![]
};

let pk = EthereumPrivateKey(to_32bytes(
"28b469dc4b039ff63fcd4cb708c668545e644cb25f21df6920aac20e4bc743f7",
"4646464646464646464646464646464646464646464646464646464646464646",
));

assert_eq!(
hex::encode(tx.sign(pk).unwrap()),
// verified with MEW
"f870\
83\
100009\
85\
04a817c800\
82\
5208\
94\
163b454d1ccdd0a12e88341b12afb2c98044c599\
89\
1e7751166579880000\
8078a0bc2a17e673bcd60b621f02a2c2d6546a9e1f0c1a67d0e0a0acfcd3fd171a38\
30a0443b722a14da921f67a0b5aad9dd321483355b32d1fd3f01fb615be055416a58"
"02f87983aa36a7820123843b9aca008504a817c800830249f0943535353535353535353535353535353535353535880de0b6b3a764000080c001a0ea3705d1137256ba5078c2d97a8886ea78e3c9ea4d3ffaa4985220705fdf02e1a00f05771ac81ddb47283f592790db1205c6b321c3cdc5164b16d89898d0802647"
);
}

Expand Down
79 changes: 45 additions & 34 deletions src/proto/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,8 @@ pub enum BlockchainId {
CHAIN_GOERLI = 10005,
CHAIN_ROPSTEN = 10006,
CHAIN_RINKEBY = 10007,
CHAIN_HOLESKY = 10008,
CHAIN_SEPOLIA = 10009,
}

impl ::protobuf::ProtobufEnum for BlockchainId {
Expand All @@ -307,6 +309,8 @@ impl ::protobuf::ProtobufEnum for BlockchainId {
10005 => ::std::option::Option::Some(BlockchainId::CHAIN_GOERLI),
10006 => ::std::option::Option::Some(BlockchainId::CHAIN_ROPSTEN),
10007 => ::std::option::Option::Some(BlockchainId::CHAIN_RINKEBY),
10008 => ::std::option::Option::Some(BlockchainId::CHAIN_HOLESKY),
10009 => ::std::option::Option::Some(BlockchainId::CHAIN_SEPOLIA),
_ => ::std::option::Option::None
}
}
Expand All @@ -325,6 +329,8 @@ impl ::protobuf::ProtobufEnum for BlockchainId {
BlockchainId::CHAIN_GOERLI,
BlockchainId::CHAIN_ROPSTEN,
BlockchainId::CHAIN_RINKEBY,
BlockchainId::CHAIN_HOLESKY,
BlockchainId::CHAIN_SEPOLIA,
];
values
}
Expand Down Expand Up @@ -357,45 +363,46 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x01\x20\x01(\x0e2\x17.emerald.vault.FileTypeR\x08fileType\x12\x0e\n\x02\
id\x18\x02\x20\x01(\x0cR\x02id*X\n\x08FileType\x12\x10\n\x0cFILE_UNKNOWN\
\x10\0\x12\x0f\n\x0bFILE_WALLET\x10\x01\x12\x0b\n\x07FILE_PK\x10\x02\x12\
\r\n\tFILE_SEED\x10\x03\x12\r\n\tFILE_BOOK\x10\x04*\x86\x02\n\x0cBlockch\
\r\n\tFILE_SEED\x10\x03\x12\r\n\tFILE_BOOK\x10\x04*\xae\x02\n\x0cBlockch\
ainId\x12\x15\n\x11CHAIN_UNSPECIFIED\x10\0\x12\x11\n\rCHAIN_BITCOIN\x10\
\x01\x12\x12\n\x0eCHAIN_ETHEREUM\x10d\x12\x1a\n\x16CHAIN_ETHEREUM_CLASSI\
C\x10e\x12\x10\n\x0bCHAIN_MATIC\x10\xea\x07\x12\x0e\n\tCHAIN_RSK\x10\xeb\
\x07\x12\x11\n\x0cCHAIN_MORDEN\x10\x91N\x12\x10\n\x0bCHAIN_KOVAN\x10\x92\
N\x12\x1a\n\x15CHAIN_TESTNET_BITCOIN\x10\x93N\x12\x11\n\x0cCHAIN_GOERLI\
\x10\x95N\x12\x12\n\rCHAIN_ROPSTEN\x10\x96N\x12\x12\n\rCHAIN_RINKEBY\x10\
\x97NJ\xf9\x08\n\x06\x12\x04\0\0&\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\
\x08\n\x01\x02\x12\x03\x01\0\x16\n\n\n\x02\x04\0\x12\x04\x03\0\x06\x01\n\
\n\n\x03\x04\0\x01\x12\x03\x03\x08\x0c\n\x0b\n\x04\x04\0\x02\0\x12\x03\
\x04\x04\x1b\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x04\x04\x0c\n\x0c\n\x05\
\x04\0\x02\0\x01\x12\x03\x04\r\x16\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\
\x04\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x05\x04\x11\n\x0c\n\x05\
\x04\0\x02\x01\x05\x12\x03\x05\x04\t\n\x0c\n\x05\x04\0\x02\x01\x01\x12\
\x03\x05\n\x0c\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x05\x0f\x10\n\n\n\
\x02\x05\0\x12\x04\x08\0\x0e\x01\n\n\n\x03\x05\0\x01\x12\x03\x08\x05\r\n\
\x0b\n\x04\x05\0\x02\0\x12\x03\t\x04\x15\n\x0c\n\x05\x05\0\x02\0\x01\x12\
\x03\t\x04\x10\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\t\x13\x14\n\x0b\n\x04\
\x05\0\x02\x01\x12\x03\n\x04\x14\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\n\
\x04\x0f\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\n\x12\x13\n\x0b\n\x04\x05\
\0\x02\x02\x12\x03\x0b\x04\x10\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\x0b\
\x04\x0b\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x0b\x0e\x0f\n\x0b\n\x04\
\x05\0\x02\x03\x12\x03\x0c\x04\x12\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\
\x0c\x04\r\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\x0c\x10\x11\n\x0b\n\x04\
\x05\0\x02\x04\x12\x03\r\x04\x12\n\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\r\
\x04\r\n\x0c\n\x05\x05\0\x02\x04\x02\x12\x03\r\x10\x11\n\n\n\x02\x05\x01\
\x12\x04\x10\0&\x01\n\n\n\x03\x05\x01\x01\x12\x03\x10\x05\x11\n\x0b\n\
\x04\x05\x01\x02\0\x12\x03\x11\x04\x1a\n\x0c\n\x05\x05\x01\x02\0\x01\x12\
\x03\x11\x04\x15\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03\x11\x18\x19\n\x1e\
\n\x04\x05\x01\x02\x01\x12\x03\x13\x04\x16\"\x11\x20CHAIN_GRIN\x20=\x202\
;\n\n\x0c\n\x05\x05\x01\x02\x01\x01\x12\x03\x13\x04\x11\n\x0c\n\x05\x05\
\x01\x02\x01\x02\x12\x03\x13\x14\x15\n\x0b\n\x04\x05\x01\x02\x02\x12\x03\
\x16\x04\x19\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03\x16\x04\x12\n\x0c\n\
\x05\x05\x01\x02\x02\x02\x12\x03\x16\x15\x18\n\x0b\n\x04\x05\x01\x02\x03\
\x12\x03\x17\x04!\n\x0c\n\x05\x05\x01\x02\x03\x01\x12\x03\x17\x04\x1a\n\
\x0c\n\x05\x05\x01\x02\x03\x02\x12\x03\x17\x1d\x20\n\x87\x01\n\x04\x05\
\x01\x02\x04\x12\x03\x1b\x04\x17\x1aI\x20Sidechains\x20and\x20state\x20c\
hannels\x20start\x20with\x201_000\n\x20CHAIN_LIGHTNING\x20=\x201001;\n\"\
/\x20Matic\x20PoS\x20Ethereum\x20sidechain\x20based\x20on\x20Polygon\n\n\
\x97N\x12\x12\n\rCHAIN_HOLESKY\x10\x98N\x12\x12\n\rCHAIN_SEPOLIA\x10\x99\
NJ\xcb\t\n\x06\x12\x04\0\0(\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\
\x01\x02\x12\x03\x01\0\x16\n\n\n\x02\x04\0\x12\x04\x03\0\x06\x01\n\n\n\
\x03\x04\0\x01\x12\x03\x03\x08\x0c\n\x0b\n\x04\x04\0\x02\0\x12\x03\x04\
\x04\x1b\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x04\x04\x0c\n\x0c\n\x05\x04\
\0\x02\0\x01\x12\x03\x04\r\x16\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x04\
\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x05\x04\x11\n\x0c\n\x05\x04\0\
\x02\x01\x05\x12\x03\x05\x04\t\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x05\
\n\x0c\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x05\x0f\x10\n\n\n\x02\x05\0\
\x12\x04\x08\0\x0e\x01\n\n\n\x03\x05\0\x01\x12\x03\x08\x05\r\n\x0b\n\x04\
\x05\0\x02\0\x12\x03\t\x04\x15\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\t\x04\
\x10\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\t\x13\x14\n\x0b\n\x04\x05\0\x02\
\x01\x12\x03\n\x04\x14\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\n\x04\x0f\n\
\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\n\x12\x13\n\x0b\n\x04\x05\0\x02\x02\
\x12\x03\x0b\x04\x10\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\x0b\x04\x0b\n\
\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x0b\x0e\x0f\n\x0b\n\x04\x05\0\x02\
\x03\x12\x03\x0c\x04\x12\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\x0c\x04\r\
\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\x0c\x10\x11\n\x0b\n\x04\x05\0\x02\
\x04\x12\x03\r\x04\x12\n\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\r\x04\r\n\
\x0c\n\x05\x05\0\x02\x04\x02\x12\x03\r\x10\x11\n\n\n\x02\x05\x01\x12\x04\
\x10\0(\x01\n\n\n\x03\x05\x01\x01\x12\x03\x10\x05\x11\n\x0b\n\x04\x05\
\x01\x02\0\x12\x03\x11\x04\x1a\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03\x11\
\x04\x15\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03\x11\x18\x19\n\x1e\n\x04\
\x05\x01\x02\x01\x12\x03\x13\x04\x16\"\x11\x20CHAIN_GRIN\x20=\x202;\n\n\
\x0c\n\x05\x05\x01\x02\x01\x01\x12\x03\x13\x04\x11\n\x0c\n\x05\x05\x01\
\x02\x01\x02\x12\x03\x13\x14\x15\n\x0b\n\x04\x05\x01\x02\x02\x12\x03\x16\
\x04\x19\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03\x16\x04\x12\n\x0c\n\x05\
\x05\x01\x02\x02\x02\x12\x03\x16\x15\x18\n\x0b\n\x04\x05\x01\x02\x03\x12\
\x03\x17\x04!\n\x0c\n\x05\x05\x01\x02\x03\x01\x12\x03\x17\x04\x1a\n\x0c\
\n\x05\x05\x01\x02\x03\x02\x12\x03\x17\x1d\x20\n\x87\x01\n\x04\x05\x01\
\x02\x04\x12\x03\x1b\x04\x17\x1aI\x20Sidechains\x20and\x20state\x20chann\
els\x20start\x20with\x201_000\n\x20CHAIN_LIGHTNING\x20=\x201001;\n\"/\
\x20Matic\x20PoS\x20Ethereum\x20sidechain\x20based\x20on\x20Polygon\n\n\
\x0c\n\x05\x05\x01\x02\x04\x01\x12\x03\x1b\x04\x0f\n\x0c\n\x05\x05\x01\
\x02\x04\x02\x12\x03\x1b\x12\x16\n1\n\x04\x05\x01\x02\x05\x12\x03\x1c\
\x04\x15\"$\x20RSK\x20sidechain,\x20https://www.rsk.co/\n\n\x0c\n\x05\
Expand All @@ -413,7 +420,11 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x12\x03$\x04\x1a\n\x0c\n\x05\x05\x01\x02\n\x01\x12\x03$\x04\x11\n\x0c\
\n\x05\x05\x01\x02\n\x02\x12\x03$\x14\x19\n\x0b\n\x04\x05\x01\x02\x0b\
\x12\x03%\x04\x1a\n\x0c\n\x05\x05\x01\x02\x0b\x01\x12\x03%\x04\x11\n\x0c\
\n\x05\x05\x01\x02\x0b\x02\x12\x03%\x14\x19b\x06proto3\
\n\x05\x05\x01\x02\x0b\x02\x12\x03%\x14\x19\n\x0b\n\x04\x05\x01\x02\x0c\
\x12\x03&\x04\x1a\n\x0c\n\x05\x05\x01\x02\x0c\x01\x12\x03&\x04\x11\n\x0c\
\n\x05\x05\x01\x02\x0c\x02\x12\x03&\x14\x19\n\x0b\n\x04\x05\x01\x02\r\
\x12\x03'\x04\x1a\n\x0c\n\x05\x05\x01\x02\r\x01\x12\x03'\x04\x11\n\x0c\n\
\x05\x05\x01\x02\r\x02\x12\x03'\x14\x19b\x06proto3\
";

static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
Expand Down
2 changes: 2 additions & 0 deletions src/storage/watch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,8 @@ impl WatchLoop {
"Ethereum" => vec![Blockchain::Ethereum],
"Ethereum Classic" => vec![Blockchain::EthereumClassic],
"Goerli Testnet" => vec![Blockchain::GoerliTestnet],
"Holesky Testnet" => vec![Blockchain::HoleskyTestnet],
"Sepolia Testnet" => vec![Blockchain::SepoliaTestnet],
"Bitcoin" => vec![Blockchain::Bitcoin],
"Bitcoin Test" => vec![Blockchain::BitcoinTestnet],
_ => vec![]
Expand Down

0 comments on commit f3eb9de

Please sign in to comment.