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  }