Releases: cosmos/cosmos-sdk
v0.40.0
Cosmos SDK v0.40.0 "Stargate"
This release introduces several new important updates to the Cosmos SDK. The release notes below provide an overview of
the larger high-level changes introduced in the v0.40 (aka Stargate) release series.
That being said, this release does contain many more minor and module-level changes besides those mentioned below. For a
comprehsive list of all breaking changes and improvements since the v0.39 release series, please see the
changelog.
Protocol Buffer Migration
Stargate introduces protocol buffers as the new standard serialization
format for blockchain state & wire communication within the Cosmos SDK. Protobuf definitions are organized into packages
that mirror Cosmos SDK modules in the new ./proto directory
of the SDK repo.
For an overview of the SDK's usage of protocol buffers, please look at the following ADRs and meta-issues which tracked
the corresponding work:
- ADR019 Protobuf State Encoding / Full Proto Encoding (#5444)
- ADR020 Protobuf Transaction Encoding / Proto Any Tx Migration (#6213)
- ADR021 Protobuf Query Encoding / Query Protobuf Migration (#5921)
- ARD031 Protobuf Msg Services
- ADR023 Protobuf Naming Conventions
- ADR027 Deterministic Protobuf Serialization
As a high level summary these represent the following major changes to the SDK:
- New protocol buffer based encoding for all blockchain state (direct queries to tendermint now return protobuf binary
encoded data, as opposed to Amino encoded data) - New transaction signing path implemented according to ADR020 above
- Two new querier APIs (see #5921 for details)
- Support for new gRPC based querier services
- gRPC Gateway for REST querying corresponding to the new gRPC querier services
For details on how to upgrade Cosmos SDK based apps and modules to Stargate, please see
App and Modules Migration in the Cosmos SDK docs.
Note: Existing Amino REST endpoints are all preserved, though they are planned to be deprecated in a future release.
Inter Blockchain Communication (IBC)
The x/ibc module is now available and ready for use. High level IBC documentation is available at docs.cosmos.network. For more details check the the module documentation in the x/ibc/core/spec directory, or the ICS specs below:
- ICS 002 - Client Semantics subpackage
- ICS 003 - Connection Semantics subpackage
- ICS 004 - Channel and Packet Semantics subpackage
- ICS 005 - Port Allocation subpackage
- ICS 006 - Solo Machine Client subpackage
- ICS 007 - Tendermint Client subpackage
- ICS 009 - Loopback Client subpackage
- ICS 020 - Fungible Token Transfer subpackage
- ICS 023 - Vector Commitments subpackage
- ICS 024 - Host State Machine Requirements subpackage
Single application binary #6571
Cosmos SDK now compiles to a single application binary, as opposed to seperate binaries for running a node and one for
the CLI & REST server.
We've now included a barebones application simapp / simd for testing and demonstrating how an SDK application should
be constructed.
Details of the CLI refactor can be found here.
Test Network Testing Framework #6489
Introduction of the testutil package. This package allows the creation of an entirely in-process testing cluster with
fully operational Tendermint nodes constructed with SimApp. Each node has an RPC & API exposed. In addition, the network
exposes a Local client that can be used to directly interface with Tendermint's RPC. The test network is entirely
configurable.
Tendermint 0.34.1 #6365
Update to the latest version of tendermint which adds support for the following (in addition many other improvements):
- ABCI update to give application control over block pruning
- Support for arbitrary initial block height
- Support for State Sync
- Evidence handling for new types of evidence submitted by Tendermint from light clients
A more detailed list of Tendermint updates can be found here.
v0.40.0-rc7
Changes since v0.40.0-r6
Improvements
- (tendermint) #8281 Update tendermint to v0.34.1
Bug Fixes
- (x/gentx) #8255 Fix gentx command setting wrong amount
v0.40.0-rc6
Changes since v0.40.0-rc5:
Improvements
- (x/staking) #8178 Update default historical header number for stargate
Bug Fixes
- (x/distribution) #8240 fix setting withdraw address in x/distribution
- (x/gentx) #8183 change gentx cmd amount to arg from flag
- (x/ibc) #8165 Support IBC upgrade on same revision
- (x/ibc) #8169 fix IBC software upgrade proposals from automatically failing, add unpackinterfaces function
- (x/ibc) #8170 fix ClientUpdateProposal unpacker
- (x/ibc) #8187 fix IBC upgrade, issue with commit & halting logic
- (x/ibc) #8200 fix IBC timeout verification bug
- (rest) #8221 fix unregistered interface failure when calling GET /blocks/latest via REST API
v0.40.0-rc5
Changelog entries since v0.40.0-rc4:
Improvements
- (auth/tx) Add new auth/tx gRPC & gRPC-Gateway endpoints for basic querying & broadcasting support
- (client/keys) #8043 Add support for export of unarmored private key
- (client/tx) #7801 Update sign-batch multisig to work online
- (crypto) #7987 Fix the inconsistency of CryptoCdc, only use
codec/legacy.Cdc. - (logging) #8072 Refactor logging:
- Use zerolog over Tendermint's go-kit logging wrapper.
- Introduce Tendermint's
--log_format=plain|jsonflag. Using formatjsonallows for emitting structured JSON
logs which can be consumed by an external logging facility (e.g. Loggly). Both formats log to STDERR. - The existing
--log_levelflag and it's default value now solely relates to the global logging
level (e.g.info,debug, etc...) instead of<module>:<level>.
- (SDK) #7925 Updated dependencies
- Updated gRPC dependency to v1.33.2
- Updated iavl dependency to v0.15-rc5
- Updated tendermint dependency to v0.34.0
- (version) #7848 #7941
version --longoutput now shows the list of build dependencies and replaced build dependencies. - (x/genutil) #8099
initnow supports a--recoverflag to recover
the private validator key from a given mnemonic
Client Breaking
- (crypto) #7419 The SDK doesn't use Tendermint's
crypto.PubKey
interface anymore, and uses instead it's ownPubKeyinterface, defined incrypto/types. Replace all instances of
crypto.PubKeybycryptotypes.Pubkey. - (x/staking) #7419 The
TmConsPubKeymethod on ValidatorI has been
removed and replaced instead byConsPubKey(which returns a SDKcryptotypes.PubKey) andTmConsPublicKey(which
returns a Tendermint proto PublicKey).
State Machine Breaking Changes
- (x/staking) #7979 keeper pubkey storage serialization migration
from bech32 to protobuf.
Features
- (codec/types) #8106 Adding
NewAnyWithCustomTypeURLto correctly
marshal Messages in TxBuilder.
API Breaking
- #8080 Updated the
codec.Marshalerinterface- Moved
MarshalAnyandUnmarshalAnyhelper functions tocodec.Marshalerand renamed toMarshalInterfaceand
UnmarshalInterfacerespectively. These functions must take interface as a parameter (not a concrete type norAny
object). Underneath they useAnywrapping for correct protobuf serialization.
- Moved
- (client) #8107 Renamed
PrintOutputandPrintOutputLegacy
methods of thecontext.Clientobject toPrintProtoandPrintObjectLegacy. - (grpc/tmservice) #8060 TmService gRPC service's validator pubkey
type changed from bech32 format toAny - (x/auth/tx) #8106 change related to missing append functionality in
client transaction signing- added
overwriteSigargument tox/auth/client.SignTxandclient/tx.Signfunctions. - removed
x/auth/tx.go:wrapper.GetSignatures. ThewrapperprovidesTxBuilderfunctionality, and it's a private
structure. That function was not used at all and it's not exposed through theTxBuilderinterface.
- added
Bug Fixes
v0.37.15
v0.40.0-rc4
Updates since v0.40.0-rc3:
Bug Fixes
- (store) #8048 Fix issue where SetInitialVersion was never getting called, causing all queries to return empty on chains with non-zero initial height
v0.39.2 - The Launchpad Series
Cosmos SDK v0.39.2 Release Notes
This release fixes various bugs and brings coin's denom validation to the Cosmos SDK 0.39 release series.
See the Cosmos SDK 0.39.2 milestone on our issue tracker for details.
Allow ValidateDenom() to be customised per application
Applications can now customise types.Coin denomination validation by passing
their application-specific validation function to types.SetCoinDenomRegex().
Upgrade queries don't work after upgrade
New stores can now be registered during an on-chain upgrade. This is to
prevent blockchain state queries from stopping working after a successful upgrade.
ApproxRoot() infinite looping
The types.Dec.ApproxRoot() function has now a maximum number 100 iterations as backup boundary
condition to prevent the client's code from entering an endless loop.
Go 1.15
This is the first release of the Launchpad series that has been tested and built with go 1.15.
Tendermint's updates
Tendermint has received a few updates in the last development cycle.
The pings frequency for remote private validators and the number of GetPubKey requests
have been reduced to prevent validators from failing to sync when using remote signers.
A security vulnerability that affected the Go's encoding/binary package was reported.
Tendermint's v0.33.8 release was published with the objective to aid users in using the correct version of Go.
Please refer to this bug report for more information.
Known issues
Keyrings using the test backend that were created with applications built with Cosmos SDK v0.39.1
and go 1.15 may break with the following error after re-compiling with Cosmos SDK v0.39.2:
ERROR: aes.KeyUnwrap(): integrity check failed.
This is due to the update that the jose2go dependency
has received that made it fully compatible with go 1.15.
v0.40.0-rc3
Updates since v0.40.0-rc2:
Improvements
- (tendermint) #7828 Update tendermint dependency to v0.34.0-rc6
v0.40.0-rc2
Client Breaking
- (x/upgrade) #7697 Rename flag name "--time" to "--upgrade-time", "--info" to "--upgrade-info", to keep it consistent with help message.
API Breaking
- (x/staking/types) #7447 Remove bech32 PubKey support:
ValidatorIinterface update.GetConsPubKeyrenamed toTmConsPubKey(consensus public key must be a tendermint key).TmConsPubKey,GetConsAddrmethods return error.Validatorupdate. Methods changed inValidatorI(as described above) andToTmValidatorreturn error.Validator.ConsensusPubkeytype changed fromstringtocodectypes.Any.MsgCreateValidator.Pubkeytype changed fromstringtocodectypes.Any.
- Deprecating and renaming
MakeEncodingConfigtoMakeTestEncodingConfig(both insimappandsimapp/paramspackages). - (tx) #7688 The gRPC simulate service method has been moved from
cosmos.base.v1beta1.simulatetocosmos.tx.v1beta1, as a method in the Tx service. - #7764 Added module initialization options:
server/types.AppExporterrequires extra argument:AppOptions.server.AddCommandsrequires extra argument:addStartFlags types.ModuleInitFlagsx/crisis.NewAppModulehas a new attribute:skipGenesisInvariants. PR
Features
- (tx) #7688 Add a new Tx gRPC service with methods
SimulateandGetTx(by hash). - Modules
x/crisishas a new function:AddModuleInitFlags, which will register optional crisis module flags for the start command.
Bug Fixes
- (client) #7699 Fix panic in context when setting invalid nodeURI.
WithNodeURIdoes not set theClientin the context. - (x/gov) #7641 Fix tally calculation precision error.
Improvements
v0.40.0-rc1
The v0.40.0-rc1 release contains the following updates since RC0:
Client Breaking Changes
- Modules
- (x/staking) #7499
BondStatusis now a protobufenuminstead of anint32, and JSON serialized using its protobuf name, so expect names likeBOND_STATUS_UNBONDINGas opposed toUnbonding. - (x/staking) #7556 The ABCI's
Result.Datafield forMsgBeginRedelegateandMsgUndelegateresponses does not contain custom binary marshaledcompletionTime, but the protobuf encodedMsgBeginRedelegateResponseandMsgUndelegateResponsestructs respectively - (x/evidence) #7538 The ABCI's
Result.Datafield forMsgSubmitEvidenceresponses does not contain the raw evidence's hash, but the protobuf encodedMsgSubmitEvidenceResponsestruct. - (x/gov) #7533 The ABCI's
Result.Datafield forMsgSubmitProposalresponses does not contain a raw binary encoding of theproposalID, but the protobuf encodedMsgSubmitSubmitProposalResponsestruct.
- (x/staking) #7499
API Breaking
- (AppModule) #7518 #7584 Rename
AppModule.RegisterQueryServicestoAppModule.RegisterServices, as this method now registers multiple services (the gRPC query service and the protobuf Msg service). AConfiguratorstruct is used to hold the different services.
Features
- (modules) #7540 Protobuf service definitions can now be used for packing
Msgs in transactions as defined in ADR 031. All modules now define aMsgprotobuf service. - (codec) #7519
InterfaceRegistrynow inheritsjsonpb.AnyResolver, and has aRegisterCustomTypeURLmethod to support ADR 031 packing ofAnys.AnyResolveris now a required parameter toRejectUnknownFields. - (baseapp) #7519 Add
ServiceMsgRouterto BaseApp to handle routing of protobuf serviceMsgs. The two new types defined in ADR 031,sdk.ServiceMsgandsdk.MsgRequestare introduced with this router. - (cli) #7221 Add the option of emitting amino encoded json from the CLI
Bug Fixes
- (kvstore) #7415 Allow new stores to be registered during on-chain upgrades.