github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/qct/tracers/tracers.go (about) 1 // Package tracers is a collection of JavaScript transaction tracers. 2 package tracers 3 4 import ( 5 "strings" 6 "unicode" 7 8 "github.com/quickchainproject/quickchain/qct/tracers/internal/tracers" 9 ) 10 11 // all contains all the built in JavaScript tracers by name. 12 var all = make(map[string]string) 13 14 // camel converts a snake cased input string into a camel cased output. 15 func camel(str string) string { 16 pieces := strings.Split(str, "_") 17 for i := 1; i < len(pieces); i++ { 18 pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] 19 } 20 return strings.Join(pieces, "") 21 } 22 23 // init retrieves the JavaScript transaction tracers included in quickchain. 24 func init() { 25 for _, file := range tracers.AssetNames() { 26 name := camel(strings.TrimSuffix(file, ".js")) 27 all[name] = string(tracers.MustAsset(file)) 28 } 29 } 30 31 // tracer retrieves a specific JavaScript tracer by name. 32 func tracer(name string) (string, bool) { 33 if tracer, ok := all[name]; ok { 34 return tracer, true 35 } 36 return "", false 37 }