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.
Um das REP-Token-Guthaben über JSON-RPC abzurufen, müssen Sie die eth_call
Methode 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 geth
ich 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:
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 geth
können Sie den --header
Parameter 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.
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_call
ohne den Blockparameter hat früher funktioniert, scheint aber jetzt Pflicht zu sein.
Datenschutz ist ein Menschenrecht.eth
julianisch