Skip to content

v0.38.0

Compare
Choose a tag to compare
@alexanderbez alexanderbez released this 23 Jan 18:50

Release Notes

State Machine Breaking

  • (genesis) #5506 The x/distribution genesis state
    now includes params instead of individual parameters.
  • (genesis) #5017 The x/genaccounts module has been
    deprecated and all components removed except the legacy/ package. This requires changes to the
    genesis state. Namely, accounts now exist under app_state.auth.accounts. The corresponding migration
    logic has been implemented for v0.38 target version. Applications can migrate via:
    $ {appd} migrate v0.38 genesis.json.
  • (modules) #5299 Handling of ABCIEvidenceTypeDuplicateVote
    during BeginBlock along with the corresponding parameters (MaxEvidenceAge) have moved from the
    x/slashing module to the x/evidence module.

API Breaking Changes

  • (modules) #5506 Remove individual setters of x/distribution parameters. Instead, follow the module spec in getting parameters, setting new value(s) and finally calling SetParams.
  • (types) #5495 Remove redundant (Must)Bech32ify* and (Must)Get*KeyBech32 functions in favor of (Must)Bech32ifyPubKey and (Must)GetPubKeyFromBech32 respectively, both of which take a Bech32PubKeyType (string).
  • (types) #5430 DecCoins#Add parameter changed from DecCoins
    to ...DecCoin, Coins#Add parameter changed from Coins to ...Coin.
  • (baseapp/types) #5421 The Error interface (types/errors.go)
    has been removed in favor of the concrete type defined in types/errors/ which implements the standard error interface.
    • As a result, the Handler and Querier implementations now return a standard error.
      Within BaseApp, runTx now returns a (GasInfo, *Result, error) tuple and runMsgs returns a
      (*Result, error) tuple. A reference to a Result is now used to indicate success whereas an error
      signals an invalid message or failed message execution. As a result, the fields Code, Codespace,
      GasWanted, and GasUsed have been removed the Result type. The latter two fields are now found
      in the GasInfo type which is always returned regardless of execution outcome.
    • Note to developers: Since all handlers and queriers must now return a standard error, the types/errors/
      package contains all the relevant and pre-registered errors that you typically work with. A typical
      error returned will look like sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "..."). You can retrieve
      relevant ABCI information from the error via ABCIInfo.
  • (client) #5442 Remove client/alias.go as it's not necessary and
    components can be imported directly from the packages.
  • (store) #4748 The CommitMultiStore interface
    now requires a SetInterBlockCache method. Applications that do not wish to support this can simply
    have this method perform a no-op.
  • (modules) #4665 Refactored x/gov module structure and dev-UX:
    • Prepare for module spec integration
    • Update gov keys to use big endian encoding instead of little endian
  • (modules) #5017 The x/genaccounts module has been deprecated and all components removed except the legacy/ package.
  • #4486 Vesting account types decoupled from the x/auth module and now live under x/auth/vesting. Applications wishing to use vesting account types must be sure to register types via RegisterCodec under the new vesting package.
  • #4486 The NewBaseVestingAccount constructor returns an error
    if the provided arguments are invalid.
  • (x/auth) #5006 Modular AnteHandler via composable decorators:
    • The AnteHandler interface now returns (newCtx Context, err error) instead of (newCtx Context, result sdk.Result, abort bool)
    • The NewAnteHandler function returns an AnteHandler function that returns the new AnteHandler
      interface and has been moved into the auth/ante directory.
    • ValidateSigCount, ValidateMemo, ProcessPubKey, EnsureSufficientMempoolFee, and GetSignBytes
      have all been removed as public functions.
    • Invalid Signatures may return InvalidPubKey instead of Unauthorized error, since the transaction
      will first hit SetPubKeyDecorator before the SigVerificationDecorator runs.
    • StdTx#GetSignatures will return an array of just signature byte slices [][]byte instead of
      returning an array of StdSignature structs. To replicate the old behavior, use the public field
      StdTx.Signatures to get back the array of StdSignatures []StdSignature.
  • (modules) #5299 HandleDoubleSign along with params MaxEvidenceAge and DoubleSignJailEndTime have moved from the x/slashing module to the x/evidence module.
  • (keys) #4941 Keybase concrete types constructors such as NewKeyBaseFromDir and NewInMemory now accept optional parameters of type KeybaseOption. These
    optional parameters are also added on the keys sub-commands functions, which are now public, and allows
    these options to be set on the commands or ignored to default to previous behavior.
  • #5547 NewKeyBaseFromHomeFlag constructor has been removed.
  • #5439 Further modularization was done to the keybase
    package to make it more suitable for use with different key formats and algorithms:
    • The WithKeygenFunc function added as a KeybaseOption which allows a custom bytes to key
      implementation to be defined when keys are created.
    • The WithDeriveFunc function added as a KeybaseOption allows custom logic for deriving a key
      from a mnemonic, bip39 password, and HD Path.
    • BIP44 is no longer build into keybase.CreateAccount(). It is however the default when using
      the client/keys add command.
    • SupportedAlgos and SupportedAlgosLedger functions return a slice of SigningAlgos that are
      supported by the keybase and the ledger integration respectively.
  • (simapp) #5419 The helpers.GenTx() now accepts a gas argument.
  • (baseapp) #5455 A sdk.Context is now passed into the router.Route() function.

Client Breaking Changes

  • (rest) #5270 All account types now implement custom JSON serialization.
  • (rest) #4783 The balance field in the DelegationResponse type is now sdk.Coin instead of sdk.Int
  • (x/auth) #5006 The gas required to pass the AnteHandler has
    increased significantly due to modular AnteHandler support. Increase GasLimit accordingly.
  • (rest) #5336 MsgEditValidator uses description instead of Description as a JSON key.
  • (keys) #5097 Due to the keybase -> keyring transition, keys need to be migrated. See keys migrate command for more info.
  • (x/auth) #5424 Drop decode-tx command from x/auth/client/cli, duplicate of the decode command.

Features

  • (store) #5435 New iterator for paginated requests. Iterator limits DB reads to the range of the requested page.
  • (x/evidence) #5240 Initial implementation of the x/evidence module.
  • (cli) #5212 The q gov proposals command now supports pagination.
  • (store) #4724 Multistore supports substore migrations upon load. New rootmulti.Store.LoadLatestVersionAndUpgrade method in
    Baseapp supports StoreLoader to enable various upgrade strategies. It no
    longer panics if the store to load contains substores that we didn't explicitly mount.
  • #4972 A TxResponse with a corresponding code
    and tx hash will be returned for specific Tendermint errors:
    • CodeTxInMempoolCache
    • CodeMempoolIsFull
    • CodeTxTooLarge
  • #3872 Implement a RESTful endpoint and cli command to decode transactions.
  • (keys) #4754 Introduce new Keybase implementation that can
    leverage operating systems' built-in functionalities to securely store secrets. MacOS users may encounter
    the following issue with the go-keychain library. If
    you encounter this issue, you must upgrade your xcode command line tools to version >= 10.2. You can
    upgrade via: sudo rm -rf /Library/Developer/CommandLineTools; xcode-select --install. Verify the
    correct version via: pkgutil --pkg-info=com.apple.pkg.CLTools_Executables.
  • #5355 Client commands accept a new --keyring-backend option through which users can specify which backend should be used
    by the new key store:
    • os: use OS default credentials storage (default).
    • file: use encrypted file-based store.
    • kwallet: use KDE Wallet service.
    • pass: use the pass command line password manager.
    • test: use password-less key store. For testing purposes only. Use it at your own risk.
  • (keys) #5097 New keys migrate command to assist users migrate their keys
    to the new keyring.
  • (keys) #5366 keys list now accepts a --list-names option to list key names only, whilst the keys delete
    command can delete multiple keys by passing their names as arguments. The aforementioned commands can then be piped together, e.g.
    appcli keys list -n | xargs appcli keys delete
  • (modules) #4233 Add upgrade module that coordinates software upgrades of live chains.
  • #4486 Introduce new PeriodicVestingAccount vesting account type
    that allows for arbitrary vesting periods.
  • (baseapp) #5196 Baseapp has a new runTxModeReCheck to allow applications to skip expensive and unnecessary re-checking of transactions.
  • (types) #5196 Context has new IsRecheckTx() bool and WithIsReCheckTx(bool) Context methods to to be used in the AnteHandler.
  • (x/auth/ante) #5196 AnteDecorators have been updated to avoid unnecessary checks when ctx.IsReCheckTx() == true
  • (x/auth) #5006 Modular AnteHandler via composable decorators:
    • The AnteDecorator interface has been introduced to allow users to implement modular AnteHandler
      functionality that can be composed together to create a single AnteHandler rather than implementing
      a custom AnteHandler completely from scratch, where each AnteDecorator allows for custom behavior in
      tightly defined and logically isolated manner. These custom AnteDecorator can then be chained together
      with default AnteDecorator or third-party AnteDecorator to create a modularized AnteHandler
      which will run each AnteDecorator in the order specified in ChainAnteDecorators. For details
      on the new architecture, refer to the ADR.
    • ChainAnteDecorators function has been introduced to take in a list of AnteDecorators and chain
      them in sequence and return a single AnteHandler:
      • SetUpContextDecorator: Sets GasMeter in context and creates defer clause to recover from any
        OutOfGas panics in future AnteDecorators and return OutOfGas error to BaseApp. It MUST be the
        first AnteDecorator in the chain for any application that uses gas (or another one that sets the gas meter).
      • ValidateBasicDecorator: Calls tx.ValidateBasic and returns any non-nil error.
      • 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.
      • MempoolFeeDecorator: Checks if fee is above local mempool minFee parameter during CheckTx.
      • DeductFeeDecorator: Deducts the FeeAmount from first signer of the transaction.
      • SetPubKeyDecorator: Sets pubkey of account in any account that does not already have pubkey saved in state machine.
      • SigGasConsumeDecorator: Consume parameter-defined amount of gas for each signature.
      • SigVerificationDecorator: Verify each signature is valid, return if there is an error.
      • ValidateSigCountDecorator: Validate the number of signatures in tx based on app-parameters.
      • IncrementSequenceDecorator: Increments the account sequence for each signer to prevent replay attacks.
  • (cli) #5223 Cosmos Ledger App v2.0.0 is now supported. The changes are backwards compatible and App v1.5.x is still supported.
  • (x/staking) #5380 Introduced ability to store historical info entries in staking keeper, allows applications to introspect specified number of past headers and validator sets
    • Introduces new parameter HistoricalEntries which allows applications to determine how many recent historical info entries they want to persist in store. Default value is 0.
    • Introduces cli commands and rest routes to query historical information at a given height
  • (modules) #5249 Funds are now allowed to be directly sent to the community pool (via the distribution module account).
  • (keys) #4941 Introduce keybase option to allow overriding the default private key implementation of a key generated through the keys add cli command.
  • (keys) #5439 Flags --algo and --hd-path are added to
    keys add command in order to make use of keybase modularized. By default, it uses (0, 0) bip44
    HD path and secp256k1 keys, so is non-breaking.
  • (types) #5447 Added ApproxRoot function to sdk.Decimal type in order to get the nth root for a decimal number, where n is a positive integer.
    • An ApproxSqrt function was also added for convenience around the common case of n=2.

Improvements

  • (iavl) #5538 Remove manual IAVL pruning in favor of IAVL's internal pruning strategy.
  • (server) #4215 The --pruning flag
    has been moved to the configuration file, to allow easier node configuration.
  • (cli) #5116 The CLIContext now supports multiple verifiers
    when connecting to multiple chains. The connecting chain's CLIContext will have to have the correct
    chain ID and node URI or client set. To use a CLIContext with a verifier for another chain:
    // main or parent chain (chain as if you're running without IBC)
    mainCtx := context.NewCLIContext()
    
    // connecting IBC chain
    sideCtx := context.NewCLIContext().
      WithChainID(sideChainID).
      WithNodeURI(sideChainNodeURI) // or .WithClient(...)
    
    sideCtx = sideCtx.WithVerifier(
      context.CreateVerifier(sideCtx, context.DefaultVerifierCacheSize),
    )
  • (modules) #5017 The x/auth package now supports
    generalized genesis accounts through the GenesisAccount interface.
  • (modules) #4762 Deprecate remove and add permissions in ModuleAccount.
  • (modules) #4760 update x/auth to match module spec.
  • (modules) #4814 Add security contact to Validator description.
  • (modules) #4875 refactor integration tests to use SimApp and separate test package
  • (sdk) #4566 Export simulation's parameters and app state to JSON in order to reproduce bugs and invariants.
  • (sdk) #4640 improve import/export simulation errors by extending DiffKVStores to return an array of KVPairs that are then compared to check for inconsistencies.
  • (sdk) #4717 refactor x/slashing to match the new module spec
  • (sdk) #4758 update x/genaccounts to match module spec
  • (simulation) #4824 PrintAllInvariants flag will print all failed invariants
  • (simulation) #4490 add InitialBlockHeight flag to resume a simulation from a given block
    • Support exporting the simulation stats to a given JSON file
  • (simulation) #4847, #4838 and #4869 SimApp and simulation refactors:
    • Implement SimulationManager for executing modules' simulation functionalities in a modularized way
    • Add RegisterStoreDecoders to the SimulationManager for decoding each module's types
    • Add GenerateGenesisStates to the SimulationManager to generate a randomized GenState for each module
    • Add RandomizedParams to the SimulationManager that registers each modules' parameters in order to
      simulate ParamChangeProposals' Contents
    • Add WeightedOperations to the SimulationManager that define simulation operations (modules' Msgs) with their
      respective weights (i.e chance of being simulated).
    • Add ProposalContents to the SimulationManager to register each module's governance proposal Contents.
  • (simulation) #4893 Change SimApp keepers to be public and add getter functions for keys and codec
  • (simulation) #4906 Add simulation Config struct that wraps simulation flags
  • (simulation) #4935 Update simulation to reflect a proper ABCI application without bypassing BaseApp semantics
  • (simulation) #5378 Simulation tests refactor:
    • Add App interface for general SDK-based app's methods.
    • Refactor and cleanup simulation tests into util functions to simplify their implementation for other SDK apps.
  • (store) #4792 panic on non-registered store
  • (types) #4821 types/errors package added with support for stacktraces. It is meant as a more feature-rich replacement for sdk.Errors in the mid-term.
  • (store) #1947 Implement inter-block (persistent)
    caching through CommitKVStoreCacheManager. Any application wishing to utilize an inter-block cache
    must set it in their app via a BaseApp option. The BaseApp docs have been drastically improved
    to detail this new feature and how state transitions occur.
  • (docs/spec) All module specs moved into their respective module dir in x/ (i.e. docs/spec/staking -->> x/staking/spec)
  • (docs/) #5379 Major documentation refactor, including:
    • (docs/intro/) Add and improve introduction material for newcomers.
    • (docs/basics/) Add documentation about basic concepts of the cosmos sdk such as the anatomy of an SDK application, the transaction lifecycle or accounts.
    • (docs/core/) Add documentation about core conepts of the cosmos sdk such as baseapp, server, stores, context and more.
    • (docs/building-modules/) Add reference documentation on concepts relevant for module developers (keeper, handler, messages, queries,...).
    • (docs/interfaces/) Add documentation on building interfaces for the Cosmos SDK.
    • Redesigned user interface that features new dynamically generated sidebar, build-time code embedding from GitHub, new homepage as well as many other improvements.
  • (types) #5428 Add Mod (modulo) method and RelativePow (exponentation) function for Uint.
  • (modules) #5506 Remove redundancy in x/distributions use of parameters. There
    now exists a single Params type with a getter and setter along with a getter for each individual parameter.

Bug Fixes

  • (rest) #5508 Fix x/distribution endpoints to properly return height in the response.
  • (x/genutil) #5499 Ensure DefaultGenesis returns valid and non-nil default genesis state.
  • (client) #5303 Fix ignored error in tx generate only mode.
  • (cli) #4763 Fix flag --min-self-delegation for staking EditValidator
  • (keys) Fix ledger custom coin type support bug.
  • (x/gov) #5107 Sum validator operator's all voting power when tally votes
  • (rest) #5212 Fix pagination in the /gov/proposals handler.