094519d058
only some necessary apis are implemented.
98 lines
1.6 KiB
Go
98 lines
1.6 KiB
Go
package fakebeacon
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/ethapi"
|
|
"github.com/gorilla/mux"
|
|
"github.com/prysmaticlabs/prysm/v5/api/server"
|
|
)
|
|
|
|
const (
|
|
DefaultAddr = "localhost"
|
|
DefaultPort = 8686
|
|
)
|
|
|
|
type Config struct {
|
|
Enable bool
|
|
Addr string
|
|
Port int
|
|
}
|
|
|
|
func defaultConfig() *Config {
|
|
return &Config{
|
|
Enable: false,
|
|
Addr: DefaultAddr,
|
|
Port: DefaultPort,
|
|
}
|
|
}
|
|
|
|
type Service struct {
|
|
cfg *Config
|
|
router *mux.Router
|
|
backend ethapi.Backend
|
|
}
|
|
|
|
func NewService(cfg *Config, backend ethapi.Backend) *Service {
|
|
cfgs := defaultConfig()
|
|
if cfg.Addr != "" {
|
|
cfgs.Addr = cfg.Addr
|
|
}
|
|
if cfg.Port > 0 {
|
|
cfgs.Port = cfg.Port
|
|
}
|
|
|
|
s := &Service{
|
|
cfg: cfgs,
|
|
backend: backend,
|
|
}
|
|
router := s.newRouter()
|
|
s.router = router
|
|
return s
|
|
}
|
|
|
|
func (s *Service) Run() {
|
|
_ = http.ListenAndServe(s.cfg.Addr+":"+strconv.Itoa(s.cfg.Port), s.router)
|
|
}
|
|
|
|
func (s *Service) newRouter() *mux.Router {
|
|
r := mux.NewRouter()
|
|
r.Use(server.NormalizeQueryValuesHandler)
|
|
for _, e := range s.endpoints() {
|
|
r.HandleFunc(e.path, e.handler).Methods(e.methods...)
|
|
}
|
|
return r
|
|
}
|
|
|
|
type endpoint struct {
|
|
path string
|
|
handler http.HandlerFunc
|
|
methods []string
|
|
}
|
|
|
|
func (s *Service) endpoints() []endpoint {
|
|
return []endpoint{
|
|
{
|
|
path: versionMethod,
|
|
handler: VersionMethod,
|
|
methods: []string{http.MethodGet},
|
|
},
|
|
{
|
|
path: specMethod,
|
|
handler: SpecMethod,
|
|
methods: []string{http.MethodGet},
|
|
},
|
|
{
|
|
path: genesisMethod,
|
|
handler: GenesisMethod,
|
|
methods: []string{http.MethodGet},
|
|
},
|
|
{
|
|
path: sidecarsMethodPrefix,
|
|
handler: s.SidecarsMethod,
|
|
methods: []string{http.MethodGet},
|
|
},
|
|
}
|
|
}
|