JSON-RPC-API
Letzte Änderung: @Coram_Deo(opens in a new tab), 3. Oktober 2024
Damit eine Software-Anwendung mit der Ethereum-Blockchain interagieren kann – entweder um Blockchain-Daten zu lesen oder Transaktionen an das Netzwerk zu senden – muss sie mit einem Ethereum-Knoten verbunden werden.
Zu diesem Zweck implementiert jeder Ethereum-Client eine JSON-RPC-Spezifikation(opens in a new tab), sodass eine einheitliche Methode vorliegt, auf die sich Anwendungen verlassen können, unabhängig von der spezifischen Nodes oder Client Implementierung.
JSON-RPC(opens in a new tab) ist ein zustandsloses, leichtgewichtiges Remote-Prozeduraufruf-(RPC)-Protokoll. Es definiert mehrere Datenstrukturen und die Regeln für deren Verarbeitung. Sie ist transportunabhängig, da die Konzepte innerhalb eines Prozesses, über Sockets, über HTTP oder in vielen verschiedenen Nachrichtenübermittlungsumgebungen verwendet werden können. Verwendet wird dabei das Datenformat JSON (RFC 4627).
Client-Implementierungen
Ethereum-Clients können bei der Implementierung der JSON-RPC-Spezifikation jeweils unterschiedliche Programmiersprachen verwenden. Weitere Details zu den einzelnen Programmiersprachen finden Sie in der Client-Dokumentation. Es wird empfohlen, dass Sie sich mit den neuesten Informationen zur API-Unterstützung in der Dokumentation des jeweiligen Clients vertraut machen.
Komfortable Bibliotheken
Es ist möglich, über die JSAON-RPC-API direkt mit Ethereum-Clients zu interagieren, doch für dApp-Entwickler gibt es häufig einfachere Optionen. Es gibt viele JavaScript- und Backend-API- Bibliotheken, die Wrapper für die JSON-RPC-API bereitstellen. Mithilfe dieser Bibliotheken können Entwickler intuitive, einzeilige Methoden in der Programmiersprache ihrer Wahl schreiben, um JSON-RPC-Anforderungen (unter der Haube) zu initialisieren, die mit Ethereum interagieren.
Konsensclient-APIs
Diese Seite befasst sich hauptsächlich mit der JSON-RPC-API, die von Ethereum-Ausführungsclients verwendet wird. Konsensclients haben jedoch auch eine RPC-API, mit der Benutzer Informationen über den Knoten abfragen sowie Beacon-Blöcke, Beacon-Zustand und andere konsensbezogene Informationen direkt von einem Knoten anfordern können. Diese API ist auf der Webseite Beacon API(opens in a new tab) dokumentiert.
Es wird auch eine interne API für die Kommunikation zwischen Clients innerhalb eines Knotens verwendet, d. h. sie ermöglicht es dem Konsensclient und dem Ausführungsclient, Daten auszutauschen. Dies wird als „Engine API“ bezeichnet und die Spezifikationen sind auf GitHub(opens in a new tab) verfügbar.
Spezifikationen des Ausführungsclients
Lesen Sie die vollständige JSON-RPC-API-Spezifikation auf GitHub(opens in a new tab). Diese API ist auf der Execution API-Webseite(opens in a new tab) dokumentiert und enthält einen Inspector, mit dem Sie alle verfügbaren Methoden ausprobieren können.
Konventionen
Hexadezimalwert-Kodierung
In JSON werden zwei Schlüssel-Datentypen übertragen: Roh-Byte-Arrays und Mengen. Beide werden mit einer Hex-Kodierung übertragen, haben jedoch unterschiedliche Anforderungen an das Format.
Mengen
Wenn Mengen (Ganzzahlen, Kommazahlen) kodiert werden: Als Hexadezimalwert kodieren, ein „0x“ als Präfix hinzufügen und die kompakteste Darstellung verwenden (kleine Ausnahme: Null sollte als „0x0“ dargestellt werden).
Hier sind einige Beispiele:
- 0x41 (entspricht Dezimalwert 65)
- 0x41 (entspricht Dezimalwert 1024)
- RICHTIG: „0x“ (sollte immer mindestens eine Ziffer enthalten - Null ist „0x0“)
- RICHTIG: „0x400“ (führende Nullen sind nicht zulässig)
- RICHTIG: „0xff“ (muss mit „0x“ prefixiert werden)
Unformatierte Daten
Wenn unformatierte Daten kodiert werden (Byte-Arrays, Kontoadressen, Hashes, Bytecode-Arrays): Als Hex kodieren, „0x“ als Präfix hinzufügen, 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 haben)
- FALSCH: 004200 (muss 0x als Präfix hinzufügen)
Der Standardblockparameter
Die folgenden Methoden haben einen zusätzlichen Standardblockparameter:
Wenn Anfragen gestellt werden, die den Zustand von Ethereum beeinflussen, bestimmt der letzte Standardblockparameter die Höhe des Blocks.
Folgende Optionen sind für den Standardblockparameter möglich:
HEX String
- eine ganzzahlige BlocknummerString „frühestes“
für den frühesten/Genesis-BlockString "latest"
– für den neuesten vorgeschlagenen BlockString „sicher“
- für den neuesten sicheren BlockString „finalisiert“
- für den neuesten finalisierten BlockString „ausstehend“
- für den ausstehenden Zustand/Transaktionen
Beispiele
Auf dieser Seite stellen wir Beispiele dafür bereit, wie man einzelne JSON_RPC API-Endpunkte mit dem Befehlszeilenwerkzeug curl(opens in a new tab) verwendet. Diese Beispiele für einzelne Endpunkte finden sich im Abschnitt Curl-Beispiele unten. Weiter unten auf der Seite stellen wir auch ein End-to-End-Beispiel bereit, wie man mithilfe eines Geth-Nodes, der JSON_RPC API und curl einen Smart Contract kompiliert und bereitstellt.
Curl-Beispiele
Beispiele zur Verwendung der JSON_RPC-API durch Ausführen von curl(opens in a new tab)-Anfragen an einem Ethereum-Knoten werden unten bereitgestellt. Jedes Beispiel enthält eine Beschreibung des spezifischen Endpunkts, seiner Parameter, seines Rückgabetyps und ein Beispiel dafür, wie es verwendet werden sollte.
Es kann sein, dass die curl-Anfragen eine Fehlermeldung im Zusammenhang mit dem Inhaltstyp zurückgeben. Das liegt daran, dass die Option --data
den Inhaltstyp auf application/x-www-form-urlencoded
festlegt. Wenn Ihr Knoten sich darüber beschwert, setzen Sie den Header manuell, indem Sie am Anfang des Aufrufs -H "Content-Type: application/json"
platzieren. In den Beispielen ist auch die URL/IP & Port-Kombination nicht enthalten, die als letztes Argument an curl übergeben werden muss (z. B. 127.0.0.1:8545
). Ein vollständiger curl-Aufruf, der diese zusätzlichen Daten enthält, hat folgende Form:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545
Kommunikation, Zustand, Verlauf
Eine Handvoll Kernmethoden von JSON-RPC erfordern Daten aus dem Ethereum-Netzwerk und gehören in drei Hauptkategorien: Kommunikation, Zustand, Verlauf. Verwenden Sie die Links in diesen Abschnitten, um zu jeder Methode zu springen, oder verwenden Sie das Inhaltsverzeichnis, um die gesamte Liste der Methoden zu durchsuchen.
Kommunikationsmethoden
Diese Methoden verfolgen die Spitze der Blockchain. Das ist der Weg, wie Transaktionen sich im Netzwerk verbreiten, in Blöcke aufgenommen werden und wie Clients von neuen Blöcken erfahren.
Zustandsmethoden
Methoden, die den aktuellen Zustand aller gespeicherten Daten melden. Der „Zustand“ ist wie ein großes gemeinsames Stück RAM und enthält Kontostände, Vertragsdaten und Gasabschätzungen.
Verlaufsmethoden
Abrufen historischer Aufzeichnungen jedes Blocks bis zum Genesis-Block. Dies ist wie eine große Nur-hinzufügen-Datei, die alle Blockheaders, Blockinhalte, Onkelblöcke und Transaktionsbelege enthält.
- 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
Sie können das Playground-Tool(opens in a new tab) verwenden, um die API-Methoden zu entdecken und auszuprobieren. Es zeigt Ihnen auch, welche Methoden und Netzwerke von verschiedenen Knotenanbietern unterstützt werden.
JSON-RPC API-Methoden
web3_ClientVersion
Gibt die aktuelle Client-Version zurück.
Parameter
Keine
Rückgaben
String
- Die aktuelle Client-Version
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}Kopieren
web3_sha3
Gibt Keccak-256 (nicht der standardisierte SHA3-256) von den gegebenen Daten zurück.
Parameter
DATA
– die Daten, die in einen SHA3-Hash konvertiert werden sollen
1params: ["0x68656c6c6f20776f726c64"]Kopieren
Rückgabewert
DATA
- Das SHA3-Ergebnis des gegebenen Strings.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}Kopieren
net_version
Gibt die aktuelle Netzwerk-ID zurück.
Parameter
Keine
Rückgabewert
String
- Die aktuelle Netzwerk-ID.
Die vollständige Liste der aktuellen Netzwerk-IDs ist verfügbar unter chainlist.org(opens in a new tab). Einige häufige sind:
1
: Ethereum Mainnet5
: Goerli Testnetz11155111
: Sepolia Testnetz
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}Kopieren
net_listening
Gibt true
zurück, wenn der Client aktiv auf Netzwerkverbindungen hört.
Parameter
Keine
Rückgabewert
Boolean
- true
, wenn zuhörend, ansonsten false
.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}Kopieren
net_peerCount
Gibt die Anzahl der aktuell mit dem Client verbundenen Peers zurück.
Parameter
Keine
Rückgabewert
QUANTITY
- Ganzzahlwert, der die Anzahl der verbundenen Peers repräsentiert.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}Kopieren
eth_protocolVersion
Gibt die aktuelle Ethereum-Protokollversion zurück. Beachten Sie, dass diese Methode nicht in Geth verfügbar(opens in a new tab) ist.
Parameter
Keine
Rückgabewert
String
- Die aktuelle Ethereum-Protokollversion
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}Kopieren
eth_syncing
Gibt ein Objekt mit Daten zum Synchronisierungsstatus oder false
zurück.
Parameter
Keine
Rückgabewert
Die genauen Rückgabedaten variieren je nach Client-Implementierung. Alle Clients geben False
zurück, wenn der Knoten nicht synchronisiert wird, und alle Clients geben die nachfolgenden Felder zurück.
Object|Boolean
– ein Objekt mit Synchronisierungsstatus-Daten oder FALSE
, wenn nicht synchronisiert wird:
startingBlock
:QUANTITY
- Der Block, bei dem der Import begonnen hat (wird nur zurückgesetzt, nachdem die Synchronisierung ihren Kopf erreicht hat)currentBlock
:QUANTITY
- Der aktuelle Block, identisch zu eth_blockNumberhighestBlock
:QUANTITY
- Der geschätzte höchste Block
Die einzelnen Clients können jedoch auch zusätzliche Daten liefern. Beispielsweise 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}Alles anzeigenKopieren
Besu gibt hingegen 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}Alles anzeigenKopieren
Weitere Einzelheiten finden Sie in der Dokumentation zu Ihrem jeweiligen Client.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Alles anzeigenKopieren
eth_coinbase
Gibt die Coinbase-Adresse des Clients zurück.
Parameter
Keine (None)
Rückgaben
DATA
, 20 Byte – die aktuelle Coinbase-Adresse.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}Kopieren
eth_chainId
Gibt die Ketten-ID zurück, die für das Unterzeichnen der Replay-geschützten Transaktionen verwendet wird.
Parameter
Keine (None)
Rückgaben
chainId
– Hexadezimalwert als String, der die Ganzzahl der aktuellen Ketten-ID repräsentiert.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}Kopieren
eth_mining
Gibt true
zurück, wenn der Client aktiv neue Blöcke mint. Dies kann für Proof-of-Work-Netzwerke nur true
zurückgeben und ist möglicherweise seit der Zusammenführung in einigen Clients nicht mehr verfügbar.
Parameter
Keine (None)
Rückgaben
Boolean
– gibt true
zurück, wenn der Client aktiv mint, andernfalls false
.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}Kopieren
eth_hashrate
Gibt die Anzahl der Hashes pro Sekunde zurück, mit der der Knoten mint. Dies kann für Proof-of-Work-Netzwerke nur true
zurückgeben und ist möglicherweise seit der Zusammenführung in einigen Clients nicht mehr verfügbar.
Parameter
Keine (None)
Rückgaben
QUANTITY
– Anzahl der Hashes pro Sekunde.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}Kopieren
eth_gasPrice
Gibt eine Schätzung des aktuellen Preises pro Gas in Wei zurück. Der Besu-Client prüft beispielsweise die letzten 100 Blöcke und gibt standardmäßig den mittleren Preis pro Gas-Einheit zurück.
Parameter
Keine (None)
Rückgaben
QUANTITY
– Ganzzahl des aktuellen Gas-Preises in Wei.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}Kopieren
eth_accounts
Gibt eine Liste von Adressen zurück, die dem Client gehören.
Parameter
Keine (None)
Rückgaben
Array of DATA
, 20 Byte – Adressen, die dem Client gehören.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}Kopieren
eth_blockNumber
Gibt die Zahl des aktuellsten Blocks zurück.
Parameter
Keine (None)
Rückgaben
QUANTITY
– Ganzzahl der Blocknummer, auf der sich der Client derzeit befindet.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}Kopieren
eth_getBalance
Gibt das Guthaben des Kontos einer bestimmten Adresse zurück.
Parameter
DATA
, 20 Bytes - Adresse, deren Guthaben überprüft werden soll.QUANTITY|TAG
– ganzzahlige Blocknummer oder der String"latest"
,"earliest"
,"pending"
,"safe"
oder"finalized"
, siehe Standardblockparameter
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Kopieren
Rückgaben
QUANTITY
– Ganzzahl für den aktuellen Saldo in Wei.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}Kopieren
eth_getStorageAt
Gibt den Wert aus einer Speicherposition an einer angegebenen Adresse zurück.
Parameter
DATA
, 20 Bytes - Adresse des Speichers.QUANTITY
- Ganzzahlwert der Position im Speicher.QUANTITY|TAG
– ganzzahlige Blocknummer oder der String"latest"
,"earliest"
,"pending"
,"safe"
,"finalized"
, siehe Standardblockparameter
Rückgaben
DATA
– der Wert an dieser Speicherposition.
Beispiel: Die Berechnung der richtigen Position hängt vom abzurufenden Speicher ab. Betrachten Sie den folgenden Contract, der unter 0x295a70b2de5e3953354a6a8344e616ed314d7251
von der Adresse 0x391694e7e0b0cce554cb130d723a9d27458f9298
bereitgestellt wurde.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 function Storage() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}
Das Abrufen des Wertes von pos0 ist simpel:
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"}Kopieren
Das Abrufen eines Elements der Karte ist schwieriger. Die Position eines Elements in der Karte wird folgendermaßen berechnet:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))Kopieren
Das bedeutet, um den Speicher auf pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] abzurufen, müssen wir die Position folgendermaßen berechnen:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)Kopieren
Die Geth-Konsole, die mit der Web3-Bibliothek bereitgestellt wird, kann verwendet werden, um die Berechnung durchzuführen:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Kopieren
Um den Speicher nun abzurufen:
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"}Kopieren
eth_getTransactionCount
Gibt die Anzahl der von einer Adresse gesendeten Transaktionen zurück.
Parameter
DATA
, 20 Bytes - Adresse.QUANTITY|TAG
– ganzzahlige Blocknummer oder der String"latest"
,"earliest"
,"pending"
,"safe"
oder"finalized"
, siehe Standardblockparameter
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block4]Kopieren
Rückgaben
QUANTITY
– Ganzzahl der Anzahl der von dieser Adresse gesendeten Transaktionen.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Kopieren
eth_getBlockTransactionCountByHash
Gibt die Anzahl der Transaktionen in einem Block zurück, von einem Block, der dem angegebenen Block-Hash entspricht.
Parameter
DATA
, 32 Bytes - Hash eines Blocks
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Kopieren
Rückgaben
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}Kopieren
eth_getBlockTransactionCountByNumber
Gibt die Anzahl der Transaktionen in einem Block zurück, der der angegebenen Blocknummer entsprechen.
Parameter
QUANTITY|TAG
– Ganzzahl einer Blocknummer oder der String"earliest"
,"latest"
,"pending"
,"safe"
oder"finalized"
, wie im Standardblockparameter.
1params: [2 "0x13738ca", // 203962343]Kopieren
Rückgaben
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}Kopieren
eth_getUncleCountByBlockHash
Gibt die Anzahl der Onkel in einem Block zurück, der dem angegebenen Block-Hash entspricht.
Parameter
DATA
, 32 Bytes - Hash eines Blocks
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Kopieren
Rückgaben
QUANTITY
– Ganzzahl für die Anzahl der Onkel 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}Kopieren
eth_getUncleCountByBlockNumber
Gibt die Anzahl der Onkel in einem Block zurück, der der angegebenen Blocknummer entspricht.
Parameter
QUANTITY|TAG
– Ganzzahl einer Blocknummer oder der String"latest"
,"earliest"
,"pending"
,"safe"
oder"finalized"
, siehe Standardblockparameter
1params: [2 "0xe8", // 2323]Kopieren
Rückgaben
QUANTITY
– Ganzzahl für die Anzahl der Onkel 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}Kopieren
eth_getCode
Gibt den Code an einer angegebenen Adresse zurück.
Parameter
DATA
, 20 Bytes - AdresseQUANTITY|TAG
– ganzzahlige Blocknummer oder der String"latest"
,"earliest"
,"pending"
,"safe"
oder"finalized"
, siehe Standardblockparameter
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Kopieren
Rückgaben
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}Kopieren
eth_sign
Die Unterzeichnungsmethode 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. Das verhindert Missbrauch, bei dem eine bösartige dApp beliebige Daten (z. B. Transaktionen) signieren und die Signatur nutzen kann, um sich als das Opfer auszugeben.
Hinweis: Die zum Signieren verwendete Adresse muss entsperrt sein.
Parameter
DATA
, 20 Bytes - AdresseDATA
, N Bytes - Nachricht zum Signieren
Rückgaben
DATA
: Signatur
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}Kopieren
eth_signTransaction
Signiert eine Transaktion, die zu einem späteren Zeitpunkt an das Netzwerk gesendet werden kann, indem sie mit eth_sendRawTransaction verwendet wird.
Parameter
Objekt
- Das Transaktionsobjekt
type
:from
:DATA
, 20 Bytes - Die Adresse, von der die Transaktion gesendet wird.to
:DATA
, 20 Bytes - (Optional beim Erstellen eines neuen Vertrags) Die Adresse, an die die Transaktion gerichtet ist.gas
:MENGE
- (Optional, Standard: 90000) Ganzzahlwert des Gases, das für die Transaktionsausführung bereitgestellt wurde. Es wird ungenutztes Gas zurückgegeben.gasPrice
:QUANTITY
– (optional, Standard: noch zu bestimmen) Ganzzahl von gasPrice, die für jedes bezahlte Gas verwendet wird, in Wei.value
:QUANTITY
– (optional) Ganzzahl des Werts, der mit dieser Transaktion gesendet wird, in Wei.data
:DATA
- Der kompilierte Code eines Vertrags ODER der Hash der aufgerufenen Methode Signatur und kodierter Parameter.nonce
:QUANTITY
- (Optional) Ganzzahlwert einer Nonce. Dies ermöglicht es, eigene ausstehende Transaktionen mit der gleichen Nonce zu überschreiben.
Rückgaben
DATA
– das RLP-codierte Transaktionsobjekt, das vom angegebenen Konto signiert wurde.
Beispiel
1// Request2curl -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// Result4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}Kopieren
eth_sendTransaction
Erstellt eine neue Nachrichtenanruftransaktion oder eine Contract-Erstellung, wenn das Datenfeld Code enthält, und signiert sie mit dem im from
-Feld angegebenen Konto.
Parameter
Objekt
- Das Transaktionsobjekt
from
:DATA
, 20 Bytes - Die Adresse, von der die Transaktion gesendet wird.to
:DATA
, 20 Bytes - (Optional beim Erstellen eines neuen Vertrags) Die Adresse, an die die Transaktion gerichtet ist.gas
:MENGE
- (Optional, Standard: 90000) Ganzzahlwert des Gases, das für die Transaktionsausführung bereitgestellt wurde. Es wird ungenutztes Gas zurückgegeben.gasprice
:QUANTITY
– (Optional, Standard: Noch zu bestimmen) Ganzzahlwert des Gaspreises, der für jedes bezahlte Gas verwendet wird.Value
:QUANTITY
- (Optional) Ganzzahlwert des mit dieser Transaktion gesendeten Werts.input
:DATA
– der kompilierte Code eines Contracts ODER der Hash der aufgerufenen Methodensignatur und der codierten Parameter.nonce
:QUANTITY
- (Optional) Ganzzahlwert einer Nonce. Dies ermöglicht es, eigene ausstehende Transaktionen mit der gleichen Nonce zu überschreiben.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Alles anzeigenKopieren
Rückgaben
DATA
, 32 Byte – der Transaktions-Hash oder der Null-Hash, wenn die Transaktion noch nicht verfügbar ist.
Verwenden Sie eth_getTransactionReceipt, um die Contract-Adresse zu erhalten, nachdem die Transaktion in einem Block vorgeschlagen wurde, wenn Sie einen Contract erstellt haben.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}Kopieren
eth_sendRawTransaction
Erstellt eine neue Nachrichtenaufruftransaktion oder eine Contract-Erstellung für signierte Transaktionen.
Parameter
DATA
, Die signierten Transaktionsdaten.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Kopieren
Rückgaben
DATA
, 32 Byte – der Transaktions-Hash oder der Null-Hash, wenn die Transaktion noch nicht verfügbar ist.
Verwenden Sie eth_getTransactionReceipt, um die Contract-Adresse zu erhalten, nachdem die Transaktion in einem Block vorgeschlagen wurde, wenn Sie einen Contract erstellt haben.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}Kopieren
eth_call
Führt sofort einen neuen Nachrichtenaufruf aus, ohne eine Transaktion auf der Blockchain zu erstellen. Wird häufig für die Ausführung von Smart-Contract-Funktionen mit Leseberechtigung verwendet, zum Beispiel balanceOf
für einen ERC-20-Contract.
Parameter
Object
- Das Transaktionsaufrufobjekt
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) Ganzzahlwert des für die Transaktionsausführung bereitgestellten Gases. eth_call verbraucht kein Gas, aber dieser Parameter kann von einigen Ausführungen benötigt werden.gasprice
:QUANTITY
- (Optional) Ganzzahlwert des Gaspreises, der für jedes bezahlte Gas verwendet wirdvalue
:QUANTITY
- (Optional) Ganzzahlwert des mit dieser Transaktion gesendeten Wertsinput
:DATA
– (optional) Hash der Methodensignatur und der codierten Parameter. Einzelheiten 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 Standardblockparameter
Rückgaben
DATA
– der Rückgabewert des ausgeführten Vertrages.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}Kopieren
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 der EVM-Mechanik und der Leistung des Knotens, erheblich höher sein kann als die tatsächlich von der Transaktion verbrauchte Gas-Menge.
Parameter
Siehe eth_call-Parameter – mit der Ausnahme, dass alle Eigenschaften optional sind. Wenn kein Gas-Limit angegeben ist, verwendet Geth das Block-Gas-Limit aus dem anstehenden Block als Obergrenze. Infolgedessen reicht die zurückgegebene Schätzung möglicherweise nicht aus, um die Abfrage/Transaktion auszuführen, wenn die Gas-Menge höher als das ausstehende Block-Gas-Limit ist.
Rückgaben
QUANTITY
– die verbrauchte Gas-Menge.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}Kopieren
eth_getBlockByHash
Gibt Informationen zu einem Block per Hash zurück.
Parameter
DATA
, 32 Bytes - Hash eines Blocks.Boolean
- Beitrue
werden die vollständigen Transaktionsobjekte zurückgegeben, beifalse
nur die Hashes der Transaktionen.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Kopieren
Rückgaben
Object
– ein Blockobjekt oder null
, wenn kein Block gefunden wurde:
number
:QUANTITY
- Die Blocknummer.null
, wenn es ein ausstehender Block ist.hash
:DATA
, 32 Bytes - Hash des Blocks.null
, wenn es ein ausstehender Block ist.parentHash
:DATA
, 32 Bytes - Hash des übergeordneten Blocks.nonce
:DATA
, 8 Bytes - Hash des generierten Proof-of-Work.null
, wenn es ein ausstehender Block ist.sha3Uncles
:DATA
, 32 Bytes - SHA3 der Onkeldaten im Block.logsBloom
:DATA
, 256 Bytes - Der Bloom-Filter für die Protokolle des Blocks.null
, wenn es ein ausstehender Block ist.TransaktionsRoot
:DATA
, 32 Bytes - Das Stammverzeichnis der Transaktions-Trie des Blocks.stateRoot
:DATA
, 32 Bytes – Die Wurzel des endgültigen Zustands-Trie des Blocks.receiptsRoot
:DATA
, 32 Bytes - Die Wurzel des Quittungstries des Blocks.miner
:DATA
, 20 Byte – die Adresse des Begünstigten, dem die Mining-Belohnungen gegeben wurden.difficulty
:QUANTITY
- Ganzzahlwert der Schwierigkeit für diesen Block.totalDifficulty
:QUANTITY
- Ganzzahlwert der Gesamtschwierigkeit der Blockchain bis zu diesem Block.extraData
:DATA
- Das Feld „zusätzliche Daten“ dieses Blocks.size
:QUANTITY
- Ganzzahlwert der Größe dieses Blocks in Bytes.gasLimit
:QUANTITY
- Das maximal zulässige Gas in diesem Block.gasUsed
:QUANTITY
- Das insgesamt von allen Transaktionen in diesem Block verbrauchte Gas.timestamp
:QUANTITY
- Der Unix-Zeitstempel für den Zeitpunkt, zu dem der Block sortiert wurde.transactions
:Array
– Array von Transaktionsobjekten oder 32-Byte-Transaktions-Hashes, abhängig vom zuletzt angegebenen Parameter.uncles
:Array
- Array von Onkel-Hashes.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result4{5{6"jsonrpc": "2.0",7"id": 1,8"result": {9 "difficulty": "0x4ea3f27bc",10 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",11 "gasLimit": "0x1388",12 "gasUsed": "0x0",13 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",14 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",15 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",16 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",17 "nonce": "0x689056015818adbe",18 "number": "0x1b4",19 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",20 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",21 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",22 "size": "0x220",23 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",24 "timestamp": "0x55ba467c",25 "totalDifficulty": "0x78ed983323d",26 "transactions": [27 ],28 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",29 "uncles": [30 ]31}32}Alles anzeigenKopieren
eth_getBlockByNumber
Gibt Informationen über eine Block-für-Block-Nummer zurück.
Parameter
QUANTITY|TAG
– Ganzzahl einer Blocknummer oder der String"earliest"
,"latest"
,"pending"
,"safe"
oder"finalized"
, wie im Standardblockparameter.Boolean
- Beitrue
werden die vollständigen Transaktionsobjekte zurückgegeben, beifalse
nur die Hashes der Transaktionen.
1params: [2 "0x1b4", // 4363 true,4]Kopieren
Rückgaben Siehe eth_getBlockByHash
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Kopieren
Ergebnis siehe eth_getBlockByHash
eth_getTransactionByHash
Gibt die Informationen über eine Transaktion zurück, die anhand des Transaktions-Hashs angefordert wurde.
Parameter
DATA
, 32 Bytes - Hash einer Transaktion
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Kopieren
Rückgaben
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 es aussteht.blockNumber
:QUANTITY
- Blocknummer, in der sich diese Transaktion befand.null
, wenn es aussteht.from
:DATA
, 20 Bytes - Adresse des Senders.gas
:QUANTITY
- Vom Sender bereitgestelltes Gas.gasPrice
:QUANTITY
- Vom Sender bereitgestellter Gaspreis in Wei.hash
:DATA
, 32 Bytes - Hash der Transaktion.input
:DATA
- Die mit der Transaktion gesendeten Daten.nonce
:QUANTITY
- Die Anzahl der von dem Sender vor dieser Transaktion durchgeführten Transaktionen.to
:DATA
, 20 Bytes - Adresse des Empfängers.null
wenn es sich um eine Vertragserstellungstransaktion handelt.transactionIndex
:QUANTITY
- Ganzzahlwert der Transaktionsindexposition im Block.null
, wenn es aussteht.value
:QUANTITY
- Der übertragene Wert in Wei.v
:QUANTITY
- ECDSA Wiederherstellungs-IDr
:QUANTITY
- ECDSA Signatur rs
:QUANTITY
- ECDSA Signatur s
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result4{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}Alles anzeigenKopieren
eth_getTransactionByBlockHashAndIndex
Gibt Informationen über eine Transaktion nach dem Block-Hash und der Transaktionsindexposition zurück.
Parameter
DATA
, 32 Bytes - Hash eines Blocks.QUANTITY
- Ganzzahlwert der Transaktionsindexposition.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Kopieren
Rückgaben Siehe eth_getTransactionByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Kopieren
Ergebnis siehe eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Gibt Informationen über eine Transaktion nach der Blocknummer und der Transaktionsindexposition zurück.
Parameter
QUANTITY|TAG
– eine Blocknummer oder der String"earliest"
,"latest"
,"pending"
,"safe"
oder"finalized"
, wie im Standardblockparameter.QUANTITY
- Die Transaktionsindexposition.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Kopieren
Rückgaben Siehe eth_getTransactionByHash
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Kopieren
Ergebnis siehe eth_getTransactionByHash
eth_getTransactionReceipt
Gibt den Beleg einer Transaktion nach dem Transaktions-Hash zurück.
Hinweis: Der Beleg ist für ausstehende Transaktionen nicht verfügbar.
Parameter
DATA
, 32 Bytes - Hash einer Transaktion
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Kopieren
Rückgaben Object
– ein Transaktionsbeleg-Objekt oder null
, wenn kein Beleg gefunden wurde:
transactionHash
:DATA
, 32 Bytes - Hash der Transaktion.transactionIndex
:QUANTITY
- Ganzzahlwert der Transaktionsindexposition 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 Senders.to
:DATA
, 20 Bytes - Adresse des Empfängers. null, wenn es sich um eine Vertragserstellungstransaktion handelt.cumulativeGasUsed
:QUANTITY
- Die Gesamtmenge an Gas, die bei Ausführung dieser Transaktion im Block verwendet wurde.effectiveGasPrice
:QUANTITY
- Die Summe der Grundgebühr und der Tipp, die pro Einheit Gas bezahlt wurde.gasUsed
:QUANTITY
- Die Menge an Gas, die von dieser bestimmten Transaktion allein verwendet wurde.contractAddress
:DATA
, 20 Bytes - Die Vertragsadresse, die erstellt wurde, falls die Transaktion eine Vertragserstellung war, andernfallsnull
.logs
:Array
- Array von Log-Objekten, die diese Transaktion generiert hat.logsBloom
:DATA
, 256 Bytes - Bloom-Filter für leichte Clients, um schnell verwandte Logs abzurufen.type
:QUANTITY
- Ganzzahlwert des Transaktionstyps,0x0
für veraltete Transaktionen,0x1
für Zugriffslistentypen,0x2
für dynamische Gebühren.
Es gibt auch eines davon zurück:
root
:DATA
32 Bytes des vorherigen Transaktions-Stateroots (vor Byzantium)status
:QUANTITY
entweder1
(Erfolg) or0
(Fehler)
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string of the address if it was created12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logs as returned by getFilterLogs, etc.18 }],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}Alles anzeigenKopieren
eth_getUncleByBlockHashAndIndex
Gibt Informationen über einen Onkel eines Blocks nach Hash und Onkel-Indexposition zurück.
Parameter
DATA
, 32 Bytes - Der Hash eines Blocks.QUANTITY
- Die Indexposition des Onkels.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Kopieren
Rückgaben Siehe eth_getBlockByHash
Beispiel
1// Anfrage2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Kopieren
Ergebnis siehe eth_getBlockByHash
Hinweis: Ein Onkel enthält keine einzelnen Transaktionen.
eth_getUncleByBlockNumberAndIndex
Gibt Informationen über einen Onkel eines Blocks nach Nummer und Onkel-Indexposition zurück.
Parameter
QUANTITY|TAG
– eine Blocknummer oder der String"earliest"
,"latest"
,"pending"
,"safe"
,"finalized"
, wie im Standardblockparameter.QUANTITY
- Die Indexposition des Onkels.
1params: [2 "0x29c", // 6683 "0x0", // 04]Kopieren
Rückgaben Siehe eth_getBlockByHash
Hinweis: Ein Onkel enthält keine einzelnen Transaktionen.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'Kopieren
Ergebnis siehe eth_getBlockByHash
eth_newFilter
Erstellt auf Basis von Filteroptionen ein Filterobjekt, um eine Benachrichtigung auszugeben, wenn sich der Status ändert (Protokolle). Um zu überprüfen, ob sich der Status geändert hat, rufen Sie eth_getFilterChanges auf.
Hinweis zum Festlegen von Themenfiltern: Themen sind auftragsabhängig. Eine Transaktion mit einem Protokoll mit den Themen [A, B] wird mit den folgenden Themenfiltern abgeglichen:
[]
„alles“[A]
„A an erster Stelle (und alles danach)“[null, B]
„Alles an erster Stelle UND B an zweiter Stelle (und alles danach)“[A, B]
„A an erster Stelle UND B an zweiter Stelle (und alles danach)“[[A, B], [A, B]]
„(A ODER B) an erster Stelle UND (A ODER B) an zweiter Stelle (und alles danach)“- Parameter
Object
– die Filteroptionen:
fromBlock
:QUANTITY|TAG
– (optional, standardmäßig:"latest"
) ganzzahlige Blocknummer oder"latest"
für den letzten vorgeschlagenen Block,"safe"
für den letzten sicheren Block,"finalized"
für den letzten abgeschlossenen Block oder"pending"
,"earliest"
für Transaktionen, die noch nicht in einem Block sind.toBlock
:QUANTITY|TAG
– (optional, standardmäßig:"latest"
) ganzzahlige Blocknummer oder"latest"
für den letzten vorgeschlagenen Block,"safe"
für den letzten sicheren Block,"finalized"
für den letzten abgeschlossenen Block oder"pending"
,"earliest"
für Transaktionen, die noch nicht in einem Block sind.Adresse
:DATA|Array
, 20 Bytes - (Optional) Vertragsadresse oder eine Liste von Adressen, von denen Protokolle stammen sollen.topics
:Array of DATA
, - (Optional) Array von 32 BytesDATA
-Themen. Themen sind auftragsabhängig. Jedes Thema kann auch ein Array von DATEN 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]Alles anzeigenKopieren
Rückgaben QUANTITY
– eine Filter-ID.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Kopieren
eth_newBlockFilter
Erstellt einen Filter im Knoten, um eine Benachrichtigung auszugeben, wenn ein neuer Block eintrifft. Um zu überprüfen, ob sich der Status geändert hat, rufen Sie eth_getFilterChanges auf.
Parameter Keine
Rückgaben QUANTITY
– eine Filter-ID.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Kopieren
eth_newPendingTransactionFilter
Erstellt einen Filter im Knoten, um eine Benachrichtigung auszugeben, wenn eine neue ausstehende Transaktionen eintrifft. Um zu überprüfen, ob sich der Status geändert hat, rufen Sie eth_getFilterChanges auf.
Parameter Keine
Rückgaben QUANTITY
– eine Filter-ID.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Kopieren
eth_uninstallFilter
Deinstalliert einen Filter mit angegebener ID. Sollte immer aufgerufen werden, wenn die Uhr nicht mehr benötigt wird. Zusätzlich Timeout für Filter, wenn sie für einen bestimmten Zeitraum nicht mit eth_getFilterChanges angefordert werden.
Parameter
QUANTITY
– die Filter-ID.
1params: [2 "0xb", // 113]Kopieren
Rückgabewerte Boolean
– true
, wenn der Filter erfolgreich deinstalliert wurde, andernfalls false
.
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}Kopieren
eth_getFilterChanges
Umfragemethode für einen Filter, die ein Array von Protokollen zurückgibt, die seit der letzten Umfrage aufgetreten sind.
Parameter
QUANTITY
– die Filter-ID.
1params: [2 "0x16", // 223]Kopieren
Rückgabewerte Array
– Array von Protokollobjekten oder ein leeres Array, wenn sich seit der letzten Umfrage nichts geändert hat.
- Für mit
eth_newBlockFilter
erstellte Filter sind die Rückgabewerte Block-Hashes (DATA
, 32 Bytes), z.["0x3454645634534..."]
. - Für Filter, die mit
eth_newPendingTransactionFilter
erstellt wurden, sind die Rückgabewerte Transaktions-Hashes (DATA
, 32 Bytes), z.["0x6345343454645..."]
. - Für mit
eth_newFilter
erstellte Filter sind Protokolle Objekte mit folgenden Parametern:removed
:TAG
-true
, als das Protokoll aufgrund einer Neustrukturierung der Blockchain entfernt wurde.false
, wenn es sich um ein gültiges Protokoll handelt.logIndex
:QUANTITY
– Ganzzahlwert der Protokollindexposition im Block.null
, wenn es sich um ein ausstehendes Protokoll handelt.transactionIndex
:QUANTITY
- Ganzzahlwert 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 aussteht.null
, wenn es sich um ein ausstehendes Protokoll handelt.blockNumber
:QUANTITY
- Die Blocknummer, in der sich dieses Protokoll befand.null
, wenn es aussteht.null
, wenn es sich um ein ausstehendes Protokoll handelt.Adresse
:DATA
, 20 Bytes - Adresse, von der dieses Protokoll stammt.data
:DATA
– enthält null oder mehr 32 Byte nicht indizierte Argumente des Protokolls.topics
:Array of DATA
- Array von 0 bis 4 32 BytesDATA
von 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 demanonymous
-Spezifizierer deklariert.)
- Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result4{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}Alles anzeigenKopieren
eth_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]Kopieren
Rückgabewerte Siehe eth_getFilterChanges
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Kopieren
Ergebnis siehe eth_getFilterChanges
eth_getLogs
Gibt ein Array aller Protokolle zurück, die einem angegebenen Filterobjekt entsprechen.
Parameter
Object
– die Filteroptionen:
fromBlock
:QUANTITY|TAG
– (optional, standardmäßig:"latest"
) ganzzahlige Blocknummer oder"latest"
für den letzten vorgeschlagenen Block,"safe"
für den letzten sicheren Block,"finalized"
für den letzten abgeschlossenen Block oder"pending"
,"earliest"
für Transaktionen, die noch nicht in einem Block sind.toBlock
:QUANTITY|TAG
– (optional, standardmäßig:"latest"
) ganzzahlige Blocknummer oder"latest"
für den letzten vorgeschlagenen Block,"safe"
für den letzten sicheren Block,"finalized"
für den letzten abgeschlossenen Block oder"pending"
,"earliest"
für Transaktionen, die noch nicht in einem Block sind.Adresse
:DATA|Array
, 20 Bytes - (Optional) Vertragsadresse oder eine Liste von Adressen, von denen Protokolle stammen sollen.topics
:Array of DATA
, - (Optional) Array von 32 BytesDATA
-Themen. Themen sind auftragsabhängig. Jedes Thema kann auch ein Array von DATEN mit „oder“-Optionen sein.blockhash
:DATA
, 32 Bytes - (optional, future) Mit dem Hinzufügen von EIP-234 wirdblockHash
eine neue Filteroption sein, die die zurückgegebenen Protokolle auf den einzelnen Block mit dem 32-Byte-HashblockHash
beschränkt. Die Verwendung vonblockHash
entsprichtfromBlock
=toBlock
= die Blocknummer mit HashblockHash
. WennblockHash
in den Filterkriterien vorhanden ist, sind wederfromBlock
nochtoBlock
zulässig.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Kopieren
Rückgabewerte Siehe eth_getFilterChanges
Beispiel
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Kopieren
Ergebnis siehe eth_getFilterChanges
Anwendungsbeispiel
Einen Contract mit JSON_RPC bereitstellen
Dieser Abschnitt enthält eine Demonstration, wie ein Contract nur mithilfe der RPC-Schnittstelle bereitgestellt wird. Es gibt alternative Wege zur Bereitstellung von Contracts, bei denen diese Komplexität abstrahiert wird – zum Beispiel die Verwendung von Bibliotheken, die auf der RPC-Schnittstelle wie web3.js(opens in a new tab) und web3.py(opens in a new tab) aufbauen. Diese Abstraktionen sind im Allgemeinen leichter zu verstehen und weniger fehleranfällig, es ist dennoch hilfreich, zu verstehen, was im Hintergrund passiert.
Das Folgende ist ein unkomplizierter Smart Contract namens Multiply7
, der über die JSON-RPC-Schnittstelle auf einem Ethereum-Knoten bereitgestellt wird. Dieses Tutorial geht davon aus, dass der Reader bereits einen Geth-Knoten ausführt. Weitere Informationen zu Nodes und Clients finden Sie hier. Bitte sehen Sie in der jeweiligen Client-Dokumentation nach, wie Sie den HTTP-JSON-RPC für Nicht-Geth-Clients starten. Die meisten Clients werden standardmäßig auf localhost:8545
ausgeführt.
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}
Stellen Sie zunächst sicher, dass die HTTP-RPC-Schnittstelle aktiviert ist. Das bedeutet, dass wir Geth beim Start mit dem --http
-Flag versehen. In diesem Beispiel verwenden wir den Geth-Knoten in einer privaten Entwicklungs-Blockchain. Mit diesem Ansatz benötigen wir kein Ether im echten Netzwerk.
geth --http --dev console 2>>geth.log
Dadurch wird die HTTP-RPC-Schnittstelle auf http://localhost:8545
gestartet.
Wir können überprüfen, ob die Schnittstelle läuft, indem wir die Coinbase-Adresse und den Saldo mit curl(opens in a new tab) abrufen. Bitte beachten Sie, dass sich die Daten in diesen Beispielen auf Ihrem lokalen Knoten unterscheiden. 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 wird.
curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "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 codiert sind, wird der Saldo in Wei als hexadezimaler String zurückgegeben. Wenn wir das Guthaben in Ether als Zahl haben möchten, können wir web3 von der Geth-Konsole verwenden.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"
Jetzt, da es etwas Ether in unserer privaten Entwicklungs-Kette gibt, können wir den Contract bereitstellen. Der erste Schritt besteht darin, den Multiply7-Contract 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, um der Version des verwendeten Compilers für unser Beispiel zu entsprechen(opens in a new tab).)
Der nächste Schritt besteht darin, den Multiply7-Contract 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:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029
Jetzt, da wir den kompilierten Code haben, müssen wir bestimmen, wie viel Gas es kostet, ihn einzusetzen. Die RPC-Schnittstelle hat eine eth_estimateGas
-Methode, die uns eine Schätzung bereitstellt.
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 stellen Sie den Contract bereit.
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 von dem 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 Contract bereitgestellt wird. Jede ausgeführte Transaktion erstellt einen Beleg. Dieser Beleg enthält verschiedene Informationen über die Transaktion, wie z. B. in welchem Block die Transaktion enthalten war und wie viel Gas von der EVM verbraucht wurde. Wenn eine Transaktion einen Contract erstellt, enthält sie auch die Contract-Adresse. 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 Contract wurde am 0x4d03d617d700cf81935d7f797f4e2ae719648262
erstellt. Ein Nullergebnis anstelle eines Belegs bedeutet, dass die Transaktion noch nicht in einen Block aufgenommen wurde. Warten Sie einen Moment, prüfen Sie, ob Ihr Konsens-Client ausgeführt wird, und versuchen Sie es erneut.
Interaktion mit Smart Contracts
In diesem Beispiel senden wir eine Transaktion mit eth_sendTransaction
an die Methode multiply
des Contracts.
eth_sendTransaction
erfordert mehrere Argumente, speziell from
, to
und data
. From
ist die öffentliche Adresse unseres Kontos und to
ist die Contract-Adresse. Das Argument data
enthält eine Nutzlast, die definiert, welche Methode mit welchen Argumenten aufgerufen werden muss. An dieser Stelle kommt die ABI (Application Binary Interface – binäre Anwendungsschnittstelle)(opens in a new tab) ins Spiel. Die ABI ist eine JSON-Datei, die festlegt, wie Daten für die EVM definiert und kodiert werden.
Die Byte der Nutzlast definieren, welche Methode im Contract aufgerufen wird. Das sind die ersten 4 Byte aus dem Keccak-Hash über den Funktionsnamen und seine Argumenttypen, Hex-codiert. Die Multiplizieren-Funktion akzeptiert ein uint, welches ein Alias für uint256 ist. Damit bleibt uns:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"
Der nächste Schritt besteht darin, die Argumente zu codieren. Es gibt nur einen uint256, beispielsweise den Wert 6. Die ABI hat einen Abschnitt, der angibt, wie uint256-Typen codiert werden.
int<M>: enc(X)
ist die Big-Endian-Zweierkomplementcodierung von X, aufgefüllt auf der Seite höherer Ordnung (links) mit 0xff für negatives X und mit null > Byte für positives X, sodass die Länge ein Vielfaches von 32 Byte ist.
Dies wird zu 0000000000000000000000000000000000000000000000000000000000006
codiert.
Durch die Kombination des Funktionsselektors und des codierten Arguments werden unsere Daten zu 0xc6888fa10000000000000000000000000000000000000000000000000000000000006
.
Dies kann nun an den 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}Alles anzeigen
Der Beleg enthält ein Protokoll. Dieses Protokoll wurde von der EVM bei der Transaktionsausführung 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 zu der erwarteten Dezimalzahl 42 führt. Abgesehen von den Daten ist es erwähnenswert, dass Themen verwendet werden können, um festzustellen, welches Ereignis das Protokoll erstellt hat:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"
Das war nur eine kurze Einführung in einige der häufigsten Aufgaben, die die direkte Verwendung von JSON-RPC demonstrieren.