/
converter.go
80 lines (67 loc) · 2.49 KB
/
converter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// VulcanizeDB
// Copyright © 2019 Vulcanize
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package vat_fork
import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/vulcanize/mcd_transformers/transformers/shared"
"github.com/vulcanize/mcd_transformers/transformers/shared/constants"
"github.com/vulcanize/vulcanizedb/pkg/core"
)
type VatForkConverter struct{}
const (
logDataRequired = true
numTopicsRequired = 4
)
func (VatForkConverter) ToModels(_ string, logs []core.HeaderSyncLog) ([]shared.InsertionModel, error) {
var models []shared.InsertionModel
for _, log := range logs {
err := shared.VerifyLog(log.Log, numTopicsRequired, logDataRequired)
if err != nil {
return nil, err
}
ilk := log.Log.Topics[1].Hex()
src := common.BytesToAddress(log.Log.Topics[2].Bytes()).String()
dst := common.BytesToAddress(log.Log.Topics[3].Bytes()).String()
dinkBytes, dinkErr := shared.GetLogNoteArgumentAtIndex(3, log.Log.Data)
if dinkErr != nil {
return nil, dinkErr
}
dink := shared.ConvertInt256HexToBigInt(hexutil.Encode(dinkBytes))
dartBytes, dartErr := shared.GetLogNoteArgumentAtIndex(4, log.Log.Data)
if dartErr != nil {
return nil, dartErr
}
dart := shared.ConvertInt256HexToBigInt(hexutil.Encode(dartBytes))
model := shared.InsertionModel{
SchemaName: "maker",
TableName: "vat_fork",
OrderedColumns: []string{
constants.HeaderFK, string(constants.IlkFK), "src", "dst", "dink", "dart", constants.LogFK,
},
ColumnValues: shared.ColumnValues{
"src": src,
"dst": dst,
"dink": dink.String(),
"dart": dart.String(),
constants.HeaderFK: log.HeaderID,
constants.LogFK: log.ID,
},
ForeignKeyValues: shared.ForeignKeyValues{
constants.IlkFK: ilk,
},
}
models = append(models, model)
}
return models, nil
}