forked from cerc-io/ipld-eth-server
parent
293dd2e848
commit
3863bcb614
40
pkg/repositories/watched_events.go
Normal file
40
pkg/repositories/watched_events.go
Normal file
@ -0,0 +1,40 @@
|
||||
package repositories
|
||||
|
||||
type WatchedEventLog struct {
|
||||
Name string `json:"name"` // name
|
||||
BlockNumber int64 `json:"block_number" db:"block_number"` // block_number
|
||||
Address string `json:"address"` // address
|
||||
TxHash string `json:"tx_hash" db:"tx_hash"` // tx_hash
|
||||
Index int64 `json:"index"` // index
|
||||
Topic0 string `json:"topic0"` // topic0
|
||||
Topic1 string `json:"topic1"` // topic1
|
||||
Topic2 string `json:"topic2"` // topic2
|
||||
Topic3 string `json:"topic3"` // topic3
|
||||
Data string `json:"data"` // data
|
||||
}
|
||||
|
||||
type WatchedEventLogs interface {
|
||||
AllWatchedEventLogs() ([]*WatchedEventLog, error)
|
||||
}
|
||||
|
||||
func (pg *Postgres) AllWatchedEventLogs() ([]*WatchedEventLog, error) {
|
||||
rows, err := pg.Db.Queryx("SELECT name, block_number, address, tx_hash, index, topic0, topic1, topic2, topic3, data FROM watched_event_logs")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
lgs := make([]*WatchedEventLog, 0)
|
||||
for rows.Next() {
|
||||
lg := new(WatchedEventLog)
|
||||
err := rows.StructScan(lg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
lgs = append(lgs, lg)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return lgs, nil
|
||||
}
|
70
pkg/repositories/watched_events_test.go
Normal file
70
pkg/repositories/watched_events_test.go
Normal file
@ -0,0 +1,70 @@
|
||||
package repositories_test
|
||||
|
||||
import (
|
||||
"github.com/vulcanize/vulcanizedb/pkg/repositories"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/repositories/testing"
|
||||
|
||||
"log"
|
||||
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/config"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/filters"
|
||||
)
|
||||
|
||||
var _ = Describe("Watched Events Repository", func() {
|
||||
var repository repositories.Postgres
|
||||
|
||||
BeforeEach(func() {
|
||||
cfg, err := config.NewConfig("private")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
repository, err = repositories.NewPostgres(cfg.Database, core.Node{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
testing.ClearData(repository)
|
||||
})
|
||||
|
||||
It("retrieves watched logs that match the event filter", func() {
|
||||
filter := filters.LogFilter{
|
||||
Name: "Filter1",
|
||||
FromBlock: 0,
|
||||
ToBlock: 10,
|
||||
Address: "0x123",
|
||||
Topics: core.Topics{0: "event1=10", 2: "event3=hello"},
|
||||
}
|
||||
logs := []core.Log{
|
||||
{
|
||||
BlockNumber: 0,
|
||||
TxHash: "0x1",
|
||||
Address: "0x123",
|
||||
Topics: core.Topics{0: "event1=10", 2: "event3=hello"},
|
||||
Index: 0,
|
||||
Data: "",
|
||||
},
|
||||
}
|
||||
expectedWatchedEventLog := []*repositories.WatchedEventLog{
|
||||
{
|
||||
Name: "Filter1",
|
||||
BlockNumber: 0,
|
||||
TxHash: "0x1",
|
||||
Address: "0x123",
|
||||
Topic0: "event1=10",
|
||||
Topic2: "event3=hello",
|
||||
Index: 0,
|
||||
Data: "",
|
||||
},
|
||||
}
|
||||
err := repository.AddFilter(filter)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
err = repository.CreateLogs(logs)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
matchingLogs, err := repository.AllWatchedEventLogs()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(matchingLogs).To(Equal(expectedWatchedEventLog))
|
||||
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue
Block a user