Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.

Commit 0866300

Browse files
committed
add mutex
1 parent b43a12a commit 0866300

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

store/gaskv/store.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ func (gs *Store) Set(key []byte, value []byte) {
7373
gs.gasMeter.ConsumeGas(gs.gasConfig.WriteCostPerByte*types.Gas(len(key)), types.GasWritePerByteDesc)
7474
gs.gasMeter.ConsumeGas(gs.gasConfig.WriteCostPerByte*types.Gas(len(value)), types.GasWritePerByteDesc)
7575
gs.parent.Set(key, value)
76+
if gs.tracer != nil {
77+
gs.tracer.Set(key, value, gs.moduleName)
78+
}
7679
}
7780

7881
// Implements KVStore.
@@ -92,6 +95,9 @@ func (gs *Store) Delete(key []byte) {
9295
// charge gas to prevent certain attack vectors even though space is being freed
9396
gs.gasMeter.ConsumeGas(gs.gasConfig.DeleteCost, types.GasDeleteDesc)
9497
gs.parent.Delete(key)
98+
if gs.tracer != nil {
99+
gs.tracer.Delete(key, gs.moduleName)
100+
}
95101
}
96102

97103
// Iterator implements the KVStore interface. It returns an iterator which

types/tracer.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package types
33
import (
44
"encoding/hex"
55
"encoding/json"
6+
"sync"
67
)
78

89
type StoreTracer struct {
910
Modules map[string]*ModuleTrace
11+
mu *sync.Mutex
1012
}
1113

1214
type ModuleTrace struct {
@@ -31,10 +33,13 @@ const (
3133
func NewStoreTracer() *StoreTracer {
3234
return &StoreTracer{
3335
Modules: map[string]*ModuleTrace{},
36+
mu: &sync.Mutex{},
3437
}
3538
}
3639

3740
func (st *StoreTracer) Get(key []byte, value []byte, module string) {
41+
st.mu.Lock()
42+
defer st.mu.Unlock()
3843
accesses := st.getOrSetModuleTrace(module)
3944
accesses.Accesses = append(accesses.Accesses, Access{
4045
Op: Get,
@@ -44,6 +49,8 @@ func (st *StoreTracer) Get(key []byte, value []byte, module string) {
4449
}
4550

4651
func (st *StoreTracer) Set(key []byte, value []byte, module string) {
52+
st.mu.Lock()
53+
defer st.mu.Unlock()
4754
accesses := st.getOrSetModuleTrace(module)
4855
accesses.Accesses = append(accesses.Accesses, Access{
4956
Op: Set,
@@ -53,6 +60,8 @@ func (st *StoreTracer) Set(key []byte, value []byte, module string) {
5360
}
5461

5562
func (st *StoreTracer) Has(key []byte, module string) {
63+
st.mu.Lock()
64+
defer st.mu.Unlock()
5665
accesses := st.getOrSetModuleTrace(module)
5766
accesses.Accesses = append(accesses.Accesses, Access{
5867
Op: Has,
@@ -61,6 +70,8 @@ func (st *StoreTracer) Has(key []byte, module string) {
6170
}
6271

6372
func (st *StoreTracer) Delete(key []byte, module string) {
73+
st.mu.Lock()
74+
defer st.mu.Unlock()
6475
accesses := st.getOrSetModuleTrace(module)
6576
accesses.Accesses = append(accesses.Accesses, Access{
6677
Op: Delete,
@@ -90,6 +101,8 @@ type ModuleTraceDump struct {
90101
}
91102

92103
func (st *StoreTracer) DerivePrestateToJson() []byte {
104+
st.mu.Lock()
105+
defer st.mu.Unlock()
93106
d := StoreTraceDump{
94107
Modules: make(map[string]ModuleTraceDump, len(st.Modules)),
95108
}

0 commit comments

Comments
 (0)