Индексаторы — это операторы узлов, которые извлекают данные из узла, затем преобразуют их и сохраняют в базе данных, чтобы обеспечить легкий доступ к данным блокчейна. Вы можете использовать его для создания истории транзакций пользователя или получить транзакцию/блок для создания децентрализованного приложения.

ZeroMQ — это библиотека обмена сообщениями с открытым исходным кодом, которую вы можете подключить и использовать некоторые шаблоны сокетов. Мы будем использовать шаблон pub-sub для подписки на узле и прослушивания новых блоков и транзакций в режиме реального времени для хранения в нашей базе данных и получения более быстрого доступа, чем прямой доступ к блокчейну, и иметь простой способ масштабирования.

Биткойн — это взаимодействующий узел, который позволит нам взаимодействовать с блокчейном и получать нужные данные.


Подписка на Bitcoind с использованием ZeroMQ

Три блока со стрелкой один за другим биткойн, NodeJS, база данных

Чтобы прослушивать новые блоки и транзакции, вам нужно запустить узел локально в вашей собственной инфраструктуре, вы можете скачать биткойн здесь

Используя ZeroMQ, вы можете установить адрес для публикации ваших событий (блоков и транзакций), а затем при каждом новом событии, которое генерирует ваш узел, и приложение может с ним справиться.

Чтобы запустить узел с ZeroMQ, используя биткойн:

bitcoind -signet -zmqpubrawblock=tcp://127.0.0.1:3000 -zmqpubrawtx=tcp://127.0.0.1:3000
Войти в полноэкранный режим

Выйти из полноэкранного режима

После запуска узла вы можете установить zeromq упаковать и прослушать событие rawblock и rawtx, а затем вставить в свою базу данных.

import zmq from "zeromq";

const SOCKET_ADDRESS = "tcp://127.0.0.1:3000"

const connectZeroMQ = () => {
    const socket = zmq.socket('sub');
    socket.connect(SOCKET_ADDRESS);
    socket.subscribe('');
    return socket;
}

const zmq = connectZeroMQ();

zmq.on('rawblock', (error, block) => {
    if(err !== null) return;
    // parse and store on your database
})

zmq.on('rawtxn', (error, txn) => {
    if(err !== null) return;
    // parse and store on your database
})
Войти в полноэкранный режим

Выйти из полноэкранного режима


Вывод

Вы можете достичь этого результата разными способами, но ZeroMQ дает вам больше безопасности и надежности для получения блоков и транзакций в режиме реального времени, этот код можно использовать в производстве, но я настоятельно рекомендую вам создать скрипт для проверки каждого блока. и транзакции время от времени, чтобы убедиться, что никто не потерян.

В моем репозитории ниже вы можете найти весь приведенный выше код, подключенный к базе данных, и получить потерянные блоки или старые блоки, не стесняйтесь вносить свой вклад =)

Если у вас есть предложения/отзывы, вы можете позвонить мне по телефону:
Твиттер