🚀 gRPC subscribe: Подписка и обработка блокчейн-событий
👁 610↗ 3💬 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?
- анонимКак мне известно, сейчас открытых вакансий нет