好吧,我们知道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的最高销售。
我使用了免费的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的交易列表。
您可以看到,此令牌ID已传输两次。如果您单击每个交易哈希,然后转到“价值”部分,则可以看到交易的价格。第一个是0.4醚,第二个是0。
我将尝试在库中添加这些功能作为内置功能。目前,您可以按原样使用它。
其余功能在这里。
如果您有任何疑问,我将在评论部分回复您。 ^__^