-
Notifications
You must be signed in to change notification settings - Fork 0
/
types.go
127 lines (109 loc) · 2.93 KB
/
types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright (c) 2020 The Meter.io developers
// Distributed under the GNU Lesser General Public License v3.0 software license, see the accompanying
// file LICENSE or <https://www.gnu.org/licenses/lgpl-3.0.html>
package logdb
import (
"math/big"
"github.com/saolacoincom/saolacoin/block"
"github.com/saolacoincom/saolacoin/meter"
"github.com/saolacoincom/saolacoin/tx"
)
//Event represents tx.Event that can be stored in db.
type Event struct {
BlockID meter.Bytes32
Index uint32
BlockNumber uint32
BlockTime uint64
TxID meter.Bytes32
TxOrigin meter.Address //contract caller
Address meter.Address // always a contract address
Topics [5]*meter.Bytes32
Data []byte
}
//newEvent converts tx.Event to Event.
func newEvent(header *block.Header, index uint32, txID meter.Bytes32, txOrigin meter.Address, txEvent *tx.Event) *Event {
ev := &Event{
BlockID: header.ID(),
Index: index,
BlockNumber: header.Number(),
BlockTime: header.Timestamp(),
TxID: txID,
TxOrigin: txOrigin,
Address: txEvent.Address, // always a contract address
Data: txEvent.Data,
}
for i := 0; i < len(txEvent.Topics) && i < len(ev.Topics); i++ {
ev.Topics[i] = &txEvent.Topics[i]
}
return ev
}
//Transfer represents tx.Transfer that can be stored in db.
type Transfer struct {
BlockID meter.Bytes32
Index uint32
BlockNumber uint32
BlockTime uint64
TxID meter.Bytes32
TxOrigin meter.Address
Sender meter.Address
Recipient meter.Address
Amount *big.Int
Token uint32
}
//newTransfer converts tx.Transfer to Transfer.
func newTransfer(header *block.Header, index uint32, txID meter.Bytes32, txOrigin meter.Address, transfer *tx.Transfer) *Transfer {
return &Transfer{
BlockID: header.ID(),
Index: index,
BlockNumber: header.Number(),
BlockTime: header.Timestamp(),
TxID: txID,
TxOrigin: txOrigin,
Sender: transfer.Sender,
Recipient: transfer.Recipient,
Amount: transfer.Amount,
Token: uint32(transfer.Token),
}
}
type RangeType string
const (
Block RangeType = "block"
Time RangeType = "time"
)
type Order string
const (
ASC Order = "asc"
DESC Order = "desc"
)
type Range struct {
Unit RangeType
From uint64
To uint64
}
type Options struct {
Offset uint64
Limit uint64
}
type EventCriteria struct {
Address *meter.Address // always a contract address
Topics [5]*meter.Bytes32
}
//EventFilter filter
type EventFilter struct {
CriteriaSet []*EventCriteria
Range *Range
Options *Options
Order Order //default asc
}
type TransferCriteria struct {
TxOrigin *meter.Address //who send transaction
Sender *meter.Address //who transferred tokens
Recipient *meter.Address //who recieved tokens
}
type TransferFilter struct {
TxID *meter.Bytes32
CriteriaSet []*TransferCriteria
Range *Range
Options *Options
Order Order //default asc
}