Как отслеживать биткойн-транзакции на сумму 2 миллиарда долларов и более

Как отслеживать биткойн-транзакции на сумму 2 миллиарда долларов и более

7 марта 2022 г.

Эта статья представляет собой практическое руководство по созданию простого сервера Node.js, который будет получать транзакции BTC в качестве веб-перехватчика и определять, содержит ли транзакция перевод BTC на сумму более 2 миллиардов долларов. Это не обязательно означает, что кто-то один раз обналичивает или покупает соответствующее количество BTC; мы не знаем, НО если такая сумма переводится много в течение недели, то мы можем предположить, что в целом сеть достаточно активна. На основе этой информации можно было бы сделать некоторый инвестиционный проект. Конечно, это не руководство по финансам или инвестициям, а чистое любопытство инженера-программиста 🧐


Инструменты, которые нам нужны


Прежде всего, нам нужен какой-то источник наших данных, который даст нам последний блок и транзакции, подтвержденные сетью блокчейнов. Существует не так много сервисов, которые мы можем использовать для бесплатного мониторинга подтвержденных блоков, поэтому Blockpulsar.com кажется лучшим выбором, потому что у них даже есть события Webhook, что идеально подходит для нас.


После регистрации в Blockpulsar теперь мы можем устанавливать событие Webhook для каждой новой подтвержденной транзакции в сети Биткойн. Они будут отправлять нам объект Transaction каждый раз, когда есть новая подтвержденная транзакция, откуда мы можем получить значение того, сколько BTC содержится в ней.


Основываясь на типах, описанных в [документах Blockpulsar] (https://docs.blockpulsar.com/#tag/Bitcoin-Transaction), мы получим следующий объект JSON для каждого обратного вызова Transaction Webhook. Нам нужен идентификатор транзакции, входы транзакции, выходы и их адреса с суммой BTC.


```json


"txid": "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",


"вин": [


"значение": 3,54312,


"адреса": [


"1JqBybe5nWtENrHnMyafbSXXtTh5Uv5Qab"


"воут": [


«значение»: 5,56,


"script_pub_key": {


"адреса": [


"1JqDybm2nWTENrHvMyafbSXXtTk5Uv5QAn"


Эта структура объекта кажется довольно простой. Нам нужно создать какой-нибудь Node.js, Golang или любой другой HTTP-сервер на основе языка, который будет обрабатывать запрос транзакции JSON и анализировать его соответствующим образом.


Я выбираю сервер Node.js, потому что это самая распространенная технология для такого рода разработки легких серверов.


Обработка новых транзакций с помощью Node.js


Для начала нам нужен простой сервер Express.js для получения POST-запросов от событий Blockpulsar Webhook. Поскольку URL-адрес нашего сервера должен быть общедоступным, мы должны принять некоторые меры «безопасности», чтобы гарантировать, что входящие запросы отправляются только с серверов Blockpulsar. Звучит сложно, но на практике почти все обратные вызовы на основе Webhook используют один и тот же метод. Мы либо должны предоставить уникальный параметр запроса для проверки, либо проверить заголовки запроса.


На практике это выглядит так же, как с базовой настройкой Express.js и Body Parser для того, чтобы тело JSON POST было доступно как объект.


```javascript


константный экспресс = требуется ('экспресс');


const bodyParser = require('body-parser');


const FIXED_QUERY_TOKEN = "какой-то длинный токен для безопасности";


константное приложение = экспресс();


app.use(bodyParser.json());


app.post('/transaction', (req, res) => {


если (req.query.token! == FIXED_QUERY_TOKEN) {


вернуть res.send(401);


константная транзакция = req.body;


console.log(транзакция);


рез.json({});


app.listen(process.env.PORT ?? 3000);


Теперь у нас есть простой сервер Express.js для обработки объекта транзакции как HTTP-запроса POST и убедитесь, что предстоящий запрос содержит наш уникальный параметр запроса ?token=<наш-токен>, потому что наш API будет общедоступным. URL.


Настройка URL вебхука


Есть много способов бесплатно развернуть это как общедоступный сервер API на основе URL, потому что здесь мы не подходим. Я решил развернуть это на Heroku, что довольно хорошо в качестве бесплатного варианта, и это довольно просто сделать — не буду объяснять, как работает развертывание Heroku. На эту тему можно найти практически все. Я предполагаю, что вы знаете, как это сделать :grinning:


После простого процесса развертывания в Heroku я получил общедоступный URL-адрес для моего сервера Express.js, и я могу сделать свою конечную точку отслеживания транзакций доступной в виде следующего URL-адреса.


```javascript


https://bitcoin-transaction-tracking.herokuapp.com/transaction?token=some-long-token-for-security


Теперь пришло время установить этот URL-адрес в качестве обратного вызова Blockpulsar Webhook в качестве URL-адреса обратного вызова события транзакции Биткойн. Для этого нам нужно вызвать простой API, который вы можете сделать через Postman или просто легкий HTTP-клиент, непосредственно встроенный в ваш VSCode или Webstorm, в зависимости от того, что вы хотите, но [запрос выглядит так] (https://docs .blockpulsar.com/#tag/Webhook/paths/\~1hooks\~1webhooks/post).


``` ударить


ПОСТ https://api.blockpulsar.com/hooks/webhook


x-api-key: <ваш ключ API>


x-api-secret: <ваш секрет API>


Тип содержимого: приложение/json


"url": "https://bitcoin-transaction-tracking.herokuapp.com/transaction?token=some-long-token-for-security",


"Подписки": [


"тип": "ТРАНЗАКЦИЯ",


"валюта": "БТД"


С помощью этого API-вызова Blockpulsar мы сообщаем: «Отправляйте HTTP-запрос POST на указанный нами URL всякий раз, когда в блокчейне Биткойн подтверждается новая транзакция. “


Для начала получения новых транзакций может потребоваться несколько минут, потому что среднее время майнинга блока составляет около 8 минут, что иногда занимает даже 30 минут, но через некоторое время вы начнете видеть взрыв объектов JSON в журналах вашего сервера из console. .log(транзакция). Все, что вам нужно сделать сейчас, это проанализировать предстоящую транзакцию и определить, передается ли более 5000 BTC или нет.


Транзакция содержит более 5000 BTC 🚨


Каждая транзакция блокчейна Биткойн содержит поля «vin, vout», которые представляют суммы отправки и получения на определенные адреса. Мы не знаем точно, какой конкретно адрес кому отправляет, но если вин и один воут то понятно, какой адрес отправляет, а какой получает.


Чтобы проверить реальную сумму, мы должны просмотреть все массивы transaction.vin и transaction.vout и проверить, есть ли у нас перевод более 5000 BTC за раз.


```javascript


функция checkTransferAmount(транзакция, сумма = 5000) {


const findModeThanAmount = (vinOrVout) => vinOrVout.find(


({значение}) => значение >= сумма


return !!findModeThanAmount(transaction.vin) || !!findModeThanAmount(transaction.vout);


Эта условная агрегация является простым примером определения того, есть ли сумма расходов или получения, превышающая заданную сумму (по умолчанию 5000 BTC).


Мы должны вызывать эту функцию каждый раз, когда мы получаем транзакцию, чтобы регистрировать только те идентификаторы транзакций, которые содержат более 5000 входных или выходных данных BTC.


```javascript


константный экспресс = требуется ('экспресс');


const bodyParser = require('body-parser');


const FIXED_QUERY_TOKEN = "какой-то длинный токен для безопасности";


константное приложение = экспресс();


app.use(bodyParser.json());


app.post('/transaction', (req, res) => {


если (req.query.token! == FIXED_QUERY_TOKEN) {


вернуть res.send(401);


константная транзакция = req.body;


если (checkTransferAmount(транзакция)) {


console.log('БОЛЕЕ 5000 BTC -> ', transaction.id);


рез.json({});


app.listen(process.env.PORT ?? 3000);


функция checkTransferAmount(транзакция, сумма = 5000) {


const findModeThanAmount = (vinOrVout) => vinOrVout.find(


({значение}) => значение >= сумма


return !!findModeThanAmount(transaction.vin) || !!findModeThanAmount(transaction.vout);


Теперь мы получим вывод в журналы нашего сервера, аналогичный этому.


```javascript


БОЛЕЕ 5000 BTC -> fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4


Как использовать эту информацию?


Теперь у вас есть инструмент, который может активировать чат-бота или даже API автоматизации для вашего торгового бота на определенном крючке, чтобы определить, соответствует ли недавно подтвержденная транзакция вашему условию. Одним из лучших вариантов использования является создание бота Twitter, похожего на Wealth Alert, где вы можете твитить адреса BTC, которые совершают транзакции на суммы, превышающие заданные.


Дайте мне знать, какой вариант использования у вас есть. Буду рада помочь 🤞


Отказ от ответственности: я являюсь техническим директором в Blockpulsar Inc., и в этой статье я хотел продемонстрировать варианты использования нашего API блокчейна, управляемого событиями.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE