Verify pit file logs

- assure required topics + data available before parsing
This commit is contained in:
Rob Mulholand
2018-09-11 16:30:29 -05:00
parent dc9bda7d68
commit 4b6ef1e58b
16 changed files with 127 additions and 46 deletions
@@ -18,17 +18,22 @@ import (
"bytes"
"encoding/json"
"errors"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
)
type Converter interface {
ToModel(contractAddress string, contractAbi string, ethLog types.Log) (PitFileStabilityFeeModel, error)
ToModel(ethLog types.Log) (PitFileStabilityFeeModel, error)
}
type PitFileStabilityFeeConverter struct{}
func (PitFileStabilityFeeConverter) ToModel(contractAddress string, contractAbi string, ethLog types.Log) (PitFileStabilityFeeModel, error) {
func (PitFileStabilityFeeConverter) ToModel(ethLog types.Log) (PitFileStabilityFeeModel, error) {
err := verifyLog(ethLog)
if err != nil {
return PitFileStabilityFeeModel{}, err
}
what := string(bytes.Trim(ethLog.Topics[2].Bytes(), "\x00"))
data := common.HexToAddress(ethLog.Topics[1].String()).Hex()
@@ -40,3 +45,10 @@ func (PitFileStabilityFeeConverter) ToModel(contractAddress string, contractAbi
Raw: raw,
}, err
}
func verifyLog(log types.Log) error {
if len(log.Topics) < 3 {
return errors.New("log missing topics")
}
return nil
}
@@ -18,16 +18,25 @@ import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/ethereum/go-ethereum/core/types"
"github.com/vulcanize/vulcanizedb/pkg/transformers/pit_file/stability_fee"
"github.com/vulcanize/vulcanizedb/pkg/transformers/shared"
"github.com/vulcanize/vulcanizedb/pkg/transformers/test_data"
)
var _ = Describe("Pit file stability fee converter", func() {
It("returns err if log is missing topics", func() {
converter := stability_fee.PitFileStabilityFeeConverter{}
badLog := types.Log{}
_, err := converter.ToModel(badLog)
Expect(err).To(HaveOccurred())
})
It("converts a log to an model", func() {
converter := stability_fee.PitFileStabilityFeeConverter{}
model, err := converter.ToModel(shared.PitContractAddress, shared.PitABI, test_data.EthPitFileStabilityFeeLog)
model, err := converter.ToModel(test_data.EthPitFileStabilityFeeLog)
Expect(err).NotTo(HaveOccurred())
Expect(model).To(Equal(test_data.PitFileStabilityFeeModel))
@@ -58,7 +58,7 @@ func (transformer PitFileStabilityFeeTransformer) Execute() error {
return err
}
for _, log := range matchingLogs {
model, err := transformer.Converter.ToModel(pit_file.PitFileConfig.ContractAddress, shared.PitABI, log)
model, err := transformer.Converter.ToModel(log)
if err != nil {
return err
}
@@ -112,8 +112,6 @@ var _ = Describe("", func() {
err := transformer.Execute()
Expect(err).NotTo(HaveOccurred())
Expect(converter.PassedContractAddress).To(Equal(pit_file.PitFileConfig.ContractAddress))
Expect(converter.PassedContractABI).To(Equal(pit_file.PitFileConfig.ContractAbi))
Expect(converter.PassedLog).To(Equal(test_data.EthPitFileStabilityFeeLog))
})