Oyun Kitabı
Découverte de listes en analysant totalSupply (Decouverte DE Listes EN Analysant Totalsupply)
getListings lit le totalSupply NFT et effectue plusieurs appels RPC pour chaque tokenId. N×call n’est pas mis à l’échelle ; Produit une liste de sondages obsolètes de 30 s et une limite de débit Infura.
Interface utilisateur du marché de type OpenSea
Partie 2 de 3
SPA du marché Bare Crypto : architecture d'informations de type OpenSea (Accueil, Marketplace, Visionneuse, Profil, formulaire mint), découverte de listes en analysant totalSupply, séparation des utilitaires partagée avec Rinkeby Infura et les clients mint du réseau principal - ADR, limite de débit et échecs de liste obsolètes pendant 30 s.
S'il n'y a pas d'indexeur, chaque actualisation est une analyse en chaîne
Le client du marché Bare Crypto trouve des listes ouvertes avec la boucle totalSupply() + tokenId, et non avec un index d'événement ou un sous-graphique. Des appels supplémentaires sont effectués à chaque étape, tels que wasNftSold, isListingOpenByTokenId et getLastListingByTokenId. À mesure que l’offre augmente, les coûts augmentent de manière linéaire – en fait, pire encore ; Le conteneur de réserve répète cette opération toutes les 30 secondes environ.```text
getListings(sold=false)
maxToken ← NFT.totalSupply()
for tokenId = maxToken … 1:
wasSold? open? isListing?
→ maybe getListingInfo(tokenId)
↓
N tokens × M RPC calls / poll
poll every ~30s (Reserve / Profile)
↓
Infura rate-limit → empty / stale grid
## Concepts à la première mention```text
📦 totalSupply Taraması
Listing kümesini, arz üst sınırından geriye tokenId döngüsüyle keşfetmek.
📦 N×RPC
Her token için birden fazla eth_call; poll ile çarpılınca kota tüketimi.
📦 Stale Listing
Satılmış veya iptal edilmiş ilanın UI'da hâlâ açık görünmesi; poll gecikmesi veya kısmi hata.
📦 Infura Rate Limit
Projeye bağlı istek kotası; aşılınca çağrılar başarısız olur veya yavaşlar.
```La boucle exécutée sur la petite collection Rinkeby n'est pas une fonctionnalité du produit à l'échelle du réseau principal.
## Vérité de l'algorithme
`getListings` lit d'abord `getTokenSupply()` à `totalSupply`, puis descend de `maxToken` à 1. Pour chaque jeton, il y a des chèques vendus/ouverts/listés et `getListingInfo` si nécessaire. Même les plages de jetons vides brûlent le RPC.```text
Cost model (approx)
cost ≈ totalSupply × calls_per_token × polls_per_minute
UI cards may add metadata/IPFS reads on top
```## Sondage de 30 secondes et interface utilisateur obsolète
Exécute `getListings` sur le montage du conteneur de réserve et parcourt `setInterval(..., 30000)`. Semblable à un profil, il analyse les biens en environ 30 s ; La visionneuse et les cartes utilisent des intervalles de 10 à 15 s. Pendant que l'utilisateur voit un achat, la grille peut rester obsolète pour un sondage – ou vide en raison de la limite de débit.
## Mode d'échec d'Infura
L'intégralité de l'analyse est dirigée vers le nœud de lecture (Rinkeby Infura HTTP/WSS). Lorsque le quota est atteint, les chemins try/catch partiels peuvent renvoyer `wasSold=false` ou une chaîne vide ; La grille devient silencieusement fausse. L'enfouissement des clés dans le dépôt aggrave le problème : l'ID du projet n'est jamais écrit dans la documentation ; env + la limitation de route fait partie de l'ADR.```text
ADR: Listing discovery
Accepted (prototype): scan totalSupply client-side
Rejected (then): subgraph / event indexer
Consequence: rate limits, stale polls, O(supply) cost
Follow-up: index Transfer/Listing events; paginate
```## Différence OpenSea
Le client OpenSea n'analyse pas l'intégralité de l'offre à partir du navigateur de chaque visiteur ; Il existe un index + API. Bare Crypto copie la référence du produit dans IA, pas l'infrastructure de découverte – il s'agit d'un compromis délibéré (ou du moins rétrospectif).
## Les confrontations les plus déroutantes de cet épisode```text
❌ totalSupply taraması = üretim keşif stratejisi
✓ Prototip; indexer yokluğunun semptomu
❌ 30s poll gerçek zamanlı piyasadır
✓ Poll, stale listing ve kota riskidir
❌ try/catch ile yutulan RPC hatası = güvenli UI
✓ Sessiz yanlış listing daha tehlikelidir
❌ Infura anahtarını client bundle'a gömmek pratiktir
✓ Sızıntı + ortak kota; env ve proxy düşünün
Liste de contrôle de votre propre système
- Combien d'appels eth_calls par jeton dans un tour
getListings? - Quel sera le coût par sondage lorsque l’offre sera multipliée par 10 ?
- Dans quel état vide/incorrect l’interface utilisateur se trouve-t-elle lorsque la limite de débit se produit ?
- Combien de secondes le gril peut-il rester rassis après l'achat ?
- Quels événements sont indexés et l'analyse est éliminée ?
Choses à retenir de cette section
- La découverte de listes est une analyse totaleSupply ; Ce n'est pas un indice OpenSea.
- Le sondage N×RPC × 30s rend inévitables le quota Infura et l’interface utilisateur obsolète.
- ADR : acceptation du prototype, suivi de l'indexeur – n'évolue pas silencieusement.
Demander chaque tokenId, pas le marché ; C'est un test de charge.
FAQ
Frequently asked questions
Qu’est-ce que totalSupply Scan ?
Explorer l'ensemble de listes en bouclant le tokenId vers l'arrière à partir de la limite supérieure de l'offre.
Qu’est-ce que N×RPC ?
Plusieurs eth_calls pour chaque jeton ; Consommation de quota multipliée par sondage.
« TotalSupply scan = stratégie de découverte de production » est-il correct ?
Prototype; symptôme d'absence d'indexeur
Que corrige cette section ?
Cette section décrit l'algorithme de découverte derrière la grille de type OpenSea et pourquoi il s'agit d'un sujet ADR. Le client du marché Bare Crypto trouve des listes ouvertes avec la boucle `totalSupply()` + tokenId, et non avec un index d'événement ou un sous-graphique. Des appels supplémentaires sont effectués à chaque étape, tels que `wasNftSold`, `isListingOpenByTokenId` et `getLastListingByTokenId`. À mesure que l’offre augmente, les coûts augmentent de manière linéaire – en fait, pire encore ; Le conteneur de réserve répète cette opération toutes les 30 secondes environ.
Principes d'ingénierie appris
- Le coût de découverte doit être visible pour la fourniture ; Ce n’est pas un produit O(N) déguisé.
- L'intervalle d'interrogation n'est pas un SLA ; Il est conçu avec périmé et quota.
- Avaler des erreurs RPC fait d’une mauvaise liste une fonctionnalité.
Continuer la lecture
Continuer la lecture
Suivant en série
Séparation des clients Rinkeby Testnet et Mainnet
Les clients Collection Mint se durcissent sur le réseau principal tandis que Marketplace SPA se verrouille sur Rinkeby Infura.…
Suivant en série
Architecture d'informations de type OpenSea
Bare Crypto Marketplace SPA établit une architecture d'informations qui copie clairement OpenSea en tant que références de produits : Accueil, Marketplace,…
Articles connexes
BareNFTReserve : Escrow, RandomBuy et RNG faible
CreateNewListing, buy et randomBuy réservés au propriétaire — keccak256 (revealNonce, block.difficulty, msg.sender) % 3.…