github.com/datachainlab/burrow@v0.25.0/execution/evm/event_sink.go (about)

     1  package evm
     2  
     3  import (
     4  	"github.com/hyperledger/burrow/execution/errors"
     5  	"github.com/hyperledger/burrow/execution/exec"
     6  )
     7  
     8  type EventSink interface {
     9  	Call(call *exec.CallEvent, exception *errors.Exception) error
    10  	Log(log *exec.LogEvent) error
    11  }
    12  
    13  type noopEventSink struct {
    14  }
    15  
    16  func NewNoopEventSink() *noopEventSink {
    17  	return &noopEventSink{}
    18  }
    19  
    20  func (es *noopEventSink) Call(call *exec.CallEvent, exception *errors.Exception) error {
    21  	return nil
    22  }
    23  
    24  func (es *noopEventSink) Log(log *exec.LogEvent) error {
    25  	return nil
    26  }
    27  
    28  type logFreeEventSink struct {
    29  	EventSink
    30  	error error
    31  }
    32  
    33  func NewLogFreeEventSink(eventSink EventSink) *logFreeEventSink {
    34  	return &logFreeEventSink{
    35  		EventSink: eventSink,
    36  	}
    37  }
    38  
    39  func (esc *logFreeEventSink) Log(log *exec.LogEvent) error {
    40  	return errors.ErrorCodef(errors.ErrorCodeIllegalWrite,
    41  		"Log emitted from contract %v, but current call should be log-free", log.Address)
    42  }