mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-02-01 16:45:04 -05:00
Compare commits
38 Commits
e2e-debugg
...
builder-te
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a18e04b3b6 | ||
|
|
ff92ea17e1 | ||
|
|
650bbe3437 | ||
|
|
b57bdb6525 | ||
|
|
559d9851ab | ||
|
|
50e4d3df11 | ||
|
|
1750c08479 | ||
|
|
3fd0802db8 | ||
|
|
5a7c260c82 | ||
|
|
b7c33888d2 | ||
|
|
5c1d4dade1 | ||
|
|
e14d3c9c6d | ||
|
|
9d40adb669 | ||
|
|
c89401f452 | ||
|
|
d6e832d7a3 | ||
|
|
e3f9f87da6 | ||
|
|
88a700c3df | ||
|
|
f145468b05 | ||
|
|
5449250142 | ||
|
|
142711f20d | ||
|
|
06ca73946e | ||
|
|
e9e1c26ff0 | ||
|
|
2e1e9bfa4c | ||
|
|
8340c013f2 | ||
|
|
7309758dc6 | ||
|
|
e2aa4b16d2 | ||
|
|
ca71dc03e8 | ||
|
|
d1fc8166c6 | ||
|
|
81a6c3f3cb | ||
|
|
7f718f90a7 | ||
|
|
e4dcbc4297 | ||
|
|
ffb3ef2feb | ||
|
|
eeb4e576ad | ||
|
|
c8a0ad66f8 | ||
|
|
8a725ac454 | ||
|
|
0a834efd46 | ||
|
|
0973e08056 | ||
|
|
fabd6f26d3 |
41
api/client/builder/BUILD.bazel
Normal file
41
api/client/builder/BUILD.bazel
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
load("@prysm//tools/go:def.bzl", "go_library", "go_test")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"client.go",
|
||||||
|
"errors.go",
|
||||||
|
"types.go",
|
||||||
|
],
|
||||||
|
importpath = "github.com/prysmaticlabs/prysm/api/client/builder",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [
|
||||||
|
"//consensus-types/primitives:go_default_library",
|
||||||
|
"//encoding/bytesutil:go_default_library",
|
||||||
|
"//proto/engine/v1:go_default_library",
|
||||||
|
"//proto/prysm/v1alpha1:go_default_library",
|
||||||
|
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
|
||||||
|
"@com_github_pkg_errors//:go_default_library",
|
||||||
|
"@com_github_sirupsen_logrus//:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_test(
|
||||||
|
name = "go_default_test",
|
||||||
|
srcs = [
|
||||||
|
"client_test.go",
|
||||||
|
"types_test.go",
|
||||||
|
],
|
||||||
|
data = glob(["testdata/**"]),
|
||||||
|
embed = [":go_default_library"],
|
||||||
|
deps = [
|
||||||
|
"//config/fieldparams:go_default_library",
|
||||||
|
"//consensus-types/primitives:go_default_library",
|
||||||
|
"//encoding/bytesutil:go_default_library",
|
||||||
|
"//proto/engine/v1:go_default_library",
|
||||||
|
"//proto/prysm/v1alpha1:go_default_library",
|
||||||
|
"//testing/require:go_default_library",
|
||||||
|
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
|
||||||
|
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
206
api/client/builder/client.go
Normal file
206
api/client/builder/client.go
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"text/template"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
v1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
getExecHeaderPath = "/eth/v1/builder/header/{{.Slot}}/{{.ParentHash}}/{{.Pubkey}}"
|
||||||
|
getStatus = "/eth/v1/builder/status"
|
||||||
|
postBlindedBeaconBlockPath = "/eth/v1/builder/blinded_blocks"
|
||||||
|
postRegisterValidatorPath = "/eth/v1/builder/validators"
|
||||||
|
)
|
||||||
|
|
||||||
|
var errMalformedHostname = errors.New("hostname must include port, separated by one colon, like example.com:3500")
|
||||||
|
|
||||||
|
// ClientOpt is a functional option for the Client type (http.Client wrapper)
|
||||||
|
type ClientOpt func(*Client)
|
||||||
|
|
||||||
|
// WithTimeout sets the .Timeout attribute of the wrapped http.Client.
|
||||||
|
func WithTimeout(timeout time.Duration) ClientOpt {
|
||||||
|
return func(c *Client) {
|
||||||
|
c.hc.Timeout = timeout
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client provides a collection of helper methods for calling Builder API endpoints.
|
||||||
|
type Client struct {
|
||||||
|
hc *http.Client
|
||||||
|
baseURL *url.URL
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewClient constructs a new client with the provided options (ex WithTimeout).
|
||||||
|
// `host` is the base host + port used to construct request urls. This value can be
|
||||||
|
// a URL string, or NewClient will assume an http endpoint if just `host:port` is used.
|
||||||
|
func NewClient(host string, opts ...ClientOpt) (*Client, error) {
|
||||||
|
u, err := urlForHost(host)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
c := &Client{
|
||||||
|
hc: &http.Client{},
|
||||||
|
baseURL: u,
|
||||||
|
}
|
||||||
|
for _, o := range opts {
|
||||||
|
o(c)
|
||||||
|
}
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func urlForHost(h string) (*url.URL, error) {
|
||||||
|
// try to parse as url (being permissive)
|
||||||
|
u, err := url.Parse(h)
|
||||||
|
if err == nil && u.Host != "" {
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
// try to parse as host:port
|
||||||
|
host, port, err := net.SplitHostPort(h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errMalformedHostname
|
||||||
|
}
|
||||||
|
return &url.URL{Host: net.JoinHostPort(host, port), Scheme: "http"}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NodeURL returns a human-readable string representation of the beacon node base url.
|
||||||
|
func (c *Client) NodeURL() string {
|
||||||
|
return c.baseURL.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
type reqOption func(*http.Request)
|
||||||
|
|
||||||
|
// do is a generic, opinionated GET function to reduce boilerplate amongst the getters in this packageapi/client/builder/types.go.
|
||||||
|
func (c *Client) do(ctx context.Context, method string, path string, body io.Reader, opts ...reqOption) ([]byte, error) {
|
||||||
|
u := c.baseURL.ResolveReference(&url.URL{Path: path})
|
||||||
|
log.Printf("requesting %s", u.String())
|
||||||
|
req, err := http.NewRequestWithContext(ctx, method, u.String(), body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, o := range opts {
|
||||||
|
o(req)
|
||||||
|
}
|
||||||
|
r, err := c.hc.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
err = r.Body.Close()
|
||||||
|
}()
|
||||||
|
if r.StatusCode != http.StatusOK {
|
||||||
|
return nil, non200Err(r)
|
||||||
|
}
|
||||||
|
b, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error reading http response body from GetBlock")
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var execHeaderTemplate = template.Must(template.New("").Parse(getExecHeaderPath))
|
||||||
|
|
||||||
|
func execHeaderPath(slot types.Slot, parentHash [32]byte, pubkey [48]byte) (string, error) {
|
||||||
|
v := struct {
|
||||||
|
Slot types.Slot
|
||||||
|
ParentHash string
|
||||||
|
Pubkey string
|
||||||
|
}{
|
||||||
|
Slot: slot,
|
||||||
|
ParentHash: fmt.Sprintf("%#x", parentHash),
|
||||||
|
Pubkey: fmt.Sprintf("%#x", pubkey),
|
||||||
|
}
|
||||||
|
b := bytes.NewBuffer(nil)
|
||||||
|
err := execHeaderTemplate.Execute(b, v)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrapf(err, "error rendering exec header template with slot=%d, parentHash=%#x, pubkey=%#x", slot, parentHash, pubkey)
|
||||||
|
}
|
||||||
|
return b.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetHeader is used by a proposing validator to request an ExecutionPayloadHeader from the Builder node.
|
||||||
|
func (c *Client) GetHeader(ctx context.Context, slot types.Slot, parentHash [32]byte, pubkey [48]byte) (*ethpb.SignedBuilderBid, error) {
|
||||||
|
path, err := execHeaderPath(slot, parentHash, pubkey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hb, err := c.do(ctx, http.MethodGet, path, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hr := &ExecHeaderResponse{}
|
||||||
|
if err := json.Unmarshal(hb, hr); err != nil {
|
||||||
|
return nil, errors.Wrapf(err, "error unmarshaling the builder GetHeader response, using slot=%d, parentHash=%#x, pubkey=%#x", slot, parentHash, pubkey)
|
||||||
|
}
|
||||||
|
return hr.ToProto()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegisterValidator encodes the SignedValidatorRegistrationV1 message to json (including hex-encoding the byte
|
||||||
|
// fields with 0x prefixes) and posts to the builder validator registration endpoint.
|
||||||
|
func (c *Client) RegisterValidator(ctx context.Context, svr *ethpb.SignedValidatorRegistrationV1) error {
|
||||||
|
v := &SignedValidatorRegistration{SignedValidatorRegistrationV1: svr}
|
||||||
|
body, err := json.Marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error encoding the SignedValidatorRegistration value body in RegisterValidator")
|
||||||
|
}
|
||||||
|
_, err = c.do(ctx, http.MethodPost, postRegisterValidatorPath, bytes.NewBuffer(body))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubmitBlindedBlock calls the builder API endpoint that binds the validator to the builder and submits the block.
|
||||||
|
// The response is the full ExecutionPayload used to create the blinded block.
|
||||||
|
func (c *Client) SubmitBlindedBlock(ctx context.Context, sb *ethpb.SignedBlindedBeaconBlockBellatrix) (*v1.ExecutionPayload, error) {
|
||||||
|
v := &SignedBlindedBeaconBlockBellatrix{SignedBlindedBeaconBlockBellatrix: sb}
|
||||||
|
body, err := json.Marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error encoding the SignedBlindedBeaconBlockBellatrix value body in SubmitBlindedBlock")
|
||||||
|
}
|
||||||
|
rb, err := c.do(ctx, http.MethodPost, postBlindedBeaconBlockPath, bytes.NewBuffer(body))
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error posting the SignedBlindedBeaconBlockBellatrix to the builder api")
|
||||||
|
}
|
||||||
|
ep := &ExecPayloadResponse{}
|
||||||
|
if err := json.Unmarshal(rb, ep); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error unmarshaling the builder SubmitBlindedBlock response")
|
||||||
|
}
|
||||||
|
return ep.ToProto()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status asks the remote builder server for a health check. A response of 200 with an empty body is the success/healthy
|
||||||
|
// response, and an error response may have an error message. This method will return a nil value for error in the
|
||||||
|
// happy path, and an error with information about the server response body for a non-200 response.
|
||||||
|
func (c *Client) Status(ctx context.Context) error {
|
||||||
|
_, err := c.do(ctx, http.MethodGet, getStatus, nil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func non200Err(response *http.Response) error {
|
||||||
|
bodyBytes, err := io.ReadAll(response.Body)
|
||||||
|
var body string
|
||||||
|
if err != nil {
|
||||||
|
body = "(Unable to read response body.)"
|
||||||
|
} else {
|
||||||
|
body = "response body:\n" + string(bodyBytes)
|
||||||
|
}
|
||||||
|
msg := fmt.Sprintf("code=%d, url=%s, body=%s", response.StatusCode, response.Request.URL, body)
|
||||||
|
switch response.StatusCode {
|
||||||
|
case 404:
|
||||||
|
return errors.Wrap(ErrNotFound, msg)
|
||||||
|
default:
|
||||||
|
return errors.Wrap(ErrNotOK, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
323
api/client/builder/client_test.go
Normal file
323
api/client/builder/client_test.go
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/prysmaticlabs/go-bitfield"
|
||||||
|
fieldparams "github.com/prysmaticlabs/prysm/config/fieldparams"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||||
|
eth "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
"github.com/prysmaticlabs/prysm/testing/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
type roundtrip func(*http.Request) (*http.Response, error)
|
||||||
|
|
||||||
|
func (fn roundtrip) RoundTrip(r *http.Request) (*http.Response, error) {
|
||||||
|
return fn(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_Status(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
statusPath := "/eth/v1/builder/status"
|
||||||
|
hc := &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
defer func() {
|
||||||
|
if r.Body == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
require.NoError(t, r.Body.Close())
|
||||||
|
}()
|
||||||
|
require.Equal(t, statusPath, r.URL.Path)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Body: io.NopCloser(bytes.NewBuffer(nil)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c := &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
require.NoError(t, c.Status(ctx))
|
||||||
|
hc = &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
defer func() {
|
||||||
|
if r.Body == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
require.NoError(t, r.Body.Close())
|
||||||
|
}()
|
||||||
|
require.Equal(t, statusPath, r.URL.Path)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusInternalServerError,
|
||||||
|
Body: io.NopCloser(bytes.NewBuffer(nil)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c = &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
require.ErrorIs(t, c.Status(ctx), ErrNotOK)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_RegisterValidator(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
expectedBody := `{"message":{"fee_recipient":"0x0000000000000000000000000000000000000000","gas_limit":"23","timestamp":"42","pubkey":"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"}}`
|
||||||
|
expectedPath := "/eth/v1/builder/validators"
|
||||||
|
hc := &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
body, err := io.ReadAll(r.Body)
|
||||||
|
defer func() {
|
||||||
|
require.NoError(t, r.Body.Close())
|
||||||
|
}()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, expectedBody, string(body))
|
||||||
|
require.Equal(t, expectedPath, r.URL.Path)
|
||||||
|
require.Equal(t, http.MethodPost, r.Method)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Body: io.NopCloser(bytes.NewBuffer(nil)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c := &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
reg := ð.SignedValidatorRegistrationV1{
|
||||||
|
Message: ð.ValidatorRegistrationV1{
|
||||||
|
FeeRecipient: ezDecode(t, fieldparams.EthBurnAddressHex),
|
||||||
|
GasLimit: 23,
|
||||||
|
Timestamp: 42,
|
||||||
|
Pubkey: ezDecode(t, "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
require.NoError(t, c.RegisterValidator(ctx, reg))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_GetHeader(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
expectedPath := "/eth/v1/builder/header/23/0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2/0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
|
||||||
|
hc := &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
require.Equal(t, expectedPath, r.URL.Path)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusInternalServerError,
|
||||||
|
Body: io.NopCloser(bytes.NewBuffer(nil)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c := &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
var slot types.Slot = 23
|
||||||
|
parentHash := ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
pubkey := ezDecode(t, "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a")
|
||||||
|
_, err := c.GetHeader(ctx, slot, bytesutil.ToBytes32(parentHash), bytesutil.ToBytes48(pubkey))
|
||||||
|
require.ErrorIs(t, err, ErrNotOK)
|
||||||
|
|
||||||
|
hc = &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
require.Equal(t, expectedPath, r.URL.Path)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Body: io.NopCloser(bytes.NewBufferString(testExampleHeaderResponse)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c = &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
h, err := c.GetHeader(ctx, slot, bytesutil.ToBytes32(parentHash), bytesutil.ToBytes48(pubkey))
|
||||||
|
require.NoError(t, err)
|
||||||
|
expectedSig := ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505")
|
||||||
|
require.Equal(t, true, bytes.Equal(expectedSig, h.Signature))
|
||||||
|
expectedTxRoot := ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.Equal(t, true, bytes.Equal(expectedTxRoot, h.Message.Header.TransactionsRoot))
|
||||||
|
require.Equal(t, uint64(1), h.Message.Header.GasUsed)
|
||||||
|
value := stringToUint256("652312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
require.Equal(t, fmt.Sprintf("%#x", value.SSZBytes()), fmt.Sprintf("%#x", h.Message.Value))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSubmitBlindedBlock(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
hc := &http.Client{
|
||||||
|
Transport: roundtrip(func(r *http.Request) (*http.Response, error) {
|
||||||
|
require.Equal(t, postBlindedBeaconBlockPath, r.URL.Path)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Body: io.NopCloser(bytes.NewBufferString(testExampleExecutionPayload)),
|
||||||
|
Request: r.Clone(ctx),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
c := &Client{
|
||||||
|
hc: hc,
|
||||||
|
baseURL: &url.URL{Host: "localhost:3500", Scheme: "http"},
|
||||||
|
}
|
||||||
|
sbbb := testSignedBlindedBeaconBlockBellatrix(t)
|
||||||
|
ep, err := c.SubmitBlindedBlock(ctx, sbbb)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, true, bytes.Equal(ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"), ep.ParentHash))
|
||||||
|
bfpg := stringToUint256("452312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
require.Equal(t, fmt.Sprintf("%#x", bfpg.SSZBytes()), fmt.Sprintf("%#x", ep.BaseFeePerGas))
|
||||||
|
require.Equal(t, uint64(1), ep.GasLimit)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testSignedBlindedBeaconBlockBellatrix(t *testing.T) *eth.SignedBlindedBeaconBlockBellatrix {
|
||||||
|
return ð.SignedBlindedBeaconBlockBellatrix{
|
||||||
|
Block: ð.BlindedBeaconBlockBellatrix{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Body: ð.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
RandaoReveal: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
Eth1Data: ð.Eth1Data{
|
||||||
|
DepositRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
DepositCount: 1,
|
||||||
|
BlockHash: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Graffiti: ezDecode(t, "0xdeadbeefc0ffee"),
|
||||||
|
ProposerSlashings: []*eth.ProposerSlashing{
|
||||||
|
{
|
||||||
|
Header_1: ð.SignedBeaconBlockHeader{
|
||||||
|
Header: ð.BeaconBlockHeader{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BodyRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
Header_2: ð.SignedBeaconBlockHeader{
|
||||||
|
Header: ð.BeaconBlockHeader{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BodyRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
AttesterSlashings: []*eth.AttesterSlashing{
|
||||||
|
{
|
||||||
|
Attestation_1: ð.IndexedAttestation{
|
||||||
|
AttestingIndices: []uint64{1},
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
Attestation_2: ð.IndexedAttestation{
|
||||||
|
AttestingIndices: []uint64{1},
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Attestations: []*eth.Attestation{
|
||||||
|
{
|
||||||
|
AggregationBits: bitfield.Bitlist{0x01},
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Deposits: []*eth.Deposit{
|
||||||
|
{
|
||||||
|
Proof: [][]byte{ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")},
|
||||||
|
Data: ð.Deposit_Data{
|
||||||
|
PublicKey: ezDecode(t, "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"),
|
||||||
|
WithdrawalCredentials: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Amount: 1,
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
VoluntaryExits: []*eth.SignedVoluntaryExit{
|
||||||
|
{
|
||||||
|
Exit: ð.VoluntaryExit{
|
||||||
|
Epoch: 1,
|
||||||
|
ValidatorIndex: 1,
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SyncAggregate: ð.SyncAggregate{
|
||||||
|
SyncCommitteeSignature: make([]byte, 48),
|
||||||
|
SyncCommitteeBits: bitfield.Bitvector512{0x01},
|
||||||
|
},
|
||||||
|
ExecutionPayloadHeader: ð.ExecutionPayloadHeader{
|
||||||
|
ParentHash: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
FeeRecipient: ezDecode(t, "0xabcf8e0d4e9587369b2301d0790347320302cc09"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
ReceiptsRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
LogsBloom: ezDecode(t, "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
|
||||||
|
PrevRandao: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BlockNumber: 1,
|
||||||
|
GasLimit: 1,
|
||||||
|
GasUsed: 1,
|
||||||
|
Timestamp: 1,
|
||||||
|
ExtraData: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BaseFeePerGas: []byte(strconv.FormatUint(1, 10)),
|
||||||
|
BlockHash: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
TransactionsRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
}
|
||||||
|
}
|
||||||
10
api/client/builder/errors.go
Normal file
10
api/client/builder/errors.go
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import "github.com/pkg/errors"
|
||||||
|
|
||||||
|
// ErrNotOK is used to indicate when an HTTP request to the Beacon Node API failed with any non-2xx response code.
|
||||||
|
// More specific errors may be returned, but an error in reaction to a non-2xx response will always wrap ErrNotOK.
|
||||||
|
var ErrNotOK = errors.New("did not receive 2xx response from API")
|
||||||
|
|
||||||
|
// ErrNotFound specifically means that a '404 - NOT FOUND' response was received from the API.
|
||||||
|
var ErrNotFound = errors.Wrap(ErrNotOK, "recv 404 NotFound response from API")
|
||||||
1
api/client/builder/testdata/blinded-block.json
vendored
Normal file
1
api/client/builder/testdata/blinded-block.json
vendored
Normal file
File diff suppressed because one or more lines are too long
572
api/client/builder/types.go
Normal file
572
api/client/builder/types.go
Normal file
@@ -0,0 +1,572 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||||
|
v1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
|
||||||
|
eth "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SignedValidatorRegistration struct {
|
||||||
|
*eth.SignedValidatorRegistrationV1
|
||||||
|
}
|
||||||
|
|
||||||
|
type ValidatorRegistration struct {
|
||||||
|
*eth.ValidatorRegistrationV1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SignedValidatorRegistration) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Message *ValidatorRegistration `json:"message,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
Message: &ValidatorRegistration{r.Message},
|
||||||
|
Signature: r.SignedValidatorRegistrationV1.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ValidatorRegistration) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
FeeRecipient hexutil.Bytes `json:"fee_recipient,omitempty"`
|
||||||
|
GasLimit string `json:"gas_limit,omitempty"`
|
||||||
|
Timestamp string `json:"timestamp,omitempty"`
|
||||||
|
Pubkey hexutil.Bytes `json:"pubkey,omitempty"`
|
||||||
|
}{
|
||||||
|
FeeRecipient: r.FeeRecipient,
|
||||||
|
GasLimit: fmt.Sprintf("%d", r.GasLimit),
|
||||||
|
Timestamp: fmt.Sprintf("%d", r.Timestamp),
|
||||||
|
Pubkey: r.Pubkey,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type Uint256 struct {
|
||||||
|
*big.Int
|
||||||
|
}
|
||||||
|
|
||||||
|
func stringToUint256(s string) Uint256 {
|
||||||
|
bi := new(big.Int)
|
||||||
|
bi.SetString(s, 10)
|
||||||
|
return Uint256{Int: bi}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sszBytesToUint256 creates a Uint256 from a ssz-style (little-endian byte slice) representation.
|
||||||
|
func sszBytesToUint256(b []byte) Uint256 {
|
||||||
|
bi := new(big.Int)
|
||||||
|
return Uint256{Int: bi.SetBytes((b))}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SSZBytes creates an ssz-style (little-endian byte slice) representation of the Uint256
|
||||||
|
func (s Uint256) SSZBytes() []byte {
|
||||||
|
return bytesutil.ReverseByteOrder(s.Int.Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
var errUnmarshalUint256Failed = errors.New("unable to UnmarshalText into a Uint256 value")
|
||||||
|
|
||||||
|
func (s *Uint256) UnmarshalJSON(t []byte) error {
|
||||||
|
start := 0
|
||||||
|
end := len(t)
|
||||||
|
if t[0] == '"' {
|
||||||
|
start += 1
|
||||||
|
}
|
||||||
|
if t[end-1] == '"' {
|
||||||
|
end -= 1
|
||||||
|
}
|
||||||
|
return s.UnmarshalText(t[start:end])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Uint256) UnmarshalText(t []byte) error {
|
||||||
|
if s.Int == nil {
|
||||||
|
s.Int = big.NewInt(0)
|
||||||
|
}
|
||||||
|
z, ok := s.SetString(string(t), 10)
|
||||||
|
if !ok {
|
||||||
|
return errors.Wrapf(errUnmarshalUint256Failed, "value=%s", string(t))
|
||||||
|
}
|
||||||
|
s.Int = z
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Uint256) MarshalJSON() ([]byte, error) {
|
||||||
|
t, err := s.MarshalText()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
t = append([]byte{'"'}, t...)
|
||||||
|
t = append(t, '"')
|
||||||
|
return t, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Uint256) MarshalText() ([]byte, error) {
|
||||||
|
return []byte(s.String()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Uint64String uint64
|
||||||
|
|
||||||
|
func (s *Uint64String) UnmarshalText(t []byte) error {
|
||||||
|
u, err := strconv.ParseUint(string(t), 10, 64)
|
||||||
|
*s = Uint64String(u)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Uint64String) MarshalText() ([]byte, error) {
|
||||||
|
return []byte(fmt.Sprintf("%d", s)), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExecHeaderResponse struct {
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
|
Data struct {
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
Message *BuilderBid `json:"message,omitempty"`
|
||||||
|
} `json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ehr *ExecHeaderResponse) ToProto() (*eth.SignedBuilderBid, error) {
|
||||||
|
bb, err := ehr.Data.Message.ToProto()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ð.SignedBuilderBid{
|
||||||
|
Message: bb,
|
||||||
|
Signature: ehr.Data.Signature,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bb *BuilderBid) ToProto() (*eth.BuilderBid, error) {
|
||||||
|
header, err := bb.Header.ToProto()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ð.BuilderBid{
|
||||||
|
Header: header,
|
||||||
|
Value: bb.Value.SSZBytes(),
|
||||||
|
Pubkey: bb.Pubkey,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *ExecutionPayloadHeader) ToProto() (*eth.ExecutionPayloadHeader, error) {
|
||||||
|
return ð.ExecutionPayloadHeader{
|
||||||
|
ParentHash: h.ParentHash,
|
||||||
|
FeeRecipient: h.FeeRecipient,
|
||||||
|
StateRoot: h.StateRoot,
|
||||||
|
ReceiptsRoot: h.ReceiptsRoot,
|
||||||
|
LogsBloom: h.LogsBloom,
|
||||||
|
PrevRandao: h.PrevRandao,
|
||||||
|
BlockNumber: uint64(h.BlockNumber),
|
||||||
|
GasLimit: uint64(h.GasLimit),
|
||||||
|
GasUsed: uint64(h.GasUsed),
|
||||||
|
Timestamp: uint64(h.Timestamp),
|
||||||
|
ExtraData: h.ExtraData,
|
||||||
|
BaseFeePerGas: h.BaseFeePerGas.SSZBytes(),
|
||||||
|
BlockHash: h.BlockHash,
|
||||||
|
TransactionsRoot: h.TransactionsRoot,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type BuilderBid struct {
|
||||||
|
Header *ExecutionPayloadHeader `json:"header,omitempty"`
|
||||||
|
Value Uint256 `json:"value,omitempty"`
|
||||||
|
Pubkey hexutil.Bytes `json:"pubkey,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExecutionPayloadHeader struct {
|
||||||
|
ParentHash hexutil.Bytes `json:"parent_hash,omitempty"`
|
||||||
|
FeeRecipient hexutil.Bytes `json:"fee_recipient,omitempty"`
|
||||||
|
StateRoot hexutil.Bytes `json:"state_root,omitempty"`
|
||||||
|
ReceiptsRoot hexutil.Bytes `json:"receipts_root,omitempty"`
|
||||||
|
LogsBloom hexutil.Bytes `json:"logs_bloom,omitempty"`
|
||||||
|
PrevRandao hexutil.Bytes `json:"prev_randao,omitempty"`
|
||||||
|
BlockNumber Uint64String `json:"block_number,omitempty"`
|
||||||
|
GasLimit Uint64String `json:"gas_limit,omitempty"`
|
||||||
|
GasUsed Uint64String `json:"gas_used,omitempty"`
|
||||||
|
Timestamp Uint64String `json:"timestamp,omitempty"`
|
||||||
|
ExtraData hexutil.Bytes `json:"extra_data,omitempty"`
|
||||||
|
BaseFeePerGas Uint256 `json:"base_fee_per_gas,omitempty"`
|
||||||
|
BlockHash hexutil.Bytes `json:"block_hash,omitempty"`
|
||||||
|
TransactionsRoot hexutil.Bytes `json:"transactions_root,omitempty"`
|
||||||
|
*eth.ExecutionPayloadHeader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *ExecutionPayloadHeader) MarshalJSON() ([]byte, error) {
|
||||||
|
type MarshalCaller ExecutionPayloadHeader
|
||||||
|
return json.Marshal(&MarshalCaller{
|
||||||
|
ParentHash: h.ExecutionPayloadHeader.ParentHash,
|
||||||
|
FeeRecipient: h.ExecutionPayloadHeader.FeeRecipient,
|
||||||
|
StateRoot: h.ExecutionPayloadHeader.StateRoot,
|
||||||
|
ReceiptsRoot: h.ExecutionPayloadHeader.ReceiptsRoot,
|
||||||
|
LogsBloom: h.ExecutionPayloadHeader.LogsBloom,
|
||||||
|
PrevRandao: h.ExecutionPayloadHeader.PrevRandao,
|
||||||
|
BlockNumber: Uint64String(h.ExecutionPayloadHeader.BlockNumber),
|
||||||
|
GasLimit: Uint64String(h.ExecutionPayloadHeader.GasLimit),
|
||||||
|
GasUsed: Uint64String(h.ExecutionPayloadHeader.GasUsed),
|
||||||
|
Timestamp: Uint64String(h.ExecutionPayloadHeader.Timestamp),
|
||||||
|
ExtraData: h.ExecutionPayloadHeader.ExtraData,
|
||||||
|
BaseFeePerGas: sszBytesToUint256(h.ExecutionPayloadHeader.BaseFeePerGas),
|
||||||
|
BlockHash: h.ExecutionPayloadHeader.BlockHash,
|
||||||
|
TransactionsRoot: h.ExecutionPayloadHeader.TransactionsRoot,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExecPayloadResponse struct {
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
|
Data ExecutionPayload `json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExecutionPayload struct {
|
||||||
|
ParentHash hexutil.Bytes `json:"parent_hash,omitempty"`
|
||||||
|
FeeRecipient hexutil.Bytes `json:"fee_recipient,omitempty"`
|
||||||
|
StateRoot hexutil.Bytes `json:"state_root,omitempty"`
|
||||||
|
ReceiptsRoot hexutil.Bytes `json:"receipts_root,omitempty"`
|
||||||
|
LogsBloom hexutil.Bytes `json:"logs_bloom,omitempty"`
|
||||||
|
PrevRandao hexutil.Bytes `json:"prev_randao,omitempty"`
|
||||||
|
BlockNumber Uint64String `json:"block_number,omitempty"`
|
||||||
|
GasLimit Uint64String `json:"gas_limit,omitempty"`
|
||||||
|
GasUsed Uint64String `json:"gas_used,omitempty"`
|
||||||
|
Timestamp Uint64String `json:"timestamp,omitempty"`
|
||||||
|
ExtraData hexutil.Bytes `json:"extra_data,omitempty"`
|
||||||
|
BaseFeePerGas Uint256 `json:"base_fee_per_gas,omitempty"`
|
||||||
|
BlockHash hexutil.Bytes `json:"block_hash,omitempty"`
|
||||||
|
Transactions []hexutil.Bytes `json:"transactions,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ExecPayloadResponse) ToProto() (*v1.ExecutionPayload, error) {
|
||||||
|
return r.Data.ToProto()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ExecutionPayload) ToProto() (*v1.ExecutionPayload, error) {
|
||||||
|
txs := make([][]byte, len(p.Transactions))
|
||||||
|
for i := range p.Transactions {
|
||||||
|
txs[i] = p.Transactions[i]
|
||||||
|
}
|
||||||
|
return &v1.ExecutionPayload{
|
||||||
|
ParentHash: p.ParentHash,
|
||||||
|
FeeRecipient: p.FeeRecipient,
|
||||||
|
StateRoot: p.StateRoot,
|
||||||
|
ReceiptsRoot: p.ReceiptsRoot,
|
||||||
|
LogsBloom: p.LogsBloom,
|
||||||
|
PrevRandao: p.PrevRandao,
|
||||||
|
BlockNumber: uint64(p.BlockNumber),
|
||||||
|
GasLimit: uint64(p.GasLimit),
|
||||||
|
GasUsed: uint64(p.GasUsed),
|
||||||
|
Timestamp: uint64(p.Timestamp),
|
||||||
|
ExtraData: p.ExtraData,
|
||||||
|
BaseFeePerGas: p.BaseFeePerGas.SSZBytes(),
|
||||||
|
BlockHash: p.BlockHash,
|
||||||
|
Transactions: txs,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignedBlindedBeaconBlockBellatrix struct {
|
||||||
|
*eth.SignedBlindedBeaconBlockBellatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlindedBeaconBlockBellatrix struct {
|
||||||
|
*eth.BlindedBeaconBlockBellatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlindedBeaconBlockBodyBellatrix struct {
|
||||||
|
*eth.BlindedBeaconBlockBodyBellatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SignedBlindedBeaconBlockBellatrix) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Message *BlindedBeaconBlockBellatrix `json:"message,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
Message: &BlindedBeaconBlockBellatrix{r.SignedBlindedBeaconBlockBellatrix.Block},
|
||||||
|
Signature: r.SignedBlindedBeaconBlockBellatrix.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlindedBeaconBlockBellatrix) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Slot string `json:"slot"`
|
||||||
|
ProposerIndex string `json:"proposer_index,omitempty"`
|
||||||
|
ParentRoot hexutil.Bytes `json:"parent_root,omitempty"`
|
||||||
|
StateRoot hexutil.Bytes `json:"state_root,omitempty"`
|
||||||
|
Body *BlindedBeaconBlockBodyBellatrix `json:"body,omitempty"`
|
||||||
|
}{
|
||||||
|
Slot: fmt.Sprintf("%d", b.Slot),
|
||||||
|
ProposerIndex: fmt.Sprintf("%d", b.ProposerIndex),
|
||||||
|
ParentRoot: b.ParentRoot,
|
||||||
|
StateRoot: b.StateRoot,
|
||||||
|
Body: &BlindedBeaconBlockBodyBellatrix{b.BlindedBeaconBlockBellatrix.Body},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProposerSlashing struct {
|
||||||
|
*eth.ProposerSlashing
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ProposerSlashing) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
SignedHeader1 *SignedBeaconBlockHeader `json:"signed_header_1,omitempty"`
|
||||||
|
SignedHeader2 *SignedBeaconBlockHeader `json:"signed_header_2,omitempty"`
|
||||||
|
}{
|
||||||
|
SignedHeader1: &SignedBeaconBlockHeader{s.ProposerSlashing.Header_1},
|
||||||
|
SignedHeader2: &SignedBeaconBlockHeader{s.ProposerSlashing.Header_2},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignedBeaconBlockHeader struct {
|
||||||
|
*eth.SignedBeaconBlockHeader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *SignedBeaconBlockHeader) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Header *BeaconBlockHeader `json:"message,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
Header: &BeaconBlockHeader{h.SignedBeaconBlockHeader.Header},
|
||||||
|
Signature: h.SignedBeaconBlockHeader.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type BeaconBlockHeader struct {
|
||||||
|
*eth.BeaconBlockHeader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *BeaconBlockHeader) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Slot string `json:"slot,omitempty"`
|
||||||
|
ProposerIndex string `json:"proposer_index,omitempty"`
|
||||||
|
ParentRoot hexutil.Bytes `json:"parent_root,omitempty"`
|
||||||
|
StateRoot hexutil.Bytes `json:"state_root,omitempty"`
|
||||||
|
BodyRoot hexutil.Bytes `json:"body_root,omitempty"`
|
||||||
|
}{
|
||||||
|
Slot: fmt.Sprintf("%d", h.BeaconBlockHeader.Slot),
|
||||||
|
ProposerIndex: fmt.Sprintf("%d", h.BeaconBlockHeader.ProposerIndex),
|
||||||
|
ParentRoot: h.BeaconBlockHeader.ParentRoot,
|
||||||
|
StateRoot: h.BeaconBlockHeader.StateRoot,
|
||||||
|
BodyRoot: h.BeaconBlockHeader.BodyRoot,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type IndexedAttestation struct {
|
||||||
|
*eth.IndexedAttestation
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *IndexedAttestation) MarshalJSON() ([]byte, error) {
|
||||||
|
indices := make([]string, len(a.IndexedAttestation.AttestingIndices))
|
||||||
|
for i := range a.IndexedAttestation.AttestingIndices {
|
||||||
|
indices[i] = fmt.Sprintf("%d", a.AttestingIndices[i])
|
||||||
|
}
|
||||||
|
return json.Marshal(struct {
|
||||||
|
AttestingIndices []string `json:"attesting_indices,omitempty"`
|
||||||
|
Data *AttestationData `json:"data,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
AttestingIndices: indices,
|
||||||
|
Data: &AttestationData{a.IndexedAttestation.Data},
|
||||||
|
Signature: a.IndexedAttestation.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type AttesterSlashing struct {
|
||||||
|
*eth.AttesterSlashing
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AttesterSlashing) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Attestation1 *IndexedAttestation `json:"attestation_1,omitempty"`
|
||||||
|
Attestation2 *IndexedAttestation `json:"attestation_2,omitempty"`
|
||||||
|
}{
|
||||||
|
Attestation1: &IndexedAttestation{s.Attestation_1},
|
||||||
|
Attestation2: &IndexedAttestation{s.Attestation_2},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type Checkpoint struct {
|
||||||
|
*eth.Checkpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Checkpoint) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Epoch string `json:"epoch,omitempty"`
|
||||||
|
Root hexutil.Bytes `json:"root,omitempty"`
|
||||||
|
}{
|
||||||
|
Epoch: fmt.Sprintf("%d", c.Checkpoint.Epoch),
|
||||||
|
Root: c.Checkpoint.Root,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type AttestationData struct {
|
||||||
|
*eth.AttestationData
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AttestationData) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Slot string `json:"slot,omitempty"`
|
||||||
|
Index string `json:"index,omitempty"`
|
||||||
|
BeaconBlockRoot hexutil.Bytes `json:"beacon_block_root,omitempty"`
|
||||||
|
Source *Checkpoint `json:"source,omitempty"`
|
||||||
|
Target *Checkpoint `json:"target,omitempty"`
|
||||||
|
}{
|
||||||
|
Slot: fmt.Sprintf("%d", a.AttestationData.Slot),
|
||||||
|
Index: fmt.Sprintf("%d", a.AttestationData.CommitteeIndex),
|
||||||
|
BeaconBlockRoot: a.AttestationData.BeaconBlockRoot,
|
||||||
|
Source: &Checkpoint{a.AttestationData.Source},
|
||||||
|
Target: &Checkpoint{a.AttestationData.Target},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type Attestation struct {
|
||||||
|
*eth.Attestation
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Attestation) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
AggregationBits hexutil.Bytes `json:"aggregation_bits,omitempty"`
|
||||||
|
Data *AttestationData `json:"data,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty" ssz-size:"96"`
|
||||||
|
}{
|
||||||
|
AggregationBits: hexutil.Bytes(a.Attestation.AggregationBits),
|
||||||
|
Data: &AttestationData{a.Attestation.Data},
|
||||||
|
Signature: a.Attestation.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type DepositData struct {
|
||||||
|
*eth.Deposit_Data
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DepositData) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
PublicKey hexutil.Bytes `json:"pubkey,omitempty"`
|
||||||
|
WithdrawalCredentials hexutil.Bytes `json:"withdrawal_credentials,omitempty"`
|
||||||
|
Amount string `json:"amount,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
PublicKey: d.PublicKey,
|
||||||
|
WithdrawalCredentials: d.WithdrawalCredentials,
|
||||||
|
Amount: fmt.Sprintf("%d", d.Amount),
|
||||||
|
Signature: d.Signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type Deposit struct {
|
||||||
|
*eth.Deposit
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Deposit) MarshalJSON() ([]byte, error) {
|
||||||
|
proof := make([]hexutil.Bytes, len(d.Proof))
|
||||||
|
for i := range d.Proof {
|
||||||
|
proof[i] = d.Proof[i]
|
||||||
|
}
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Proof []hexutil.Bytes `json:"proof"`
|
||||||
|
Data *DepositData `json:"data"`
|
||||||
|
}{
|
||||||
|
Proof: proof,
|
||||||
|
Data: &DepositData{Deposit_Data: d.Deposit.Data},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignedVoluntaryExit struct {
|
||||||
|
*eth.SignedVoluntaryExit
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sve *SignedVoluntaryExit) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Message *VoluntaryExit `json:"message,omitempty"`
|
||||||
|
Signature hexutil.Bytes `json:"signature,omitempty"`
|
||||||
|
}{
|
||||||
|
Signature: sve.SignedVoluntaryExit.Signature,
|
||||||
|
Message: &VoluntaryExit{sve.SignedVoluntaryExit.Exit},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type VoluntaryExit struct {
|
||||||
|
*eth.VoluntaryExit
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ve *VoluntaryExit) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Epoch string `json:"epoch,omitempty"`
|
||||||
|
ValidatorIndex string `json:"validator_index,omitempty"`
|
||||||
|
}{
|
||||||
|
Epoch: fmt.Sprintf("%d", ve.Epoch),
|
||||||
|
ValidatorIndex: fmt.Sprintf("%d", ve.ValidatorIndex),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type SyncAggregate struct {
|
||||||
|
*eth.SyncAggregate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SyncAggregate) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
SyncCommitteeBits hexutil.Bytes `json:"sync_committee_bits,omitempty"`
|
||||||
|
SyncCommitteeSignature hexutil.Bytes `json:"sync_committee_signature,omitempty"`
|
||||||
|
}{
|
||||||
|
SyncCommitteeBits: hexutil.Bytes(s.SyncAggregate.SyncCommitteeBits),
|
||||||
|
SyncCommitteeSignature: s.SyncAggregate.SyncCommitteeSignature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type Eth1Data struct {
|
||||||
|
*eth.Eth1Data
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Eth1Data) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(struct {
|
||||||
|
DepositRoot hexutil.Bytes `json:"deposit_root,omitempty"`
|
||||||
|
DepositCount string `json:"deposit_count,omitempty"`
|
||||||
|
BlockHash hexutil.Bytes `json:"block_hash,omitempty"`
|
||||||
|
}{
|
||||||
|
DepositRoot: e.DepositRoot,
|
||||||
|
DepositCount: fmt.Sprintf("%d", e.DepositCount),
|
||||||
|
BlockHash: e.BlockHash,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlindedBeaconBlockBodyBellatrix) MarshalJSON() ([]byte, error) {
|
||||||
|
sve := make([]*SignedVoluntaryExit, len(b.BlindedBeaconBlockBodyBellatrix.VoluntaryExits))
|
||||||
|
for i := range b.BlindedBeaconBlockBodyBellatrix.VoluntaryExits {
|
||||||
|
sve[i] = &SignedVoluntaryExit{SignedVoluntaryExit: b.BlindedBeaconBlockBodyBellatrix.VoluntaryExits[i]}
|
||||||
|
}
|
||||||
|
deps := make([]*Deposit, len(b.BlindedBeaconBlockBodyBellatrix.Deposits))
|
||||||
|
for i := range b.BlindedBeaconBlockBodyBellatrix.Deposits {
|
||||||
|
deps[i] = &Deposit{Deposit: b.BlindedBeaconBlockBodyBellatrix.Deposits[i]}
|
||||||
|
}
|
||||||
|
atts := make([]*Attestation, len(b.BlindedBeaconBlockBodyBellatrix.Attestations))
|
||||||
|
for i := range b.BlindedBeaconBlockBodyBellatrix.Attestations {
|
||||||
|
atts[i] = &Attestation{Attestation: b.BlindedBeaconBlockBodyBellatrix.Attestations[i]}
|
||||||
|
}
|
||||||
|
atsl := make([]*AttesterSlashing, len(b.BlindedBeaconBlockBodyBellatrix.AttesterSlashings))
|
||||||
|
for i := range b.BlindedBeaconBlockBodyBellatrix.AttesterSlashings {
|
||||||
|
atsl[i] = &AttesterSlashing{AttesterSlashing: b.BlindedBeaconBlockBodyBellatrix.AttesterSlashings[i]}
|
||||||
|
}
|
||||||
|
pros := make([]*ProposerSlashing, len(b.BlindedBeaconBlockBodyBellatrix.ProposerSlashings))
|
||||||
|
for i := range b.BlindedBeaconBlockBodyBellatrix.ProposerSlashings {
|
||||||
|
pros[i] = &ProposerSlashing{ProposerSlashing: b.BlindedBeaconBlockBodyBellatrix.ProposerSlashings[i]}
|
||||||
|
}
|
||||||
|
return json.Marshal(struct {
|
||||||
|
RandaoReveal hexutil.Bytes `json:"randao_reveal,omitempty"`
|
||||||
|
Eth1Data *Eth1Data `json:"eth1_data,omitempty"`
|
||||||
|
Graffiti hexutil.Bytes `json:"graffiti,omitempty"`
|
||||||
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings,omitempty"`
|
||||||
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings,omitempty"`
|
||||||
|
Attestations []*Attestation `json:"attestations,omitempty"`
|
||||||
|
Deposits []*Deposit `json:"deposits,omitempty"`
|
||||||
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits,omitempty"`
|
||||||
|
SyncAggregate *SyncAggregate `json:"sync_aggregate,omitempty"`
|
||||||
|
ExecutionPayloadHeader *ExecutionPayloadHeader `json:"execution_payload_header,omitempty"`
|
||||||
|
}{
|
||||||
|
RandaoReveal: b.RandaoReveal,
|
||||||
|
Eth1Data: &Eth1Data{b.BlindedBeaconBlockBodyBellatrix.Eth1Data},
|
||||||
|
Graffiti: b.BlindedBeaconBlockBodyBellatrix.Graffiti,
|
||||||
|
ProposerSlashings: pros,
|
||||||
|
AttesterSlashings: atsl,
|
||||||
|
Attestations: atts,
|
||||||
|
Deposits: deps,
|
||||||
|
VoluntaryExits: sve,
|
||||||
|
SyncAggregate: &SyncAggregate{b.BlindedBeaconBlockBodyBellatrix.SyncAggregate},
|
||||||
|
ExecutionPayloadHeader: &ExecutionPayloadHeader{ExecutionPayloadHeader: b.BlindedBeaconBlockBodyBellatrix.ExecutionPayloadHeader},
|
||||||
|
})
|
||||||
|
}
|
||||||
693
api/client/builder/types_test.go
Normal file
693
api/client/builder/types_test.go
Normal file
@@ -0,0 +1,693 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
"github.com/prysmaticlabs/go-bitfield"
|
||||||
|
v1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
|
||||||
|
eth "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
"github.com/prysmaticlabs/prysm/testing/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ezDecode(t *testing.T, s string) []byte {
|
||||||
|
v, err := hexutil.Decode(s)
|
||||||
|
require.NoError(t, err)
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSignedValidatorRegistration_MarshalJSON(t *testing.T) {
|
||||||
|
svr := ð.SignedValidatorRegistrationV1{
|
||||||
|
Message: ð.ValidatorRegistrationV1{
|
||||||
|
FeeRecipient: make([]byte, 20),
|
||||||
|
GasLimit: 0,
|
||||||
|
Timestamp: 0,
|
||||||
|
Pubkey: make([]byte, 48),
|
||||||
|
},
|
||||||
|
Signature: make([]byte, 96),
|
||||||
|
}
|
||||||
|
je, err := json.Marshal(&SignedValidatorRegistration{SignedValidatorRegistrationV1: svr})
|
||||||
|
require.NoError(t, err)
|
||||||
|
// decode with a struct w/ plain strings so we can check the string encoding of the hex fields
|
||||||
|
un := struct {
|
||||||
|
Message struct {
|
||||||
|
FeeRecipient string `json:"fee_recipient"`
|
||||||
|
Pubkey string `json:"pubkey"`
|
||||||
|
} `json:"message"`
|
||||||
|
Signature string `json:"signature"`
|
||||||
|
}{}
|
||||||
|
require.NoError(t, json.Unmarshal(je, &un))
|
||||||
|
require.Equal(t, "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", un.Signature)
|
||||||
|
require.Equal(t, "0x0000000000000000000000000000000000000000", un.Message.FeeRecipient)
|
||||||
|
require.Equal(t, "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", un.Message.Pubkey)
|
||||||
|
}
|
||||||
|
|
||||||
|
var testExampleHeaderResponse = `{
|
||||||
|
"version": "bellatrix",
|
||||||
|
"data": {
|
||||||
|
"message": {
|
||||||
|
"header": {
|
||||||
|
"parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
|
||||||
|
"state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"block_number": "1",
|
||||||
|
"gas_limit": "1",
|
||||||
|
"gas_used": "1",
|
||||||
|
"timestamp": "1",
|
||||||
|
"extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"base_fee_per_gas": "452312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
"block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"
|
||||||
|
},
|
||||||
|
"value": "652312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
"pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
|
||||||
|
},
|
||||||
|
"signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
func TestExecutionHeaderResponseUnmarshal(t *testing.T) {
|
||||||
|
hr := &ExecHeaderResponse{}
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponse), hr))
|
||||||
|
cases := []struct {
|
||||||
|
expected string
|
||||||
|
actual string
|
||||||
|
name string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
expected: "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505",
|
||||||
|
actual: hexutil.Encode(hr.Data.Signature),
|
||||||
|
name: "Signature",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Pubkey),
|
||||||
|
name: "ExecHeaderResponse.Pubkey",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "652312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
actual: hr.Data.Message.Value.String(),
|
||||||
|
name: "ExecHeaderResponse.Value",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.ParentHash),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.ParentHash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xabcf8e0d4e9587369b2301d0790347320302cc09",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.FeeRecipient),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.FeeRecipient",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.StateRoot),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.StateRoot",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.ReceiptsRoot),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.ReceiptsRoot",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.LogsBloom),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.LogsBloom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.PrevRandao),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.PrevRandao",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", hr.Data.Message.Header.BlockNumber),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.BlockNumber",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", hr.Data.Message.Header.GasLimit),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.GasLimit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", hr.Data.Message.Header.GasUsed),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.GasUsed",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", hr.Data.Message.Header.Timestamp),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.Timestamp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.ExtraData),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.ExtraData",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "452312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
actual: fmt.Sprintf("%d", hr.Data.Message.Header.BaseFeePerGas),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.BaseFeePerGas",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.BlockHash),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.BlockHash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(hr.Data.Message.Header.TransactionsRoot),
|
||||||
|
name: "ExecHeaderResponse.ExecutionPayloadHeader.TransactionsRoot",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, c := range cases {
|
||||||
|
require.Equal(t, c.expected, c.actual, fmt.Sprintf("unexpected value for field %s", c.name))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExecutionHeaderResponseToProto(t *testing.T) {
|
||||||
|
bfpg := stringToUint256("452312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
v := stringToUint256("652312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
hr := &ExecHeaderResponse{}
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(testExampleHeaderResponse), hr))
|
||||||
|
p, err := hr.ToProto()
|
||||||
|
require.NoError(t, err)
|
||||||
|
signature, err := hexutil.Decode("0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505")
|
||||||
|
require.NoError(t, err)
|
||||||
|
pubkey, err := hexutil.Decode("0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a")
|
||||||
|
require.NoError(t, err)
|
||||||
|
parentHash, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
feeRecipient, err := hexutil.Decode("0xabcf8e0d4e9587369b2301d0790347320302cc09")
|
||||||
|
require.NoError(t, err)
|
||||||
|
stateRoot, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
receiptsRoot, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
logsBloom, err := hexutil.Decode("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
||||||
|
require.NoError(t, err)
|
||||||
|
prevRandao, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
extraData, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
blockHash, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
txRoot, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expected := ð.SignedBuilderBid{
|
||||||
|
Message: ð.BuilderBid{
|
||||||
|
Header: ð.ExecutionPayloadHeader{
|
||||||
|
ParentHash: parentHash,
|
||||||
|
FeeRecipient: feeRecipient,
|
||||||
|
StateRoot: stateRoot,
|
||||||
|
ReceiptsRoot: receiptsRoot,
|
||||||
|
LogsBloom: logsBloom,
|
||||||
|
PrevRandao: prevRandao,
|
||||||
|
BlockNumber: 1,
|
||||||
|
GasLimit: 1,
|
||||||
|
GasUsed: 1,
|
||||||
|
Timestamp: 1,
|
||||||
|
ExtraData: extraData,
|
||||||
|
BaseFeePerGas: bfpg.SSZBytes(),
|
||||||
|
BlockHash: blockHash,
|
||||||
|
TransactionsRoot: txRoot,
|
||||||
|
},
|
||||||
|
Value: v.SSZBytes(),
|
||||||
|
Pubkey: pubkey,
|
||||||
|
},
|
||||||
|
Signature: signature,
|
||||||
|
}
|
||||||
|
require.DeepEqual(t, expected, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
var testExampleExecutionPayload = `{
|
||||||
|
"version": "bellatrix",
|
||||||
|
"data": {
|
||||||
|
"parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
|
||||||
|
"state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"block_number": "1",
|
||||||
|
"gas_limit": "1",
|
||||||
|
"gas_used": "1",
|
||||||
|
"timestamp": "1",
|
||||||
|
"extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"base_fee_per_gas": "452312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
"block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
"transactions": [
|
||||||
|
"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
func TestExecutionPayloadResponseUnmarshal(t *testing.T) {
|
||||||
|
epr := &ExecPayloadResponse{}
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayload), epr))
|
||||||
|
cases := []struct {
|
||||||
|
expected string
|
||||||
|
actual string
|
||||||
|
name string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.ParentHash),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.ParentHash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xabcf8e0d4e9587369b2301d0790347320302cc09",
|
||||||
|
actual: hexutil.Encode(epr.Data.FeeRecipient),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.FeeRecipient",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.StateRoot),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.StateRoot",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.ReceiptsRoot),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.ReceiptsRoot",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
actual: hexutil.Encode(epr.Data.LogsBloom),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.LogsBloom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.PrevRandao),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.PrevRandao",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", epr.Data.BlockNumber),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.BlockNumber",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", epr.Data.GasLimit),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.GasLimit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", epr.Data.GasUsed),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.GasUsed",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "1",
|
||||||
|
actual: fmt.Sprintf("%d", epr.Data.Timestamp),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.Timestamp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.ExtraData),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.ExtraData",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "452312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
actual: fmt.Sprintf("%d", epr.Data.BaseFeePerGas),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.BaseFeePerGas",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
expected: "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
|
||||||
|
actual: hexutil.Encode(epr.Data.BlockHash),
|
||||||
|
name: "ExecPayloadResponse.ExecutionPayload.BlockHash",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, c := range cases {
|
||||||
|
require.Equal(t, c.expected, c.actual, fmt.Sprintf("unexpected value for field %s", c.name))
|
||||||
|
}
|
||||||
|
require.Equal(t, 1, len(epr.Data.Transactions))
|
||||||
|
txHash := "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86"
|
||||||
|
require.Equal(t, txHash, hexutil.Encode(epr.Data.Transactions[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExecutionPayloadResponseToProto(t *testing.T) {
|
||||||
|
hr := &ExecPayloadResponse{}
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(testExampleExecutionPayload), hr))
|
||||||
|
p, err := hr.ToProto()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
parentHash, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
feeRecipient, err := hexutil.Decode("0xabcf8e0d4e9587369b2301d0790347320302cc09")
|
||||||
|
require.NoError(t, err)
|
||||||
|
stateRoot, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
receiptsRoot, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
logsBloom, err := hexutil.Decode("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
||||||
|
require.NoError(t, err)
|
||||||
|
prevRandao, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
extraData, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
blockHash, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
tx, err := hexutil.Decode("0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86")
|
||||||
|
require.NoError(t, err)
|
||||||
|
txList := [][]byte{tx}
|
||||||
|
|
||||||
|
bfpg := stringToUint256("452312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
expected := &v1.ExecutionPayload{
|
||||||
|
ParentHash: parentHash,
|
||||||
|
FeeRecipient: feeRecipient,
|
||||||
|
StateRoot: stateRoot,
|
||||||
|
ReceiptsRoot: receiptsRoot,
|
||||||
|
LogsBloom: logsBloom,
|
||||||
|
PrevRandao: prevRandao,
|
||||||
|
BlockNumber: 1,
|
||||||
|
GasLimit: 1,
|
||||||
|
GasUsed: 1,
|
||||||
|
Timestamp: 1,
|
||||||
|
ExtraData: extraData,
|
||||||
|
BaseFeePerGas: bfpg.SSZBytes(),
|
||||||
|
BlockHash: blockHash,
|
||||||
|
Transactions: txList,
|
||||||
|
}
|
||||||
|
require.DeepEqual(t, expected, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbEth1Data(t *testing.T) *eth.Eth1Data {
|
||||||
|
return ð.Eth1Data{
|
||||||
|
DepositRoot: make([]byte, 32),
|
||||||
|
DepositCount: 23,
|
||||||
|
BlockHash: make([]byte, 32),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEth1DataMarshal(t *testing.T) {
|
||||||
|
ed := &Eth1Data{
|
||||||
|
Eth1Data: pbEth1Data(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(ed)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"deposit_root":"0x0000000000000000000000000000000000000000000000000000000000000000","deposit_count":"23","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbSyncAggregate() *eth.SyncAggregate {
|
||||||
|
return ð.SyncAggregate{
|
||||||
|
SyncCommitteeSignature: make([]byte, 48),
|
||||||
|
SyncCommitteeBits: bitfield.Bitvector512{0x01},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncAggregate_MarshalJSON(t *testing.T) {
|
||||||
|
sa := &SyncAggregate{pbSyncAggregate()}
|
||||||
|
b, err := json.Marshal(sa)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"sync_committee_bits":"0x01","sync_committee_signature":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbDeposit(t *testing.T) *eth.Deposit {
|
||||||
|
return ð.Deposit{
|
||||||
|
Proof: [][]byte{ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")},
|
||||||
|
Data: ð.Deposit_Data{
|
||||||
|
PublicKey: ezDecode(t, "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"),
|
||||||
|
WithdrawalCredentials: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Amount: 1,
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeposit_MarshalJSON(t *testing.T) {
|
||||||
|
d := &Deposit{
|
||||||
|
Deposit: pbDeposit(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(d)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"proof":["0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"],"data":{"pubkey":"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a","withdrawal_credentials":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","amount":"1","signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"}}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbSignedVoluntaryExit(t *testing.T) *eth.SignedVoluntaryExit {
|
||||||
|
return ð.SignedVoluntaryExit{
|
||||||
|
Exit: ð.VoluntaryExit{
|
||||||
|
Epoch: 1,
|
||||||
|
ValidatorIndex: 1,
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestVoluntaryExit(t *testing.T) {
|
||||||
|
ve := &SignedVoluntaryExit{
|
||||||
|
SignedVoluntaryExit: pbSignedVoluntaryExit(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(ve)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"message":{"epoch":"1","validator_index":"1"},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbAttestation(t *testing.T) *eth.Attestation {
|
||||||
|
return ð.Attestation{
|
||||||
|
AggregationBits: bitfield.Bitlist{0x01},
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAttestationMarshal(t *testing.T) {
|
||||||
|
a := &Attestation{
|
||||||
|
Attestation: pbAttestation(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(a)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"aggregation_bits":"0x01","data":{"slot":"1","index":"1","beacon_block_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","source":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"},"target":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbAttesterSlashing(t *testing.T) *eth.AttesterSlashing {
|
||||||
|
return ð.AttesterSlashing{
|
||||||
|
Attestation_1: ð.IndexedAttestation{
|
||||||
|
AttestingIndices: []uint64{1},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Attestation_2: ð.IndexedAttestation{
|
||||||
|
AttestingIndices: []uint64{1},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
Data: ð.AttestationData{
|
||||||
|
Slot: 1,
|
||||||
|
CommitteeIndex: 1,
|
||||||
|
BeaconBlockRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Source: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Target: ð.Checkpoint{
|
||||||
|
Epoch: 1,
|
||||||
|
Root: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAttesterSlashing_MarshalJSON(t *testing.T) {
|
||||||
|
as := &AttesterSlashing{
|
||||||
|
AttesterSlashing: pbAttesterSlashing(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(as)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"attestation_1":{"attesting_indices":["1"],"data":{"slot":"1","index":"1","beacon_block_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","source":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"},"target":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"},"attestation_2":{"attesting_indices":["1"],"data":{"slot":"1","index":"1","beacon_block_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","source":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"},"target":{"epoch":"1","root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"}}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbProposerSlashing(t *testing.T) *eth.ProposerSlashing {
|
||||||
|
return ð.ProposerSlashing{
|
||||||
|
Header_1: ð.SignedBeaconBlockHeader{
|
||||||
|
Header: ð.BeaconBlockHeader{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BodyRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
Header_2: ð.SignedBeaconBlockHeader{
|
||||||
|
Header: ð.BeaconBlockHeader{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BodyRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
},
|
||||||
|
Signature: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProposerSlashings(t *testing.T) {
|
||||||
|
ps := &ProposerSlashing{ProposerSlashing: pbProposerSlashing(t)}
|
||||||
|
b, err := json.Marshal(ps)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"signed_header_1":{"message":{"slot":"1","proposer_index":"1","parent_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","state_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","body_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"},"signed_header_2":{"message":{"slot":"1","proposer_index":"1","parent_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","state_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","body_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"},"signature":"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"}}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbExecutionPayloadHeader(t *testing.T) *eth.ExecutionPayloadHeader {
|
||||||
|
bfpg := stringToUint256("452312848583266388373324160190187140051835877600158453279131187530910662656")
|
||||||
|
return ð.ExecutionPayloadHeader{
|
||||||
|
ParentHash: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
FeeRecipient: ezDecode(t, "0xabcf8e0d4e9587369b2301d0790347320302cc09"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
ReceiptsRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
LogsBloom: ezDecode(t, "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
|
||||||
|
PrevRandao: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BlockNumber: 1,
|
||||||
|
GasLimit: 1,
|
||||||
|
GasUsed: 1,
|
||||||
|
Timestamp: 1,
|
||||||
|
ExtraData: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
BaseFeePerGas: bfpg.SSZBytes(),
|
||||||
|
BlockHash: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
TransactionsRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExecutionPayloadHeader_MarshalJSON(t *testing.T) {
|
||||||
|
h := &ExecutionPayloadHeader{
|
||||||
|
ExecutionPayloadHeader: pbExecutionPayloadHeader(t),
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(h)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"parent_hash":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","fee_recipient":"0xabcf8e0d4e9587369b2301d0790347320302cc09","state_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","receipts_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","prev_randao":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","block_number":"1","gas_limit":"1","gas_used":"1","timestamp":"1","extra_data":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","base_fee_per_gas":"452312848583266388373324160190187140051835877600158453279131187530910662656","block_hash":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2","transactions_root":"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}`
|
||||||
|
require.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
var testBuilderBid = `{
|
||||||
|
"version":"bellatrix",
|
||||||
|
"data":{
|
||||||
|
"message":{
|
||||||
|
"header":{
|
||||||
|
"parent_hash":"0xa0513a503d5bd6e89a144c3268e5b7e9da9dbf63df125a360e3950a7d0d67131",
|
||||||
|
"fee_recipient":"0xdfb434922631787e43725c6b926e989875125751",
|
||||||
|
"state_root":"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",
|
||||||
|
"receipts_root":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
||||||
|
"logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
"prev_randao":"0xc2fa210081542a87f334b7b14a2da3275e4b281dd77b007bcfcb10e34c42052e",
|
||||||
|
"block_number":"1",
|
||||||
|
"gas_limit":"10000000",
|
||||||
|
"gas_used":"0",
|
||||||
|
"timestamp":"4660",
|
||||||
|
"extra_data":"0x",
|
||||||
|
"base_fee_per_gas":"7",
|
||||||
|
"block_hash":"0x10746fa06c248e7eacd4ff8ad8b48a826c227387ee31a6aa5eb4d83ddad34f07",
|
||||||
|
"transactions_root":"0x7ffe241ea60187fdb0187bfa22de35d1f9bed7ab061d9401fd47e34a54fbede1"
|
||||||
|
},
|
||||||
|
"value":"452312848583266388373324160190187140051835877600158453279131187530910662656",
|
||||||
|
"pubkey":"0x8645866c95cbc2e08bc77ccad473540eddf4a1f51a2a8edc8d7a673824218f7f68fe565f1ab38dadd5c855b45bbcec95"
|
||||||
|
},
|
||||||
|
"signature":"0x9183ebc1edf9c3ab2bbd7abdc3b59c6b249d6647b5289a97eea36d9d61c47f12e283f64d928b1e7f5b8a5182b714fa921954678ea28ca574f5f232b2f78cf8900915a2993b396e3471e0655291fec143a300d41408f66478c8208e0f9be851dc"
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
func TestBuilderBidUnmarshalUint256(t *testing.T) {
|
||||||
|
base10 := "452312848583266388373324160190187140051835877600158453279131187530910662656"
|
||||||
|
var expectedValue big.Int
|
||||||
|
require.NoError(t, expectedValue.UnmarshalText([]byte(base10)))
|
||||||
|
r := &ExecHeaderResponse{}
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(testBuilderBid), r))
|
||||||
|
//require.Equal(t, expectedValue, r.Data.Message.Value)
|
||||||
|
marshaled := r.Data.Message.Value.String()
|
||||||
|
require.Equal(t, base10, marshaled)
|
||||||
|
require.Equal(t, 0, expectedValue.Cmp(r.Data.Message.Value.Int))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMathBigUnmarshal(t *testing.T) {
|
||||||
|
base10 := "452312848583266388373324160190187140051835877600158453279131187530910662656"
|
||||||
|
var expectedValue big.Int
|
||||||
|
require.NoError(t, expectedValue.UnmarshalText([]byte(base10)))
|
||||||
|
marshaled, err := expectedValue.MarshalText()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base10, string(marshaled))
|
||||||
|
|
||||||
|
var u256 Uint256
|
||||||
|
require.NoError(t, u256.UnmarshalText([]byte("452312848583266388373324160190187140051835877600158453279131187530910662656")))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUint256Unmarshal(t *testing.T) {
|
||||||
|
base10 := "452312848583266388373324160190187140051835877600158453279131187530910662656"
|
||||||
|
bi := new(big.Int)
|
||||||
|
bi, ok := bi.SetString(base10, 10)
|
||||||
|
require.Equal(t, true, ok)
|
||||||
|
s := struct {
|
||||||
|
BigNumber Uint256 `json:"big_number"`
|
||||||
|
}{
|
||||||
|
BigNumber: Uint256{Int: bi},
|
||||||
|
}
|
||||||
|
m, err := json.Marshal(s)
|
||||||
|
require.NoError(t, err)
|
||||||
|
expected := `{"big_number":"452312848583266388373324160190187140051835877600158453279131187530910662656"}`
|
||||||
|
require.Equal(t, expected, string(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMarshalBlindedBeaconBlockBodyBellatrix(t *testing.T) {
|
||||||
|
expected, err := os.ReadFile("testdata/blinded-block.json")
|
||||||
|
require.NoError(t, err)
|
||||||
|
b := &BlindedBeaconBlockBellatrix{BlindedBeaconBlockBellatrix: ð.BlindedBeaconBlockBellatrix{
|
||||||
|
Slot: 1,
|
||||||
|
ProposerIndex: 1,
|
||||||
|
ParentRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
StateRoot: ezDecode(t, "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"),
|
||||||
|
Body: ð.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
RandaoReveal: ezDecode(t, "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"),
|
||||||
|
Eth1Data: pbEth1Data(t),
|
||||||
|
Graffiti: ezDecode(t, "0xdeadbeefc0ffee"),
|
||||||
|
ProposerSlashings: []*eth.ProposerSlashing{pbProposerSlashing(t)},
|
||||||
|
AttesterSlashings: []*eth.AttesterSlashing{pbAttesterSlashing(t)},
|
||||||
|
Attestations: []*eth.Attestation{pbAttestation(t)},
|
||||||
|
Deposits: []*eth.Deposit{pbDeposit(t)},
|
||||||
|
VoluntaryExits: []*eth.SignedVoluntaryExit{pbSignedVoluntaryExit(t)},
|
||||||
|
SyncAggregate: pbSyncAggregate(),
|
||||||
|
ExecutionPayloadHeader: pbExecutionPayloadHeader(t),
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
m, err := json.Marshal(b)
|
||||||
|
require.NoError(t, err)
|
||||||
|
// string error output is easier to deal with
|
||||||
|
// -1 end slice index on expected is to get rid of trailing newline
|
||||||
|
// if you update this fixture and this test breaks, you probably removed the trailing newline
|
||||||
|
require.Equal(t, string(expected[0:len(expected)-1]), string(m))
|
||||||
|
}
|
||||||
31
beacon-chain/builder/BUILD.bazel
Normal file
31
beacon-chain/builder/BUILD.bazel
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
load("@prysm//tools/go:def.bzl", "go_library")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"options.go",
|
||||||
|
"service.go",
|
||||||
|
"verify.go",
|
||||||
|
],
|
||||||
|
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/builder",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [
|
||||||
|
"//api/client/builder:go_default_library",
|
||||||
|
"//beacon-chain/core/signing:go_default_library",
|
||||||
|
"//cmd/beacon-chain/flags:go_default_library",
|
||||||
|
"//config/fieldparams:go_default_library",
|
||||||
|
"//config/params:go_default_library",
|
||||||
|
"//consensus-types/primitives:go_default_library",
|
||||||
|
"//crypto/bls:go_default_library",
|
||||||
|
"//encoding/bytesutil:go_default_library",
|
||||||
|
"//network:go_default_library",
|
||||||
|
"//network/authorization:go_default_library",
|
||||||
|
"//proto/engine/v1:go_default_library",
|
||||||
|
"//proto/prysm/v1alpha1:go_default_library",
|
||||||
|
"//time/slots:go_default_library",
|
||||||
|
"@com_github_pkg_errors//:go_default_library",
|
||||||
|
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",
|
||||||
|
"@com_github_sirupsen_logrus//:go_default_library",
|
||||||
|
"@com_github_urfave_cli_v2//:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
58
beacon-chain/builder/options.go
Normal file
58
beacon-chain/builder/options.go
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/prysmaticlabs/prysm/cmd/beacon-chain/flags"
|
||||||
|
"github.com/prysmaticlabs/prysm/network"
|
||||||
|
"github.com/prysmaticlabs/prysm/network/authorization"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Option func(s *Service) error
|
||||||
|
|
||||||
|
// FlagOptions for builder service flag configurations.
|
||||||
|
func FlagOptions(c *cli.Context) ([]Option, error) {
|
||||||
|
endpoints := parseBuilderEndpoints(c)
|
||||||
|
opts := []Option{
|
||||||
|
WithBuilderEndpoints(endpoints),
|
||||||
|
}
|
||||||
|
return opts, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithBuilderEndpoints(endpoints []string) Option {
|
||||||
|
return func(s *Service) error {
|
||||||
|
stringEndpoints := dedupEndpoints(endpoints)
|
||||||
|
endpoints := make([]network.Endpoint, len(stringEndpoints))
|
||||||
|
for i, e := range stringEndpoints {
|
||||||
|
endpoints[i] = covertEndPoint(e)
|
||||||
|
}
|
||||||
|
s.cfg.builderEndpoint = endpoints[0] // Use the first one as the default.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func covertEndPoint(ep string) network.Endpoint {
|
||||||
|
return network.Endpoint{
|
||||||
|
Url: ep,
|
||||||
|
Auth: network.AuthorizationData{ // Not sure about authorization for now.
|
||||||
|
Method: authorization.None,
|
||||||
|
Value: "",
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseBuilderEndpoints(c *cli.Context) []string {
|
||||||
|
// Goal is to support multiple end points later.
|
||||||
|
return []string{c.String(flags.MevBuilderFlag.Name)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func dedupEndpoints(endpoints []string) []string {
|
||||||
|
selectionMap := make(map[string]bool)
|
||||||
|
newEndpoints := make([]string, 0, len(endpoints))
|
||||||
|
for _, point := range endpoints {
|
||||||
|
if selectionMap[point] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
newEndpoints = append(newEndpoints, point)
|
||||||
|
selectionMap[point] = true
|
||||||
|
}
|
||||||
|
return newEndpoints
|
||||||
|
}
|
||||||
187
beacon-chain/builder/service.go
Normal file
187
beacon-chain/builder/service.go
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/prysmaticlabs/prysm/api/client/builder"
|
||||||
|
fieldparams "github.com/prysmaticlabs/prysm/config/fieldparams"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
|
"github.com/prysmaticlabs/prysm/network"
|
||||||
|
v1 "github.com/prysmaticlabs/prysm/proto/engine/v1"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BlockBuilder interface {
|
||||||
|
SubmitBlindedBlock(ctx context.Context, block *ethpb.SignedBlindedBeaconBlockBellatrix) (*v1.ExecutionPayload, error)
|
||||||
|
GetHeader(ctx context.Context, slot types.Slot, parentHash [32]byte, pubKey [48]byte) (*ethpb.SignedBuilderBid, error)
|
||||||
|
Status() error
|
||||||
|
RegisterValidator(ctx context.Context, reg *ethpb.SignedValidatorRegistrationV1) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// config defines a config struct for dependencies into the service.
|
||||||
|
type config struct {
|
||||||
|
builderEndpoint network.Endpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
type Service struct {
|
||||||
|
cfg *config
|
||||||
|
c *builder.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewService(ctx context.Context, opts ...Option) (*Service, error) {
|
||||||
|
s := &Service{
|
||||||
|
cfg: &config{},
|
||||||
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
if err := opt(s); err != nil {
|
||||||
|
return nil, err
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//c, err := builder.NewClient("http://localhost:28545")
|
||||||
|
//if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//sk, err := bls.RandKey()
|
||||||
|
//if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
|
||||||
|
//reg := ðpb.ValidatorRegistrationV1{
|
||||||
|
// FeeRecipient: params.BeaconConfig().DefaultFeeRecipient.Bytes(),
|
||||||
|
// GasLimit: 100000000,
|
||||||
|
// Timestamp: uint64(time.Now().Unix()),
|
||||||
|
// Pubkey: sk.PublicKey().Marshal(),
|
||||||
|
//}
|
||||||
|
//sig := sk.Sign(reg.Pubkey)
|
||||||
|
|
||||||
|
//if err := c.RegisterValidator(ctx, ðpb.SignedValidatorRegistrationV1{
|
||||||
|
// Message: reg,
|
||||||
|
// Signature: sig.Marshal(),
|
||||||
|
//}); err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
|
||||||
|
//h := "a0513a503d5bd6e89a144c3268e5b7e9da9dbf63df125a360e3950a7d0d67131"
|
||||||
|
//data, err := hex.DecodeString(h)
|
||||||
|
//if err != nil {
|
||||||
|
// panic(err)
|
||||||
|
//}
|
||||||
|
//b, err := c.GetHeader(ctx, 1, bytesutil.ToBytes32(data), [48]byte{})
|
||||||
|
//if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//msg := b.Message
|
||||||
|
//header := msg.Header
|
||||||
|
//
|
||||||
|
//genesis, keys := util.DeterministicGenesisState(t, 64)
|
||||||
|
//b, err := util.GenerateFullBlock(genesis, keys, util.DefaultBlockGenConfig(), 1)
|
||||||
|
//if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//sb := HydrateSignedBlindedBeaconBlockBellatrix(ðpb.SignedBlindedBeaconBlockBellatrix{
|
||||||
|
// Block: ðpb.BlindedBeaconBlockBellatrix{
|
||||||
|
// Body: ðpb.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
// Attestations: []*ethpb.Attestation{
|
||||||
|
// {Signature: []byte{1, 2, 3, 4}},
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
//})
|
||||||
|
//
|
||||||
|
//sb.Block.Body.ExecutionPayloadHeader = header
|
||||||
|
//sb.Block.Body.SyncAggregate.SyncCommitteeBits = bitfield.NewBitvector512()
|
||||||
|
//if _, err := c.SubmitBlindedBlock(ctx, sb); err != nil {
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//log.Fatal("End of test")
|
||||||
|
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) Start() {}
|
||||||
|
|
||||||
|
func (s *Service) Stop() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) SubmitBlindedBlock(context.Context, *ethpb.SignedBlindedBeaconBlockBellatrix) (*v1.ExecutionPayload, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) GetHeader(context.Context, types.Slot, [32]byte, [48]byte) (*ethpb.SignedBuilderBid, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) Status() error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) RegisterValidator(context.Context, *ethpb.SignedValidatorRegistrationV1) error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func HydrateSignedBlindedBeaconBlockBellatrix(b *ethpb.SignedBlindedBeaconBlockBellatrix) *ethpb.SignedBlindedBeaconBlockBellatrix {
|
||||||
|
if b.Signature == nil {
|
||||||
|
b.Signature = make([]byte, fieldparams.BLSSignatureLength)
|
||||||
|
}
|
||||||
|
b.Block = HydrateBlindedBeaconBlockBellatrix(b.Block)
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// HydrateBlindedBeaconBlockBellatrix hydrates a blinded beacon block with correct field length sizes
|
||||||
|
// to comply with fssz marshalling and unmarshalling rules.
|
||||||
|
func HydrateBlindedBeaconBlockBellatrix(b *ethpb.BlindedBeaconBlockBellatrix) *ethpb.BlindedBeaconBlockBellatrix {
|
||||||
|
if b == nil {
|
||||||
|
b = ðpb.BlindedBeaconBlockBellatrix{}
|
||||||
|
}
|
||||||
|
if b.ParentRoot == nil {
|
||||||
|
b.ParentRoot = make([]byte, fieldparams.RootLength)
|
||||||
|
}
|
||||||
|
if b.StateRoot == nil {
|
||||||
|
b.StateRoot = make([]byte, fieldparams.RootLength)
|
||||||
|
}
|
||||||
|
b.Body = HydrateBlindedBeaconBlockBodyBellatrix(b.Body)
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// HydrateBlindedBeaconBlockBodyBellatrix hydrates a blinded beacon block body with correct field length sizes
|
||||||
|
// to comply with fssz marshalling and unmarshalling rules.
|
||||||
|
func HydrateBlindedBeaconBlockBodyBellatrix(b *ethpb.BlindedBeaconBlockBodyBellatrix) *ethpb.BlindedBeaconBlockBodyBellatrix {
|
||||||
|
if b == nil {
|
||||||
|
b = ðpb.BlindedBeaconBlockBodyBellatrix{}
|
||||||
|
}
|
||||||
|
if b.RandaoReveal == nil {
|
||||||
|
b.RandaoReveal = make([]byte, fieldparams.BLSSignatureLength)
|
||||||
|
}
|
||||||
|
if b.Graffiti == nil {
|
||||||
|
b.Graffiti = make([]byte, 32)
|
||||||
|
}
|
||||||
|
if b.Eth1Data == nil {
|
||||||
|
b.Eth1Data = ðpb.Eth1Data{
|
||||||
|
DepositRoot: make([]byte, fieldparams.RootLength),
|
||||||
|
BlockHash: make([]byte, 32),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if b.SyncAggregate == nil {
|
||||||
|
b.SyncAggregate = ðpb.SyncAggregate{
|
||||||
|
SyncCommitteeBits: make([]byte, 64),
|
||||||
|
SyncCommitteeSignature: make([]byte, fieldparams.BLSSignatureLength),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if b.ExecutionPayloadHeader == nil {
|
||||||
|
b.ExecutionPayloadHeader = ðpb.ExecutionPayloadHeader{
|
||||||
|
ParentHash: make([]byte, 32),
|
||||||
|
FeeRecipient: make([]byte, 20),
|
||||||
|
StateRoot: make([]byte, fieldparams.RootLength),
|
||||||
|
ReceiptsRoot: make([]byte, fieldparams.RootLength),
|
||||||
|
LogsBloom: make([]byte, 256),
|
||||||
|
PrevRandao: make([]byte, 32),
|
||||||
|
BaseFeePerGas: make([]byte, 32),
|
||||||
|
BlockHash: make([]byte, 32),
|
||||||
|
TransactionsRoot: make([]byte, fieldparams.RootLength),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
65
beacon-chain/builder/service_test.go
Normal file
65
beacon-chain/builder/service_test.go
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/hex"
|
||||||
|
"math/big"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/prysmaticlabs/prysm/api/client/builder"
|
||||||
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
"github.com/prysmaticlabs/prysm/testing/require"
|
||||||
|
"github.com/prysmaticlabs/prysm/testing/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMergeMockRoundtrip(t *testing.T) {
|
||||||
|
c, err := builder.NewClient("http://localhost:28545")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
h := "a0513a503d5bd6e89a144c3268e5b7e9da9dbf63df125a360e3950a7d0d67131"
|
||||||
|
data, err := hex.DecodeString(h)
|
||||||
|
require.NoError(t, err)
|
||||||
|
ctx := context.Background()
|
||||||
|
header, err := c.GetHeader(ctx, 1, bytesutil.ToBytes32(data), [48]byte{})
|
||||||
|
require.NoError(t, err)
|
||||||
|
t.Log(header.Message.Value)
|
||||||
|
|
||||||
|
st, keys := util.DeterministicGenesisState(t, 1024)
|
||||||
|
b, err := util.GenerateFullBlock(st, keys, util.DefaultBlockGenConfig(), 2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
bb := big.NewInt(1770307273)
|
||||||
|
header.Message.Header.BaseFeePerGas = bb.Bytes()
|
||||||
|
|
||||||
|
t.Log(len(b.Block.Body.Attestations))
|
||||||
|
t.Log(len(b.Block.Body.Deposits))
|
||||||
|
t.Log(len(b.Block.Body.VoluntaryExits))
|
||||||
|
t.Log(len(b.Block.Body.ProposerSlashings))
|
||||||
|
t.Log(len(b.Block.Body.AttesterSlashings))
|
||||||
|
t.Log(b.Block.Body.AttesterSlashings[0].Attestation_1.AttestingIndices)
|
||||||
|
t.Log(header.Message.Header.BaseFeePerGas)
|
||||||
|
|
||||||
|
sb := HydrateSignedBlindedBeaconBlockBellatrix(ðpb.SignedBlindedBeaconBlockBellatrix{
|
||||||
|
Signature: keys[0].Sign([]byte("hello")).Marshal(),
|
||||||
|
Block: ðpb.BlindedBeaconBlockBellatrix{
|
||||||
|
Slot: b.Block.Slot,
|
||||||
|
ParentRoot: b.Block.ParentRoot,
|
||||||
|
StateRoot: b.Block.StateRoot,
|
||||||
|
ProposerIndex: b.Block.ProposerIndex,
|
||||||
|
Body: ðpb.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
Attestations: b.Block.Body.Attestations,
|
||||||
|
RandaoReveal: b.Block.Body.RandaoReveal,
|
||||||
|
Deposits: b.Block.Body.Deposits,
|
||||||
|
VoluntaryExits: b.Block.Body.VoluntaryExits,
|
||||||
|
ProposerSlashings: b.Block.Body.ProposerSlashings,
|
||||||
|
//AttesterSlashings: b.Block.Body.AttesterSlashings,
|
||||||
|
Graffiti: b.Block.Body.Graffiti,
|
||||||
|
ExecutionPayloadHeader: header.Message.Header,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if _, err := c.SubmitBlindedBlock(ctx, sb); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
29
beacon-chain/builder/verify.go
Normal file
29
beacon-chain/builder/verify.go
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package builder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/signing"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
"github.com/prysmaticlabs/prysm/time/slots"
|
||||||
|
)
|
||||||
|
|
||||||
|
func VerifyRegistrationSignature(
|
||||||
|
slot types.Slot,
|
||||||
|
fork *ethpb.Fork,
|
||||||
|
signed *ethpb.SignedValidatorRegistrationV1,
|
||||||
|
genesisRoot []byte,
|
||||||
|
) error {
|
||||||
|
if signed == nil || signed.Message == nil {
|
||||||
|
return errors.New("nil signed registration")
|
||||||
|
}
|
||||||
|
domain, err := signing.Domain(fork, slots.ToEpoch(slot), [4]byte{} /*TODO: Use registration signing domain */, genesisRoot)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := signing.VerifySigningRoot(signed, signed.Message.Pubkey, signed.Signature, domain); err != nil {
|
||||||
|
return signing.ErrSigFailedToVerify
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ go_library(
|
|||||||
"//api/gateway:go_default_library",
|
"//api/gateway:go_default_library",
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/blockchain:go_default_library",
|
"//beacon-chain/blockchain:go_default_library",
|
||||||
|
"//beacon-chain/builder:go_default_library",
|
||||||
"//beacon-chain/cache:go_default_library",
|
"//beacon-chain/cache:go_default_library",
|
||||||
"//beacon-chain/cache/depositcache:go_default_library",
|
"//beacon-chain/cache/depositcache:go_default_library",
|
||||||
"//beacon-chain/db:go_default_library",
|
"//beacon-chain/db:go_default_library",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import (
|
|||||||
apigateway "github.com/prysmaticlabs/prysm/api/gateway"
|
apigateway "github.com/prysmaticlabs/prysm/api/gateway"
|
||||||
"github.com/prysmaticlabs/prysm/async/event"
|
"github.com/prysmaticlabs/prysm/async/event"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/builder"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/db"
|
"github.com/prysmaticlabs/prysm/beacon-chain/db"
|
||||||
@@ -76,6 +77,7 @@ const debugGrpcMaxMsgSize = 1 << 27
|
|||||||
type serviceFlagOpts struct {
|
type serviceFlagOpts struct {
|
||||||
blockchainFlagOpts []blockchain.Option
|
blockchainFlagOpts []blockchain.Option
|
||||||
powchainFlagOpts []powchain.Option
|
powchainFlagOpts []powchain.Option
|
||||||
|
builderOpts []builder.Option
|
||||||
}
|
}
|
||||||
|
|
||||||
// BeaconNode defines a struct that handles the services running a random beacon chain
|
// BeaconNode defines a struct that handles the services running a random beacon chain
|
||||||
@@ -226,6 +228,11 @@ func New(cliCtx *cli.Context, opts ...Option) (*BeaconNode, error) {
|
|||||||
log.Debugln("Starting Fork Choice")
|
log.Debugln("Starting Fork Choice")
|
||||||
beacon.startForkChoice()
|
beacon.startForkChoice()
|
||||||
|
|
||||||
|
log.Debugln("Registering builder service")
|
||||||
|
if err := beacon.registerBuilderService(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugln("Registering Blockchain Service")
|
log.Debugln("Registering Blockchain Service")
|
||||||
if err := beacon.registerBlockchainService(); err != nil {
|
if err := beacon.registerBlockchainService(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -566,6 +573,14 @@ func (b *BeaconNode) fetchP2P() p2p.P2P {
|
|||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BeaconNode) fetchBuilderService() *builder.Service {
|
||||||
|
var s *builder.Service
|
||||||
|
if err := b.services.FetchService(&s); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func (b *BeaconNode) registerAttestationPool() error {
|
func (b *BeaconNode) registerAttestationPool() error {
|
||||||
s, err := attestations.NewService(b.ctx, &attestations.Config{
|
s, err := attestations.NewService(b.ctx, &attestations.Config{
|
||||||
Pool: b.attestationPool,
|
Pool: b.attestationPool,
|
||||||
@@ -804,6 +819,7 @@ func (b *BeaconNode) registerRPCService() error {
|
|||||||
AttestationReceiver: chainService,
|
AttestationReceiver: chainService,
|
||||||
GenesisTimeFetcher: chainService,
|
GenesisTimeFetcher: chainService,
|
||||||
GenesisFetcher: chainService,
|
GenesisFetcher: chainService,
|
||||||
|
BlockBuilder: b.fetchBuilderService(),
|
||||||
OptimisticModeFetcher: chainService,
|
OptimisticModeFetcher: chainService,
|
||||||
AttestationsPool: b.attestationPool,
|
AttestationsPool: b.attestationPool,
|
||||||
ExitPool: b.exitPool,
|
ExitPool: b.exitPool,
|
||||||
@@ -968,3 +984,12 @@ func (b *BeaconNode) registerValidatorMonitorService() error {
|
|||||||
}
|
}
|
||||||
return b.services.RegisterService(svc)
|
return b.services.RegisterService(svc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BeaconNode) registerBuilderService() error {
|
||||||
|
options := b.serviceFlagOpts.builderOpts
|
||||||
|
svc, err := builder.NewService(b.ctx, options...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return b.services.RegisterService(svc)
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package node
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/builder"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
|
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,3 +24,11 @@ func WithPowchainFlagOptions(opts []powchain.Option) Option {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithBuilderFlagOptions includes functional options for the builder service related to CLI flags.
|
||||||
|
func WithBuilderFlagOptions(opts []builder.Option) Option {
|
||||||
|
return func(bn *BeaconNode) error {
|
||||||
|
bn.serviceFlagOpts.builderOpts = opts
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ go_library(
|
|||||||
visibility = ["//beacon-chain:__subpackages__"],
|
visibility = ["//beacon-chain:__subpackages__"],
|
||||||
deps = [
|
deps = [
|
||||||
"//beacon-chain/blockchain:go_default_library",
|
"//beacon-chain/blockchain:go_default_library",
|
||||||
|
"//beacon-chain/builder:go_default_library",
|
||||||
"//beacon-chain/cache:go_default_library",
|
"//beacon-chain/cache:go_default_library",
|
||||||
"//beacon-chain/cache/depositcache:go_default_library",
|
"//beacon-chain/cache/depositcache:go_default_library",
|
||||||
"//beacon-chain/core/feed/block:go_default_library",
|
"//beacon-chain/core/feed/block:go_default_library",
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/blockchain:go_default_library",
|
"//beacon-chain/blockchain:go_default_library",
|
||||||
|
"//beacon-chain/builder:go_default_library",
|
||||||
"//beacon-chain/cache:go_default_library",
|
"//beacon-chain/cache:go_default_library",
|
||||||
"//beacon-chain/cache/depositcache:go_default_library",
|
"//beacon-chain/cache/depositcache:go_default_library",
|
||||||
"//beacon-chain/core/altair:go_default_library",
|
"//beacon-chain/core/altair:go_default_library",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/prysmaticlabs/prysm/consensus-types/wrapper"
|
"github.com/prysmaticlabs/prysm/consensus-types/wrapper"
|
||||||
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
"github.com/prysmaticlabs/prysm/runtime/version"
|
||||||
"github.com/prysmaticlabs/prysm/time/slots"
|
"github.com/prysmaticlabs/prysm/time/slots"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"go.opencensus.io/trace"
|
"go.opencensus.io/trace"
|
||||||
@@ -57,12 +58,7 @@ func (vs *Server) GetBeaconBlock(ctx context.Context, req *ethpb.BlockRequest) (
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
blk, err := vs.getBellatrixBeaconBlock(ctx, req)
|
return vs.getBellatrixBeaconBlock(ctx, req)
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "Could not fetch Bellatrix beacon block: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return ðpb.GenericBeaconBlock{Block: ðpb.GenericBeaconBlock_Bellatrix{Bellatrix: blk}}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBlock is called by a proposer during its assigned slot to request a block to sign
|
// GetBlock is called by a proposer during its assigned slot to request a block to sign
|
||||||
@@ -133,9 +129,20 @@ func (vs *Server) PrepareBeaconProposer(
|
|||||||
return &emptypb.Empty{}, nil
|
return &emptypb.Empty{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SubmitValidatorRegistration submits validator registration.
|
||||||
|
func (vs *Server) SubmitValidatorRegistration(context.Context, *ethpb.SignedValidatorRegistrationV1) (*emptypb.Empty, error) {
|
||||||
|
return &emptypb.Empty{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (vs *Server) proposeGenericBeaconBlock(ctx context.Context, blk interfaces.SignedBeaconBlock) (*ethpb.ProposeResponse, error) {
|
func (vs *Server) proposeGenericBeaconBlock(ctx context.Context, blk interfaces.SignedBeaconBlock) (*ethpb.ProposeResponse, error) {
|
||||||
ctx, span := trace.StartSpan(ctx, "ProposerServer.proposeGenericBeaconBlock")
|
ctx, span := trace.StartSpan(ctx, "ProposerServer.proposeGenericBeaconBlock")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
|
blk, err := vs.getBuilderBlock(ctx, blk)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
root, err := blk.Block().HashTreeRoot()
|
root, err := blk.Block().HashTreeRoot()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not tree hash block: %v", err)
|
return nil, fmt.Errorf("could not tree hash block: %v", err)
|
||||||
@@ -168,6 +175,75 @@ func (vs *Server) proposeGenericBeaconBlock(ctx context.Context, blk interfaces.
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (vs *Server) getBuilderBlock(ctx context.Context, b interfaces.SignedBeaconBlock) (interfaces.SignedBeaconBlock, error) {
|
||||||
|
if b.Version() != version.BellatrixBlind {
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
if vs.BlockBuilder.Status() != nil {
|
||||||
|
return nil, status.Errorf(codes.FailedPrecondition, "Block builder is not running")
|
||||||
|
}
|
||||||
|
agg, err := b.Block().Body().SyncAggregate()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
h, err := b.Block().Body().ExecutionPayloadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
sb := ðpb.SignedBlindedBeaconBlockBellatrix{
|
||||||
|
Block: ðpb.BlindedBeaconBlockBellatrix{
|
||||||
|
Slot: b.Block().Slot(),
|
||||||
|
ProposerIndex: b.Block().ProposerIndex(),
|
||||||
|
ParentRoot: b.Block().ParentRoot(),
|
||||||
|
StateRoot: b.Block().StateRoot(),
|
||||||
|
Body: ðpb.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
RandaoReveal: b.Block().Body().RandaoReveal(),
|
||||||
|
Eth1Data: b.Block().Body().Eth1Data(),
|
||||||
|
Graffiti: b.Block().Body().Graffiti(),
|
||||||
|
ProposerSlashings: b.Block().Body().ProposerSlashings(),
|
||||||
|
AttesterSlashings: b.Block().Body().AttesterSlashings(),
|
||||||
|
Attestations: b.Block().Body().Attestations(),
|
||||||
|
Deposits: b.Block().Body().Deposits(),
|
||||||
|
VoluntaryExits: b.Block().Body().VoluntaryExits(),
|
||||||
|
SyncAggregate: agg,
|
||||||
|
ExecutionPayloadHeader: h,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
payload, err := vs.BlockBuilder.SubmitBlindedBlock(ctx, sb)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
bb := ðpb.SignedBeaconBlockBellatrix{
|
||||||
|
Block: ðpb.BeaconBlockBellatrix{
|
||||||
|
Slot: sb.Block.Slot,
|
||||||
|
ProposerIndex: sb.Block.ProposerIndex,
|
||||||
|
ParentRoot: sb.Block.ParentRoot,
|
||||||
|
StateRoot: sb.Block.StateRoot,
|
||||||
|
Body: ðpb.BeaconBlockBodyBellatrix{
|
||||||
|
RandaoReveal: sb.Block.Body.RandaoReveal,
|
||||||
|
Eth1Data: sb.Block.Body.Eth1Data,
|
||||||
|
Graffiti: sb.Block.Body.Graffiti,
|
||||||
|
ProposerSlashings: sb.Block.Body.ProposerSlashings,
|
||||||
|
AttesterSlashings: sb.Block.Body.AttesterSlashings,
|
||||||
|
Attestations: sb.Block.Body.Attestations,
|
||||||
|
Deposits: sb.Block.Body.Deposits,
|
||||||
|
VoluntaryExits: sb.Block.Body.VoluntaryExits,
|
||||||
|
SyncAggregate: agg,
|
||||||
|
ExecutionPayload: payload,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Signature: nil,
|
||||||
|
}
|
||||||
|
wb, err := wrapper.WrappedSignedBeaconBlock(bb)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return wb, nil
|
||||||
|
}
|
||||||
|
|
||||||
// computeStateRoot computes the state root after a block has been processed through a state transition and
|
// computeStateRoot computes the state root after a block has been processed through a state transition and
|
||||||
// returns it to the validator client.
|
// returns it to the validator client.
|
||||||
func (vs *Server) computeStateRoot(ctx context.Context, block interfaces.SignedBeaconBlock) ([]byte, error) {
|
func (vs *Server) computeStateRoot(ctx context.Context, block interfaces.SignedBeaconBlock) ([]byte, error) {
|
||||||
|
|||||||
@@ -4,18 +4,59 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/transition/interop"
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/transition/interop"
|
||||||
"github.com/prysmaticlabs/prysm/config/params"
|
"github.com/prysmaticlabs/prysm/config/params"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
"github.com/prysmaticlabs/prysm/consensus-types/wrapper"
|
"github.com/prysmaticlabs/prysm/consensus-types/wrapper"
|
||||||
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||||||
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (vs *Server) getBellatrixBeaconBlock(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.BeaconBlockBellatrix, error) {
|
func (vs *Server) getBellatrixBeaconBlock(ctx context.Context, req *ethpb.BlockRequest) (*ethpb.GenericBeaconBlock, error) {
|
||||||
altairBlk, err := vs.buildAltairBeaconBlock(ctx, req)
|
altairBlk, err := vs.buildAltairBeaconBlock(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h, exists, err := vs.getBuilderHeader(ctx, req.Slot, altairBlk.ProposerIndex)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if exists {
|
||||||
|
blk := ðpb.BlindedBeaconBlockBellatrix{
|
||||||
|
Slot: altairBlk.Slot,
|
||||||
|
ProposerIndex: altairBlk.ProposerIndex,
|
||||||
|
ParentRoot: altairBlk.ParentRoot,
|
||||||
|
StateRoot: params.BeaconConfig().ZeroHash[:],
|
||||||
|
Body: ðpb.BlindedBeaconBlockBodyBellatrix{
|
||||||
|
RandaoReveal: altairBlk.Body.RandaoReveal,
|
||||||
|
Eth1Data: altairBlk.Body.Eth1Data,
|
||||||
|
Graffiti: altairBlk.Body.Graffiti,
|
||||||
|
ProposerSlashings: altairBlk.Body.ProposerSlashings,
|
||||||
|
AttesterSlashings: altairBlk.Body.AttesterSlashings,
|
||||||
|
Attestations: altairBlk.Body.Attestations,
|
||||||
|
Deposits: altairBlk.Body.Deposits,
|
||||||
|
VoluntaryExits: altairBlk.Body.VoluntaryExits,
|
||||||
|
SyncAggregate: altairBlk.Body.SyncAggregate,
|
||||||
|
ExecutionPayloadHeader: h,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
wsb, err := wrapper.WrappedSignedBeaconBlock(
|
||||||
|
ðpb.SignedBlindedBeaconBlockBellatrix{Block: blk, Signature: make([]byte, 96)},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
stateRoot, err := vs.computeStateRoot(ctx, wsb)
|
||||||
|
if err != nil {
|
||||||
|
interop.WriteBlockToDisk(wsb, true /*failed*/)
|
||||||
|
return nil, fmt.Errorf("could not compute state root: %v", err)
|
||||||
|
}
|
||||||
|
blk.StateRoot = stateRoot
|
||||||
|
return ðpb.GenericBeaconBlock{Block: ðpb.GenericBeaconBlock_BlindedBellatrix{BlindedBellatrix: blk}}, nil
|
||||||
|
}
|
||||||
|
|
||||||
payload, err := vs.getExecutionPayload(ctx, req.Slot, altairBlk.ProposerIndex)
|
payload, err := vs.getExecutionPayload(ctx, req.Slot, altairBlk.ProposerIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -52,5 +93,33 @@ func (vs *Server) getBellatrixBeaconBlock(ctx context.Context, req *ethpb.BlockR
|
|||||||
return nil, fmt.Errorf("could not compute state root: %v", err)
|
return nil, fmt.Errorf("could not compute state root: %v", err)
|
||||||
}
|
}
|
||||||
blk.StateRoot = stateRoot
|
blk.StateRoot = stateRoot
|
||||||
return blk, nil
|
return ðpb.GenericBeaconBlock{Block: ðpb.GenericBeaconBlock_Bellatrix{Bellatrix: blk}}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (vs *Server) getBuilderHeader(ctx context.Context, slot types.Slot, idx types.ValidatorIndex) (*ethpb.ExecutionPayloadHeader, bool, error) {
|
||||||
|
if vs.BlockBuilder.Status() != nil {
|
||||||
|
log.WithError(vs.BlockBuilder.Status()).Error("Could not get builder status")
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
b, err := vs.HeadFetcher.HeadBlock(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
if blocks.IsPreBellatrixVersion(b.Version()) {
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
h, err := b.Block().Body().ExecutionPayload()
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
pk, err := vs.HeadFetcher.HeadValidatorIndexToPublicKey(ctx, idx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
bid, err := vs.BlockBuilder.GetHeader(ctx, slot, bytesutil.ToBytes32(h.BlockHash), pk)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Error("Could not get builder header")
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
return bid.Message.Header, true, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/builder"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed"
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/feed"
|
||||||
@@ -69,6 +70,7 @@ type Server struct {
|
|||||||
ReplayerBuilder stategen.ReplayerBuilder
|
ReplayerBuilder stategen.ReplayerBuilder
|
||||||
BeaconDB db.HeadAccessDatabase
|
BeaconDB db.HeadAccessDatabase
|
||||||
ExecutionEngineCaller powchain.EngineCaller
|
ExecutionEngineCaller powchain.EngineCaller
|
||||||
|
BlockBuilder builder.BlockBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForActivation checks if a validator public key exists in the active validator registry of the current
|
// WaitForActivation checks if a validator public key exists in the active validator registry of the current
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
|
grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
|
||||||
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/builder"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
"github.com/prysmaticlabs/prysm/beacon-chain/cache/depositcache"
|
||||||
blockfeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/block"
|
blockfeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/block"
|
||||||
@@ -90,6 +91,7 @@ type Config struct {
|
|||||||
POWChainInfoFetcher powchain.ChainInfoFetcher
|
POWChainInfoFetcher powchain.ChainInfoFetcher
|
||||||
GenesisTimeFetcher blockchain.TimeFetcher
|
GenesisTimeFetcher blockchain.TimeFetcher
|
||||||
GenesisFetcher blockchain.GenesisFetcher
|
GenesisFetcher blockchain.GenesisFetcher
|
||||||
|
BlockBuilder builder.BlockBuilder
|
||||||
EnableDebugRPCEndpoints bool
|
EnableDebugRPCEndpoints bool
|
||||||
MockEth1Votes bool
|
MockEth1Votes bool
|
||||||
AttestationsPool attestations.Pool
|
AttestationsPool attestations.Pool
|
||||||
@@ -216,6 +218,7 @@ func (s *Service) Start() {
|
|||||||
ExecutionEngineCaller: s.cfg.ExecutionEngineCaller,
|
ExecutionEngineCaller: s.cfg.ExecutionEngineCaller,
|
||||||
BeaconDB: s.cfg.BeaconDB,
|
BeaconDB: s.cfg.BeaconDB,
|
||||||
ProposerSlotIndexCache: s.cfg.ProposerIdsCache,
|
ProposerSlotIndexCache: s.cfg.ProposerIdsCache,
|
||||||
|
BlockBuilder: s.cfg.BlockBuilder,
|
||||||
}
|
}
|
||||||
validatorServerV1 := &validator.Server{
|
validatorServerV1 := &validator.Server{
|
||||||
HeadFetcher: s.cfg.HeadFetcher,
|
HeadFetcher: s.cfg.HeadFetcher,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ go_library(
|
|||||||
importpath = "github.com/prysmaticlabs/prysm/cmd/beacon-chain",
|
importpath = "github.com/prysmaticlabs/prysm/cmd/beacon-chain",
|
||||||
visibility = ["//beacon-chain:__subpackages__"],
|
visibility = ["//beacon-chain:__subpackages__"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//beacon-chain/builder:go_default_library",
|
||||||
"//beacon-chain/node:go_default_library",
|
"//beacon-chain/node:go_default_library",
|
||||||
"//cmd:go_default_library",
|
"//cmd:go_default_library",
|
||||||
"//cmd/beacon-chain/blockchain:go_default_library",
|
"//cmd/beacon-chain/blockchain:go_default_library",
|
||||||
|
|||||||
@@ -11,6 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// MevBuilderFlag provides an HTTP access endpoint to a MEV builder network.
|
||||||
|
MevBuilderFlag = &cli.StringFlag{
|
||||||
|
Name: "http-mev-builder",
|
||||||
|
Usage: "A MEV builder relay string http endpoint",
|
||||||
|
Value: "",
|
||||||
|
}
|
||||||
// HTTPWeb3ProviderFlag provides an HTTP access endpoint to an ETH 1.0 RPC.
|
// HTTPWeb3ProviderFlag provides an HTTP access endpoint to an ETH 1.0 RPC.
|
||||||
HTTPWeb3ProviderFlag = &cli.StringFlag{
|
HTTPWeb3ProviderFlag = &cli.StringFlag{
|
||||||
Name: "http-web3provider",
|
Name: "http-web3provider",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
gethlog "github.com/ethereum/go-ethereum/log"
|
gethlog "github.com/ethereum/go-ethereum/log"
|
||||||
golog "github.com/ipfs/go-log/v2"
|
golog "github.com/ipfs/go-log/v2"
|
||||||
joonix "github.com/joonix/log"
|
joonix "github.com/joonix/log"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/builder"
|
||||||
"github.com/prysmaticlabs/prysm/beacon-chain/node"
|
"github.com/prysmaticlabs/prysm/beacon-chain/node"
|
||||||
"github.com/prysmaticlabs/prysm/cmd"
|
"github.com/prysmaticlabs/prysm/cmd"
|
||||||
blockchaincmd "github.com/prysmaticlabs/prysm/cmd/beacon-chain/blockchain"
|
blockchaincmd "github.com/prysmaticlabs/prysm/cmd/beacon-chain/blockchain"
|
||||||
@@ -69,6 +70,7 @@ var appFlags = []cli.Flag{
|
|||||||
flags.Eth1HeaderReqLimit,
|
flags.Eth1HeaderReqLimit,
|
||||||
flags.MinPeersPerSubnet,
|
flags.MinPeersPerSubnet,
|
||||||
flags.SuggestedFeeRecipient,
|
flags.SuggestedFeeRecipient,
|
||||||
|
flags.MevBuilderFlag,
|
||||||
cmd.EnableBackupWebhookFlag,
|
cmd.EnableBackupWebhookFlag,
|
||||||
cmd.BackupWebhookOutputDir,
|
cmd.BackupWebhookOutputDir,
|
||||||
cmd.MinimalConfigFlag,
|
cmd.MinimalConfigFlag,
|
||||||
@@ -248,9 +250,14 @@ func startNode(ctx *cli.Context) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
builderFlagOpts, err := builder.FlagOptions(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
opts := []node.Option{
|
opts := []node.Option{
|
||||||
node.WithBlockchainFlagOptions(blockchainFlagOpts),
|
node.WithBlockchainFlagOptions(blockchainFlagOpts),
|
||||||
node.WithPowchainFlagOptions(powchainFlagOpts),
|
node.WithPowchainFlagOptions(powchainFlagOpts),
|
||||||
|
node.WithBuilderFlagOptions(builderFlagOpts),
|
||||||
}
|
}
|
||||||
|
|
||||||
optFuncs := []func(*cli.Context) (node.Option, error){
|
optFuncs := []func(*cli.Context) (node.Option, error){
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ var appHelpFlagGroups = []flagGroup{
|
|||||||
flags.WeakSubjectivityCheckpoint,
|
flags.WeakSubjectivityCheckpoint,
|
||||||
flags.Eth1HeaderReqLimit,
|
flags.Eth1HeaderReqLimit,
|
||||||
flags.MinPeersPerSubnet,
|
flags.MinPeersPerSubnet,
|
||||||
|
flags.MevBuilderFlag,
|
||||||
checkpoint.BlockPath,
|
checkpoint.BlockPath,
|
||||||
checkpoint.StatePath,
|
checkpoint.StatePath,
|
||||||
checkpoint.RemoteURL,
|
checkpoint.RemoteURL,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// Code generated by fastssz. DO NOT EDIT.
|
// Code generated by fastssz. DO NOT EDIT.
|
||||||
// Hash: 62967561553b90d9e8e6096e3ea02cecd82d394c60a5ce905f0be76e11b5c756
|
// Hash: 418ff07898e20927dd5f627afcfa6d3ca2855a63f295620fc7b582b6887d97b3
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// Code generated by fastssz. DO NOT EDIT.
|
// Code generated by fastssz. DO NOT EDIT.
|
||||||
// Hash: 645f02ec7096ff25a0224c6cfb775b78c8f319cc8abe06b7fdbc0a288298a495
|
// Hash: d064e43d39d77b6920127a4f2b67fe922f1c64d2d7bed6a4626a39e48cf02c2e
|
||||||
package eth
|
package eth
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ ssz_gen_marshal(
|
|||||||
"SignedBlindedBeaconBlockBellatrix",
|
"SignedBlindedBeaconBlockBellatrix",
|
||||||
"BlindedBeaconBlockBellatrix",
|
"BlindedBeaconBlockBellatrix",
|
||||||
"BlindedBeaconBlockBodyBellatrix",
|
"BlindedBeaconBlockBodyBellatrix",
|
||||||
|
"SignedValidatorRegistrationV1",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
397
proto/prysm/v1alpha1/beacon_block.pb.go
generated
397
proto/prysm/v1alpha1/beacon_block.pb.go
generated
@@ -1970,6 +1970,250 @@ func (x *ExecutionPayloadHeader) GetTransactionsRoot() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ValidatorRegistrationV1 struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
FeeRecipient []byte `protobuf:"bytes,1,opt,name=fee_recipient,json=feeRecipient,proto3" json:"fee_recipient,omitempty" ssz-size:"20"`
|
||||||
|
GasLimit uint64 `protobuf:"varint,2,opt,name=gas_limit,json=gasLimit,proto3" json:"gas_limit,omitempty"`
|
||||||
|
Timestamp uint64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||||
|
Pubkey []byte `protobuf:"bytes,4,opt,name=pubkey,proto3" json:"pubkey,omitempty" ssz-size:"48"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) Reset() {
|
||||||
|
*x = ValidatorRegistrationV1{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ValidatorRegistrationV1) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ValidatorRegistrationV1.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ValidatorRegistrationV1) Descriptor() ([]byte, []int) {
|
||||||
|
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescGZIP(), []int{25}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) GetFeeRecipient() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.FeeRecipient
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) GetGasLimit() uint64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.GasLimit
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) GetTimestamp() uint64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.Timestamp
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ValidatorRegistrationV1) GetPubkey() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Pubkey
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignedValidatorRegistrationV1 struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Message *ValidatorRegistrationV1 `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
|
||||||
|
Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" ssz-size:"96"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedValidatorRegistrationV1) Reset() {
|
||||||
|
*x = SignedValidatorRegistrationV1{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[26]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedValidatorRegistrationV1) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SignedValidatorRegistrationV1) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *SignedValidatorRegistrationV1) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[26]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use SignedValidatorRegistrationV1.ProtoReflect.Descriptor instead.
|
||||||
|
func (*SignedValidatorRegistrationV1) Descriptor() ([]byte, []int) {
|
||||||
|
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescGZIP(), []int{26}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedValidatorRegistrationV1) GetMessage() *ValidatorRegistrationV1 {
|
||||||
|
if x != nil {
|
||||||
|
return x.Message
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedValidatorRegistrationV1) GetSignature() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Signature
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type BuilderBid struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Header *ExecutionPayloadHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
|
||||||
|
Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty" ssz-size:"32"`
|
||||||
|
Pubkey []byte `protobuf:"bytes,3,opt,name=pubkey,proto3" json:"pubkey,omitempty" ssz-size:"48"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BuilderBid) Reset() {
|
||||||
|
*x = BuilderBid{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[27]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BuilderBid) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*BuilderBid) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *BuilderBid) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[27]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use BuilderBid.ProtoReflect.Descriptor instead.
|
||||||
|
func (*BuilderBid) Descriptor() ([]byte, []int) {
|
||||||
|
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescGZIP(), []int{27}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BuilderBid) GetHeader() *ExecutionPayloadHeader {
|
||||||
|
if x != nil {
|
||||||
|
return x.Header
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BuilderBid) GetValue() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Value
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BuilderBid) GetPubkey() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Pubkey
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignedBuilderBid struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Message *BuilderBid `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
|
||||||
|
Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" ssz-size:"96"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedBuilderBid) Reset() {
|
||||||
|
*x = SignedBuilderBid{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[28]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedBuilderBid) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SignedBuilderBid) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *SignedBuilderBid) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[28]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use SignedBuilderBid.ProtoReflect.Descriptor instead.
|
||||||
|
func (*SignedBuilderBid) Descriptor() ([]byte, []int) {
|
||||||
|
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescGZIP(), []int{28}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedBuilderBid) GetMessage() *BuilderBid {
|
||||||
|
if x != nil {
|
||||||
|
return x.Message
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SignedBuilderBid) GetSignature() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Signature
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type Deposit_Data struct {
|
type Deposit_Data struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@@ -1984,7 +2228,7 @@ type Deposit_Data struct {
|
|||||||
func (x *Deposit_Data) Reset() {
|
func (x *Deposit_Data) Reset() {
|
||||||
*x = Deposit_Data{}
|
*x = Deposit_Data{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25]
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[29]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@@ -1997,7 +2241,7 @@ func (x *Deposit_Data) String() string {
|
|||||||
func (*Deposit_Data) ProtoMessage() {}
|
func (*Deposit_Data) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Deposit_Data) ProtoReflect() protoreflect.Message {
|
func (x *Deposit_Data) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25]
|
mi := &file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[29]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@@ -2562,17 +2806,53 @@ var file_proto_prysm_v1alpha1_beacon_block_proto_rawDesc = []byte{
|
|||||||
0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72,
|
0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72,
|
||||||
0x6f, 0x6f, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33,
|
0x6f, 0x6f, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33,
|
||||||
0x32, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
0x32, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
||||||
0x6f, 0x6f, 0x74, 0x42, 0x98, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65,
|
0x6f, 0x6f, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
|
||||||
0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12,
|
||||||
0x31, 0x42, 0x10, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72,
|
0x2b, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74,
|
||||||
0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x0c,
|
||||||
0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f,
|
0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09,
|
||||||
0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73,
|
0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
|
||||||
0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa, 0x02,
|
0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
|
||||||
0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x76, 0x31,
|
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69,
|
||||||
0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75,
|
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65,
|
||||||
0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06,
|
0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x34, 0x38, 0x52,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x22, 0x8f, 0x01, 0x0a, 0x1d, 0x53, 0x69, 0x67, 0x6e,
|
||||||
|
0x65, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73,
|
||||||
|
0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x48, 0x0a, 0x07, 0x6d, 0x65, 0x73,
|
||||||
|
0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68,
|
||||||
|
0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||||
|
0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69,
|
||||||
|
0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,
|
||||||
|
0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||||
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x39, 0x36, 0x52, 0x09,
|
||||||
|
0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x0a, 0x42, 0x75,
|
||||||
|
0x69, 0x6c, 0x64, 0x65, 0x72, 0x42, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64,
|
||||||
|
0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72,
|
||||||
|
0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
||||||
|
0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61,
|
||||||
|
0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12,
|
||||||
|
0x1c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06,
|
||||||
|
0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a,
|
||||||
|
0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a,
|
||||||
|
0xb5, 0x18, 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x22, 0x75, 0x0a,
|
||||||
|
0x10, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x42, 0x69,
|
||||||
|
0x64, 0x12, 0x3b, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74,
|
||||||
|
0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
|
||||||
|
0x65, 0x72, 0x42, 0x69, 0x64, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24,
|
||||||
|
0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
|
0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x39, 0x36, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61,
|
||||||
|
0x74, 0x75, 0x72, 0x65, 0x42, 0x98, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68,
|
||||||
|
0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||||
|
0x61, 0x31, 0x42, 0x10, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
||||||
|
0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73,
|
||||||
|
0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79,
|
||||||
|
0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa,
|
||||||
|
0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x76,
|
||||||
|
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65,
|
||||||
|
0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62,
|
||||||
|
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -2587,7 +2867,7 @@ func file_proto_prysm_v1alpha1_beacon_block_proto_rawDescGZIP() []byte {
|
|||||||
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescData
|
return file_proto_prysm_v1alpha1_beacon_block_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
|
var file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes = make([]protoimpl.MessageInfo, 30)
|
||||||
var file_proto_prysm_v1alpha1_beacon_block_proto_goTypes = []interface{}{
|
var file_proto_prysm_v1alpha1_beacon_block_proto_goTypes = []interface{}{
|
||||||
(*GenericSignedBeaconBlock)(nil), // 0: ethereum.eth.v1alpha1.GenericSignedBeaconBlock
|
(*GenericSignedBeaconBlock)(nil), // 0: ethereum.eth.v1alpha1.GenericSignedBeaconBlock
|
||||||
(*GenericBeaconBlock)(nil), // 1: ethereum.eth.v1alpha1.GenericBeaconBlock
|
(*GenericBeaconBlock)(nil), // 1: ethereum.eth.v1alpha1.GenericBeaconBlock
|
||||||
@@ -2614,10 +2894,14 @@ var file_proto_prysm_v1alpha1_beacon_block_proto_goTypes = []interface{}{
|
|||||||
(*BlindedBeaconBlockBellatrix)(nil), // 22: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
(*BlindedBeaconBlockBellatrix)(nil), // 22: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
||||||
(*BlindedBeaconBlockBodyBellatrix)(nil), // 23: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix
|
(*BlindedBeaconBlockBodyBellatrix)(nil), // 23: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix
|
||||||
(*ExecutionPayloadHeader)(nil), // 24: ethereum.eth.v1alpha1.ExecutionPayloadHeader
|
(*ExecutionPayloadHeader)(nil), // 24: ethereum.eth.v1alpha1.ExecutionPayloadHeader
|
||||||
(*Deposit_Data)(nil), // 25: ethereum.eth.v1alpha1.Deposit.Data
|
(*ValidatorRegistrationV1)(nil), // 25: ethereum.eth.v1alpha1.ValidatorRegistrationV1
|
||||||
(*Attestation)(nil), // 26: ethereum.eth.v1alpha1.Attestation
|
(*SignedValidatorRegistrationV1)(nil), // 26: ethereum.eth.v1alpha1.SignedValidatorRegistrationV1
|
||||||
(*AttestationData)(nil), // 27: ethereum.eth.v1alpha1.AttestationData
|
(*BuilderBid)(nil), // 27: ethereum.eth.v1alpha1.BuilderBid
|
||||||
(*v1.ExecutionPayload)(nil), // 28: ethereum.engine.v1.ExecutionPayload
|
(*SignedBuilderBid)(nil), // 28: ethereum.eth.v1alpha1.SignedBuilderBid
|
||||||
|
(*Deposit_Data)(nil), // 29: ethereum.eth.v1alpha1.Deposit.Data
|
||||||
|
(*Attestation)(nil), // 30: ethereum.eth.v1alpha1.Attestation
|
||||||
|
(*AttestationData)(nil), // 31: ethereum.eth.v1alpha1.AttestationData
|
||||||
|
(*v1.ExecutionPayload)(nil), // 32: ethereum.engine.v1.ExecutionPayload
|
||||||
}
|
}
|
||||||
var file_proto_prysm_v1alpha1_beacon_block_proto_depIdxs = []int32{
|
var file_proto_prysm_v1alpha1_beacon_block_proto_depIdxs = []int32{
|
||||||
3, // 0: ethereum.eth.v1alpha1.GenericSignedBeaconBlock.phase0:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlock
|
3, // 0: ethereum.eth.v1alpha1.GenericSignedBeaconBlock.phase0:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlock
|
||||||
@@ -2635,13 +2919,13 @@ var file_proto_prysm_v1alpha1_beacon_block_proto_depIdxs = []int32{
|
|||||||
13, // 12: ethereum.eth.v1alpha1.BeaconBlockBody.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
13, // 12: ethereum.eth.v1alpha1.BeaconBlockBody.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
||||||
8, // 13: ethereum.eth.v1alpha1.BeaconBlockBody.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
8, // 13: ethereum.eth.v1alpha1.BeaconBlockBody.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
||||||
9, // 14: ethereum.eth.v1alpha1.BeaconBlockBody.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
9, // 14: ethereum.eth.v1alpha1.BeaconBlockBody.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
||||||
26, // 15: ethereum.eth.v1alpha1.BeaconBlockBody.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
30, // 15: ethereum.eth.v1alpha1.BeaconBlockBody.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
||||||
10, // 16: ethereum.eth.v1alpha1.BeaconBlockBody.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
10, // 16: ethereum.eth.v1alpha1.BeaconBlockBody.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
||||||
12, // 17: ethereum.eth.v1alpha1.BeaconBlockBody.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
12, // 17: ethereum.eth.v1alpha1.BeaconBlockBody.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
||||||
13, // 18: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
13, // 18: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
||||||
8, // 19: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
8, // 19: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
||||||
9, // 20: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
9, // 20: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
||||||
26, // 21: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
30, // 21: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
||||||
10, // 22: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
10, // 22: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
||||||
12, // 23: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
12, // 23: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
||||||
17, // 24: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
17, // 24: ethereum.eth.v1alpha1.BeaconBlockBodyAltair.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
||||||
@@ -2649,35 +2933,38 @@ var file_proto_prysm_v1alpha1_beacon_block_proto_depIdxs = []int32{
|
|||||||
15, // 26: ethereum.eth.v1alpha1.ProposerSlashing.header_2:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlockHeader
|
15, // 26: ethereum.eth.v1alpha1.ProposerSlashing.header_2:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlockHeader
|
||||||
16, // 27: ethereum.eth.v1alpha1.AttesterSlashing.attestation_1:type_name -> ethereum.eth.v1alpha1.IndexedAttestation
|
16, // 27: ethereum.eth.v1alpha1.AttesterSlashing.attestation_1:type_name -> ethereum.eth.v1alpha1.IndexedAttestation
|
||||||
16, // 28: ethereum.eth.v1alpha1.AttesterSlashing.attestation_2:type_name -> ethereum.eth.v1alpha1.IndexedAttestation
|
16, // 28: ethereum.eth.v1alpha1.AttesterSlashing.attestation_2:type_name -> ethereum.eth.v1alpha1.IndexedAttestation
|
||||||
25, // 29: ethereum.eth.v1alpha1.Deposit.data:type_name -> ethereum.eth.v1alpha1.Deposit.Data
|
29, // 29: ethereum.eth.v1alpha1.Deposit.data:type_name -> ethereum.eth.v1alpha1.Deposit.Data
|
||||||
11, // 30: ethereum.eth.v1alpha1.SignedVoluntaryExit.exit:type_name -> ethereum.eth.v1alpha1.VoluntaryExit
|
11, // 30: ethereum.eth.v1alpha1.SignedVoluntaryExit.exit:type_name -> ethereum.eth.v1alpha1.VoluntaryExit
|
||||||
14, // 31: ethereum.eth.v1alpha1.SignedBeaconBlockHeader.header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader
|
14, // 31: ethereum.eth.v1alpha1.SignedBeaconBlockHeader.header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader
|
||||||
27, // 32: ethereum.eth.v1alpha1.IndexedAttestation.data:type_name -> ethereum.eth.v1alpha1.AttestationData
|
31, // 32: ethereum.eth.v1alpha1.IndexedAttestation.data:type_name -> ethereum.eth.v1alpha1.AttestationData
|
||||||
19, // 33: ethereum.eth.v1alpha1.SignedBeaconBlockBellatrix.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
19, // 33: ethereum.eth.v1alpha1.SignedBeaconBlockBellatrix.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
||||||
20, // 34: ethereum.eth.v1alpha1.BeaconBlockBellatrix.body:type_name -> ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix
|
20, // 34: ethereum.eth.v1alpha1.BeaconBlockBellatrix.body:type_name -> ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix
|
||||||
13, // 35: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
13, // 35: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
||||||
8, // 36: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
8, // 36: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
||||||
9, // 37: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
9, // 37: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
||||||
26, // 38: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
30, // 38: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
||||||
10, // 39: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
10, // 39: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
||||||
12, // 40: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
12, // 40: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
||||||
17, // 41: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
17, // 41: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
||||||
28, // 42: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.execution_payload:type_name -> ethereum.engine.v1.ExecutionPayload
|
32, // 42: ethereum.eth.v1alpha1.BeaconBlockBodyBellatrix.execution_payload:type_name -> ethereum.engine.v1.ExecutionPayload
|
||||||
22, // 43: ethereum.eth.v1alpha1.SignedBlindedBeaconBlockBellatrix.block:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
22, // 43: ethereum.eth.v1alpha1.SignedBlindedBeaconBlockBellatrix.block:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
||||||
23, // 44: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix.body:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix
|
23, // 44: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix.body:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix
|
||||||
13, // 45: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
13, // 45: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data
|
||||||
8, // 46: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
8, // 46: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing
|
||||||
9, // 47: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
9, // 47: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashing
|
||||||
26, // 48: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
30, // 48: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.attestations:type_name -> ethereum.eth.v1alpha1.Attestation
|
||||||
10, // 49: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
10, // 49: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.deposits:type_name -> ethereum.eth.v1alpha1.Deposit
|
||||||
12, // 50: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
12, // 50: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit
|
||||||
17, // 51: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
17, // 51: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate
|
||||||
24, // 52: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.execution_payload_header:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadHeader
|
24, // 52: ethereum.eth.v1alpha1.BlindedBeaconBlockBodyBellatrix.execution_payload_header:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadHeader
|
||||||
53, // [53:53] is the sub-list for method output_type
|
25, // 53: ethereum.eth.v1alpha1.SignedValidatorRegistrationV1.message:type_name -> ethereum.eth.v1alpha1.ValidatorRegistrationV1
|
||||||
53, // [53:53] is the sub-list for method input_type
|
24, // 54: ethereum.eth.v1alpha1.BuilderBid.header:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadHeader
|
||||||
53, // [53:53] is the sub-list for extension type_name
|
27, // 55: ethereum.eth.v1alpha1.SignedBuilderBid.message:type_name -> ethereum.eth.v1alpha1.BuilderBid
|
||||||
53, // [53:53] is the sub-list for extension extendee
|
56, // [56:56] is the sub-list for method output_type
|
||||||
0, // [0:53] is the sub-list for field type_name
|
56, // [56:56] is the sub-list for method input_type
|
||||||
|
56, // [56:56] is the sub-list for extension type_name
|
||||||
|
56, // [56:56] is the sub-list for extension extendee
|
||||||
|
0, // [0:56] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_proto_prysm_v1alpha1_beacon_block_proto_init() }
|
func init() { file_proto_prysm_v1alpha1_beacon_block_proto_init() }
|
||||||
@@ -2988,6 +3275,54 @@ func file_proto_prysm_v1alpha1_beacon_block_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
|
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ValidatorRegistrationV1); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*SignedValidatorRegistrationV1); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*BuilderBid); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*SignedBuilderBid); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_proto_prysm_v1alpha1_beacon_block_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*Deposit_Data); i {
|
switch v := v.(*Deposit_Data); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
@@ -3018,7 +3353,7 @@ func file_proto_prysm_v1alpha1_beacon_block_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_proto_prysm_v1alpha1_beacon_block_proto_rawDesc,
|
RawDescriptor: file_proto_prysm_v1alpha1_beacon_block_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 26,
|
NumMessages: 30,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -439,3 +439,26 @@ message ExecutionPayloadHeader {
|
|||||||
bytes block_hash = 13 [(ethereum.eth.ext.ssz_size) = "32"];
|
bytes block_hash = 13 [(ethereum.eth.ext.ssz_size) = "32"];
|
||||||
bytes transactions_root = 14 [(ethereum.eth.ext.ssz_size) = "32"];
|
bytes transactions_root = 14 [(ethereum.eth.ext.ssz_size) = "32"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ValidatorRegistrationV1 {
|
||||||
|
bytes fee_recipient = 1 [(ethereum.eth.ext.ssz_size) = "20"];
|
||||||
|
uint64 gas_limit = 2;
|
||||||
|
uint64 timestamp = 3;
|
||||||
|
bytes pubkey = 4 [(ethereum.eth.ext.ssz_size) = "48"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SignedValidatorRegistrationV1 {
|
||||||
|
ValidatorRegistrationV1 message = 1 ;
|
||||||
|
bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message BuilderBid {
|
||||||
|
ExecutionPayloadHeader header = 1 ;
|
||||||
|
bytes value = 2 [(ethereum.eth.ext.ssz_size) = "32"];
|
||||||
|
bytes pubkey = 3 [(ethereum.eth.ext.ssz_size) = "48"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SignedBuilderBid {
|
||||||
|
BuilderBid message = 1 ;
|
||||||
|
bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// Code generated by fastssz. DO NOT EDIT.
|
// Code generated by fastssz. DO NOT EDIT.
|
||||||
// Hash: 9a0878603ae33eb8c24e67125053c57a7ecb085852e4fe6a746c9e23e58dc087
|
// Hash: 188158507de81fa886301eae5bce0c983d37d777893c267b7175dc87af65db77
|
||||||
package eth
|
package eth
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -4724,6 +4724,189 @@ func (e *ExecutionPayloadHeader) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalSSZ ssz marshals the ValidatorRegistrationV1 object
|
||||||
|
func (v *ValidatorRegistrationV1) MarshalSSZ() ([]byte, error) {
|
||||||
|
return ssz.MarshalSSZ(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalSSZTo ssz marshals the ValidatorRegistrationV1 object to a target array
|
||||||
|
func (v *ValidatorRegistrationV1) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
|
dst = buf
|
||||||
|
|
||||||
|
// Field (0) 'FeeRecipient'
|
||||||
|
if len(v.FeeRecipient) != 20 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dst = append(dst, v.FeeRecipient...)
|
||||||
|
|
||||||
|
// Field (1) 'GasLimit'
|
||||||
|
dst = ssz.MarshalUint64(dst, v.GasLimit)
|
||||||
|
|
||||||
|
// Field (2) 'Timestamp'
|
||||||
|
dst = ssz.MarshalUint64(dst, v.Timestamp)
|
||||||
|
|
||||||
|
// Field (3) 'Pubkey'
|
||||||
|
if len(v.Pubkey) != 48 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dst = append(dst, v.Pubkey...)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalSSZ ssz unmarshals the ValidatorRegistrationV1 object
|
||||||
|
func (v *ValidatorRegistrationV1) UnmarshalSSZ(buf []byte) error {
|
||||||
|
var err error
|
||||||
|
size := uint64(len(buf))
|
||||||
|
if size != 84 {
|
||||||
|
return ssz.ErrSize
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (0) 'FeeRecipient'
|
||||||
|
if cap(v.FeeRecipient) == 0 {
|
||||||
|
v.FeeRecipient = make([]byte, 0, len(buf[0:20]))
|
||||||
|
}
|
||||||
|
v.FeeRecipient = append(v.FeeRecipient, buf[0:20]...)
|
||||||
|
|
||||||
|
// Field (1) 'GasLimit'
|
||||||
|
v.GasLimit = ssz.UnmarshallUint64(buf[20:28])
|
||||||
|
|
||||||
|
// Field (2) 'Timestamp'
|
||||||
|
v.Timestamp = ssz.UnmarshallUint64(buf[28:36])
|
||||||
|
|
||||||
|
// Field (3) 'Pubkey'
|
||||||
|
if cap(v.Pubkey) == 0 {
|
||||||
|
v.Pubkey = make([]byte, 0, len(buf[36:84]))
|
||||||
|
}
|
||||||
|
v.Pubkey = append(v.Pubkey, buf[36:84]...)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SizeSSZ returns the ssz encoded size in bytes for the ValidatorRegistrationV1 object
|
||||||
|
func (v *ValidatorRegistrationV1) SizeSSZ() (size int) {
|
||||||
|
size = 84
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// HashTreeRoot ssz hashes the ValidatorRegistrationV1 object
|
||||||
|
func (v *ValidatorRegistrationV1) HashTreeRoot() ([32]byte, error) {
|
||||||
|
return ssz.HashWithDefaultHasher(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// HashTreeRootWith ssz hashes the ValidatorRegistrationV1 object with a hasher
|
||||||
|
func (v *ValidatorRegistrationV1) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
||||||
|
indx := hh.Index()
|
||||||
|
|
||||||
|
// Field (0) 'FeeRecipient'
|
||||||
|
if len(v.FeeRecipient) != 20 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hh.PutBytes(v.FeeRecipient)
|
||||||
|
|
||||||
|
// Field (1) 'GasLimit'
|
||||||
|
hh.PutUint64(v.GasLimit)
|
||||||
|
|
||||||
|
// Field (2) 'Timestamp'
|
||||||
|
hh.PutUint64(v.Timestamp)
|
||||||
|
|
||||||
|
// Field (3) 'Pubkey'
|
||||||
|
if len(v.Pubkey) != 48 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hh.PutBytes(v.Pubkey)
|
||||||
|
|
||||||
|
hh.Merkleize(indx)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalSSZ ssz marshals the SignedValidatorRegistrationV1 object
|
||||||
|
func (s *SignedValidatorRegistrationV1) MarshalSSZ() ([]byte, error) {
|
||||||
|
return ssz.MarshalSSZ(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalSSZTo ssz marshals the SignedValidatorRegistrationV1 object to a target array
|
||||||
|
func (s *SignedValidatorRegistrationV1) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
|
dst = buf
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
if s.Message == nil {
|
||||||
|
s.Message = new(ValidatorRegistrationV1)
|
||||||
|
}
|
||||||
|
if dst, err = s.Message.MarshalSSZTo(dst); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (1) 'Signature'
|
||||||
|
if len(s.Signature) != 96 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dst = append(dst, s.Signature...)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalSSZ ssz unmarshals the SignedValidatorRegistrationV1 object
|
||||||
|
func (s *SignedValidatorRegistrationV1) UnmarshalSSZ(buf []byte) error {
|
||||||
|
var err error
|
||||||
|
size := uint64(len(buf))
|
||||||
|
if size != 180 {
|
||||||
|
return ssz.ErrSize
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
if s.Message == nil {
|
||||||
|
s.Message = new(ValidatorRegistrationV1)
|
||||||
|
}
|
||||||
|
if err = s.Message.UnmarshalSSZ(buf[0:84]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (1) 'Signature'
|
||||||
|
if cap(s.Signature) == 0 {
|
||||||
|
s.Signature = make([]byte, 0, len(buf[84:180]))
|
||||||
|
}
|
||||||
|
s.Signature = append(s.Signature, buf[84:180]...)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SizeSSZ returns the ssz encoded size in bytes for the SignedValidatorRegistrationV1 object
|
||||||
|
func (s *SignedValidatorRegistrationV1) SizeSSZ() (size int) {
|
||||||
|
size = 180
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// HashTreeRoot ssz hashes the SignedValidatorRegistrationV1 object
|
||||||
|
func (s *SignedValidatorRegistrationV1) HashTreeRoot() ([32]byte, error) {
|
||||||
|
return ssz.HashWithDefaultHasher(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// HashTreeRootWith ssz hashes the SignedValidatorRegistrationV1 object with a hasher
|
||||||
|
func (s *SignedValidatorRegistrationV1) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
||||||
|
indx := hh.Index()
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
if err = s.Message.HashTreeRootWith(hh); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (1) 'Signature'
|
||||||
|
if len(s.Signature) != 96 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hh.PutBytes(s.Signature)
|
||||||
|
|
||||||
|
hh.Merkleize(indx)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// MarshalSSZ ssz marshals the Deposit_Data object
|
// MarshalSSZ ssz marshals the Deposit_Data object
|
||||||
func (d *Deposit_Data) MarshalSSZ() ([]byte, error) {
|
func (d *Deposit_Data) MarshalSSZ() ([]byte, error) {
|
||||||
return ssz.MarshalSSZ(d)
|
return ssz.MarshalSSZ(d)
|
||||||
|
|||||||
150
proto/prysm/v1alpha1/validator-client/keymanager.pb.go
generated
150
proto/prysm/v1alpha1/validator-client/keymanager.pb.go
generated
@@ -150,6 +150,7 @@ type SignRequest struct {
|
|||||||
// *SignRequest_SyncMessageBlockRoot
|
// *SignRequest_SyncMessageBlockRoot
|
||||||
// *SignRequest_BlockV3
|
// *SignRequest_BlockV3
|
||||||
// *SignRequest_BlindedBlockV3
|
// *SignRequest_BlindedBlockV3
|
||||||
|
// *SignRequest_Registration
|
||||||
Object isSignRequest_Object `protobuf_oneof:"object"`
|
Object isSignRequest_Object `protobuf_oneof:"object"`
|
||||||
SigningSlot github_com_prysmaticlabs_prysm_consensus_types_primitives.Slot `protobuf:"varint,6,opt,name=signing_slot,json=signingSlot,proto3" json:"signing_slot,omitempty" cast-type:"github.com/prysmaticlabs/prysm/consensus-types/primitives.Slot"`
|
SigningSlot github_com_prysmaticlabs_prysm_consensus_types_primitives.Slot `protobuf:"varint,6,opt,name=signing_slot,json=signingSlot,proto3" json:"signing_slot,omitempty" cast-type:"github.com/prysmaticlabs/prysm/consensus-types/primitives.Slot"`
|
||||||
}
|
}
|
||||||
@@ -298,6 +299,13 @@ func (x *SignRequest) GetBlindedBlockV3() *v1alpha1.BlindedBeaconBlockBellatrix
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *SignRequest) GetRegistration() *v1alpha1.ValidatorRegistrationV1 {
|
||||||
|
if x, ok := x.GetObject().(*SignRequest_Registration); ok {
|
||||||
|
return x.Registration
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (x *SignRequest) GetSigningSlot() github_com_prysmaticlabs_prysm_consensus_types_primitives.Slot {
|
func (x *SignRequest) GetSigningSlot() github_com_prysmaticlabs_prysm_consensus_types_primitives.Slot {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.SigningSlot
|
return x.SigningSlot
|
||||||
@@ -357,6 +365,10 @@ type SignRequest_BlindedBlockV3 struct {
|
|||||||
BlindedBlockV3 *v1alpha1.BlindedBeaconBlockBellatrix `protobuf:"bytes,112,opt,name=blinded_blockV3,json=blindedBlockV3,proto3,oneof"`
|
BlindedBlockV3 *v1alpha1.BlindedBeaconBlockBellatrix `protobuf:"bytes,112,opt,name=blinded_blockV3,json=blindedBlockV3,proto3,oneof"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SignRequest_Registration struct {
|
||||||
|
Registration *v1alpha1.ValidatorRegistrationV1 `protobuf:"bytes,113,opt,name=registration,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
func (*SignRequest_Block) isSignRequest_Object() {}
|
func (*SignRequest_Block) isSignRequest_Object() {}
|
||||||
|
|
||||||
func (*SignRequest_AttestationData) isSignRequest_Object() {}
|
func (*SignRequest_AttestationData) isSignRequest_Object() {}
|
||||||
@@ -381,6 +393,8 @@ func (*SignRequest_BlockV3) isSignRequest_Object() {}
|
|||||||
|
|
||||||
func (*SignRequest_BlindedBlockV3) isSignRequest_Object() {}
|
func (*SignRequest_BlindedBlockV3) isSignRequest_Object() {}
|
||||||
|
|
||||||
|
func (*SignRequest_Registration) isSignRequest_Object() {}
|
||||||
|
|
||||||
type SignResponse struct {
|
type SignResponse struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@@ -465,7 +479,7 @@ var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_rawDesc = []byte
|
|||||||
0x34, 0x0a, 0x16, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x75,
|
0x34, 0x0a, 0x16, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x75,
|
||||||
0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52,
|
0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52,
|
||||||
0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69,
|
0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69,
|
||||||
0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x80, 0x0a, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65,
|
0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xd6, 0x0a, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65,
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
||||||
0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f,
|
0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f,
|
||||||
@@ -537,59 +551,64 @@ var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_rawDesc = []byte
|
|||||||
0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6c,
|
0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6c,
|
||||||
0x69, 0x6e, 0x64, 0x65, 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
|
0x69, 0x6e, 0x64, 0x65, 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
|
||||||
0x42, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x72, 0x69, 0x78, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6c, 0x69,
|
0x42, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x72, 0x69, 0x78, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6c, 0x69,
|
||||||
0x6e, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x33, 0x12, 0x65, 0x0a, 0x0c, 0x73,
|
0x6e, 0x64, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x33, 0x12, 0x54, 0x0a, 0x0c, 0x72,
|
||||||
0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
|
0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x71, 0x20, 0x01, 0x28,
|
||||||
0x04, 0x42, 0x42, 0x82, 0xb5, 0x18, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
|
0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68,
|
||||||
0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f,
|
0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||||
0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d,
|
0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
|
||||||
0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73,
|
0x31, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x6c,
|
0x6e, 0x12, 0x65, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f,
|
||||||
0x6f, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4a, 0x04, 0x08, 0x04,
|
0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, 0x42, 0x82, 0xb5, 0x18, 0x3e, 0x67, 0x69, 0x74,
|
||||||
0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xb7, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67,
|
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69,
|
||||||
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67,
|
0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x73,
|
||||||
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69,
|
0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d,
|
||||||
0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0b, 0x73, 0x69, 0x67,
|
||||||
0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65,
|
0x6e, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65,
|
||||||
0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63,
|
0x63, 0x74, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xb7,
|
||||||
0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73,
|
0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
|
0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b,
|
0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4b, 0x0a,
|
||||||
0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53,
|
0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e,
|
||||||
0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45,
|
0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
|
||||||
0x4e, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44,
|
0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53,
|
||||||
0x10, 0x03, 0x32, 0xa7, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x69, 0x67,
|
0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x6e, 0x65, 0x72, 0x12, 0x90, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69,
|
0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x06, 0x53, 0x74,
|
||||||
0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73,
|
0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
|
||||||
0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x01,
|
||||||
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72,
|
0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06,
|
||||||
0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63,
|
0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xa7, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x6d,
|
||||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75,
|
0x6f, 0x74, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x90, 0x01, 0x0a, 0x18, 0x4c, 0x69,
|
||||||
0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c,
|
||||||
0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75,
|
0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||||
0x6e, 0x74, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x61, 0x63,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36,
|
||||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12,
|
0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||||
0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
|
0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e,
|
||||||
0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32,
|
0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
|
||||||
0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65,
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c,
|
||||||
0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
|
0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x6d,
|
||||||
0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69,
|
0x6f, 0x74, 0x65, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x83, 0x01, 0x0a,
|
||||||
0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93,
|
0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d,
|
||||||
0x02, 0x1a, 0x22, 0x18, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x32,
|
0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75,
|
||||||
0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0xcb, 0x01, 0x0a,
|
0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x22, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61,
|
0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61,
|
||||||
0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73,
|
0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73,
|
||||||
0x2e, 0x76, 0x32, 0x42, 0x0f, 0x4b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50,
|
0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x18, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75,
|
||||||
0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73,
|
0x6e, 0x74, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x73, 0x69,
|
||||||
0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79,
|
0x67, 0x6e, 0x42, 0xcb, 0x01, 0x0a, 0x22, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72,
|
||||||
0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69,
|
0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63,
|
||||||
0x64, 0x61, 0x74, 0x6f, 0x72, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x3b, 0x76, 0x61, 0x6c,
|
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x42, 0x0f, 0x4b, 0x65, 0x79, 0x6d, 0x61,
|
||||||
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xaa, 0x02, 0x1e, 0x45, 0x74, 0x68, 0x65, 0x72,
|
0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69,
|
||||||
0x65, 0x75, 0x6d, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x63,
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74,
|
||||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1e, 0x45, 0x74, 0x68, 0x65,
|
0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f,
|
||||||
0x72, 0x65, 0x75, 0x6d, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5c, 0x41,
|
0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||||
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2d, 0x63, 0x6c, 0x69, 0x65,
|
||||||
0x6f, 0x33,
|
0x6e, 0x74, 0x3b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xaa, 0x02,
|
||||||
|
0x1e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||||
|
0x74, 0x6f, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x56, 0x32, 0xca,
|
||||||
|
0x02, 0x1e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64,
|
||||||
|
0x61, 0x74, 0x6f, 0x72, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x56, 0x32,
|
||||||
|
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -620,7 +639,8 @@ var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_goTypes = []inte
|
|||||||
(*v1alpha1.ContributionAndProof)(nil), // 10: ethereum.eth.v1alpha1.ContributionAndProof
|
(*v1alpha1.ContributionAndProof)(nil), // 10: ethereum.eth.v1alpha1.ContributionAndProof
|
||||||
(*v1alpha1.BeaconBlockBellatrix)(nil), // 11: ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
(*v1alpha1.BeaconBlockBellatrix)(nil), // 11: ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
||||||
(*v1alpha1.BlindedBeaconBlockBellatrix)(nil), // 12: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
(*v1alpha1.BlindedBeaconBlockBellatrix)(nil), // 12: ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
||||||
(*empty.Empty)(nil), // 13: google.protobuf.Empty
|
(*v1alpha1.ValidatorRegistrationV1)(nil), // 13: ethereum.eth.v1alpha1.ValidatorRegistrationV1
|
||||||
|
(*empty.Empty)(nil), // 14: google.protobuf.Empty
|
||||||
}
|
}
|
||||||
var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_depIdxs = []int32{
|
var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_depIdxs = []int32{
|
||||||
4, // 0: ethereum.validator.accounts.v2.SignRequest.block:type_name -> ethereum.eth.v1alpha1.BeaconBlock
|
4, // 0: ethereum.validator.accounts.v2.SignRequest.block:type_name -> ethereum.eth.v1alpha1.BeaconBlock
|
||||||
@@ -632,16 +652,17 @@ var file_proto_prysm_v1alpha1_validator_client_keymanager_proto_depIdxs = []int3
|
|||||||
10, // 6: ethereum.validator.accounts.v2.SignRequest.contribution_and_proof:type_name -> ethereum.eth.v1alpha1.ContributionAndProof
|
10, // 6: ethereum.validator.accounts.v2.SignRequest.contribution_and_proof:type_name -> ethereum.eth.v1alpha1.ContributionAndProof
|
||||||
11, // 7: ethereum.validator.accounts.v2.SignRequest.blockV3:type_name -> ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
11, // 7: ethereum.validator.accounts.v2.SignRequest.blockV3:type_name -> ethereum.eth.v1alpha1.BeaconBlockBellatrix
|
||||||
12, // 8: ethereum.validator.accounts.v2.SignRequest.blinded_blockV3:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
12, // 8: ethereum.validator.accounts.v2.SignRequest.blinded_blockV3:type_name -> ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix
|
||||||
0, // 9: ethereum.validator.accounts.v2.SignResponse.status:type_name -> ethereum.validator.accounts.v2.SignResponse.Status
|
13, // 9: ethereum.validator.accounts.v2.SignRequest.registration:type_name -> ethereum.eth.v1alpha1.ValidatorRegistrationV1
|
||||||
13, // 10: ethereum.validator.accounts.v2.RemoteSigner.ListValidatingPublicKeys:input_type -> google.protobuf.Empty
|
0, // 10: ethereum.validator.accounts.v2.SignResponse.status:type_name -> ethereum.validator.accounts.v2.SignResponse.Status
|
||||||
2, // 11: ethereum.validator.accounts.v2.RemoteSigner.Sign:input_type -> ethereum.validator.accounts.v2.SignRequest
|
14, // 11: ethereum.validator.accounts.v2.RemoteSigner.ListValidatingPublicKeys:input_type -> google.protobuf.Empty
|
||||||
1, // 12: ethereum.validator.accounts.v2.RemoteSigner.ListValidatingPublicKeys:output_type -> ethereum.validator.accounts.v2.ListPublicKeysResponse
|
2, // 12: ethereum.validator.accounts.v2.RemoteSigner.Sign:input_type -> ethereum.validator.accounts.v2.SignRequest
|
||||||
3, // 13: ethereum.validator.accounts.v2.RemoteSigner.Sign:output_type -> ethereum.validator.accounts.v2.SignResponse
|
1, // 13: ethereum.validator.accounts.v2.RemoteSigner.ListValidatingPublicKeys:output_type -> ethereum.validator.accounts.v2.ListPublicKeysResponse
|
||||||
12, // [12:14] is the sub-list for method output_type
|
3, // 14: ethereum.validator.accounts.v2.RemoteSigner.Sign:output_type -> ethereum.validator.accounts.v2.SignResponse
|
||||||
10, // [10:12] is the sub-list for method input_type
|
13, // [13:15] is the sub-list for method output_type
|
||||||
10, // [10:10] is the sub-list for extension type_name
|
11, // [11:13] is the sub-list for method input_type
|
||||||
10, // [10:10] is the sub-list for extension extendee
|
11, // [11:11] is the sub-list for extension type_name
|
||||||
0, // [0:10] is the sub-list for field type_name
|
11, // [11:11] is the sub-list for extension extendee
|
||||||
|
0, // [0:11] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_proto_prysm_v1alpha1_validator_client_keymanager_proto_init() }
|
func init() { file_proto_prysm_v1alpha1_validator_client_keymanager_proto_init() }
|
||||||
@@ -700,6 +721,7 @@ func file_proto_prysm_v1alpha1_validator_client_keymanager_proto_init() {
|
|||||||
(*SignRequest_SyncMessageBlockRoot)(nil),
|
(*SignRequest_SyncMessageBlockRoot)(nil),
|
||||||
(*SignRequest_BlockV3)(nil),
|
(*SignRequest_BlockV3)(nil),
|
||||||
(*SignRequest_BlindedBlockV3)(nil),
|
(*SignRequest_BlindedBlockV3)(nil),
|
||||||
|
(*SignRequest_Registration)(nil),
|
||||||
}
|
}
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ message SignRequest {
|
|||||||
// Bellatrix objects.
|
// Bellatrix objects.
|
||||||
ethereum.eth.v1alpha1.BeaconBlockBellatrix blockV3 = 111;
|
ethereum.eth.v1alpha1.BeaconBlockBellatrix blockV3 = 111;
|
||||||
ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix blinded_blockV3 = 112;
|
ethereum.eth.v1alpha1.BlindedBeaconBlockBellatrix blinded_blockV3 = 112;
|
||||||
|
|
||||||
|
// Builder objects.
|
||||||
|
ethereum.eth.v1alpha1.ValidatorRegistrationV1 registration = 113;
|
||||||
}
|
}
|
||||||
reserved 4, 5; // Reserving old, deleted fields.
|
reserved 4, 5; // Reserving old, deleted fields.
|
||||||
uint64 signing_slot = 6 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/prysm/consensus-types/primitives.Slot"];
|
uint64 signing_slot = 6 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/prysm/consensus-types/primitives.Slot"];
|
||||||
|
|||||||
137
proto/prysm/v1alpha1/validator.pb.go
generated
137
proto/prysm/v1alpha1/validator.pb.go
generated
@@ -3099,7 +3099,7 @@ var file_proto_prysm_v1alpha1_validator_proto_rawDesc = []byte{
|
|||||||
0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49,
|
0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49,
|
||||||
0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44,
|
0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44,
|
||||||
0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f,
|
0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f,
|
||||||
0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x08, 0x32, 0x9f, 0x20, 0x0a, 0x13,
|
0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x08, 0x32, 0xbe, 0x21, 0x0a, 0x13,
|
||||||
0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||||
0x74, 0x6f, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x44, 0x75, 0x74, 0x69, 0x65,
|
0x74, 0x6f, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x44, 0x75, 0x74, 0x69, 0x65,
|
||||||
0x73, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68,
|
0x73, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68,
|
||||||
@@ -3357,17 +3357,27 @@ var file_proto_prysm_v1alpha1_validator_proto_rawDesc = []byte{
|
|||||||
0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3,
|
0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3,
|
||||||
0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
|
0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70,
|
||||||
0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c,
|
0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c,
|
||||||
0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x42, 0x90, 0x01,
|
0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x9c, 0x01,
|
||||||
0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65,
|
0x0a, 0x1b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
|
||||||
0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c,
|
0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e,
|
||||||
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67,
|
0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61,
|
||||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61,
|
0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x69,
|
||||||
0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72,
|
0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
0x6e, 0x56, 0x31, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4,
|
||||||
0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72,
|
0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||||
0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
|
0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x72, 0x65, 0x67,
|
||||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x90, 0x01, 0x0a,
|
||||||
|
0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74,
|
||||||
|
0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c, 0x69,
|
||||||
|
0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x69,
|
||||||
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74,
|
||||||
|
0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
|
||||||
|
0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d,
|
||||||
|
0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65,
|
||||||
|
0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62,
|
||||||
|
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -3438,10 +3448,11 @@ var file_proto_prysm_v1alpha1_validator_proto_goTypes = []interface{}{
|
|||||||
(*SignedVoluntaryExit)(nil), // 50: ethereum.eth.v1alpha1.SignedVoluntaryExit
|
(*SignedVoluntaryExit)(nil), // 50: ethereum.eth.v1alpha1.SignedVoluntaryExit
|
||||||
(*SyncCommitteeMessage)(nil), // 51: ethereum.eth.v1alpha1.SyncCommitteeMessage
|
(*SyncCommitteeMessage)(nil), // 51: ethereum.eth.v1alpha1.SyncCommitteeMessage
|
||||||
(*SignedContributionAndProof)(nil), // 52: ethereum.eth.v1alpha1.SignedContributionAndProof
|
(*SignedContributionAndProof)(nil), // 52: ethereum.eth.v1alpha1.SignedContributionAndProof
|
||||||
(*BeaconBlock)(nil), // 53: ethereum.eth.v1alpha1.BeaconBlock
|
(*SignedValidatorRegistrationV1)(nil), // 53: ethereum.eth.v1alpha1.SignedValidatorRegistrationV1
|
||||||
(*GenericBeaconBlock)(nil), // 54: ethereum.eth.v1alpha1.GenericBeaconBlock
|
(*BeaconBlock)(nil), // 54: ethereum.eth.v1alpha1.BeaconBlock
|
||||||
(*AttestationData)(nil), // 55: ethereum.eth.v1alpha1.AttestationData
|
(*GenericBeaconBlock)(nil), // 55: ethereum.eth.v1alpha1.GenericBeaconBlock
|
||||||
(*SyncCommitteeContribution)(nil), // 56: ethereum.eth.v1alpha1.SyncCommitteeContribution
|
(*AttestationData)(nil), // 56: ethereum.eth.v1alpha1.AttestationData
|
||||||
|
(*SyncCommitteeContribution)(nil), // 57: ethereum.eth.v1alpha1.SyncCommitteeContribution
|
||||||
}
|
}
|
||||||
var file_proto_prysm_v1alpha1_validator_proto_depIdxs = []int32{
|
var file_proto_prysm_v1alpha1_validator_proto_depIdxs = []int32{
|
||||||
42, // 0: ethereum.eth.v1alpha1.StreamBlocksResponse.phase0_block:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlock
|
42, // 0: ethereum.eth.v1alpha1.StreamBlocksResponse.phase0_block:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlock
|
||||||
@@ -3487,34 +3498,36 @@ var file_proto_prysm_v1alpha1_validator_proto_depIdxs = []int32{
|
|||||||
3, // 40: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncCommitteeContribution:input_type -> ethereum.eth.v1alpha1.SyncCommitteeContributionRequest
|
3, // 40: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncCommitteeContribution:input_type -> ethereum.eth.v1alpha1.SyncCommitteeContributionRequest
|
||||||
52, // 41: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedContributionAndProof:input_type -> ethereum.eth.v1alpha1.SignedContributionAndProof
|
52, // 41: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedContributionAndProof:input_type -> ethereum.eth.v1alpha1.SignedContributionAndProof
|
||||||
35, // 42: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamBlocksAltair:input_type -> ethereum.eth.v1alpha1.StreamBlocksRequest
|
35, // 42: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamBlocksAltair:input_type -> ethereum.eth.v1alpha1.StreamBlocksRequest
|
||||||
19, // 43: ethereum.eth.v1alpha1.BeaconNodeValidator.GetDuties:output_type -> ethereum.eth.v1alpha1.DutiesResponse
|
53, // 43: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitValidatorRegistration:input_type -> ethereum.eth.v1alpha1.SignedValidatorRegistrationV1
|
||||||
19, // 44: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamDuties:output_type -> ethereum.eth.v1alpha1.DutiesResponse
|
19, // 44: ethereum.eth.v1alpha1.BeaconNodeValidator.GetDuties:output_type -> ethereum.eth.v1alpha1.DutiesResponse
|
||||||
7, // 45: ethereum.eth.v1alpha1.BeaconNodeValidator.DomainData:output_type -> ethereum.eth.v1alpha1.DomainResponse
|
19, // 45: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamDuties:output_type -> ethereum.eth.v1alpha1.DutiesResponse
|
||||||
10, // 46: ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForChainStart:output_type -> ethereum.eth.v1alpha1.ChainStartResponse
|
7, // 46: ethereum.eth.v1alpha1.BeaconNodeValidator.DomainData:output_type -> ethereum.eth.v1alpha1.DomainResponse
|
||||||
9, // 47: ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForActivation:output_type -> ethereum.eth.v1alpha1.ValidatorActivationResponse
|
10, // 47: ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForChainStart:output_type -> ethereum.eth.v1alpha1.ChainStartResponse
|
||||||
13, // 48: ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorIndex:output_type -> ethereum.eth.v1alpha1.ValidatorIndexResponse
|
9, // 48: ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForActivation:output_type -> ethereum.eth.v1alpha1.ValidatorActivationResponse
|
||||||
15, // 49: ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorStatus:output_type -> ethereum.eth.v1alpha1.ValidatorStatusResponse
|
13, // 49: ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorIndex:output_type -> ethereum.eth.v1alpha1.ValidatorIndexResponse
|
||||||
17, // 50: ethereum.eth.v1alpha1.BeaconNodeValidator.MultipleValidatorStatus:output_type -> ethereum.eth.v1alpha1.MultipleValidatorStatusResponse
|
15, // 50: ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorStatus:output_type -> ethereum.eth.v1alpha1.ValidatorStatusResponse
|
||||||
53, // 51: ethereum.eth.v1alpha1.BeaconNodeValidator.GetBlock:output_type -> ethereum.eth.v1alpha1.BeaconBlock
|
17, // 51: ethereum.eth.v1alpha1.BeaconNodeValidator.MultipleValidatorStatus:output_type -> ethereum.eth.v1alpha1.MultipleValidatorStatusResponse
|
||||||
21, // 52: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeBlock:output_type -> ethereum.eth.v1alpha1.ProposeResponse
|
54, // 52: ethereum.eth.v1alpha1.BeaconNodeValidator.GetBlock:output_type -> ethereum.eth.v1alpha1.BeaconBlock
|
||||||
54, // 53: ethereum.eth.v1alpha1.BeaconNodeValidator.GetBeaconBlock:output_type -> ethereum.eth.v1alpha1.GenericBeaconBlock
|
21, // 53: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeBlock:output_type -> ethereum.eth.v1alpha1.ProposeResponse
|
||||||
21, // 54: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeBeaconBlock:output_type -> ethereum.eth.v1alpha1.ProposeResponse
|
55, // 54: ethereum.eth.v1alpha1.BeaconNodeValidator.GetBeaconBlock:output_type -> ethereum.eth.v1alpha1.GenericBeaconBlock
|
||||||
47, // 55: ethereum.eth.v1alpha1.BeaconNodeValidator.PrepareBeaconProposer:output_type -> google.protobuf.Empty
|
21, // 55: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeBeaconBlock:output_type -> ethereum.eth.v1alpha1.ProposeResponse
|
||||||
55, // 56: ethereum.eth.v1alpha1.BeaconNodeValidator.GetAttestationData:output_type -> ethereum.eth.v1alpha1.AttestationData
|
47, // 56: ethereum.eth.v1alpha1.BeaconNodeValidator.PrepareBeaconProposer:output_type -> google.protobuf.Empty
|
||||||
24, // 57: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeAttestation:output_type -> ethereum.eth.v1alpha1.AttestResponse
|
56, // 57: ethereum.eth.v1alpha1.BeaconNodeValidator.GetAttestationData:output_type -> ethereum.eth.v1alpha1.AttestationData
|
||||||
26, // 58: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitAggregateSelectionProof:output_type -> ethereum.eth.v1alpha1.AggregateSelectionResponse
|
24, // 58: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeAttestation:output_type -> ethereum.eth.v1alpha1.AttestResponse
|
||||||
28, // 59: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedAggregateSelectionProof:output_type -> ethereum.eth.v1alpha1.SignedAggregateSubmitResponse
|
26, // 59: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitAggregateSelectionProof:output_type -> ethereum.eth.v1alpha1.AggregateSelectionResponse
|
||||||
22, // 60: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeExit:output_type -> ethereum.eth.v1alpha1.ProposeExitResponse
|
28, // 60: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedAggregateSelectionProof:output_type -> ethereum.eth.v1alpha1.SignedAggregateSubmitResponse
|
||||||
47, // 61: ethereum.eth.v1alpha1.BeaconNodeValidator.SubscribeCommitteeSubnets:output_type -> google.protobuf.Empty
|
22, // 61: ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeExit:output_type -> ethereum.eth.v1alpha1.ProposeExitResponse
|
||||||
34, // 62: ethereum.eth.v1alpha1.BeaconNodeValidator.CheckDoppelGanger:output_type -> ethereum.eth.v1alpha1.DoppelGangerResponse
|
47, // 62: ethereum.eth.v1alpha1.BeaconNodeValidator.SubscribeCommitteeSubnets:output_type -> google.protobuf.Empty
|
||||||
1, // 63: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncMessageBlockRoot:output_type -> ethereum.eth.v1alpha1.SyncMessageBlockRootResponse
|
34, // 63: ethereum.eth.v1alpha1.BeaconNodeValidator.CheckDoppelGanger:output_type -> ethereum.eth.v1alpha1.DoppelGangerResponse
|
||||||
47, // 64: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSyncMessage:output_type -> google.protobuf.Empty
|
1, // 64: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncMessageBlockRoot:output_type -> ethereum.eth.v1alpha1.SyncMessageBlockRootResponse
|
||||||
4, // 65: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncSubcommitteeIndex:output_type -> ethereum.eth.v1alpha1.SyncSubcommitteeIndexResponse
|
47, // 65: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSyncMessage:output_type -> google.protobuf.Empty
|
||||||
56, // 66: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncCommitteeContribution:output_type -> ethereum.eth.v1alpha1.SyncCommitteeContribution
|
4, // 66: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncSubcommitteeIndex:output_type -> ethereum.eth.v1alpha1.SyncSubcommitteeIndexResponse
|
||||||
47, // 67: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedContributionAndProof:output_type -> google.protobuf.Empty
|
57, // 67: ethereum.eth.v1alpha1.BeaconNodeValidator.GetSyncCommitteeContribution:output_type -> ethereum.eth.v1alpha1.SyncCommitteeContribution
|
||||||
5, // 68: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamBlocksAltair:output_type -> ethereum.eth.v1alpha1.StreamBlocksResponse
|
47, // 68: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedContributionAndProof:output_type -> google.protobuf.Empty
|
||||||
43, // [43:69] is the sub-list for method output_type
|
5, // 69: ethereum.eth.v1alpha1.BeaconNodeValidator.StreamBlocksAltair:output_type -> ethereum.eth.v1alpha1.StreamBlocksResponse
|
||||||
17, // [17:43] is the sub-list for method input_type
|
47, // 70: ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitValidatorRegistration:output_type -> google.protobuf.Empty
|
||||||
|
44, // [44:71] is the sub-list for method output_type
|
||||||
|
17, // [17:44] is the sub-list for method input_type
|
||||||
17, // [17:17] is the sub-list for extension type_name
|
17, // [17:17] is the sub-list for extension type_name
|
||||||
17, // [17:17] is the sub-list for extension extendee
|
17, // [17:17] is the sub-list for extension extendee
|
||||||
0, // [0:17] is the sub-list for field type_name
|
0, // [0:17] is the sub-list for field type_name
|
||||||
@@ -4089,6 +4102,7 @@ type BeaconNodeValidatorClient interface {
|
|||||||
GetSyncCommitteeContribution(ctx context.Context, in *SyncCommitteeContributionRequest, opts ...grpc.CallOption) (*SyncCommitteeContribution, error)
|
GetSyncCommitteeContribution(ctx context.Context, in *SyncCommitteeContributionRequest, opts ...grpc.CallOption) (*SyncCommitteeContribution, error)
|
||||||
SubmitSignedContributionAndProof(ctx context.Context, in *SignedContributionAndProof, opts ...grpc.CallOption) (*empty.Empty, error)
|
SubmitSignedContributionAndProof(ctx context.Context, in *SignedContributionAndProof, opts ...grpc.CallOption) (*empty.Empty, error)
|
||||||
StreamBlocksAltair(ctx context.Context, in *StreamBlocksRequest, opts ...grpc.CallOption) (BeaconNodeValidator_StreamBlocksAltairClient, error)
|
StreamBlocksAltair(ctx context.Context, in *StreamBlocksRequest, opts ...grpc.CallOption) (BeaconNodeValidator_StreamBlocksAltairClient, error)
|
||||||
|
SubmitValidatorRegistration(ctx context.Context, in *SignedValidatorRegistrationV1, opts ...grpc.CallOption) (*empty.Empty, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type beaconNodeValidatorClient struct {
|
type beaconNodeValidatorClient struct {
|
||||||
@@ -4428,6 +4442,15 @@ func (x *beaconNodeValidatorStreamBlocksAltairClient) Recv() (*StreamBlocksRespo
|
|||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *beaconNodeValidatorClient) SubmitValidatorRegistration(ctx context.Context, in *SignedValidatorRegistrationV1, opts ...grpc.CallOption) (*empty.Empty, error) {
|
||||||
|
out := new(empty.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitValidatorRegistration", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// BeaconNodeValidatorServer is the server API for BeaconNodeValidator service.
|
// BeaconNodeValidatorServer is the server API for BeaconNodeValidator service.
|
||||||
type BeaconNodeValidatorServer interface {
|
type BeaconNodeValidatorServer interface {
|
||||||
GetDuties(context.Context, *DutiesRequest) (*DutiesResponse, error)
|
GetDuties(context.Context, *DutiesRequest) (*DutiesResponse, error)
|
||||||
@@ -4459,6 +4482,7 @@ type BeaconNodeValidatorServer interface {
|
|||||||
GetSyncCommitteeContribution(context.Context, *SyncCommitteeContributionRequest) (*SyncCommitteeContribution, error)
|
GetSyncCommitteeContribution(context.Context, *SyncCommitteeContributionRequest) (*SyncCommitteeContribution, error)
|
||||||
SubmitSignedContributionAndProof(context.Context, *SignedContributionAndProof) (*empty.Empty, error)
|
SubmitSignedContributionAndProof(context.Context, *SignedContributionAndProof) (*empty.Empty, error)
|
||||||
StreamBlocksAltair(*StreamBlocksRequest, BeaconNodeValidator_StreamBlocksAltairServer) error
|
StreamBlocksAltair(*StreamBlocksRequest, BeaconNodeValidator_StreamBlocksAltairServer) error
|
||||||
|
SubmitValidatorRegistration(context.Context, *SignedValidatorRegistrationV1) (*empty.Empty, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnimplementedBeaconNodeValidatorServer can be embedded to have forward compatible implementations.
|
// UnimplementedBeaconNodeValidatorServer can be embedded to have forward compatible implementations.
|
||||||
@@ -4543,6 +4567,9 @@ func (*UnimplementedBeaconNodeValidatorServer) SubmitSignedContributionAndProof(
|
|||||||
func (*UnimplementedBeaconNodeValidatorServer) StreamBlocksAltair(*StreamBlocksRequest, BeaconNodeValidator_StreamBlocksAltairServer) error {
|
func (*UnimplementedBeaconNodeValidatorServer) StreamBlocksAltair(*StreamBlocksRequest, BeaconNodeValidator_StreamBlocksAltairServer) error {
|
||||||
return status.Errorf(codes.Unimplemented, "method StreamBlocksAltair not implemented")
|
return status.Errorf(codes.Unimplemented, "method StreamBlocksAltair not implemented")
|
||||||
}
|
}
|
||||||
|
func (*UnimplementedBeaconNodeValidatorServer) SubmitValidatorRegistration(context.Context, *SignedValidatorRegistrationV1) (*empty.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method SubmitValidatorRegistration not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterBeaconNodeValidatorServer(s *grpc.Server, srv BeaconNodeValidatorServer) {
|
func RegisterBeaconNodeValidatorServer(s *grpc.Server, srv BeaconNodeValidatorServer) {
|
||||||
s.RegisterService(&_BeaconNodeValidator_serviceDesc, srv)
|
s.RegisterService(&_BeaconNodeValidator_serviceDesc, srv)
|
||||||
@@ -5028,6 +5055,24 @@ func (x *beaconNodeValidatorStreamBlocksAltairServer) Send(m *StreamBlocksRespon
|
|||||||
return x.ServerStream.SendMsg(m)
|
return x.ServerStream.SendMsg(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _BeaconNodeValidator_SubmitValidatorRegistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(SignedValidatorRegistrationV1)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(BeaconNodeValidatorServer).SubmitValidatorRegistration(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitValidatorRegistration",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(BeaconNodeValidatorServer).SubmitValidatorRegistration(ctx, req.(*SignedValidatorRegistrationV1))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
var _BeaconNodeValidator_serviceDesc = grpc.ServiceDesc{
|
var _BeaconNodeValidator_serviceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "ethereum.eth.v1alpha1.BeaconNodeValidator",
|
ServiceName: "ethereum.eth.v1alpha1.BeaconNodeValidator",
|
||||||
HandlerType: (*BeaconNodeValidatorServer)(nil),
|
HandlerType: (*BeaconNodeValidatorServer)(nil),
|
||||||
@@ -5120,6 +5165,10 @@ var _BeaconNodeValidator_serviceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "SubmitSignedContributionAndProof",
|
MethodName: "SubmitSignedContributionAndProof",
|
||||||
Handler: _BeaconNodeValidator_SubmitSignedContributionAndProof_Handler,
|
Handler: _BeaconNodeValidator_SubmitSignedContributionAndProof_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "SubmitValidatorRegistration",
|
||||||
|
Handler: _BeaconNodeValidator_SubmitValidatorRegistration_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{
|
Streams: []grpc.StreamDesc{
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -890,6 +890,40 @@ func request_BeaconNodeValidator_StreamBlocksAltair_0(ctx context.Context, marsh
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func request_BeaconNodeValidator_SubmitValidatorRegistration_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconNodeValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq SignedValidatorRegistrationV1
|
||||||
|
var metadata runtime.ServerMetadata
|
||||||
|
|
||||||
|
newReader, berr := utilities.IOReaderFactory(req.Body)
|
||||||
|
if berr != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
|
||||||
|
}
|
||||||
|
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := client.SubmitValidatorRegistration(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func local_request_BeaconNodeValidator_SubmitValidatorRegistration_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconNodeValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq SignedValidatorRegistrationV1
|
||||||
|
var metadata runtime.ServerMetadata
|
||||||
|
|
||||||
|
newReader, berr := utilities.IOReaderFactory(req.Body)
|
||||||
|
if berr != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
|
||||||
|
}
|
||||||
|
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := server.SubmitValidatorRegistration(ctx, &protoReq)
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// RegisterBeaconNodeValidatorHandlerServer registers the http handlers for service BeaconNodeValidator to "mux".
|
// RegisterBeaconNodeValidatorHandlerServer registers the http handlers for service BeaconNodeValidator to "mux".
|
||||||
// UnaryRPC :call BeaconNodeValidatorServer directly.
|
// UnaryRPC :call BeaconNodeValidatorServer directly.
|
||||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
|
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
|
||||||
@@ -1430,6 +1464,29 @@ func RegisterBeaconNodeValidatorHandlerServer(ctx context.Context, mux *runtime.
|
|||||||
return
|
return
|
||||||
})
|
})
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_BeaconNodeValidator_SubmitValidatorRegistration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
|
defer cancel()
|
||||||
|
var stream runtime.ServerTransportStream
|
||||||
|
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
||||||
|
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||||
|
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitValidatorRegistration")
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := local_request_BeaconNodeValidator_SubmitValidatorRegistration_0(rctx, inboundMarshaler, server, req, pathParams)
|
||||||
|
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||||
|
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_BeaconNodeValidator_SubmitValidatorRegistration_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1991,6 +2048,26 @@ func RegisterBeaconNodeValidatorHandlerClient(ctx context.Context, mux *runtime.
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_BeaconNodeValidator_SubmitValidatorRegistration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
|
defer cancel()
|
||||||
|
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||||
|
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitValidatorRegistration")
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := request_BeaconNodeValidator_SubmitValidatorRegistration_0(rctx, inboundMarshaler, client, req, pathParams)
|
||||||
|
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_BeaconNodeValidator_SubmitValidatorRegistration_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2046,6 +2123,8 @@ var (
|
|||||||
pattern_BeaconNodeValidator_SubmitSignedContributionAndProof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1alpha1", "validator", "signed_contribution_and_proof"}, ""))
|
pattern_BeaconNodeValidator_SubmitSignedContributionAndProof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1alpha1", "validator", "signed_contribution_and_proof"}, ""))
|
||||||
|
|
||||||
pattern_BeaconNodeValidator_StreamBlocksAltair_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"eth", "v1alpha1", "validator", "blocks", "stream"}, ""))
|
pattern_BeaconNodeValidator_StreamBlocksAltair_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"eth", "v1alpha1", "validator", "blocks", "stream"}, ""))
|
||||||
|
|
||||||
|
pattern_BeaconNodeValidator_SubmitValidatorRegistration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1alpha1", "validator", "registration"}, ""))
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -2100,4 +2179,6 @@ var (
|
|||||||
forward_BeaconNodeValidator_SubmitSignedContributionAndProof_0 = runtime.ForwardResponseMessage
|
forward_BeaconNodeValidator_SubmitSignedContributionAndProof_0 = runtime.ForwardResponseMessage
|
||||||
|
|
||||||
forward_BeaconNodeValidator_StreamBlocksAltair_0 = runtime.ForwardResponseStream
|
forward_BeaconNodeValidator_StreamBlocksAltair_0 = runtime.ForwardResponseStream
|
||||||
|
|
||||||
|
forward_BeaconNodeValidator_SubmitValidatorRegistration_0 = runtime.ForwardResponseMessage
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -320,6 +320,13 @@ service BeaconNodeValidator {
|
|||||||
get: "/eth/v1alpha1/validator/blocks/stream"
|
get: "/eth/v1alpha1/validator/blocks/stream"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rpc SubmitValidatorRegistration(SignedValidatorRegistrationV1) returns (google.protobuf.Empty) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/eth/v1alpha1/validator/registration"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncMessageBlockRootResponse for beacon chain validator to retrieve and
|
// SyncMessageBlockRootResponse for beacon chain validator to retrieve and
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ type BlockGenConfig struct {
|
|||||||
// current params in the beacon config.
|
// current params in the beacon config.
|
||||||
func DefaultBlockGenConfig() *BlockGenConfig {
|
func DefaultBlockGenConfig() *BlockGenConfig {
|
||||||
return &BlockGenConfig{
|
return &BlockGenConfig{
|
||||||
NumProposerSlashings: 0,
|
NumProposerSlashings: 2,
|
||||||
NumAttesterSlashings: 0,
|
NumAttesterSlashings: 2,
|
||||||
NumAttestations: 1,
|
NumAttestations: 1,
|
||||||
NumDeposits: 0,
|
NumDeposits: 0,
|
||||||
NumVoluntaryExits: 0,
|
NumVoluntaryExits: 0,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ go_library(
|
|||||||
"aggregate.go",
|
"aggregate.go",
|
||||||
"attest.go",
|
"attest.go",
|
||||||
"attest_protect.go",
|
"attest_protect.go",
|
||||||
|
"builder_registration.go",
|
||||||
"key_reload.go",
|
"key_reload.go",
|
||||||
"log.go",
|
"log.go",
|
||||||
"metrics.go",
|
"metrics.go",
|
||||||
|
|||||||
89
validator/client/builder_registration.go
Normal file
89
validator/client/builder_registration.go
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
package client
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/signing"
|
||||||
|
"github.com/prysmaticlabs/prysm/config/params"
|
||||||
|
types "github.com/prysmaticlabs/prysm/consensus-types/primitives"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
||||||
|
validatorpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/validator-client"
|
||||||
|
"github.com/prysmaticlabs/prysm/time/slots"
|
||||||
|
"go.opencensus.io/trace"
|
||||||
|
"google.golang.org/protobuf/types/known/emptypb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SubmitBuilderValidatorRegistration submits builder validator registration
|
||||||
|
func SubmitBuilderValidatorRegistration(
|
||||||
|
ctx context.Context,
|
||||||
|
validatorClient ethpb.BeaconNodeValidatorClient,
|
||||||
|
nodeClient ethpb.NodeClient,
|
||||||
|
signer signingFunc,
|
||||||
|
reg *ethpb.ValidatorRegistrationV1,
|
||||||
|
) error {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "validator.ProposeBuilderValidatorRegistration")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
genesisResponse, err := nodeClient.GetGenesis(ctx, &emptypb.Empty{})
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "gRPC call to get genesis time failed")
|
||||||
|
}
|
||||||
|
ts := time.Unix(int64(reg.Timestamp), 0)
|
||||||
|
secs := int64(ts.Second()) - genesisResponse.GenesisTime.Seconds
|
||||||
|
currentSlot := types.Slot(uint64(secs) / params.BeaconConfig().SecondsPerSlot)
|
||||||
|
|
||||||
|
sig, err := signBuilderValidatorRegistration(ctx, currentSlot, validatorClient, signer, reg)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "failed to sign builder validator registration obj")
|
||||||
|
}
|
||||||
|
|
||||||
|
signedReg := ðpb.SignedValidatorRegistrationV1{
|
||||||
|
Message: reg,
|
||||||
|
Signature: sig,
|
||||||
|
}
|
||||||
|
if _, err := validatorClient.SubmitValidatorRegistration(ctx, signedReg); err != nil {
|
||||||
|
return errors.Wrap(err, "could not submit signed registration to beacon node")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sings validator registration obj with proposer domain and private key.
|
||||||
|
func signBuilderValidatorRegistration(
|
||||||
|
ctx context.Context,
|
||||||
|
slot types.Slot,
|
||||||
|
validatorClient ethpb.BeaconNodeValidatorClient,
|
||||||
|
signer signingFunc,
|
||||||
|
reg *ethpb.ValidatorRegistrationV1,
|
||||||
|
) ([]byte, error) {
|
||||||
|
req := ðpb.DomainRequest{
|
||||||
|
Epoch: slots.ToEpoch(slot),
|
||||||
|
Domain: []byte{},
|
||||||
|
}
|
||||||
|
|
||||||
|
domain, err := validatorClient.DomainData(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, domainDataErr)
|
||||||
|
}
|
||||||
|
if domain == nil {
|
||||||
|
return nil, errors.New(domainDataErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
exitRoot, err := signing.ComputeSigningRoot(reg, domain.SignatureDomain)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, signingRootErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
sig, err := signer(ctx, &validatorpb.SignRequest{
|
||||||
|
PublicKey: reg.Pubkey,
|
||||||
|
SigningRoot: exitRoot[:],
|
||||||
|
SignatureDomain: domain.SignatureDomain,
|
||||||
|
Object: &validatorpb.SignRequest_Registration{Registration: reg},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, signExitErr)
|
||||||
|
}
|
||||||
|
return sig.Marshal(), nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user