Wie kann ich das Augur (REP)-Token-Guthaben meines Kontos über JSON-RPC abrufen?

Wie kann ich den Vertragssaldo wie Augur (REP) für eine Adresse mit JSON-RPC überprüfen? Es scheint nicht viel Dokumentation darüber zu geben.

Kein Duplikat der obigen Fragen und Antworten. Bei dieser Frage geht es um das REP-Token-Guthaben für eine Adresse, nicht um das ETH-Guthaben.
@BokkyPooBah In der Tat frage ich nach dem REP-Token-Guthaben.

Antworten (1)

Um das REP-Token-Guthaben über JSON-RPC abzurufen, müssen Sie die eth_callMethode verwenden. Weitere Einzelheiten zur Verwendung von eth_call.

Und von augur-core/src/repContract.se ist die balanceOf(...)Funktion definiert als:

def balanceOf(address: address):
    return(self.reporting[address]: uint256)

Und das entspricht dem ERC: Token-Standard #20 , wo die balanceOf(...)Funktion die Signatur haben sollte:

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

Um die Funktionssignatur in zu finden, führe gethich den folgenden Befehl aus:

> web3.sha3('balanceOf(address)').substring(0,10)
"0x70a08231"

Als Beispiel verwenden wir den REP-Token-Saldo für die Adresse 0xab11204cfeaccfa63c2d23aef2ea9accdb0a0d5 mit dem folgenden Saldo:

Geben Sie hier die Bildbeschreibung ein

Ich muss jetzt die Funktionssignatur von oben mit einer mit links aufgefüllten Null-Darstellung der Adresse verwenden, die an die balanceOf(...)Funktion übergeben werden soll:

0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5

Von etherscan.io/token/REP lautet die REP-Vertragsadresse 0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5.

Ich habe den folgenden JSON-RPC-Befehl für meinen Parity-Knoten ausgeführt (für gethkönnen Sie den --headerParameter weglassen):

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}], "id":1}'

Das Ergebnis des obigen Befehls ist:

{"jsonrpc":"2.0","result":"0x000000000000000000000000000000000000000000010843f6b148a2ec22c604","id":1}

Und um zu bestätigen, dass die Ergebnisse korrekt sind, habe ich den folgenden Befehl in ausgeführt geth:

> new BigNumber("000000000000000000000000000000000000000000010843f6b148a2ec22c604", 16)/1e18
1247958.4593995938

Sie müssen das Hex-Ergebnis in Ihrer Anwendung in eine Zahl umwandeln.


Aktualisierung 18. Oktober 2016

Wie im RPC-Fehler „ungültiger oder fehlender Wert für Parameter“ beim Aufrufen von void-Funktionen für Vertragskonstantenparams dokumentiert, müssen Sie der Liste möglicherweise einen Blockparameter hinzufügen . Ihr Befehl mit dem Blockparameter lautet:

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}, "latest"], "id":1}'

Referenz Die Standardblockparameter und eth_call.

eth_callohne den Blockparameter hat früher funktioniert, scheint aber jetzt Pflicht zu sein.

Tolle Antwort! Ich werde morgen prüfen, ob dies funktioniert, und wenn dies der Fall ist, akzeptiere ich Ihre Antwort.
Wie immer ein exzellenter Beitrag von Bokky. Das heute zurückgegebene Ergebnis ist anders, aber ich denke, das liegt daran, dass der Besitzer dieses Kontos mehr Token verkauft, übertragen oder gekauft haben muss.