Vat.fold: add converter & tests
This commit is contained in:
parent
ce4d928fb8
commit
b3295e3a86
53
pkg/transformers/test_data/vat_fold.go
Normal file
53
pkg/transformers/test_data/vat_fold.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright 2018 Vulcanize
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package test_data
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
|
||||||
|
"github.com/vulcanize/vulcanizedb/pkg/transformers/shared"
|
||||||
|
"github.com/vulcanize/vulcanizedb/pkg/transformers/vat_fold"
|
||||||
|
)
|
||||||
|
|
||||||
|
var EthVatFoldLog = types.Log{
|
||||||
|
Address: common.HexToAddress(shared.VatContractAddress),
|
||||||
|
Topics: []common.Hash{
|
||||||
|
common.HexToHash("0xe6a6a64d00000000000000000000000000000000000000000000000000000000"),
|
||||||
|
common.HexToHash("0x00000000000000000000000007Fa9eF6609cA7921112231F8f195138ebbA2977"),
|
||||||
|
common.HexToHash("0x00000000000000000000000064d922894153be9eef7b7218dc565d1d0ce2a092"),
|
||||||
|
common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000002"),
|
||||||
|
},
|
||||||
|
Data: hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000243b66319566616b6520696c6b000000000000000000000000000000000000000000000000"),
|
||||||
|
BlockNumber: 72,
|
||||||
|
TxHash: common.HexToHash("0xe8f39fbb7fea3621f543868f19b1114e305aff6a063a30d32835ff1012526f91"),
|
||||||
|
TxIndex: 8,
|
||||||
|
BlockHash: common.HexToHash("0xe3dd2e05bd8b92833e20ed83e2171bbc06a9ec823232eca1730a807bd8f5edc0"),
|
||||||
|
Index: 5,
|
||||||
|
Removed: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
var rawVatFoldLog, _ = json.Marshal(EthVatFoldLog)
|
||||||
|
var VatFoldModel = vat_fold.VatFoldModel{
|
||||||
|
Ilk: string(bytes.Trim(EthVatFoldLog.Topics[1].Bytes(), "\x00")),
|
||||||
|
Urn: string(bytes.Trim(EthVatFoldLog.Topics[2].Bytes(), "\x00")),
|
||||||
|
Rate: string(bytes.Trim(EthVatFoldLog.Topics[3].Bytes(), "\x00")),
|
||||||
|
TransactionIndex: EthVatFoldLog.TxIndex,
|
||||||
|
Raw: rawVatFoldLog,
|
||||||
|
}
|
57
pkg/transformers/vat_fold/converter.go
Normal file
57
pkg/transformers/vat_fold/converter.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2018 Vulcanize
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package vat_fold
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Converter interface {
|
||||||
|
ToModel(ethLog types.Log) (VatFoldModel, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type VatFoldConverter struct{}
|
||||||
|
|
||||||
|
func (VatFoldConverter) ToModel(ethLog types.Log) (VatFoldModel, error) {
|
||||||
|
err := verifyLog(ethLog)
|
||||||
|
if err != nil {
|
||||||
|
return VatFoldModel{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ilk := string(bytes.Trim(ethLog.Topics[1].Bytes(), "\x00"))
|
||||||
|
urn := string(bytes.Trim(ethLog.Topics[2].Bytes(), "\x00"))
|
||||||
|
rate := string(bytes.Trim(ethLog.Topics[3].Bytes(), "\x00"))
|
||||||
|
raw, err := json.Marshal(ethLog)
|
||||||
|
|
||||||
|
return VatFoldModel{
|
||||||
|
Ilk: ilk,
|
||||||
|
Urn: urn,
|
||||||
|
Rate: rate,
|
||||||
|
TransactionIndex: ethLog.TxIndex,
|
||||||
|
Raw: raw,
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func verifyLog(log types.Log) error {
|
||||||
|
if len(log.Topics) < 4 {
|
||||||
|
return errors.New("log missing topics")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
44
pkg/transformers/vat_fold/converter_test.go
Normal file
44
pkg/transformers/vat_fold/converter_test.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// Copyright 2018 Vulcanize
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package vat_fold_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
|
"github.com/vulcanize/vulcanizedb/pkg/transformers/test_data"
|
||||||
|
"github.com/vulcanize/vulcanizedb/pkg/transformers/vat_fold"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("Vat fold converter", func() {
|
||||||
|
It("returns err if log missing topics", func() {
|
||||||
|
converter := vat_fold.VatFoldConverter{}
|
||||||
|
badLog := types.Log{}
|
||||||
|
|
||||||
|
_, err := converter.ToModel(badLog)
|
||||||
|
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("converts a log to an model", func() {
|
||||||
|
converter := vat_fold.VatFoldConverter{}
|
||||||
|
|
||||||
|
model, err := converter.ToModel(test_data.EthVatFoldLog)
|
||||||
|
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(model).To(Equal(test_data.VatFoldModel))
|
||||||
|
})
|
||||||
|
})
|
9
pkg/transformers/vat_fold/model.go
Normal file
9
pkg/transformers/vat_fold/model.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package vat_fold
|
||||||
|
|
||||||
|
type VatFoldModel struct {
|
||||||
|
Ilk string
|
||||||
|
Urn string
|
||||||
|
Rate string
|
||||||
|
TransactionIndex uint `db:"tx_idx"`
|
||||||
|
Raw []byte `db:"raw_log"`
|
||||||
|
}
|
19
pkg/transformers/vat_fold/vat_fold_suite_test.go
Normal file
19
pkg/transformers/vat_fold/vat_fold_suite_test.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package vat_fold_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestVatFold(t *testing.T) {
|
||||||
|
RegisterFailHandler(Fail)
|
||||||
|
RunSpecs(t, "VatFold Suite")
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = BeforeSuite(func() {
|
||||||
|
log.SetOutput(ioutil.Discard)
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user