mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 02:40:45 +00:00
Add *StateDB.TxHash for usage with Warp (#204)
## Why this should be merged Coreth and Subnet-EVM require access to the current tx hash in the Warp precompile (for selecting the correct predicate results). This can not be exposed as a wrapper through the `OverrideEVMResetArgs` because `SetTxContext` is called _prior_ to resetting the EVM instance. Therefore, the `SetTxContext` function on any DB wrapper would never be called. ## How this works Exposes the existing `txHash` through a `TxHash()` function. ## How this was tested Added a trivial unit test.
This commit is contained in:
parent
08e2b6da8a
commit
99f0d0b1de
2 changed files with 17 additions and 0 deletions
|
|
@ -24,6 +24,11 @@ import (
|
||||||
"github.com/ava-labs/libevm/libevm/stateconf"
|
"github.com/ava-labs/libevm/libevm/stateconf"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TxHash returns the current transaction hash set by [StateDB.SetTxContext].
|
||||||
|
func (s *StateDB) TxHash() common.Hash {
|
||||||
|
return s.thash
|
||||||
|
}
|
||||||
|
|
||||||
// SnapshotTree mirrors the functionality of a [snapshot.Tree], allowing for
|
// SnapshotTree mirrors the functionality of a [snapshot.Tree], allowing for
|
||||||
// drop-in replacements. This is intended as a temporary feature as a workaround
|
// drop-in replacements. This is intended as a temporary feature as a workaround
|
||||||
// until a standard Tree can be used.
|
// until a standard Tree can be used.
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,18 @@ import (
|
||||||
"github.com/ava-labs/libevm/triedb/hashdb"
|
"github.com/ava-labs/libevm/triedb/hashdb"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestTxHash(t *testing.T) {
|
||||||
|
db := NewDatabase(rawdb.NewMemoryDatabase())
|
||||||
|
state, err := New(types.EmptyRootHash, db, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Zero(t, state.TxHash(), "Tx hash should initially be uninitialized")
|
||||||
|
|
||||||
|
hash := common.Hash{1}
|
||||||
|
state.SetTxContext(hash, 3)
|
||||||
|
assert.Equal(t, hash, state.TxHash(), "Tx hash should have been updated")
|
||||||
|
}
|
||||||
|
|
||||||
func TestStateDBCommitPropagatesOptions(t *testing.T) {
|
func TestStateDBCommitPropagatesOptions(t *testing.T) {
|
||||||
memdb := rawdb.NewMemoryDatabase()
|
memdb := rawdb.NewMemoryDatabase()
|
||||||
trieRec := &triedbRecorder{Database: hashdb.New(memdb, nil, &trie.MerkleResolver{})}
|
trieRec := &triedbRecorder{Database: hashdb.New(memdb, nil, &trie.MerkleResolver{})}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue