From bba85a207488d27819dc6f6f5758b80947ea200b Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Sun, 22 Feb 2015 13:24:26 +0100
Subject: [PATCH] Added Number to logs

---
 rpc/util.go       |  2 ++
 state/log.go      | 11 +++++++++--
 vm/environment.go |  5 +++++
 vm/vm.go          |  2 +-
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/rpc/util.go b/rpc/util.go
index 29824bcdb..1939b3474 100644
--- a/rpc/util.go
+++ b/rpc/util.go
@@ -84,6 +84,7 @@ type Log struct {
 	Address string   `json:"address"`
 	Topic   []string `json:"topics"`
 	Data    string   `json:"data"`
+	Number  uint64   `json:"number"`
 }
 
 func toLogs(logs state.Logs) (ls []Log) {
@@ -94,6 +95,7 @@ func toLogs(logs state.Logs) (ls []Log) {
 		l.Topic = make([]string, len(log.Topics()))
 		l.Address = toHex(log.Address())
 		l.Data = toHex(log.Data())
+		l.Number = log.Number()
 		for j, topic := range log.Topics() {
 			l.Topic[j] = toHex(topic)
 		}
diff --git a/state/log.go b/state/log.go
index 46360f4aa..d503bd1a0 100644
--- a/state/log.go
+++ b/state/log.go
@@ -12,16 +12,19 @@ type Log interface {
 	Address() []byte
 	Topics() [][]byte
 	Data() []byte
+
+	Number() uint64
 }
 
 type StateLog struct {
 	address []byte
 	topics  [][]byte
 	data    []byte
+	number  uint64
 }
 
-func NewLog(address []byte, topics [][]byte, data []byte) *StateLog {
-	return &StateLog{address, topics, data}
+func NewLog(address []byte, topics [][]byte, data []byte, number uint64) *StateLog {
+	return &StateLog{address, topics, data, number}
 }
 
 func (self *StateLog) Address() []byte {
@@ -36,6 +39,10 @@ func (self *StateLog) Data() []byte {
 	return self.data
 }
 
+func (self *StateLog) Number() uint64 {
+	return self.number
+}
+
 func NewLogFromValue(decoder *ethutil.Value) *StateLog {
 	log := &StateLog{
 		address: decoder.Get(0).Bytes(),
diff --git a/vm/environment.go b/vm/environment.go
index 8507e248f..5b4d6c8f0 100644
--- a/vm/environment.go
+++ b/vm/environment.go
@@ -54,6 +54,7 @@ type Log struct {
 	address []byte
 	topics  [][]byte
 	data    []byte
+	log     uint64
 }
 
 func (self *Log) Address() []byte {
@@ -68,6 +69,10 @@ func (self *Log) Data() []byte {
 	return self.data
 }
 
+func (self *Log) Number() uint64 {
+	return self.log
+}
+
 func (self *Log) RlpData() interface{} {
 	return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data}
 }
diff --git a/vm/vm.go b/vm/vm.go
index 5ec507ddc..b20d7b603 100644
--- a/vm/vm.go
+++ b/vm/vm.go
@@ -578,7 +578,7 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
 			}
 
 			data := mem.Get(mStart.Int64(), mSize.Int64())
-			log := &Log{context.Address(), topics, data}
+			log := &Log{context.Address(), topics, data, self.env.BlockNumber().Uint64()}
 			self.env.AddLog(log)
 
 			self.Printf(" => %v", log)
-- 
GitLab