diff --git a/rpc/api.go b/rpc/api.go index 6154a0b286..7924985471 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -208,7 +208,7 @@ func (self *EthereumApi) FilterChanged(id int, reply *interface{}) error { defer self.logMut.Unlock() if self.logs[id] != nil { - *reply = toLogs(self.logs[id].get()) + *reply = NewLogsRes(self.logs[id].get()) } return nil @@ -220,7 +220,7 @@ func (self *EthereumApi) Logs(id int, reply *interface{}) error { filter := self.filterManager.GetFilter(id) if filter != nil { - *reply = toLogs(filter.Find()) + *reply = NewLogsRes(filter.Find()) } return nil @@ -230,7 +230,7 @@ func (self *EthereumApi) AllLogs(args *FilterOptions, reply *interface{}) error filter := core.NewFilter(self.xeth().Backend()) filter.SetOptions(toFilterOptions(args)) - *reply = toLogs(filter.Find()) + *reply = NewLogsRes(filter.Find()) return nil } diff --git a/rpc/responses.go b/rpc/responses.go index eec483fb7b..a3613f3809 100644 --- a/rpc/responses.go +++ b/rpc/responses.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/state" ) type BlockRes struct { @@ -211,3 +212,28 @@ type FilterWhisperRes struct { Payload string `json:"payload"` WorkProved string `json:"workProved"` } + +type LogRes struct { + Address string `json:"address"` + Topic []string `json:"topic"` + Data string `json:"data"` + Number uint64 `json:"number"` +} + +func NewLogsRes(logs state.Logs) (ls []LogRes) { + ls = make([]LogRes, len(logs)) + + for i, log := range logs { + var l LogRes + l.Topic = make([]string, len(log.Topics())) + l.Address = common.ToHex(log.Address()) + l.Data = common.ToHex(log.Data()) + l.Number = log.Number() + for j, topic := range log.Topics() { + l.Topic[j] = common.ToHex(topic) + } + ls[i] = l + } + + return +} diff --git a/rpc/util.go b/rpc/util.go index 0798ae1d22..9a1d11bf16 100644 --- a/rpc/util.go +++ b/rpc/util.go @@ -19,7 +19,6 @@ package rpc import ( "time" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/xeth" @@ -27,31 +26,6 @@ import ( var rpclogger = logger.NewLogger("RPC") -type Log struct { - Address string `json:"address"` - Topic []string `json:"topic"` - Data string `json:"data"` - Number uint64 `json:"number"` -} - -func toLogs(logs state.Logs) (ls []Log) { - ls = make([]Log, len(logs)) - - for i, log := range logs { - var l Log - l.Topic = make([]string, len(log.Topics())) - l.Address = common.ToHex(log.Address()) - l.Data = common.ToHex(log.Data()) - l.Number = log.Number() - for j, topic := range log.Topics() { - l.Topic[j] = common.ToHex(topic) - } - ls[i] = l - } - - return -} - type whisperFilter struct { messages []xeth.WhisperMessage timeout time.Time