diff --git a/rpc/util.go b/rpc/util.go index 29824bcdb99f302d4e5b4d8466c3f3cd54a1da3b..1939b347493bb073ff703219a8e9aceab0041832 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 46360f4aae28208ccd95abdb18baf9de8471d95a..d503bd1a0704484d9c6c056e267dc9e4cc37e1a3 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 8507e248f864ea06a84d1be8d6c0a2a51541d730..5b4d6c8f0ab8f100d2f374676e617449b9ed007d 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 5ec507ddc6ba45878ca1ef82c538cd1f9cd0f2ff..b20d7b6030b553a1e6c8b659bf0d325086098fee 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)