Архитектура TestNet

Сеть состоит из двух подсетей: ядра и платежной сети. Эти сети имеют разные алгоритмы синхронизации, к которым предъявляются разные требования по безопасности. Сложность добавляет и то, что частью пира платежного сервиса является пир ядра (для быстрой проверки ЭЦП по данным ядра).

Этап 1 - старт сети

На начальныных этапах предлагаю запустить сеть из нескольких пиров в приватной сети. Пиры ядра (tendermint) запускаются как часть платежной сети с RAFT. "Наружу" могут смотреть только ProxyAPI (в виде отдельных сервисов или как часть пира).

Т.е. пиры платежной сети выполняют и роль валидаторов в ядре.

graph LR

  Users((Users)) -. ProxyAPI .-> peer_1
  Users((Users)) -. ProxyAPI .-> peer_2

  subgraph Private netwrork
    peer_1[RAFT+TM] --- peer_2[RAFT+TM]
    peer_1 --- peer_3[RAFT+TM]
    peer_1 --- peer_4[RAFT+TM]
    peer_1 --- peer_5[RAFT+TM]

    peer_2 --- peer_3
    peer_2 --- peer_4
    peer_2 --- peer_5

    peer_3 --- peer_4
    peer_3 --- peer_5

    peer_4 --- peer_5
  end
  • Users - пользователи

  • RAFT+TM - пир платежной сети с валидатором ядра

  • ProxyAPI - доступ к пиру через ProxyAPI

Этап 2 - подключение внешних наблюдателей (валидаторов) к сети

На следующем этапе мы пускаем внешних валидаторов/наблюдателей в сеть ядра. Для этого надо запустить дополнительные пиры ядра (в режиме наблюдателей), которые будут доступны из публичной сети и в свою очередь будут иметь доступ к приватной сети. Они будут выступать своеобразным прокси-сервером между внутренней сетью и публичной сетью (в документации tendermint описан именно такой способ защиты валидаторов от атак из публичной сети).

graph LR

  TM(User core peer) -. TM P2P .-> TM1

  Users((Users)) -. ProxyAPI .-> peer_1
  Users((Users)) -. ProxyAPI .-> peer_2

  subgraph Private netwrork

    TM1[TM-validators] -. TM P2P .-> peer_1
    TM1 -. TM P2P .-> peer_2

    peer_1[RAFT+TM] --- peer_2[RAFT+TM]
    peer_1 --- peer_3[RAFT+TM]
    peer_1 --- peer_4[RAFT+TM]
    peer_1 --- peer_5[RAFT+TM]

    peer_2 --- peer_3
    peer_2 --- peer_4
    peer_2 --- peer_5

    peer_3 --- peer_4
    peer_3 --- peer_5

    peer_4 --- peer_5
  end
  • Users - пользователи

  • RAFT+TM - пир платежной сети с валидатором ядра

  • ProxyAPI - доступ к пиру через ProxyAPI

  • TM-validators - валидаторы ядра, имеющие доступ к приватной сети и доступные из интернета

  • TM P2P - протокол взаимодействия пира Tendermint с другими Tendermint-пирами

  • User core peer - пиры ядра, запущенные пользователями (как наблюдатели или валидаторы)

Этап 3 - раздельные сети

Вообще, в идеале нужно стремиться к отдельной сети ядра (tendermint с генерацией на своих пирах) и отдельной сети платежной (RAFT, часть пира с ядром работает с tendermint-пирами ядра в роли наблюдателей).

graph LR

  TM(User core peer) -. TM P2P .-> TM1

  Users((Users)) -. ProxyAPI .-> peer_1
  Users((Users)) -. ProxyAPI .-> peer_tm_1
  
  subgraph Private core netwrork

    TM1[TM-validators] -. TM P2P .-> peer_tm_1
    TM1 -. TM P2P .-> peer_tm_2

    peer_tm_1[TM] --- peer_tm_2[TM]
    peer_tm_1 --- peer_tm_3[TM]
    peer_tm_1 --- peer_tm_4[TM]
    peer_tm_1 --- peer_tm_5[TM]

    peer_tm_2 --- peer_tm_3
    peer_tm_2 --- peer_tm_4
    peer_tm_2 --- peer_tm_5

    peer_tm_3 --- peer_tm_4
    peer_tm_3 --- peer_tm_5

    peer_tm_4 --- peer_tm_5
  end

  subgraph Private payment netwrork

    peer_1[RAFT] --- peer_2[RAFT]
    peer_1 --- peer_3[RAFT]
    peer_1 --- peer_4[RAFT]
    peer_1 --- peer_5[RAFT]

    peer_2 --- peer_3
    peer_2 --- peer_4
    peer_2 --- peer_5

    peer_3 --- peer_4
    peer_3 --- peer_5

    peer_4 --- peer_5
  end
  • Users - пользователи

  • RAFT - пиры платежной сети (дополнительно явяляются наблюдателями сети ядра, связь не отражена)

  • TM - пиры ядра

  • ProxyAPI - доступ к пиру через ProxyAPI

  • TM-validators - валидаторы ядра, имеющие доступ к приватной сети и доступные из интернета

  • TM P2P - протокол взаимодействия пира Tendermint с другими Tendermint-пирами

  • User core peer - пиры ядра, запущенные пользователями (как наблюдатели или валидаторы)

Last updated