mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-26 07:12:16 +00:00
parent
1c0bfe1158
commit
eec9f142b5
@ -55,6 +55,8 @@ Tendermint 102
|
|||||||
abci-spec.rst
|
abci-spec.rst
|
||||||
app-architecture.rst
|
app-architecture.rst
|
||||||
app-development.rst
|
app-development.rst
|
||||||
|
subscribing-to-events-via-websocket.rst
|
||||||
|
indexing-transactions.rst
|
||||||
how-to-read-logs.rst
|
how-to-read-logs.rst
|
||||||
|
|
||||||
Tendermint 201
|
Tendermint 201
|
||||||
|
100
docs/indexing-transactions.rst
Normal file
100
docs/indexing-transactions.rst
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
Indexing Transactions
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Tendermint allows you to index transactions and later query or subscribe to
|
||||||
|
their results.
|
||||||
|
|
||||||
|
Let's take a look at the ``[tx_index]`` config section:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
##### transactions indexer configuration options #####
|
||||||
|
[tx_index]
|
||||||
|
|
||||||
|
# What indexer to use for transactions
|
||||||
|
#
|
||||||
|
# Options:
|
||||||
|
# 1) "null" (default)
|
||||||
|
# 2) "kv" - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend).
|
||||||
|
indexer = "kv"
|
||||||
|
|
||||||
|
# Comma-separated list of tags to index (by default the only tag is tx hash)
|
||||||
|
#
|
||||||
|
# It's recommended to index only a subset of tags due to possible memory
|
||||||
|
# bloat. This is, of course, depends on the indexer's DB and the volume of
|
||||||
|
# transactions.
|
||||||
|
index_tags = ""
|
||||||
|
|
||||||
|
# When set to true, tells indexer to index all tags. Note this may be not
|
||||||
|
# desirable (see the comment above). IndexTags has a precedence over
|
||||||
|
# IndexAllTags (i.e. when given both, IndexTags will be indexed).
|
||||||
|
index_all_tags = false
|
||||||
|
|
||||||
|
By default, Tendermint will index all transactions by their respective hashes
|
||||||
|
using an embedded simple indexer. Note, we are planning to add more options in
|
||||||
|
the future (e.g., Postgresql indexer).
|
||||||
|
|
||||||
|
Adding tags
|
||||||
|
-----------
|
||||||
|
|
||||||
|
In your application's ``DeliverTx`` method, add the ``Tags`` field with the
|
||||||
|
pairs of UTF-8 encoded strings (e.g. "account.owner": "Bob", "balance":
|
||||||
|
"100.0", "date": "2018-01-02").
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
func (app *KVStoreApplication) DeliverTx(tx []byte) types.Result {
|
||||||
|
...
|
||||||
|
tags := []cmn.KVPair{
|
||||||
|
{[]byte("account.name"), []byte("igor")},
|
||||||
|
{[]byte("account.address"), []byte("0xdeadbeef")},
|
||||||
|
{[]byte("tx.amount"), []byte("7")},
|
||||||
|
}
|
||||||
|
return types.ResponseDeliverTx{Code: code.CodeTypeOK, Tags: tags}
|
||||||
|
}
|
||||||
|
|
||||||
|
If you want Tendermint to only index transactions by "account.name" tag, in the
|
||||||
|
config set ``tx_index.index_tags="account.name"``. If you to index all tags,
|
||||||
|
set ``index_all_tags=true``
|
||||||
|
|
||||||
|
Note, there are a few predefined tags:
|
||||||
|
|
||||||
|
- ``tm.event`` (event type)
|
||||||
|
- ``tx.hash`` (transaction's hash)
|
||||||
|
- ``tx.height`` (height of the block transaction was committed in)
|
||||||
|
|
||||||
|
Tendermint will throw a warning if you try to use any of the above keys.
|
||||||
|
|
||||||
|
Quering transactions
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
You can query the transaction results by calling ``/tx_search`` RPC endpoint:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
curl "localhost:46657/tx_search?query=\"account.name='igor'\"&prove=true"
|
||||||
|
|
||||||
|
Check out `API docs <https://tendermint.github.io/slate/?shell#txsearch>`__ for more
|
||||||
|
information on query syntax and other options.
|
||||||
|
|
||||||
|
Subscribing to transactions
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Clients can subscribe to transactions with the given tags via Websocket by
|
||||||
|
providing a query to ``/subscribe`` RPC endpoint.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "subscribe",
|
||||||
|
"id": "0",
|
||||||
|
"params": {
|
||||||
|
"query": "account.name='igor'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Check out `API docs <https://tendermint.github.io/slate/#subscribe>`__ for more
|
||||||
|
information on query syntax and other options.
|
28
docs/subscribing-to-events-via-websocket.rst
Normal file
28
docs/subscribing-to-events-via-websocket.rst
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Subscribing to events via Websocket
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Tendermint emits different events, to which you can subscribe via `Websocket
|
||||||
|
<https://en.wikipedia.org/wiki/WebSocket>`__. This can be useful for
|
||||||
|
third-party applications (for analysys) or inspecting state.
|
||||||
|
|
||||||
|
`List of events <https://godoc.org/github.com/tendermint/tendermint/types#pkg-constants>`__
|
||||||
|
|
||||||
|
You can subscribe to any of the events above by calling ``subscribe`` RPC method via Websocket.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "subscribe",
|
||||||
|
"id": "0",
|
||||||
|
"params": {
|
||||||
|
"query": "tm.event='NewBlock'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Check out `API docs <https://tendermint.github.io/slate/#subscribe>`__ for more
|
||||||
|
information on query syntax and other options.
|
||||||
|
|
||||||
|
You can also use tags, given you had included them into DeliverTx response, to
|
||||||
|
query transaction results. See `Indexing transactions
|
||||||
|
<./indexing-transactions.html>`__ for details.
|
Loading…
x
Reference in New Issue
Block a user