parent
2828fa1e62
commit
54581269b8
@ -47,6 +47,8 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
* (evm) [tharsis#276](https://github.com/tharsis/ethermint/pull/276) Vm errors don't result in cosmos tx failure, just
|
* (evm) [tharsis#276](https://github.com/tharsis/ethermint/pull/276) Vm errors don't result in cosmos tx failure, just
|
||||||
different tx state and events.
|
different tx state and events.
|
||||||
* (evm) [tharsis#342](https://github.com/tharsis/ethermint/issues/342) Don't clear balance when resetting the account.
|
* (evm) [tharsis#342](https://github.com/tharsis/ethermint/issues/342) Don't clear balance when resetting the account.
|
||||||
|
* (evm) [tharsis#334](https://github.com/tharsis/ethermint/pull/334) Log index changed to the index in block rather than
|
||||||
|
tx.
|
||||||
|
|
||||||
### API Breaking
|
### API Breaking
|
||||||
|
|
||||||
|
@ -247,6 +247,25 @@ func (k Keeper) DeleteTxLogs(ctx sdk.Context, txHash common.Hash) {
|
|||||||
store.Delete(txHash.Bytes())
|
store.Delete(txHash.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLogSizeTransient returns EVM log index on the current block.
|
||||||
|
func (k Keeper) GetLogSizeTransient() uint64 {
|
||||||
|
store := k.ctx.TransientStore(k.transientKey)
|
||||||
|
bz := store.Get(types.KeyPrefixTransientLogSize)
|
||||||
|
if len(bz) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return sdk.BigEndianToUint64(bz)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IncreaseLogSizeTransient fetches the current EVM log index from the transient store, increases its
|
||||||
|
// value by one and then sets the new index back to the transient store.
|
||||||
|
func (k Keeper) IncreaseLogSizeTransient() {
|
||||||
|
logSize := k.GetLogSizeTransient()
|
||||||
|
store := k.ctx.TransientStore(k.transientKey)
|
||||||
|
store.Set(types.KeyPrefixTransientLogSize, sdk.Uint64ToBigEndian(logSize+1))
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Storage
|
// Storage
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -590,9 +590,10 @@ func (k *Keeper) AddLog(log *ethtypes.Log) {
|
|||||||
log.TxIndex = uint(k.GetTxIndexTransient())
|
log.TxIndex = uint(k.GetTxIndexTransient())
|
||||||
log.TxHash = k.GetTxHashTransient()
|
log.TxHash = k.GetTxHashTransient()
|
||||||
|
|
||||||
logs := k.GetTxLogs(log.TxHash)
|
log.Index = uint(k.GetLogSizeTransient())
|
||||||
|
k.IncreaseLogSizeTransient()
|
||||||
|
|
||||||
log.Index = uint(len(logs))
|
logs := k.GetTxLogs(log.TxHash)
|
||||||
logs = append(logs, log)
|
logs = append(logs, log)
|
||||||
|
|
||||||
k.SetLogs(log.TxHash, logs)
|
k.SetLogs(log.TxHash, logs)
|
||||||
|
@ -485,6 +485,13 @@ func (suite *KeeperTestSuite) TestAddLog() {
|
|||||||
msg, _ = tx.GetMsgs()[0].(*evmtypes.MsgEthereumTx)
|
msg, _ = tx.GetMsgs()[0].(*evmtypes.MsgEthereumTx)
|
||||||
txHash := msg.AsTransaction().Hash()
|
txHash := msg.AsTransaction().Hash()
|
||||||
|
|
||||||
|
msg2 := types.NewTx(big.NewInt(1), 1, &suite.address, big.NewInt(1), 100000, big.NewInt(1), []byte("test"), nil)
|
||||||
|
msg2.From = addr.Hex()
|
||||||
|
|
||||||
|
tx2 := suite.CreateTestTx(msg2, privKey)
|
||||||
|
msg2, _ = tx2.GetMsgs()[0].(*evmtypes.MsgEthereumTx)
|
||||||
|
txHash2 := msg2.AsTransaction().Hash()
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
hash common.Hash
|
hash common.Hash
|
||||||
@ -503,21 +510,38 @@ func (suite *KeeperTestSuite) TestAddLog() {
|
|||||||
},
|
},
|
||||||
func() {},
|
func() {},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"log index keep increasing in new tx",
|
||||||
|
txHash2,
|
||||||
|
ðtypes.Log{
|
||||||
|
Address: addr,
|
||||||
|
},
|
||||||
|
ðtypes.Log{
|
||||||
|
Address: addr,
|
||||||
|
TxHash: txHash2,
|
||||||
|
TxIndex: 1,
|
||||||
|
Index: 1,
|
||||||
|
},
|
||||||
|
func() {
|
||||||
|
suite.app.EvmKeeper.SetTxHashTransient(txHash)
|
||||||
|
suite.app.EvmKeeper.AddLog(ðtypes.Log{
|
||||||
|
Address: addr,
|
||||||
|
})
|
||||||
|
suite.app.EvmKeeper.IncreaseTxIndexTransient()
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
suite.Run(tc.name, func() {
|
suite.Run(tc.name, func() {
|
||||||
|
suite.SetupTest()
|
||||||
tc.malleate()
|
tc.malleate()
|
||||||
|
|
||||||
prev := suite.app.EvmKeeper.GetTxLogs(tc.hash)
|
|
||||||
suite.app.EvmKeeper.SetTxHashTransient(tc.hash)
|
suite.app.EvmKeeper.SetTxHashTransient(tc.hash)
|
||||||
suite.app.EvmKeeper.AddLog(tc.log)
|
suite.app.EvmKeeper.AddLog(tc.log)
|
||||||
post := suite.app.EvmKeeper.GetTxLogs(tc.hash)
|
logs := suite.app.EvmKeeper.GetTxLogs(tc.hash)
|
||||||
|
suite.Require().Equal(1, len(logs))
|
||||||
suite.Require().NotZero(len(post), tc.hash.Hex())
|
suite.Require().Equal(tc.expLog, logs[0])
|
||||||
suite.Require().Equal(len(prev)+1, len(post))
|
|
||||||
suite.Require().NotNil(post[len(post)-1])
|
|
||||||
suite.Require().Equal(tc.log, post[len(post)-1])
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ const (
|
|||||||
prefixTransientAccessListAddress
|
prefixTransientAccessListAddress
|
||||||
prefixTransientAccessListSlot
|
prefixTransientAccessListSlot
|
||||||
prefixTransientTxHash
|
prefixTransientTxHash
|
||||||
|
prefixTransientLogSize
|
||||||
)
|
)
|
||||||
|
|
||||||
// KVStore key prefixes
|
// KVStore key prefixes
|
||||||
@ -65,6 +66,7 @@ var (
|
|||||||
KeyPrefixTransientAccessListAddress = []byte{prefixTransientAccessListAddress}
|
KeyPrefixTransientAccessListAddress = []byte{prefixTransientAccessListAddress}
|
||||||
KeyPrefixTransientAccessListSlot = []byte{prefixTransientAccessListSlot}
|
KeyPrefixTransientAccessListSlot = []byte{prefixTransientAccessListSlot}
|
||||||
KeyPrefixTransientTxHash = []byte{prefixTransientTxHash}
|
KeyPrefixTransientTxHash = []byte{prefixTransientTxHash}
|
||||||
|
KeyPrefixTransientLogSize = []byte{prefixTransientLogSize}
|
||||||
)
|
)
|
||||||
|
|
||||||
// BloomKey defines the store key for a block Bloom
|
// BloomKey defines the store key for a block Bloom
|
||||||
|
@ -120,6 +120,7 @@ func NewLogFromEth(log *ethtypes.Log) *Log {
|
|||||||
BlockNumber: log.BlockNumber,
|
BlockNumber: log.BlockNumber,
|
||||||
TxHash: log.TxHash.String(),
|
TxHash: log.TxHash.String(),
|
||||||
TxIndex: uint64(log.TxIndex),
|
TxIndex: uint64(log.TxIndex),
|
||||||
|
Index: uint64(log.Index),
|
||||||
BlockHash: log.BlockHash.String(),
|
BlockHash: log.BlockHash.String(),
|
||||||
Removed: log.Removed,
|
Removed: log.Removed,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user