main.go

Обзор

Данный файл main.go реализует функциональность запуска и управления несколькими экземплярами процесса symbiotic_relay, взаимодействующих через gRPC API. Основная цель — запуск нескольких операторов (процессов), отправка им большого количества запросов на подпись сообщений и последующая проверка агрегированных доказательств подписей. Это позволяет нагрузочно протестировать систему на корректность и производительность распределённого протокола подписей с агрегацией.

Описание структуры и функционала

Типы и константы


Функции и методы

func main()


func run(ctx context.Context) error


func runProcesses(ctx context.Context, runSeparately bool) (processes, error)


(prs processes) waitServerStarted(ctx context.Context)


(prs processes) stopProcesses()


func sendRequestAndWait(ctx context.Context, prs processes, nRequests int) *errors.Error


(prs processes) sendMessageToAllRelays(ctx context.Context, epoch uint64) (string, error)


func sendSignMessageRequest(ctx context.Context, pr process, message []byte, epoch uint64) (string, error)


func randomMessage(n int) []byte


(prs processes) printErrLogs()


Важные детали реализации


Взаимодействие с другими частями системы

Этот файл является интеграционным тестом/нагрузочным инструментом для системы symbiotic_relay, запускающей несколько экземпляров и проверяющей корректность работы протокола подписей.


Пример использования

go run main.go

Программа запустит 3 процесса symbiotic_relay, отправит 1000 запросов на подпись случайных сообщений, дождётся агрегированных доказательств и завершит работу.


Диаграмма структуры и взаимодействия

flowchart TD
    A[main()] --> B[run()]
    B --> C[runProcesses()]
    C --> D[process (symbiotic_relay instances)]
    B --> E[sendRequestAndWait()]
    E --> F[sendMessageToAllRelays()]
    F --> G[sendSignMessageRequest()]
    E --> H[GetAggregationProof (polling)]
    C --> I[waitServerStarted()]
    B --> J[stopProcesses()]

    subgraph Processes
        D
    end

Описание диаграммы:


Заключение

Файл main.go — это инструмент для запуска и тестирования системы symbiotic_relay с несколькими операторами, который автоматизирует процесс запуска, отправки нагрузки и проверки агрегированных ответов. Он демонстрирует эффективное использование горутин, gRPC клиентов и управления процессами в Go для создания комплексного интеграционного теста.