Update x/auth AnteHandler Spec (#9298)
* Update auth antehandler spec * Update x/auth/spec/03_antehandlers.md Co-authored-by: Ryan Christoffersen <12519942+ryanchrypto@users.noreply.github.com> * Update x/auth/spec/03_antehandlers.md Co-authored-by: Ryan Christoffersen <12519942+ryanchrypto@users.noreply.github.com> * Update x/auth/spec/03_antehandlers.md Co-authored-by: Ryan Christoffersen <12519942+ryanchrypto@users.noreply.github.com> * Use 1 line * Use backticks * Use consistent tx naming * Fix grammar * Update module naming * Update x/auth/spec/03_antehandlers.md Co-authored-by: Tyler <48813565+technicallyty@users.noreply.github.com> Co-authored-by: Tyler <48813565+technicallyty@users.noreply.github.com> Co-authored-by: Ryan Christoffersen <12519942+ryanchrypto@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
parent
213c46bb17
commit
b4125d1f0c
|
@ -4,41 +4,37 @@ order: 3
|
|||
|
||||
# AnteHandlers
|
||||
|
||||
## Handlers
|
||||
The `x/auth` module presently has no transaction handlers of its own, but does expose the special `AnteHandler`, used for performing basic validity checks on a transaction, such that it could be thrown out of the mempool.
|
||||
The `AnteHandler` can be seen as a set of decorators that check transactions within the current context, per [ADR 010](https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-alpha1/docs/architecture/adr-010-modular-antehandler.md).
|
||||
|
||||
The auth module presently has no transaction handlers of its own, but does expose
|
||||
the special `AnteHandler`, used for performing basic validity checks on a transaction,
|
||||
such that it could be thrown out of the mempool. Note that the ante handler is called on
|
||||
`CheckTx`, but _also_ on `DeliverTx`, as Tendermint proposers presently have the ability
|
||||
to include in their proposed block transactions which fail `CheckTx`.
|
||||
Note that the `AnteHandler` is called on both `CheckTx` and `DeliverTx`, as Tendermint proposers presently have the ability to include in their proposed block transactions which fail `CheckTx`.
|
||||
|
||||
### Ante Handler
|
||||
## Decorators
|
||||
|
||||
```go
|
||||
anteHandler(ak AccountKeeper, fck FeeCollectionKeeper, tx sdk.Tx)
|
||||
if !tx.(StdTx)
|
||||
fail with "not a StdTx"
|
||||
The auth module provides `AnteDecorator`s that are recursively chained together into a single `AnteHandler` in the following order:
|
||||
|
||||
if isCheckTx and tx.Fee < config.SubjectiveMinimumFee
|
||||
fail with "insufficient fee for mempool inclusion"
|
||||
- `SetUpContextDecorator`: Sets the `GasMeter` in the `Context` and wraps the next `AnteHandler` with a defer clause to recover from any downstream `OutOfGas` panics in the `AnteHandler` chain to return an error with information on gas provided and gas used.
|
||||
|
||||
if tx.ValidateBasic() != nil
|
||||
fail with "tx failed ValidateBasic"
|
||||
- `RejectExtensionOptionsDecorator`: Rejects all extension options which can optionally be included in protobuf transactions.
|
||||
|
||||
if tx.Fee > 0
|
||||
account = GetAccount(tx.GetSigners()[0])
|
||||
coins := acount.GetCoins()
|
||||
if coins < tx.Fee
|
||||
fail with "insufficient fee to pay for transaction"
|
||||
account.SetCoins(coins - tx.Fee)
|
||||
fck.AddCollectedFees(tx.Fee)
|
||||
- `MempoolFeeDecorator`: Checks if the `tx` fee is above local mempool `minFee` parameter during `CheckTx`.
|
||||
|
||||
for index, signature in tx.GetSignatures()
|
||||
account = GetAccount(tx.GetSigners()[index])
|
||||
bytesToSign := StdSignBytes(chainID, acc.GetAccountNumber(),
|
||||
acc.GetSequence(), tx.Fee, tx.Msgs, tx.Memo)
|
||||
if !signature.Verify(bytesToSign)
|
||||
fail with "invalid signature"
|
||||
- `ValidateBasicDecorator`: Calls `tx.ValidateBasic` and returns any non-nil error.
|
||||
|
||||
return
|
||||
```
|
||||
- `TxTimeoutHeightDecorator`: Check for a `tx` height timeout.
|
||||
|
||||
- `ValidateMemoDecorator`: Validates `tx` memo with application parameters and returns any non-nil error.
|
||||
|
||||
- `ConsumeGasTxSizeDecorator`: Consumes gas proportional to the `tx` size based on application parameters.
|
||||
|
||||
- `DeductFeeDecorator`: Deducts the `FeeAmount` from first signer of the `tx`. If the `x/feegrant` module is enabled and a fee granter is set, it will deduct fees from the fee granter account.
|
||||
|
||||
- `SetPubKeyDecorator`: Sets the pubkey from a `tx`'s signers that does not already have its corresponding pubkey saved in the state machine and in the current context.
|
||||
|
||||
- `ValidateSigCountDecorator`: Validates the number of signatures in `tx` based on app-parameters.
|
||||
|
||||
- `SigGasConsumeDecorator`: Consumes parameter-defined amount of gas for each signature. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`.
|
||||
|
||||
- `SigVerificationDecorator`: Verifies all signatures are valid. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`.
|
||||
|
||||
- `IncrementSequenceDecorator`: Increments the account sequence for each signer to prevent replay attacks.
|
||||
|
|
Loading…
Reference in New Issue