diff --git a/Russian/Network/ЗАЩИТА_СЕТИ_MONTANA.md b/Russian/Network/ЗАЩИТА_СЕТИ_MONTANA.md index ee54d05..1a73e72 100644 --- a/Russian/Network/ЗАЩИТА_СЕТИ_MONTANA.md +++ b/Russian/Network/ЗАЩИТА_СЕТИ_MONTANA.md @@ -37,7 +37,7 @@ Montana Protocol функционирует на 5 географически р | 3 | spb | 188.225.58.98 | RU-NW | MIRROR 3 | | 4 | novosibirsk | 147.45.147.247 | RU-Siberia | MIRROR 4 | -**Исходный код:** [leader_election.py:39-46](Bot/leader_election.py#L39-L46) +**Исходный код:** [leader_election.py:39-46](../Bot/leader_election.py#L39-L46) ```python BOT_CHAIN: List[Tuple[str, str]] = [ @@ -65,7 +65,7 @@ MemoryMax=512M MemoryHigh=400M ``` -**Исходный код:** [junona.service](Bot/junona.service) +**Исходный код:** junona.service --- @@ -85,7 +85,7 @@ Montana Protocol использует постквантовый алгорит | Signature | 3309 байт | | Адрес | `mt` + SHA256(pubkey)[:20].hex() = 42 символа | -**Исходный код:** [node_crypto.py](Bot/node_crypto.py) +**Исходный код:** [node_crypto.py](../Bot/node_crypto.py) ### 2.2 Формат адреса @@ -117,7 +117,7 @@ def am_i_the_master(self) -> bool: return False ``` -**Исходный код:** [leader_election.py:326-349](Bot/leader_election.py#L326-L349) +**Исходный код:** [leader_election.py:326-349](../Bot/leader_election.py#L326-L349) ### 3.2 Health Check @@ -134,7 +134,7 @@ def check_node_health(ip: str) -> bool: return False ``` -**Исходный код:** [leader_election.py:102-134](Bot/leader_election.py#L102-L134) +**Исходный код:** [leader_election.py:102-134](../Bot/leader_election.py#L102-L134) ### 3.3 Интервалы проверки @@ -164,7 +164,7 @@ class AttackDetector: self.under_attack = False ``` -**Исходный код:** [leader_election.py:190-232](Bot/leader_election.py#L190-L232) +**Исходный код:** [leader_election.py:190-232](../Bot/leader_election.py#L190-L232) ### 4.2 Метрики обнаружения атак @@ -200,7 +200,7 @@ def shuffle_chain_on_attack(self, external_trigger: bool = False): self.chain_shuffled = True ``` -**Исходный код:** [leader_election.py:395-430](Bot/leader_election.py#L395-L430) +**Исходный код:** [leader_election.py:395-430](../Bot/leader_election.py#L395-L430) --- @@ -222,7 +222,7 @@ class AtlantGuard: self.degraded_count = 0 # Счётчик высоких значений подряд ``` -**Исходный код:** [junomontanaagibot.py:709-754](Bot/junomontanaagibot.py#L709-L754) +**Исходный код:** junomontanaagibot.py:709-754 ### 5.2 Health Check с защитой от ложных срабатываний @@ -249,7 +249,7 @@ def health_check(self) -> Dict[str, Any]: self.degraded_count = 0 ``` -**Исходный код:** [junomontanaagibot.py:1001-1051](Bot/junomontanaagibot.py#L1001-L1051) +**Исходный код:** junomontanaagibot.py:1001-1051 ### 5.3 Пороги AtlantGuard @@ -269,7 +269,7 @@ MAX_NODE_SYNCS_PER_MINUTE = 10 # Синхронизаций узла/мин MAX_API_CALLS_PER_MINUTE = 100 # API вызовов/мин на endpoint ``` -**Исходный код:** [junomontanaagibot.py:734-738](Bot/junomontanaagibot.py#L734-L738) +**Исходный код:** junomontanaagibot.py:734-738 --- @@ -290,7 +290,7 @@ Git-синхронизация состояния сети каждые 12 се Повтор ``` -**Исходный код:** [breathing_sync.py](Bot/breathing_sync.py) +**Исходный код:** [breathing_sync.py](../Bot/breathing_sync.py) ### 6.2 Интеграция с Leader Election @@ -322,7 +322,7 @@ is_master_func=lambda: self.is_master 1 τ₂ = 10 τ₁ = 600 секунд ``` -**Исходный код:** [time_bank.py:44-80](Bot/time_bank.py#L44-L80) +**Исходный код:** [time_bank.py:44-80](../Bot/time_bank.py#L44-L80) --- @@ -350,7 +350,7 @@ def halving_coefficient(tau4_count: int) -> float: | 2 | 8-12 | 0.25 | 0.25 Ɉ | | 3 | 12-16 | 0.125 | 0.125 Ɉ | -**Исходный код:** [time_bank.py:88-113](Bot/time_bank.py#L88-L113) +**Исходный код:** [time_bank.py:88-113](../Bot/time_bank.py#L88-L113) --- @@ -376,7 +376,7 @@ Rolling deploy выполняется скриптом `deploy_nodes.sh`: ./deploy_nodes.sh --node moscow # Только один узел ``` -**Исходный код:** [deploy_nodes.sh](Bot/deploy_nodes.sh) +**Исходный код:** [deploy_nodes.sh](../Bot/deploy_nodes.sh) ---