如何使用PHP对最畅销的NFT进行排名
#php #ethereum #nft #nfthistorylogs

好吧,我们知道NFT是以太坊日志中具有特殊令牌ID的交易。

但是,那到底是什么意思?

在本文中,AI工具用于翻译并改善语法。

这意味着每个令牌ID都包含转移交易,其中包括智能合约中的特殊信息。每次转移交易都包括一组日志和特殊事件。实际上,整个以太坊日志概念是一个多维数组,我们可以访问子集信息。

这些信息之一是交易的价值。此值以WEI格式,您可以转换为Ether。

要获得更方便的访问,我们可以使用NFT历史记录库。

让我们开始!

首先,通过此命令安装它:

 composer require nfthistory/nfthistorylogs dev-master

然后像这样导入它:

<?php

require 'vendor/autoload.php'

use Nft\History\nftHistory;

然后,插入合同地址并设置提供商:

$contractAddress = '0x00B3e138c6e4b233e5DDed8CfeD200f0c82B536c';
$provider = 'https://cloudflare-eth.com';

我使用了此合同地址,0x00B3E138C6E4B233E5DDDDDDDDED8CFED200F0F0C82B536C,属于Boss Logic失去思维开放版的男孩。它是该智能合约地址的82个NFT的集合。

在本文中,我想使用此合同地址列出NFT的最高销售。

The Boy who lost his mind Open Edition by Boss Logic
我使用了免费的CloudFlare提供商,但是您可以使用API​​密钥使用所需的提供商。

在此步骤中,创建一个nfthistory对象的实例:

$nfthistory = new nftHistory($contractAdress, $provider);

接下来,致电getAllTranSfertrxhashandids()函数:

$trxHash = $nfthistory->getAllTransferTrxHashAndIds();

以上功能将为我们提供基于每个令牌ID的转移交易哈希的列表。

函数的输出就是这样:

var_dump($trxHash);

// output:
array(82) {
   [19400010233]=>
       array(2) {
               [0]=>
              string(66) 
               '0x3982a65f77b8896c19722b8ee2314f2224c767fef25035ba968f57e0cb4a8c8e'

现在,我们有了一组令牌ID,其中包括特定NFT的传输哈希。 19400010233的数字是令牌ID,而长度为66的字符串值则是交易的哈希。通过使用此交易哈希,我们可以访问该交易的值。

所以,让我们过滤此数组:

$filterData = array_map(function($log) use($nfthistory){

             return array_map(function($logs) use($nfthistory){

                    $result = $nfthistory->getTrxByHash($logs);

                     if($result['value'] !== '0x0'){

                                 $logs = $result['value'];
                                 return $logs;

                                 }
             },$log);

},$trxHash);

在上面的代码中,我们使用array_map()在数组上迭代,以便将其过滤。在此循环中,我们再次迭代,使用另一个array_map()访问每个事务哈希。然后,使用NFT历史记录,我们调用getTrxhash()函数以访问交易中的交易值。

此函数的输出是多维数组。价值指数对我们很重要,因为它是WEI格式贸易的十六进制价值。我们提出了删除0x0的声明,这意味着删除零值。

在此步骤中,您必须具有这样的数组:

array(82){
[19400010074]=>
 array(4) {
    [0]=>
    NULL
    [1]=>
    NULL
    [2]=>
    NULL
    [3]=>
    string(17) '0x12dfb0cb5e88000'
  }
  [19400010323]=>
  array(2) {
    [0]=>
   NULL
    [1]=>
    NULL
  }
}

您可以看到,上述数组的键是我们保留的令牌ID,并且数组的值是每笔交易的价格。那些价值为无销售的人没有销售或转移事件等于零以太。

现在我们再次过滤此数组:

$res = array_map(function($log) use($nfthistory){

        $sum = array_sum(array_map('hexdec',$log));

                $nftSumPrice = $nfthistory->weiToEther($sum);

                return $nftSumPrice;

},$filterData);

在上面的代码中,我们将包括多个价格的每个令牌ID的价格汇总。然后,使用weitoether()函数,我们以WEI格式将价格转换为以太格式,最后返回结果。

输出必须像这样:

// output:

array(82) {
  [19400010233]=>
  string(4) '0.00'
  [19400010322]=>
  string(4) '0.00'
  [19400010042]=>
  string(4) '0.00'
 [19400010113]=>
  string(4) '0.00'
  [19400010074]=>
  string(4) '0.08'
}

现在,我们拥有的总和和其他价格是无效的。我们可以删除空值,但我有意保留它们以使比较更好。

以这样的降序排序数组:

arsort($res);

然后输出是这样的:

array(82) {
  [19400010142]=>
  string(4) '0.40'
  [19400010060]=>
  string(4) '0.25'
  [19400010127]=>
  string(4) '0.21'
  [19400010159]=>
  string(4) '0.19'
  [19400010303]=>
  string(4) '0.15'
  [19400010055]=>
  string(4) '0.12'
  [19400010429]=>
  string(4) '0.11'
  [19400010236]=>
  string(4) '0.11'
  [19400010400]=>
  string(4) '0.10'
 [19400010136]=>
 string(4) '0.09'
}

上述输出是前10个销售NFT的列表。为了确保这些数字,首先转到此页面搜索第一个令牌ID(19400010142)。将此号码放在搜索部分中以访问此令牌ID的交易列表。

Transfer Trxs of a token id

您可以看到,此令牌ID已传输两次。如果您单击每个交易哈希,然后转到“价值”部分,则可以看到交易的价格。第一个是0.4醚,第二个是0。

我将尝试在库中添加这些功能作为内置功能。目前,您可以按原样使用它。

其余功能在这里。

如果您有任何疑问,我将在评论部分回复您。 ^__^