Как получить журналы транзакций NFT с помощью PHP
7 марта 2023 г.Возможно, вам приходилось выходить на рынок NFT и захотеть узнать количество людей, которые перевели конкретный NFT. Некоторые рынки размещают информацию об истории транзакций каждого NFT на веб-сайте, а некоторые нет. Возможно, одной из причин является большой объем транзакций, совершаемых по каждому смарт-контракту.
:::информация Некоторые части этой статьи были написаны с помощью ИИ.
:::
Если последнее имеет место, то вторым вариантом перед вами является веб-сайт Etherscan.io. Этот веб-сайт упрощает отслеживание смарт-контрактов NFT. Это очень мощный инструмент, но этого недостаточно. Когда вы хотите проверить NFT с определенным идентификатором, у вас возникнут проблемы, хотя он предоставляет возможность фильтрации транзакций на основе определенных сигнатур событий, таких как передача или одобрение, но не более детальную фильтрацию! Особенно, если вы занимаетесь веб-разработкой и нуждаетесь в неграфических инструментах.
Третий способ — использовать библиотеку Web3. К сожалению, большинство библиотек web3 php нестабильны и не имеют таких хороших функций, как web3js.
После того, как вы изложили свои варианты, вы определенно ищете способ более легкого получения журналов Ethereum и более детальной фильтрации их информации. Библиотека Журналы истории Nft позволяет использовать метод eth_getLogs
с помощью конечных точек, таких как alchemy, infura или любая другая сеть, где вы хотите для получения журналов определенного адреса смарт-контракта в соответствии с подписью события.
Вы можете спросить, почему мы не должны использовать SDK, такой как SDK Alchemy, вместо этой библиотеки. Есть несколько конкретных причин:
- Большинство этих SDK написаны на JavaScript
- Эти SDK работают только с собственной выделенной сетью. например, alchemy SDK работает только с сетью alchemy, что может быть не по вашему выбору и фактически лишает вас свободы воли.
- Большинство PHP-библиотек Web3 нестабильны и имеют много проблем!
Чтобы начать использовать эту библиотеку, введите следующую команду для ее установки:
composer require nfthistory/nfthistorylogs dev-master
Теперь импортируйте библиотеку и создайте новый экземпляр:
<?php
require 'vendor/autoload.php'
use NftHistorynftHistory;
$contractAdress = '0x7F0159D3A639a035797e92861d9F414246735568'
$provider = 'https://cloudflare-eth.com'
$NftHistory = new nftHistory($contractAdress, $provider);
Как видите, этот класс должен получить две переменные по умолчанию во время построения: одна — это адрес нужного вам смарт-контракта NFT, а другая — провайдер или конечная точка, которую вы хотите использовать. Оба должны быть строкового типа.
Здесь я использовал смарт-контракт Kuddle Koala #6466. Адрес смарт-контракта — 0x7F0159D3A639a035797e92861d9F414246735568, а идентификатор токена — 6466.
Этот токен фактически был передан между двумя людьми (два адреса), и смысл этой передачи не что иное, как продажа NFT другому лицу. Мы знаем, что NFT — это уникальные объекты, поэтому у нас есть один токен Kuddle Koala с идентификатором 6466; остальные NFT имеют разные идентификаторы.
Используя наш экземпляр, мы вызываем функцию transferTrxById():
$res = $NftHistory->transferTrxById('6466', '0x0', 'latest');
var_dump($res);
//output:
Array
(
[0] => Array
(
[address] => 0x7f0159d3a639a035797e92861d9f414246735568
[topics] => Array
(
[0] => 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
[1] => 0x0000000000000000000000000000000000000000000000000000000000000000
[2] => 0x0000000000000000000000005b436b7cc93d246d3a62fc7a95339f6fac7d2a4a
[3] => 0x0000000000000000000000000000000000000000000000000000000000001942
)
[data] => 0x
[blockNumber] => 0xcd2b8e
[transactionHash] =>
0xc95b6b17a8453526eba78592bf93b272f75e49b33487b986e81d19a1682eded6
[transactionIndex] => 0x1d
[blockHash] =>
0x69b72ae82a6e6f2de0750e23e30855cc727605b4c7b3c69814cbc0b3a51b19af
[logIndex] => 0x23
[removed] =>
)
[1] => Array
(
[address] => 0x7f0159d3a639a035797e92861d9f414246735568
[topics] => Array
(
[0] => 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
[1] => 0x0000000000000000000000005b436b7cc93d246d3a62fc7a95339f6fac7d2a4a
[2] => 0x000000000000000000000000cf0b56dfefa3e0051a1772fc585b076a06487c53
[3] => 0x000000000000000000000000000000000000000000000000000000000000194
)
[data] => 0x
[blockNumber] => 0xcd3716
[transactionHash] => 0x62f59782cc17e5156fda51e27b121d5e9562b4f0d5455c5f04720aeb0a79eb07
[transactionIndex] => 0x10b
[blockHash] => 0x8313bae0ff42ba4065bfb1524efb691a5c4c31cfe56defca4c095c803d4bbc3e
[logIndex] => 0x210
[removed] =>
)
[2] => Array
(
[address] => 0x7f0159d3a639a035797e92861d9f414246735568
[topics] => Array
(
[0] => 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
[1] => 0x000000000000000000000000cf0b56dfefa3e0051a1772fc585b076a06487c53
[2] => 0x0000000000000000000000002e6469c5d4256c098ac51b9655dfb27d6f996a0c
[3] => 0x0000000000000000000000000000000000000000000000000000000000001942
)
[data] => 0x
[blockNumber] => 0xe703b0
[transactionHash] => 0x7b913e65751d493dc46746120e5c50587d183677a7e275535137995d017a438b
[transactionIndex] => 0x16
[blockHash] => 0x4837a2daf412be2deebcae9b5c3ecb8a639f0b6e221193b56fe7f42ac79389a3
[logIndex] => 0x58
[removed] =>
)
)
Что ж, как видите, на выходе этого экземпляра был многомерный массив с 3 транзакциями, включая транзакцию чеканки NFT и следующие две транзакции нашего NFT-перевода, которые передавались между 3 людьми.
Вы можете получить доступ к любому из свойств этих транзакций и проанализировать их. Например, раздел данных содержит количество эфира, переданного между двумя адресами во время передачи NFT, которое равно 0x, что означает ноль, что означает, что эфир не был передан. Имейте в виду, что это число находится в формате WEI, и вам необходимо преобразовать его в эфир. Конечно, есть и другие функции для удобства получения суммы переведенного эфира, например:
$transactionHash = '0x62f59782cc17e5156fda51e27b121d5e9562b4f0d5455c5f04720aeb0a79eb07';
$eventName = 'OrdersMatched';
$etherAmount = $NftHistory->nftTrxWei($transactionHash, $eventName);
var_dump($etherAmount);
//output
array(1) {
['value']=>
array(1) {
[0]=>
array(3) {
['buyHash']=>
string(66) '0x0000000000000000000000000000000000000000000000000000000000000000'
['sellHash']=>
string(66) '0243b8854fe6a9b124e13caed266c59d3cacc1ca4c3246a3cad5a094c53f6d0900'
['price']=>
string(62) '0000000000000000000000000000000000000000000000009869529cdd4000'
}
}
}
Что ж, как показано в коде выше, на основе хеш-значения транзакции мы получили информацию о продаже для этого NFT. Обратите внимание, что переменная $eventName
не является обязательной. Фактически, вместо того, чтобы получать все значения эфира, сделанные по этой транзакции, мы вернули только информацию о его стоимости продажи.
Точно так же вы можете работать с остальными его функциями, чтобы легче достичь желаемых результатов.
Вы можете получить доступ к другим функциям библиотеки журналов истории NFT здесь.
если у вас есть какие-либо вопросы, не стесняйтесь задавать их в разделе комментариев ^__^
Оригинал