From 894ce4d8b01a9063a7d12ca491a893901e8b431e Mon Sep 17 00:00:00 2001 From: Silas Davis <silas@monax.io> Date: Tue, 26 Jun 2018 14:42:14 +0100 Subject: [PATCH] Don't store Tx in state for every event (for now) Signed-off-by: Silas Davis <silas@monax.io> --- execution/events/event.go | 21 +++++++++++++++++++++ execution/state.go | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/execution/events/event.go b/execution/events/event.go index e5f7f5ed..5830a129 100644 --- a/execution/events/event.go +++ b/execution/events/event.go @@ -39,6 +39,27 @@ func (ev *Event) Key() Key { return ev.Header.Key() } +// Performs a shallow copy of Event +func (ev *Event) Copy() *Event { + h := *ev.Header + evCopy := Event{ + Header: &h, + } + if ev.Tx != nil { + tx := *ev.Tx + evCopy.Tx = &tx + } + if ev.Call != nil { + call := *ev.Call + evCopy.Call = &call + } + if ev.Log != nil { + log := *ev.Log + evCopy.Log = &log + } + return &evCopy +} + func (ev *Event) Encode() ([]byte, error) { return cdc.MarshalBinary(ev) } diff --git a/execution/state.go b/execution/state.go index 07409c43..8418c836 100644 --- a/execution/state.go +++ b/execution/state.go @@ -321,6 +321,12 @@ func (ws *writeState) Publish(ctx context.Context, msg interface{}, tags event.T ws.state.eventKeyHighWatermark, exeEvent) } ws.state.eventKeyHighWatermark = key + if exeEvent.Tx != nil { + // Don't serialise the tx (for now) we should normalise and store against tx hash + exeEvent = exeEvent.Copy() + // The header still contains the tx hash + exeEvent.Tx.Tx = nil + } bs, err := exeEvent.Encode() if err != nil { return err -- GitLab