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