log.go 1.72 KB
Newer Older
obscuren's avatar
obscuren committed
1
package state
obscuren's avatar
obscuren committed
2

obscuren's avatar
obscuren committed
3 4
import (
	"fmt"
obscuren's avatar
obscuren committed
5
	"io"
obscuren's avatar
obscuren committed
6

obscuren's avatar
obscuren committed
7
	"github.com/ethereum/go-ethereum/common"
obscuren's avatar
obscuren committed
8
	"github.com/ethereum/go-ethereum/rlp"
obscuren's avatar
obscuren committed
9
)
obscuren's avatar
obscuren committed
10

obscuren's avatar
obscuren committed
11
type Log interface {
obscuren's avatar
obscuren committed
12
	Address() common.Address
obscuren's avatar
obscuren committed
13
	Topics() []common.Hash
obscuren's avatar
obscuren committed
14
	Data() []byte
obscuren's avatar
obscuren committed
15 16

	Number() uint64
obscuren's avatar
obscuren committed
17 18 19
}

type StateLog struct {
obscuren's avatar
obscuren committed
20
	address common.Address
obscuren's avatar
obscuren committed
21
	topics  []common.Hash
obscuren's avatar
obscuren committed
22
	data    []byte
obscuren's avatar
obscuren committed
23
	number  uint64
obscuren's avatar
obscuren committed
24 25
}

obscuren's avatar
obscuren committed
26
func NewLog(address common.Address, topics []common.Hash, data []byte, number uint64) *StateLog {
obscuren's avatar
obscuren committed
27
	return &StateLog{address, topics, data, number}
obscuren's avatar
obscuren committed
28 29
}

obscuren's avatar
obscuren committed
30
func (self *StateLog) Address() common.Address {
obscuren's avatar
obscuren committed
31 32 33
	return self.address
}

obscuren's avatar
obscuren committed
34
func (self *StateLog) Topics() []common.Hash {
obscuren's avatar
obscuren committed
35
	return self.topics
obscuren's avatar
obscuren committed
36
}
obscuren's avatar
obscuren committed
37

obscuren's avatar
obscuren committed
38 39 40 41
func (self *StateLog) Data() []byte {
	return self.data
}

obscuren's avatar
obscuren committed
42 43 44 45
func (self *StateLog) Number() uint64 {
	return self.number
}

obscuren's avatar
obscuren committed
46
/*
obscuren's avatar
obscuren committed
47
func NewLogFromValue(decoder *common.Value) *StateLog {
obscuren's avatar
obscuren committed
48 49 50 51
	var extlog struct {

	}

obscuren's avatar
obscuren committed
52 53 54
	log := &StateLog{
		address: decoder.Get(0).Bytes(),
		data:    decoder.Get(2).Bytes(),
obscuren's avatar
obscuren committed
55 56 57 58
	}

	it := decoder.Get(1).NewIterator()
	for it.Next() {
obscuren's avatar
obscuren committed
59
		log.topics = append(log.topics, it.Value().Bytes())
obscuren's avatar
obscuren committed
60 61 62 63
	}

	return log
}
obscuren's avatar
obscuren committed
64
*/
obscuren's avatar
obscuren committed
65

obscuren's avatar
obscuren committed
66 67 68 69 70
func (self *StateLog) EncodeRLP(w io.Writer) error {
	return rlp.Encode(w, []interface{}{self.address, self.topics, self.data})
}

/*
obscuren's avatar
obscuren committed
71
func (self *StateLog) RlpData() interface{} {
obscuren's avatar
obscuren committed
72
	return []interface{}{self.address, common.ByteSliceToInterface(self.topics), self.data}
obscuren's avatar
obscuren committed
73
}
obscuren's avatar
obscuren committed
74
*/
obscuren's avatar
obscuren committed
75

obscuren's avatar
obscuren committed
76 77
func (self *StateLog) String() string {
	return fmt.Sprintf(`log: %x %x %x`, self.address, self.topics, self.data)
obscuren's avatar
obscuren committed
78 79
}

obscuren's avatar
obscuren committed
80
type Logs []Log
obscuren's avatar
obscuren committed
81

obscuren's avatar
obscuren committed
82
/*
obscuren's avatar
obscuren committed
83 84 85 86 87 88 89 90
func (self Logs) RlpData() interface{} {
	data := make([]interface{}, len(self))
	for i, log := range self {
		data[i] = log.RlpData()
	}

	return data
}
obscuren's avatar
obscuren committed
91
*/
obscuren's avatar
obscuren committed
92

obscuren's avatar
obscuren committed
93
func (self Logs) String() (ret string) {
obscuren's avatar
obscuren committed
94
	for _, log := range self {
obscuren's avatar
obscuren committed
95
		ret += fmt.Sprintf("%v", log)
obscuren's avatar
obscuren committed
96
	}
obscuren's avatar
obscuren committed
97 98

	return "[" + ret + "]"
obscuren's avatar
obscuren committed
99
}