Evermint is a fork of open source Evmos, maintains bug fixes, customization and enable developers to fork and transform to their chain, fully customized naming, in just 2 steps. For research and development purpose.
The main purpose of this PR is about to update Evermint to use Cosmos SDK v0.50, one step toward the ABCI++.
All test cases are kept
Deps change:
Cosmos v0.47 => v0.50
CometBFT v0.37 => v0.38
IBC v7 => v8
Acknowledge changes:
Cosmos-SDK v0.50 requires signer for messages.
IBC v8, upon receive packet from counter-party chain, IBC-go will create new denom metadata to bank if not exists.
ABCI process BeginBlockDeliverTxEndBlockCommit is now all embedded into ABCI++ FinalizeBlock.
New signing mode Texture.
Use ValidatorAddressCodec to parse the bech32 validator operator address.
Breaking change:
x/evmMsgEthereumTx
From is now proto tagged as signer. Leading to it is now a mandatory value, the logics relates to this field were adjusted according.
x/erc20MsgConvertCoin
Sender is now proto tagged as signer.
Receiver changed to bech32 address (previous was hex address).
x/erc20MsgConvertERC20
Sender is now proto tagged as signer. Leading to it format changed to bech32 address instead of hex address.
x/erc20RegisterCoinProposal
Now has a flag to override existing bank denom metadata (which was created by IBC v8 upon receive packet.
Resolved incompatible:
Since IBC v8, upon receive packet from counter-party chain, IBC-go will create denom metadata, this make the x/erc20 register coin proposal failed because there is an existing denom metadata. This problem solved by add one flag to the proposal content, allow to override the bank denom metadata.
ABCI process BeginBlockDeliverTxEndBlockCommit is now all embedded into ABCI++ FinalizeBlock, and the FinallizeBlock method does not allow passing a context, instead it use context which is internally maintained, so this creates many trouble to existing test utility. To resolve this issue, ReflectChangesToCommitMultiStore (and integration testsuite) methods were introduced to reflect the existing change to the externally maintained context (by us) to the commit multistore before calling the FinalizeBlock so it can run on the same context which we modified before. The implementation is now look like:
The main purpose of this PR is about to update Evermint to use Cosmos SDK v0.50, one step toward the ABCI++.
All test cases are kept
Deps change:
Acknowledge changes:
BeginBlock
DeliverTx
EndBlock
Commit
is now all embedded into ABCI++FinalizeBlock
.ValidatorAddressCodec
to parse the bech32 validator operator address.Breaking change:
x/evm
MsgEthereumTx
From
is now proto tagged as signer. Leading to it is now a mandatory value, the logics relates to this field were adjusted according.x/erc20
MsgConvertCoin
Sender
is now proto tagged as signer.Receiver
changed to bech32 address (previous was hex address).x/erc20
MsgConvertERC20
Sender
is now proto tagged as signer. Leading to it format changed to bech32 address instead of hex address.x/erc20
RegisterCoinProposal
Resolved incompatible:
x/erc20
register coin proposal failed because there is an existing denom metadata. This problem solved by add one flag to the proposal content, allow to override the bank denom metadata.BeginBlock
DeliverTx
EndBlock
Commit
is now all embedded into ABCI++FinalizeBlock
, and theFinallizeBlock
method does not allow passing a context, instead it use context which is internally maintained, so this creates many trouble to existing test utility. To resolve this issue,ReflectChangesToCommitMultiStore
(and integration testsuite) methods were introduced to reflect the existing change to the externally maintained context (by us) to the commit multistore before calling theFinalizeBlock
so it can run on the same context which we modified before. The implementation is now look like:app.BankKeeper.MintCoins(ctx, coins)
ctx = ReflectChangesToCommitMultiStore(ctx)
app.FinalizeBlock(req)
ctx = ctx.WithMultiStore(app.CommitMultiStore().CacheMultiStore())
testutil.DeliverTx
now returns context, this should be used to replace existing context if any.x/evm
.TxData(LegacyTx).GasPrice
somehow become zero after marshalled and unmarshalled from nil value. Anyway it's still ok so we just accept it.