@@ -3,10 +3,12 @@ package types
33import (
44 "encoding/hex"
55 "encoding/json"
6+ "sync"
67)
78
89type StoreTracer struct {
910 Modules map [string ]* ModuleTrace
11+ mu * sync.Mutex
1012}
1113
1214type ModuleTrace struct {
@@ -31,10 +33,13 @@ const (
3133func NewStoreTracer () * StoreTracer {
3234 return & StoreTracer {
3335 Modules : map [string ]* ModuleTrace {},
36+ mu : & sync.Mutex {},
3437 }
3538}
3639
3740func (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
4651func (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
5562func (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
6372func (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
92103func (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