Skip to content

Latest commit

 

History

History
92 lines (56 loc) · 7.81 KB

README_ru.md

File metadata and controls

92 lines (56 loc) · 7.81 KB

GitHub go.mod Go version (subdirectory of monorepo) GitHub release (with filter)

О репозитории

Эта библиотека призвана упростить взаимодействие с протоколом NYM для nym-client. Она реализует базовый набор команд для отправки и получения сообщений в/из mixnet.

Особенности

  • Используется Gorilla WebSocket
  • Поддержка текстового протокола (JSON)
  • Поддержка бинарного протокола (Binary)
  • Поддержка пользовательского протокола в теле бинарного сообщения

Подготовка к использованию

  1. Для работы библиотеки требуется активное подключение к websocket-клиенту. Простая установка и запуск nym-client описаны в оффициальной документации -> link

  2. Протестировано с версией nym-client 1.1.32

  3. Импорт зависимости

Используйте стандартные инструменты Go для установки зависисмости:

go get github.com/craftdome/go-nym

Импорт базового пакета:

import "github.com/craftdome/go-nym"

Использование

Советы перед использованием

  • Помните, если вы планируете дать доступ для подключения к nym-client извне (для этого вам следует указать ip внешнего интерфейса вашей машины), nym-client не имеет функции авторизации подключения.
  • Единовременно разрешено только 1 подключение.
  • Если вам нужно внешнее подключение, используйте локальную сеть (10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12) вместо глобальной для повышения безопасности.

Инициализация

  1. Для начала, необходимо инициализировать клиент подключения с указанием адреса nym-client. Адрес и порт подключения копируем из консоли после запуска nym-client. По умолчанию это localhost:1977, а в моём случае 192.168.88.4:1977.

go-nym/example/main.go

Lines 21 to 22 in 17a1c03

// Init the client via server credentials
client := nym.NewClient("ws://192.168.88.4:1977")

  1. Установка соединения c nym-client.

go-nym/example/main.go

Lines 24 to 27 in 17a1c03

// Dial a connection to the server
if err := client.Dial(); err != nil {
panic(err)
}

Чтение сообщений

  1. Включаем прослушивание входящих сообщений, которые далее извлекаем через канал Messages().

go-nym/example/main.go

Lines 30 to 54 in 17a1c03

go func() {
if err := client.ListenAndServe(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
go func() {
// Incoming Message Channel
for message := range client.Messages() {
switch message.Type() {
case tags.Error:
msg := message.(*response.Error)
fmt.Printf("Error: %s\n", msg.Message)
case tags.SelfAddress:
msg := message.(*response.SelfAddress)
fmt.Printf("SelfAddress: %s\n", msg.Address)
case tags.Received:
msg := message.(*response.Received)
fmt.Printf("Received: %s, SenderTag: %s\n", msg.Message, msg.SenderTag)
}
}
fmt.Println("Closed")
done <- struct{}{}
}()

Отправка сообщений

  1. Получение собственного адреса (SelfAddress).

go-nym/example/main.go

Lines 57 to 59 in 17a1c03

if err := client.SendRequestAsText(nym.NewGetSelfAddress()); err != nil {
fmt.Fprintln(os.Stderr, err)
}

  1. Отправка сообщения (Send).

go-nym/example/main.go

Lines 61 to 66 in 17a1c03

// Send a message
addr := "2w2mvQzGHuzXdz1pQSvTWXiqZe26Z2BKNkFTQ5g7MuLi.DfkhfLipgtuRLAWWHx74iGkJWCpM6U5RFwaJ3FUaMicu@HWdr8jgcr32cVGbjisjmwnVF4xrUBRGvbw86F9e3rFzS"
r := nym.NewSend("Mix it up!", addr)
if err := client.SendRequestAsText(r); err != nil {
fmt.Fprintln(os.Stderr, err)
}

  1. Отправка сообщения с формированием SURB для получения анонимного ответа (SendAnonymous).

go-nym/example/main.go

Lines 68 to 74 in 17a1c03

// Send an anonymous message
addr = "2w2mvQzGHuzXdz1pQSvTWXiqZe26Z2BKNkFTQ5g7MuLi.DfkhfLipgtuRLAWWHx74iGkJWCpM6U5RFwaJ3FUaMicu@HWdr8jgcr32cVGbjisjmwnVF4xrUBRGvbw86F9e3rFzS"
replySurbs := 1
r = nym.NewSendAnonymous("Enjoy your anonymous!", addr, replySurbs)
if err := client.SendRequestAsText(r); err != nil {
fmt.Fprintln(os.Stderr, err)
}

  1. Отправка ответа на сообщение SendAnonymous (Reply).

go-nym/example/main.go

Lines 76 to 81 in 17a1c03

// Reply to an anonymous message
senderTag := "7vv2LmF9M6EwQRrmCiCJhr"
r = nym.NewReply("Pong.", senderTag)
if err := client.SendRequestAsText(r); err != nil {
fmt.Fprintln(os.Stderr, err)
}

Корректное закрытие соединения

  1. Закрываем соединение с nym-client после завершения работы (interrupt/kill signal) и ожидаем сигнал done от читающей горутины.

go-nym/example/main.go

Lines 83 to 91 in 17a1c03

// Waiting for the kill or interrupt signal
<-interrupt
// Closing the client
if err := client.Close(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
// Waiting for the done signal
<-done
fmt.Println("Done.")

Поддержать разработчика (Миксноды)

Ниже приведён список микснод разработчика. Если вы в поисках ноды для делегирования токенов, можете присмотреться к моим вариантам. Комиссия владельца ноды всего 4%, что является низким показателем среди других нод, где комиссия может доходить до 20%, а то и выше, если прибавить стоимость обслуживания ноды (встречается 4000 токенов - это уже около 28% о максимальной доходности ноды).

Dynamic JSON Badge Dynamic JSON Badge Dynamic JSON Badge Dynamic JSON Badge

Dynamic JSON Badge Dynamic JSON Badge Dynamic JSON Badge Dynamic JSON Badge