evm: fix import/export genesis for contract storage (#590)
* Problem: import/export roundtrip test fail contract storage Closes: #589 - don't hash the key again in InitGenesis * changelog * try to fix estimate-gas undeterministics Closes #536
This commit is contained in:
parent
2088297e3d
commit
d6a64a275a
@ -41,6 +41,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
|
|
||||||
* (app) [tharsis#476](https://github.com/tharsis/ethermint/pull/476) Update Bech32 HRP to `ethm`.
|
* (app) [tharsis#476](https://github.com/tharsis/ethermint/pull/476) Update Bech32 HRP to `ethm`.
|
||||||
* (evm) [tharsis#556](https://github.com/tharsis/ethermint/pull/556) Remove tx logs and block bloom from chain state
|
* (evm) [tharsis#556](https://github.com/tharsis/ethermint/pull/556) Remove tx logs and block bloom from chain state
|
||||||
|
* (evm) [tharsis#590](https://github.com/tharsis/ethermint/pull/590) Contract storage key is not hashed anymore
|
||||||
|
|
||||||
### API Breaking
|
### API Breaking
|
||||||
|
|
||||||
|
@ -478,7 +478,6 @@ func (suite *KeeperTestSuite) TestQueryValidatorAccount() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestEstimateGas() {
|
func (suite *KeeperTestSuite) TestEstimateGas() {
|
||||||
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
||||||
gasHelper := hexutil.Uint64(20000)
|
gasHelper := hexutil.Uint64(20000)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -545,7 +544,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
GasCap: gasCap,
|
GasCap: gasCap,
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp, err := suite.queryClient.EstimateGas(ctx, &req)
|
rsp, err := suite.queryClient.EstimateGas(sdk.WrapSDKContext(suite.ctx), &req)
|
||||||
if tc.expPass {
|
if tc.expPass {
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
suite.Require().Equal(tc.expGas, rsp.Gas)
|
suite.Require().Equal(tc.expGas, rsp.Gas)
|
||||||
|
@ -307,7 +307,6 @@ func (k Keeper) GetAccountStorage(ctx sdk.Context, address common.Address) (type
|
|||||||
|
|
||||||
func (k Keeper) DeleteState(addr common.Address, key common.Hash) {
|
func (k Keeper) DeleteState(addr common.Address, key common.Hash) {
|
||||||
store := prefix.NewStore(k.Ctx().KVStore(k.storeKey), types.AddressStoragePrefix(addr))
|
store := prefix.NewStore(k.Ctx().KVStore(k.storeKey), types.AddressStoragePrefix(addr))
|
||||||
key = types.KeyAddressStorage(addr, key)
|
|
||||||
store.Delete(key.Bytes())
|
store.Delete(key.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,10 +454,9 @@ func (k *Keeper) GetRefund() uint64 {
|
|||||||
// State
|
// State
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
func doGetState(ctx sdk.Context, storeKey sdk.StoreKey, addr common.Address, hash common.Hash) common.Hash {
|
func doGetState(ctx sdk.Context, storeKey sdk.StoreKey, addr common.Address, key common.Hash) common.Hash {
|
||||||
store := prefix.NewStore(ctx.KVStore(storeKey), types.AddressStoragePrefix(addr))
|
store := prefix.NewStore(ctx.KVStore(storeKey), types.AddressStoragePrefix(addr))
|
||||||
|
|
||||||
key := types.KeyAddressStorage(addr, hash)
|
|
||||||
value := store.Get(key.Bytes())
|
value := store.Get(key.Bytes())
|
||||||
if len(value) == 0 {
|
if len(value) == 0 {
|
||||||
return common.Hash{}
|
return common.Hash{}
|
||||||
@ -496,7 +495,6 @@ func (k *Keeper) SetState(addr common.Address, key, value common.Hash) {
|
|||||||
|
|
||||||
ctx := k.Ctx()
|
ctx := k.Ctx()
|
||||||
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AddressStoragePrefix(addr))
|
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AddressStoragePrefix(addr))
|
||||||
key = types.KeyAddressStorage(addr, key)
|
|
||||||
|
|
||||||
action := "updated"
|
action := "updated"
|
||||||
if ethermint.IsEmptyHash(value.Hex()) {
|
if ethermint.IsEmptyHash(value.Hex()) {
|
||||||
|
@ -2,7 +2,6 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -69,17 +68,3 @@ func AddressStoragePrefix(address common.Address) []byte {
|
|||||||
func StateKey(address common.Address, key []byte) []byte {
|
func StateKey(address common.Address, key []byte) []byte {
|
||||||
return append(AddressStoragePrefix(address), key...)
|
return append(AddressStoragePrefix(address), key...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// KeyAddressStorage returns the key hash to access a given account state. The composite key
|
|
||||||
// (address + hash) is hashed using Keccak256.
|
|
||||||
func KeyAddressStorage(address common.Address, hash common.Hash) common.Hash {
|
|
||||||
prefix := address.Bytes()
|
|
||||||
key := hash.Bytes()
|
|
||||||
|
|
||||||
compositeKey := make([]byte, len(prefix)+len(key))
|
|
||||||
|
|
||||||
copy(compositeKey, prefix)
|
|
||||||
copy(compositeKey[len(prefix):], key)
|
|
||||||
|
|
||||||
return crypto.Keccak256Hash(compositeKey)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user