neo-go/pkg/core/native/nativehashes/gen.go
2024-05-14 09:39:53 +03:00

70 lines
1.5 KiB
Go

//go:build ignore
// This program generates hashes.go. It can be invoked by running
// go generate.
package main
import (
"fmt"
"log"
"os"
"text/template"
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
"github.com/nspcc-dev/neo-go/pkg/core/state"
)
// srcTmpl is a nativehashes package template.
const srcTmpl = `// Code generated by "go generate go run gen.go"; DO NOT EDIT.
//go:generate go run gen.go
// package nativehashes contains hashes of all native contracts in their LE and Uint160 representation.
package nativehashes
import "github.com/nspcc-dev/neo-go/pkg/util"
// Hashes of all native contracts.
var (
{{- range .Natives }}
// {{ .Name }} is a hash of native {{ .Name }} contract.
{{ .Name }} = {{ .Hash }}
{{- end }}
)
`
type (
// Config contains parameters for the nativehashes package generation.
Config struct {
Natives []NativeInfo
}
// NativeInfo contains information about native contract needed for
// nativehashes package generation.
NativeInfo struct {
Name string
Hash string
}
)
// srcTemplate is a parsed nativehashes package template.
var srcTemplate = template.Must(template.New("nativehashes").Parse(srcTmpl))
func main() {
f, err := os.Create("hashes.go")
if err != nil {
log.Fatal(err)
}
defer f.Close()
var cfg = Config{Natives: make([]NativeInfo, len(nativenames.All))}
for i, name := range nativenames.All {
var hash = state.CreateNativeContractHash(name)
cfg.Natives[i] = NativeInfo{
Name: name,
Hash: fmt.Sprintf("%#v", hash),
}
}
srcTemplate.Execute(f, cfg)
}