github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/eth/tracers/tracers.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:39</date> 10 //</624342638417416192> 11 12 13 //包跟踪程序是JavaScript事务跟踪程序的集合。 14 package tracers 15 16 import ( 17 "strings" 18 "unicode" 19 20 "github.com/ethereum/go-ethereum/eth/tracers/internal/tracers" 21 ) 22 23 //全部按名称包含所有内置的javascript跟踪程序。 24 var all = make(map[string]string) 25 26 //camel将snake-cased输入字符串转换为camel-cased输出。 27 func camel(str string) string { 28 pieces := strings.Split(str, "_") 29 for i := 1; i < len(pieces); i++ { 30 pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] 31 } 32 return strings.Join(pieces, "") 33 } 34 35 //init检索go-ethereum中包含的javascript事务跟踪程序。 36 func init() { 37 for _, file := range tracers.AssetNames() { 38 name := camel(strings.TrimSuffix(file, ".js")) 39 all[name] = string(tracers.MustAsset(file)) 40 } 41 } 42 43 //跟踪程序按名称检索特定的javascript跟踪程序。 44 func tracer(name string) (string, bool) { 45 if tracer, ok := all[name]; ok { 46 return tracer, true 47 } 48 return "", false 49 } 50