Wie kann ich das Token-Guthaben einer Adresse herausfinden?

Wie kann ich mit Solidity das Token-Guthaben einer Adresse ermitteln?

Ich habe zum Beispiel die Adresse einer anderen Person und muss die Anzahl der Token auf seinem Konto wissen.

Antworten (4)

Es gibt zwei Möglichkeiten, https://etherscan.io/ zu verwenden :

  1. Navigieren Sie zu https://etherscan.io/ . Geben Sie das Konto in das Suchfeld oben rechts ein und klicken Sie auf Los . Wenn dem Konto Token zugeordnet sind, wird das Dropdown-Menü Token Tracker angezeigt. Wenn Sie darauf klicken, wird Ihnen die Anzahl der Token angezeigt, die das Konto besitzt. Zum Beispiel: https://etherscan.io/address/0xc49cee55a099349bc5a67a6a454dbad3833e7b14 :

Geben Sie hier die Bildbeschreibung ein

  1. Wenn Sie das Token kennen, navigieren Sie zu https://etherscan.io/ . Wählen Sie das Menü Token -> Token anzeigen. Wählen Sie dann das Token in der Liste aus. In diesem Beispiel betrachten wir Golem. Geben Sie die gewünschte Adresse in das Feld Nach Adresse filtern ein und klicken Sie auf Anwenden . Der folgende Bildschirm zeigt die Details für dieselbe Adresse im obigen Beispiel:

Geben Sie hier die Bildbeschreibung ein



Update zur Beantwortung der spezifischeren Frage zum Erreichen des Gleichgewichts mithilfe von Solidität

Hier ist ein Beispiel mit GNT, wo ich die ABI aus den GNT-Vertragsdetails unter 0xa74476443119A942dE498590Fe1f2454d7D4aC0d erhalten habe :

> var gntABI = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"golemFactory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_master","type":"address"}],"name":"setMigrationMaster","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"migrate","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"migrationMaster","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenCreationCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_agent","type":"address"}],"name":"setMigrationAgent","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"migrationAgent","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalMigrated","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenCreationMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"funding","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenCreationRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"create","outputs":[],"payable":true,"type":"function"},{"inputs":[{"name":"_golemFactory","type":"address"},{"name":"_migrationMaster","type":"address"},{"name":"_fundingStartBlock","type":"uint256"},{"name":"_fundingEndBlock","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Migrate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Refund","type":"event"}];
undefined
> var gntAddress = "0xa74476443119A942dE498590Fe1f2454d7D4aC0d";
undefined
> var address = "0xc49cee55a099349bc5a67a6a454dbad3833e7b14"; // Address in examples above
undefined
> var gntContract = eth.contract(gntABI).at(gntAddress);
undefined
> var balance = gntContract.balanceOf(address).div(1e18);
undefined
> balance
23771.112437704491608715



Mit Skript aktualisieren, um GNT-Salden für mehrere Konten zu finden

Das getGNTBalancesSkript von https://github.com/bokkypoobah/TokenTrader/tree/master/scripts erzeugt die folgende Art von Ausgabe:

  #     Account                                                             GNT                        ETH
------- ------------------------------------------ ---------------------------- --------------------------
  0     0x4319c142f7b6cd722fc3a49289b8a22a7a51ca1e 180000000.000000000000000000       0.000000000000000000
  1     0x168ae36b4386cea14475faa41498a0ea63c67dd7 100000999.999999991611392000   11717.218877544008288507
  2     0xd39379d7887c6a9ebd01007e2b96efc774652047  57459993.000000000000000000  106160.984854218882216845
------- ------------------------------------------ ---------------------------- --------------------------
  3     Total                                      337460992.999999991611392000  117878.203731762890505352

Ändern Sie einfach die Adresse im Skript in einen beliebigen ERC20-kompatiblen Token, um die Salden für diesen Token anzuzeigen.

Danke, aber wie finde ich den Code auf Solidity. Zum Beispiel gibt es eine balanseOf-Funktion für Ether, aber ich brauche balans-Token.
Aktualisierte Antwort mit einem Beispiel in Solidity

Etherscan stellt eine API bereit , die stattdessen verwendet werden kann, um das Gleichgewicht zu finden.

Abrufen des ERC20-Token-Kontostands für TokenContractAddress

https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055&address=0xe04f27eb70e025b78871a2ad7eabe85e61212761&tag=latest&apiKeyToken=YourApiKeyToken

Wobei Adresse die Adresse der Person ist.

Und Contractaddress ist in diesem Fall die Token-AdresseElcoin

Gibt es überhaupt eine Liste von Inhabern eines bestimmten ERC20-Vertrags?

Mit RPC:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{"to": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", "data":"0x70a082310000000000000000000000000b88516a6d22bf8e0d3657effbd41577c5fd4cb7"}, "latest"],"id":67}' -H "Content-Type: application/json" http://127.0.0.1:8545/

Einzelheiten finden Sie in meiner Antwort hier

Es ist komplizierter, wenn Sie ein Token abfragen möchten, das Sie zum Testen bereitgestellt haben. Du kannst entweder:

  1. Verwenden Sie die Hex-Version der balanceOf(address)ERC20-kompatiblen Tokens in einer js-Datei.
  2. Kompilieren Sie Ihre sol-Datei mit solcoder neu truffle, entweder programmgesteuert oder über das Terminal, und laden Sie dann Ihre *.abiDateien mitweb3.eth.contract(ABI).at(address);
  3. RPC mit etherscan.io, wie @garg10may oben erklärt hat

Ich persönlich habe 1 gewählt, Sie können hier einen Beispielcode finden .