From 8d4d4d802ca180f78aad760c6dbdaa239b0858b8 Mon Sep 17 00:00:00 2001 From: a Date: Sun, 14 Jan 2024 23:22:34 -0600 Subject: [PATCH] refac some (#9185) --- cl/beacon/beaconhttp/api.go | 1 - cl/beacon/beaconhttp/args.go | 176 ++ cl/beacon/beaconhttp/beacon_response.go | 95 + cl/beacon/beacontest/errors.go | 8 + cl/beacon/beacontest/harness.go | 436 ++++ cl/beacon/beacontest/harness_test.go | 19 + cl/beacon/beacontest/harness_test_data.yml | 62 + cl/beacon/beacontest/linux_basepathfs.go | 252 +++ cl/beacon/handler/attestation_rewards.go | 8 +- cl/beacon/handler/attestation_rewards_test.go | 152 -- cl/beacon/handler/blocks.go | 51 +- cl/beacon/handler/blocks_test.go | 254 --- cl/beacon/handler/builder.go | 8 +- cl/beacon/handler/commitees_test.go | 169 -- cl/beacon/handler/committees.go | 14 +- cl/beacon/handler/config.go | 7 +- cl/beacon/handler/config_test.go | 83 - cl/beacon/handler/data_test.go | 98 + cl/beacon/handler/duties_attester.go | 10 +- cl/beacon/handler/duties_attester_test.go | 153 -- cl/beacon/handler/duties_proposer.go | 8 +- cl/beacon/handler/duties_proposer_test.go | 114 - cl/beacon/handler/duties_sync.go | 8 +- cl/beacon/handler/duties_sync_test.go | 87 - cl/beacon/handler/forkchoice.go | 2 +- cl/beacon/handler/forkchoice_test.go | 80 - cl/beacon/handler/format.go | 237 +- cl/beacon/handler/genesis.go | 2 +- cl/beacon/handler/genesis_test.go | 35 - cl/beacon/handler/handler.go | 5 + .../harness/attestation_rewards_bellatrix.yml | 31 + .../harness/attestation_rewards_phase0.yml | 33 + cl/beacon/handler/harness/blocks.yml | 100 + cl/beacon/handler/harness/committees.yml | 55 + cl/beacon/handler/harness/committees_f.yml | 55 + cl/beacon/handler/harness/config.yml | 32 + cl/beacon/handler/harness/duties_attester.yml | 45 + .../handler/harness/duties_attester_f.yml | 45 + cl/beacon/handler/harness/duties_proposer.yml | 42 + .../handler/harness/duties_sync_bellatrix.yml | 43 + cl/beacon/handler/harness/fork_choice.yml | 24 + cl/beacon/handler/harness/headers.yml | 38 + cl/beacon/handler/harness/liveness.yml | 13 + cl/beacon/handler/harness_test.go | 53 + cl/beacon/handler/headers.go | 12 +- cl/beacon/handler/headers_test.go | 180 -- cl/beacon/handler/liveness.go | 4 +- cl/beacon/handler/liveness_test.go | 62 - cl/beacon/handler/node.go | 4 +- cl/beacon/handler/node_test.go | 71 - cl/beacon/handler/pool.go | 14 +- cl/beacon/handler/pool_test.go | 248 --- cl/beacon/handler/rewards.go | 14 +- cl/beacon/handler/rewards_test.go | 142 -- cl/beacon/handler/states.go | 62 +- cl/beacon/handler/states_test.go | 504 ----- .../handler/test_data/attestations_1.json | 1 + .../handler/test_data/attestations_2.json | 1 + .../handler/test_data/attestations_3.json | 1 + .../handler/test_data/attestations_4.json | 1 + .../handler/test_data/blinded_block_1.json | 1975 +++++++++++++++++ cl/beacon/handler/test_data/block_1.json | 1974 ++++++++++++++++ cl/beacon/handler/test_data/committees_1.yaml | 6 + cl/beacon/handler/test_data/duties_1.yaml | 2 + .../handler/test_data/duties_sync_1.yaml | 2 + cl/beacon/handler/test_data/forkchoice_1.yaml | 2 + cl/beacon/handler/test_data/rewards_1.yaml | 3 + cl/beacon/handler/test_data/rewards_2.json | 1 + cl/beacon/handler/test_data/states_1.yaml | 2 + .../handler/test_data/sync_committees_1.json | 1 + cl/beacon/handler/test_data/validators_1.yaml | 9 + cl/beacon/handler/utils_test.go | 11 +- cl/beacon/handler/validators.go | 42 +- cl/beacon/handler/validators_test.go | 201 -- go.mod | 13 + go.sum | 34 + 76 files changed, 5933 insertions(+), 2909 deletions(-) create mode 100644 cl/beacon/beaconhttp/args.go create mode 100644 cl/beacon/beaconhttp/beacon_response.go create mode 100644 cl/beacon/beacontest/errors.go create mode 100644 cl/beacon/beacontest/harness.go create mode 100644 cl/beacon/beacontest/harness_test.go create mode 100644 cl/beacon/beacontest/harness_test_data.yml create mode 100644 cl/beacon/beacontest/linux_basepathfs.go delete mode 100644 cl/beacon/handler/attestation_rewards_test.go delete mode 100644 cl/beacon/handler/blocks_test.go delete mode 100644 cl/beacon/handler/commitees_test.go delete mode 100644 cl/beacon/handler/config_test.go create mode 100644 cl/beacon/handler/data_test.go delete mode 100644 cl/beacon/handler/duties_attester_test.go delete mode 100644 cl/beacon/handler/duties_proposer_test.go delete mode 100644 cl/beacon/handler/duties_sync_test.go delete mode 100644 cl/beacon/handler/forkchoice_test.go delete mode 100644 cl/beacon/handler/genesis_test.go create mode 100644 cl/beacon/handler/harness/attestation_rewards_bellatrix.yml create mode 100644 cl/beacon/handler/harness/attestation_rewards_phase0.yml create mode 100644 cl/beacon/handler/harness/blocks.yml create mode 100644 cl/beacon/handler/harness/committees.yml create mode 100644 cl/beacon/handler/harness/committees_f.yml create mode 100644 cl/beacon/handler/harness/config.yml create mode 100644 cl/beacon/handler/harness/duties_attester.yml create mode 100644 cl/beacon/handler/harness/duties_attester_f.yml create mode 100644 cl/beacon/handler/harness/duties_proposer.yml create mode 100644 cl/beacon/handler/harness/duties_sync_bellatrix.yml create mode 100644 cl/beacon/handler/harness/fork_choice.yml create mode 100644 cl/beacon/handler/harness/headers.yml create mode 100644 cl/beacon/handler/harness/liveness.yml create mode 100644 cl/beacon/handler/harness_test.go delete mode 100644 cl/beacon/handler/headers_test.go delete mode 100644 cl/beacon/handler/liveness_test.go delete mode 100644 cl/beacon/handler/node_test.go delete mode 100644 cl/beacon/handler/pool_test.go delete mode 100644 cl/beacon/handler/rewards_test.go delete mode 100644 cl/beacon/handler/states_test.go create mode 100644 cl/beacon/handler/test_data/attestations_1.json create mode 100644 cl/beacon/handler/test_data/attestations_2.json create mode 100644 cl/beacon/handler/test_data/attestations_3.json create mode 100644 cl/beacon/handler/test_data/attestations_4.json create mode 100644 cl/beacon/handler/test_data/blinded_block_1.json create mode 100644 cl/beacon/handler/test_data/block_1.json create mode 100644 cl/beacon/handler/test_data/committees_1.yaml create mode 100644 cl/beacon/handler/test_data/duties_1.yaml create mode 100644 cl/beacon/handler/test_data/duties_sync_1.yaml create mode 100644 cl/beacon/handler/test_data/forkchoice_1.yaml create mode 100644 cl/beacon/handler/test_data/rewards_1.yaml create mode 100644 cl/beacon/handler/test_data/rewards_2.json create mode 100644 cl/beacon/handler/test_data/states_1.yaml create mode 100644 cl/beacon/handler/test_data/sync_committees_1.json create mode 100644 cl/beacon/handler/test_data/validators_1.yaml delete mode 100644 cl/beacon/handler/validators_test.go diff --git a/cl/beacon/beaconhttp/api.go b/cl/beacon/beaconhttp/api.go index 5beffa09f..6bc32c58d 100644 --- a/cl/beacon/beaconhttp/api.go +++ b/cl/beacon/beaconhttp/api.go @@ -73,7 +73,6 @@ func HandleEndpoint[T any](h EndpointHandler[T]) http.HandlerFunc { ans, err := h.Handle(w, r) log.Debug("beacon api request", "endpoint", r.URL.Path, "duration", time.Since(start)) if err != nil { - log.Error("beacon api request error", "err", err) var endpointError *EndpointError if e, ok := err.(*EndpointError); ok { endpointError = e diff --git a/cl/beacon/beaconhttp/args.go b/cl/beacon/beaconhttp/args.go new file mode 100644 index 000000000..1701620b0 --- /dev/null +++ b/cl/beacon/beaconhttp/args.go @@ -0,0 +1,176 @@ +package beaconhttp + +import ( + "fmt" + "net/http" + "regexp" + "strconv" + + "github.com/go-chi/chi/v5" + "github.com/ledgerwatch/erigon-lib/common" +) + +type chainTag int + +var ( + Head chainTag = 0 + Finalized chainTag = 1 + Justified chainTag = 2 + Genesis chainTag = 3 +) + +// Represent either state id or block id +type SegmentID struct { + tag chainTag + slot *uint64 + root *common.Hash +} + +func (c *SegmentID) Head() bool { + return c.tag == Head && c.slot == nil && c.root == nil +} + +func (c *SegmentID) Finalized() bool { + return c.tag == Finalized +} + +func (c *SegmentID) Justified() bool { + return c.tag == Justified +} + +func (c *SegmentID) Genesis() bool { + return c.tag == Genesis +} + +func (c *SegmentID) GetSlot() *uint64 { + return c.slot +} + +func (c *SegmentID) GetRoot() *common.Hash { + return c.root +} + +func EpochFromRequest(r *http.Request) (uint64, error) { + // Must only be a number + regex := regexp.MustCompile(`^\d+$`) + epoch := chi.URLParam(r, "epoch") + if !regex.MatchString(epoch) { + return 0, fmt.Errorf("invalid path variable: {epoch}") + } + epochMaybe, err := strconv.ParseUint(epoch, 10, 64) + if err != nil { + return 0, err + } + return epochMaybe, nil +} + +func StringFromRequest(r *http.Request, name string) (string, error) { + str := chi.URLParam(r, name) + if str == "" { + return "", nil + } + return str, nil +} + +func BlockIdFromRequest(r *http.Request) (*SegmentID, error) { + regex := regexp.MustCompile(`^(?:0x[0-9a-fA-F]{64}|head|finalized|genesis|\d+)$`) + + blockId := chi.URLParam(r, "block_id") + if !regex.MatchString(blockId) { + return nil, fmt.Errorf("invalid path variable: {block_id}") + } + + if blockId == "head" { + return &SegmentID{tag: Head}, nil + } + if blockId == "finalized" { + return &SegmentID{tag: Finalized}, nil + } + if blockId == "genesis" { + return &SegmentID{tag: Genesis}, nil + } + slotMaybe, err := strconv.ParseUint(blockId, 10, 64) + if err == nil { + return &SegmentID{slot: &slotMaybe}, nil + } + root := common.HexToHash(blockId) + return &SegmentID{ + root: &root, + }, nil +} + +func StateIdFromRequest(r *http.Request) (*SegmentID, error) { + regex := regexp.MustCompile(`^(?:0x[0-9a-fA-F]{64}|head|finalized|genesis|justified|\d+)$`) + + stateId := chi.URLParam(r, "state_id") + if !regex.MatchString(stateId) { + return nil, fmt.Errorf("invalid path variable: {state_id}") + } + + if stateId == "head" { + return &SegmentID{tag: Head}, nil + } + if stateId == "finalized" { + return &SegmentID{tag: Finalized}, nil + } + if stateId == "genesis" { + return &SegmentID{tag: Genesis}, nil + } + if stateId == "justified" { + return &SegmentID{tag: Justified}, nil + } + slotMaybe, err := strconv.ParseUint(stateId, 10, 64) + if err == nil { + return &SegmentID{slot: &slotMaybe}, nil + } + root := common.HexToHash(stateId) + return &SegmentID{ + root: &root, + }, nil +} + +func HashFromQueryParams(r *http.Request, name string) (*common.Hash, error) { + hashStr := r.URL.Query().Get(name) + if hashStr == "" { + return nil, nil + } + // check if hashstr is an hex string + if len(hashStr) != 2+2*32 { + return nil, fmt.Errorf("invalid hash length") + } + if hashStr[:2] != "0x" { + return nil, fmt.Errorf("invalid hash prefix") + } + notHex, err := regexp.MatchString("[^0-9A-Fa-f]", hashStr[2:]) + if err != nil { + return nil, err + } + if notHex { + return nil, fmt.Errorf("invalid hash characters") + } + + hash := common.HexToHash(hashStr) + return &hash, nil +} + +// uint64FromQueryParams retrieves a number from the query params, in base 10. +func Uint64FromQueryParams(r *http.Request, name string) (*uint64, error) { + str := r.URL.Query().Get(name) + if str == "" { + return nil, nil + } + num, err := strconv.ParseUint(str, 10, 64) + if err != nil { + return nil, err + } + return &num, nil +} + +// decode a list of strings from the query params +func StringListFromQueryParams(r *http.Request, name string) ([]string, error) { + str := r.URL.Query().Get(name) + if str == "" { + return nil, nil + } + return regexp.MustCompile(`\s*,\s*`).Split(str, -1), nil +} diff --git a/cl/beacon/beaconhttp/beacon_response.go b/cl/beacon/beaconhttp/beacon_response.go new file mode 100644 index 000000000..c0e340915 --- /dev/null +++ b/cl/beacon/beaconhttp/beacon_response.go @@ -0,0 +1,95 @@ +package beaconhttp + +import ( + "encoding/json" + "net/http" + + "github.com/ledgerwatch/erigon-lib/types/ssz" + "github.com/ledgerwatch/erigon/cl/clparams" +) + +type BeaconResponse struct { + Data any + Finalized *bool + Version *clparams.StateVersion + ExecutionOptimistic *bool + + Extra map[string]any +} + +func NewBeaconResponse(data any) *BeaconResponse { + return &BeaconResponse{ + Data: data, + } +} + +func (r *BeaconResponse) With(key string, value any) (out *BeaconResponse) { + out = new(BeaconResponse) + *out = *r + out.Extra[key] = value + return out +} + +func (r *BeaconResponse) WithFinalized(finalized bool) (out *BeaconResponse) { + out = new(BeaconResponse) + *out = *r + out.Finalized = new(bool) + out.ExecutionOptimistic = new(bool) + out.Finalized = &finalized + return out +} + +func (r *BeaconResponse) WithOptimistic(optimistic bool) (out *BeaconResponse) { + out = new(BeaconResponse) + *out = *r + out.ExecutionOptimistic = new(bool) + out.ExecutionOptimistic = &optimistic + return out +} + +func (r *BeaconResponse) WithVersion(version clparams.StateVersion) (out *BeaconResponse) { + out = new(BeaconResponse) + *out = *r + out.Version = new(clparams.StateVersion) + out.Version = &version + return out +} + +func (b *BeaconResponse) MarshalJSON() ([]byte, error) { + o := map[string]any{ + "data": b.Data, + } + if b.Finalized != nil { + o["finalized"] = *b.Finalized + } + if b.Version != nil { + o["version"] = *b.Version + } + if b.ExecutionOptimistic != nil { + o["execution_optimistic"] = *b.ExecutionOptimistic + } + for k, v := range b.Extra { + o[k] = v + } + return json.Marshal(o) +} + +func (b *BeaconResponse) EncodeSSZ(xs []byte) ([]byte, error) { + marshaler, ok := b.Data.(ssz.Marshaler) + if !ok { + return nil, NewEndpointError(http.StatusBadRequest, "This endpoint does not support SSZ response") + } + encoded, err := marshaler.EncodeSSZ(nil) + if err != nil { + return nil, err + } + return encoded, nil +} + +func (b *BeaconResponse) EncodingSizeSSZ() int { + marshaler, ok := b.Data.(ssz.Marshaler) + if !ok { + return 9 + } + return marshaler.EncodingSizeSSZ() +} diff --git a/cl/beacon/beacontest/errors.go b/cl/beacon/beacontest/errors.go new file mode 100644 index 000000000..ecd79566f --- /dev/null +++ b/cl/beacon/beacontest/errors.go @@ -0,0 +1,8 @@ +package beacontest + +import "errors" + +var ( + ErrExpressionMustReturnBool = errors.New("cel expression must return bool") + ErrUnknownType = errors.New("unknown type") +) diff --git a/cl/beacon/beacontest/harness.go b/cl/beacon/beacontest/harness.go new file mode 100644 index 000000000..84287f465 --- /dev/null +++ b/cl/beacon/beacontest/harness.go @@ -0,0 +1,436 @@ +package beacontest + +import ( + "bytes" + "context" + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "net/url" + "os" + "reflect" + "strings" + "testing" + "text/template" + + "github.com/Masterminds/sprig/v3" + + "github.com/google/cel-go/cel" + "github.com/google/cel-go/common/types" + "github.com/spf13/afero" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "sigs.k8s.io/yaml" +) + +type HarnessOption func(*Harness) error + +func WithTesting(t *testing.T) func(*Harness) error { + return func(h *Harness) error { + h.t = t + return nil + } +} + +func WithTests(name string, xs []Test) func(*Harness) error { + return func(h *Harness) error { + h.tests[name] = xs + return nil + } +} + +func WithHandler(name string, handler http.Handler) func(*Harness) error { + return func(h *Harness) error { + h.handlers[name] = handler + return nil + } +} + +func WithFilesystem(name string, handler afero.Fs) func(*Harness) error { + return func(h *Harness) error { + h.fss[name] = handler + return nil + } +} +func WithTestFromFs(fs afero.Fs, name string) func(*Harness) error { + return func(h *Harness) error { + filename := name + for _, fn := range []string{name, name + ".yaml", name + ".yml", name + ".json"} { + // check if file exists + _, err := fs.Stat(fn) + if err == nil { + filename = fn + break + } + } + xs, err := afero.ReadFile(fs, filename) + if err != nil { + return err + } + return WithTestFromBytes(name, xs)(h) + } +} + +type Extra struct { + Vars map[string]any `json:"vars"` + + RawBodyZZZZ json.RawMessage `json:"tests"` +} + +func WithTestFromBytes(name string, xs []byte) func(*Harness) error { + return func(h *Harness) error { + var t struct { + T []Test `json:"tests"` + } + x := &Extra{} + s := md5.New() + s.Write(xs) + hsh := hex.EncodeToString(s.Sum(nil)) + // unmarshal just the extra data + err := yaml.Unmarshal(xs, &x, yaml.JSONOpt(func(d *json.Decoder) *json.Decoder { + return d + })) + if err != nil { + return err + } + tmpl := template.Must(template.New(hsh).Funcs(sprig.FuncMap()).Parse(string(xs))) + // execute the template using the extra data as the provided top level object + // we can use the original buffer as the output since the original buffer has already been copied when it was passed into template + buf := bytes.NewBuffer(xs) + buf.Reset() + err = tmpl.Execute(buf, x) + if err != nil { + return err + } + err = yaml.Unmarshal(buf.Bytes(), &t) + if err != nil { + return err + } + if len(t.T) == 0 { + return fmt.Errorf("suite with name %s had no tests", name) + } + h.tests[name] = t.T + return nil + } +} + +type Harness struct { + tests map[string][]Test + t *testing.T + + handlers map[string]http.Handler + fss map[string]afero.Fs +} + +func Execute(options ...HarnessOption) { + h := &Harness{ + handlers: map[string]http.Handler{}, + tests: map[string][]Test{}, + fss: map[string]afero.Fs{ + "": afero.NewOsFs(), + }, + } + for _, v := range options { + err := v(h) + if err != nil { + h.t.Error(err) + } + } + h.Execute() +} + +func (h *Harness) Execute() { + ctx := context.Background() + for suiteName, tests := range h.tests { + for idx, v := range tests { + v.Actual.h = h + v.Expect.h = h + name := v.Name + if name == "" { + name = "test" + } + fullname := fmt.Sprintf("%s_%s_%d", suiteName, name, idx) + h.t.Run(fullname, func(t *testing.T) { + err := v.Execute(ctx, t) + require.NoError(t, err) + }) + } + } +} + +type Test struct { + Name string `json:"name"` + Expect Source `json:"expect"` + Actual Source `json:"actual"` + Compare Comparison `json:"compare"` +} + +func (c *Test) Execute(ctx context.Context, t *testing.T) error { + a, aCode, err := c.Expect.Execute(ctx) + if err != nil { + return fmt.Errorf("get expect data: %w", err) + } + b, bCode, err := c.Actual.Execute(ctx) + if err != nil { + return fmt.Errorf("get actual data: %w", err) + } + err = c.Compare.Compare(t, a, b, aCode, bCode) + if err != nil { + return fmt.Errorf("compare: %w", err) + } + + return nil +} + +type Comparison struct { + Expr string `json:"expr"` + Exprs []string `json:"exprs"` + Literal bool `json:"literal"` +} + +func (c *Comparison) Compare(t *testing.T, aRaw, bRaw json.RawMessage, aCode, bCode int) error { + var err error + var a, b any + var aType, bType *types.Type + + if !c.Literal { + var aMap, bMap any + err = yaml.Unmarshal(aRaw, &aMap) + if err != nil { + return err + } + err = yaml.Unmarshal(bRaw, &bMap) + if err != nil { + return err + } + a = aMap + b = bMap + if a != nil { + switch reflect.TypeOf(a).Kind() { + case reflect.Slice: + aType = cel.ListType(cel.MapType(cel.StringType, cel.DynType)) + default: + aType = cel.MapType(cel.StringType, cel.DynType) + } + } else { + aType = cel.MapType(cel.StringType, cel.DynType) + } + if b != nil { + switch reflect.TypeOf(b).Kind() { + case reflect.Slice: + bType = cel.ListType(cel.MapType(cel.StringType, cel.DynType)) + default: + bType = cel.MapType(cel.StringType, cel.DynType) + } + } else { + bType = cel.MapType(cel.StringType, cel.DynType) + } + } else { + a = string(aRaw) + b = string(bRaw) + aType = cel.StringType + bType = cel.StringType + } + + exprs := []string{} + // if no default expr set and no exprs are set, then add the default expr + if len(c.Exprs) == 0 && c.Expr == "" { + exprs = append(exprs, "actual_code == 200", "actual == expect") + } + env, err := cel.NewEnv( + cel.Variable("expect", aType), + cel.Variable("actual", bType), + cel.Variable("expect_code", cel.IntType), + cel.Variable("actual_code", cel.IntType), + ) + if err != nil { + return err + } + + for _, expr := range append(c.Exprs, exprs...) { + ast, issues := env.Compile(expr) + if issues != nil && issues.Err() != nil { + return issues.Err() + } + prg, err := env.Program(ast) + if err != nil { + return fmt.Errorf("program construction error: %w", err) + } + res, _, err := prg.Eval(map[string]any{ + "expect": a, + "actual": b, + "expect_code": aCode, + "actual_code": bCode, + }) + if err != nil { + return err + } + if res.Type() != cel.BoolType { + return ErrExpressionMustReturnBool + } + bres, ok := res.Value().(bool) + if !ok { + return ErrExpressionMustReturnBool + } + if !assert.Equal(t, bres, true, `expr: %s`, expr) { + if os.Getenv("HIDE_HARNESS_LOG") != "1" { + t.Logf(`name: %s + expect%d: %v + actual%d: %v + expr: %s + `, t.Name(), aCode, a, bCode, b, expr) + + } + t.FailNow() + } + } + return nil +} + +type Source struct { + // backref to the harness + h *Harness `json:"-"` + + // remote type + Remote *string `json:"remote,omitempty"` + Handler *string `json:"handler,omitempty"` + Method string `json:"method"` + Path string `json:"path"` + Query map[string]string `json:"query"` + Headers map[string]string `json:"headers"` + Body *Source `json:"body,omitempty"` + + // data type + Data any `json:"data,omitempty"` + + // file type + File *string `json:"file,omitempty"` + Fs string `json:"fs,omitempty"` + + // for raw type + Raw *string `json:"raw,omitempty"` +} + +func (s *Source) Execute(ctx context.Context) (json.RawMessage, int, error) { + if s.Raw != nil { + return s.executeRaw(ctx) + } + if s.File != nil { + return s.executeFile(ctx) + } + if s.Remote != nil || s.Handler != nil { + return s.executeRemote(ctx) + } + if s.Data != nil { + return s.executeData(ctx) + } + return s.executeEmpty(ctx) +} +func (s *Source) executeRemote(ctx context.Context) (json.RawMessage, int, error) { + method := "GET" + if s.Method != "" { + method = s.Method + } + method = strings.ToUpper(method) + var body io.Reader + // hydrate the harness + if s.Body != nil { + s.Body.h = s.h + msg, _, err := s.Body.Execute(ctx) + if err != nil { + return nil, 0, fmt.Errorf("getting body: %w", err) + } + body = bytes.NewBuffer(msg) + } + var purl *url.URL + if s.Remote != nil { + niceUrl, err := url.Parse(*s.Remote) + if err != nil { + return nil, 0, err + } + purl = niceUrl + + } else if s.Handler != nil { + handler, ok := s.h.handlers[*s.Handler] + if !ok { + return nil, 0, fmt.Errorf("handler not registered: %s", *s.Handler) + } + server := httptest.NewServer(handler) + defer server.Close() + niceUrl, err := url.Parse(server.URL) + if err != nil { + return nil, 0, err + } + purl = niceUrl + } else { + panic("impossible code path. bug? source.Execute() should ensure this never happens") + } + + purl = purl.JoinPath(s.Path) + q := purl.Query() + for k, v := range s.Query { + q.Add(k, v) + } + purl.RawQuery = q.Encode() + request, err := http.NewRequest(method, purl.String(), body) + if err != nil { + return nil, 0, err + } + for k, v := range s.Headers { + request.Header.Set(k, v) + } + resp, err := http.DefaultClient.Do(request) + if err != nil { + return nil, 0, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, resp.StatusCode, nil + } + out, err := io.ReadAll(resp.Body) + if err != nil { + return nil, 200, err + } + return json.RawMessage(out), 200, nil +} + +func (s *Source) executeData(ctx context.Context) (json.RawMessage, int, error) { + ans, err := json.Marshal(s.Data) + if err != nil { + return nil, 400, nil + } + return ans, 200, nil +} + +func (s *Source) executeFile(ctx context.Context) (json.RawMessage, int, error) { + afs, ok := s.h.fss[s.Fs] + if !ok { + return nil, 404, fmt.Errorf("filesystem %s not defined", s.Fs) + } + name := *s.File + filename := name + for _, fn := range []string{name, name + ".yaml", name + ".yml", name + ".json"} { + // check if file exists + _, err := afs.Stat(fn) + if err == nil { + filename = fn + break + } + } + fileBytes, err := afero.ReadFile(afs, filename) + if err != nil { + return nil, 404, err + } + return json.RawMessage(fileBytes), 200, nil +} +func (s *Source) executeRaw(ctx context.Context) (json.RawMessage, int, error) { + return json.RawMessage(*s.Raw), 200, nil +} + +func (s *Source) executeEmpty(ctx context.Context) (json.RawMessage, int, error) { + return []byte("{}"), 200, nil +} diff --git a/cl/beacon/beacontest/harness_test.go b/cl/beacon/beacontest/harness_test.go new file mode 100644 index 000000000..d6ee904d7 --- /dev/null +++ b/cl/beacon/beacontest/harness_test.go @@ -0,0 +1,19 @@ +package beacontest_test + +import ( + "testing" + + _ "embed" + + "github.com/ledgerwatch/erigon/cl/beacon/beacontest" +) + +//go:embed harness_test_data.yml +var testData []byte + +func TestSimpleHarness(t *testing.T) { + beacontest.Execute( + beacontest.WithTesting(t), + beacontest.WithTestFromBytes("test", testData), + ) +} diff --git a/cl/beacon/beacontest/harness_test_data.yml b/cl/beacon/beacontest/harness_test_data.yml new file mode 100644 index 000000000..4c3070219 --- /dev/null +++ b/cl/beacon/beacontest/harness_test_data.yml @@ -0,0 +1,62 @@ +tests: + - name: "equality expression" + expect: + data: + hello: world + actual: + data: + hello: world + compare: + type: "expr" + expr: "actual == expect" + - name: "neg equality expr" + expect: + data: + hello: world + actual: + data: + hello: worlds + compare: + expr: "actual != expect" + - name: "subkey world" + expect: + data: + hi: world + actual: + data: + hello: world + compare: + expr: "actual.hello == expect.hi" + - name: "default compare" + expect: + data: + hello: world + actual: + data: + hello: world + - name: "default neg compare" + expect: + data: + hello: world + actual: + data: + hello: worlds + compare: + expr: "actual != expect" + - name: "key order doesnt matter for non literal" + expect: + data: + a: 1 + b: 2 + actual: + raw: '{"b":2,"a":1}' + - name: "key order does matter for literal" + expect: + data: + a: 1 + b: 2 + actual: + raw: '{"b":2,"a":1}' + compare: + literal: true + expr: "actual != expect" diff --git a/cl/beacon/beacontest/linux_basepathfs.go b/cl/beacon/beacontest/linux_basepathfs.go new file mode 100644 index 000000000..a27754c27 --- /dev/null +++ b/cl/beacon/beacontest/linux_basepathfs.go @@ -0,0 +1,252 @@ +package beacontest + +import ( + "io/fs" + "os" + "path" + "runtime" + "strings" + "time" + + "github.com/spf13/afero" +) + +var ( + _ afero.Lstater = (*BasePathFs)(nil) + _ fs.ReadDirFile = (*BasePathFile)(nil) +) + +// This is a version of the afero basepathfs that uses path instead of filepath. +// this is needed to work with things like zipfs and embedfs on windows +type BasePathFs struct { + source afero.Fs + path string +} + +type BasePathFile struct { + afero.File + path string +} + +func (f *BasePathFile) Name() string { + sourcename := f.File.Name() + return strings.TrimPrefix(sourcename, path.Clean(f.path)) +} + +func (f *BasePathFile) ReadDir(n int) ([]fs.DirEntry, error) { + if rdf, ok := f.File.(fs.ReadDirFile); ok { + return rdf.ReadDir(n) + } + return readDirFile{f.File}.ReadDir(n) +} + +func NewBasePathFs(source afero.Fs, path string) afero.Fs { + return &BasePathFs{source: source, path: path} +} + +// on a file outside the base path it returns the given file name and an error, +// else the given file with the base path prepended +func (b *BasePathFs) RealPath(name string) (p string, err error) { + if err := validateBasePathName(name); err != nil { + return name, err + } + + bpath := path.Clean(b.path) + p = path.Clean(path.Join(bpath, name)) + if !strings.HasPrefix(p, bpath) { + return name, os.ErrNotExist + } + + return p, nil +} + +func validateBasePathName(name string) error { + if runtime.GOOS != "windows" { + // Not much to do here; + // the virtual file paths all look absolute on *nix. + return nil + } + + // On Windows a common mistake would be to provide an absolute OS path + // We could strip out the base part, but that would not be very portable. + if path.IsAbs(name) { + return os.ErrNotExist + } + + return nil +} + +func (b *BasePathFs) Chtimes(name string, atime, mtime time.Time) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "chtimes", Path: name, Err: err} + } + return b.source.Chtimes(name, atime, mtime) +} + +func (b *BasePathFs) Chmod(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "chmod", Path: name, Err: err} + } + return b.source.Chmod(name, mode) +} + +func (b *BasePathFs) Chown(name string, uid, gid int) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "chown", Path: name, Err: err} + } + return b.source.Chown(name, uid, gid) +} + +func (b *BasePathFs) Name() string { + return "BasePathFs" +} + +func (b *BasePathFs) Stat(name string) (fi os.FileInfo, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "stat", Path: name, Err: err} + } + return b.source.Stat(name) +} + +func (b *BasePathFs) Rename(oldname, newname string) (err error) { + if oldname, err = b.RealPath(oldname); err != nil { + return &os.PathError{Op: "rename", Path: oldname, Err: err} + } + if newname, err = b.RealPath(newname); err != nil { + return &os.PathError{Op: "rename", Path: newname, Err: err} + } + return b.source.Rename(oldname, newname) +} + +func (b *BasePathFs) RemoveAll(name string) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "remove_all", Path: name, Err: err} + } + return b.source.RemoveAll(name) +} + +func (b *BasePathFs) Remove(name string) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "remove", Path: name, Err: err} + } + return b.source.Remove(name) +} + +func (b *BasePathFs) OpenFile(name string, flag int, mode os.FileMode) (f afero.File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "openfile", Path: name, Err: err} + } + sourcef, err := b.source.OpenFile(name, flag, mode) + if err != nil { + return nil, err + } + return &BasePathFile{sourcef, b.path}, nil +} + +func (b *BasePathFs) Open(name string) (f afero.File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "open", Path: name, Err: err} + } + sourcef, err := b.source.Open(name) + if err != nil { + return nil, err + } + return &BasePathFile{File: sourcef, path: b.path}, nil +} + +func (b *BasePathFs) Mkdir(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "mkdir", Path: name, Err: err} + } + return b.source.Mkdir(name, mode) +} + +func (b *BasePathFs) MkdirAll(name string, mode os.FileMode) (err error) { + if name, err = b.RealPath(name); err != nil { + return &os.PathError{Op: "mkdir", Path: name, Err: err} + } + return b.source.MkdirAll(name, mode) +} + +func (b *BasePathFs) Create(name string) (f afero.File, err error) { + if name, err = b.RealPath(name); err != nil { + return nil, &os.PathError{Op: "create", Path: name, Err: err} + } + sourcef, err := b.source.Create(name) + if err != nil { + return nil, err + } + return &BasePathFile{File: sourcef, path: b.path}, nil +} + +func (b *BasePathFs) LstatIfPossible(name string) (os.FileInfo, bool, error) { + name, err := b.RealPath(name) + if err != nil { + return nil, false, &os.PathError{Op: "lstat", Path: name, Err: err} + } + if lstater, ok := b.source.(afero.Lstater); ok { + return lstater.LstatIfPossible(name) + } + fi, err := b.source.Stat(name) + return fi, false, err +} + +func (b *BasePathFs) SymlinkIfPossible(oldname, newname string) error { + oldname, err := b.RealPath(oldname) + if err != nil { + return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: err} + } + newname, err = b.RealPath(newname) + if err != nil { + return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: err} + } + if linker, ok := b.source.(afero.Linker); ok { + return linker.SymlinkIfPossible(oldname, newname) + } + return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: afero.ErrNoSymlink} +} + +func (b *BasePathFs) ReadlinkIfPossible(name string) (string, error) { + name, err := b.RealPath(name) + if err != nil { + return "", &os.PathError{Op: "readlink", Path: name, Err: err} + } + if reader, ok := b.source.(afero.LinkReader); ok { + return reader.ReadlinkIfPossible(name) + } + return "", &os.PathError{Op: "readlink", Path: name, Err: afero.ErrNoReadlink} +} + +// the readDirFile helper is requried + +// readDirFile provides adapter from afero.File to fs.ReadDirFile needed for correct Open +type readDirFile struct { + afero.File +} + +var _ fs.ReadDirFile = readDirFile{} + +func (r readDirFile) ReadDir(n int) ([]fs.DirEntry, error) { + items, err := r.File.Readdir(n) + if err != nil { + return nil, err + } + + ret := make([]fs.DirEntry, len(items)) + for i := range items { + ret[i] = fileInfoDirEntry{FileInfo: items[i]} + } + + return ret, nil +} + +// FileInfoDirEntry provides an adapter from os.FileInfo to fs.DirEntry +type fileInfoDirEntry struct { + fs.FileInfo +} + +var _ fs.DirEntry = fileInfoDirEntry{} + +func (d fileInfoDirEntry) Type() fs.FileMode { return d.FileInfo.Mode().Type() } + +func (d fileInfoDirEntry) Info() (fs.FileInfo, error) { return d.FileInfo, nil } diff --git a/cl/beacon/handler/attestation_rewards.go b/cl/beacon/handler/attestation_rewards.go index 51b5e7dad..aa823b9b7 100644 --- a/cl/beacon/handler/attestation_rewards.go +++ b/cl/beacon/handler/attestation_rewards.go @@ -40,7 +40,7 @@ type attestationsRewardsResponse struct { TotalRewards []TotalReward `json:"total_rewards"` } -func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -49,7 +49,7 @@ func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Reque } defer tx.Rollback() - epoch, err := epochFromRequest(r) + epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -180,7 +180,7 @@ func (a *ApiHandler) baseReward(version clparams.StateVersion, effectiveBalance, return effectiveBalance * a.beaconChainCfg.BaseRewardFactor / activeBalanceRoot / a.beaconChainCfg.BaseRewardsPerEpoch } -func (a *ApiHandler) computeAttestationsRewardsForAltair(validatorSet *solid.ValidatorSet, inactivityScores solid.Uint64ListSSZ, previousParticipation *solid.BitList, inactivityLeak bool, filterIndicies []uint64, epoch uint64) (*beaconResponse, error) { +func (a *ApiHandler) computeAttestationsRewardsForAltair(validatorSet *solid.ValidatorSet, inactivityScores solid.Uint64ListSSZ, previousParticipation *solid.BitList, inactivityLeak bool, filterIndicies []uint64, epoch uint64) (*beaconhttp.BeaconResponse, error) { totalActiveBalance := uint64(0) flagsUnslashedIndiciesSet := statechange.GetUnslashedIndiciesSet(a.beaconChainCfg, epoch, validatorSet, previousParticipation) weights := a.beaconChainCfg.ParticipationWeights() @@ -289,7 +289,7 @@ func (a *ApiHandler) computeAttestationsRewardsForAltair(validatorSet *solid.Val } // processRewardsAndPenaltiesPhase0 process rewards and penalties for phase0 state. -func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconState, filterIndicies []uint64, epoch uint64) (*beaconResponse, error) { +func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconState, filterIndicies []uint64, epoch uint64) (*beaconhttp.BeaconResponse, error) { response := &attestationsRewardsResponse{} beaconConfig := s.BeaconConfig() if epoch == beaconConfig.GenesisEpoch { diff --git a/cl/beacon/handler/attestation_rewards_test.go b/cl/beacon/handler/attestation_rewards_test.go deleted file mode 100644 index b078e8441..000000000 --- a/cl/beacon/handler/attestation_rewards_test.go +++ /dev/null @@ -1,152 +0,0 @@ -//go:build integration - -package handler - -import ( - "fmt" - "io" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestAttestationRewardsBellatrix(t *testing.T) { - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - var err error - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, 99999999) - - cases := []struct { - name string - epoch uint64 - code int - request string - expected string - }{ - { - name: "all validators", - epoch: (fcu.HeadSlotVal / 32) - 1, - code: http.StatusOK, - expected: `{"data":{"ideal_rewards":[{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"0","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"1","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"2","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"3","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"5","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"6","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"7","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"8","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"9","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"10","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"11","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"12","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"13","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"14","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"15","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"16","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"17","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"18","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"19","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"20","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"21","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"22","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"23","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"24","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"25","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"26","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"27","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"28","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"29","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"30","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"31","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"32","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"33","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"34","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"35","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"36","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"37","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"38","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"39","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"40","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"41","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"42","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"43","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"44","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"45","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"46","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"47","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"48","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"49","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"50","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"51","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"52","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"53","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"54","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"55","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"56","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"57","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"58","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"59","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"60","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"61","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"62","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"63","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"64","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"65","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"66","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"67","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"68","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"69","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"70","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"71","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"72","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"73","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"74","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"75","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"76","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"77","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"78","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"79","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"80","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"81","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"82","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"83","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"84","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"85","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"86","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"87","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"88","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"89","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"90","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"91","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"92","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"93","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"94","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"95","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"96","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"97","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"98","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"99","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"100","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"101","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"102","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"103","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"104","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"105","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"106","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"107","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"108","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"109","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"110","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"111","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"112","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"113","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"114","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"115","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"116","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"117","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"118","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"119","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"120","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"121","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"122","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"123","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"124","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"125","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"126","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"127","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"128","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"129","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"130","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"131","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"132","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"133","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"134","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"135","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"136","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"137","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"138","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"139","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"140","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"141","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"142","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"143","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"144","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"145","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"146","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"147","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"148","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"149","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"150","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"151","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"152","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"153","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"154","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"155","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"156","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"157","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"158","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"159","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"160","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"161","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"162","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"163","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"164","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"165","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"166","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"167","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"168","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"169","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"170","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"171","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"172","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"173","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"174","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"175","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"176","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"177","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"178","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"179","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"180","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"181","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"182","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"183","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"184","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"185","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"186","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"187","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"188","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"189","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"190","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"191","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"192","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"193","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"194","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"195","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"196","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"197","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"198","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"199","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"200","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"201","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"202","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"203","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"204","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"205","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"206","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"207","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"208","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"209","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"210","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"211","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"212","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"213","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"214","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"215","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"216","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"217","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"218","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"219","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"220","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"221","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"222","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"223","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"224","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"225","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"226","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"227","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"228","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"229","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"230","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"231","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"232","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"233","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"234","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"235","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"236","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"237","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"238","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"239","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"240","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"241","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"242","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"243","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"244","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"245","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"246","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"247","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"248","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"249","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"250","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"251","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"252","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"253","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"254","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"255","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"}]}}` + "\n", // Add your expected response - }, - { - epoch: 99999999, - code: http.StatusNotFound, - }, - { - name: "2 validators", - epoch: (fcu.HeadSlotVal / 32) - 1, - request: `["1","4"]`, - code: http.StatusOK, - expected: `{"data":{"ideal_rewards":[{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"1","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"}]}}` + "\n", // Add your expected response - }, - } - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - url := fmt.Sprintf("%s/eth/v1/beacon/rewards/attestations/%d", server.URL, c.epoch) - - // Create a request - req, err := http.NewRequest("POST", url, strings.NewReader(c.request)) - require.NoError(t, err) - req.Header.Set("Content-Type", "application/json") - - // Perform the request - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - - // Check status code - require.Equal(t, c.code, resp.StatusCode) - - if resp.StatusCode != http.StatusOK { - return - } - - // Read the response body - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - // Compare the response with the expected result - require.Equal(t, c.expected, string(out)) - }) - } -} - -func TestAttestationRewardsPhase0(t *testing.T) { - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - var err error - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, 99999999) - - cases := []struct { - name string - epoch uint64 - code int - request string - expected string - }{ - { - name: "all validators", - epoch: (fcu.HeadSlotVal / 32) - 1, - code: http.StatusOK, - expected: `{"data":{"ideal_rewards":[{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"4646","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4941","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"9123","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"17562","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"17423","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"4355","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"5854","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"10752","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"3920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"3763","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"10686","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"4561","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"2697","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"8743","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"4673","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"27000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3949","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"7805","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"3434","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"5401","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"5131","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"3507","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"29000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"2508","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"13739","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"14635","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"19235","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"5227","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"3604","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"6272","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"8827","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"20071","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"3310","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"14934","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"54361","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"3636","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"6111","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"27000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"4470","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"3316","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"60633","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"4704","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"5110","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"24000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4739","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"4427","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"29271","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"25089","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"3789","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"7317","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"7201","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"5411","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"7168","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4530","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"19000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"4050","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2961","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"7983","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"5272","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"4646","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"39725","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"22998","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"0","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"1","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"2","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"3","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"4","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"5","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"6","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"7","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"8","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"9","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"10","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"11","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"12","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"13","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"14","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"15","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"16","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"17","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"18","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"19","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"20","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"21","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"22","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"23","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"validator_index":"24","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"25","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"26","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"27","head":"67482","target":"67482","source":"67482","inclusion_delay":"4646","inactivity":"0"},{"validator_index":"28","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"29","head":"87727","target":"87727","source":"87727","inclusion_delay":"4941","inactivity":"0"},{"validator_index":"30","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"31","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"32","head":"80979","target":"80979","source":"80979","inclusion_delay":"9123","inactivity":"0"},{"validator_index":"33","head":"70856","target":"70856","source":"70856","inclusion_delay":"17562","inactivity":"0"},{"validator_index":"34","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"35","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"36","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"37","head":"84353","target":"84353","source":"84353","inclusion_delay":"17423","inactivity":"0"},{"validator_index":"38","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"39","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"40","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"41","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"42","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"43","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"44","head":"84353","target":"84353","source":"84353","inclusion_delay":"4355","inactivity":"0"},{"validator_index":"45","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"46","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"47","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"48","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"49","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"50","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"validator_index":"51","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"52","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"53","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"54","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"55","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"56","head":"70856","target":"70856","source":"70856","inclusion_delay":"5854","inactivity":"0"},{"validator_index":"57","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"58","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"59","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"60","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"61","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"62","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"63","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"64","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"65","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"66","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"67","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"68","head":"60734","target":"60734","source":"60734","inclusion_delay":"10752","inactivity":"0"},{"validator_index":"69","head":"101224","target":"101224","source":"101224","inclusion_delay":"3920","inactivity":"0"},{"validator_index":"70","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"71","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"72","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"73","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"74","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"75","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"76","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"77","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"78","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"79","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"80","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"81","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-372759"},{"validator_index":"82","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"83","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"84","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"85","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"86","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"87","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"88","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"89","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"90","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"91","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"92","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"93","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"94","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"validator_index":"95","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"96","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"97","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"98","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"99","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"100","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"101","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"102","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"103","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"104","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"validator_index":"105","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"106","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"107","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-329748"},{"validator_index":"108","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"109","head":"91101","target":"91101","source":"91101","inclusion_delay":"3763","inactivity":"0"},{"validator_index":"110","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"111","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"112","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"113","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"114","head":"77605","target":"77605","source":"77605","inclusion_delay":"10686","inactivity":"0"},{"validator_index":"115","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"116","head":"80979","target":"80979","source":"80979","inclusion_delay":"4561","inactivity":"0"},{"validator_index":"117","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"118","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"119","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"120","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"121","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"122","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"123","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"124","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"125","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"126","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"127","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"128","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"129","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"130","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"131","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"132","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"133","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"134","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"135","head":"67482","target":"67482","source":"67482","inclusion_delay":"2697","inactivity":"0"},{"validator_index":"136","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"137","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"138","head":"77605","target":"77605","source":"77605","inclusion_delay":"8743","inactivity":"0"},{"validator_index":"139","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"140","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"141","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"142","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"143","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"validator_index":"144","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"145","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"146","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"147","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"148","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"149","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"150","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"151","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"152","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"153","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"154","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"155","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"validator_index":"156","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"157","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"158","head":"64108","target":"64108","source":"64108","inclusion_delay":"4673","inactivity":"0"},{"validator_index":"159","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"validator_index":"160","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"161","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"162","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"163","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"164","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"165","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"166","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"167","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"168","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"169","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-286737"},{"validator_index":"170","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"171","head":"57360","target":"57360","source":"57360","inclusion_delay":"3949","inactivity":"0"},{"validator_index":"172","head":"94475","target":"94475","source":"94475","inclusion_delay":"7805","inactivity":"0"},{"validator_index":"173","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"174","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"175","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"176","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"177","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"178","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"179","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"180","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"181","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"182","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"183","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"184","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"185","head":"77605","target":"77605","source":"77605","inclusion_delay":"3434","inactivity":"0"},{"validator_index":"186","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"187","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"188","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"189","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"190","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"191","head":"104598","target":"104598","source":"104598","inclusion_delay":"5401","inactivity":"0"},{"validator_index":"192","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"validator_index":"193","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"194","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"195","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"196","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"197","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"198","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"199","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"200","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"201","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"202","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"203","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"204","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"205","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"206","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"207","head":"91101","target":"91101","source":"91101","inclusion_delay":"5131","inactivity":"0"},{"validator_index":"208","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"209","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"210","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"211","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"212","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"213","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"214","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"215","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-329748"},{"validator_index":"216","head":"87727","target":"87727","source":"87727","inclusion_delay":"3507","inactivity":"0"},{"validator_index":"217","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"218","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"219","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"220","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"221","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"222","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"223","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-258063"},{"validator_index":"224","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"225","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"226","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"227","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"228","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"229","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"230","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"231","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"232","head":"60734","target":"60734","source":"60734","inclusion_delay":"2508","inactivity":"0"},{"validator_index":"233","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"234","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-401433"},{"validator_index":"235","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-401433"},{"validator_index":"236","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"237","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"238","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"239","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"240","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"241","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"242","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"243","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"244","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"245","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"246","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"247","head":"77605","target":"77605","source":"77605","inclusion_delay":"13739","inactivity":"0"},{"validator_index":"248","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"249","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"250","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"251","head":"70856","target":"70856","source":"70856","inclusion_delay":"14635","inactivity":"0"},{"validator_index":"252","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"253","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"254","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"255","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"validator_index":"256","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"257","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"258","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"259","head":"77605","target":"77605","source":"77605","inclusion_delay":"19235","inactivity":"0"},{"validator_index":"260","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-258063"},{"validator_index":"261","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"262","head":"101224","target":"101224","source":"101224","inclusion_delay":"5227","inactivity":"0"},{"validator_index":"263","head":"84353","target":"84353","source":"84353","inclusion_delay":"3604","inactivity":"0"},{"validator_index":"264","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"265","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"266","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"267","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"268","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"269","head":"101224","target":"101224","source":"101224","inclusion_delay":"6272","inactivity":"0"},{"validator_index":"270","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"271","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"272","head":"64108","target":"64108","source":"64108","inclusion_delay":"8827","inactivity":"0"},{"validator_index":"273","head":"80979","target":"80979","source":"80979","inclusion_delay":"20071","inactivity":"0"},{"validator_index":"274","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"275","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"276","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"277","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"278","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"279","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"280","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"281","head":"64108","target":"64108","source":"64108","inclusion_delay":"3310","inactivity":"0"},{"validator_index":"282","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"283","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"284","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"285","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"286","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"287","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"288","head":"84353","target":"84353","source":"84353","inclusion_delay":"14934","inactivity":"0"},{"validator_index":"289","head":"87727","target":"87727","source":"87727","inclusion_delay":"54361","inactivity":"0"},{"validator_index":"290","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"291","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"292","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"293","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"294","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"295","head":"67482","target":"67482","source":"67482","inclusion_delay":"3636","inactivity":"0"},{"validator_index":"296","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"297","head":"64108","target":"64108","source":"64108","inclusion_delay":"6111","inactivity":"0"},{"validator_index":"298","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"299","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"300","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"301","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"302","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"303","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"304","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"305","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"306","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"307","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"308","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"309","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"310","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"311","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"312","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"313","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"314","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"315","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"316","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"317","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"318","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"319","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"320","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"321","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"322","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"323","head":"104598","target":"104598","source":"104598","inclusion_delay":"4470","inactivity":"0"},{"validator_index":"324","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"325","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"326","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-315411"},{"validator_index":"327","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"328","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"329","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"330","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"331","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"332","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"333","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"334","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"335","head":"77605","target":"77605","source":"77605","inclusion_delay":"3316","inactivity":"0"},{"validator_index":"336","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"337","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"338","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"339","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"340","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"341","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"342","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"343","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"344","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"345","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"346","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"347","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"348","head":"97850","target":"97850","source":"97850","inclusion_delay":"60633","inactivity":"0"},{"validator_index":"349","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"350","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-286737"},{"validator_index":"351","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"validator_index":"352","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"353","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"354","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"355","head":"60734","target":"60734","source":"60734","inclusion_delay":"4704","inactivity":"0"},{"validator_index":"356","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"357","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"358","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"359","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"360","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"361","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"362","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"363","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"364","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"365","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"366","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"validator_index":"367","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"368","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"369","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"370","head":"74230","target":"74230","source":"74230","inclusion_delay":"5110","inactivity":"0"},{"validator_index":"371","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"372","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"373","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"374","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"375","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"376","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"377","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"378","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"379","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"380","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"381","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"382","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"383","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"384","head":"57360","target":"57360","source":"57360","inclusion_delay":"4739","inactivity":"0"},{"validator_index":"385","head":"60734","target":"60734","source":"60734","inclusion_delay":"4427","inactivity":"0"},{"validator_index":"386","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"387","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"388","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"389","head":"94475","target":"94475","source":"94475","inclusion_delay":"29271","inactivity":"0"},{"validator_index":"390","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"391","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"392","head":"101224","target":"101224","source":"101224","inclusion_delay":"25089","inactivity":"0"},{"validator_index":"393","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"394","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"395","head":"97850","target":"97850","source":"97850","inclusion_delay":"3789","inactivity":"0"},{"validator_index":"396","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"397","head":"70856","target":"70856","source":"70856","inclusion_delay":"7317","inactivity":"0"},{"validator_index":"398","head":"104598","target":"104598","source":"104598","inclusion_delay":"7201","inactivity":"0"},{"validator_index":"399","head":"74230","target":"74230","source":"74230","inclusion_delay":"5411","inactivity":"0"},{"validator_index":"400","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"401","head":"80979","target":"80979","source":"80979","inclusion_delay":"7168","inactivity":"0"},{"validator_index":"402","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"403","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"404","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"405","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"406","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"407","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-272400"},{"validator_index":"408","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"409","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"410","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"411","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"412","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"413","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"414","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"415","head":"87727","target":"87727","source":"87727","inclusion_delay":"4530","inactivity":"0"},{"validator_index":"416","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"417","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"418","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"419","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"420","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"421","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"422","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"423","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"424","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"425","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"426","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"427","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"428","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"429","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"430","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"431","head":"104598","target":"104598","source":"104598","inclusion_delay":"4050","inactivity":"0"},{"validator_index":"432","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"433","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"434","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"435","head":"57360","target":"57360","source":"57360","inclusion_delay":"2961","inactivity":"0"},{"validator_index":"436","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"437","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"438","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-430107"},{"validator_index":"439","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"440","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"441","head":"70856","target":"70856","source":"70856","inclusion_delay":"7983","inactivity":"0"},{"validator_index":"442","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"443","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"444","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"445","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"446","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"447","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"448","head":"97850","target":"97850","source":"97850","inclusion_delay":"5272","inactivity":"0"},{"validator_index":"449","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"450","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"451","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"452","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"453","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"454","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"455","head":"101224","target":"101224","source":"101224","inclusion_delay":"4646","inactivity":"0"},{"validator_index":"456","head":"64108","target":"64108","source":"64108","inclusion_delay":"39725","inactivity":"0"},{"validator_index":"457","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"458","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"459","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"460","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"461","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"462","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"463","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"464","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"465","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"466","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"467","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"468","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"469","head":"97850","target":"97850","source":"97850","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"470","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"471","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"472","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"473","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"474","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"475","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"476","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"477","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"478","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"479","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"480","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"481","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"482","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"483","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"484","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"485","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"486","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"487","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"488","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"489","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"490","head":"74230","target":"74230","source":"74230","inclusion_delay":"22998","inactivity":"0"},{"validator_index":"491","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"492","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"493","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"494","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"validator_index":"495","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"496","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"497","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"498","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"499","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"500","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"501","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"502","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"503","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"504","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"505","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"506","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"507","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"508","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"509","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"510","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"511","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"512","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"513","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"514","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"515","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"516","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"517","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"518","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"519","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"520","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"521","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"522","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"523","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"524","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"525","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"526","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"527","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"}]}}` + "\n", // Add your expected response - }, - { - epoch: 99999999, - code: http.StatusNotFound, - }, - { - name: "2 validators", - epoch: (fcu.HeadSlotVal / 32) - 1, - request: `["1","4"]`, - code: http.StatusOK, - expected: `{"data":{"ideal_rewards":[{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"}],"total_rewards":[{"validator_index":"1","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"}]}}` + "\n", // Add your expected response - }, - } - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - url := fmt.Sprintf("%s/eth/v1/beacon/rewards/attestations/%d", server.URL, c.epoch) - - // Create a request - req, err := http.NewRequest("POST", url, strings.NewReader(c.request)) - require.NoError(t, err) - req.Header.Set("Content-Type", "application/json") - - // Perform the request - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - - // Check status code - require.Equal(t, c.code, resp.StatusCode) - - if resp.StatusCode != http.StatusOK { - return - } - - // Read the response body - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - // Compare the response with the expected result - require.Equal(t, c.expected, string(out)) - }) - } -} diff --git a/cl/beacon/handler/blocks.go b/cl/beacon/handler/blocks.go index 2035b7663..2fd7d38ee 100644 --- a/cl/beacon/handler/blocks.go +++ b/cl/beacon/handler/blocks.go @@ -23,18 +23,18 @@ type getHeadersRequest struct { ParentRoot *libcommon.Hash `json:"root,omitempty"` } -func (a *ApiHandler) rootFromBlockId(ctx context.Context, tx kv.Tx, blockId *segmentID) (root libcommon.Hash, err error) { +func (a *ApiHandler) rootFromBlockId(ctx context.Context, tx kv.Tx, blockId *beaconhttp.SegmentID) (root libcommon.Hash, err error) { switch { - case blockId.head(): + case blockId.Head(): root, _, err = a.forkchoiceStore.GetHead() if err != nil { return libcommon.Hash{}, err } - case blockId.finalized(): + case blockId.Finalized(): root = a.forkchoiceStore.FinalizedCheckpoint().BlockRoot() - case blockId.justified(): + case blockId.Justified(): root = a.forkchoiceStore.JustifiedCheckpoint().BlockRoot() - case blockId.genesis(): + case blockId.Genesis(): root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, 0) if err != nil { return libcommon.Hash{}, err @@ -42,24 +42,24 @@ func (a *ApiHandler) rootFromBlockId(ctx context.Context, tx kv.Tx, blockId *seg if root == (libcommon.Hash{}) { return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, "genesis block not found") } - case blockId.getSlot() != nil: - root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, *blockId.getSlot()) + case blockId.GetSlot() != nil: + root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, *blockId.GetSlot()) if err != nil { return libcommon.Hash{}, err } if root == (libcommon.Hash{}) { - return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %d", *blockId.getSlot())) + return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %d", *blockId.GetSlot())) } - case blockId.getRoot() != nil: + case blockId.GetRoot() != nil: // first check if it exists - root = *blockId.getRoot() + root = *blockId.GetRoot() default: return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusInternalServerError, "cannot parse block id") } return } -func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -67,7 +67,7 @@ func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconRe } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, err } @@ -90,11 +90,11 @@ func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconRe return nil, err } return newBeaconResponse(blk). - withFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). - withVersion(blk.Version()), nil + WithFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). + WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -102,7 +102,7 @@ func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*b } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, err } @@ -129,18 +129,18 @@ func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*b return nil, err } return newBeaconResponse(blinded). - withFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). - withVersion(blk.Version()), nil + WithFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). + WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { return nil, err } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -160,18 +160,19 @@ func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request if err != nil { return nil, err } - return newBeaconResponse(blk.Block.Body.Attestations).withFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). - withVersion(blk.Version()), nil + return newBeaconResponse(blk.Block.Body.Attestations). + WithFinalized(root == canonicalRoot && blk.Block.Slot <= a.forkchoiceStore.FinalizedSlot()). + WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { return nil, err } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -195,5 +196,5 @@ func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beac } return newBeaconResponse(struct { Root libcommon.Hash `json:"root"` - }{Root: root}).withFinalized(canonicalRoot == root && *slot <= a.forkchoiceStore.FinalizedSlot()), nil + }{Root: root}).WithFinalized(canonicalRoot == root && *slot <= a.forkchoiceStore.FinalizedSlot()), nil } diff --git a/cl/beacon/handler/blocks_test.go b/cl/beacon/handler/blocks_test.go deleted file mode 100644 index f07b506b6..000000000 --- a/cl/beacon/handler/blocks_test.go +++ /dev/null @@ -1,254 +0,0 @@ -package handler - -import ( - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetBlindedBlock(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - // Start by testing - rootBlock1, err := blocks[len(blocks)-1].Block.HashSSZ() - if err != nil { - t.Fatal(err) - } - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - cases := []struct { - blockID string - code int - slot uint64 - }{ - { - blockID: "0x" + common.Bytes2Hex(rootBlock1[:]), - code: http.StatusOK, - slot: blocks[0].Block.Slot, - }, - { - blockID: "head", - code: http.StatusOK, - slot: blocks[len(blocks)-1].Block.Slot, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - expected := `{"data":{"signature":"0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a","message":{"slot":"8322","proposer_index":"210","parent_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","state_root":"0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1","body":{"randao_reveal":"0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a","eth1_data":{"deposit_root":"0x0000000000000000000000000000000000000000000000000000000000000000","deposit_count":"528","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"},"graffiti":"0x0000000000000000000000000000000000000000000000000000000000000000","proposer_slashings":[{"signed_header_1":{"message":{"slot":"8321","proposer_index":"476","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"476","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"406","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"406","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"281","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"281","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"169","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"169","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"397","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"397","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270"}}],"attester_slashings":[{"attestation_1":{"attesting_indicies":["96","353","445"],"data":{"slot":"555","index":"0","beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d"},"attestation_2":{"attesting_indicies":["96","353","445"],"data":{"slot":"555","index":"0","beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x0101010101010101010101010101010101010101010101010101010101010101"}},"signature":"0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b"}}],"attestations":[{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c","data":{"slot":"8292","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9","data":{"slot":"8312","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3","data":{"slot":"8297","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928","data":{"slot":"8290","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223","data":{"slot":"8311","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53","data":{"slot":"8320","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247","data":{"slot":"8318","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217","data":{"slot":"8300","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0","data":{"slot":"8304","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3","data":{"slot":"8297","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928","data":{"slot":"8290","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed","data":{"slot":"8308","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247","data":{"slot":"8318","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c","data":{"slot":"8292","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217","data":{"slot":"8300","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed","data":{"slot":"8308","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53","data":{"slot":"8320","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6","data":{"slot":"8310","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223","data":{"slot":"8311","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6","data":{"slot":"8310","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9","data":{"slot":"8312","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0","data":{"slot":"8304","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1","data":{"slot":"8294","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}}],"deposits":[{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65","withdrawal_credentials":"0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8","amount":"32000000000","signature":"0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324","withdrawal_credentials":"0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9","amount":"32000000000","signature":"0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0","withdrawal_credentials":"0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3","amount":"32000000000","signature":"0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc","withdrawal_credentials":"0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26","amount":"32000000000","signature":"0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543","withdrawal_credentials":"0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12","amount":"32000000000","signature":"0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a","withdrawal_credentials":"0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4","amount":"32000000000","signature":"0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3","withdrawal_credentials":"0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d","amount":"32000000000","signature":"0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d","withdrawal_credentials":"0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91","amount":"32000000000","signature":"0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5","withdrawal_credentials":"0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f","amount":"32000000000","signature":"0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9","withdrawal_credentials":"0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208","amount":"32000000000","signature":"0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd"}}],"voluntary_exits":[{"message":{"epoch":"260","validator_index":"504"},"signature":"0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e"},{"message":{"epoch":"260","validator_index":"503"},"signature":"0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194"},{"message":{"epoch":"260","validator_index":"502"},"signature":"0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c"},{"message":{"epoch":"260","validator_index":"501"},"signature":"0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911"},{"message":{"epoch":"260","validator_index":"500"},"signature":"0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136"},{"message":{"epoch":"260","validator_index":"499"},"signature":"0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51"},{"message":{"epoch":"260","validator_index":"498"},"signature":"0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2"},{"message":{"epoch":"260","validator_index":"495"},"signature":"0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8"},{"message":{"epoch":"260","validator_index":"494"},"signature":"0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c"},{"message":{"epoch":"260","validator_index":"492"},"signature":"0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13"},{"message":{"epoch":"260","validator_index":"491"},"signature":"0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974"}],"sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","signature":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"execution_payload_header":{"parent_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","fee_recipient":"0x0000000000000000000000000000000000000000","state_root":"0x0000000000000000000000000000000000000000000000000000000000000000","receipts_root":"0x0000000000000000000000000000000000000000000000000000000000000000","logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","prev_randao":"0x0000000000000000000000000000000000000000000000000000000000000000","block_number":"0","gas_limit":"0","gas_used":"0","time":"0","extra_data":null,"base_fee_per_gas":"0x0000000000000000000000000000000000000000000000000000000000000000","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactions_root":"0x0000000000000000000000000000000000000000000000000000000000000000","withdrawals_root":"0x0000000000000000000000000000000000000000000000000000000000000000"},"execution_changes":[],"blob_kzg_commitments":[]}}},"finalized":false,"version":0,"execution_optimistic":false}` + "\n" - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/blinded_blocks/" + c.blockID) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, expected, string(out)) - }) - } -} - -func TestGetBlock(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - // Start by testing - rootBlock1, err := blocks[len(blocks)-1].Block.HashSSZ() - if err != nil { - t.Fatal(err) - } - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - expected := `{"data":{"signature":"0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a","message":{"slot":"8322","proposer_index":"210","parent_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","state_root":"0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1","body":{"randao_reveal":"0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a","eth1_data":{"deposit_root":"0x0000000000000000000000000000000000000000000000000000000000000000","deposit_count":"528","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"},"graffiti":"0x0000000000000000000000000000000000000000000000000000000000000000","proposer_slashings":[{"signed_header_1":{"message":{"slot":"8321","proposer_index":"476","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"476","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"406","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"406","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"281","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"281","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"169","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"169","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261"}},{"signed_header_1":{"message":{"slot":"8321","proposer_index":"397","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122"},"signed_header_2":{"message":{"slot":"8321","proposer_index":"397","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444","body_root":"0x5555555555555555555555555555555555555555555555555555555555555555"},"signature":"0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270"}}],"attester_slashings":[{"attestation_1":{"attesting_indicies":["96","353","445"],"data":{"slot":"555","index":"0","beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d"},"attestation_2":{"attesting_indicies":["96","353","445"],"data":{"slot":"555","index":"0","beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x0101010101010101010101010101010101010101010101010101010101010101"}},"signature":"0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b"}}],"attestations":[{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c","data":{"slot":"8292","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9","data":{"slot":"8312","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3","data":{"slot":"8297","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928","data":{"slot":"8290","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223","data":{"slot":"8311","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53","data":{"slot":"8320","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247","data":{"slot":"8318","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217","data":{"slot":"8300","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0","data":{"slot":"8304","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343","data":{"slot":"8296","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3","data":{"slot":"8297","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928","data":{"slot":"8290","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed","data":{"slot":"8308","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247","data":{"slot":"8318","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c","data":{"slot":"8292","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642","data":{"slot":"8314","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217","data":{"slot":"8300","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542","data":{"slot":"8317","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed","data":{"slot":"8308","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65","data":{"slot":"8305","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53","data":{"slot":"8320","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6","data":{"slot":"8310","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527","data":{"slot":"8313","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223","data":{"slot":"8311","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce","data":{"slot":"8306","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6","data":{"slot":"8310","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929","data":{"slot":"8298","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098","data":{"slot":"8291","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804","data":{"slot":"8293","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4","data":{"slot":"8309","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9","data":{"slot":"8312","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935","data":{"slot":"8299","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0","data":{"slot":"8304","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3","data":{"slot":"8307","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff7f","signature":"0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1","data":{"slot":"8294","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}},{"aggregation_bits":"0xff3f","signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079","data":{"slot":"8302","index":"0","beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}}],"deposits":[{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65","withdrawal_credentials":"0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8","amount":"32000000000","signature":"0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324","withdrawal_credentials":"0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9","amount":"32000000000","signature":"0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0","withdrawal_credentials":"0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3","amount":"32000000000","signature":"0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc","withdrawal_credentials":"0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26","amount":"32000000000","signature":"0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543","withdrawal_credentials":"0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12","amount":"32000000000","signature":"0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a","withdrawal_credentials":"0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4","amount":"32000000000","signature":"0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3","withdrawal_credentials":"0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d","amount":"32000000000","signature":"0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d","withdrawal_credentials":"0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91","amount":"32000000000","signature":"0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5","withdrawal_credentials":"0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f","amount":"32000000000","signature":"0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87"}},{"proof":["0x1a02000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":{"pubkey":"0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9","withdrawal_credentials":"0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208","amount":"32000000000","signature":"0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd"}}],"voluntary_exits":[{"message":{"epoch":"260","validator_index":"504"},"signature":"0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e"},{"message":{"epoch":"260","validator_index":"503"},"signature":"0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194"},{"message":{"epoch":"260","validator_index":"502"},"signature":"0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c"},{"message":{"epoch":"260","validator_index":"501"},"signature":"0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911"},{"message":{"epoch":"260","validator_index":"500"},"signature":"0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136"},{"message":{"epoch":"260","validator_index":"499"},"signature":"0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51"},{"message":{"epoch":"260","validator_index":"498"},"signature":"0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2"},{"message":{"epoch":"260","validator_index":"495"},"signature":"0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8"},{"message":{"epoch":"260","validator_index":"494"},"signature":"0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c"},{"message":{"epoch":"260","validator_index":"492"},"signature":"0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13"},{"message":{"epoch":"260","validator_index":"491"},"signature":"0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974"}],"sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","signature":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"execution_payload":{"parent_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","fee_recipient":"0x0000000000000000000000000000000000000000","state_root":"0x0000000000000000000000000000000000000000000000000000000000000000","receipts_root":"0x0000000000000000000000000000000000000000000000000000000000000000","logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","prev_randao":"0x0000000000000000000000000000000000000000000000000000000000000000","block_number":"0","gas_limit":"0","gas_used":"0","timestamp":"0","extra_data":null,"base_fee_per_gas":"0x0000000000000000000000000000000000000000000000000000000000000000","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","transactions":null},"execution_changes":[],"blob_kzg_commitments":[]}}},"finalized":false,"version":0,"execution_optimistic":false}` + "\n" - - cases := []struct { - blockID string - code int - slot uint64 - }{ - { - blockID: "0x" + common.Bytes2Hex(rootBlock1[:]), - code: http.StatusOK, - }, - { - blockID: "head", - code: http.StatusOK, - slot: blocks[len(blocks)-1].Block.Slot, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v2/beacon/blocks/" + c.blockID) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - if string(out) != expected { - panic(string(out)) - } - require.Equal(t, expected, string(out)) - }) - } -} - -func TestGetBlockAttestations(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - // Start by testing - rootBlock1, err := blocks[0].Block.HashSSZ() - if err != nil { - t.Fatal(err) - } - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - cases := []struct { - blockID string - code int - attLen int - }{ - { - blockID: "0x" + common.Bytes2Hex(rootBlock1[:]), - code: http.StatusOK, - attLen: blocks[0].Block.Body.Attestations.Len(), - }, - { - blockID: "head", - code: http.StatusOK, - attLen: blocks[len(blocks)-1].Block.Body.Attestations.Len(), - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/blocks/" + c.blockID + "/attestations") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].([]interface{}) - require.Equal(t, len(data), c.attLen) - }) - } -} - -func TestGetBlockRoot(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - var err error - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - // compute block 0 and block len -1 root - blk0Root, err := blocks[0].Block.HashSSZ() - require.NoError(t, err) - - blkLastRoot, err := blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - cases := []struct { - blockID string - code int - root string - }{ - { - blockID: strconv.FormatInt(int64(blocks[0].Block.Slot), 10), - code: http.StatusOK, - root: "0x" + common.Bytes2Hex(blk0Root[:]), - }, - { - blockID: "head", - code: http.StatusOK, - root: "0x" + common.Bytes2Hex(blkLastRoot[:]), - }, - { - blockID: "19912929", - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/blocks/" + c.blockID + "/root") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].(map[string]interface{}) - root := data["root"].(string) - require.Equal(t, root, c.root) - }) - } -} diff --git a/cl/beacon/handler/builder.go b/cl/beacon/handler/builder.go index d71740086..94166e021 100644 --- a/cl/beacon/handler/builder.go +++ b/cl/beacon/handler/builder.go @@ -10,7 +10,7 @@ import ( "github.com/ledgerwatch/erigon/cl/phase1/core/state" ) -func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -19,7 +19,7 @@ func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -44,7 +44,7 @@ func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r if root == headRoot { s, cn := a.syncedData.HeadState() defer cn() - return newBeaconResponse(state.ExpectedWithdrawals(s)).withFinalized(false), nil + return newBeaconResponse(state.ExpectedWithdrawals(s)).WithFinalized(false), nil } lookAhead := 1024 for currSlot := *slot + 1; currSlot < *slot+uint64(lookAhead); currSlot++ { @@ -62,7 +62,7 @@ func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r if err != nil { return nil, err } - return newBeaconResponse(blk.Block.Body.ExecutionPayload.Withdrawals).withFinalized(false), nil + return newBeaconResponse(blk.Block.Body.ExecutionPayload.Withdrawals).WithFinalized(false), nil } return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") diff --git a/cl/beacon/handler/commitees_test.go b/cl/beacon/handler/commitees_test.go deleted file mode 100644 index d0cf455b3..000000000 --- a/cl/beacon/handler/commitees_test.go +++ /dev/null @@ -1,169 +0,0 @@ -//go:build integration - -package handler - -import ( - "io" - "math" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetCommitteesAntiquated(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = math.MaxUint64 - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - - cases := []struct { - name string - blockID string - code int - query string - expected string - }{ - { - name: "slot", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?slot=" + strconv.FormatUint(fcu.HeadSlotVal, 10), - expected: `{"data":[{"index":"0","slot":"8322","validators":["0","104","491","501","379","318","275","504","75","280","105","399","35","401"]}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - name: "empty-index", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?index=1", - expected: `{"data":[],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - name: "all-queries", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?index=0&slot=" + strconv.FormatUint(fcu.HeadSlotVal-32, 10) + "&epoch=" + strconv.FormatUint((fcu.HeadSlotVal/32)-1, 10), - expected: `{"data":[{"index":"0","slot":"8290","validators":["127","377","274","85","309","420","423","398","153","480","273","429","374","260"]}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("GET", server.URL+"/eth/v1/beacon/states/"+c.blockID+"/committees"+c.query, nil) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expected, string(out)) - }) - } -} - -func TestGetCommitteesNonAntiquated(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, sm, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = 0 - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - require.NoError(t, sm.OnHeadState(postState)) - cases := []struct { - name string - blockID string - code int - query string - expected string - }{ - { - name: "slot", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?slot=" + strconv.FormatUint(fcu.HeadSlotVal, 10), - expected: `{"data":[{"index":"0","slot":"8322","validators":["0","104","491","501","379","318","275","504","75","280","105","399","35","401"]}],"finalized":false,"execution_optimistic":false}` + "\n", - }, - { - name: "empty-index", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?index=1", - expected: `{"data":[],"finalized":false,"execution_optimistic":false}` + "\n", - }, - { - name: "all-queries", - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - query: "?index=0&slot=" + strconv.FormatUint(fcu.HeadSlotVal-32, 10) + "&epoch=" + strconv.FormatUint((fcu.HeadSlotVal/32)-1, 10), - expected: `{"data":[{"index":"0","slot":"8290","validators":["127","377","274","85","309","420","423","398","153","480","273","429","374","260"]}],"finalized":false,"execution_optimistic":false}` + "\n", - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("GET", server.URL+"/eth/v1/beacon/states/"+c.blockID+"/committees"+c.query, nil) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expected, string(out)) - }) - } -} diff --git a/cl/beacon/handler/committees.go b/cl/beacon/handler/committees.go index 0ab70fc29..c7e527fbe 100644 --- a/cl/beacon/handler/committees.go +++ b/cl/beacon/handler/committees.go @@ -17,20 +17,20 @@ type committeeResponse struct { Validators []string `json:"validators"` // do string directly but it is still a base10 number } -func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() - epochReq, err := uint64FromQueryParams(r, "epoch") + epochReq, err := beaconhttp.Uint64FromQueryParams(r, "epoch") if err != nil { return nil, err } - index, err := uint64FromQueryParams(r, "index") + index, err := beaconhttp.Uint64FromQueryParams(r, "index") if err != nil { return nil, err } - slotFilter, err := uint64FromQueryParams(r, "slot") + slotFilter, err := beaconhttp.Uint64FromQueryParams(r, "slot") if err != nil { return nil, err } @@ -40,7 +40,7 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea return nil, err } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -100,7 +100,7 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea resp = append(resp, data) } } - return newBeaconResponse(resp).withFinalized(isFinalized), nil + return newBeaconResponse(resp).WithFinalized(isFinalized), nil } // finality case activeIdxs, err := state_accessors.ReadActiveIndicies(tx, epoch*a.beaconChainCfg.SlotsPerEpoch) @@ -143,5 +143,5 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea resp = append(resp, data) } } - return newBeaconResponse(resp).withFinalized(isFinalized), nil + return newBeaconResponse(resp).WithFinalized(isFinalized), nil } diff --git a/cl/beacon/handler/config.go b/cl/beacon/handler/config.go index cc37c8a01..8a0914e76 100644 --- a/cl/beacon/handler/config.go +++ b/cl/beacon/handler/config.go @@ -6,14 +6,15 @@ import ( "sort" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" "github.com/ledgerwatch/erigon/cl/cltypes" ) -func (a *ApiHandler) getSpec(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getSpec(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(a.beaconChainCfg), nil } -func (a *ApiHandler) getDepositContract(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getDepositContract(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(struct { ChainId uint64 `json:"chain_id,string"` DepositContract string `json:"address"` @@ -21,7 +22,7 @@ func (a *ApiHandler) getDepositContract(w http.ResponseWriter, r *http.Request) } -func (a *ApiHandler) getForkSchedule(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getForkSchedule(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { response := []cltypes.Fork{} // create first response (unordered and incomplete) for currentVersion, epoch := range a.beaconChainCfg.ForkVersionSchedule { diff --git a/cl/beacon/handler/config_test.go b/cl/beacon/handler/config_test.go deleted file mode 100644 index 995a38d5a..000000000 --- a/cl/beacon/handler/config_test.go +++ /dev/null @@ -1,83 +0,0 @@ -//go:build integration - -package handler - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/stretchr/testify/require" -) - -func TestGetSpec(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/config/spec") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - data := out["data"].(map[string]interface{}) - require.Equal(t, data["SlotsPerEpoch"], float64(32)) - require.Equal(t, data["SlotsPerHistoricalRoot"], float64(8192)) -} - -func TestGetForkSchedule(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/config/fork_schedule") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Greater(t, len(out["data"].([]interface{})), 2) - for _, v := range out["data"].([]interface{}) { - data := v.(map[string]interface{}) - require.NotNil(t, data["current_version"]) - require.NotNil(t, data["epoch"]) - require.NotNil(t, data["previous_version"]) - } -} - -func TestGetDepositContract(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/config/deposit_contract") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - data := out["data"].(map[string]interface{}) - require.Equal(t, data["address"], "0x00000000219ab540356cBB839Cbe05303d7705Fa") - require.Equal(t, data["chain_id"], "1") -} diff --git a/cl/beacon/handler/data_test.go b/cl/beacon/handler/data_test.go new file mode 100644 index 000000000..3b4276e4c --- /dev/null +++ b/cl/beacon/handler/data_test.go @@ -0,0 +1,98 @@ +package handler_test + +import ( + "embed" + "math" + "os" + "strings" + "testing" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/beacontest" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/log/v3" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" +) + +//go:embed test_data/* +var testData embed.FS + +var TestDatae = beacontest.NewBasePathFs(afero.FromIOFS{FS: testData}, "test_data") + +//go:embed harness/* +var testHarness embed.FS + +var Harnesses = beacontest.NewBasePathFs(afero.FromIOFS{FS: testHarness}, "harness") + +type harnessConfig struct { + t *testing.T + v clparams.StateVersion + finalized bool + forkmode int +} + +func defaultHarnessOpts(c harnessConfig) []beacontest.HarnessOption { + logger := log.New() + for _, v := range os.Args { + if !strings.Contains(v, "test.v") || strings.Contains(v, "test.v=false") { + logger.SetHandler(log.DiscardHandler()) + } + } + _, blocks, _, _, postState, handler, _, sm, fcu := setupTestingHandler(c.t, c.v, logger) + var err error + + if c.forkmode == 0 { + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(c.t, err) + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + if c.finalized { + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + fcu.FinalizedSlotVal = math.MaxUint64 + } else { + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + fcu.FinalizedSlotVal = 0 + fcu.StateAtBlockRootVal[fcu.HeadVal] = postState + require.NoError(c.t, sm.OnHeadState(postState)) + } + } + + if c.forkmode == 1 { + sm.OnHeadState(postState) + s, cancel := sm.HeadState() + s.SetSlot(789274827847783) + cancel() + + fcu.HeadSlotVal = 128 + fcu.HeadVal = common.Hash{1, 2, 3} + + fcu.WeightsMock = []forkchoice.ForkNode{ + { + BlockRoot: common.Hash{1, 2, 3}, + ParentRoot: common.Hash{1, 2, 3}, + Slot: 128, + Weight: 1, + }, + { + BlockRoot: common.Hash{1, 2, 2, 4, 5, 3}, + ParentRoot: common.Hash{1, 2, 5}, + Slot: 128, + Weight: 2, + }, + } + + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{1, 2, 3}, 1) + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{1, 2, 3}, 2) + + } + + return []beacontest.HarnessOption{ + beacontest.WithTesting(c.t), + beacontest.WithFilesystem("td", TestDatae), + beacontest.WithHandler("i", handler), + } +} diff --git a/cl/beacon/handler/duties_attester.go b/cl/beacon/handler/duties_attester.go index a9f1045d0..3fb6a3f16 100644 --- a/cl/beacon/handler/duties_attester.go +++ b/cl/beacon/handler/duties_attester.go @@ -22,8 +22,8 @@ type attesterDutyResponse struct { Slot uint64 `json:"slot,string"` } -func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { - epoch, err := epochFromRequest(r) +func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, err } @@ -33,7 +33,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required", err).Error()) } if len(idxsStr) == 0 { - return newBeaconResponse([]string{}).withOptimistic(false), nil + return newBeaconResponse([]string{}).WithOptimistic(false), nil } idxSet := map[int]struct{}{} // convert the request to uint64 @@ -100,7 +100,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( } } } - return newBeaconResponse(resp).withOptimistic(false), nil + return newBeaconResponse(resp).WithOptimistic(false), nil } stageStateProgress, err := state_accessors.GetStateProcessingProgress(tx) @@ -159,5 +159,5 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( } } } - return newBeaconResponse(resp).withOptimistic(false), nil + return newBeaconResponse(resp).WithOptimistic(false), nil } diff --git a/cl/beacon/handler/duties_attester_test.go b/cl/beacon/handler/duties_attester_test.go deleted file mode 100644 index 0035d99e5..000000000 --- a/cl/beacon/handler/duties_attester_test.go +++ /dev/null @@ -1,153 +0,0 @@ -//go:build integration - -package handler - -import ( - "bytes" - "io" - "math" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestDutiesAttesterAntiquated(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = math.MaxUint64 - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - - cases := []struct { - name string - epoch string - code int - reqBody string - expected string - }{ - { - name: "non-empty-indicies", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - expected: `{"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","committee_index":"0","committee_length":"14","validator_committee_index":"0","committees_at_slot":"1","slot":"8322"},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","committee_index":"0","committee_length":"13","validator_committee_index":"5","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","committee_index":"0","committee_length":"13","validator_committee_index":"10","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","committee_index":"0","committee_length":"14","validator_committee_index":"10","committees_at_slot":"1","slot":"8329"},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","committee_index":"0","committee_length":"14","validator_committee_index":"11","committees_at_slot":"1","slot":"8331"},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","committee_index":"0","committee_length":"14","validator_committee_index":"8","committees_at_slot":"1","slot":"8342"},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","committee_index":"0","committee_length":"13","validator_committee_index":"6","committees_at_slot":"1","slot":"8348"}],"execution_optimistic":false}` + "\n", - }, - { - name: "empty-index", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `[]`, - expected: `{"data":[],"execution_optimistic":false}` + "\n", - }, - { - name: "404", - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - epoch: `999999999`, - code: http.StatusBadRequest, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // - body := bytes.Buffer{} - body.WriteString(c.reqBody) - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("POST", server.URL+"/eth/v1/validator/duties/attester/"+c.epoch, &body) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expected, string(out)) - }) - } -} - -func TestDutiesAttesterNonAntiquated(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, sm, fcu := setupTestingHandler(t, clparams.Phase0Version) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = 0 - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - require.NoError(t, sm.OnHeadState(postState)) - cases := []struct { - name string - epoch string - code int - reqBody string - expected string - }{ - { - name: "non-empty-indicies", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - expected: `{"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","committee_index":"0","committee_length":"14","validator_committee_index":"0","committees_at_slot":"1","slot":"8322"},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","committee_index":"0","committee_length":"13","validator_committee_index":"5","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","committee_index":"0","committee_length":"13","validator_committee_index":"10","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","committee_index":"0","committee_length":"14","validator_committee_index":"10","committees_at_slot":"1","slot":"8329"},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","committee_index":"0","committee_length":"14","validator_committee_index":"11","committees_at_slot":"1","slot":"8331"},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","committee_index":"0","committee_length":"14","validator_committee_index":"8","committees_at_slot":"1","slot":"8342"},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","committee_index":"0","committee_length":"13","validator_committee_index":"6","committees_at_slot":"1","slot":"8348"}],"execution_optimistic":false}` + "\n", - }, - { - name: "empty-index", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `[]`, - expected: `{"data":[],"execution_optimistic":false}` + "\n", - }, - { - name: "404", - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - epoch: `999999999`, - code: http.StatusBadRequest, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // - body := bytes.Buffer{} - body.WriteString(c.reqBody) - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("POST", server.URL+"/eth/v1/validator/duties/attester/"+c.epoch, &body) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expected, string(out)) - }) - } -} diff --git a/cl/beacon/handler/duties_proposer.go b/cl/beacon/handler/duties_proposer.go index fb8ae2a09..95fd2dfb6 100644 --- a/cl/beacon/handler/duties_proposer.go +++ b/cl/beacon/handler/duties_proposer.go @@ -21,8 +21,8 @@ type proposerDuties struct { Slot uint64 `json:"slot,string"` } -func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { - epoch, err := epochFromRequest(r) +func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -55,7 +55,7 @@ func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) ( Slot: epoch*a.beaconChainCfg.SlotsPerEpoch + i, } } - return newBeaconResponse(duties).withFinalized(true).withVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil + return newBeaconResponse(duties).WithFinalized(true).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil } // We need to compute our duties @@ -118,5 +118,5 @@ func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) ( } wg.Wait() - return newBeaconResponse(duties).withFinalized(false).withVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil + return newBeaconResponse(duties).WithFinalized(false).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil } diff --git a/cl/beacon/handler/duties_proposer_test.go b/cl/beacon/handler/duties_proposer_test.go deleted file mode 100644 index 1994098b2..000000000 --- a/cl/beacon/handler/duties_proposer_test.go +++ /dev/null @@ -1,114 +0,0 @@ -//go:build integration - -package handler - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestProposerDutiesProposerFcu(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, postState, _, handler, _, syncedDataManager, fcu := setupTestingHandler(t, clparams.Phase0Version) - epoch := blocks[len(blocks)-1].Block.Slot / 32 - - require.NoError(t, syncedDataManager.OnHeadState(postState)) - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{}, epoch) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/validator/duties/proposer/" + strconv.FormatUint(epoch, 10)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - data := out["data"].([]interface{}) - require.Equal(t, len(data), 32) - for _, v := range data { - d := v.(map[string]interface{}) - require.NotNil(t, d["pubkey"]) - require.NotNil(t, d["validator_index"]) - require.NotNil(t, d["slot"]) - } -} - -func TestProposerDutiesProposerBadEpoch(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, _, _, postState, _, handler, _, syncedDataManager, fcu := setupTestingHandler(t, clparams.Phase0Version) - - require.NoError(t, syncedDataManager.OnHeadState(postState)) - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{}, 1) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/validator/duties/proposer/abc") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusBadRequest, resp.StatusCode) -} - -func TestProposerDutiesNotSynced(t *testing.T) { - _, _, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{}, 1) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/validator/duties/proposer/1") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusServiceUnavailable, resp.StatusCode) -} - -func TestProposerDutiesProposerFcuHistorical(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, postState, _, handler, _, syncedDataManager, fcu := setupTestingHandler(t, clparams.Phase0Version) - epoch := blocks[len(blocks)-1].Block.Slot / 32 - - require.NoError(t, syncedDataManager.OnHeadState(postState)) - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{}, epoch) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/validator/duties/proposer/" + strconv.FormatUint(epoch-1, 10)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - data := out["data"].([]interface{}) - require.Equal(t, len(data), 32) - for _, v := range data { - d := v.(map[string]interface{}) - require.NotNil(t, d["pubkey"]) - require.NotNil(t, d["validator_index"]) - require.NotNil(t, d["slot"]) - } -} diff --git a/cl/beacon/handler/duties_sync.go b/cl/beacon/handler/duties_sync.go index e52a8a232..154b7d402 100644 --- a/cl/beacon/handler/duties_sync.go +++ b/cl/beacon/handler/duties_sync.go @@ -20,8 +20,8 @@ type syncDutyResponse struct { ValidatorSyncCommitteeIndicies []string `json:"validator_sync_committee_indicies"` } -func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { - epoch, err := epochFromRequest(r) +func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, err } @@ -34,7 +34,7 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required.", err).Error()) } if len(idxsStr) == 0 { - return newBeaconResponse([]string{}).withOptimistic(false), nil + return newBeaconResponse([]string{}).WithOptimistic(false), nil } duplicates := map[int]struct{}{} // convert the request to uint64 @@ -142,5 +142,5 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea return duties[i].ValidatorIndex < duties[j].ValidatorIndex }) - return newBeaconResponse(duties).withOptimistic(false), nil + return newBeaconResponse(duties).WithOptimistic(false), nil } diff --git a/cl/beacon/handler/duties_sync_test.go b/cl/beacon/handler/duties_sync_test.go deleted file mode 100644 index 9eabf90e3..000000000 --- a/cl/beacon/handler/duties_sync_test.go +++ /dev/null @@ -1,87 +0,0 @@ -//go:build integration - -package handler - -import ( - "bytes" - "io" - "math" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestDutiesSync(t *testing.T) { - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = math.MaxUint64 - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - - cases := []struct { - name string - epoch string - code int - reqBody string - expected string - }{ - { - name: "non-empty-indicies", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - expected: `{"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","validator_sync_committee_indicies":["30","286"]},{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","validator_index":"1","validator_sync_committee_indicies":["120","376"]},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","validator_sync_committee_indicies":["138","394"]},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","validator_sync_committee_indicies":["10","266"]},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","validator_sync_committee_indicies":["114","370"]},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","validator_sync_committee_indicies":["103","359"]},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","validator_sync_committee_indicies":["163","419"]},{"pubkey":"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","validator_index":"7","validator_sync_committee_indicies":["197","453"]},{"pubkey":"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","validator_index":"8","validator_sync_committee_indicies":["175","431"]},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","validator_sync_committee_indicies":["53","309"]}],"execution_optimistic":false}` + "\n", - }, - { - name: "empty-index", - epoch: strconv.FormatUint(fcu.HeadSlotVal/32, 10), - code: http.StatusOK, - reqBody: `[]`, - expected: `{"data":[],"execution_optimistic":false}` + "\n", - }, - { - name: "404", - reqBody: `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`, - epoch: `999999999`, - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // - body := bytes.Buffer{} - body.WriteString(c.reqBody) - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("POST", server.URL+"/eth/v1/validator/duties/sync/"+c.epoch, &body) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - if string(out) != c.expected { - panic(string(out)) - } - require.Equal(t, c.expected, string(out)) - }) - } -} diff --git a/cl/beacon/handler/forkchoice.go b/cl/beacon/handler/forkchoice.go index 4f7f845b7..e8ceea1f6 100644 --- a/cl/beacon/handler/forkchoice.go +++ b/cl/beacon/handler/forkchoice.go @@ -7,7 +7,7 @@ import ( "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" ) -func (a *ApiHandler) GetEthV2DebugBeaconHeads(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEthV2DebugBeaconHeads(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { if a.syncedData.Syncing() { return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, "beacon node is syncing") } diff --git a/cl/beacon/handler/forkchoice_test.go b/cl/beacon/handler/forkchoice_test.go deleted file mode 100644 index 8b98997f8..000000000 --- a/cl/beacon/handler/forkchoice_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package handler - -import ( - "io" - "net/http/httptest" - "testing" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" - "github.com/stretchr/testify/require" -) - -func TestGetHeads(t *testing.T) { - // find server - _, _, _, _, p, handler, _, sm, fcu := setupTestingHandler(t, clparams.Phase0Version) - sm.OnHeadState(p) - s, cancel := sm.HeadState() - s.SetSlot(789274827847783) - cancel() - - fcu.HeadSlotVal = 128 - fcu.HeadVal = libcommon.Hash{1, 2, 3} - server := httptest.NewServer(handler.mux) - defer server.Close() - - // get heads - resp, err := server.Client().Get(server.URL + "/eth/v2/debug/beacon/heads") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - - require.Equal(t, `{"data":[{"execution_optimistic":false,"root":"0x0102030000000000000000000000000000000000000000000000000000000000","slot":128}]}`+"\n", string(out)) -} - -func TestGetForkchoice(t *testing.T) { - // find server - _, _, _, _, p, handler, _, sm, fcu := setupTestingHandler(t, clparams.Phase0Version) - sm.OnHeadState(p) - s, cancel := sm.HeadState() - s.SetSlot(789274827847783) - cancel() - - fcu.HeadSlotVal = 128 - fcu.HeadVal = libcommon.Hash{1, 2, 3} - server := httptest.NewServer(handler.mux) - defer server.Close() - - fcu.WeightsMock = []forkchoice.ForkNode{ - { - BlockRoot: libcommon.Hash{1, 2, 3}, - ParentRoot: libcommon.Hash{1, 2, 3}, - Slot: 128, - Weight: 1, - }, - { - BlockRoot: libcommon.Hash{1, 2, 2, 4, 5, 3}, - ParentRoot: libcommon.Hash{1, 2, 5}, - Slot: 128, - Weight: 2, - }, - } - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(libcommon.Hash{1, 2, 3}, 1) - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(libcommon.Hash{1, 2, 3}, 2) - - // get heads - resp, err := server.Client().Get(server.URL + "/eth/v1/debug/fork_choice") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, `{"finalized_checkpoint":{"epoch":"1","root":"0x0102030000000000000000000000000000000000000000000000000000000000"},"fork_choice_nodes":[{"slot":"128","block_root":"0x0102030000000000000000000000000000000000000000000000000000000000","parent_root":"0x0102030000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"1","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"},{"slot":"128","block_root":"0x0102020405030000000000000000000000000000000000000000000000000000","parent_root":"0x0102050000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"2","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"}],"justified_checkpoint":{"epoch":"2","root":"0x0102030000000000000000000000000000000000000000000000000000000000"}}`+"\n", string(out)) -} diff --git a/cl/beacon/handler/format.go b/cl/beacon/handler/format.go index 3a96cf6e8..bb071a0b2 100644 --- a/cl/beacon/handler/format.go +++ b/cl/beacon/handler/format.go @@ -1,242 +1,9 @@ package handler import ( - "fmt" - "net/http" - "regexp" - "strconv" - - "github.com/go-chi/chi/v5" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/types/ssz" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/clparams" ) -type apiError struct { - code int - err error -} - -type beaconResponse struct { - Data any `json:"data,omitempty"` - Finalized *bool `json:"finalized,omitempty"` - Version *clparams.StateVersion `json:"version,omitempty"` - ExecutionOptimistic *bool `json:"execution_optimistic,omitempty"` -} - -func (b *beaconResponse) EncodeSSZ(xs []byte) ([]byte, error) { - marshaler, ok := b.Data.(ssz.Marshaler) - if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, "This endpoint does not support SSZ response") - } - encoded, err := marshaler.EncodeSSZ(nil) - if err != nil { - return nil, err - } - return encoded, nil -} - -func (b *beaconResponse) EncodingSizeSSZ() int { - marshaler, ok := b.Data.(ssz.Marshaler) - if !ok { - return 9 - } - return marshaler.EncodingSizeSSZ() -} - -func newBeaconResponse(data any) *beaconResponse { - return &beaconResponse{ - Data: data, - } -} - -func (r *beaconResponse) withFinalized(finalized bool) (out *beaconResponse) { - out = new(beaconResponse) - *out = *r - out.Finalized = new(bool) - out.ExecutionOptimistic = new(bool) - out.Finalized = &finalized - return out -} - -func (r *beaconResponse) withOptimistic(optimistic bool) (out *beaconResponse) { - out = new(beaconResponse) - *out = *r - out.ExecutionOptimistic = new(bool) - out.ExecutionOptimistic = &optimistic - return out -} - -func (r *beaconResponse) withVersion(version clparams.StateVersion) (out *beaconResponse) { - out = new(beaconResponse) - *out = *r - out.Version = new(clparams.StateVersion) - out.Version = &version - return out -} - -type chainTag int - -var ( - Head chainTag = 0 - Finalized chainTag = 1 - Justified chainTag = 2 - Genesis chainTag = 3 -) - -// Represent either state id or block id -type segmentID struct { - tag chainTag - slot *uint64 - root *libcommon.Hash -} - -func (c *segmentID) head() bool { - return c.tag == Head && c.slot == nil && c.root == nil -} - -func (c *segmentID) finalized() bool { - return c.tag == Finalized -} - -func (c *segmentID) justified() bool { - return c.tag == Justified -} - -func (c *segmentID) genesis() bool { - return c.tag == Genesis -} - -func (c *segmentID) getSlot() *uint64 { - return c.slot -} - -func (c *segmentID) getRoot() *libcommon.Hash { - return c.root -} - -func epochFromRequest(r *http.Request) (uint64, error) { - // Must only be a number - regex := regexp.MustCompile(`^\d+$`) - epoch := chi.URLParam(r, "epoch") - if !regex.MatchString(epoch) { - return 0, fmt.Errorf("invalid path variable: {epoch}") - } - epochMaybe, err := strconv.ParseUint(epoch, 10, 64) - if err != nil { - return 0, err - } - return epochMaybe, nil -} - -func stringFromRequest(r *http.Request, name string) (string, error) { - str := chi.URLParam(r, name) - if str == "" { - return "", nil - } - return str, nil -} - -func blockIdFromRequest(r *http.Request) (*segmentID, error) { - regex := regexp.MustCompile(`^(?:0x[0-9a-fA-F]{64}|head|finalized|genesis|\d+)$`) - - blockId := chi.URLParam(r, "block_id") - if !regex.MatchString(blockId) { - return nil, fmt.Errorf("invalid path variable: {block_id}") - } - - if blockId == "head" { - return &segmentID{tag: Head}, nil - } - if blockId == "finalized" { - return &segmentID{tag: Finalized}, nil - } - if blockId == "genesis" { - return &segmentID{tag: Genesis}, nil - } - slotMaybe, err := strconv.ParseUint(blockId, 10, 64) - if err == nil { - return &segmentID{slot: &slotMaybe}, nil - } - root := libcommon.HexToHash(blockId) - return &segmentID{ - root: &root, - }, nil -} - -func stateIdFromRequest(r *http.Request) (*segmentID, error) { - regex := regexp.MustCompile(`^(?:0x[0-9a-fA-F]{64}|head|finalized|genesis|justified|\d+)$`) - - stateId := chi.URLParam(r, "state_id") - if !regex.MatchString(stateId) { - return nil, fmt.Errorf("invalid path variable: {state_id}") - } - - if stateId == "head" { - return &segmentID{tag: Head}, nil - } - if stateId == "finalized" { - return &segmentID{tag: Finalized}, nil - } - if stateId == "genesis" { - return &segmentID{tag: Genesis}, nil - } - if stateId == "justified" { - return &segmentID{tag: Justified}, nil - } - slotMaybe, err := strconv.ParseUint(stateId, 10, 64) - if err == nil { - return &segmentID{slot: &slotMaybe}, nil - } - root := libcommon.HexToHash(stateId) - return &segmentID{ - root: &root, - }, nil -} - -func hashFromQueryParams(r *http.Request, name string) (*libcommon.Hash, error) { - hashStr := r.URL.Query().Get(name) - if hashStr == "" { - return nil, nil - } - // check if hashstr is an hex string - if len(hashStr) != 2+2*32 { - return nil, fmt.Errorf("invalid hash length") - } - if hashStr[:2] != "0x" { - return nil, fmt.Errorf("invalid hash prefix") - } - notHex, err := regexp.MatchString("[^0-9A-Fa-f]", hashStr[2:]) - if err != nil { - return nil, err - } - if notHex { - return nil, fmt.Errorf("invalid hash characters") - } - - hash := libcommon.HexToHash(hashStr) - return &hash, nil -} - -// uint64FromQueryParams retrieves a number from the query params, in base 10. -func uint64FromQueryParams(r *http.Request, name string) (*uint64, error) { - str := r.URL.Query().Get(name) - if str == "" { - return nil, nil - } - num, err := strconv.ParseUint(str, 10, 64) - if err != nil { - return nil, err - } - return &num, nil -} - -// decode a list of strings from the query params -func stringListFromQueryParams(r *http.Request, name string) ([]string, error) { - str := r.URL.Query().Get(name) - if str == "" { - return nil, nil - } - return regexp.MustCompile(`\s*,\s*`).Split(str, -1), nil +func newBeaconResponse(data any) *beaconhttp.BeaconResponse { + return beaconhttp.NewBeaconResponse(data) } diff --git a/cl/beacon/handler/genesis.go b/cl/beacon/handler/genesis.go index 3ca18d7dc..562c65429 100644 --- a/cl/beacon/handler/genesis.go +++ b/cl/beacon/handler/genesis.go @@ -15,7 +15,7 @@ type genesisResponse struct { GenesisForkVersion libcommon.Bytes4 `json:"genesis_fork_version"` } -func (a *ApiHandler) getGenesis(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getGenesis(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { if a.genesisCfg == nil { return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "Genesis Config is missing") } diff --git a/cl/beacon/handler/genesis_test.go b/cl/beacon/handler/genesis_test.go deleted file mode 100644 index 544830c86..000000000 --- a/cl/beacon/handler/genesis_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package handler - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/stretchr/testify/require" -) - -func TestGetGenesis(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - - resp, err := http.Get(server.URL + "/eth/v1/beacon/genesis") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, http.StatusOK, resp.StatusCode) - out := make(map[string]interface{}) - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - data := out["data"].(map[string]interface{}) - genesisTime := data["genesis_time"].(string) - require.Equal(t, genesisTime, "1606824023") - require.Equal(t, data["genesis_fork_version"], "0xbba4da96") - require.Equal(t, data["genesis_validators_root"], "0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95") -} diff --git a/cl/beacon/handler/handler.go b/cl/beacon/handler/handler.go index f0fe3bd5a..8328efdac 100644 --- a/cl/beacon/handler/handler.go +++ b/cl/beacon/handler/handler.go @@ -44,6 +44,11 @@ func NewApiHandler(genesisConfig *clparams.GenesisConfig, beaconChainConfig *clp }}, sentinel: sentinel, version: version} } +func (a *ApiHandler) Init() { + a.o.Do(func() { + a.init() + }) +} func (a *ApiHandler) init() { r := chi.NewRouter() a.mux = r diff --git a/cl/beacon/handler/harness/attestation_rewards_bellatrix.yml b/cl/beacon/handler/harness/attestation_rewards_bellatrix.yml new file mode 100644 index 000000000..666037354 --- /dev/null +++ b/cl/beacon/handler/harness/attestation_rewards_bellatrix.yml @@ -0,0 +1,31 @@ +vars: + finalized_epoch: "99999999" + justified_slot: "160" + justified_epoch: "4" +tests: + ## blocks + - name: all validators + expect: + file: "attestations_1" + fs: td + actual: + handler: i + method: post + path: /eth/v1/beacon/rewards/attestations/{{.Vars.justified_epoch}} + - name: two validators + expect: + file: "attestations_2" + fs: td + actual: + handler: i + method: post + path: /eth/v1/beacon/rewards/attestations/{{.Vars.justified_epoch}} + body: + data: ["1","4"] + - name: not found + actual: + handler: i + method: post + path: /eth/v1/beacon/rewards/attestations/{{.Vars.finalized_epoch}} + compare: + expr: "actual_code == 404" diff --git a/cl/beacon/handler/harness/attestation_rewards_phase0.yml b/cl/beacon/handler/harness/attestation_rewards_phase0.yml new file mode 100644 index 000000000..9ce844054 --- /dev/null +++ b/cl/beacon/handler/harness/attestation_rewards_phase0.yml @@ -0,0 +1,33 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + finalized_epoch: "99999999" + justified_slot: "8322" + justified_epoch: "259" +tests: + ## blocks + - name: all validators + expect: + file: "attestations_3" + fs: td + actual: + handler: i + method: post + path: /eth/v1/beacon/rewards/attestations/{{.Vars.justified_epoch}} + - name: two validators + expect: + file: "attestations_4" + fs: td + actual: + handler: i + path: /eth/v1/beacon/rewards/attestations/{{.Vars.justified_epoch}} + method: post + body: + data: ["1","4"] + - name: not found + actual: + handler: i + method: post + path: /eth/v1/beacon/rewards/attestations/{{.Vars.finalized_epoch}} + compare: + expr: "actual_code == 404" diff --git a/cl/beacon/handler/harness/blocks.yml b/cl/beacon/handler/harness/blocks.yml new file mode 100644 index 000000000..0961b45a3 --- /dev/null +++ b/cl/beacon/handler/harness/blocks.yml @@ -0,0 +1,100 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' +tests: + ## blocks + - name: by hash + expect: + file: "block_1" + fs: td + actual: + handler: i + path: /eth/v2/beacon/blocks/{{.Vars.head_hash}} + - name: by head + expect: + file: "block_1" + fs: td + compare: + exprs: + - actual_code == 200 + - actual == expect + actual: + handler: i + path: /eth/v2/beacon/blocks/head + - name: not found + actual: + handler: i + path: /eth/v2/beacon/blocks/{{.Vars.bad_hash}} + compare: + expr: "actual_code == 404" + ## blinded blocks + - name: blinded by hash + expect: + file: "blinded_block_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/blinded_blocks/{{.Vars.head_hash}} + - name: blinded by head + expect: + file: "blinded_block_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/blinded_blocks/head + - name: blinded not found + actual: + handler: i + path: /eth/v1/beacon/blinded_blocks/{{.Vars.bad_hash}} + compare: + expr: "actual_code == 404" + ### attestations + - name: attestations by hash + expect: + file: "block_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/blocks/{{.Vars.head_hash}}/attestations + compare: + expr: "size(actual.data) == size(expect.data.message.body.attestations)" + - name: attestions by head + expect: + file: "block_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/blocks/head/attestations + compare: + exprs: + - actual_code == 200 + - size(actual.data) == size(expect.data.message.body.attestations) + - name: attestions not found + actual: + handler: i + path: /eth/v1/beacon/blocks/{{.Vars.bad_hash}}/attestations + compare: + expr: "actual_code == 404" + ### root + - name: root by hash + actual: + handler: i + path: /eth/v1/beacon/blocks/{{.Vars.head_hash}}/root + compare: + exprs: + - actual_code == 200 + - actual.data.root == "{{.Vars.head_hash}}" + - name: root by head + actual: + handler: i + path: /eth/v1/beacon/blocks/head/root + compare: + exprs: + - actual_code == 200 + - actual.data.root == "{{.Vars.head_hash}}" + - name: root not found + actual: + handler: i + path: /eth/v1/beacon/blocks/19912929/root + compare: + expr: "actual_code == 404" diff --git a/cl/beacon/handler/harness/committees.yml b/cl/beacon/handler/harness/committees.yml new file mode 100644 index 000000000..268ef20ed --- /dev/null +++ b/cl/beacon/handler/harness/committees.yml @@ -0,0 +1,55 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + head_slot: 8322 + head_epoch: "260" +tests: + - name: slot non antiquated + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + slot: "8322" + compare: + exprs: + - "actual_code == 200" + - "expect[3] == actual" + - name: empty index non antiquated + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + index: "1" + compare: + exprs: + - "actual_code == 200" + - "expect[4] == actual" + - name: all queries non antiquated + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + index: "0" + slot: "{{sub .Vars.head_slot 32}}" + epoch: "{{sub .Vars.head_epoch 1}}" + compare: + exprs: + - "actual_code == 200" + - "expect[5] == actual" + - name: 404 non antiquated + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.bad_hash}}/committees + compare: + exprs: + - "actual_code == 404" diff --git a/cl/beacon/handler/harness/committees_f.yml b/cl/beacon/handler/harness/committees_f.yml new file mode 100644 index 000000000..f71de0b39 --- /dev/null +++ b/cl/beacon/handler/harness/committees_f.yml @@ -0,0 +1,55 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + head_slot: 8322 + head_epoch: "260" +tests: + - name: slot + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + slot: "8322" + compare: + exprs: + - "actual_code == 200" + - "expect[0] == actual" + - name: empty index + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + index: "1" + compare: + exprs: + - "actual_code == 200" + - "expect[1] == actual" + - name: all queries + expect: + file: "committees_1" + fs: td + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.post_root}}/committees + query: + index: "0" + slot: "{{sub .Vars.head_slot 32}}" + epoch: "{{sub .Vars.head_epoch 1}}" + compare: + exprs: + - "actual_code == 200" + - "expect[2] == actual" + - name: "404" + actual: + handler: i + path: /eth/v1/beacon/states/{{.Vars.bad_hash}}/committees + compare: + exprs: + - "actual_code == 404" diff --git a/cl/beacon/handler/harness/config.yml b/cl/beacon/handler/harness/config.yml new file mode 100644 index 000000000..e9910ba5c --- /dev/null +++ b/cl/beacon/handler/harness/config.yml @@ -0,0 +1,32 @@ +tests: + - name: spec + actual: + handler: i + path: /eth/v1/config/spec + compare: + exprs: + - actual_code == 200 + - actual.data.SlotsPerEpoch == 32 + - actual.data.SlotsPerHistoricalRoot == 8192 + - name: fork schedule + actual: + handler: i + path: /eth/v1/config/fork_schedule + compare: + exprs: + - actual_code == 200 + - has(actual.data[0].current_version) + - has(actual.data[0].previous_version) + - has(actual.data[0].epoch) + - has(actual.data[1].current_version) + - has(actual.data[1].previous_version) + - has(actual.data[1].epoch) + - name: deposit contract + actual: + handler: i + path: /eth/v1/config/deposit_contract + compare: + exprs: + - actual_code == 200 + - actual.data.address == "0x00000000219ab540356cBB839Cbe05303d7705Fa" + - actual.data.chain_id == "1" diff --git a/cl/beacon/handler/harness/duties_attester.yml b/cl/beacon/handler/harness/duties_attester.yml new file mode 100644 index 000000000..840927438 --- /dev/null +++ b/cl/beacon/handler/harness/duties_attester.yml @@ -0,0 +1,45 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + head_slot: 8322 + head_epoch: "260" +tests: + - name: non empty indices + expect: + file: "duties_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/attester/{{.Vars.head_epoch}} + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 200" + - "expect[0] == actual" + - name: empty index + expect: + file: "duties_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/attester/{{.Vars.head_epoch}} + method: post + body: + data: [] + compare: + exprs: + - "actual_code == 200" + - "expect[1] == actual" + - name: 400 non antiquated + actual: + handler: i + path: /eth/v1/validator/duties/attester/999999999 + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 400" diff --git a/cl/beacon/handler/harness/duties_attester_f.yml b/cl/beacon/handler/harness/duties_attester_f.yml new file mode 100644 index 000000000..840927438 --- /dev/null +++ b/cl/beacon/handler/harness/duties_attester_f.yml @@ -0,0 +1,45 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + head_slot: 8322 + head_epoch: "260" +tests: + - name: non empty indices + expect: + file: "duties_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/attester/{{.Vars.head_epoch}} + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 200" + - "expect[0] == actual" + - name: empty index + expect: + file: "duties_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/attester/{{.Vars.head_epoch}} + method: post + body: + data: [] + compare: + exprs: + - "actual_code == 200" + - "expect[1] == actual" + - name: 400 non antiquated + actual: + handler: i + path: /eth/v1/validator/duties/attester/999999999 + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 400" diff --git a/cl/beacon/handler/harness/duties_proposer.yml b/cl/beacon/handler/harness/duties_proposer.yml new file mode 100644 index 000000000..30bded64f --- /dev/null +++ b/cl/beacon/handler/harness/duties_proposer.yml @@ -0,0 +1,42 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + head_slot: 8322 + head_epoch: "260" +tests: + - name: proposer duties + actual: + handler: i + path: /eth/v1/validator/duties/proposer/{{.Vars.head_epoch}} + compare: + exprs: + - actual_code == 200 + - size(actual.data) == 32 + - has(actual.data[0].pubkey) + - has(actual.data[0].validator_index) + - has(actual.data[0].slot) + - name: proposer bad epoch + actual: + handler: i + path: /eth/v1/validator/duties/proposer/abc + compare: + expr: "actual_code == 400" + + - name: proposer duties not synced + actual: + handler: i + path: /eth/v1/validator/duties/proposer/1 + compare: + expr: "actual_code == 503" + - name: fcu historical + actual: + handler: i + path: /eth/v1/validator/duties/proposer/{{sub .Vars.head_epoch 1}} + compare: + exprs: + - actual_code == 200 + - size(actual.data) == 32 + - has(actual.data[0].pubkey) + - has(actual.data[0].validator_index) + - has(actual.data[0].slot) diff --git a/cl/beacon/handler/harness/duties_sync_bellatrix.yml b/cl/beacon/handler/harness/duties_sync_bellatrix.yml new file mode 100644 index 000000000..5d1978923 --- /dev/null +++ b/cl/beacon/handler/harness/duties_sync_bellatrix.yml @@ -0,0 +1,43 @@ +vars: + finalized_epoch: 99999999 + head_slot: 160 + head_epoch: 4 +tests: + - name: non empty indices + expect: + file: "duties_sync_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/sync/{{.Vars.head_epoch}} + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 200" + - "expect[0] == actual" + - name: empty index + expect: + file: "duties_sync_1" + fs: td + actual: + handler: i + path: /eth/v1/validator/duties/sync/{{.Vars.head_epoch}} + method: post + body: + data: [] + compare: + exprs: + - "actual_code == 200" + - "expect[1] == actual" + - name: "404 giant epoch" + actual: + handler: i + path: /eth/v1/validator/duties/sync/999999999 + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9"] + compare: + exprs: + - "actual_code == 404" diff --git a/cl/beacon/handler/harness/fork_choice.yml b/cl/beacon/handler/harness/fork_choice.yml new file mode 100644 index 000000000..3c1c97b82 --- /dev/null +++ b/cl/beacon/handler/harness/fork_choice.yml @@ -0,0 +1,24 @@ +vars: +tests: + - name: get fork choice + expect: + file: "forkchoice_1" + fs: td + actual: + handler: i + path: /eth/v2/debug/beacon/heads + compare: + exprs: + - "actual_code == 200" + - "actual == expect[0]" + - name: get heads + expect: + file: "forkchoice_1" + fs: td + actual: + handler: i + path: /eth/v1/debug/fork_choice + compare: + exprs: + - "actual_code == 200" + - "actual == expect[1]" diff --git a/cl/beacon/handler/harness/headers.yml b/cl/beacon/handler/harness/headers.yml new file mode 100644 index 000000000..38a6a9fbf --- /dev/null +++ b/cl/beacon/handler/harness/headers.yml @@ -0,0 +1,38 @@ +vars: + head_hash: '0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660' + post_root: '0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' + head_slot: 8322 + first_slot: 8288 + head_epoch: "260" + body_root_1: "0x8d07005613673b3684b527f9c4dab5191403177e79b0e0bc1d58f15021abab19" + body_root_2: "0xa6957819a5055b6d760c1b2ec034522cc033a7dd94c743ed936d8f8d0eb5ccce" + block_1_hash: "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" +tests: + - name: not head + actual: + handler: i + path: /eth/v1/beacon/headers/{{.Vars.block_1_hash}} + compare: + exprs: + - actual_code == 200 + - actual.data.canonical == true + - actual.data.header.message.body_root == "{{.Vars.body_root_1}}" + - actual.data.header.message.slot == "{{.Vars.first_slot}}" + - name: head + actual: + handler: i + path: /eth/v1/beacon/headers/head + compare: + exprs: + - actual_code == 200 + - actual.data.canonical == true + - actual.data.header.message.body_root == "{{.Vars.body_root_2}}" + - actual.data.header.message.slot == "{{.Vars.head_slot}}" + - name: not head + actual: + handler: i + path: /eth/v1/beacon/headers/{{.Vars.bad_hash}} + compare: + exprs: + - actual_code == 404 diff --git a/cl/beacon/handler/harness/liveness.yml b/cl/beacon/handler/harness/liveness.yml new file mode 100644 index 000000000..4d793f7df --- /dev/null +++ b/cl/beacon/handler/harness/liveness.yml @@ -0,0 +1,13 @@ +tests: + - name: spec + actual: + handler: i + path: /eth/v1/validator/liveness/260 + method: post + body: + data: ["0","1","2","3","4","5","6","7","8","9","10"] + compare: + exprs: + - "actual_code==200" + - "size(actual.data) == 11" + - "actual.data.all(x,has(x.is_live) && has(x.index))" diff --git a/cl/beacon/handler/harness_test.go b/cl/beacon/handler/harness_test.go new file mode 100644 index 000000000..8c0086a09 --- /dev/null +++ b/cl/beacon/handler/harness_test.go @@ -0,0 +1,53 @@ +package handler_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon/cl/beacon/beacontest" + "github.com/ledgerwatch/erigon/cl/clparams" + + _ "embed" +) + +func TestHarnessPhase0(t *testing.T) { + beacontest.Execute( + append( + defaultHarnessOpts(harnessConfig{t: t, v: clparams.Phase0Version}), + beacontest.WithTestFromFs(Harnesses, "blocks"), + beacontest.WithTestFromFs(Harnesses, "config"), + beacontest.WithTestFromFs(Harnesses, "headers"), + beacontest.WithTestFromFs(Harnesses, "attestation_rewards_phase0"), + beacontest.WithTestFromFs(Harnesses, "committees"), + beacontest.WithTestFromFs(Harnesses, "duties_attester"), + beacontest.WithTestFromFs(Harnesses, "duties_proposer"), + )..., + ) +} +func TestHarnessPhase0Finalized(t *testing.T) { + beacontest.Execute( + append( + defaultHarnessOpts(harnessConfig{t: t, v: clparams.Phase0Version, finalized: true}), + beacontest.WithTestFromFs(Harnesses, "liveness"), + beacontest.WithTestFromFs(Harnesses, "duties_attester_f"), + beacontest.WithTestFromFs(Harnesses, "committees_f"), + )..., + ) +} + +func TestHarnessBellatrix(t *testing.T) { + beacontest.Execute( + append( + defaultHarnessOpts(harnessConfig{t: t, v: clparams.BellatrixVersion, finalized: true}), + beacontest.WithTestFromFs(Harnesses, "attestation_rewards_bellatrix"), + beacontest.WithTestFromFs(Harnesses, "duties_sync_bellatrix"), + )..., + ) +} +func TestHarnessForkChoice(t *testing.T) { + beacontest.Execute( + append( + defaultHarnessOpts(harnessConfig{t: t, v: clparams.BellatrixVersion, forkmode: 1}), + beacontest.WithTestFromFs(Harnesses, "fork_choice"), + )..., + ) +} diff --git a/cl/beacon/handler/headers.go b/cl/beacon/handler/headers.go index 462cdf5cf..43c9a6685 100644 --- a/cl/beacon/handler/headers.go +++ b/cl/beacon/handler/headers.go @@ -9,14 +9,14 @@ import ( "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" ) -func (a *ApiHandler) getHeaders(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getHeaders(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() - querySlot, err := uint64FromQueryParams(r, "slot") + querySlot, err := beaconhttp.Uint64FromQueryParams(r, "slot") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } - queryParentHash, err := hashFromQueryParams(r, "parent_root") + queryParentHash, err := beaconhttp.HashFromQueryParams(r, "parent_root") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -89,14 +89,14 @@ func (a *ApiHandler) getHeaders(w http.ResponseWriter, r *http.Request) (*beacon return newBeaconResponse(headers), nil } -func (a *ApiHandler) getHeader(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getHeader(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { return nil, err } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -125,5 +125,5 @@ func (a *ApiHandler) getHeader(w http.ResponseWriter, r *http.Request) (*beaconR Root: root, Canonical: canonicalRoot == root, Header: signedHeader, - }).withFinalized(canonicalRoot == root && signedHeader.Header.Slot <= a.forkchoiceStore.FinalizedSlot()).withVersion(version), nil + }).WithFinalized(canonicalRoot == root && signedHeader.Header.Slot <= a.forkchoiceStore.FinalizedSlot()).WithVersion(version), nil } diff --git a/cl/beacon/handler/headers_test.go b/cl/beacon/handler/headers_test.go deleted file mode 100644 index 25efb1a2c..000000000 --- a/cl/beacon/handler/headers_test.go +++ /dev/null @@ -1,180 +0,0 @@ -//go:build integration - -package handler - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetHeader(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - // Start by testing - rootBlock1, err := blocks[0].Block.HashSSZ() - if err != nil { - t.Fatal(err) - } - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - bodyRoot1, err := blocks[0].Block.Body.HashSSZ() - require.NoError(t, err) - - bodyRoot2, err := blocks[len(blocks)-1].Block.Body.HashSSZ() - require.NoError(t, err) - - cases := []struct { - blockID string - code int - slot uint64 - bodyRoot string - }{ - { - blockID: "0x" + common.Bytes2Hex(rootBlock1[:]), - code: http.StatusOK, - slot: blocks[0].Block.Slot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot1[:]), - }, - { - blockID: "head", - code: http.StatusOK, - slot: blocks[len(blocks)-1].Block.Slot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot2[:]), - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/headers/" + c.blockID) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].(map[string]interface{}) - header := data["header"].(map[string]interface{}) - message := header["message"].(map[string]interface{}) - - // compare the block - require.Equal(t, message["slot"], strconv.FormatInt(int64(c.slot), 10)) - require.Equal(t, message["body_root"], c.bodyRoot) - require.Equal(t, data["canonical"], true) - }) - } -} - -func TestGetHeaders(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - var err error - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - bodyRoot1, err := blocks[0].Block.Body.HashSSZ() - require.NoError(t, err) - - bodyRoot2, err := blocks[len(blocks)-1].Block.Body.HashSSZ() - require.NoError(t, err) - - cases := []struct { - name string - code int - slotReq *uint64 - parentRoot *libcommon.Hash - slot uint64 - bodyRoot string - count int - }{ - { - count: 1, - name: "slot", - code: http.StatusOK, - slotReq: &blocks[0].Block.Slot, - slot: blocks[0].Block.Slot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot1[:]), - }, - { - count: 0, - name: "none", - code: http.StatusOK, - slot: blocks[len(blocks)-1].Block.Slot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot2[:]), - }, - { - count: 0, - name: "parent", - code: http.StatusOK, - slotReq: &blocks[0].Block.Slot, - slot: blocks[0].Block.Slot, - parentRoot: &blocks[0].Block.ParentRoot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot1[:]), - }, - { - count: 0, - name: "wtf", - code: http.StatusOK, - slotReq: new(uint64), - slot: blocks[0].Block.Slot, - parentRoot: &blocks[0].Block.ParentRoot, - bodyRoot: "0x" + common.Bytes2Hex(bodyRoot1[:]), - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - url := server.URL + "/eth/v1/beacon/headers?lol=0" // lol is a random query param - - if c.slotReq != nil { - url += "&slot=" + strconv.FormatInt(int64(*c.slotReq), 10) - } - if c.parentRoot != nil { - url += "&parent_root=" + "0x" + common.Bytes2Hex(c.parentRoot[:]) - } - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(url) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].([]interface{}) - require.Equal(t, len(data), c.count) - }) - } -} diff --git a/cl/beacon/handler/liveness.go b/cl/beacon/handler/liveness.go index f6b8bd4b5..99ec031d8 100644 --- a/cl/beacon/handler/liveness.go +++ b/cl/beacon/handler/liveness.go @@ -20,8 +20,8 @@ type live struct { IsLive bool `json:"is_live"` } -func (a *ApiHandler) liveness(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { - epoch, err := epochFromRequest(r) +func (a *ApiHandler) liveness(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, err } diff --git a/cl/beacon/handler/liveness_test.go b/cl/beacon/handler/liveness_test.go deleted file mode 100644 index 73bb5deec..000000000 --- a/cl/beacon/handler/liveness_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package handler - -import ( - "bytes" - "encoding/json" - "math" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestLiveness(t *testing.T) { - // i just want the correct schema to be generated - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedSlotVal = math.MaxUint64 - reqBody := `["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]` - server := httptest.NewServer(handler.mux) - defer server.Close() - // - body := bytes.Buffer{} - body.WriteString(reqBody) - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("POST", server.URL+"/eth/v1/validator/liveness/"+strconv.FormatUint(fcu.HeadSlotVal/32, 10), &body) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, http.StatusOK, resp.StatusCode) - - out := map[string]interface{}{} - require.NoError(t, json.NewDecoder(resp.Body).Decode(&out)) - data := out["data"].([]interface{}) - require.Equal(t, 11, len(data)) - // check that is has is_live (bool) and index (stringifed int) - for _, d := range data { - d := d.(map[string]interface{}) - require.Equal(t, 2, len(d)) - isLive, ok := d["is_live"] - require.True(t, ok) - _, ok = isLive.(bool) - require.True(t, ok) - i1, ok := d["index"] - require.True(t, ok) - strIndex, ok := i1.(string) - require.True(t, ok) - _, err := strconv.ParseUint(strIndex, 10, 64) - require.NoError(t, err) - - } - -} diff --git a/cl/beacon/handler/node.go b/cl/beacon/handler/node.go index 72687b2e3..063adacde 100644 --- a/cl/beacon/handler/node.go +++ b/cl/beacon/handler/node.go @@ -5,10 +5,12 @@ import ( "fmt" "net/http" "runtime" + + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" ) func (a *ApiHandler) GetEthV1NodeHealth(w http.ResponseWriter, r *http.Request) { - syncingStatus, err := uint64FromQueryParams(r, "syncing_status") + syncingStatus, err := beaconhttp.Uint64FromQueryParams(r, "syncing_status") if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return diff --git a/cl/beacon/handler/node_test.go b/cl/beacon/handler/node_test.go deleted file mode 100644 index 8572f1430..000000000 --- a/cl/beacon/handler/node_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package handler - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/stretchr/testify/require" -) - -func TestNodeHealthSyncing(t *testing.T) { - // i just want the correct schema to be generated - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - // Call GET /eth/v1/node/health - server := httptest.NewServer(handler.mux) - defer server.Close() - - req, err := http.NewRequest("GET", server.URL+"/eth/v1/node/health?syncing_status=666", nil) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, 666, resp.StatusCode) -} - -func TestNodeHealthSyncingTip(t *testing.T) { - // i just want the correct schema to be generated - _, _, _, _, post, handler, _, sm, _ := setupTestingHandler(t, clparams.Phase0Version) - - // Call GET /eth/v1/node/health - server := httptest.NewServer(handler.mux) - defer server.Close() - - req, err := http.NewRequest("GET", server.URL+"/eth/v1/node/health?syncing_status=666", nil) - require.NoError(t, err) - - require.NoError(t, sm.OnHeadState(post)) - s, cancel := sm.HeadState() - s.SetSlot(999999999999999) - cancel() - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, 200, resp.StatusCode) -} - -func TestNodeVersion(t *testing.T) { - // i just want the correct schema to be generated - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - // Call GET /eth/v1/node/health - server := httptest.NewServer(handler.mux) - defer server.Close() - - req, err := http.NewRequest("GET", server.URL+"/eth/v1/node/version", nil) - require.NoError(t, err) - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - out := map[string]interface{}{} - require.NoError(t, json.NewDecoder(resp.Body).Decode(&out)) - v := out["data"].(map[string]interface{})["version"].(string) - require.True(t, strings.Contains(v, "Caplin")) -} diff --git a/cl/beacon/handler/pool.go b/cl/beacon/handler/pool.go index e96549e6b..6b3a07af7 100644 --- a/cl/beacon/handler/pool.go +++ b/cl/beacon/handler/pool.go @@ -11,29 +11,29 @@ import ( "github.com/ledgerwatch/erigon/cl/gossip" ) -func (a *ApiHandler) GetEthV1BeaconPoolVoluntaryExits(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconPoolVoluntaryExits(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(a.operationsPool.VoluntaryExistsPool.Raw()), nil } -func (a *ApiHandler) GetEthV1BeaconPoolAttesterSlashings(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconPoolAttesterSlashings(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { fmt.Println("GetEthV1BeaconPoolAttesterSlashings", a.operationsPool.AttesterSlashingsPool.Raw()) return newBeaconResponse(a.operationsPool.AttesterSlashingsPool.Raw()), nil } -func (a *ApiHandler) GetEthV1BeaconPoolProposerSlashings(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconPoolProposerSlashings(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(a.operationsPool.ProposerSlashingsPool.Raw()), nil } -func (a *ApiHandler) GetEthV1BeaconPoolBLSExecutionChanges(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconPoolBLSExecutionChanges(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(a.operationsPool.BLSToExecutionChangesPool.Raw()), nil } -func (a *ApiHandler) GetEthV1BeaconPoolAttestations(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { - slot, err := uint64FromQueryParams(r, "slot") +func (a *ApiHandler) GetEthV1BeaconPoolAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + slot, err := beaconhttp.Uint64FromQueryParams(r, "slot") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } - committeeIndex, err := uint64FromQueryParams(r, "committee_index") + committeeIndex, err := beaconhttp.Uint64FromQueryParams(r, "committee_index") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } diff --git a/cl/beacon/handler/pool_test.go b/cl/beacon/handler/pool_test.go deleted file mode 100644 index c715162af..000000000 --- a/cl/beacon/handler/pool_test.go +++ /dev/null @@ -1,248 +0,0 @@ -//go:build integration - -package handler - -import ( - "bytes" - "encoding/json" - "net/http/httptest" - "testing" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/stretchr/testify/require" -) - -func TestPoolAttesterSlashings(t *testing.T) { - attesterSlashing := &cltypes.AttesterSlashing{ - Attestation_1: &cltypes.IndexedAttestation{ - AttestingIndices: solid.NewRawUint64List(2048, []uint64{2, 3, 4, 5, 6}), - Data: solid.NewAttestationData(), - }, - Attestation_2: &cltypes.IndexedAttestation{ - AttestingIndices: solid.NewRawUint64List(2048, []uint64{2, 3, 4, 1, 6}), - Data: solid.NewAttestationData(), - }, - } - // find server - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - // json - req, err := json.Marshal(attesterSlashing) - require.NoError(t, err) - // post attester slashing - resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/attester_slashings", "application/json", bytes.NewBuffer(req)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - // get attester slashings - resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/attester_slashings") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out := struct { - Data []*cltypes.AttesterSlashing `json:"data"` - }{ - Data: []*cltypes.AttesterSlashing{ - cltypes.NewAttesterSlashing(), - }, - } - - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Equal(t, 1, len(out.Data)) - require.Equal(t, attesterSlashing, out.Data[0]) -} - -func TestPoolProposerSlashings(t *testing.T) { - proposerSlashing := &cltypes.ProposerSlashing{ - Header1: &cltypes.SignedBeaconBlockHeader{ - Header: &cltypes.BeaconBlockHeader{ - Slot: 1, - ProposerIndex: 3, - }, - }, - Header2: &cltypes.SignedBeaconBlockHeader{ - Header: &cltypes.BeaconBlockHeader{ - Slot: 2, - ProposerIndex: 4, - }, - }, - } - // find server - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - // json - req, err := json.Marshal(proposerSlashing) - require.NoError(t, err) - - // post attester slashing - resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/proposer_slashings", "application/json", bytes.NewBuffer(req)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - // get attester slashings - resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/proposer_slashings") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out := struct { - Data []*cltypes.ProposerSlashing `json:"data"` - }{ - Data: []*cltypes.ProposerSlashing{}, - } - - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Equal(t, 1, len(out.Data)) - require.Equal(t, proposerSlashing, out.Data[0]) -} - -func TestPoolVoluntaryExits(t *testing.T) { - voluntaryExit := &cltypes.SignedVoluntaryExit{ - VoluntaryExit: &cltypes.VoluntaryExit{ - Epoch: 1, - ValidatorIndex: 3, - }, - } - // find server - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - // json - req, err := json.Marshal(voluntaryExit) - require.NoError(t, err) - // post attester slashing - resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/voluntary_exits", "application/json", bytes.NewBuffer(req)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - // get attester slashings - resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/voluntary_exits") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out := struct { - Data []*cltypes.SignedVoluntaryExit `json:"data"` - }{ - Data: []*cltypes.SignedVoluntaryExit{}, - } - - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Equal(t, 1, len(out.Data)) - require.Equal(t, voluntaryExit, out.Data[0]) -} - -func TestPoolBlsToExecutionChainges(t *testing.T) { - msg := []*cltypes.SignedBLSToExecutionChange{ - { - Message: &cltypes.BLSToExecutionChange{ - ValidatorIndex: 45, - }, - Signature: libcommon.Bytes96{2}, - }, - { - Message: &cltypes.BLSToExecutionChange{ - ValidatorIndex: 46, - }, - }, - } - // find server - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - // json - req, err := json.Marshal(msg) - require.NoError(t, err) - // post attester slashing - resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/bls_to_execution_changes", "application/json", bytes.NewBuffer(req)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - // get attester slashings - resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/bls_to_execution_changes") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out := struct { - Data []*cltypes.SignedBLSToExecutionChange `json:"data"` - }{ - Data: []*cltypes.SignedBLSToExecutionChange{}, - } - - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Equal(t, 2, len(out.Data)) - require.Equal(t, msg[0], out.Data[0]) - require.Equal(t, msg[1], out.Data[1]) -} - -func TestPoolAggregatesAndProofs(t *testing.T) { - msg := []*cltypes.SignedAggregateAndProof{ - { - Message: &cltypes.AggregateAndProof{ - Aggregate: solid.NewAttestionFromParameters([]byte{1, 2}, solid.NewAttestationData(), libcommon.Bytes96{3, 45, 6}), - }, - Signature: libcommon.Bytes96{2}, - }, - { - Message: &cltypes.AggregateAndProof{ - Aggregate: solid.NewAttestionFromParameters([]byte{1, 2, 5, 6}, solid.NewAttestationData(), libcommon.Bytes96{3, 0, 6}), - }, - Signature: libcommon.Bytes96{2, 3, 5}, - }, - } - // find server - _, _, _, _, _, handler, _, _, _ := setupTestingHandler(t, clparams.Phase0Version) - - server := httptest.NewServer(handler.mux) - defer server.Close() - // json - req, err := json.Marshal(msg) - require.NoError(t, err) - // post attester slashing - resp, err := server.Client().Post(server.URL+"/eth/v1/validator/aggregate_and_proofs", "application/json", bytes.NewBuffer(req)) - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - // get attester slashings - resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/attestations") - require.NoError(t, err) - defer resp.Body.Close() - - require.Equal(t, 200, resp.StatusCode) - out := struct { - Data []*solid.Attestation `json:"data"` - }{ - Data: []*solid.Attestation{}, - } - - err = json.NewDecoder(resp.Body).Decode(&out) - require.NoError(t, err) - - require.Equal(t, 2, len(out.Data)) - require.Equal(t, msg[0].Message.Aggregate, out.Data[0]) - require.Equal(t, msg[1].Message.Aggregate, out.Data[1]) -} diff --git a/cl/beacon/handler/rewards.go b/cl/beacon/handler/rewards.go index dc8ca4f81..cb4135298 100644 --- a/cl/beacon/handler/rewards.go +++ b/cl/beacon/handler/rewards.go @@ -23,7 +23,7 @@ type blockRewardsResponse struct { Total uint64 `json:"total,string"` } -func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -31,7 +31,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b } defer tx.Rollback() - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, err } @@ -61,7 +61,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b AttesterSlashings: blkRewards.AttesterSlashings, SyncAggregate: blkRewards.SyncAggregate, Total: blkRewards.Attestations + blkRewards.ProposerSlashings + blkRewards.AttesterSlashings + blkRewards.SyncAggregate, - }).withFinalized(isFinalized), nil + }).WithFinalized(isFinalized), nil } slotData, err := state_accessors.ReadSlotData(tx, slot) if err != nil { @@ -77,7 +77,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b AttesterSlashings: slotData.AttesterSlashings, SyncAggregate: slotData.SyncAggregateRewards, Total: slotData.AttestationsRewards + slotData.ProposerSlashings + slotData.AttesterSlashings + slotData.SyncAggregateRewards, - }).withFinalized(isFinalized), nil + }).WithFinalized(isFinalized), nil } type syncCommitteeReward struct { @@ -85,7 +85,7 @@ type syncCommitteeReward struct { Reward int64 `json:"reward,string"` } -func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -111,7 +111,7 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req return nil, err } - blockId, err := blockIdFromRequest(r) + blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { return nil, err } @@ -220,7 +220,7 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req sort.Slice(rewards, func(i, j int) bool { return rewards[i].ValidatorIndex < rewards[j].ValidatorIndex }) - return newBeaconResponse(rewards).withFinalized(isFinalized), nil + return newBeaconResponse(rewards).WithFinalized(isFinalized), nil } func (a *ApiHandler) syncPartecipantReward(activeBalance uint64) uint64 { diff --git a/cl/beacon/handler/rewards_test.go b/cl/beacon/handler/rewards_test.go deleted file mode 100644 index 2a6cef4a8..000000000 --- a/cl/beacon/handler/rewards_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package handler - -import ( - "fmt" - "io" - "math" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetBlockRewards(t *testing.T) { - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - var err error - fcu.HeadVal, err = blocks[len(blocks)-5].Block.HashSSZ() - require.NoError(t, err) - genesisVal, err := blocks[0].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, math.MaxUint64) - fcu.FinalizedSlotVal = math.MaxUint64 - - cases := []struct { - blockID string - code int - expectedResp string - }{ - { - blockID: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), - code: http.StatusOK, - expectedResp: `{"data":{"proposer_index":"203","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "0x" + common.Bytes2Hex(genesisVal[:]), - code: http.StatusOK, - expectedResp: `{"data":{"proposer_index":"98","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/rewards/blocks/" + c.blockID) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expectedResp, string(out)) - }) - } -} - -func TestPostSyncCommitteeRewards(t *testing.T) { - _, blocks, _, _, _, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - var err error - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - fcu.FinalizedSlotVal = math.MaxInt64 - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, 99999999) - - cases := []struct { - name string - blockId string - code int - request string - expected string - }{ - { - name: "all validators", - blockId: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), - code: http.StatusOK, - expected: `{"data":[{"validator_index":"0","reward":"-698"},{"validator_index":"1","reward":"-698"},{"validator_index":"2","reward":"-698"},{"validator_index":"3","reward":"-698"},{"validator_index":"4","reward":"-698"},{"validator_index":"5","reward":"-698"},{"validator_index":"6","reward":"-698"},{"validator_index":"7","reward":"-698"},{"validator_index":"8","reward":"-698"},{"validator_index":"9","reward":"-698"},{"validator_index":"10","reward":"-698"},{"validator_index":"11","reward":"-698"},{"validator_index":"12","reward":"-698"},{"validator_index":"13","reward":"-698"},{"validator_index":"14","reward":"-698"},{"validator_index":"15","reward":"-698"},{"validator_index":"16","reward":"-698"},{"validator_index":"17","reward":"-698"},{"validator_index":"18","reward":"-698"},{"validator_index":"19","reward":"-698"},{"validator_index":"20","reward":"-698"},{"validator_index":"21","reward":"-698"},{"validator_index":"22","reward":"-698"},{"validator_index":"23","reward":"-698"},{"validator_index":"24","reward":"-698"},{"validator_index":"25","reward":"-698"},{"validator_index":"26","reward":"-698"},{"validator_index":"27","reward":"-698"},{"validator_index":"28","reward":"-698"},{"validator_index":"29","reward":"-698"},{"validator_index":"30","reward":"-698"},{"validator_index":"31","reward":"-698"},{"validator_index":"32","reward":"-698"},{"validator_index":"33","reward":"-698"},{"validator_index":"34","reward":"-698"},{"validator_index":"35","reward":"-698"},{"validator_index":"36","reward":"-698"},{"validator_index":"37","reward":"-698"},{"validator_index":"38","reward":"-698"},{"validator_index":"39","reward":"-698"},{"validator_index":"40","reward":"-698"},{"validator_index":"41","reward":"-698"},{"validator_index":"42","reward":"-698"},{"validator_index":"43","reward":"-698"},{"validator_index":"44","reward":"-698"},{"validator_index":"45","reward":"-698"},{"validator_index":"46","reward":"-698"},{"validator_index":"47","reward":"-698"},{"validator_index":"48","reward":"-698"},{"validator_index":"49","reward":"-698"},{"validator_index":"50","reward":"-698"},{"validator_index":"51","reward":"-698"},{"validator_index":"52","reward":"-698"},{"validator_index":"53","reward":"-698"},{"validator_index":"54","reward":"-698"},{"validator_index":"55","reward":"-698"},{"validator_index":"56","reward":"-698"},{"validator_index":"57","reward":"-698"},{"validator_index":"58","reward":"-698"},{"validator_index":"59","reward":"-698"},{"validator_index":"60","reward":"-698"},{"validator_index":"61","reward":"-698"},{"validator_index":"62","reward":"-698"},{"validator_index":"63","reward":"-698"},{"validator_index":"64","reward":"-698"},{"validator_index":"65","reward":"-698"},{"validator_index":"66","reward":"-698"},{"validator_index":"67","reward":"-698"},{"validator_index":"68","reward":"-698"},{"validator_index":"69","reward":"-698"},{"validator_index":"70","reward":"-698"},{"validator_index":"71","reward":"-698"},{"validator_index":"72","reward":"-698"},{"validator_index":"73","reward":"-698"},{"validator_index":"74","reward":"-698"},{"validator_index":"75","reward":"-698"},{"validator_index":"76","reward":"-698"},{"validator_index":"77","reward":"-698"},{"validator_index":"78","reward":"-698"},{"validator_index":"79","reward":"-698"},{"validator_index":"80","reward":"-698"},{"validator_index":"81","reward":"-698"},{"validator_index":"82","reward":"-698"},{"validator_index":"83","reward":"-698"},{"validator_index":"84","reward":"-698"},{"validator_index":"85","reward":"-698"},{"validator_index":"86","reward":"-698"},{"validator_index":"87","reward":"-698"},{"validator_index":"88","reward":"-698"},{"validator_index":"89","reward":"-698"},{"validator_index":"90","reward":"-698"},{"validator_index":"91","reward":"-698"},{"validator_index":"92","reward":"-698"},{"validator_index":"93","reward":"-698"},{"validator_index":"94","reward":"-698"},{"validator_index":"95","reward":"-698"},{"validator_index":"96","reward":"-698"},{"validator_index":"97","reward":"-698"},{"validator_index":"98","reward":"-698"},{"validator_index":"99","reward":"-698"},{"validator_index":"100","reward":"-698"},{"validator_index":"101","reward":"-698"},{"validator_index":"102","reward":"-698"},{"validator_index":"103","reward":"-698"},{"validator_index":"104","reward":"-698"},{"validator_index":"105","reward":"-698"},{"validator_index":"106","reward":"-698"},{"validator_index":"107","reward":"-698"},{"validator_index":"108","reward":"-698"},{"validator_index":"109","reward":"-698"},{"validator_index":"110","reward":"-698"},{"validator_index":"111","reward":"-698"},{"validator_index":"112","reward":"-698"},{"validator_index":"113","reward":"-698"},{"validator_index":"114","reward":"-698"},{"validator_index":"115","reward":"-698"},{"validator_index":"116","reward":"-698"},{"validator_index":"117","reward":"-698"},{"validator_index":"118","reward":"-698"},{"validator_index":"119","reward":"-698"},{"validator_index":"120","reward":"-698"},{"validator_index":"121","reward":"-698"},{"validator_index":"122","reward":"-698"},{"validator_index":"123","reward":"-698"},{"validator_index":"124","reward":"-698"},{"validator_index":"125","reward":"-698"},{"validator_index":"126","reward":"-698"},{"validator_index":"127","reward":"-698"},{"validator_index":"128","reward":"-698"},{"validator_index":"129","reward":"-698"},{"validator_index":"130","reward":"-698"},{"validator_index":"131","reward":"-698"},{"validator_index":"132","reward":"-698"},{"validator_index":"133","reward":"-698"},{"validator_index":"134","reward":"-698"},{"validator_index":"135","reward":"-698"},{"validator_index":"136","reward":"-698"},{"validator_index":"137","reward":"-698"},{"validator_index":"138","reward":"-698"},{"validator_index":"139","reward":"-698"},{"validator_index":"140","reward":"-698"},{"validator_index":"141","reward":"-698"},{"validator_index":"142","reward":"-698"},{"validator_index":"143","reward":"-698"},{"validator_index":"144","reward":"-698"},{"validator_index":"145","reward":"-698"},{"validator_index":"146","reward":"-698"},{"validator_index":"147","reward":"-698"},{"validator_index":"148","reward":"-698"},{"validator_index":"149","reward":"-698"},{"validator_index":"150","reward":"-698"},{"validator_index":"151","reward":"-698"},{"validator_index":"152","reward":"-698"},{"validator_index":"153","reward":"-698"},{"validator_index":"154","reward":"-698"},{"validator_index":"155","reward":"-698"},{"validator_index":"156","reward":"-698"},{"validator_index":"157","reward":"-698"},{"validator_index":"158","reward":"-698"},{"validator_index":"159","reward":"-698"},{"validator_index":"160","reward":"-698"},{"validator_index":"161","reward":"-698"},{"validator_index":"162","reward":"-698"},{"validator_index":"163","reward":"-698"},{"validator_index":"164","reward":"-698"},{"validator_index":"165","reward":"-698"},{"validator_index":"166","reward":"-698"},{"validator_index":"167","reward":"-698"},{"validator_index":"168","reward":"-698"},{"validator_index":"169","reward":"-698"},{"validator_index":"170","reward":"-698"},{"validator_index":"171","reward":"-698"},{"validator_index":"172","reward":"-698"},{"validator_index":"173","reward":"-698"},{"validator_index":"174","reward":"-698"},{"validator_index":"175","reward":"-698"},{"validator_index":"176","reward":"-698"},{"validator_index":"177","reward":"-698"},{"validator_index":"178","reward":"-698"},{"validator_index":"179","reward":"-698"},{"validator_index":"180","reward":"-698"},{"validator_index":"181","reward":"-698"},{"validator_index":"182","reward":"-698"},{"validator_index":"183","reward":"-698"},{"validator_index":"184","reward":"-698"},{"validator_index":"185","reward":"-698"},{"validator_index":"186","reward":"-698"},{"validator_index":"187","reward":"-698"},{"validator_index":"188","reward":"-698"},{"validator_index":"189","reward":"-698"},{"validator_index":"190","reward":"-698"},{"validator_index":"191","reward":"-698"},{"validator_index":"192","reward":"-698"},{"validator_index":"193","reward":"-698"},{"validator_index":"194","reward":"-698"},{"validator_index":"195","reward":"-698"},{"validator_index":"196","reward":"-698"},{"validator_index":"197","reward":"-698"},{"validator_index":"198","reward":"-698"},{"validator_index":"199","reward":"-698"},{"validator_index":"200","reward":"-698"},{"validator_index":"201","reward":"-698"},{"validator_index":"202","reward":"-698"},{"validator_index":"203","reward":"-698"},{"validator_index":"204","reward":"-698"},{"validator_index":"205","reward":"-698"},{"validator_index":"206","reward":"-698"},{"validator_index":"207","reward":"-698"},{"validator_index":"208","reward":"-698"},{"validator_index":"209","reward":"-698"},{"validator_index":"210","reward":"-698"},{"validator_index":"211","reward":"-698"},{"validator_index":"212","reward":"-698"},{"validator_index":"213","reward":"-698"},{"validator_index":"214","reward":"-698"},{"validator_index":"215","reward":"-698"},{"validator_index":"216","reward":"-698"},{"validator_index":"217","reward":"-698"},{"validator_index":"218","reward":"-698"},{"validator_index":"219","reward":"-698"},{"validator_index":"220","reward":"-698"},{"validator_index":"221","reward":"-698"},{"validator_index":"222","reward":"-698"},{"validator_index":"223","reward":"-698"},{"validator_index":"224","reward":"-698"},{"validator_index":"225","reward":"-698"},{"validator_index":"226","reward":"-698"},{"validator_index":"227","reward":"-698"},{"validator_index":"228","reward":"-698"},{"validator_index":"229","reward":"-698"},{"validator_index":"230","reward":"-698"},{"validator_index":"231","reward":"-698"},{"validator_index":"232","reward":"-698"},{"validator_index":"233","reward":"-698"},{"validator_index":"234","reward":"-698"},{"validator_index":"235","reward":"-698"},{"validator_index":"236","reward":"-698"},{"validator_index":"237","reward":"-698"},{"validator_index":"238","reward":"-698"},{"validator_index":"239","reward":"-698"},{"validator_index":"240","reward":"-698"},{"validator_index":"241","reward":"-698"},{"validator_index":"242","reward":"-698"},{"validator_index":"243","reward":"-698"},{"validator_index":"244","reward":"-698"},{"validator_index":"245","reward":"-698"},{"validator_index":"246","reward":"-698"},{"validator_index":"247","reward":"-698"},{"validator_index":"248","reward":"-698"},{"validator_index":"249","reward":"-698"},{"validator_index":"250","reward":"-698"},{"validator_index":"251","reward":"-698"},{"validator_index":"252","reward":"-698"},{"validator_index":"253","reward":"-698"},{"validator_index":"254","reward":"-698"},{"validator_index":"255","reward":"-698"}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockId: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - name: "2 validators", - blockId: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), - request: `["1","4"]`, - code: http.StatusOK, - expected: `{"data":[{"validator_index":"1","reward":"-698"},{"validator_index":"4","reward":"-698"}],"finalized":true,"execution_optimistic":false}` + "\n", // Add your expected response - }, - } - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - url := fmt.Sprintf("%s/eth/v1/beacon/rewards/sync_committee/%s", server.URL, c.blockId) - - // Create a request - req, err := http.NewRequest("POST", url, strings.NewReader(c.request)) - require.NoError(t, err) - req.Header.Set("Content-Type", "application/json") - - // Perform the request - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - - // Check status code - require.Equal(t, c.code, resp.StatusCode) - - if resp.StatusCode != http.StatusOK { - return - } - - // Read the response body - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - if string(out) != c.expected { - panic(string(out)) - } - // Compare the response with the expected result - require.Equal(t, c.expected, string(out)) - }) - } -} diff --git a/cl/beacon/handler/states.go b/cl/beacon/handler/states.go index 335296f34..e232084d1 100644 --- a/cl/beacon/handler/states.go +++ b/cl/beacon/handler/states.go @@ -17,21 +17,21 @@ import ( "github.com/ledgerwatch/erigon/cl/utils" ) -func (a *ApiHandler) blockRootFromStateId(ctx context.Context, tx kv.Tx, stateId *segmentID) (root libcommon.Hash, httpStatusErr int, err error) { +func (a *ApiHandler) blockRootFromStateId(ctx context.Context, tx kv.Tx, stateId *beaconhttp.SegmentID) (root libcommon.Hash, httpStatusErr int, err error) { switch { - case stateId.head(): + case stateId.Head(): root, _, err = a.forkchoiceStore.GetHead() if err != nil { return libcommon.Hash{}, http.StatusInternalServerError, err } return - case stateId.finalized(): + case stateId.Finalized(): root = a.forkchoiceStore.FinalizedCheckpoint().BlockRoot() return - case stateId.justified(): + case stateId.Justified(): root = a.forkchoiceStore.JustifiedCheckpoint().BlockRoot() return - case stateId.genesis(): + case stateId.Genesis(): root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, 0) if err != nil { return libcommon.Hash{}, http.StatusInternalServerError, err @@ -40,17 +40,17 @@ func (a *ApiHandler) blockRootFromStateId(ctx context.Context, tx kv.Tx, stateId return libcommon.Hash{}, http.StatusNotFound, fmt.Errorf("genesis block not found") } return - case stateId.getSlot() != nil: - root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, *stateId.getSlot()) + case stateId.GetSlot() != nil: + root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, *stateId.GetSlot()) if err != nil { return libcommon.Hash{}, http.StatusInternalServerError, err } if root == (libcommon.Hash{}) { - return libcommon.Hash{}, http.StatusNotFound, fmt.Errorf("block not found %d", *stateId.getSlot()) + return libcommon.Hash{}, http.StatusNotFound, fmt.Errorf("block not found %d", *stateId.GetSlot()) } return - case stateId.getRoot() != nil: - root, err = beacon_indicies.ReadBlockRootByStateRoot(tx, *stateId.getRoot()) + case stateId.GetRoot() != nil: + root, err = beacon_indicies.ReadBlockRootByStateRoot(tx, *stateId.GetRoot()) if err != nil { return libcommon.Hash{}, http.StatusInternalServerError, err } @@ -71,7 +71,7 @@ func previousVersion(v clparams.StateVersion) clparams.StateVersion { return v - 1 } -func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -80,7 +80,7 @@ func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beac } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -110,7 +110,7 @@ func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beac }), nil } -func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -119,7 +119,7 @@ func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beac } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -149,10 +149,10 @@ func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beac } return newBeaconResponse(&rootResponse{Root: stateRoot}). - withFinalized(canonicalRoot == root && *slot <= a.forkchoiceStore.FinalizedSlot()), nil + WithFinalized(canonicalRoot == root && *slot <= a.forkchoiceStore.FinalizedSlot()), nil } -func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -161,7 +161,7 @@ func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beac } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -198,10 +198,10 @@ func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beac if state == nil { return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read state: %x", blockRoot)) } - return newBeaconResponse(state).withFinalized(true).withVersion(state.Version()), nil + return newBeaconResponse(state).WithFinalized(true).WithVersion(state.Version()), nil } - return newBeaconResponse(state).withFinalized(false).withVersion(state.Version()), nil + return newBeaconResponse(state).WithFinalized(false).WithVersion(state.Version()), nil } type finalityCheckpointsResponse struct { @@ -210,7 +210,7 @@ type finalityCheckpointsResponse struct { PreviousJustifiedCheckpoint solid.Checkpoint `json:"previous_justified_checkpoint"` } -func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -218,7 +218,7 @@ func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Reque return nil, err } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -259,7 +259,7 @@ func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Reque FinalizedCheckpoint: finalizedCheckpoint, CurrentJustifiedCheckpoint: currentJustifiedCheckpoint, PreviousJustifiedCheckpoint: previousJustifiedCheckpoint, - }).withFinalized(canonicalRoot == blockRoot && *slot <= a.forkchoiceStore.FinalizedSlot()).withVersion(version), nil + }).WithFinalized(canonicalRoot == blockRoot && *slot <= a.forkchoiceStore.FinalizedSlot()).WithVersion(version), nil } type syncCommitteesResponse struct { @@ -267,7 +267,7 @@ type syncCommitteesResponse struct { ValidatorAggregates [][]string `json:"validator_aggregates"` } -func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -275,7 +275,7 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( return nil, err } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -312,7 +312,7 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( } // Now fetch the data we need statePeriod := a.beaconChainCfg.SyncCommitteePeriod(*slot) - queryEpoch, err := uint64FromQueryParams(r, "epoch") + queryEpoch, err := beaconhttp.Uint64FromQueryParams(r, "epoch") if err != nil { return nil, err } @@ -355,14 +355,14 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( return nil, err } - return newBeaconResponse(response).withFinalized(canonicalRoot == blockRoot && *slot <= a.forkchoiceStore.FinalizedSlot()), nil + return newBeaconResponse(response).WithFinalized(canonicalRoot == blockRoot && *slot <= a.forkchoiceStore.FinalizedSlot()), nil } type randaoResponse struct { Randao libcommon.Hash `json:"randao"` } -func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -370,7 +370,7 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconR return nil, err } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -380,7 +380,7 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconR return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) } - epochReq, err := uint64FromQueryParams(r, "epoch") + epochReq, err := beaconhttp.Uint64FromQueryParams(r, "epoch") if err != nil { return nil, err } @@ -401,7 +401,7 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconR if a.forkchoiceStore.RandaoMixes(blockRoot, randaoMixes) { mix := randaoMixes.Get(int(epoch % a.beaconChainCfg.EpochsPerHistoricalVector)) - return newBeaconResponse(randaoResponse{Randao: mix}).withFinalized(slot <= a.forkchoiceStore.FinalizedSlot()), nil + return newBeaconResponse(randaoResponse{Randao: mix}).WithFinalized(slot <= a.forkchoiceStore.FinalizedSlot()), nil } // check if the block is canonical canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) @@ -415,5 +415,5 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconR if err != nil { return nil, err } - return newBeaconResponse(randaoResponse{Randao: mix}).withFinalized(slot <= a.forkchoiceStore.FinalizedSlot()), nil + return newBeaconResponse(randaoResponse{Randao: mix}).WithFinalized(slot <= a.forkchoiceStore.FinalizedSlot()), nil } diff --git a/cl/beacon/handler/states_test.go b/cl/beacon/handler/states_test.go deleted file mode 100644 index eaa6d633a..000000000 --- a/cl/beacon/handler/states_test.go +++ /dev/null @@ -1,504 +0,0 @@ -package handler - -import ( - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetStateFork(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "head", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/fork") - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].(map[string]interface{}) - require.Equal(t, data["current_version"], "0x00000000") - require.Equal(t, data["previous_version"], "0x00000000") - require.Equal(t, data["epoch"], "0") - }) - } -} - -func TestGetStateRoot(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "finalized", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/root") - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - jsonVal := make(map[string]interface{}) - // unmarshal the json - require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) - data := jsonVal["data"].(map[string]interface{}) - require.Equal(t, data["root"], "0x"+common.Bytes2Hex(postRoot[:])) - }) - } -} - -func TestGetStateFullHistorical(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "finalized", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("GET", server.URL+"/eth/v2/debug/beacon/states/"+c.blockID, nil) - require.NoError(t, err) - req.Header.Set("Accept", "application/octet-stream") - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - other := state.New(&clparams.MainnetBeaconConfig) - require.NoError(t, other.DecodeSSZ(out, int(clparams.Phase0Version))) - - otherRoot, err := other.HashSSZ() - require.NoError(t, err) - require.Equal(t, postRoot, otherRoot) - }) - } -} - -func TestGetStateFullForkchoice(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - fcu.StateAtBlockRootVal[fcu.HeadVal] = postState - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "finalized", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream - req, err := http.NewRequest("GET", server.URL+"/eth/v2/debug/beacon/states/"+c.blockID, nil) - require.NoError(t, err) - req.Header.Set("Accept", "application/octet-stream") - - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - other := state.New(&clparams.MainnetBeaconConfig) - require.NoError(t, other.DecodeSSZ(out, int(clparams.Phase0Version))) - - otherRoot, err := other.HashSSZ() - require.NoError(t, err) - require.Equal(t, postRoot, otherRoot) - }) - } -} - -func TestGetStateSyncCommittees(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - cSyncCommittee := postState.CurrentSyncCommittee().Copy() - nSyncCommittee := postState.NextSyncCommittee().Copy() - - fcu.GetSyncCommitteesVal[fcu.HeadVal] = [2]*solid.SyncCommittee{ - cSyncCommittee, - nSyncCommittee, - } - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "justified", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - expected := `{"data":{"validators":["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192","109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],"validator_aggregates":[["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"]]},"finalized":false,"execution_optimistic":false}` + "\n" - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/sync_committees") - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, string(out), expected) - }) - } -} - -func TestGetStateSyncCommitteesHistorical(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "justified", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - expected := `{"data":{"validators":["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192","109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],"validator_aggregates":[["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"]]},"finalized":false,"execution_optimistic":false}` + "\n" - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/sync_committees") - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, string(out), expected) - }) - } -} - -func TestGetStateFinalityCheckpoints(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "justified", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - expected := `{"data":{"finalized_checkpoint":{"epoch":"1","root":"0xde46b0f2ed5e72f0cec20246403b14c963ec995d7c2825f3532b0460c09d5693"},"current_justified_checkpoint":{"epoch":"3","root":"0xa6e47f164b1a3ca30ea3b2144bd14711de442f51e5b634750a12a1734e24c987"},"previous_justified_checkpoint":{"epoch":"2","root":"0x4c3ee7969e485696669498a88c17f70e6999c40603e2f4338869004392069063"}},"finalized":false,"version":2,"execution_optimistic":false}` + "\n" - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/finality_checkpoints") - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, string(out), expected) - }) - } -} - -func TestGetRandao(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.BellatrixVersion) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - - fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - }, - { - blockID: "justified", - code: http.StatusOK, - }, - { - blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), - code: http.StatusNotFound, - }, - { - blockID: strconv.FormatInt(int64(postState.Slot()), 10), - code: http.StatusOK, - }, - } - expected := `{"data":{"randao":"0xdeec617717272914bfd73e02ca1da113a83cf4cf33cd4939486509e2da4ccf4e"},"finalized":false,"execution_optimistic":false}` + "\n" - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/randao") - require.NoError(t, err) - - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // read the all of the octect - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, string(out), expected) - }) - } -} diff --git a/cl/beacon/handler/test_data/attestations_1.json b/cl/beacon/handler/test_data/attestations_1.json new file mode 100644 index 000000000..c73603b89 --- /dev/null +++ b/cl/beacon/handler/test_data/attestations_1.json @@ -0,0 +1 @@ +{"data":{"ideal_rewards":[{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"0","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"1","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"2","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"3","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"5","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"6","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"7","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"8","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"9","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"10","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"11","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"12","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"13","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"14","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"15","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"16","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"17","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"18","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"19","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"20","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"21","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"22","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"23","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"24","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"25","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"26","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"27","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"28","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"29","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"30","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"31","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"32","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"33","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"34","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"35","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"36","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"37","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"38","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"39","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"40","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"41","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"42","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"43","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"44","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"45","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"46","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"47","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"48","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"49","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"50","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"51","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"52","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"53","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"54","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"55","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"56","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"57","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"58","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"59","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"60","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"61","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"62","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"63","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"64","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"65","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"66","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"67","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"68","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"69","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"70","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"71","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"72","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"73","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"74","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"75","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"76","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"77","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"78","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"79","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"80","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"81","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"82","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"83","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"84","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"85","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"86","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"87","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"88","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"89","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"90","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"91","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"92","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"93","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"94","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"95","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"96","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"97","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"98","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"99","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"100","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"101","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"102","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"103","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"104","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"105","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"106","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"107","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"108","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"109","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"110","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"111","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"112","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"113","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"114","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"115","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"116","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"117","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"118","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"119","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"120","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"121","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"122","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"123","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"124","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"125","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"126","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"127","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"128","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"129","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"130","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"131","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"132","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"133","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"134","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"135","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"136","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"137","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"138","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"139","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"140","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"141","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"142","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"143","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"144","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"145","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"146","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"147","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"148","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"149","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"150","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"151","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"152","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"153","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"154","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"155","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"156","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"157","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"158","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"159","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"160","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"161","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"162","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"163","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"164","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"165","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"166","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"167","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"168","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"169","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"170","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"171","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"172","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"173","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"174","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"175","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"176","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"177","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"178","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"179","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"180","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"181","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"182","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"183","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"184","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"185","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"186","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"187","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"188","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"189","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"190","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"191","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"192","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"193","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"194","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"195","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"196","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"197","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"198","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"199","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"200","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"201","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"202","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"203","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"204","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"205","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"206","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"207","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"208","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"209","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"210","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"211","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"212","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"213","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"214","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"215","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"216","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"217","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"218","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"219","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"220","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"221","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"222","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"223","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"224","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"225","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"226","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"227","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"228","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"229","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"230","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"231","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"232","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"233","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"234","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"235","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"236","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"237","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"238","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"239","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"240","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"241","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"242","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"243","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"244","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"245","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"246","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"247","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"248","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"249","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"250","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"251","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"252","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"253","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"254","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"255","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"}]}} diff --git a/cl/beacon/handler/test_data/attestations_2.json b/cl/beacon/handler/test_data/attestations_2.json new file mode 100644 index 000000000..5f3b03eb6 --- /dev/null +++ b/cl/beacon/handler/test_data/attestations_2.json @@ -0,0 +1 @@ +{"data":{"ideal_rewards":[{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"290680","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"1","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"0","target":"290680","source":"-156520","inclusion_delay":"0","inactivity":"0"}]}} diff --git a/cl/beacon/handler/test_data/attestations_3.json b/cl/beacon/handler/test_data/attestations_3.json new file mode 100644 index 000000000..10168612a --- /dev/null +++ b/cl/beacon/handler/test_data/attestations_3.json @@ -0,0 +1 @@ +{"data":{"ideal_rewards":[{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"4646","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4941","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"9123","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"17562","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"17423","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"4355","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"5854","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"10752","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"3920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"3763","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"10686","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"4561","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"2697","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"8743","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"4673","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"27000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3949","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"7805","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"3434","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"5401","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"5131","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"3507","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"29000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"2508","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"13739","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"14635","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"19235","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"5227","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"3604","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"6272","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"8827","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"20071","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"3310","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"14934","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"54361","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"3636","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"6111","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"27000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"4470","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"26000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"23000000000","head":"77605","target":"77605","source":"77605","inclusion_delay":"3316","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"25000000000","head":"84353","target":"84353","source":"84353","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"60633","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"20000000000","head":"67482","target":"67482","source":"67482","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"4704","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"25000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"5110","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"24000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"31000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"27000000000","head":"91101","target":"91101","source":"91101","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"4739","inactivity":"0"},{"effective_balance":"18000000000","head":"60734","target":"60734","source":"60734","inclusion_delay":"4427","inactivity":"0"},{"effective_balance":"28000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"28000000000","head":"94475","target":"94475","source":"94475","inclusion_delay":"29271","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"25089","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"3789","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"7317","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"7201","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"5411","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"7168","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"26000000000","head":"87727","target":"87727","source":"87727","inclusion_delay":"4530","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"19000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"4050","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2961","inactivity":"0"},{"effective_balance":"24000000000","head":"80979","target":"80979","source":"80979","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"21000000000","head":"70856","target":"70856","source":"70856","inclusion_delay":"7983","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"5272","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"101224","target":"101224","source":"101224","inclusion_delay":"4646","inactivity":"0"},{"effective_balance":"19000000000","head":"64108","target":"64108","source":"64108","inclusion_delay":"39725","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"effective_balance":"29000000000","head":"97850","target":"97850","source":"97850","inclusion_delay":"4181","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"31000000000","head":"104598","target":"104598","source":"104598","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"29000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"30000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"22000000000","head":"74230","target":"74230","source":"74230","inclusion_delay":"22998","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"effective_balance":"17000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"effective_balance":"22000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"effective_balance":"32000000000","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"32000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"}],"total_rewards":[{"validator_index":"0","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"1","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"2","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"3","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"4","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"5","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"6","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"7","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"8","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"9","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"10","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"11","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"12","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"13","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"14","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"15","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"16","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"17","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"18","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"19","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"20","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"21","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"22","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"23","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"validator_index":"24","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"25","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"26","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"27","head":"67482","target":"67482","source":"67482","inclusion_delay":"4646","inactivity":"0"},{"validator_index":"28","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"29","head":"87727","target":"87727","source":"87727","inclusion_delay":"4941","inactivity":"0"},{"validator_index":"30","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"31","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"32","head":"80979","target":"80979","source":"80979","inclusion_delay":"9123","inactivity":"0"},{"validator_index":"33","head":"70856","target":"70856","source":"70856","inclusion_delay":"17562","inactivity":"0"},{"validator_index":"34","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"35","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"36","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"37","head":"84353","target":"84353","source":"84353","inclusion_delay":"17423","inactivity":"0"},{"validator_index":"38","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"39","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"40","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"41","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"42","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"43","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"44","head":"84353","target":"84353","source":"84353","inclusion_delay":"4355","inactivity":"0"},{"validator_index":"45","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"46","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"47","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"48","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"49","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"50","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"validator_index":"51","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"52","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"53","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"54","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"55","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"56","head":"70856","target":"70856","source":"70856","inclusion_delay":"5854","inactivity":"0"},{"validator_index":"57","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"58","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"59","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"60","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"61","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"62","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"63","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"64","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"65","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"66","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"67","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"68","head":"60734","target":"60734","source":"60734","inclusion_delay":"10752","inactivity":"0"},{"validator_index":"69","head":"101224","target":"101224","source":"101224","inclusion_delay":"3920","inactivity":"0"},{"validator_index":"70","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"71","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"72","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"73","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"74","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"75","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"76","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"77","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"78","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"79","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"80","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"81","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-372759"},{"validator_index":"82","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"83","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"84","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"85","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"86","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"87","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"88","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"89","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"90","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"91","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"92","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"93","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"94","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"validator_index":"95","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"96","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"97","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"98","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"99","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"100","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"101","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"102","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"103","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"104","head":"57360","target":"57360","source":"57360","inclusion_delay":"3231","inactivity":"0"},{"validator_index":"105","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"106","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"107","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-329748"},{"validator_index":"108","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"109","head":"91101","target":"91101","source":"91101","inclusion_delay":"3763","inactivity":"0"},{"validator_index":"110","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"111","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"112","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"113","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"114","head":"77605","target":"77605","source":"77605","inclusion_delay":"10686","inactivity":"0"},{"validator_index":"115","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"116","head":"80979","target":"80979","source":"80979","inclusion_delay":"4561","inactivity":"0"},{"validator_index":"117","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"118","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"119","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"120","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"121","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"122","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"123","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"124","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"125","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"126","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"127","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"128","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"129","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"130","head":"107972","target":"107972","source":"107972","inclusion_delay":"33453","inactivity":"0"},{"validator_index":"131","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"132","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"133","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"134","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"135","head":"67482","target":"67482","source":"67482","inclusion_delay":"2697","inactivity":"0"},{"validator_index":"136","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"137","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"138","head":"77605","target":"77605","source":"77605","inclusion_delay":"8743","inactivity":"0"},{"validator_index":"139","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"140","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"141","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"142","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"143","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"validator_index":"144","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"145","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"146","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"147","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"148","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"149","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"150","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"151","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"152","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"153","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"154","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"155","head":"64108","target":"64108","source":"64108","inclusion_delay":"5675","inactivity":"0"},{"validator_index":"156","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"157","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"158","head":"64108","target":"64108","source":"64108","inclusion_delay":"4673","inactivity":"0"},{"validator_index":"159","head":"87727","target":"87727","source":"87727","inclusion_delay":"4348","inactivity":"0"},{"validator_index":"160","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"161","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"162","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"163","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"164","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"165","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"166","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"167","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"168","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"169","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-286737"},{"validator_index":"170","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"171","head":"57360","target":"57360","source":"57360","inclusion_delay":"3949","inactivity":"0"},{"validator_index":"172","head":"94475","target":"94475","source":"94475","inclusion_delay":"7805","inactivity":"0"},{"validator_index":"173","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"174","head":"60734","target":"60734","source":"60734","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"175","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"176","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"177","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"178","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"179","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"180","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"181","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"182","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"183","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"184","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"185","head":"77605","target":"77605","source":"77605","inclusion_delay":"3434","inactivity":"0"},{"validator_index":"186","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"187","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"188","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"189","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"190","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"191","head":"104598","target":"104598","source":"104598","inclusion_delay":"5401","inactivity":"0"},{"validator_index":"192","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"validator_index":"193","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"194","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"195","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"196","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"197","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"198","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"199","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"200","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"201","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"202","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"203","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"204","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"205","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"206","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"207","head":"91101","target":"91101","source":"91101","inclusion_delay":"5131","inactivity":"0"},{"validator_index":"208","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"209","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"210","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"211","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"212","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"213","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"214","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"215","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-329748"},{"validator_index":"216","head":"87727","target":"87727","source":"87727","inclusion_delay":"3507","inactivity":"0"},{"validator_index":"217","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"218","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"219","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"220","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"221","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"222","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"223","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-258063"},{"validator_index":"224","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"225","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"226","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"227","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"228","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"229","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"230","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"231","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"232","head":"60734","target":"60734","source":"60734","inclusion_delay":"2508","inactivity":"0"},{"validator_index":"233","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"234","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-401433"},{"validator_index":"235","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-401433"},{"validator_index":"236","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"237","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"238","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"239","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"240","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"241","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"242","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"243","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"244","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"245","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"246","head":"107972","target":"107972","source":"107972","inclusion_delay":"7871","inactivity":"0"},{"validator_index":"247","head":"77605","target":"77605","source":"77605","inclusion_delay":"13739","inactivity":"0"},{"validator_index":"248","head":"107972","target":"107972","source":"107972","inclusion_delay":"19116","inactivity":"0"},{"validator_index":"249","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"250","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"251","head":"70856","target":"70856","source":"70856","inclusion_delay":"14635","inactivity":"0"},{"validator_index":"252","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"253","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-301074"},{"validator_index":"254","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"255","head":"97850","target":"97850","source":"97850","inclusion_delay":"20211","inactivity":"0"},{"validator_index":"256","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"257","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"258","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"259","head":"77605","target":"77605","source":"77605","inclusion_delay":"19235","inactivity":"0"},{"validator_index":"260","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-258063"},{"validator_index":"261","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"262","head":"101224","target":"101224","source":"101224","inclusion_delay":"5227","inactivity":"0"},{"validator_index":"263","head":"84353","target":"84353","source":"84353","inclusion_delay":"3604","inactivity":"0"},{"validator_index":"264","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"265","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"266","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"267","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"268","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"269","head":"101224","target":"101224","source":"101224","inclusion_delay":"6272","inactivity":"0"},{"validator_index":"270","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"271","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"272","head":"64108","target":"64108","source":"64108","inclusion_delay":"8827","inactivity":"0"},{"validator_index":"273","head":"80979","target":"80979","source":"80979","inclusion_delay":"20071","inactivity":"0"},{"validator_index":"274","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"275","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"276","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"277","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"278","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"279","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"280","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"281","head":"64108","target":"64108","source":"64108","inclusion_delay":"3310","inactivity":"0"},{"validator_index":"282","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"283","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"284","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"285","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"286","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"287","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"288","head":"84353","target":"84353","source":"84353","inclusion_delay":"14934","inactivity":"0"},{"validator_index":"289","head":"87727","target":"87727","source":"87727","inclusion_delay":"54361","inactivity":"0"},{"validator_index":"290","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"291","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"292","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"293","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"294","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"295","head":"67482","target":"67482","source":"67482","inclusion_delay":"3636","inactivity":"0"},{"validator_index":"296","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"297","head":"64108","target":"64108","source":"64108","inclusion_delay":"6111","inactivity":"0"},{"validator_index":"298","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"299","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"300","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"301","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"302","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"303","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"304","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"305","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"306","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"307","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"308","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"309","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"310","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"311","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"312","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"313","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"314","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"315","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"316","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"317","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"318","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"319","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"320","head":"107972","target":"107972","source":"107972","inclusion_delay":"9558","inactivity":"0"},{"validator_index":"321","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"322","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"323","head":"104598","target":"104598","source":"104598","inclusion_delay":"4470","inactivity":"0"},{"validator_index":"324","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"325","head":"107972","target":"107972","source":"107972","inclusion_delay":"8920","inactivity":"0"},{"validator_index":"326","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-315411"},{"validator_index":"327","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"328","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"329","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"330","head":"107972","target":"107972","source":"107972","inclusion_delay":"26762","inactivity":"0"},{"validator_index":"331","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"332","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"333","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"334","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"335","head":"77605","target":"77605","source":"77605","inclusion_delay":"3316","inactivity":"0"},{"validator_index":"336","head":"57360","target":"57360","source":"57360","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"337","head":"107972","target":"107972","source":"107972","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"338","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"339","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"340","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-358422"},{"validator_index":"341","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"342","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"343","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"344","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"345","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"346","head":"107972","target":"107972","source":"107972","inclusion_delay":"66906","inactivity":"0"},{"validator_index":"347","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"348","head":"97850","target":"97850","source":"97850","inclusion_delay":"60633","inactivity":"0"},{"validator_index":"349","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"350","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-286737"},{"validator_index":"351","head":"57360","target":"57360","source":"57360","inclusion_delay":"7898","inactivity":"0"},{"validator_index":"352","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"353","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"},{"validator_index":"354","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"355","head":"60734","target":"60734","source":"60734","inclusion_delay":"4704","inactivity":"0"},{"validator_index":"356","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"357","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"358","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"359","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"360","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"361","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"362","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"363","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"364","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"365","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"366","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"validator_index":"367","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"368","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"369","head":"57360","target":"57360","source":"57360","inclusion_delay":"4442","inactivity":"0"},{"validator_index":"370","head":"74230","target":"74230","source":"74230","inclusion_delay":"5110","inactivity":"0"},{"validator_index":"371","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"372","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"373","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"374","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"375","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"376","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"377","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"378","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"379","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"380","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-387096"},{"validator_index":"381","head":"107972","target":"107972","source":"107972","inclusion_delay":"6372","inactivity":"0"},{"validator_index":"382","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"383","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"384","head":"57360","target":"57360","source":"57360","inclusion_delay":"4739","inactivity":"0"},{"validator_index":"385","head":"60734","target":"60734","source":"60734","inclusion_delay":"4427","inactivity":"0"},{"validator_index":"386","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"387","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"388","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"389","head":"94475","target":"94475","source":"94475","inclusion_delay":"29271","inactivity":"0"},{"validator_index":"390","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"391","head":"107972","target":"107972","source":"107972","inclusion_delay":"5575","inactivity":"0"},{"validator_index":"392","head":"101224","target":"101224","source":"101224","inclusion_delay":"25089","inactivity":"0"},{"validator_index":"393","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"394","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"395","head":"97850","target":"97850","source":"97850","inclusion_delay":"3789","inactivity":"0"},{"validator_index":"396","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"397","head":"70856","target":"70856","source":"70856","inclusion_delay":"7317","inactivity":"0"},{"validator_index":"398","head":"104598","target":"104598","source":"104598","inclusion_delay":"7201","inactivity":"0"},{"validator_index":"399","head":"74230","target":"74230","source":"74230","inclusion_delay":"5411","inactivity":"0"},{"validator_index":"400","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"401","head":"80979","target":"80979","source":"80979","inclusion_delay":"7168","inactivity":"0"},{"validator_index":"402","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"403","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"404","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"405","head":"107972","target":"107972","source":"107972","inclusion_delay":"4460","inactivity":"0"},{"validator_index":"406","head":"107972","target":"107972","source":"107972","inclusion_delay":"4316","inactivity":"0"},{"validator_index":"407","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-272400"},{"validator_index":"408","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"409","head":"57360","target":"57360","source":"57360","inclusion_delay":"2843","inactivity":"0"},{"validator_index":"410","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"411","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"412","head":"107972","target":"107972","source":"107972","inclusion_delay":"10293","inactivity":"0"},{"validator_index":"413","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"414","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"415","head":"87727","target":"87727","source":"87727","inclusion_delay":"4530","inactivity":"0"},{"validator_index":"416","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"417","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"418","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"419","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"420","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"421","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"422","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"423","head":"107972","target":"107972","source":"107972","inclusion_delay":"22302","inactivity":"0"},{"validator_index":"424","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"425","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"426","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"427","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"428","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"429","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"430","head":"57360","target":"57360","source":"57360","inclusion_delay":"5468","inactivity":"0"},{"validator_index":"431","head":"104598","target":"104598","source":"104598","inclusion_delay":"4050","inactivity":"0"},{"validator_index":"432","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"433","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"434","head":"57360","target":"57360","source":"57360","inclusion_delay":"17771","inactivity":"0"},{"validator_index":"435","head":"57360","target":"57360","source":"57360","inclusion_delay":"2961","inactivity":"0"},{"validator_index":"436","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-344085"},{"validator_index":"437","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"438","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-430107"},{"validator_index":"439","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"440","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"441","head":"70856","target":"70856","source":"70856","inclusion_delay":"7983","inactivity":"0"},{"validator_index":"442","head":"57360","target":"57360","source":"57360","inclusion_delay":"5923","inactivity":"0"},{"validator_index":"443","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"444","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"445","head":"57360","target":"57360","source":"57360","inclusion_delay":"2538","inactivity":"0"},{"validator_index":"446","head":"107972","target":"107972","source":"107972","inclusion_delay":"14868","inactivity":"0"},{"validator_index":"447","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"448","head":"97850","target":"97850","source":"97850","inclusion_delay":"5272","inactivity":"0"},{"validator_index":"449","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"450","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"451","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"452","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"453","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"454","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"455","head":"101224","target":"101224","source":"101224","inclusion_delay":"4646","inactivity":"0"},{"validator_index":"456","head":"64108","target":"64108","source":"64108","inclusion_delay":"39725","inactivity":"0"},{"validator_index":"457","head":"107972","target":"107972","source":"107972","inclusion_delay":"7434","inactivity":"0"},{"validator_index":"458","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"459","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"460","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"461","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"462","head":"57360","target":"57360","source":"57360","inclusion_delay":"3554","inactivity":"0"},{"validator_index":"463","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"464","head":"107972","target":"107972","source":"107972","inclusion_delay":"5817","inactivity":"0"},{"validator_index":"465","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"466","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"467","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"468","head":"57360","target":"57360","source":"57360","inclusion_delay":"2369","inactivity":"0"},{"validator_index":"469","head":"97850","target":"97850","source":"97850","inclusion_delay":"4181","inactivity":"0"},{"validator_index":"470","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"471","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"472","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"473","head":"57360","target":"57360","source":"57360","inclusion_delay":"10155","inactivity":"0"},{"validator_index":"474","head":"57360","target":"57360","source":"57360","inclusion_delay":"11847","inactivity":"0"},{"validator_index":"475","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"476","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-444444"},{"validator_index":"477","head":"107972","target":"107972","source":"107972","inclusion_delay":"6082","inactivity":"0"},{"validator_index":"478","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"479","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"480","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"481","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"482","head":"57360","target":"57360","source":"57360","inclusion_delay":"2632","inactivity":"0"},{"validator_index":"483","head":"107972","target":"107972","source":"107972","inclusion_delay":"12164","inactivity":"0"},{"validator_index":"484","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"485","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"486","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"487","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"488","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"489","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"490","head":"74230","target":"74230","source":"74230","inclusion_delay":"22998","inactivity":"0"},{"validator_index":"491","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"492","head":"107972","target":"107972","source":"107972","inclusion_delay":"4614","inactivity":"0"},{"validator_index":"493","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"494","head":"57360","target":"57360","source":"57360","inclusion_delay":"2293","inactivity":"0"},{"validator_index":"495","head":"57360","target":"57360","source":"57360","inclusion_delay":"3385","inactivity":"0"},{"validator_index":"496","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"497","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"498","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"499","head":"57360","target":"57360","source":"57360","inclusion_delay":"2221","inactivity":"0"},{"validator_index":"500","head":"107972","target":"107972","source":"107972","inclusion_delay":"6690","inactivity":"0"},{"validator_index":"501","head":"107972","target":"107972","source":"107972","inclusion_delay":"4779","inactivity":"0"},{"validator_index":"502","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-243726"},{"validator_index":"503","head":"107972","target":"107972","source":"107972","inclusion_delay":"11151","inactivity":"0"},{"validator_index":"504","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"-458781"},{"validator_index":"505","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"506","head":"107972","target":"107972","source":"107972","inclusion_delay":"8363","inactivity":"0"},{"validator_index":"507","head":"107972","target":"107972","source":"107972","inclusion_delay":"4956","inactivity":"0"},{"validator_index":"508","head":"57360","target":"57360","source":"57360","inclusion_delay":"35543","inactivity":"0"},{"validator_index":"509","head":"57360","target":"57360","source":"57360","inclusion_delay":"5077","inactivity":"0"},{"validator_index":"510","head":"57360","target":"57360","source":"57360","inclusion_delay":"6462","inactivity":"0"},{"validator_index":"511","head":"107972","target":"107972","source":"107972","inclusion_delay":"5352","inactivity":"0"},{"validator_index":"512","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"513","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"514","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"515","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"516","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"517","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"518","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"519","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"520","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"521","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"522","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"523","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"524","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"525","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"526","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"527","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"}]}} diff --git a/cl/beacon/handler/test_data/attestations_4.json b/cl/beacon/handler/test_data/attestations_4.json new file mode 100644 index 000000000..0904e1e27 --- /dev/null +++ b/cl/beacon/handler/test_data/attestations_4.json @@ -0,0 +1 @@ +{"data":{"ideal_rewards":[{"effective_balance":"20000000000","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"effective_balance":"17000000000","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"}],"total_rewards":[{"validator_index":"1","head":"0","target":"0","source":"0","inclusion_delay":"0","inactivity":"0"},{"validator_index":"4","head":"57360","target":"57360","source":"57360","inclusion_delay":"14217","inactivity":"0"}]}} diff --git a/cl/beacon/handler/test_data/blinded_block_1.json b/cl/beacon/handler/test_data/blinded_block_1.json new file mode 100644 index 000000000..de776b312 --- /dev/null +++ b/cl/beacon/handler/test_data/blinded_block_1.json @@ -0,0 +1,1975 @@ +{ + "data": { + "signature": "0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a", + "message": { + "slot": "8322", + "proposer_index": "210", + "parent_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "state_root": "0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1", + "body": { + "randao_reveal": "0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a", + "eth1_data": { + "deposit_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "deposit_count": "528", + "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "graffiti": "0x0000000000000000000000000000000000000000000000000000000000000000", + "proposer_slashings": [ + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "476", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "476", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "406", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "406", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "281", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "281", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "169", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "169", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "397", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "397", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270" + } + } + ], + "attester_slashings": [ + { + "attestation_1": { + "attesting_indicies": [ + "96", + "353", + "445" + ], + "data": { + "slot": "555", + "index": "0", + "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "17", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + }, + "signature": "0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d" + }, + "attestation_2": { + "attesting_indicies": [ + "96", + "353", + "445" + ], + "data": { + "slot": "555", + "index": "0", + "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "17", + "root": "0x0101010101010101010101010101010101010101010101010101010101010101" + } + }, + "signature": "0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b" + } + } + ], + "attestations": [ + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", + "data": { + "slot": "8292", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", + "data": { + "slot": "8312", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", + "data": { + "slot": "8297", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", + "data": { + "slot": "8290", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", + "data": { + "slot": "8311", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", + "data": { + "slot": "8320", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "258", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "260", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", + "data": { + "slot": "8318", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", + "data": { + "slot": "8300", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", + "data": { + "slot": "8304", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", + "data": { + "slot": "8297", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", + "data": { + "slot": "8290", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", + "data": { + "slot": "8308", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", + "data": { + "slot": "8318", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", + "data": { + "slot": "8292", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", + "data": { + "slot": "8300", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", + "data": { + "slot": "8308", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", + "data": { + "slot": "8320", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "258", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "260", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", + "data": { + "slot": "8310", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", + "data": { + "slot": "8311", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", + "data": { + "slot": "8310", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", + "data": { + "slot": "8312", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", + "data": { + "slot": "8304", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1", + "data": { + "slot": "8294", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + } + ], + "deposits": [ + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65", + "withdrawal_credentials": "0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8", + "amount": "32000000000", + "signature": "0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324", + "withdrawal_credentials": "0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9", + "amount": "32000000000", + "signature": "0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0", + "withdrawal_credentials": "0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3", + "amount": "32000000000", + "signature": "0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc", + "withdrawal_credentials": "0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26", + "amount": "32000000000", + "signature": "0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543", + "withdrawal_credentials": "0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12", + "amount": "32000000000", + "signature": "0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a", + "withdrawal_credentials": "0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4", + "amount": "32000000000", + "signature": "0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3", + "withdrawal_credentials": "0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d", + "amount": "32000000000", + "signature": "0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d", + "withdrawal_credentials": "0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91", + "amount": "32000000000", + "signature": "0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5", + "withdrawal_credentials": "0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f", + "amount": "32000000000", + "signature": "0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9", + "withdrawal_credentials": "0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208", + "amount": "32000000000", + "signature": "0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd" + } + } + ], + "voluntary_exits": [ + { + "message": { + "epoch": "260", + "validator_index": "504" + }, + "signature": "0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e" + }, + { + "message": { + "epoch": "260", + "validator_index": "503" + }, + "signature": "0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194" + }, + { + "message": { + "epoch": "260", + "validator_index": "502" + }, + "signature": "0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c" + }, + { + "message": { + "epoch": "260", + "validator_index": "501" + }, + "signature": "0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911" + }, + { + "message": { + "epoch": "260", + "validator_index": "500" + }, + "signature": "0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136" + }, + { + "message": { + "epoch": "260", + "validator_index": "499" + }, + "signature": "0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51" + }, + { + "message": { + "epoch": "260", + "validator_index": "498" + }, + "signature": "0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2" + }, + { + "message": { + "epoch": "260", + "validator_index": "495" + }, + "signature": "0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8" + }, + { + "message": { + "epoch": "260", + "validator_index": "494" + }, + "signature": "0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c" + }, + { + "message": { + "epoch": "260", + "validator_index": "492" + }, + "signature": "0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13" + }, + { + "message": { + "epoch": "260", + "validator_index": "491" + }, + "signature": "0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974" + } + ], + "sync_aggregate": { + "sync_committee_bits": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "execution_payload_header": { + "parent_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "fee_recipient": "0x0000000000000000000000000000000000000000", + "state_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "receipts_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "prev_randao": "0x0000000000000000000000000000000000000000000000000000000000000000", + "block_number": "0", + "gas_limit": "0", + "gas_used": "0", + "time": "0", + "extra_data": null, + "base_fee_per_gas": "0x0000000000000000000000000000000000000000000000000000000000000000", + "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactions_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "withdrawals_root": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "execution_changes": [], + "blob_kzg_commitments": [] + } + } + }, + "finalized": false, + "version": 0, + "execution_optimistic": false +} diff --git a/cl/beacon/handler/test_data/block_1.json b/cl/beacon/handler/test_data/block_1.json new file mode 100644 index 000000000..05289c754 --- /dev/null +++ b/cl/beacon/handler/test_data/block_1.json @@ -0,0 +1,1974 @@ +{ + "data": { + "signature": "0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a", + "message": { + "slot": "8322", + "proposer_index": "210", + "parent_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "state_root": "0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1", + "body": { + "randao_reveal": "0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a", + "eth1_data": { + "deposit_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "deposit_count": "528", + "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "graffiti": "0x0000000000000000000000000000000000000000000000000000000000000000", + "proposer_slashings": [ + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "476", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "476", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "406", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "406", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "281", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "281", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "169", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "169", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261" + } + }, + { + "signed_header_1": { + "message": { + "slot": "8321", + "proposer_index": "397", + "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122" + }, + "signed_header_2": { + "message": { + "slot": "8321", + "proposer_index": "397", + "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", + "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", + "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" + }, + "signature": "0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270" + } + } + ], + "attester_slashings": [ + { + "attestation_1": { + "attesting_indicies": [ + "96", + "353", + "445" + ], + "data": { + "slot": "555", + "index": "0", + "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "17", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + }, + "signature": "0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d" + }, + "attestation_2": { + "attesting_indicies": [ + "96", + "353", + "445" + ], + "data": { + "slot": "555", + "index": "0", + "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "17", + "root": "0x0101010101010101010101010101010101010101010101010101010101010101" + } + }, + "signature": "0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b" + } + } + ], + "attestations": [ + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", + "data": { + "slot": "8292", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", + "data": { + "slot": "8312", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", + "data": { + "slot": "8297", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", + "data": { + "slot": "8290", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", + "data": { + "slot": "8311", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", + "data": { + "slot": "8320", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "258", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "260", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", + "data": { + "slot": "8318", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", + "data": { + "slot": "8300", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", + "data": { + "slot": "8304", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", + "data": { + "slot": "8296", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", + "data": { + "slot": "8297", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", + "data": { + "slot": "8290", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", + "data": { + "slot": "8308", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", + "data": { + "slot": "8318", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", + "data": { + "slot": "8292", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", + "data": { + "slot": "8314", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", + "data": { + "slot": "8300", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", + "data": { + "slot": "8317", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", + "data": { + "slot": "8308", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", + "data": { + "slot": "8305", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", + "data": { + "slot": "8320", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "258", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "260", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", + "data": { + "slot": "8310", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", + "data": { + "slot": "8313", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", + "data": { + "slot": "8311", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", + "data": { + "slot": "8306", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", + "data": { + "slot": "8310", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", + "data": { + "slot": "8298", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", + "data": { + "slot": "8291", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", + "data": { + "slot": "8293", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", + "data": { + "slot": "8309", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", + "data": { + "slot": "8312", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", + "data": { + "slot": "8299", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", + "data": { + "slot": "8304", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", + "data": { + "slot": "8307", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff7f", + "signature": "0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1", + "data": { + "slot": "8294", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + }, + { + "aggregation_bits": "0xff3f", + "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", + "data": { + "slot": "8302", + "index": "0", + "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", + "source": { + "epoch": "257", + "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" + }, + "target": { + "epoch": "259", + "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" + } + } + } + ], + "deposits": [ + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65", + "withdrawal_credentials": "0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8", + "amount": "32000000000", + "signature": "0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324", + "withdrawal_credentials": "0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9", + "amount": "32000000000", + "signature": "0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0", + "withdrawal_credentials": "0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3", + "amount": "32000000000", + "signature": "0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc", + "withdrawal_credentials": "0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26", + "amount": "32000000000", + "signature": "0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543", + "withdrawal_credentials": "0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12", + "amount": "32000000000", + "signature": "0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a", + "withdrawal_credentials": "0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4", + "amount": "32000000000", + "signature": "0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3", + "withdrawal_credentials": "0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d", + "amount": "32000000000", + "signature": "0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d", + "withdrawal_credentials": "0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91", + "amount": "32000000000", + "signature": "0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5", + "withdrawal_credentials": "0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f", + "amount": "32000000000", + "signature": "0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87" + } + }, + { + "proof": [ + "0x1a02000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": { + "pubkey": "0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9", + "withdrawal_credentials": "0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208", + "amount": "32000000000", + "signature": "0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd" + } + } + ], + "voluntary_exits": [ + { + "message": { + "epoch": "260", + "validator_index": "504" + }, + "signature": "0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e" + }, + { + "message": { + "epoch": "260", + "validator_index": "503" + }, + "signature": "0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194" + }, + { + "message": { + "epoch": "260", + "validator_index": "502" + }, + "signature": "0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c" + }, + { + "message": { + "epoch": "260", + "validator_index": "501" + }, + "signature": "0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911" + }, + { + "message": { + "epoch": "260", + "validator_index": "500" + }, + "signature": "0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136" + }, + { + "message": { + "epoch": "260", + "validator_index": "499" + }, + "signature": "0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51" + }, + { + "message": { + "epoch": "260", + "validator_index": "498" + }, + "signature": "0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2" + }, + { + "message": { + "epoch": "260", + "validator_index": "495" + }, + "signature": "0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8" + }, + { + "message": { + "epoch": "260", + "validator_index": "494" + }, + "signature": "0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c" + }, + { + "message": { + "epoch": "260", + "validator_index": "492" + }, + "signature": "0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13" + }, + { + "message": { + "epoch": "260", + "validator_index": "491" + }, + "signature": "0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974" + } + ], + "sync_aggregate": { + "sync_committee_bits": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "execution_payload": { + "parent_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "fee_recipient": "0x0000000000000000000000000000000000000000", + "state_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "receipts_root": "0x0000000000000000000000000000000000000000000000000000000000000000", + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "prev_randao": "0x0000000000000000000000000000000000000000000000000000000000000000", + "block_number": "0", + "gas_limit": "0", + "gas_used": "0", + "timestamp": "0", + "extra_data": null, + "base_fee_per_gas": "0x0000000000000000000000000000000000000000000000000000000000000000", + "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactions": null + }, + "execution_changes": [], + "blob_kzg_commitments": [] + } + } + }, + "finalized": false, + "version": 0, + "execution_optimistic": false +} diff --git a/cl/beacon/handler/test_data/committees_1.yaml b/cl/beacon/handler/test_data/committees_1.yaml new file mode 100644 index 000000000..feaabdcaf --- /dev/null +++ b/cl/beacon/handler/test_data/committees_1.yaml @@ -0,0 +1,6 @@ +- {"data":[{"index":"0","slot":"8322","validators":["0","104","491","501","379","318","275","504","75","280","105","399","35","401"]}],"execution_optimistic":false,"finalized":true} +- {"data":[],"finalized":true,"execution_optimistic":false} +- {"data":[{"index":"0","slot":"8290","validators":["127","377","274","85","309","420","423","398","153","480","273","429","374","260"]}],"execution_optimistic":false,"finalized":true} +- {"data":[{"index":"0","slot":"8322","validators":["0","104","491","501","379","318","275","504","75","280","105","399","35","401"]}],"finalized":false,"execution_optimistic":false} +- {"data":[],"finalized":false,"execution_optimistic":false} +- {"data":[{"index":"0","slot":"8290","validators":["127","377","274","85","309","420","423","398","153","480","273","429","374","260"]}],"finalized":false,"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/duties_1.yaml b/cl/beacon/handler/test_data/duties_1.yaml new file mode 100644 index 000000000..f1a510029 --- /dev/null +++ b/cl/beacon/handler/test_data/duties_1.yaml @@ -0,0 +1,2 @@ +- {"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","committee_index":"0","committee_length":"14","validator_committee_index":"0","committees_at_slot":"1","slot":"8322"},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","committee_index":"0","committee_length":"13","validator_committee_index":"5","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","committee_index":"0","committee_length":"13","validator_committee_index":"10","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","committee_index":"0","committee_length":"14","validator_committee_index":"10","committees_at_slot":"1","slot":"8329"},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","committee_index":"0","committee_length":"14","validator_committee_index":"11","committees_at_slot":"1","slot":"8331"},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","committee_index":"0","committee_length":"14","validator_committee_index":"8","committees_at_slot":"1","slot":"8342"},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","committee_index":"0","committee_length":"13","validator_committee_index":"6","committees_at_slot":"1","slot":"8348"}],"execution_optimistic":false} +- {"data":[],"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/duties_sync_1.yaml b/cl/beacon/handler/test_data/duties_sync_1.yaml new file mode 100644 index 000000000..9d6558068 --- /dev/null +++ b/cl/beacon/handler/test_data/duties_sync_1.yaml @@ -0,0 +1,2 @@ +- {"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","validator_sync_committee_indicies":["30","286"]},{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","validator_index":"1","validator_sync_committee_indicies":["120","376"]},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","validator_sync_committee_indicies":["138","394"]},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","validator_sync_committee_indicies":["10","266"]},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","validator_sync_committee_indicies":["114","370"]},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","validator_sync_committee_indicies":["103","359"]},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","validator_sync_committee_indicies":["163","419"]},{"pubkey":"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","validator_index":"7","validator_sync_committee_indicies":["197","453"]},{"pubkey":"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","validator_index":"8","validator_sync_committee_indicies":["175","431"]},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","validator_sync_committee_indicies":["53","309"]}],"execution_optimistic":false} +- {"data":[],"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/forkchoice_1.yaml b/cl/beacon/handler/test_data/forkchoice_1.yaml new file mode 100644 index 000000000..448f1545a --- /dev/null +++ b/cl/beacon/handler/test_data/forkchoice_1.yaml @@ -0,0 +1,2 @@ +- {"data":[{"execution_optimistic":false,"root":"0x0102030000000000000000000000000000000000000000000000000000000000","slot":128}]} +- {"finalized_checkpoint":{"epoch":"1","root":"0x0102030000000000000000000000000000000000000000000000000000000000"},"fork_choice_nodes":[{"slot":"128","block_root":"0x0102030000000000000000000000000000000000000000000000000000000000","parent_root":"0x0102030000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"1","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"},{"slot":"128","block_root":"0x0102020405030000000000000000000000000000000000000000000000000000","parent_root":"0x0102050000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"2","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"}],"justified_checkpoint":{"epoch":"2","root":"0x0102030000000000000000000000000000000000000000000000000000000000"}} diff --git a/cl/beacon/handler/test_data/rewards_1.yaml b/cl/beacon/handler/test_data/rewards_1.yaml new file mode 100644 index 000000000..28d6ba50e --- /dev/null +++ b/cl/beacon/handler/test_data/rewards_1.yaml @@ -0,0 +1,3 @@ +- {"data":{"proposer_index":"203","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"finalized":true,"execution_optimistic":false} +- {"data":{"proposer_index":"98","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"finalized":true,"execution_optimistic":false} +- {"data":[{"validator_index":"1","reward":"-698"},{"validator_index":"4","reward":"-698"}],"execution_optimistic":false,"finalized":true} diff --git a/cl/beacon/handler/test_data/rewards_2.json b/cl/beacon/handler/test_data/rewards_2.json new file mode 100644 index 000000000..e73b21470 --- /dev/null +++ b/cl/beacon/handler/test_data/rewards_2.json @@ -0,0 +1 @@ +{"data":[{"validator_index":"0","reward":"-698"},{"validator_index":"1","reward":"-698"},{"validator_index":"2","reward":"-698"},{"validator_index":"3","reward":"-698"},{"validator_index":"4","reward":"-698"},{"validator_index":"5","reward":"-698"},{"validator_index":"6","reward":"-698"},{"validator_index":"7","reward":"-698"},{"validator_index":"8","reward":"-698"},{"validator_index":"9","reward":"-698"},{"validator_index":"10","reward":"-698"},{"validator_index":"11","reward":"-698"},{"validator_index":"12","reward":"-698"},{"validator_index":"13","reward":"-698"},{"validator_index":"14","reward":"-698"},{"validator_index":"15","reward":"-698"},{"validator_index":"16","reward":"-698"},{"validator_index":"17","reward":"-698"},{"validator_index":"18","reward":"-698"},{"validator_index":"19","reward":"-698"},{"validator_index":"20","reward":"-698"},{"validator_index":"21","reward":"-698"},{"validator_index":"22","reward":"-698"},{"validator_index":"23","reward":"-698"},{"validator_index":"24","reward":"-698"},{"validator_index":"25","reward":"-698"},{"validator_index":"26","reward":"-698"},{"validator_index":"27","reward":"-698"},{"validator_index":"28","reward":"-698"},{"validator_index":"29","reward":"-698"},{"validator_index":"30","reward":"-698"},{"validator_index":"31","reward":"-698"},{"validator_index":"32","reward":"-698"},{"validator_index":"33","reward":"-698"},{"validator_index":"34","reward":"-698"},{"validator_index":"35","reward":"-698"},{"validator_index":"36","reward":"-698"},{"validator_index":"37","reward":"-698"},{"validator_index":"38","reward":"-698"},{"validator_index":"39","reward":"-698"},{"validator_index":"40","reward":"-698"},{"validator_index":"41","reward":"-698"},{"validator_index":"42","reward":"-698"},{"validator_index":"43","reward":"-698"},{"validator_index":"44","reward":"-698"},{"validator_index":"45","reward":"-698"},{"validator_index":"46","reward":"-698"},{"validator_index":"47","reward":"-698"},{"validator_index":"48","reward":"-698"},{"validator_index":"49","reward":"-698"},{"validator_index":"50","reward":"-698"},{"validator_index":"51","reward":"-698"},{"validator_index":"52","reward":"-698"},{"validator_index":"53","reward":"-698"},{"validator_index":"54","reward":"-698"},{"validator_index":"55","reward":"-698"},{"validator_index":"56","reward":"-698"},{"validator_index":"57","reward":"-698"},{"validator_index":"58","reward":"-698"},{"validator_index":"59","reward":"-698"},{"validator_index":"60","reward":"-698"},{"validator_index":"61","reward":"-698"},{"validator_index":"62","reward":"-698"},{"validator_index":"63","reward":"-698"},{"validator_index":"64","reward":"-698"},{"validator_index":"65","reward":"-698"},{"validator_index":"66","reward":"-698"},{"validator_index":"67","reward":"-698"},{"validator_index":"68","reward":"-698"},{"validator_index":"69","reward":"-698"},{"validator_index":"70","reward":"-698"},{"validator_index":"71","reward":"-698"},{"validator_index":"72","reward":"-698"},{"validator_index":"73","reward":"-698"},{"validator_index":"74","reward":"-698"},{"validator_index":"75","reward":"-698"},{"validator_index":"76","reward":"-698"},{"validator_index":"77","reward":"-698"},{"validator_index":"78","reward":"-698"},{"validator_index":"79","reward":"-698"},{"validator_index":"80","reward":"-698"},{"validator_index":"81","reward":"-698"},{"validator_index":"82","reward":"-698"},{"validator_index":"83","reward":"-698"},{"validator_index":"84","reward":"-698"},{"validator_index":"85","reward":"-698"},{"validator_index":"86","reward":"-698"},{"validator_index":"87","reward":"-698"},{"validator_index":"88","reward":"-698"},{"validator_index":"89","reward":"-698"},{"validator_index":"90","reward":"-698"},{"validator_index":"91","reward":"-698"},{"validator_index":"92","reward":"-698"},{"validator_index":"93","reward":"-698"},{"validator_index":"94","reward":"-698"},{"validator_index":"95","reward":"-698"},{"validator_index":"96","reward":"-698"},{"validator_index":"97","reward":"-698"},{"validator_index":"98","reward":"-698"},{"validator_index":"99","reward":"-698"},{"validator_index":"100","reward":"-698"},{"validator_index":"101","reward":"-698"},{"validator_index":"102","reward":"-698"},{"validator_index":"103","reward":"-698"},{"validator_index":"104","reward":"-698"},{"validator_index":"105","reward":"-698"},{"validator_index":"106","reward":"-698"},{"validator_index":"107","reward":"-698"},{"validator_index":"108","reward":"-698"},{"validator_index":"109","reward":"-698"},{"validator_index":"110","reward":"-698"},{"validator_index":"111","reward":"-698"},{"validator_index":"112","reward":"-698"},{"validator_index":"113","reward":"-698"},{"validator_index":"114","reward":"-698"},{"validator_index":"115","reward":"-698"},{"validator_index":"116","reward":"-698"},{"validator_index":"117","reward":"-698"},{"validator_index":"118","reward":"-698"},{"validator_index":"119","reward":"-698"},{"validator_index":"120","reward":"-698"},{"validator_index":"121","reward":"-698"},{"validator_index":"122","reward":"-698"},{"validator_index":"123","reward":"-698"},{"validator_index":"124","reward":"-698"},{"validator_index":"125","reward":"-698"},{"validator_index":"126","reward":"-698"},{"validator_index":"127","reward":"-698"},{"validator_index":"128","reward":"-698"},{"validator_index":"129","reward":"-698"},{"validator_index":"130","reward":"-698"},{"validator_index":"131","reward":"-698"},{"validator_index":"132","reward":"-698"},{"validator_index":"133","reward":"-698"},{"validator_index":"134","reward":"-698"},{"validator_index":"135","reward":"-698"},{"validator_index":"136","reward":"-698"},{"validator_index":"137","reward":"-698"},{"validator_index":"138","reward":"-698"},{"validator_index":"139","reward":"-698"},{"validator_index":"140","reward":"-698"},{"validator_index":"141","reward":"-698"},{"validator_index":"142","reward":"-698"},{"validator_index":"143","reward":"-698"},{"validator_index":"144","reward":"-698"},{"validator_index":"145","reward":"-698"},{"validator_index":"146","reward":"-698"},{"validator_index":"147","reward":"-698"},{"validator_index":"148","reward":"-698"},{"validator_index":"149","reward":"-698"},{"validator_index":"150","reward":"-698"},{"validator_index":"151","reward":"-698"},{"validator_index":"152","reward":"-698"},{"validator_index":"153","reward":"-698"},{"validator_index":"154","reward":"-698"},{"validator_index":"155","reward":"-698"},{"validator_index":"156","reward":"-698"},{"validator_index":"157","reward":"-698"},{"validator_index":"158","reward":"-698"},{"validator_index":"159","reward":"-698"},{"validator_index":"160","reward":"-698"},{"validator_index":"161","reward":"-698"},{"validator_index":"162","reward":"-698"},{"validator_index":"163","reward":"-698"},{"validator_index":"164","reward":"-698"},{"validator_index":"165","reward":"-698"},{"validator_index":"166","reward":"-698"},{"validator_index":"167","reward":"-698"},{"validator_index":"168","reward":"-698"},{"validator_index":"169","reward":"-698"},{"validator_index":"170","reward":"-698"},{"validator_index":"171","reward":"-698"},{"validator_index":"172","reward":"-698"},{"validator_index":"173","reward":"-698"},{"validator_index":"174","reward":"-698"},{"validator_index":"175","reward":"-698"},{"validator_index":"176","reward":"-698"},{"validator_index":"177","reward":"-698"},{"validator_index":"178","reward":"-698"},{"validator_index":"179","reward":"-698"},{"validator_index":"180","reward":"-698"},{"validator_index":"181","reward":"-698"},{"validator_index":"182","reward":"-698"},{"validator_index":"183","reward":"-698"},{"validator_index":"184","reward":"-698"},{"validator_index":"185","reward":"-698"},{"validator_index":"186","reward":"-698"},{"validator_index":"187","reward":"-698"},{"validator_index":"188","reward":"-698"},{"validator_index":"189","reward":"-698"},{"validator_index":"190","reward":"-698"},{"validator_index":"191","reward":"-698"},{"validator_index":"192","reward":"-698"},{"validator_index":"193","reward":"-698"},{"validator_index":"194","reward":"-698"},{"validator_index":"195","reward":"-698"},{"validator_index":"196","reward":"-698"},{"validator_index":"197","reward":"-698"},{"validator_index":"198","reward":"-698"},{"validator_index":"199","reward":"-698"},{"validator_index":"200","reward":"-698"},{"validator_index":"201","reward":"-698"},{"validator_index":"202","reward":"-698"},{"validator_index":"203","reward":"-698"},{"validator_index":"204","reward":"-698"},{"validator_index":"205","reward":"-698"},{"validator_index":"206","reward":"-698"},{"validator_index":"207","reward":"-698"},{"validator_index":"208","reward":"-698"},{"validator_index":"209","reward":"-698"},{"validator_index":"210","reward":"-698"},{"validator_index":"211","reward":"-698"},{"validator_index":"212","reward":"-698"},{"validator_index":"213","reward":"-698"},{"validator_index":"214","reward":"-698"},{"validator_index":"215","reward":"-698"},{"validator_index":"216","reward":"-698"},{"validator_index":"217","reward":"-698"},{"validator_index":"218","reward":"-698"},{"validator_index":"219","reward":"-698"},{"validator_index":"220","reward":"-698"},{"validator_index":"221","reward":"-698"},{"validator_index":"222","reward":"-698"},{"validator_index":"223","reward":"-698"},{"validator_index":"224","reward":"-698"},{"validator_index":"225","reward":"-698"},{"validator_index":"226","reward":"-698"},{"validator_index":"227","reward":"-698"},{"validator_index":"228","reward":"-698"},{"validator_index":"229","reward":"-698"},{"validator_index":"230","reward":"-698"},{"validator_index":"231","reward":"-698"},{"validator_index":"232","reward":"-698"},{"validator_index":"233","reward":"-698"},{"validator_index":"234","reward":"-698"},{"validator_index":"235","reward":"-698"},{"validator_index":"236","reward":"-698"},{"validator_index":"237","reward":"-698"},{"validator_index":"238","reward":"-698"},{"validator_index":"239","reward":"-698"},{"validator_index":"240","reward":"-698"},{"validator_index":"241","reward":"-698"},{"validator_index":"242","reward":"-698"},{"validator_index":"243","reward":"-698"},{"validator_index":"244","reward":"-698"},{"validator_index":"245","reward":"-698"},{"validator_index":"246","reward":"-698"},{"validator_index":"247","reward":"-698"},{"validator_index":"248","reward":"-698"},{"validator_index":"249","reward":"-698"},{"validator_index":"250","reward":"-698"},{"validator_index":"251","reward":"-698"},{"validator_index":"252","reward":"-698"},{"validator_index":"253","reward":"-698"},{"validator_index":"254","reward":"-698"},{"validator_index":"255","reward":"-698"}],"finalized":true,"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/states_1.yaml b/cl/beacon/handler/test_data/states_1.yaml new file mode 100644 index 000000000..f5e63003f --- /dev/null +++ b/cl/beacon/handler/test_data/states_1.yaml @@ -0,0 +1,2 @@ +finality_checkpoint: {"data":{"finalized_checkpoint":{"epoch":"1","root":"0xde46b0f2ed5e72f0cec20246403b14c963ec995d7c2825f3532b0460c09d5693"},"current_justified_checkpoint":{"epoch":"3","root":"0xa6e47f164b1a3ca30ea3b2144bd14711de442f51e5b634750a12a1734e24c987"},"previous_justified_checkpoint":{"epoch":"2","root":"0x4c3ee7969e485696669498a88c17f70e6999c40603e2f4338869004392069063"}},"finalized":false,"version":2,"execution_optimistic":false} +randao: {"data":{"randao":"0xdeec617717272914bfd73e02ca1da113a83cf4cf33cd4939486509e2da4ccf4e"},"finalized":false,"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/sync_committees_1.json b/cl/beacon/handler/test_data/sync_committees_1.json new file mode 100644 index 000000000..b593004c7 --- /dev/null +++ b/cl/beacon/handler/test_data/sync_committees_1.json @@ -0,0 +1 @@ +{"data":{"validators":["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192","109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],"validator_aggregates":[["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"]]},"finalized":false,"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/validators_1.yaml b/cl/beacon/handler/test_data/validators_1.yaml new file mode 100644 index 000000000..fa092bd76 --- /dev/null +++ b/cl/beacon/handler/test_data/validators_1.yaml @@ -0,0 +1,9 @@ +- {"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false} +- {"data":[{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false} +- {"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}}],"finalized":true,"execution_optimistic":false} + +- {"data":[{"index":"1","balance":"20125000000"},{"index":"2","balance":"25678253779"},{"index":"3","balance":"35998164834"}],"finalized":true,"execution_optimistic":false} +- {"data":[{"index":"1","balance":"20125000000"}],"finalized":true,"execution_optimistic":false} + +- {"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false} +- {"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false} diff --git a/cl/beacon/handler/utils_test.go b/cl/beacon/handler/utils_test.go index 345cd94d7..a23d8654a 100644 --- a/cl/beacon/handler/utils_test.go +++ b/cl/beacon/handler/utils_test.go @@ -1,4 +1,4 @@ -package handler +package handler_test import ( "context" @@ -9,6 +9,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon/cl/antiquary" "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/handler" "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" @@ -23,7 +24,7 @@ import ( "github.com/stretchr/testify/require" ) -func setupTestingHandler(t *testing.T, v clparams.StateVersion) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState, handler *ApiHandler, opPool pool.OperationsPool, syncedData *synced_data.SyncedDataManager, fcu *forkchoice.ForkChoiceStorageMock) { +func setupTestingHandler(t *testing.T, v clparams.StateVersion, logger log.Logger) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState, h *handler.ApiHandler, opPool pool.OperationsPool, syncedData *synced_data.SyncedDataManager, fcu *forkchoice.ForkChoiceStorageMock) { bcfg := clparams.MainnetBeaconConfig if v == clparams.Phase0Version { blocks, preState, postState = tests.GetPhase0Random() @@ -44,7 +45,7 @@ func setupTestingHandler(t *testing.T, v clparams.StateVersion) (db kv.RwDB, blo ctx := context.Background() vt := state_accessors.NewStaticValidatorTable() - a := antiquary.NewAntiquary(ctx, preState, vt, &bcfg, datadir.New("/tmp"), nil, db, nil, reader, nil, log.New(), true, true, f) + a := antiquary.NewAntiquary(ctx, preState, vt, &bcfg, datadir.New("/tmp"), nil, db, nil, reader, nil, logger, true, true, f) require.NoError(t, a.IncrementBeaconState(ctx, blocks[len(blocks)-1].Block.Slot+33)) // historical states reader below statesReader := historical_states_reader.NewHistoricalStatesReader(&bcfg, reader, vt, f, preState) @@ -52,7 +53,7 @@ func setupTestingHandler(t *testing.T, v clparams.StateVersion) (db kv.RwDB, blo fcu.Pool = opPool syncedData = synced_data.NewSyncedDataManager(true, &bcfg) gC := clparams.GenesisConfigs[clparams.MainnetNetwork] - handler = NewApiHandler( + h = handler.NewApiHandler( &gC, &bcfg, rawDB, @@ -64,6 +65,6 @@ func setupTestingHandler(t *testing.T, v clparams.StateVersion) (db kv.RwDB, blo statesReader, nil, "test-version") - handler.init() + h.Init() return } diff --git a/cl/beacon/handler/validators.go b/cl/beacon/handler/validators.go index 7935ddf6c..f08a9a850 100644 --- a/cl/beacon/handler/validators.go +++ b/cl/beacon/handler/validators.go @@ -184,7 +184,7 @@ func checkValidValidatorId(s string) (bool, error) { return false, nil } -func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -193,7 +193,7 @@ func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (* } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -203,12 +203,12 @@ func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (* return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) } - queryFilters, err := stringListFromQueryParams(r, "status") + queryFilters, err := beaconhttp.StringListFromQueryParams(r, "status") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } - validatorIds, err := stringListFromQueryParams(r, "id") + validatorIds, err := beaconhttp.StringListFromQueryParams(r, "id") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -226,7 +226,7 @@ func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (* return nil, err } - if blockId.head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. + if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. s, cn := a.syncedData.HeadState() defer cn() if s == nil { @@ -308,7 +308,7 @@ func parseQueryValidatorIndicies(tx kv.Tx, ids []string) ([]uint64, error) { return filterIndicies, nil } -func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -317,7 +317,7 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -327,7 +327,7 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) } - validatorId, err := stringFromRequest(r, "validator_id") + validatorId, err := beaconhttp.StringFromRequest(r, "validator_id") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -337,11 +337,11 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) return nil, err } - if blockId.head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. + if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. s, cn := a.syncedData.HeadState() defer cn() if s.ValidatorLength() <= int(validatorIndex) { - return newBeaconResponse([]int{}).withFinalized(false), nil + return newBeaconResponse([]int{}).WithFinalized(false), nil } if s == nil { return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "node is not synced") @@ -375,7 +375,7 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) return responseValidator(validatorIndex, stateEpoch, state.Balances(), state.Validators(), *slot <= a.forkchoiceStore.FinalizedSlot()) } -func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) { +func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -384,7 +384,7 @@ func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Req } defer tx.Rollback() - blockId, err := stateIdFromRequest(r) + blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -394,7 +394,7 @@ func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Req return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) } - validatorIds, err := stringListFromQueryParams(r, "id") + validatorIds, err := beaconhttp.StringListFromQueryParams(r, "id") if err != nil { return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) } @@ -407,7 +407,7 @@ func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Req return nil, err } - if blockId.head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. + if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. s, cn := a.syncedData.HeadState() defer cn() if s == nil { @@ -444,7 +444,7 @@ func (d directString) MarshalJSON() ([]byte, error) { return []byte(d), nil } -func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatus, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconResponse, error) { +func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatus, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconhttp.BeaconResponse, error) { var b strings.Builder b.WriteString("[") first := true @@ -474,14 +474,14 @@ func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatu _, err = b.WriteString("]\n") - return newBeaconResponse(directString(b.String())).withFinalized(finalized), err + return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err } -func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconResponse, error) { +func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconhttp.BeaconResponse, error) { var b strings.Builder var err error if validators.Length() <= int(idx) { - return newBeaconResponse([]int{}).withFinalized(finalized), nil + return newBeaconResponse([]int{}).WithFinalized(finalized), nil } v := validators.Get(int(idx)) @@ -493,10 +493,10 @@ func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListS _, err = b.WriteString("\n") - return newBeaconResponse(directString(b.String())).withFinalized(finalized), err + return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err } -func responseValidatorsBalances(filterIndicies []uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, finalized bool) (*beaconResponse, error) { +func responseValidatorsBalances(filterIndicies []uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, finalized bool) (*beaconhttp.BeaconResponse, error) { var b strings.Builder b.WriteString("[") jsonTemplate := "{\"index\":\"%d\",\"balance\":\"%d\"}" @@ -524,7 +524,7 @@ func responseValidatorsBalances(filterIndicies []uint64, stateEpoch uint64, bala _, err = b.WriteString("]\n") - return newBeaconResponse(directString(b.String())).withFinalized(finalized), err + return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err } func shouldStatusBeFiltered(status validatorStatus, statuses []validatorStatus) bool { diff --git a/cl/beacon/handler/validators_test.go b/cl/beacon/handler/validators_test.go deleted file mode 100644 index 7f0908468..000000000 --- a/cl/beacon/handler/validators_test.go +++ /dev/null @@ -1,201 +0,0 @@ -//go:build integration - -package handler - -import ( - "io" - "net/http" - "net/http/httptest" - "testing" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/common" - "github.com/stretchr/testify/require" -) - -func TestGetAllValidators(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - queryParams string - expectedResp string - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - queryParams: "?id=1,2,3", - expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "finalized", - code: http.StatusOK, - queryParams: "?status=active&id=1,2,3", - expectedResp: `{"data":[{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "finalized", - code: http.StatusOK, - queryParams: "?id=0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", - expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "alabama", - code: http.StatusBadRequest, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/validators" + c.queryParams) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expectedResp, string(out)) - - }) - } -} - -func TestGetValidatorsBalances(t *testing.T) { - t.Skip("FIXME: oom") - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - queryParams string - expectedResp string - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - queryParams: "?id=1,2,3", - expectedResp: `{"data":[{"index":"1","balance":"20125000000"},{"index":"2","balance":"25678253779"},{"index":"3","balance":"35998164834"}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "finalized", - code: http.StatusOK, - queryParams: "?id=0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", - expectedResp: `{"data":[{"index":"1","balance":"20125000000"}],"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "alabama", - code: http.StatusBadRequest, - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/validator_balances" + c.queryParams) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expectedResp, string(out)) - - }) - } -} - -func TestGetSingleValidator(t *testing.T) { - - // setupTestingHandler(t, clparams.Phase0Version) - _, blocks, _, _, postState, handler, _, _, fcu := setupTestingHandler(t, clparams.Phase0Version) - - postRoot, err := postState.HashSSZ() - require.NoError(t, err) - - fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() - require.NoError(t, err) - - fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot - fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) - - cases := []struct { - blockID string - code int - validatorIdx string - expectedResp string - }{ - { - blockID: "0x" + common.Bytes2Hex(postRoot[:]), - code: http.StatusOK, - validatorIdx: "1", - expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "finalized", - code: http.StatusOK, - validatorIdx: "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e", - expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n", - }, - { - blockID: "alabama", - code: http.StatusBadRequest, - validatorIdx: "3", - }, - } - - for _, c := range cases { - t.Run(c.blockID, func(t *testing.T) { - server := httptest.NewServer(handler.mux) - defer server.Close() - // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} - resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/validators/" + c.validatorIdx) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, c.code, resp.StatusCode) - if resp.StatusCode != http.StatusOK { - return - } - // unmarshal the json - out, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, c.expectedResp, string(out)) - - }) - } -} diff --git a/go.mod b/go.mod index 86952bf1d..514e8f519 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( gfx.cafe/util/go/generic v0.0.0-20230721185457-c559e86c829c github.com/99designs/gqlgen v0.17.40 github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d + github.com/Masterminds/sprig/v3 v3.2.3 github.com/RoaringBitmap/roaring v1.2.3 github.com/VictoriaMetrics/fastcache v1.12.2 github.com/alecthomas/kong v0.8.0 @@ -45,6 +46,7 @@ require ( github.com/golang/mock v1.6.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/btree v1.1.2 + github.com/google/cel-go v0.18.2 github.com/google/gofuzz v1.2.0 github.com/gorilla/websocket v1.5.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 @@ -103,9 +105,12 @@ require ( gopkg.in/yaml.v3 v3.0.1 modernc.org/sqlite v1.28.0 pgregory.net/rapid v1.1.0 + sigs.k8s.io/yaml v1.4.0 ) require ( + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 // indirect github.com/alecthomas/atomic v0.1.0-alpha2 // indirect @@ -122,6 +127,7 @@ require ( github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 // indirect github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 // indirect github.com/anacrolix/utp v0.1.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/aws/aws-sdk-go-v2 v1.21.2 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 // indirect github.com/aws/aws-sdk-go-v2/config v1.19.0 // indirect @@ -178,6 +184,7 @@ require ( github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect github.com/google/uuid v1.3.1 // indirect github.com/ianlancetaylor/cgosymbolizer v0.0.0-20220405231054-a1ae3e4bba26 // indirect + github.com/imdario/mergo v0.3.11 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect @@ -207,7 +214,9 @@ require ( github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mitchellh/copystructure v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -256,9 +265,12 @@ require ( github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/shopspring/decimal v1.2.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/sosodev/duration v1.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/cast v1.3.1 // indirect + github.com/stoewer/go-strcase v1.2.0 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.etcd.io/bbolt v1.3.6 // indirect @@ -270,6 +282,7 @@ require ( golang.org/x/mod v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect diff --git a/go.sum b/go.sum index 386b04a07..4de0d41ea 100644 --- a/go.sum +++ b/go.sum @@ -55,6 +55,12 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d h1:fAztVLpjcVcd2al4GL8xYr9Yp7LmXXSTuLqu83U8hKo= github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d/go.mod h1:nCQrFU6/QsJtLS+SBLWRn9UG2nds1f3hQKfWHCrtUqw= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= +github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI= github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= @@ -137,6 +143,8 @@ github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= github.com/anacrolix/utp v0.1.0/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= @@ -407,6 +415,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/cel-go v0.18.2 h1:L0B6sNBSVmt0OyECi8v6VOS74KOc9W/tLiWKfZABvf4= +github.com/google/cel-go v0.18.2/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -419,6 +429,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -443,6 +454,7 @@ github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBB github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= @@ -480,6 +492,7 @@ github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63 github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= @@ -488,6 +501,8 @@ github.com/ianlancetaylor/cgosymbolizer v0.0.0-20220405231054-a1ae3e4bba26 h1:UT github.com/ianlancetaylor/cgosymbolizer v0.0.0-20220405231054-a1ae3e4bba26/go.mod h1:DvXTE/K/RtHehxU8/GtDs4vFtfw64jJ3PaCnFri8CRg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= @@ -611,8 +626,12 @@ github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8Rv github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= @@ -808,6 +827,8 @@ github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5P github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= @@ -848,10 +869,14 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -955,6 +980,7 @@ golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= @@ -1051,6 +1077,7 @@ golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= @@ -1151,6 +1178,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1162,6 +1190,7 @@ golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= @@ -1174,6 +1203,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -1321,6 +1351,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1429,6 +1461,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= zombiezen.com/go/sqlite v0.13.1 h1:qDzxyWWmMtSSEH5qxamqBFmqA2BLSSbtODi3ojaE02o=