[DOCS] massive documentation update (#20229)
This PR: - reorganizes all documentation pages so they live in the right category - removes lots of legacy docs - contains many improvements to active documentation pages Geth user documentation is now spread across five major categories: - Install and Build: installation and compile instructions - Using Geth: this is for pages about general geth usage. - For dApp Developers: this is for programming guides and functionality specific to dapp development. All the dev guides for mobile framework and Go APIs live here. - JSON-RPC APIs: this has its own section because there is now a sub-page for every name space. I have also added an overview text that explains how to set up the API servers. - For Geth Developers: this is for geth contributors
This commit is contained in:
168
docs/_rpc/pubsub.md
Normal file
168
docs/_rpc/pubsub.md
Normal file
@ -0,0 +1,168 @@
|
||||
---
|
||||
title: Real-time Events
|
||||
sort_key: B
|
||||
---
|
||||
|
||||
Geth v1.4 and later support publish / subscribe using JSON-RPC notifications. This allows
|
||||
clients to wait for events instead of polling for them.
|
||||
|
||||
It works by subscribing to particular events. The node will return a subscription id. For
|
||||
each event that matches the subscription a notification with relevant data is send
|
||||
together with the subscription id.
|
||||
|
||||
Example:
|
||||
|
||||
// create subscription
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["newHeads", {}]}
|
||||
<< {"jsonrpc":"2.0","id":1,"result":"0xcd0c3e8af590364c09d0fa6a1210faf5"}
|
||||
|
||||
// incoming notifications
|
||||
<< {"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0xcd0c3e8af590364c09d0fa6a1210faf5","result":{"difficulty":"0xd9263f42a87",<...>, "uncles":[]}}}
|
||||
<< {"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0xcd0c3e8af590364c09d0fa6a1210faf5","result":{"difficulty":"0xd90b1a7ad02", <...>, "uncles":["0x80aacd1ea4c9da32efd8c2cc9ab38f8f70578fcd46a1a4ed73f82f3e0957f936"]}}}
|
||||
|
||||
// cancel subscription
|
||||
>> {"id": 1, "method": "eth_unsubscribe", "params": ["0xcd0c3e8af590364c09d0fa6a1210faf5"]}
|
||||
<< {"jsonrpc":"2.0","id":1,"result":true}
|
||||
|
||||
### Considerations
|
||||
|
||||
1. notifications are send for current events and not for past events. If your use case
|
||||
requires you not to miss any notifications than subscriptions are probably not the best
|
||||
option.
|
||||
2. subscriptions require a full duplex connection. Geth offers such connections in the
|
||||
form of WebSocket and IPC (enabled by default).
|
||||
3. subscriptions are coupled to a connection. If the connection is closed all
|
||||
subscriptions that are created over this connection are removed.
|
||||
4. notifications are stored in an internal buffer and sent from this buffer to the client.
|
||||
If the client is unable to keep up and the number of buffered notifications reaches a
|
||||
limit (currently 10k) the connection is closed. Keep in mind that subscribing to some
|
||||
events can cause a flood of notifications, e.g. listening for all logs/blocks when the
|
||||
node starts to synchronize.
|
||||
|
||||
## Create subscription
|
||||
|
||||
Subscriptions are creates with a regular RPC call with `eth_subscribe` as method and the
|
||||
subscription name as first parameter. If successful it returns the subscription id.
|
||||
|
||||
### Parameters
|
||||
|
||||
1. subscription name
|
||||
2. optional arguments
|
||||
|
||||
### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["newHeads", {"includeTransactions": true}]}
|
||||
<< {"id": 1, "jsonrpc": "2.0", "result": "0x9cef478923ff08bf67fde6c64013158d"}
|
||||
|
||||
## Cancel subscription
|
||||
|
||||
Subscriptions are cancelled with a regular RPC call with `eth_unsubscribe` as method and
|
||||
the subscription id as first parameter. It returns a bool indicating if the subscription
|
||||
was cancelled successful.
|
||||
|
||||
### Parameters
|
||||
1. subscription id
|
||||
|
||||
### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}
|
||||
<< {"jsonrpc":"2.0","id":1,"result":true}
|
||||
|
||||
## Supported Subscriptions
|
||||
|
||||
### newHeads
|
||||
|
||||
Fires a notification each time a new header is appended to the chain, including chain reorganizations. Users can use the bloom filter to determine if the block contains logs that are interested to them.
|
||||
|
||||
In case of a chain reorganization the subscription will emit all new headers for the new
|
||||
chain. Therefore the subscription can emit multiple headers on the same height.
|
||||
|
||||
#### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
|
||||
<< {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
|
||||
|
||||
<< {
|
||||
"jsonrpc": "2.0",
|
||||
"method": "eth_subscription",
|
||||
"params": {
|
||||
"result": {
|
||||
"difficulty": "0x15d9223a23aa",
|
||||
"extraData": "0xd983010305844765746887676f312e342e328777696e646f7773",
|
||||
"gasLimit": "0x47e7c4",
|
||||
"gasUsed": "0x38658",
|
||||
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"miner": "0xf8b483dba2c3b7176a3da549ad41a48bb3121069",
|
||||
"nonce": "0x084149998194cc5f",
|
||||
"number": "0x1348c9",
|
||||
"parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
|
||||
"receiptRoot": "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
|
||||
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
|
||||
"stateRoot": "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
|
||||
"timestamp": "0x56ffeff8",
|
||||
"transactionsRoot": "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
|
||||
},
|
||||
"subscription": "0x9ce59a13059e417087c02d3236a0b1cc"
|
||||
}
|
||||
}
|
||||
|
||||
### logs
|
||||
|
||||
Returns logs that are included in new imported blocks and match the given filter criteria.
|
||||
|
||||
In case of a chain reorganization previous sent logs that are on the old chain will be resend with the `removed` property set to true. Logs from transactions that ended up in the new chain are emitted. Therefore a subscription can emit logs for the same transaction multiple times.
|
||||
|
||||
#### Parameters
|
||||
|
||||
1. `object` with the following (optional) fields
|
||||
- **address**, either an address or an array of addresses. Only logs that are created from these addresses are returned (optional)
|
||||
- **topics**, only logs which match the specified topics (optional)
|
||||
|
||||
|
||||
#### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}
|
||||
<< {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
|
||||
|
||||
<< {"jsonrpc":"2.0","method":"eth_subscription","params": {"subscription":"0x4a8a4c0517381924f9838102c5a4dcb7","result":{"address":"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd","blockHash":"0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04","blockNumber":"0x29e87","data":"0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003","logIndex":"0x0","topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],"transactionHash":"0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4","transactionIndex":"0x0"}}}
|
||||
|
||||
### newPendingTransactions
|
||||
|
||||
Returns the hash for all transactions that are added to the pending state and are signed with a key that is available in the node.
|
||||
|
||||
When a transaction that was previously part of the canonical chain isn't part of the new canonical chain after a reogranization its again emitted.
|
||||
|
||||
#### Parameters
|
||||
|
||||
none
|
||||
|
||||
#### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}
|
||||
<< {"jsonrpc":"2.0","id":2,"result":"0xc3b33aa549fb9a60e95d21862596617c"}
|
||||
<< {
|
||||
"jsonrpc":"2.0",
|
||||
"method":"eth_subscription",
|
||||
"params":{
|
||||
"subscription":"0xc3b33aa549fb9a60e95d21862596617c",
|
||||
"result":"0xd6fdc5cc41a9959e922f30cb772a9aef46f4daea279307bc5f7024edc4ccd7fa"
|
||||
}
|
||||
}
|
||||
|
||||
### syncing
|
||||
|
||||
Indicates when the node starts or stops synchronizing. The result can either be a boolean
|
||||
indicating that the synchronization has started (true), finished (false) or an object with
|
||||
various progress indicators.
|
||||
|
||||
#### Parameters
|
||||
|
||||
none
|
||||
|
||||
#### Example
|
||||
|
||||
>> {"id": 1, "method": "eth_subscribe", "params": ["syncing"]}
|
||||
<< {"jsonrpc":"2.0","id":2,"result":"0xe2ffeb2703bcf602d42922385829ce96"}
|
||||
|
||||
<< {"subscription":"0xe2ffeb2703bcf602d42922385829ce96","result":{"syncing":true,"status":{"startingBlock":674427,"currentBlock":67400,"highestBlock":674432,"pulledStates":0,"knownStates":0}}}}
|
||||
|
Reference in New Issue
Block a user