github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/vent/sqlsol/generate.go (about) 1 package sqlsol 2 3 import ( 4 "fmt" 5 6 "github.com/hyperledger/burrow/execution/evm/abi" 7 "github.com/hyperledger/burrow/vent/types" 8 ) 9 10 // GenerateSpecFromAbis creates a simple spec which just logs all events 11 func GenerateSpecFromAbis(spec *abi.Spec) ([]*types.EventClass, error) { 12 type field struct { 13 Type abi.EVMType 14 Events []string 15 } 16 17 fields := make(map[string]field) 18 19 for _, ev := range spec.EventsByID { 20 for _, in := range ev.Inputs { 21 field, ok := fields[in.Name] 22 if ok { 23 if field.Type != in.EVM { 24 if field.Type.ImplicitCast(in.EVM) { 25 field.Type = in.EVM 26 } else if !in.EVM.ImplicitCast(field.Type) { 27 fmt.Printf("WARNING: field %s in event %s has different definitions in events %v (%s rather than %s)\n", in.Name, ev.Name, field.Events, field.Type, in.EVM) 28 } 29 } else { 30 field.Events = append(field.Events, ev.Name) 31 } 32 } else { 33 field.Type = in.EVM 34 field.Events = []string{ev.Name} 35 } 36 fields[in.Name] = field 37 } 38 } 39 40 ev := types.EventClass{ 41 TableName: "event", 42 Filter: "EventType = 'LogEvent'", 43 FieldMappings: make([]*types.EventFieldMapping, len(fields)), 44 } 45 46 i := 0 47 48 for name, field := range fields { 49 ev.FieldMappings[i] = &types.EventFieldMapping{ 50 Field: name, 51 ColumnName: name, 52 Type: field.Type.GetSignature(), 53 Primary: false, 54 } 55 i++ 56 } 57 58 return []*types.EventClass{&ev}, nil 59 }