A Framework for Building High Value Public Blockchains
APACHE-2.0 License
Bot releases are hidden (Show)
Published by alessio almost 4 years ago
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.
Applications can now customise types.Coin
denomination validation by passing
their application-specific validation function to types.SetCoinDenomRegex()
.
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.
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.
This is the first release of the Launchpad series that has been tested and built with go 1.15.
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.
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.
Published by clevinson almost 4 years ago
Updates since v0.40.0-rc2:
Published by clevinson almost 4 years ago
ValidatorI
interface update. GetConsPubKey
renamed to TmConsPubKey
(consensus public key must be a tendermint key). TmConsPubKey
, GetConsAddr
methods return error.Validator
update. Methods changed in ValidatorI
(as described above) and ToTmValidator
return error.Validator.ConsensusPubkey
type changed from string
to codectypes.Any
.MsgCreateValidator.Pubkey
type changed from string
to codectypes.Any
.MakeEncodingConfig
to MakeTestEncodingConfig
(both in simapp
and simapp/params
packages).cosmos.base.v1beta1.simulate
to cosmos.tx.v1beta1
, as a method in the Tx service.server/types.AppExporter
requires extra argument: AppOptions
.server.AddCommands
requires extra argument: addStartFlags types.ModuleInitFlags
x/crisis.NewAppModule
has a new attribute: skipGenesisInvariants
. PR
Simulate
and GetTx
(by hash).x/crisis
has a new function: AddModuleInitFlags
, which will register optional crisis module flags for the start command.WithNodeURI
does not set the Client
in the context.Published by clevinson almost 4 years ago
The v0.40.0-rc1 release contains the following updates since RC0:
BondStatus
is now a protobuf enum
instead of an int32
, and JSON serialized using its protobuf name, so expect names like BOND_STATUS_UNBONDING
as opposed to Unbonding
.Result.Data
field for MsgBeginRedelegate
and MsgUndelegate
responses does not contain custom binary marshaled completionTime
, but the protobuf encoded MsgBeginRedelegateResponse
and MsgUndelegateResponse
structs respectivelyResult.Data
field for MsgSubmitEvidence
responses does not contain the raw evidence's hash, but the protobuf encoded MsgSubmitEvidenceResponse
struct.Result.Data
field for MsgSubmitProposal
responses does not contain a raw binary encoding of the proposalID
, but the protobuf encoded MsgSubmitSubmitProposalResponse
struct.AppModule.RegisterQueryServices
to AppModule.RegisterServices
, as this method now registers multiple services (the gRPC query service and the protobuf Msg service). A Configurator
struct is used to hold the different services.Msg
s in transactions as defined in ADR 031. All modules now define a Msg
protobuf service.InterfaceRegistry
now inherits jsonpb.AnyResolver
, and has a RegisterCustomTypeURL
method to support ADR 031 packing of Any
s. AnyResolver
is now a required parameter to RejectUnknownFields
.ServiceMsgRouter
to BaseApp to handle routing of protobuf service Msg
s. The two new types defined in ADR 031, sdk.ServiceMsg
and sdk.MsgRequest
are introduced with this router.Published by clevinson about 4 years ago
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.
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:
As a high level summary these represent the following major changes to the SDK:
Note: Existing Amino REST endpoints are all preserved, though they are planned to be deprecated in a future release.
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:
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.
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.
Update to the latest version of tendermint which adds support for the following (in addition many other improvements):
A more detailed list of Tendermint updates can be found here.
Published by tac0turtle about 4 years ago
Published by alessio about 4 years ago
This release fixes the issue affecting the accounts migration from v0.38 to v0.39.
See the Cosmos SDK 0.39.1 milestone on our issue tracker for details.
Account types JSON serialization has now changed to Amino. Changes are significant (e.g. integers are treated
as strings) thus it is required to migrate the exported state of an application before restarting the node
with a more recent version of the Cosmos SDK.
This a UX improvement back ported from master that allows developers to disable CORS
restrictions during app development and testing by passing the --unsafe-cors
option to the client's rest-server
command.
Tendermint 0.33.7 brings an important regression fix. Please refer to this bug report for more information.
Published by alessio over 4 years ago
This is the inaugural release of the Cosmos SDK 0.39 «Launchpad» release series.
See the CHANGELOG.md file or the Cosmos SDK 0.39.0 milestone on our issue tracker for details.
The pruning features introduced in the 0.38
release series are buggy and might lead to data loss,
even after upgrading to v0.39.0
. When upgrading from 0.38
it is important to follow the instructions
below, to prevent data loss and database corruption.
Note: there are are several breaking changes with regard to IAVL, stores, and pruning settings that affect command line clients, server configuration, and Golang API.
The IAVL's v0.13.0
release introduced a pruning functionality that turned out to be buggy and flawed.
IAVL's new v0.14.0
release now commits and flushes every state to disk as it did in pre-v0.13.0
release.
The SDK's multi-store will track and ensure the proper heights are pruned. The operator can now set the pruning
options by passing a pruning
configuration via command line option or app.toml
. The pruning
flag supports the following
options: default
, everything
, nothing
, custom
- see docs for further details. If the operator chooses custom
, they
may want to provide either of the granular pruning values:
pruning-keep-recent
pruning-keep-every
pruning-interval
The former two options dictate how many recent versions are kept on disk and the offset of what versions are kept after that
respectively, and the latter defines the height interval in which versions are deleted in a batch. Note: there are are some
client application breaking changes with regard to IAVL, stores, and pruning settings. An example patch follows:
From 5884171ba73c3054e98564c39adc9cbbab8d4646 Mon Sep 17 00:00:00 2001
From: Alessio Treglia <[email protected]>
Date: Tue, 14 Jul 2020 14:54:19 +0100
Subject: [PATCH 2/4] use new pruning options
---
cmd/cnd/main.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/cmd/cnd/main.go b/cmd/cnd/main.go
index b0c86f4a..4a3a8518 100644
--- a/cmd/cnd/main.go
+++ b/cmd/cnd/main.go
@@ -23,7 +23,6 @@ import (
comgenutilcli "github.com/commercionetwork/commercionetwork/x/genutil/client/cli"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/server"
- "github.com/cosmos/cosmos-sdk/store"
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
"github.com/cosmos/cosmos-sdk/x/staking"
)
@@ -87,9 +86,14 @@ func main() {
}
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer) abci.Application {
+ pruningOpts, err := server.GetPruningOptionsFromFlags()
+ if err != nil {
+ panic(err)
+ }
+
return app.NewCommercioNetworkApp(
logger, db, traceStore, true, invCheckPeriod,
- baseapp.SetPruning(store.NewPruningOptionsFromString(viper.GetString("pruning"))),
+ baseapp.SetPruning(pruningOpts),
baseapp.SetMinGasPrices(viper.GetString(server.FlagMinGasPrices)),
baseapp.SetHaltHeight(uint64(viper.GetInt(server.FlagHaltHeight))),
)
Note: do not modify pruning settings with any release prior to v0.39.0
as that may cause data corruption.
The following instructions assume that **pruning settings have not been modified since the node started using 0.38.x. Note: the default pruning setting syncable
used KeepEvery:100
.
This strategy entails performing a hard fork of your chain.
It takes time, coordination and a few technical steps that the validators of the network must follow. Note: a software upgrade guide for gaia
, the application that powers the Cosmos Hub, is available too. It contains detailed instructions on how to upgrade network nodes that apply to the vast majority of Cosmos SDK applications.
In preparation of the upgrade, you need to export the current state. This operation should be be performed on one node:
appd export --for-zero-height > export_genesis.json
.export_genesis.json
with the values that the network had agreed upon.Follow these steps to perform the upgrade:
genesis.json
file in your server application's config directory (e.g. $HOME/.appd/config/genesis.json
) and replace it with export_genesis.json
. Note: do rename export_genesis.json
to genesis.json
.Alternatively, you can follow one of the following strategies:
Replace the application server's binary and perform a full sync of the node from scratch.
If your node had started with using KeepEvery:1
(e.g. pruning settings nothing
or everything
), upgrading to v0.39.0
should be simple and safe.
Do halt block processing with --halt-height
after committing a height divisible by KeepEvery
- e.g. at block 147600 with KeepEvery:100
. The node must never have processed a height beyond that at any time in its past. Upgrading to v0.39.0
is then safe.
Set the KeepEvery
setting to the same as the previous KeepEvery
setting (both <=v0.38.5
and v0.39.0
default to KeepEvery:100
). Upgrade to v0.39.0
is then safe as long as you wait one KeepEvery
interval plus one KeepRecent
interval plus one pruning Interval
before changing pruning settings or deleting the last <=v0.38.5
height (so wait 210 heights with the default configuration).
Otherwise, make sure the last version persisted with <=v0.38.5
is never deleted after upgrading to v0.39.0
, as doing so may cause data loss and data corruption.
When multiple transactions in the same block are sent (and correctly signed) by the same account, chances are that some of them could be rejected and the error unauthorized: signature verification failed
would be returned due to the account's sequence (nonce) getting stuck and not being incremented by the ante handler. This behaviour was a regression introduced in the v0.38
release series, it did not occur in the v0.37
release series and is now fixed in this release.
The app/simulate
query path is used to simulate the execution transactions in order to obtain an estimate
of the gas consumption that would be required to actually execute them. The response used to return only
the amount of gas, it now returns the result of the transaction as well.
The bank.send
event used to carry only the recipient and amount. It was assumed that the sender of the funds was message.sender
.
This is often not true when a module call the bank keeper directly. This may be due to staking distribution, or via a cosmwasm contract that released funds (where I discovered the issue).
bank.send
now contains the entire triple (sender, recipient, amount)
.
The --trace
option is reintroduced. It comes in very handy for debugging as it causes the full stack trace to be included in the ABCI error logs.
The key parse
command ignored the application-specific address bech32
prefixes and used to return cosmos*1
-prefixed addresses regardless
of the client application's configuration.
Published by tac0turtle over 4 years ago
Published by alexanderbez over 4 years ago
ctx.BlockGasMeter
during failed message validation which resulted in a panic when the tx execution mode was CheckTx
.ExportGenesis
in x/genutil
to export default genesis state ([]
) instead of null
.Published by alexanderbez over 4 years ago
x/distribution
endpoints to properly return height in the response.DefaultGenesis
returns valid and non-nil default genesis state.ExportGenesis
in x/genutil
to export default genesis state ([]
) instead of null
.gentxs
are always an empty array instead of nil
.tx.minheight
key to filter transaction with an inclusive minimum block heighttx.maxheight
key to filter transaction with an inclusive maximum block heightPublished by alexanderbez over 4 years ago
amount
event attribute to the complete_unbonding
and complete_redelegation
events that reflect the total balances of the completed unbondings and redelegations respectively.Store#Commit
method has been refactored to delete a flushed version if it is not a snapshot version. The root multi-store now keeps track of commitInfo
instead of types.CommitID
. During Commit
of the root multi-store, lastCommitInfo
is updated from the saved state and is only flushed to disk if it is a snapshot version. During Query
of the root multi-store, if the request height is the latest height, we'll use the store's lastCommitInfo
. Otherwise, we fetch commitInfo
from disk.