Backfill Frob log events

This commit is contained in:
Rob Mulholand
2018-08-14 10:47:43 -05:00
parent 55229cd2eb
commit ac63e43543
40 changed files with 1251 additions and 149 deletions
-27
View File
@@ -1,27 +0,0 @@
# Transformers
## Description
Transformers must be defined in order to define what events should trigger data updates and how those are performed.
## Interface
### Initializer
Accepts DB and Blockchain from Vulcanize and returns a new transformer. E.g. for a new object "Cup":
`func NewCupTransformer(db *postgres.DB, blockchain core.ContractDataFetcher) transformers.Transformer`
### Execute
Triggers operations to take in response to a given log event.
Can persist data from logs, fetch and persist arbitrary data from outside services (e.g. contract state), or take any number of other actions. E.g.:
`func (cupTransformer *CupTransformer) Execute() error`
## Additional Requirements
Transformers must define log filters and create them so that relevant watched events can be identified and retrieved. E.g.:
```$xslt
{
Name: "CupsBite",
FromBlock: 0,
ToBlock: -1,
Address: "0x448a5065aebb8e423f0896e6c5d525c040f59af3",
Topics: core.Topics{"0x40cc885400000000000000000000000000000000000000000000000000000000"},
},
```
-23
View File
@@ -1,23 +0,0 @@
package shared
import (
"github.com/ethereum/go-ethereum/common"
"github.com/vulcanize/vulcanizedb/pkg/core"
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
)
type Transformer interface {
Execute() error
}
type TransformerInitializer func(db *postgres.DB, blockchain core.BlockChain) Transformer
func HexToInt64(byteString string) int64 {
value := common.HexToHash(byteString)
return value.Big().Int64()
}
func HexToString(byteString string) string {
value := common.HexToHash(byteString)
return value.Big().String()
}
+3 -2
View File
@@ -3,15 +3,16 @@ package shared
import (
"github.com/vulcanize/vulcanizedb/pkg/core"
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
"github.com/vulcanize/vulcanizedb/pkg/transformers/shared"
)
type Watcher struct {
Transformers []Transformer
Transformers []shared.Transformer
DB postgres.DB
Blockchain core.BlockChain
}
func (watcher *Watcher) AddTransformers(us []TransformerInitializer) {
func (watcher *Watcher) AddTransformers(us []shared.TransformerInitializer) {
for _, transformerInitializer := range us {
transformer := transformerInitializer(&watcher.DB, watcher.Blockchain)
watcher.Transformers = append(watcher.Transformers, transformer)
+7 -6
View File
@@ -8,6 +8,7 @@ import (
"github.com/vulcanize/vulcanizedb/libraries/shared"
"github.com/vulcanize/vulcanizedb/pkg/core"
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
shared2 "github.com/vulcanize/vulcanizedb/pkg/transformers/shared"
)
type MockTransformer struct {
@@ -23,7 +24,7 @@ func (mh *MockTransformer) Execute() error {
return nil
}
func fakeTransformerInitializer(db *postgres.DB, blockchain core.BlockChain) shared.Transformer {
func fakeTransformerInitializer(db *postgres.DB, blockchain core.BlockChain) shared2.Transformer {
return &MockTransformer{}
}
@@ -31,7 +32,7 @@ var _ = Describe("Watcher", func() {
It("Adds transformers", func() {
watcher := shared.Watcher{}
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared2.TransformerInitializer{fakeTransformerInitializer})
Expect(len(watcher.Transformers)).To(Equal(1))
Expect(watcher.Transformers).To(ConsistOf(&MockTransformer{}))
@@ -40,8 +41,8 @@ var _ = Describe("Watcher", func() {
It("Adds transformers from multiple sources", func() {
watcher := shared.Watcher{}
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared2.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared2.TransformerInitializer{fakeTransformerInitializer})
Expect(len(watcher.Transformers)).To(Equal(2))
})
@@ -49,7 +50,7 @@ var _ = Describe("Watcher", func() {
It("Executes each transformer", func() {
watcher := shared.Watcher{}
fakeTransformer := &MockTransformer{}
watcher.Transformers = []shared.Transformer{fakeTransformer}
watcher.Transformers = []shared2.Transformer{fakeTransformer}
watcher.Execute()
@@ -59,7 +60,7 @@ var _ = Describe("Watcher", func() {
It("Returns an error if transformer returns an error", func() {
watcher := shared.Watcher{}
fakeTransformer := &MockTransformer{executeError: errors.New("Something bad happened")}
watcher.Transformers = []shared.Transformer{fakeTransformer}
watcher.Transformers = []shared2.Transformer{fakeTransformer}
err := watcher.Execute()