forked from cerc-io/ipld-eth-server
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:
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user