JSON-RPC-API
Letzte Aktualisierung der Seite: 23. Februar 2026
Damit eine Softwareanwendung mit der Ethereum-Blockchain interagieren kann – sei es durch das Lesen von Blockchain-Daten oder das Senden von Transaktionen an das Netzwerk –, muss sie sich mit einem Ethereum-Blockchain-Knoten verbinden.
Zu diesem Zweck implementiert jeder Ethereum-Client eine JSON-RPC-Spezifikation (opens in a new tab), sodass es eine einheitliche Reihe von Methoden gibt, auf die sich Anwendungen unabhängig von der spezifischen Blockchain-Knoten- oder Client-Implementierung verlassen können.
JSON-RPC (opens in a new tab) ist ein zustandsloses, leichtgewichtiges Remote-Procedure-Call-Protokoll (RPC). Es definiert verschiedene Datenstrukturen und die Regeln für deren Verarbeitung. Es ist transportunabhängig, da die Konzepte innerhalb desselben Prozesses, über Sockets, über HTTP oder in vielen verschiedenen Messaging-Umgebungen verwendet werden können. Es verwendet JSON (RFC 4627) als Datenformat.
Anwendungsimplementierungen
Ethereum-Anwendungen können bei der Implementierung der JSON-RPC-Spezifikation jeweils unterschiedliche Programmiersprachen verwenden. Weitere Details zu bestimmten Programmiersprachen finden Sie in der jeweiligen Anwendungsdokumentation. Wir empfehlen, die Dokumentation jeder Anwendung auf die neuesten Informationen zur API-Unterstützung zu prüfen.
Hilfsbibliotheken
Während Sie sich dafür entscheiden können, direkt über die JSON-RPC-API mit Ethereum-Clients zu interagieren, gibt es für Dapp-Entwickler oft einfachere Optionen. Es existieren viele Bibliotheken für JavaScript und Backend-APIs, die Wrapper für die JSON-RPC-API bereitstellen. Mit diesen Bibliotheken können Entwickler intuitive, einzeilige Methoden in der Programmiersprache ihrer Wahl schreiben, um (im Hintergrund) JSON-RPC-Anfragen zu initialisieren, die mit Ethereum interagieren.
Konsens-Client-APIs
Diese Seite befasst sich hauptsächlich mit der JSON-RPC-API, die von Ethereum-Ausführungs-Clients verwendet wird. Allerdings verfügen Konsens-Clients auch über eine RPC-API, die es Benutzern ermöglicht, Informationen über den Blockchain-Knoten abzufragen, Beacon-Blöcke, den Beacon-Zustand und andere konsensbezogene Informationen direkt von einem Blockchain-Knoten anzufordern. Diese API ist auf der Beacon-API-Webseite (opens in a new tab) dokumentiert.
Eine interne API wird auch für die Kommunikation zwischen Clients innerhalb eines Blockchain-Knotens verwendet – das heißt, sie ermöglicht es dem Konsens-Client und dem Ausführungs-Client, Daten auszutauschen. Diese wird als „Engine API“ bezeichnet und die Spezifikationen sind auf GitHub (opens in a new tab) verfügbar.
Ausführungs-Client-Spezifikation
Lesen Sie die vollständige JSON-RPC-API-Spezifikation auf GitHub (opens in a new tab). Diese API ist auf der Webseite der Execution API (opens in a new tab) dokumentiert und enthält einen Inspektor, um alle verfügbaren Methoden auszuprobieren.
Konventionen
Hex-Wert-Codierung
Zwei wichtige Datentypen werden über JSON übergeben: unformatierte Byte-Arrays und Mengen (Quantities). Beide werden mit einer Hex-Codierung übergeben, haben jedoch unterschiedliche Anforderungen an die Formatierung.
Mengen
Bei der Codierung von Mengen (Ganzzahlen, Zahlen): als Hex codieren, mit dem Präfix "0x" versehen, die kompakteste Darstellung wählen (kleine Ausnahme: Null sollte als "0x0" dargestellt werden).
Hier sind einige Beispiele:
- 0x41 (65 im Dezimalsystem)
- 0x400 (1024 im Dezimalsystem)
- FALSCH: 0x (sollte immer mindestens eine Ziffer haben - Null ist "0x0")
- FALSCH: 0x0400 (keine führenden Nullen erlaubt)
- FALSCH: ff (muss das Präfix 0x haben)
Unformatierte Daten
Bei der Codierung unformatierter Daten (Byte-Arrays, Kontoadressen, Hashes, Bytecode-Arrays): als Hex codieren, mit dem Präfix "0x" versehen, zwei Hex-Ziffern pro Byte.
Hier sind einige Beispiele:
- 0x41 (Größe 1, "A")
- 0x004200 (Größe 3, "0B0")
- 0x (Größe 0, "")
- FALSCH: 0xf0f0f (muss eine gerade Anzahl von Ziffern sein)
- FALSCH: 004200 (muss das Präfix 0x haben)
Der Block-Parameter
Die folgenden Methoden haben einen Block-Parameter:
Wenn Anfragen gestellt werden, die den Zustand von Ethereum abfragen, bestimmt der angegebene Block-Parameter die Höhe des Blocks.
Die folgenden Optionen sind für den Block-Parameter möglich:
HEX String- eine ganzzahlige BlocknummerString "earliest"- für den frühesten/Genesis-BlockString "latest"- für den zuletzt vorgeschlagenen BlockString "safe"- für den letzten sicheren Head-BlockString "finalized"- für den letzten finalisierten BlockString "pending"- für den ausstehenden Zustand/Transaktionen
Beispiele
Auf dieser Seite zeigen wir Beispiele, wie man einzelne JSON_RPC-API-Endpunkte mit dem Befehlszeilentool curl (opens in a new tab) verwendet. Diese Beispiele für einzelne Endpunkte finden Sie unten im Abschnitt Curl-Beispiele. Weiter unten auf der Seite bieten wir auch ein End-to-End-Beispiel für das Kompilieren und Bereitstellen eines Smart Contracts unter Verwendung eines Geth-Blockchain-Knotens, der JSON_RPC-API und curl.
Curl-Beispiele
Beispiele für die Verwendung der JSON_RPC-API durch curl (opens in a new tab)-Anfragen an einen Ethereum-Blockchain-Knoten werden unten bereitgestellt. Jedes Beispiel enthält eine Beschreibung des spezifischen Endpunkts, seiner Parameter, des Rückgabetyps und ein ausgearbeitetes Beispiel für seine Verwendung.
Die curl-Anfragen könnten eine Fehlermeldung bezüglich des Inhaltstyps zurückgeben. Dies liegt daran, dass die Option --data den Inhaltstyp auf application/x-www-form-urlencoded setzt. Wenn Ihr Blockchain-Knoten dies beanstandet, setzen Sie den Header manuell, indem Sie -H "Content-Type: application/json" an den Anfang des Aufrufs setzen. Die Beispiele enthalten auch nicht die Kombination aus URL/IP und Port, die das letzte Argument für curl sein muss (z. B. 127.0.0.1:8545). Eine vollständige curl-Anfrage einschließlich dieser zusätzlichen Daten hat die folgende Form:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545Gossip, Zustand, Historie
Eine Handvoll zentraler JSON-RPC-Methoden benötigt Daten aus dem Ethereum-Netzwerk und lässt sich sauber in drei Hauptkategorien einteilen: Gossip, Zustand und Historie. Nutzen Sie die Links in diesen Abschnitten, um zu jeder Methode zu springen, oder verwenden Sie das Inhaltsverzeichnis, um die gesamte Liste der Methoden zu erkunden.
Gossip-Methoden
Diese Methoden verfolgen die Spitze der Chain. Auf diese Weise verbreiten sich Transaktionen im Netzwerk, finden ihren Weg in Blöcke und so erfahren Anwendungen von neuen Blöcken.
Zustandsmethoden
Methoden, die den aktuellen Zustand aller gespeicherten Daten melden. Der „Zustand“ ist wie ein großer gemeinsamer Arbeitsspeicher (RAM) und umfasst Kontostände, Vertragsdaten und Gasschätzungen.
Historienmethoden
Ruft historische Aufzeichnungen jedes Blocks bis zum Genesis-Block ab. Dies ist wie eine große Datei, an die nur angehängt werden kann (append-only), und umfasst alle Block-Header, Block-Körper, Uncle-Blöcke und Transaktionsbelege.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
JSON-RPC API Playground
Du kannst das Playground-Tool (opens in a new tab) verwenden, um die API-Methoden zu entdecken und auszuprobieren. Es zeigt dir auch, welche Methoden und Netzwerke von verschiedenen Anbietern von Blockchain-Knoten unterstützt werden.
JSON-RPC-API-Methoden
web3_clientVersion
Gibt die aktuelle Version der Anwendung zurück.
Parameter
Keine
Rückgabe
String - Die aktuelle Version der Anwendung
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Ergebnis4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}web3_sha3
Gibt den Keccak-256-Hash (nicht den standardisierten SHA3-256) der angegebenen Daten zurück.
Parameter
DATA- Die Daten, die in einen SHA3-Hash konvertiert werden sollen
1params: ["0x68656c6c6f20776f726c64"]Rückgabe
DATA - Das SHA3-Ergebnis der angegebenen Zeichenfolge.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Ergebnis4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}net_version
Gibt die aktuelle Netzwerk-ID zurück.
Parameter
Keine
Rückgabe
String - Die aktuelle Netzwerk-ID.
Die vollständige Liste der aktuellen Netzwerk-IDs ist unter chainlist.org (opens in a new tab) verfügbar. Einige häufige sind:
1: Ethereum Mainnet11155111: Sepolia-Testnet560048: Hoodi-Testnet
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Ergebnis4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
Gibt true zurück, wenn die Anwendung aktiv auf Netzwerkverbindungen lauscht.
Parameter
Keine
Rückgabe
Boolean - true beim Lauschen, andernfalls false.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Ergebnis4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
Gibt die Anzahl der Peers zurück, die derzeit mit der Anwendung verbunden sind.
Parameter
Keine
Rückgabe
QUANTITY - Ganzzahl der Anzahl der verbundenen Peers.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Ergebnis4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}eth_protocolVersion
Gibt die aktuelle Ethereum-Protokollversion zurück. Beachten Sie, dass diese Methode in Geth nicht verfügbar ist (opens in a new tab).
Parameter
Keine
Rückgabe
String - Die aktuelle Ethereum-Protokollversion
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Ergebnis4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
Gibt ein Objekt mit Daten zum Synchronisierungsstatus oder false zurück.
Parameter
Keine
Rückgabe
Die genauen Rückgabedaten variieren zwischen den Implementierungen der Anwendung. Alle Anwendungen geben False zurück, wenn der Blockchain-Knoten nicht synchronisiert wird, und alle Anwendungen geben die folgenden Felder zurück.
Object|Boolean, Ein Objekt mit Synchronisierungsstatusdaten oder FALSE, wenn nicht synchronisiert wird:
startingBlock:QUANTITY- Der Block, bei dem der Import gestartet wurde (wird erst zurückgesetzt, nachdem die Synchronisierung ihren Kopf erreicht hat)currentBlock:QUANTITY- Der aktuelle Block, identisch mit eth_blockNumberhighestBlock:QUANTITY- Der geschätzte höchste Block
Die einzelnen Anwendungen können jedoch auch zusätzliche Daten bereitstellen. Zum Beispiel gibt Geth Folgendes zurück:
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "currentBlock": "0x3cf522",6 "healedBytecodeBytes": "0x0",7 "healedBytecodes": "0x0",8 "healedTrienodes": "0x0",9 "healingBytecode": "0x0",10 "healingTrienodes": "0x0",11 "highestBlock": "0x3e0e41",12 "startingBlock": "0x3cbed5",13 "syncedAccountBytes": "0x0",14 "syncedAccounts": "0x0",15 "syncedBytecodeBytes": "0x0",16 "syncedBytecodes": "0x0",17 "syncedStorage": "0x0",18 "syncedStorageBytes": "0x0"19 }20}Alle anzeigenWohingegen Besu Folgendes zurückgibt:
1{2 "jsonrpc": "2.0",3 "id": 51,4 "result": {5 "startingBlock": "0x0",6 "currentBlock": "0x1518",7 "highestBlock": "0x9567a3",8 "pulledStates": "0x203ca",9 "knownStates": "0x200636"10 }11}Alle anzeigenWeitere Details finden Sie in der Dokumentation Ihrer spezifischen Anwendung.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Oder wenn nicht synchronisiert wird14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Alle anzeigeneth_coinbase
Gibt die Coinbase-Adresse der Anwendung zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Hinweis: Diese Methode ist seit v1.14.0 veraltet und wird nicht mehr unterstützt. Der Versuch, diese Methode zu verwenden, führt zu einem Fehler „Method not supported“ (Methode nicht unterstützt).
Parameter
Keine
Rückgabe
DATA, 20 Bytes - die aktuelle Coinbase-Adresse.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Ergebnis4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}eth_chainId
Gibt die Chain-ID zurück, die zum Signieren von vor Replay-Angriffen geschützten Transaktionen verwendet wird.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
Keine
Rückgabe
chainId, hexadezimaler Wert als String, der die Ganzzahl der aktuellen Chain-ID darstellt.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Ergebnis4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}eth_mining
Gibt true zurück, wenn die Anwendung aktiv neue Blöcke schürft (Mining). Dies kann nur für Proof-of-Work-Netzwerke true zurückgeben und ist in einigen Anwendungen seit dem Merge möglicherweise nicht mehr verfügbar.
Parameter
Keine
Rückgabe
Boolean - gibt true zurück, wenn die Anwendung schürft, andernfalls false.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'34{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}eth_hashrate
Gibt die Anzahl der Hashes pro Sekunde zurück, mit denen der Blockchain-Knoten schürft. Dies kann nur für Proof-of-Work-Netzwerke true zurückgeben und ist in einigen Anwendungen seit dem Merge möglicherweise nicht mehr verfügbar.
Parameter
Keine
Rückgabe
QUANTITY - Anzahl der Hashes pro Sekunde.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Ergebnis4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}eth_gasPrice
Gibt eine Schätzung des aktuellen Preises pro Gas in Wei zurück. Zum Beispiel untersucht die Besu-Anwendung die letzten 100 Blöcke und gibt standardmäßig den Median-Gaspreis pro Einheit zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
Keine
Rückgabe
QUANTITY - Ganzzahl des aktuellen Gaspreises in Wei.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Ergebnis4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}eth_accounts
Gibt eine Liste der Adressen zurück, die der Anwendung gehören.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
Keine
Rückgabe
Array von DATA, 20 Bytes - Adressen, die der Anwendung gehören.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}eth_blockNumber
Gibt die Nummer des neuesten Blocks zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
Keine
Rückgabe
QUANTITY - Ganzzahl der aktuellen Blocknummer, auf der sich die Anwendung befindet.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Ergebnis4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}eth_getBalance
Gibt den Kontostand des Kontos an einer bestimmten Adresse zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 20 Bytes - Adresse, deren Kontostand überprüft werden soll.QUANTITY|TAG- ganzzahlige Blocknummer oder der String"latest","earliest","pending","safe"oder"finalized", siehe den Block-Parameter
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Rückgabe
QUANTITY - Ganzzahl des aktuellen Kontostands in Wei.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}eth_getStorageAt
Gibt den Wert von einer Speicherposition an einer bestimmten Adresse zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 20 Bytes - Adresse des Speichers.QUANTITY- Ganzzahl der Position im Speicher.QUANTITY|TAG- ganzzahlige Blocknummer oder der String"latest","earliest","pending","safe","finalized", siehe den Block-Parameter
Rückgabe
DATA - der Wert an dieser Speicherposition.
Beispiel
Die Berechnung der korrekten Position hängt vom abzurufenden Speicher ab. Betrachten Sie den folgenden Smart Contract, der unter 0x295a70b2de5e3953354a6a8344e616ed314d7251 von der Adresse 0x391694e7e0b0cce554cb130d723a9d27458f9298 bereitgestellt wurde.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}Das Abrufen des Wertes von pos0 ist unkompliziert:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}Das Abrufen eines Elements der Map ist schwieriger. Die Position eines Elements in der Map wird berechnet mit:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))Das bedeutet, um den Speicher auf pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] abzurufen, müssen wir die Position berechnen mit:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)Die Geth-Konsole, die mit der web3-Bibliothek geliefert wird, kann für die Berechnung verwendet werden:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Nun zum Abrufen des Speichers:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}eth_getTransactionCount
Gibt die Anzahl der Transaktionen zurück, die von einer Adresse gesendet wurden.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 20 Bytes - Adresse.QUANTITY|TAG- ganzzahlige Blocknummer oder der String"latest","earliest","pending","safe"oder"finalized", siehe den Block-Parameter
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // Zustand beim neuesten Block4]Rückgabe
QUANTITY - Ganzzahl der Anzahl der von dieser Adresse gesendeten Transaktionen.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getBlockTransactionCountByHash
Gibt die Anzahl der Transaktionen in einem Block aus einem Block zurück, der dem angegebenen Block-Hash entspricht.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Hash eines Blocks
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Rückgabe
QUANTITY - Ganzzahl der Anzahl der Transaktionen in diesem Block.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getBlockTransactionCountByNumber
Gibt die Anzahl der Transaktionen in einem Block zurück, der der angegebenen Blocknummer entspricht.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
QUANTITY|TAG- Ganzzahl einer Blocknummer oder der String"earliest","latest","pending","safe"oder"finalized", wie im Block-Parameter.
1params: [2 "0x13738ca", // 203962343]Rückgabe
QUANTITY - Ganzzahl der Anzahl der Transaktionen in diesem Block.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getUncleCountByBlockHash
Gibt die Anzahl der Uncles in einem Block aus einem Block zurück, der dem angegebenen Block-Hash entspricht.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Hash eines Blocks
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Rückgabe
QUANTITY - Ganzzahl der Anzahl der Uncles in diesem Block.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getUncleCountByBlockNumber
Gibt die Anzahl der Uncles in einem Block aus einem Block zurück, der der angegebenen Blocknummer entspricht.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
QUANTITY|TAG- Ganzzahl einer Blocknummer oder der String"latest","earliest","pending","safe"oder"finalized", siehe den Block-Parameter
1params: [2 "0xe8", // 2323]Rückgabe
QUANTITY - Ganzzahl der Anzahl der Uncles in diesem Block.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0" // 08}eth_getCode
Gibt den Code an einer bestimmten Adresse zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 20 Bytes - AdresseQUANTITY|TAG- ganzzahlige Blocknummer oder der String"latest","earliest","pending","safe"oder"finalized", siehe den Block-Parameter
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Rückgabe
DATA - der Code von der angegebenen Adresse.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
Die Sign-Methode berechnet eine Ethereum-spezifische Signatur mit: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
Durch das Hinzufügen eines Präfixes zur Nachricht wird die berechnete Signatur als Ethereum-spezifische Signatur erkennbar. Dies verhindert Missbrauch, bei dem eine bösartige Dapp beliebige Daten (z. B. eine Transaktion) signieren und die Signatur verwenden kann, um sich als das Opfer auszugeben.
Hinweis: Die Adresse, mit der signiert werden soll, muss entsperrt sein.
Parameter
DATA, 20 Bytes - AdresseDATA, N Bytes - zu signierende Nachricht
Rückgabe
DATA: Signatur
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_signTransaction
Signiert eine Transaktion, die zu einem späteren Zeitpunkt mit eth_sendRawTransaction an das Netzwerk übermittelt werden kann.
Parameter
Object- Das Transaktionsobjekt
type:from:DATA, 20 Bytes - Die Adresse, von der die Transaktion gesendet wird.to:DATA, 20 Bytes - (optional beim Erstellen eines neuen Smart Contracts) Die Adresse, an die die Transaktion gerichtet ist.gas:QUANTITY- (optional, Standard: 90000) Ganzzahl des für die Transaktionsausführung bereitgestellten Gases. Es wird ungenutztes Gas zurückgegeben.gasPrice:QUANTITY- (optional, Standard: noch festzulegen) Ganzzahl des Gaspreises, der für jedes bezahlte Gas verwendet wird, in Wei.value:QUANTITY- (optional) Ganzzahl des mit dieser Transaktion gesendeten Wertes, in Wei.data:DATA- Der kompilierte Code eines Smart Contracts ODER der Hash der aufgerufenen Methodensignatur und der codierten Parameter.nonce:QUANTITY- (optional) Ganzzahl einer Nonce. Dies ermöglicht das Überschreiben Ihrer eigenen ausstehenden Transaktionen, die dieselbe Nonce verwenden.
Rückgabe
DATA, Das RLP-codierte Transaktionsobjekt, das von dem angegebenen Konto signiert wurde.
Beispiel
1// Anfrage2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Ergebnis4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_sendTransaction
Erstellt eine neue Nachrichtenaufruf-Transaktion oder eine Smart-Contract-Erstellung, wenn das Datenfeld Code enthält, und signiert sie mit dem in from angegebenen Konto.
Parameter
Object- Das Transaktionsobjekt
from:DATA, 20 Bytes - Die Adresse, von der die Transaktion gesendet wird.to:DATA, 20 Bytes - (optional beim Erstellen eines neuen Smart Contracts) Die Adresse, an die die Transaktion gerichtet ist.gas:QUANTITY- (optional, Standard: 90000) Ganzzahl des für die Transaktionsausführung bereitgestellten Gases. Es wird ungenutztes Gas zurückgegeben.gasPrice:QUANTITY- (optional, Standard: noch festzulegen) Ganzzahl des Gaspreises, der für jedes bezahlte Gas verwendet wird.value:QUANTITY- (optional) Ganzzahl des mit dieser Transaktion gesendeten Wertes.input:DATA- Der kompilierte Code eines Smart Contracts ODER der Hash der aufgerufenen Methodensignatur und der codierten Parameter.nonce:QUANTITY- (optional) Ganzzahl einer Nonce. Dies ermöglicht das Überschreiben Ihrer eigenen ausstehenden Transaktionen, die dieselbe Nonce verwenden.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Alle anzeigenRückgabe
DATA, 32 Bytes - der Transaktions-Hash oder der Null-Hash, wenn die Transaktion noch nicht verfügbar ist.
Verwenden Sie eth_getTransactionReceipt, um die Vertragsadresse zu erhalten, nachdem die Transaktion in einem Block vorgeschlagen wurde, wenn Sie einen Smart Contract erstellt haben.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_sendRawTransaction
Erstellt eine neue Nachrichtenaufruf-Transaktion oder eine Smart-Contract-Erstellung für signierte Transaktionen.
Parameter
DATA, Die signierten Transaktionsdaten.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Rückgabe
DATA, 32 Bytes - der Transaktions-Hash oder der Null-Hash, wenn die Transaktion noch nicht verfügbar ist.
Verwenden Sie eth_getTransactionReceipt, um die Vertragsadresse zu erhalten, nachdem die Transaktion in einem Block vorgeschlagen wurde, wenn Sie einen Smart Contract erstellt haben.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_call
Führt sofort einen neuen Nachrichtenaufruf aus, ohne eine Transaktion auf der Blockchain zu erstellen. Wird oft zum Ausführen von schreibgeschützten Smart-Contract-Funktionen verwendet, zum Beispiel balanceOf für einen ERC-20-Vertrag.
Parameter
Object- Das Transaktionsaufruf-Objekt
from:DATA, 20 Bytes - (optional) Die Adresse, von der die Transaktion gesendet wird.to:DATA, 20 Bytes - Die Adresse, an die die Transaktion gerichtet ist.gas:QUANTITY- (optional) Ganzzahl des für die Transaktionsausführung bereitgestellten Gases. eth_call verbraucht null Gas, aber dieser Parameter wird möglicherweise von einigen Ausführungen benötigt.gasPrice:QUANTITY- (optional) Ganzzahl des Gaspreises, der für jedes bezahlte Gas verwendet wirdvalue:QUANTITY- (optional) Ganzzahl des mit dieser Transaktion gesendeten Wertesinput:DATA- (optional) Hash der Methodensignatur und der codierten Parameter. Weitere Details finden Sie unter Ethereum Contract ABI in der Solidity-Dokumentation (opens in a new tab).
QUANTITY|TAG- ganzzahlige Blocknummer oder der String"latest","earliest","pending","safe"oder"finalized", siehe den Block-Parameter
Rückgabe
DATA - der Rückgabewert des ausgeführten Smart Contracts.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}eth_estimateGas
Generiert und gibt eine Schätzung zurück, wie viel Gas erforderlich ist, damit die Transaktion abgeschlossen werden kann. Die Transaktion wird nicht zur Blockchain hinzugefügt. Beachten Sie, dass die Schätzung aus verschiedenen Gründen, einschließlich EVM-Mechaniken und der Leistung des Blockchain-Knotens, deutlich höher sein kann als die tatsächlich von der Transaktion verbrauchte Gasmenge.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
Siehe Parameter von eth_call, mit der Ausnahme, dass alle Eigenschaften optional sind. Wenn kein Gaslimit angegeben ist, verwendet Geth das Block-Gaslimit aus dem ausstehenden Block als Obergrenze. Infolgedessen reicht die zurückgegebene Schätzung möglicherweise nicht aus, um den Aufruf/die Transaktion auszuführen, wenn die Gasmenge höher ist als das Gaslimit des ausstehenden Blocks.
Rückgabe
QUANTITY - die verbrauchte Gasmenge.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}eth_getBlockByHash
Gibt Informationen zu einem Block anhand des Hashes zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Hash eines Blocks.Boolean- Wenntrue, werden die vollständigen Transaktionsobjekte zurückgegeben, wennfalse, nur die Hashes der Transaktionen.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Rückgabe
Object - Ein Blockobjekt oder null, wenn kein Block gefunden wurde:
number:QUANTITY- die Blocknummer.null, wenn es sich um einen ausstehenden Block handelt.hash:DATA, 32 Bytes - Hash des Blocks.null, wenn es sich um einen ausstehenden Block handelt.parentHash:DATA, 32 Bytes - Hash des übergeordneten Blocks.nonce:DATA, 8 Bytes - Hash des generierten Proof-of-Work.null, wenn es sich um einen ausstehenden Block handelt,0x0für Proof-of-Stake-Blöcke (seit dem Merge)sha3Uncles:DATA, 32 Bytes - SHA3 der Uncles-Daten im Block.logsBloom:DATA, 256 Bytes - der Bloom-Filter für die Protokolle des Blocks.null, wenn es sich um einen ausstehenden Block handelt.transactionsRoot:DATA, 32 Bytes - die Wurzel des Transaktions-Tries des Blocks.stateRoot:DATA, 32 Bytes - die Wurzel des finalen Zustands-Tries des Blocks.receiptsRoot:DATA, 32 Bytes - die Wurzel des Beleg-Tries des Blocks.miner:DATA, 20 Bytes - die Adresse des Begünstigten, dem die Block-Belohnungen gegeben wurden.difficulty:QUANTITY- Ganzzahl der Schwierigkeit für diesen Block.totalDifficulty:QUANTITY- Ganzzahl der Gesamtschwierigkeit der Chain bis zu diesem Block.extraData:DATA- das Feld "extra data" dieses Blocks.size:QUANTITY- Ganzzahl der Größe dieses Blocks in Bytes.gasLimit:QUANTITY- das maximal zulässige Gas in diesem Block.gasUsed:QUANTITY- das gesamte verbrauchte Gas aller Transaktionen in diesem Block.timestamp:QUANTITY- der Unix-Zeitstempel für den Zeitpunkt, an dem der Block zusammengestellt wurde.transactions:Array- Array von Transaktionsobjekten oder 32-Byte-Transaktions-Hashes, abhängig vom zuletzt angegebenen Parameter.uncles:Array- Array von Uncle-Hashes.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Ergebnis4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "difficulty": "0x4ea3f27bc",9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",10 "gasLimit": "0x1388",11 "gasUsed": "0x0",12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",16 "nonce": "0x689056015818adbe",17 "number": "0x1b4",18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",21 "size": "0x220",22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",23 "timestamp": "0x55ba467c",24 "totalDifficulty": "0x78ed983323d",25 "transactions": [26 ],27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",28 "uncles": [29 ]30 }31}Alle anzeigeneth_getBlockByNumber
Gibt Informationen zu einem Block anhand der Blocknummer zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
QUANTITY|TAG- Ganzzahl einer Blocknummer oder der String"earliest","latest","pending","safe"oder"finalized", wie im Block-Parameter.Boolean- Wenntrue, werden die vollständigen Transaktionsobjekte zurückgegeben, wennfalse, nur die Hashes der Transaktionen.
1params: [2 "0x1b4", // 4363 true,4]Rückgabe Siehe eth_getBlockByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Ergebnis siehe eth_getBlockByHash
eth_getTransactionByHash
Gibt die Informationen zu einer Transaktion zurück, die anhand des Transaktions-Hashes angefordert wurde.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Hash einer Transaktion
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Rückgabe
Object - Ein Transaktionsobjekt oder null, wenn keine Transaktion gefunden wurde:
blockHash:DATA, 32 Bytes - Hash des Blocks, in dem sich diese Transaktion befand.null, wenn sie ausstehend ist.blockNumber:QUANTITY- Blocknummer, in der sich diese Transaktion befand.null, wenn sie ausstehend ist.from:DATA, 20 Bytes - Adresse des Absenders.gas:QUANTITY- vom Absender bereitgestelltes Gas.gasPrice:QUANTITY- vom Absender bereitgestellter Gaspreis in Wei.hash:DATA, 32 Bytes - Hash der Transaktion.input:DATA- die mit der Transaktion gesendeten Daten.nonce:QUANTITY- die Anzahl der Transaktionen, die der Absender vor dieser durchgeführt hat.to:DATA, 20 Bytes - Adresse des Empfängers.null, wenn es sich um eine Smart-Contract-Erstellungstransaktion handelt.transactionIndex:QUANTITY- Ganzzahl der Indexposition der Transaktion im Block.null, wenn sie ausstehend ist.value:QUANTITY- übertragener Wert in Wei.v:QUANTITY- ECDSA-Wiederherstellungs-IDr:QUANTITY- ECDSA-Signatur rs:QUANTITY- ECDSA-Signatur s
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Ergebnis4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 5000012 "gasPrice":"0x4a817c800", // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 6518 "value":"0xf3dbb76162000", // 429000000000000019 "v":"0x25", // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}Alle anzeigeneth_getTransactionByBlockHashAndIndex
Gibt Informationen zu einer Transaktion anhand des Block-Hashes und der Transaktionsindexposition zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Hash eines Blocks.QUANTITY- Ganzzahl der Transaktionsindexposition.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Rückgabe Siehe eth_getTransactionByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Ergebnis siehe eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Gibt Informationen zu einer Transaktion anhand der Blocknummer und der Transaktionsindexposition zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
QUANTITY|TAG- eine Blocknummer oder der String"earliest","latest","pending","safe"oder"finalized", wie im Block-Parameter.QUANTITY- die Transaktionsindexposition.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Rückgabe Siehe eth_getTransactionByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Ergebnis siehe eth_getTransactionByHash
eth_getTransactionReceipt
Gibt den Beleg einer Transaktion anhand des Transaktions-Hashes zurück.
Hinweis Der Beleg ist für ausstehende Transaktionen nicht verfügbar.
Parameter
DATA, 32 Bytes - Hash einer Transaktion
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Rückgabe
Object - Ein Transaktionsbelegobjekt oder null, wenn kein Beleg gefunden wurde:
transactionHash:DATA, 32 Bytes - Hash der Transaktion.transactionIndex:QUANTITY- Ganzzahl der Indexposition der Transaktion im Block.blockHash:DATA, 32 Bytes - Hash des Blocks, in dem sich diese Transaktion befand.blockNumber:QUANTITY- Blocknummer, in der sich diese Transaktion befand.from:DATA, 20 Bytes - Adresse des Absenders.to:DATA, 20 Bytes - Adresse des Empfängers. null, wenn es sich um eine Smart-Contract-Erstellungstransaktion handelt.cumulativeGasUsed:QUANTITY- Die Gesamtmenge an Gas, die verbraucht wurde, als diese Transaktion im Block ausgeführt wurde.effectiveGasPrice:QUANTITY- Die Summe aus Grundgebühr und Trinkgeld, die pro Gaseinheit gezahlt wird.gasUsed:QUANTITY- Die Gasmenge, die allein von dieser spezifischen Transaktion verbraucht wurde.contractAddress:DATA, 20 Bytes - Die erstellte Vertragsadresse, wenn die Transaktion eine Smart-Contract-Erstellung war, andernfallsnull.logs:Array- Array von Protokollobjekten, die diese Transaktion generiert hat.logsBloom:DATA, 256 Bytes - Bloom-Filter für Light Clients, um zugehörige Protokolle schnell abzurufen.type:QUANTITY- Ganzzahl des Transaktionstyps,0x0für Legacy-Transaktionen,0x1für Zugriffslistentypen,0x2für dynamische Gebühren.
Es gibt außerdem entweder Folgendes zurück:
root:DATA32 Bytes der Post-Transaktions-Zustandswurzel (vor Byzantium)status:QUANTITYentweder1(Erfolg) oder0(Fehlschlag)
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Ergebnis4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // String der Adresse, falls sie erstellt wurde12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // Logs, wie sie von getFilterLogs usw. zurückgegeben werden18 }],19 "logsBloom": "0x00...0", // 256-Byte-Bloom-Filter20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Alle anzeigeneth_getUncleByBlockHashAndIndex
Gibt Informationen zu einem Uncle eines Blocks anhand des Hashes und der Uncle-Indexposition zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
DATA, 32 Bytes - Der Hash eines Blocks.QUANTITY- Die Indexposition des Uncles.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Rückgabe Siehe eth_getBlockByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Ergebnis siehe eth_getBlockByHash
Hinweis: Ein Uncle enthält keine einzelnen Transaktionen.
eth_getUncleByBlockNumberAndIndex
Gibt Informationen zu einem Uncle eines Blocks anhand der Nummer und der Uncle-Indexposition zurück.
Endpunkt im Playground ausprobieren (opens in a new tab)Parameter
QUANTITY|TAG- eine Blocknummer oder der String"earliest","latest","pending","safe","finalized", wie im Block-Parameter.QUANTITY- die Indexposition des Uncles.
1params: [2 "0x29c", // 6683 "0x0", // 04]Rückgabe Siehe eth_getBlockByHash
Hinweis: Ein Uncle enthält keine einzelnen Transaktionen.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'Ergebnis siehe eth_getBlockByHash
eth_newFilter
Erstellt ein Filterobjekt basierend auf Filteroptionen, um zu benachrichtigen, wenn sich der Zustand ändert (Protokolle). Um zu überprüfen, ob sich der Zustand geändert hat, rufen Sie eth_getFilterChanges auf.
Ein Hinweis zur Angabe von Themenfiltern: Themen (Topics) sind reihenfolgeabhängig. Eine Transaktion mit einem Protokoll mit den Themen [A, B] wird von den folgenden Themenfiltern abgeglichen:
[]"alles"[A]"A an erster Position (und alles danach)"[null, B]"alles an erster Position UND B an zweiter Position (und alles danach)"[A, B]"A an erster Position UND B an zweiter Position (und alles danach)"[[A, B], [A, B]]"(A ODER B) an erster Position UND (A ODER B) an zweiter Position (und alles danach)"- Parameter
Object- Die Filteroptionen:
fromBlock:QUANTITY|TAG- (optional, Standard:"latest") Ganzzahlige Blocknummer oder"latest"für den zuletzt vorgeschlagenen Block,"safe"für den neuesten sicheren Block,"finalized"für den neuesten finalisierten Block oder"pending","earliest"für Transaktionen, die sich noch nicht in einem Block befinden.toBlock:QUANTITY|TAG- (optional, Standard:"latest") Ganzzahlige Blocknummer oder"latest"für den zuletzt vorgeschlagenen Block,"safe"für den neuesten sicheren Block,"finalized"für den neuesten finalisierten Block oder"pending","earliest"für Transaktionen, die sich noch nicht in einem Block befinden.address:DATA|Array, 20 Bytes - (optional) Vertragsadresse oder eine Liste von Adressen, von denen Protokolle stammen sollen.topics:Array von DATA, - (optional) Array von 32-Byte-DATA-Themen. Themen sind reihenfolgeabhängig. Jedes Thema kann auch ein Array von DATA mit "oder"-Optionen sein.
1params: [2 {3 fromBlock: "0x1",4 toBlock: "0x2",5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",6 topics: [7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",8 null,9 [10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",12 ],13 ],14 },15]Alle anzeigenRückgabe
QUANTITY - Eine Filter-ID.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newBlockFilter
Erstellt einen Filter im Blockchain-Knoten, um zu benachrichtigen, wenn ein neuer Block eintrifft. Um zu überprüfen, ob sich der Zustand geändert hat, rufen Sie eth_getFilterChanges auf.
Parameter Keine
Rückgabe
QUANTITY - Eine Filter-ID.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newPendingTransactionFilter
Erstellt einen Filter im Blockchain-Knoten, um zu benachrichtigen, wenn neue ausstehende Transaktionen eintreffen. Um zu überprüfen, ob sich der Zustand geändert hat, rufen Sie eth_getFilterChanges auf.
Parameter Keine
Rückgabe
QUANTITY - Eine Filter-ID.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_uninstallFilter
Deinstalliert einen Filter mit der angegebenen ID. Sollte immer aufgerufen werden, wenn die Überwachung nicht mehr benötigt wird. Zusätzlich laufen Filter ab, wenn sie für eine gewisse Zeit nicht mit eth_getFilterChanges angefordert werden.
Parameter
QUANTITY- Die Filter-ID.
1params: [2 "0xb", // 113]Rückgabe
Boolean - true, wenn der Filter erfolgreich deinstalliert wurde, andernfalls false.
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Ergebnis4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}eth_getFilterChanges
Polling-Methode für einen Filter, die ein Array von Protokollen zurückgibt, die seit dem letzten Abruf aufgetreten sind.
Parameter
QUANTITY- die Filter-ID.
1params: [2 "0x16", // 223]Rückgabe
Array - Array von Protokollobjekten oder ein leeres Array, wenn sich seit dem letzten Abruf nichts geändert hat.
-
Für Filter, die mit
eth_newBlockFiltererstellt wurden, sind die Rückgaben Block-Hashes (DATA, 32 Bytes), z. B.["0x3454645634534..."]. -
Für Filter, die mit
eth_newPendingTransactionFiltererstellt wurden, sind die Rückgaben Transaktions-Hashes (DATA, 32 Bytes), z. B.["0x6345343454645..."]. -
Für Filter, die mit
eth_newFiltererstellt wurden, sind Protokolle Objekte mit folgenden Parametern:removed:TAG-true, wenn das Protokoll aufgrund einer Chain-Reorganisation entfernt wurde.false, wenn es ein gültiges Protokoll ist.logIndex:QUANTITY- Ganzzahl der Protokollindexposition im Block.null, wenn es sich um ein ausstehendes Protokoll handelt.transactionIndex:QUANTITY- Ganzzahl der Transaktionsindexposition, aus der das Protokoll erstellt wurde.null, wenn es sich um ein ausstehendes Protokoll handelt.transactionHash:DATA, 32 Bytes - Hash der Transaktionen, aus denen dieses Protokoll erstellt wurde.null, wenn es sich um ein ausstehendes Protokoll handelt.blockHash:DATA, 32 Bytes - Hash des Blocks, in dem sich dieses Protokoll befand.null, wenn es ausstehend ist.null, wenn es sich um ein ausstehendes Protokoll handelt.blockNumber:QUANTITY- die Blocknummer, in der sich dieses Protokoll befand.null, wenn es ausstehend ist.null, wenn es sich um ein ausstehendes Protokoll handelt.address:DATA, 20 Bytes - Adresse, von der dieses Protokoll stammt.data:DATA- nicht indizierte Protokolldaten variabler Länge. (In Solidity: null oder mehr nicht indizierte 32-Byte-Protokollargumente.)topics:Array von DATA- Array von 0 bis 4 32-Byte-DATAvon indizierten Protokollargumenten. (In Solidity: Das erste Thema ist der Hash der Signatur des Ereignisses (z. B.Deposit(address,bytes32,uint256)), es sei denn, Sie haben das Ereignis mit dem Spezifiziereranonymousdeklariert.)
-
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Ergebnis4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 19 "blockNumber":"0x1b4", // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}Alle anzeigeneth_getFilterLogs
Gibt ein Array aller Protokolle zurück, die dem Filter mit der angegebenen ID entsprechen.
Parameter
QUANTITY- Die Filter-ID.
1params: [2 "0x16", // 223]Rückgabe Siehe eth_getFilterChanges
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Ergebnis siehe eth_getFilterChanges
eth_getLogs
Gibt ein Array aller Protokolle zurück, die einem bestimmten Filterobjekt entsprechen.
Parameter
Object- Die Filteroptionen:
fromBlock:QUANTITY|TAG- (optional, Standard:"latest") Ganzzahlige Blocknummer oder"latest"für den zuletzt vorgeschlagenen Block,"safe"für den neuesten sicheren Block,"finalized"für den neuesten finalisierten Block oder"pending","earliest"für Transaktionen, die sich noch nicht in einem Block befinden.toBlock:QUANTITY|TAG- (optional, Standard:"latest") Ganzzahlige Blocknummer oder"latest"für den zuletzt vorgeschlagenen Block,"safe"für den neuesten sicheren Block,"finalized"für den neuesten finalisierten Block oder"pending","earliest"für Transaktionen, die sich noch nicht in einem Block befinden.address:DATA|Array, 20 Bytes - (optional) Vertragsadresse oder eine Liste von Adressen, von denen Protokolle stammen sollen.topics:Array von DATA, - (optional) Array von 32-Byte-DATA-Themen. Themen sind reihenfolgeabhängig. Jedes Thema kann auch ein Array von DATA mit "oder"-Optionen sein.blockHash:DATA, 32 Bytes - (optional, zukünftig) Mit der Hinzufügung von EIP-234 wirdblockHasheine neue Filteroption sein, die die zurückgegebenen Protokolle auf den einzelnen Block mit dem 32-Byte-HashblockHashbeschränkt. Die Verwendung vonblockHashentsprichtfromBlock=toBlock= der Blocknummer mit dem HashblockHash. WennblockHashin den Filterkriterien vorhanden ist, sind wederfromBlocknochtoBlockzulässig.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Rückgabe Siehe eth_getFilterChanges
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Ergebnis siehe eth_getFilterChanges
Anwendungsbeispiel
Bereitstellen eines Vertrags mit JSON_RPC
Dieser Abschnitt enthält eine Demonstration, wie man einen Vertrag nur über die RPC-Schnittstelle bereitstellt. Es gibt alternative Wege zur Bereitstellung von Verträgen, bei denen diese Komplexität abstrahiert wird – zum Beispiel durch die Verwendung von Bibliotheken, die auf der RPC-Schnittstelle aufbauen, wie web3.js (opens in a new tab) und web3.py (opens in a new tab). Diese Abstraktionen sind im Allgemeinen leichter zu verstehen und weniger fehleranfällig, aber es ist dennoch hilfreich zu verstehen, was unter der Haube passiert.
Das Folgende ist ein einfacher Smart Contract namens Multiply7, der über die JSON-RPC-Schnittstelle auf einem Ethereum-Blockchain-Knoten bereitgestellt wird. Dieses Tutorial setzt voraus, dass der Leser bereits einen Geth-Blockchain-Knoten ausführt. Weitere Informationen zu Blockchain-Knoten und Anwendungen finden Sie hier. Bitte lesen Sie die Dokumentation der jeweiligen Anwendung, um zu erfahren, wie Sie den HTTP-JSON-RPC für Nicht-Geth-Anwendungen starten. Die meisten Anwendungen werden standardmäßig unter localhost:8545 bereitgestellt.
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}Als Erstes müssen wir sicherstellen, dass die HTTP-RPC-Schnittstelle aktiviert ist. Das bedeutet, dass wir Geth beim Start das Flag --http übergeben. In diesem Beispiel verwenden wir den Geth-Blockchain-Knoten auf einer privaten Entwicklungs-Chain. Mit diesem Ansatz benötigen wir kein Ether im echten Netzwerk.
geth --http --dev console 2>>geth.logDadurch wird die HTTP-RPC-Schnittstelle unter http://localhost:8545 gestartet.
Wir können überprüfen, ob die Schnittstelle läuft, indem wir die Coinbase-Adresse (indem wir die erste Adresse aus dem Array der Konten abrufen) und den Kontostand mit curl (opens in a new tab) abfragen. Bitte beachten Sie, dass die Daten in diesen Beispielen auf Ihrem lokalen Blockchain-Knoten abweichen werden. Wenn Sie diese Befehle ausprobieren möchten, ersetzen Sie die Anfrageparameter in der zweiten curl-Anfrage durch das Ergebnis, das von der ersten zurückgegeben wurde.
curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}Da Zahlen hexadezimal kodiert sind, wird der Kontostand in Wei als Hex-String zurückgegeben. Wenn wir den Kontostand in Ether als Zahl haben möchten, können wir web3 aus der Geth-Konsole verwenden.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"Da sich nun etwas Ether auf unserer privaten Entwicklungs-Chain befindet, können wir den Vertrag bereitstellen. Der erste Schritt besteht darin, den Multiply7-Vertrag in Bytecode zu kompilieren, der an die EVM gesendet werden kann. Um solc, den Solidity-Compiler, zu installieren, folgen Sie der Solidity-Dokumentation (opens in a new tab). (Möglicherweise möchten Sie eine ältere solc-Version verwenden, die der für unser Beispiel verwendeten Compiler-Version (opens in a new tab) entspricht.)
Der nächste Schritt besteht darin, den Multiply7-Vertrag in Bytecode zu kompilieren, der an die EVM gesendet werden kann.
echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin======= <stdin>:Multiply7 =======Binary:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Da wir nun den kompilierten Code haben, müssen wir ermitteln, wie viel Gas die Bereitstellung kostet. Die RPC-Schnittstelle verfügt über eine Methode eth_estimateGas, die uns eine Schätzung liefert.
curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}Und schließlich den Vertrag bereitstellen.
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}Die Transaktion wird vom Blockchain-Knoten akzeptiert und ein Transaktions-Hash wird zurückgegeben. Dieser Hash kann verwendet werden, um die Transaktion zu verfolgen. Der nächste Schritt besteht darin, die Adresse zu ermitteln, an der unser Vertrag bereitgestellt wird. Jede ausgeführte Transaktion erstellt einen Beleg. Dieser Beleg enthält verschiedene Informationen über die Transaktion, z. B. in welchen Block die Transaktion aufgenommen wurde und wie viel Gas von der EVM verbraucht wurde. Wenn eine Transaktion einen Vertrag erstellt, enthält sie auch die Vertragsadresse. Wir können den Beleg mit der RPC-Methode eth_getTransactionReceipt abrufen.
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}Unser Vertrag wurde unter 0x4d03d617d700cf81935d7f797f4e2ae719648262 erstellt. Ein Null-Ergebnis anstelle eines Belegs bedeutet, dass die Transaktion noch nicht in einen Block aufgenommen wurde. Warten Sie einen Moment, überprüfen Sie, ob Ihr Konsens-Client läuft, und versuchen Sie es erneut.
Interaktion mit Smart Contracts
In diesem Beispiel senden wir eine Transaktion mit eth_sendTransaction an die Methode multiply des Vertrags.
eth_sendTransaction erfordert mehrere Argumente, insbesondere from, to und data. From ist die öffentliche Adresse unseres Kontos und to ist die Vertragsadresse. Das Argument data enthält einen Payload, der definiert, welche Methode mit welchen Argumenten aufgerufen werden muss. Hier kommt das ABI (Application Binary Interface) (opens in a new tab) ins Spiel. Das ABI ist eine JSON-Datei, die definiert, wie Daten für die EVM definiert und kodiert werden.
Die Bytes des Payloads definieren, welche Methode im Vertrag aufgerufen wird. Dies sind die ersten 4 Bytes aus dem Keccak-Hash über den Funktionsnamen und seine Argumenttypen, hexadezimal kodiert. Die Multiply-Funktion akzeptiert ein uint, was ein Alias für uint256 ist. Das ergibt für uns:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"Der nächste Schritt ist die Kodierung der Argumente. Es gibt nur ein uint256, sagen wir, den Wert 6. Das ABI hat einen Abschnitt, der spezifiziert, wie uint256-Typen kodiert werden.
int<M>: enc(X) ist die Big-Endian-Zweierkomplement-Kodierung von X, die auf der höherwertigen (linken) Seite mit 0xff für negatives X und mit Null-Bytes für positives X aufgefüllt wird, sodass die Länge ein Vielfaches von 32 Bytes beträgt.
Dies wird kodiert zu 0000000000000000000000000000000000000000000000000000000000000006.
Durch die Kombination des Funktionsselektors und des kodierten Arguments lauten unsere Daten 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.
Dies kann nun an den Blockchain-Knoten gesendet werden:
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}Da eine Transaktion gesendet wurde, wurde ein Transaktions-Hash zurückgegeben. Das Abrufen des Belegs ergibt:
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}Alle anzeigenDer Beleg enthält ein Protokoll (Log). Dieses Protokoll wurde von der EVM bei der Ausführung der Transaktion generiert und in den Beleg aufgenommen. Die Funktion multiply zeigt, dass das Ereignis Print mit der Eingabe mal 7 ausgelöst wurde. Da das Argument für das Ereignis Print ein uint256 war, können wir es gemäß den ABI-Regeln dekodieren, was uns die erwartete Dezimalzahl 42 liefert. Abgesehen von den Daten ist es erwähnenswert, dass Topics verwendet werden können, um zu bestimmen, welches Ereignis das Protokoll erstellt hat:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"Dies war nur eine kurze Einführung in einige der häufigsten Aufgaben, die die direkte Nutzung des JSON-RPC demonstriert.