diff --git a/store/cachemulti/store.go b/store/cachemulti/store.go index 57912c53f4..2d4000e6b1 100644 --- a/store/cachemulti/store.go +++ b/store/cachemulti/store.go @@ -35,3 +35,18 @@ func NewStore( Closer: closer, } } + +func NewLockingStore( + stores map[types.StoreKey]types.CacheWrapper, + traceWriter io.Writer, traceContext types.TraceContext, + closer io.Closer, +) Store { + if closer == nil { + closer = NoopCloser + } + store := cachemulti.NewLockingStore(nil, stores, nil, traceWriter, traceContext) + return Store{ + Store: store, + Closer: closer, + } +} diff --git a/store/go.mod b/store/go.mod index c832e6cd14..2eaf0ef9f9 100644 --- a/store/go.mod +++ b/store/go.mod @@ -164,9 +164,11 @@ require ( // release/v0.50.x replace ( - cosmossdk.io/store => github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240722033504-50f1fa0c49d1 + //cosmossdk.io/store => github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240722033504-50f1fa0c49d1 cosmossdk.io/x/tx => github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240722033504-50f1fa0c49d1 github.com/cosmos/cosmos-sdk => github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240722033504-50f1fa0c49d1 ) replace github.com/crypto-org-chain/cronos/memiavl => ../memiavl + +replace cosmossdk.io/store => github.com/01builders/dydx-cosmos-sdk/store v0.5.6-dydx diff --git a/store/go.sum b/store/go.sum index 045ca0fb1c..e3aa13bcf6 100644 --- a/store/go.sum +++ b/store/go.sum @@ -17,6 +17,8 @@ cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/01builders/dydx-cosmos-sdk/store v0.5.6-dydx h1:7zpjRUXs6m4TerknjJB4D7HVsJh8XQO3gTObXAXu6D8= +github.com/01builders/dydx-cosmos-sdk/store v0.5.6-dydx/go.mod h1:ZW4eIE98wivInyQyhxU2nHqEielc/iZAcr41qNyWSrw= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= @@ -148,8 +150,6 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240722033504-50f1fa0c49d1 h1:xahHemSiT79xgh8Ig8zOTeHSLHt9FfPzViK7rATWhUM= github.com/crypto-org-chain/cosmos-sdk v0.50.6-0.20240722033504-50f1fa0c49d1/go.mod h1:Rb43DdB0i/rKcCN69Tg2X3+zA4WhJ7MC8K3a6Ezh38E= -github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240722033504-50f1fa0c49d1 h1:ZlezTiQu9pYpVO+6sB9+W3fvthIpV1GgSI8kPjw+v5s= -github.com/crypto-org-chain/cosmos-sdk/store v0.0.0-20240722033504-50f1fa0c49d1/go.mod h1:gjE3DZe4t/+VeIk6CmrouyqiuDbZ7QOVDDq3nLqBTpg= github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240722033504-50f1fa0c49d1 h1:r0ALP31Wnw19FqEmqzsK2SFNqdMetHshnM/X/FeJRIo= github.com/crypto-org-chain/cosmos-sdk/x/tx v0.0.0-20240722033504-50f1fa0c49d1/go.mod h1:RTiTs4hkXG6IvYGknvB8p79YgjYJdcbzLUOGJChsPnY= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= diff --git a/store/rootmulti/store.go b/store/rootmulti/store.go index 205f2f4b17..2e46c64f9a 100644 --- a/store/rootmulti/store.go +++ b/store/rootmulti/store.go @@ -198,6 +198,23 @@ func (rs *Store) CacheMultiStore() types.CacheMultiStore { } // Implements interface MultiStore +func (rs *Store) LockingCacheMultiStore() types.CacheMultiStore { + stores := make(map[types.StoreKey]types.CacheWrapper) + for k, v := range rs.stores { + store := types.CacheWrapper(v) + if kv, ok := store.(types.KVStore); ok { + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(k) { + store = listenkv.NewStore(kv, k, rs.listeners[k]) + } + } + stores[k] = store + } + return cachemulti.NewLockingStore(stores, nil, nil, nil) +} + +// CacheMultiStoreWithVersion Implements interface MultiStore // used to createQueryContext, abci_query or grpc query service. func (rs *Store) CacheMultiStoreWithVersion(version int64) (types.CacheMultiStore, error) { if version == 0 || (rs.lastCommitInfo != nil && version == rs.lastCommitInfo.Version) {