Как получить журналы транзакций NFT с помощью PHP

Как получить журналы транзакций NFT с помощью PHP

7 марта 2023 г.

Возможно, вам приходилось выходить на рынок NFT и захотеть узнать количество людей, которые перевели конкретный NFT. Некоторые рынки размещают информацию об истории транзакций каждого NFT на веб-сайте, а некоторые нет. Возможно, одной из причин является большой объем транзакций, совершаемых по каждому смарт-контракту.

:::информация Некоторые части этой статьи были написаны с помощью ИИ.

:::

Если последнее имеет место, то вторым вариантом перед вами является веб-сайт Etherscan.io. Этот веб-сайт упрощает отслеживание смарт-контрактов NFT. Это очень мощный инструмент, но этого недостаточно. Когда вы хотите проверить NFT с определенным идентификатором, у вас возникнут проблемы, хотя он предоставляет возможность фильтрации транзакций на основе определенных сигнатур событий, таких как передача или одобрение, но не более детальную фильтрацию! Особенно, если вы занимаетесь веб-разработкой и нуждаетесь в неграфических инструментах.

Третий способ — использовать библиотеку Web3. К сожалению, большинство библиотек web3 php нестабильны и не имеют таких хороших функций, как web3js.

После того, как вы изложили свои варианты, вы определенно ищете способ более легкого получения журналов Ethereum и более детальной фильтрации их информации. Библиотека Журналы истории Nft позволяет использовать метод eth_getLogs с помощью конечных точек, таких как alchemy, infura или любая другая сеть, где вы хотите для получения журналов определенного адреса смарт-контракта в соответствии с подписью события.

Вы можете спросить, почему мы не должны использовать SDK, такой как SDK Alchemy, вместо этой библиотеки. Есть несколько конкретных причин:

  1. Большинство этих SDK написаны на JavaScript
  2. Эти SDK работают только с собственной выделенной сетью. например, alchemy SDK работает только с сетью alchemy, что может быть не по вашему выбору и фактически лишает вас свободы воли.
  3. Большинство 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.

Kuddle Koala Smart Contract #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 здесь.

если у вас есть какие-либо вопросы, не стесняйтесь задавать их в разделе комментариев ^__^


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