Skip to content

Commit

Permalink
genesis service event bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
kocubinski committed Oct 9, 2024
1 parent 3220aab commit 10fcb68
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 8 deletions.
2 changes: 1 addition & 1 deletion runtime/v2/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ func DefaultServiceBindings() depinject.Config {
}
headerService header.Service = services.NewGenesisHeaderService(stf.HeaderService{})
cometService comet.Service = &services.ContextAwareCometInfoService{}
eventService = stf.NewEventService()
eventService event.Service = services.NewGenesisEventService(stf.NewEventService())
)
return depinject.Supply(
kvServiceFactory,
Expand Down
54 changes: 47 additions & 7 deletions runtime/v2/services/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import (
"context"
"fmt"

"cosmossdk.io/core/event"
"cosmossdk.io/core/header"
"cosmossdk.io/core/store"
"cosmossdk.io/core/transaction"
)

var (
Expand Down Expand Up @@ -105,6 +107,18 @@ func (g *GenesisKVStoreService) OpenKVStore(ctx context.Context) store.KVStore {
return readonlyKVStore{state}
}

type readonlyKVStore struct {
store.Reader
}

func (r readonlyKVStore) Set(key, value []byte) error {
panic("tried to call Set on a readonly store")

Check warning

Code scanning / CodeQL

Panic in BeginBock or EndBlock consensus methods Warning

Possible panics in BeginBock- or EndBlock-related consensus methods could cause a chain halt
}

func (r readonlyKVStore) Delete(key []byte) error {
panic("tried to call Delete on a readonly store")

Check warning

Code scanning / CodeQL

Panic in BeginBock or EndBlock consensus methods Warning

Possible panics in BeginBock- or EndBlock-related consensus methods could cause a chain halt
}

// GenesisHeaderService is a header.Service implementation that is used during
// genesis initialization. It wraps an inner execution context header.Service.
type GenesisHeaderService struct {
Expand All @@ -123,20 +137,46 @@ func (g *GenesisHeaderService) HeaderInfo(ctx context.Context) header.Info {

// NewGenesisHeaderService creates a new GenesisHeaderService.
// - executionService is the header.Service to use when the genesis context is not active.
func NewGenesisHeaderService(executionService header.Service) *GenesisHeaderService {
func NewGenesisHeaderService(executionService header.Service) header.Service {
return &GenesisHeaderService{
executionService: executionService,
}
}

type readonlyKVStore struct {
store.Reader
// GenesisEventService is an event.Service implementation that is used during
// genesis initialization. It wraps an inner execution context event.Service.
// During genesis initialization, it returns a blackHoleEventManager into which
// events enter and disappear completely.
type GenesisEventService struct {
executionService event.Service
}

func (r readonlyKVStore) Set(key, value []byte) error {
panic("tried to call Set on a readonly store")
// NewGenesisEventService creates a new GenesisEventService.
// - executionService is the event.Service to use when the genesis context is not active.
func NewGenesisEventService(executionService event.Service) event.Service {
return &GenesisEventService{
executionService: executionService,
}
}

func (r readonlyKVStore) Delete(key []byte) error {
panic("tried to call Delete on a readonly store")
func (g *GenesisEventService) EventManager(ctx context.Context) event.Manager {
v := ctx.Value(genesisContextKey)
if v == nil {
return g.executionService.EventManager(ctx)
}
return &blackHoleEventManager{}
}

var _ event.Manager = (*blackHoleEventManager)(nil)

// blackHoleEventManager is an event.Manager that does nothing.
// It is used during genesis initialization, genesis events are not emitted.
type blackHoleEventManager struct{}

func (b *blackHoleEventManager) Emit(_ transaction.Msg) error {
return nil
}

func (b *blackHoleEventManager) EmitKV(_ string, _ ...event.Attribute) error {
return nil
}

0 comments on commit 10fcb68

Please sign in to comment.