|
13 | 13 | ) |
14 | 14 | from eth_utils.toolz import merge |
15 | 15 |
|
| 16 | +import validators |
| 17 | + |
16 | 18 | from eth_keys.constants import SECPK1_N |
17 | 19 |
|
18 | 20 | from dotenv import load_dotenv |
|
21 | 23 |
|
22 | 24 |
|
23 | 25 | def validate_rpc_url(url: Any) -> str: |
24 | | - if not isinstance(url, str): |
| 26 | + if not validators.url(url): |
25 | 27 | raise ValueError(f"{url} is not a valid RPC url") |
26 | 28 | return url |
27 | 29 |
|
28 | 30 |
|
29 | | -def validate_non_negative_integer(number: Any) -> float: |
| 31 | +def validate_non_negative_integer(number: Any) -> int: |
| 32 | + if str(number) != str(int(number)): |
| 33 | + raise ValueError(f"{number} is not a valid integer") |
30 | 34 | if not isinstance(number, int): |
31 | | - raise ValueError(f"{number} is not an integer") |
| 35 | + number = int(number) |
32 | 36 | if number < 0: |
33 | 37 | raise ValueError(f"{number} must be greater than or equal zero") |
34 | | - return int(number) |
| 38 | + return number |
35 | 39 |
|
36 | 40 |
|
37 | 41 | def validate_positive_float(number: Any) -> float: |
38 | | - if not isinstance(number, (int, float)): |
39 | | - raise ValueError(f"{number} is neither integer nor float") |
| 42 | + if str(number) != str(float(number)) and str(number) != str(int(number)): |
| 43 | + raise ValueError(f"{number} is not a valid float") |
| 44 | + if not isinstance(number, float): |
| 45 | + number = float(number) |
40 | 46 | if number <= 0: |
41 | 47 | raise ValueError(f"{number} must be positive") |
42 | | - return float(number) |
| 48 | + return number |
43 | 49 |
|
44 | 50 |
|
45 | 51 | def validate_checksum_address(address: Any) -> bytes: |
@@ -67,32 +73,38 @@ def validate_private_key(private_key: Any) -> bytes: |
67 | 73 |
|
68 | 74 | REQUIRED_CONFIG_ENTRIES = [ |
69 | 75 | "home_rpc_url", |
70 | | - "foreign_rpc_url", |
71 | | - "token_contract_address", |
72 | 76 | "home_bridge_contract_address", |
| 77 | + "foreign_rpc_url", |
| 78 | + "foreign_chain_token_contract_address", |
73 | 79 | "foreign_bridge_contract_address", |
74 | 80 | "validator_private_key", |
75 | 81 | ] |
76 | 82 |
|
77 | 83 | OPTIONAL_CONFIG_ENTRIES_WITH_DEFAULTS: Dict[str, Any] = { |
| 84 | + "home_rpc_timeout": 180, |
| 85 | + "home_chain_gas_price": 10 * 1000000000, # Gas price is in GWei |
78 | 86 | "home_chain_max_reorg_depth": 1, |
| 87 | + "home_chain_event_fetch_start_block_number": 0, |
| 88 | + "foreign_rpc_timeout": 180, |
79 | 89 | "foreign_chain_max_reorg_depth": 10, |
80 | 90 | "foreign_chain_event_poll_interval": 5, |
81 | 91 | "foreign_chain_event_fetch_start_block_number": 0, |
82 | | - "home_chain_event_fetch_start_block_number": 0, |
83 | 92 | } |
84 | 93 |
|
85 | 94 | CONFIG_ENTRY_VALIDATORS = { |
86 | 95 | "home_rpc_url": validate_rpc_url, |
87 | | - "foreign_rpc_url": validate_rpc_url, |
88 | | - "token_contract_address": validate_checksum_address, |
89 | | - "home_bridge_contract_address": validate_checksum_address, |
90 | | - "foreign_bridge_contract_address": validate_checksum_address, |
| 96 | + "home_rpc_timeout": validate_non_negative_integer, |
| 97 | + "home_chain_gas_price": validate_non_negative_integer, |
91 | 98 | "home_chain_max_reorg_depth": validate_non_negative_integer, |
| 99 | + "home_bridge_contract_address": validate_checksum_address, |
| 100 | + "home_chain_event_fetch_start_block_number": validate_non_negative_integer, |
| 101 | + "foreign_rpc_url": validate_rpc_url, |
| 102 | + "foreign_rpc_timeout": validate_non_negative_integer, |
92 | 103 | "foreign_chain_max_reorg_depth": validate_non_negative_integer, |
93 | | - "foreign_chain_event_poll_interval": validate_positive_float, |
| 104 | + "foreign_chain_event_poll_interval": validate_non_negative_integer, |
| 105 | + "foreign_chain_token_contract_address": validate_checksum_address, |
| 106 | + "foreign_bridge_contract_address": validate_checksum_address, |
94 | 107 | "foreign_chain_event_fetch_start_block_number": validate_non_negative_integer, |
95 | | - "home_chain_event_fetch_start_block_number": validate_non_negative_integer, |
96 | 108 | "validator_private_key": validate_private_key, |
97 | 109 | } |
98 | 110 |
|
|
0 commit comments