|
|
@ -0,0 +1,27 @@ |
|
|
|
Transactional Semantics |
|
|
|
======================= |
|
|
|
|
|
|
|
In `"Using |
|
|
|
Tendermint"<./specification/using-tendermint.html#broadcast-api>`__ we |
|
|
|
discussed different API endpoints for sending transactions and |
|
|
|
differences between them. |
|
|
|
|
|
|
|
What we have not yet covered is transactional semantics. |
|
|
|
|
|
|
|
When you send a transaction using one of the available methods, it |
|
|
|
first goes to the mempool. Currently, it does not provide strong |
|
|
|
guarantees like "if the transaction were accepted, it would be |
|
|
|
eventually included in a block (given CheckTx passes)." |
|
|
|
|
|
|
|
For instance a tx could enter the mempool, but before it can be sent |
|
|
|
to peers the node crashes. |
|
|
|
|
|
|
|
We are planning to provide such guarantees by using a WAL and |
|
|
|
replaying transactions (See |
|
|
|
`GH#248<https://github.com/tendermint/tendermint/issues/248>`__), but |
|
|
|
it's non-trivial to do this all efficiently. |
|
|
|
|
|
|
|
The temporary solution is for clients to monitor the node and resubmit |
|
|
|
transaction(s) or/and send them to more nodes at once, so the |
|
|
|
probability of all of them crashing at the same time and losing the |
|
|
|
msg decreases substantially. |