docs: Revert SPEC-SPEC and update x/{auth,bank,evidence,slashing} (#7407)
* Revert some changes from #7404 * Update x/slashing * Address review comments * Small tweak Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
Federico Kunze
mergify[bot]
parent
7818867163
commit
69e2b7df16
@@ -5,7 +5,7 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
)
|
||||
|
||||
// NewAccountWithAddress implements sdk.AccountKeeper.
|
||||
// NewAccountWithAddress implements AccountKeeperI.
|
||||
func (ak AccountKeeper) NewAccountWithAddress(ctx sdk.Context, addr sdk.AccAddress) types.AccountI {
|
||||
acc := ak.proto()
|
||||
err := acc.SetAddress(addr)
|
||||
@@ -25,7 +25,7 @@ func (ak AccountKeeper) NewAccount(ctx sdk.Context, acc types.AccountI) types.Ac
|
||||
return acc
|
||||
}
|
||||
|
||||
// GetAccount implements sdk.AccountKeeper.
|
||||
// GetAccount implements AccountKeeperI.
|
||||
func (ak AccountKeeper) GetAccount(ctx sdk.Context, addr sdk.AccAddress) types.AccountI {
|
||||
store := ctx.KVStore(ak.key)
|
||||
bz := store.Get(types.AddressStoreKey(addr))
|
||||
@@ -46,7 +46,7 @@ func (ak AccountKeeper) GetAllAccounts(ctx sdk.Context) (accounts []types.Accoun
|
||||
return accounts
|
||||
}
|
||||
|
||||
// SetAccount implements sdk.AccountKeeper.
|
||||
// SetAccount implements AccountKeeperI.
|
||||
func (ak AccountKeeper) SetAccount(ctx sdk.Context, acc types.AccountI) {
|
||||
addr := acc.GetAddress()
|
||||
store := ctx.KVStore(ak.key)
|
||||
|
||||
+33
-1
@@ -14,6 +14,36 @@ import (
|
||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||
)
|
||||
|
||||
// AccountKeeperI is the interface contract that x/auth's keeper implements.
|
||||
type AccountKeeperI interface {
|
||||
// Return a new account with the next account number and the specified address. Does not save the new account to the store.
|
||||
NewAccountWithAddress(sdk.Context, sdk.AccAddress) types.AccountI
|
||||
|
||||
// Return a new account with the next account number. Does not save the new account to the store.
|
||||
NewAccount(sdk.Context, types.AccountI) types.AccountI
|
||||
|
||||
// Retrieve an account from the store.
|
||||
GetAccount(sdk.Context, sdk.AccAddress) types.AccountI
|
||||
|
||||
// Set an account in the store.
|
||||
SetAccount(sdk.Context, types.AccountI)
|
||||
|
||||
// Remove an account from the store.
|
||||
RemoveAccount(sdk.Context, types.AccountI)
|
||||
|
||||
// Iterate over all accounts, calling the provided function. Stop iteraiton when it returns false.
|
||||
IterateAccounts(sdk.Context, func(types.AccountI) bool)
|
||||
|
||||
// Fetch the public key of an account at a specified address
|
||||
GetPubKey(sdk.Context, sdk.AccAddress) (crypto.PubKey, error)
|
||||
|
||||
// Fetch the sequence of an account at a specified address.
|
||||
GetSequence(sdk.Context, sdk.AccAddress) (uint64, error)
|
||||
|
||||
// Fetch the next account number, and increment the internal counter.
|
||||
GetNextAccountNumber(sdk.Context) uint64
|
||||
}
|
||||
|
||||
// AccountKeeper encodes/decodes accounts using the go-amino (binary)
|
||||
// encoding/decoding library.
|
||||
type AccountKeeper struct {
|
||||
@@ -26,7 +56,9 @@ type AccountKeeper struct {
|
||||
proto func() types.AccountI
|
||||
}
|
||||
|
||||
// NewAccountKeeper returns a new sdk.AccountKeeper that uses go-amino to
|
||||
var _ AccountKeeperI = &AccountKeeper{}
|
||||
|
||||
// NewAccountKeeper returns a new AccountKeeperI that uses go-amino to
|
||||
// (binary) encode and decode concrete sdk.Accounts.
|
||||
func NewAccountKeeper(
|
||||
cdc codec.BinaryMarshaler, key sdk.StoreKey, paramstore paramtypes.Subspace, proto func() types.AccountI,
|
||||
|
||||
+32
-21
@@ -15,30 +15,39 @@ Accounts are exposed externally as an interface, and stored internally as
|
||||
either a base account or vesting account. Module clients wishing to add more
|
||||
account types may do so.
|
||||
|
||||
- `0x01 | Address -> amino(account)`
|
||||
- `0x01 | Address -> ProtocolBuffer(account)`
|
||||
|
||||
### Account Interface
|
||||
|
||||
The account interface exposes methods to read and write standard account information.
|
||||
Note that all of these methods operate on an account struct confirming to the interface
|
||||
- in order to write the account to the store, the account keeper will need to be used.
|
||||
Note that all of these methods operate on an account struct confirming to the
|
||||
interface - in order to write the account to the store, the account keeper will
|
||||
need to be used.
|
||||
|
||||
```go
|
||||
type Account interface {
|
||||
GetAddress() AccAddress
|
||||
SetAddress(AccAddress)
|
||||
// AccountI is an interface used to store coins at a given address within state.
|
||||
// It presumes a notion of sequence numbers for replay protection,
|
||||
// a notion of account numbers for replay protection for previously pruned accounts,
|
||||
// and a pubkey for authentication purposes.
|
||||
//
|
||||
// Many complex conditions can be used in the concrete struct which implements AccountI.
|
||||
type AccountI interface {
|
||||
proto.Message
|
||||
|
||||
GetPubKey() PubKey
|
||||
SetPubKey(PubKey)
|
||||
GetAddress() sdk.AccAddress
|
||||
SetAddress(sdk.AccAddress) error // errors if already set.
|
||||
|
||||
GetAccountNumber() uint64
|
||||
SetAccountNumber(uint64)
|
||||
GetPubKey() crypto.PubKey // can return nil.
|
||||
SetPubKey(crypto.PubKey) error
|
||||
|
||||
GetSequence() uint64
|
||||
SetSequence(uint64)
|
||||
GetAccountNumber() uint64
|
||||
SetAccountNumber(uint64) error
|
||||
|
||||
GetCoins() Coins
|
||||
SetCoins(Coins)
|
||||
GetSequence() uint64
|
||||
SetSequence(uint64) error
|
||||
|
||||
// Ensure that account implements stringer
|
||||
String() string
|
||||
}
|
||||
```
|
||||
|
||||
@@ -47,13 +56,15 @@ type Account interface {
|
||||
A base account is the simplest and most common account type, which just stores all requisite
|
||||
fields directly in a struct.
|
||||
|
||||
```go
|
||||
type BaseAccount struct {
|
||||
Address AccAddress
|
||||
Coins Coins
|
||||
PubKey PubKey
|
||||
AccountNumber uint64
|
||||
Sequence uint64
|
||||
```protobuf
|
||||
// BaseAccount defines a base account type. It contains all the necessary fields
|
||||
// for basic account functionality. Any custom account type should extend this
|
||||
// type for additional functionality (e.g. vesting).
|
||||
message BaseAccount {
|
||||
string address = 1;
|
||||
google.protobuf.Any pub_key = 2;
|
||||
uint64 account_number = 3;
|
||||
uint64 sequence = 4;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -2,16 +2,14 @@
|
||||
order: 3
|
||||
-->
|
||||
|
||||
# Messages
|
||||
|
||||
TODO make this file conform to typical messages spec
|
||||
# AnthHandlers
|
||||
|
||||
## Handlers
|
||||
|
||||
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
|
||||
`CheckTx`, but _also_ on `DeliverTx`, as Tendermint proposers presently have the ability
|
||||
to include in their proposed block transactions which fail `CheckTx`.
|
||||
|
||||
### Ante Handler
|
||||
@@ -1,70 +0,0 @@
|
||||
<!--
|
||||
order: 4
|
||||
-->
|
||||
|
||||
# Types
|
||||
|
||||
Besides accounts (specified in [State](02_state.md)), the types exposed by the auth module
|
||||
are `StdFee`, the combination of an amount and gas limit, `StdSignature`, the combination
|
||||
of an optional public key and a cryptographic signature as a byte array, `StdTx`,
|
||||
a struct which implements the `sdk.Tx` interface using `StdFee` and `StdSignature`, and
|
||||
`StdSignDoc`, a replay-prevention structure for `StdTx` which transaction senders must sign over.
|
||||
|
||||
## StdFee
|
||||
|
||||
A `StdFee` is simply the combination of a fee amount, in any number of denominations,
|
||||
and a gas limit (where dividing the amount by the gas limit gives a "gas price").
|
||||
|
||||
```go
|
||||
type StdFee struct {
|
||||
Amount Coins
|
||||
Gas uint64
|
||||
}
|
||||
```
|
||||
|
||||
## StdSignature
|
||||
|
||||
A `StdSignature` is the combination of an optional public key and a cryptographic signature
|
||||
as a byte array. The SDK is agnostic to particular key or signature formats and supports any
|
||||
supported by the `PubKey` interface.
|
||||
|
||||
```go
|
||||
type StdSignature struct {
|
||||
PubKey PubKey
|
||||
Signature []byte
|
||||
}
|
||||
```
|
||||
|
||||
## StdTx
|
||||
|
||||
A `StdTx` is a struct which implements the `sdk.Tx` interface, and is likely to be generic
|
||||
enough to serve the purposes of many Cosmos SDK blockchains.
|
||||
|
||||
```go
|
||||
type StdTx struct {
|
||||
Msgs []sdk.Msg
|
||||
Fee StdFee
|
||||
Signatures []StdSignature
|
||||
Memo string
|
||||
}
|
||||
```
|
||||
|
||||
## StdSignDoc
|
||||
|
||||
A `StdSignDoc` is a replay-prevention structure to be signed over, which ensures that
|
||||
any submitted transaction (which is simply a signature over a particular bytestring)
|
||||
will only be executable once on a particular blockchain.
|
||||
|
||||
`json.RawMessage` is preferred over using the SDK types for future compatibility.
|
||||
|
||||
```go
|
||||
type StdSignMsg struct {
|
||||
ChainID string
|
||||
AccountNumber uint64
|
||||
Sequence uint64
|
||||
TimeoutHeight uint64
|
||||
Fee StdFee
|
||||
Msgs []sdk.Msg
|
||||
Memo string
|
||||
}
|
||||
```
|
||||
+20
-19
@@ -12,32 +12,33 @@ Presently only one fully-permissioned account keeper is exposed, which has the a
|
||||
all fields of all accounts, and to iterate over all stored accounts.
|
||||
|
||||
```go
|
||||
type AccountKeeper interface {
|
||||
// Return a new account with the next account number and the specified address. Does not save the new account to the store.
|
||||
NewAccountWithAddress(AccAddress) Account
|
||||
// AccountKeeperI is the interface contract that x/auth's keeper implements.
|
||||
type AccountKeeperI interface {
|
||||
// Return a new account with the next account number and the specified address. Does not save the new account to the store.
|
||||
NewAccountWithAddress(sdk.Context, sdk.AccAddress) types.AccountI
|
||||
|
||||
// Return a new account with the next account number. Does not save the new account to the store.
|
||||
NewAccount(Account) Account
|
||||
// Return a new account with the next account number. Does not save the new account to the store.
|
||||
NewAccount(sdk.Context, types.AccountI) types.AccountI
|
||||
|
||||
// Retrieve an account from the store
|
||||
GetAccount(AccAddress) Account
|
||||
// Retrieve an account from the store.
|
||||
GetAccount(sdk.Context, sdk.AccAddress) types.AccountI
|
||||
|
||||
// Set an account in the store
|
||||
SetAccount(Account)
|
||||
// Set an account in the store.
|
||||
SetAccount(sdk.Context, types.AccountI)
|
||||
|
||||
// Remove an account from the store
|
||||
RemoveAccount(Account)
|
||||
// Remove an account from the store.
|
||||
RemoveAccount(sdk.Context, types.AccountI)
|
||||
|
||||
// Iterate over all accounts, calling the provided function. Stop iteraiton when it returns false.
|
||||
IterateAccounts(func(Account) (bool))
|
||||
// Iterate over all accounts, calling the provided function. Stop iteraiton when it returns false.
|
||||
IterateAccounts(sdk.Context, func(types.AccountI) bool)
|
||||
|
||||
// Fetch the public key of an account at a specified address
|
||||
GetPubKey(AccAddress) PubKey
|
||||
// Fetch the public key of an account at a specified address
|
||||
GetPubKey(sdk.Context, sdk.AccAddress) (crypto.PubKey, error)
|
||||
|
||||
// Fetch the sequence of an account at a specified address
|
||||
GetSequence(AccAddress) uint64
|
||||
// Fetch the sequence of an account at a specified address.
|
||||
GetSequence(sdk.Context, sdk.AccAddress) (uint64, error)
|
||||
|
||||
// Fetch the next account number, and increment the internal counter
|
||||
GetNextAccountNumber() uint64
|
||||
// Fetch the next account number, and increment the internal counter.
|
||||
GetNextAccountNumber(sdk.Context) uint64
|
||||
}
|
||||
```
|
||||
|
||||
@@ -7,7 +7,7 @@ order: 7
|
||||
The auth module contains the following parameters:
|
||||
|
||||
| Key | Type | Example |
|
||||
|------------------------|-----------------|---------|
|
||||
| ---------------------- | --------------- | ------- |
|
||||
| MaxMemoCharacters | string (uint64) | "256" |
|
||||
| TxSigLimit | string (uint64) | "7" |
|
||||
| TxSizeCostPerByte | string (uint64) | "10" |
|
||||
|
||||
+15
-20
@@ -21,24 +21,19 @@ This module will be used in the Cosmos Hub.
|
||||
## Contents
|
||||
|
||||
1. **[Concepts](01_concepts.md)**
|
||||
- [Gas & Fees](01_concepts.md#gas-&-fees)
|
||||
- [Gas & Fees](01_concepts.md#gas-&-fees)
|
||||
2. **[State](02_state.md)**
|
||||
- [Accounts](02_state.md#accounts)
|
||||
3. **[Messages](03_messages.md)**
|
||||
- [Handlers](03_messages.md#handlers)
|
||||
4. **[Types](03_types.md)**
|
||||
- [StdFee](03_types.md#stdfee)
|
||||
- [StdSignature](03_types.md#stdsignature)
|
||||
- [StdTx](03_types.md#stdtx)
|
||||
- [StdSignDoc](03_types.md#stdsigndoc)
|
||||
5. **[Keepers](04_keepers.md)**
|
||||
- [Account Keeper](04_keepers.md#account-keeper)
|
||||
6. **[Vesting](05_vesting.md)**
|
||||
- [Intro and Requirements](05_vesting.md#intro-and-requirements)
|
||||
- [Vesting Account Types](05_vesting.md#vesting-account-types)
|
||||
- [Vesting Account Specification](05_vesting.md#vesting-account-specification)
|
||||
- [Keepers & Handlers](05_vesting.md#keepers-&-handlers)
|
||||
- [Genesis Initialization](05_vesting.md#genesis-initialization)
|
||||
- [Examples](05_vesting.md#examples)
|
||||
- [Glossary](05_vesting.md#glossary)
|
||||
7. **[Parameters](07_params.md)**
|
||||
- [Accounts](02_state.md#accounts)
|
||||
3. **[AnteHandlers](03_antehandlers.md)**
|
||||
- [Handlers](03_antehandlers.md#handlers)
|
||||
4. **[Keepers](04_keepers.md)**
|
||||
- [Account Keeper](04_keepers.md#account-keeper)
|
||||
5. **[Vesting](05_vesting.md)**
|
||||
- [Intro and Requirements](05_vesting.md#intro-and-requirements)
|
||||
- [Vesting Account Types](05_vesting.md#vesting-account-types)
|
||||
- [Vesting Account Specification](05_vesting.md#vesting-account-specification)
|
||||
- [Keepers & Handlers](05_vesting.md#keepers-&-handlers)
|
||||
- [Genesis Initialization](05_vesting.md#genesis-initialization)
|
||||
- [Examples](05_vesting.md#examples)
|
||||
- [Glossary](05_vesting.md#glossary)
|
||||
6. **[Parameters](07_params.md)**
|
||||
|
||||
Reference in New Issue
Block a user