Wie kann man wissen, welche ERC20-Token eine Brieftasche besitzt?

Wenn Sie auf Etherscan die Details für eine bestimmte Adresse anzeigen, können Sie eine Liste von ERC20-Token sehen, die dieser Adresse gehören:Token-Guthaben

Wie macht Etherscan das? Soweit ich weiß, müssen Sie eine Funktion für jeden ERC20-Vertrag aufrufen, um den Kontostand für eine bestimmte Adresse anzuzeigen. Gibt es eine Funktion in web3, die diese Informationen bereitstellt?

Antworten (1)

Sie haben Recht mit der Funktion, der ERC20-Standard definiert eine Funktion, die alle ERC20-kompatiblen Token wie folgt enthalten müssen :

function balanceOf(address _owner) view returns (uint256 balance)

Wenn Sie diese Funktion für einen bestimmten Token-Vertrag für eine bestimmte Adresse aufrufen, wird zurückgegeben, wie viele dieser Token diese bestimmte Adresse besitzt.

Woher kennt Etherscan all die verschiedenen Token, die Sie haben? Ich weiß es nicht genau, aber wie der Name ihrer Website andeutet, überwacht ihr System die Blockchain und sortiert die Daten in ein lesbares Format (dh die Website). Vermutlich überprüft ihr System jedes Mal, wenn ein Vertrag bereitgestellt wird, und fragt: „Ist dies ein ERC20-Token-Vertrag?“ und wenn ja, nimmt er das zur Kenntnis.

Denken Sie daran, dass die Blockchain im Grunde nur eine große Datenbank ist. Wenn Sie also eine Brieftaschenadresse eingeben, könnte sie einfach balanceOfalle verschiedenen ERC20-Token, die ihr bekannt sind, mit Ihrer Adresse gegen ihre eigene Kopie der Blockchain aufrufen und die zurückkommenden anzeigen größer als 0.

(Hinweis: Aus Effizienzgründen können sie tatsächlich nur auf Änderungen achten und alle relevanten Daten in ihrer eigenen privaten Backend-Datenbank speichern - aber das Endergebnis ist dasselbe).

Um den letzten Teil Ihrer Frage zu beantworten, können Sie mit Web3, wenn wir davon ausgehen, dass es sich um tokenIhren ERC20-Token-Vertrag handelt, wie folgt Salden erhalten:

const balance = await token.methods.balanceOf(someAddress).call();
gibt diese Funktion nicht balanceOfden Saldo dieses Konto-Token-Inhabers zurück? //Get the token balance for account tokenOwner. das steht drauf geschrieben.