// личный канал‑лог
gavrilovlog
← все записи

🚀 gRPC subscribe: Подписка и обработка блокчейн-событий

👁 6103💬 2
Сорри что пропал на неделю, поскольку завалило работой меня. Поэтому сегодня просто расскажу, что делаю сейчас на нашем проекте. 🌐 Коротко про проект: Я работаю в Waves и мы занимаемся сейчас разработкой платформы Liqudity Yield Farming. В мои задачи сейчас входит реализовать Backend часть этого проекта. Данный проект разделен на 2 основных микросервиса: 1️⃣ - это непосредственно само API, которое работает только с GET запросами. Этот сервис нужен для расчетов и генерации JSON-транзакций. 2️⃣ - Второй сервис немного посложнее он называется «Writer», у него одна задача, парсить блоки из блокчейна и записывать в базу данных. 🔧 На текущей неделе занимался подключением Blockchain Updates сервиса во Writer и написанием функций парсинга. 🌐 Про Blockchain Updates можно почитать вот тут: https://docs.waves.tech/en/waves-node/extensions/blockchain-updates По сути это просто protobuf схема, которую можно сгенерировать для любого ЯП. После генерации функций из protobuf, получаем метод: Subscribe, как можно догадаться это Stream. Обрабатываем его:

for {
   event, err := stream.Recv()
   if err == io.EOF {
      // Close stream
      break
   }
   if err != nil {
      log.Fatalf("Failed to receive event: %v", err)
   }
   // Handling the received event
   blockchain_updates.HandleBlockchainData(event)
}
Вся обработка событий вынесена в отдельный пакет c функцией (blockchain_updates.HandleBlockchainData).

// HandleBlockchainData - ...
func HandleBlockchainData(event *waves.SubscribeEvent) {
 switch updateData := event.GetUpdate().Update.(type) {
 case *events.BlockchainUpdated_Append_:
  processes.Append(updateData)
 case *events.BlockchainUpdated_Rollback_:
  processes.Rollback(updateData)
 default:
  fmt.Println("Unknown update type")
 }
}
Event может быть двух типов это Append и Rollback. Если Rollback то удалаяем транзакции из базы. А если Append, то парсим и записываем. Вот и все, задавайте вопросы, отвечу на сколько смогу 🙂
622

Комментарии · 2

  • user878930725
    Есть ли у вас стажировки по Golang?
    • аноним
      Как мне известно, сейчас открытых вакансий нет