I wrote a script that retrieves all trade transactions for nft. But there is a problem, it takes 12 minutes to go through a thousand transactions. I wrote it in c#, if you have any recommendations or other tips I will be glad to hear.
Algorithm - get all signatures for a certain nft, then check if this transaction is successful, then check if this transaction is a trade transaction.
I use custom rpc endpoint.
var nftMint = "Fw8PqtznYtg4swMk7Yjj89Tsj23u5CJLfW5Bk8ro4G1s";
var transactionsSignatures = client.GetSignaturesForAddressAsync(nftMint , 1000).Result;
if (transactionsSignatures.WasSuccessful)
{
var filteredSignatures = FilterByShop(transactionsSignatures.Result);
foreach (var signature in filteredSignatures)
{
Console.WriteLine(signature.Signature);
}
}
List<SignatureStatusInfo> FilterByShop(List<SignatureStatusInfo> list)
{
List<SignatureStatusInfo> goodSignatures = new();
foreach (var statusInfo in list)
{
var transaction = client.GetTransactionAsync(statusInfo.Signature).Result;
if (transaction.WasSuccessful)
{
var transactionMeta = transaction.Result.Meta;
foreach (var msg in transactionMeta.LogMessages)
{
if (msg.Contains("Program traderDnaR5w6Tcoi3NFm53i48FTDNbGjBSZwWXDRrg invoke [1]"))
{
goodSignatures.Add(statusInfo);
}
}
}
}
return goodSignatures;
}