change transformer interface and watcher so that contract config is now fed into AddTransformers such that a single watcher can be loaded with transformers that use different cofigs

This commit is contained in:
Ian Norden
2018-11-03 13:49:24 -05:00
parent 44177e0772
commit 57820ff473
22 changed files with 352 additions and 73 deletions
+17
View File
@@ -0,0 +1,17 @@
package shared
import (
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/vulcanize/vulcanizedb/pkg/filters"
)
type ContractConfig struct {
Address string
Owner string
Abi string
ParsedAbi abi.ABI
FirstBlock int64
LastBlock int64
Name string
Filters []filters.LogFilter
}
+1 -1
View File
@@ -10,7 +10,7 @@ type Transformer interface {
Execute() error
}
type TransformerInitializer func(db *postgres.DB, blockchain core.BlockChain) Transformer
type TransformerInitializer func(db *postgres.DB, blockchain core.BlockChain, con ContractConfig) (Transformer, error)
func HexToInt64(byteString string) int64 {
value := common.HexToHash(byteString)
+7 -2
View File
@@ -11,11 +11,16 @@ type Watcher struct {
Blockchain core.BlockChain
}
func (watcher *Watcher) AddTransformers(us []TransformerInitializer) {
func (watcher *Watcher) AddTransformers(us []TransformerInitializer, con ContractConfig) error {
for _, transformerInitializer := range us {
transformer := transformerInitializer(&watcher.DB, watcher.Blockchain)
transformer, err := transformerInitializer(&watcher.DB, watcher.Blockchain, con)
if err != nil {
return err
}
watcher.Transformers = append(watcher.Transformers, transformer)
}
return nil
}
func (watcher *Watcher) Execute() error {
+7 -5
View File
@@ -23,15 +23,16 @@ func (mh *MockTransformer) Execute() error {
return nil
}
func fakeTransformerInitializer(db *postgres.DB, blockchain core.BlockChain) shared.Transformer {
return &MockTransformer{}
func fakeTransformerInitializer(db *postgres.DB, blockchain core.BlockChain, con shared.ContractConfig) (shared.Transformer, error) {
return &MockTransformer{}, nil
}
var _ = Describe("Watcher", func() {
It("Adds transformers", func() {
watcher := shared.Watcher{}
con := shared.ContractConfig{}
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer}, con)
Expect(len(watcher.Transformers)).To(Equal(1))
Expect(watcher.Transformers).To(ConsistOf(&MockTransformer{}))
@@ -39,9 +40,10 @@ var _ = Describe("Watcher", func() {
It("Adds transformers from multiple sources", func() {
watcher := shared.Watcher{}
con := shared.ContractConfig{}
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer})
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer}, con)
watcher.AddTransformers([]shared.TransformerInitializer{fakeTransformerInitializer}, con)
Expect(len(watcher.Transformers)).To(Equal(2))
})