Co-authored-by: Marko <marko@baricevic.me>
This commit is contained in:
Vendored
+50
@@ -0,0 +1,50 @@
|
||||
# CheckTx
|
||||
|
||||
CheckTx is called by the `BaseApp` when comet receives a transaction from a client, over the p2p network or RPC. The CheckTx method is responsible for validating the transaction and returning an error if the transaction is invalid.
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph SDK[Cosmos SDK]
|
||||
B[Baseapp]
|
||||
A[AnteHandlers]
|
||||
B <-->|Validate TX| A
|
||||
end
|
||||
C[CometBFT] <-->|CheckTx|SDK
|
||||
U((User)) -->|Submit TX| C
|
||||
N[P2P] -->|Receive TX| C
|
||||
```
|
||||
|
||||
```go reference
|
||||
https://github.com/cosmos/cosmos-sdk/blob/31c604762a434c7b676b6a89897ecbd7c4653a23/baseapp/abci.go#L350-L390
|
||||
```
|
||||
|
||||
## CheckTx Handler
|
||||
|
||||
`CheckTxHandler` allows users to extend the logic of `CheckTx`. `CheckTxHandler` is called by pasding context and the transaction bytes received through ABCI. It is required that the handler returns deterministic results given the same transaction bytes.
|
||||
|
||||
:::note
|
||||
we return the raw decoded transaction here to avoid decoding it twice.
|
||||
:::
|
||||
|
||||
```go
|
||||
type CheckTxHandler func(ctx sdk.Context, tx []byte) (Tx, error)
|
||||
```
|
||||
|
||||
Setting a custom `CheckTxHandler` is optional. It can be done from your app.go file:
|
||||
|
||||
```go
|
||||
func NewSimApp(
|
||||
logger log.Logger,
|
||||
db corestore.KVStoreWithBatch,
|
||||
traceStore io.Writer,
|
||||
loadLatest bool,
|
||||
appOpts servertypes.AppOptions,
|
||||
baseAppOptions ...func(*baseapp.BaseApp),
|
||||
) *SimApp {
|
||||
...
|
||||
// Create ChecktxHandler
|
||||
checktxHandler := abci.NewCustomCheckTxHandler(...)
|
||||
app.SetCheckTxHandler(checktxHandler)
|
||||
...
|
||||
}
|
||||
```
|
||||
+1
-1
@@ -22,7 +22,7 @@ Notably it introduces the `PrepareProposal` and `ProcessProposal` steps of ABCI+
|
||||
|
||||
## Mempool
|
||||
|
||||
+ Before we delve into `PrepareProposal` and `ProcessProposal`, let's first walk through the mempool concepts.
|
||||
* Before we delve into `PrepareProposal` and `ProcessProposal`, let's first walk through the mempool concepts.
|
||||
|
||||
There are countless designs that an application developer can write for a mempool, the SDK opted to provide only simple mempool implementations.
|
||||
Namely, the SDK provides the following mempools:
|
||||
|
||||
Reference in New Issue
Block a user