diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cf84534..ffc7597d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## Unreleased +### State Machine Breaking + +- (evm) [tharsis#840](https://github.com/tharsis/ethermint/pull/840) Store empty topics as empty array rather than nil. + ### Improvements * (evm) [tharsis#826](https://github.com/tharsis/ethermint/issues/826) Improve allocation of bytes of `tx.To` address. diff --git a/x/evm/keeper/statedb_test.go b/x/evm/keeper/statedb_test.go index 7c69072b..a3cb8caf 100644 --- a/x/evm/keeper/statedb_test.go +++ b/x/evm/keeper/statedb_test.go @@ -592,6 +592,7 @@ func (suite *KeeperTestSuite) TestAddLog() { ðtypes.Log{ Address: addr, TxHash: txHash, + Topics: make([]common.Hash, 0), }, func() {}, }, @@ -606,6 +607,7 @@ func (suite *KeeperTestSuite) TestAddLog() { TxHash: txHash2, TxIndex: 1, Index: 1, + Topics: make([]common.Hash, 0), }, func() { suite.app.EvmKeeper.SetTxHashTransient(txHash) @@ -624,6 +626,7 @@ func (suite *KeeperTestSuite) TestAddLog() { ðtypes.Log{ Address: addr, TxHash: txHash3, + Topics: make([]common.Hash, 0), }, func() {}, }, @@ -638,6 +641,7 @@ func (suite *KeeperTestSuite) TestAddLog() { TxHash: txHash4, TxIndex: 1, Index: 1, + Topics: make([]common.Hash, 0), }, func() { suite.app.EvmKeeper.SetTxHashTransient(txHash) diff --git a/x/evm/types/logs.go b/x/evm/types/logs.go index 75cea388..4cf73c94 100644 --- a/x/evm/types/logs.go +++ b/x/evm/types/logs.go @@ -70,9 +70,9 @@ func (log *Log) Validate() error { // ToEthereum returns the Ethereum type Log from a Ethermint proto compatible Log. func (log *Log) ToEthereum() *ethtypes.Log { - var topics []common.Hash // nolint: prealloc - for i := range log.Topics { - topics = append(topics, common.HexToHash(log.Topics[i])) + topics := make([]common.Hash, len(log.Topics)) + for i, topic := range log.Topics { + topics[i] = common.HexToHash(topic) } return ðtypes.Log{ @@ -108,9 +108,9 @@ func LogsToEthereum(logs []*Log) []*ethtypes.Log { // NewLogFromEth creates a new Log instance from a Ethereum type Log. func NewLogFromEth(log *ethtypes.Log) *Log { - var topics []string // nolint: prealloc - for _, topic := range log.Topics { - topics = append(topics, topic.String()) + topics := make([]string, len(log.Topics)) + for i, topic := range log.Topics { + topics[i] = topic.String() } return &Log{