GraphQL over HTTP
GraphQL can reduce the overhead needed for common queries. For example, instead of querying each receipt in a block, GraphQL can get the same result with a single query for the entire block.
The Besu GraphQL schema describes the GraphQL implementation for Ethereum. Enable the GraphQL service using command line options.
Note
GraphQL is not supported over WebSockets.
Access the GraphQL endpoint at http://<HOST>:<PORT>/graphql
. Configure <HOST>
and <PORT>
using graphql-http-host
and
graphql-http-port
. The default endpoint
is http://127.0.0.1:8547/graphql
.
GraphQL requests with cURL
Hyperledger Besu JSON-RPC API methods with an equivalent GraphQL query include a GraphQL request and result in the method example.
Example
The following syncing
request returns data
about the synchronization status.
curl -X POST -H "Content-Type: application/json" --data '{ "query": "{syncing{startingBlock currentBlock highestBlock}}"}' http://localhost:8547/graphql
GraphQL requests with GraphiQL app
The third-party tool, GraphiQL, provides a tabbed interface for editing and testing GraphQL queries and mutations. GraphiQL also provides access to the Besu GraphQL schema from within the app.
Pending
transactionCount
and transactions
supports the Pending query.
Important
Besu does not execute pending transactions so results from account
, call
, and estimateGas
for Pending do not reflect pending transactions.
Example
curl -X POST -H "Content-Type: application/json" --data '{ "query": "{pending {transactionCount}}"}' http://localhost:8547/graphql
{
"data" : {
"pending" : {
"transactionCount" : 2
}
}
}
Example
curl -X POST -H "Content-Type: application/json" --data '{ "query": "{pending {transactions{hash}}}"}' http://localhost:8547/graphql
{
"data" : {
"pending" : {
"transactions" : [ {
"hash" : "0xbb3ab8e2113a4afdde9753782cb0680408c0d5b982572dda117a4c72fafbf3fa"
}, {
"hash" : "0xf6bd6b1bccf765024bd482a71c6855428e2903895982090ab5dbb0feda717af6"
} ]
}
}
}