mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-03 01:27:38 +00:00
Make Caplin work with Otterscan (#9115)
* Fixed mispelling in json fields * Added CORS
This commit is contained in:
parent
415b17ca85
commit
3d10cee49b
@ -2,11 +2,14 @@ package beacon_router_configuration
|
|||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
// TODO(enriavil1): Make this configurable via flags
|
|
||||||
type RouterConfiguration struct {
|
type RouterConfiguration struct {
|
||||||
Active bool
|
Active bool
|
||||||
Protocol string
|
Protocol string
|
||||||
Address string
|
Address string
|
||||||
|
// Cors data
|
||||||
|
AllowedOrigins []string
|
||||||
|
AllowedMethods []string
|
||||||
|
AllowCredentials bool
|
||||||
|
|
||||||
ReadTimeTimeout time.Duration
|
ReadTimeTimeout time.Duration
|
||||||
IdleTimeout time.Duration
|
IdleTimeout time.Duration
|
||||||
|
File diff suppressed because one or more lines are too long
@ -10,9 +10,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type genesisResponse struct {
|
type genesisResponse struct {
|
||||||
GenesisTime uint64 `json:"genesis_time,omitempty,string"`
|
GenesisTime uint64 `json:"genesis_time,string"`
|
||||||
GenesisValidatorRoot common.Hash `json:"genesis_validators_root,omitempty"`
|
GenesisValidatorRoot common.Hash `json:"genesis_validators_root"`
|
||||||
GenesisForkVersion libcommon.Bytes4 `json:"genesis_fork_version,omitempty"`
|
GenesisForkVersion libcommon.Bytes4 `json:"genesis_fork_version"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ApiHandler) getGenesis(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) {
|
func (a *ApiHandler) getGenesis(w http.ResponseWriter, r *http.Request) (*beaconResponse, error) {
|
||||||
|
@ -83,7 +83,6 @@ func (a *ApiHandler) init() {
|
|||||||
})
|
})
|
||||||
r.Get("/node/syncing", http.NotFound)
|
r.Get("/node/syncing", http.NotFound)
|
||||||
r.Route("/states", func(r chi.Router) {
|
r.Route("/states", func(r chi.Router) {
|
||||||
r.Get("/head/validators/{index}", http.NotFound) // otterscan
|
|
||||||
r.Route("/{state_id}", func(r chi.Router) {
|
r.Route("/{state_id}", func(r chi.Router) {
|
||||||
r.Get("/randao", beaconhttp.HandleEndpointFunc(a.getRandao))
|
r.Get("/randao", beaconhttp.HandleEndpointFunc(a.getRandao))
|
||||||
r.Get("/committees", beaconhttp.HandleEndpointFunc(a.getCommittees))
|
r.Get("/committees", beaconhttp.HandleEndpointFunc(a.getCommittees))
|
||||||
|
@ -463,7 +463,7 @@ func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
first = false
|
first = false
|
||||||
if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, i, status.String(), balances.Get(i), v.PublicKey(), v.WithdrawalCredentials().String(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil {
|
if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, i, status.String(), balances.Get(i), v.PublicKey(), v.WithdrawalCredentials(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
@ -487,7 +487,7 @@ func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListS
|
|||||||
v := validators.Get(int(idx))
|
v := validators.Get(int(idx))
|
||||||
status := validatorStatusFromValidator(v, stateEpoch, balances.Get(int(idx)))
|
status := validatorStatusFromValidator(v, stateEpoch, balances.Get(int(idx)))
|
||||||
|
|
||||||
if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, idx, status.String(), balances.Get(int(idx)), v.PublicKey(), v.WithdrawalCredentials().String(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil {
|
if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, idx, status.String(), balances.Get(int(idx)), v.PublicKey(), v.WithdrawalCredentials(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,19 +36,19 @@ func TestGetAllValidators(t *testing.T) {
|
|||||||
blockID: "0x" + common.Bytes2Hex(postRoot[:]),
|
blockID: "0x" + common.Bytes2Hex(postRoot[:]),
|
||||||
code: http.StatusOK,
|
code: http.StatusOK,
|
||||||
queryParams: "?id=1,2,3",
|
queryParams: "?id=1,2,3",
|
||||||
expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x307830303166303965643330356330373637643536663162336264623235663330313239383032376638653938613865306364326463626363363630373233643762","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x307830303661646334613165346361626133376335346435366432343131666430646633613130326638343839613463316265353335663466643566383831306339","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x307830303831633835323037386132616434333064343338643765616566633339363436663533383935323932353936626265313939653264376431383834616238","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
blockID: "finalized",
|
blockID: "finalized",
|
||||||
code: http.StatusOK,
|
code: http.StatusOK,
|
||||||
queryParams: "?status=active&id=1,2,3",
|
queryParams: "?status=active&id=1,2,3",
|
||||||
expectedResp: `{"data":[{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x307830303661646334613165346361626133376335346435366432343131666430646633613130326638343839613463316265353335663466643566383831306339","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x307830303831633835323037386132616434333064343338643765616566633339363436663533383935323932353936626265313939653264376431383834616238","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
expectedResp: `{"data":[{"index":"2","status":"active_slashed","balance":"25678253779","validator":{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9","effective_balance":"25000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}},{"index":"3","status":"active_slashed","balance":"35998164834","validator":{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8","effective_balance":"32000000000","slashed":true,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"261","withdrawable_epoch":"8448"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
blockID: "finalized",
|
blockID: "finalized",
|
||||||
code: http.StatusOK,
|
code: http.StatusOK,
|
||||||
queryParams: "?id=0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
|
queryParams: "?id=0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
|
||||||
expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x307830303166303965643330356330373637643536663162336264623235663330313239383032376638653938613865306364326463626363363630373233643762","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
expectedResp: `{"data":[{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}}],"finalized":true,"execution_optimistic":false}` + "\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
blockID: "alabama",
|
blockID: "alabama",
|
||||||
@ -68,6 +68,7 @@ func TestGetAllValidators(t *testing.T) {
|
|||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// unmarshal the json
|
// unmarshal the json
|
||||||
out, err := io.ReadAll(resp.Body)
|
out, err := io.ReadAll(resp.Body)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -160,13 +161,13 @@ func TestGetSingleValidator(t *testing.T) {
|
|||||||
blockID: "0x" + common.Bytes2Hex(postRoot[:]),
|
blockID: "0x" + common.Bytes2Hex(postRoot[:]),
|
||||||
code: http.StatusOK,
|
code: http.StatusOK,
|
||||||
validatorIdx: "1",
|
validatorIdx: "1",
|
||||||
expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x307830303166303965643330356330373637643536663162336264623235663330313239383032376638653938613865306364326463626363363630373233643762","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n",
|
expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
blockID: "finalized",
|
blockID: "finalized",
|
||||||
code: http.StatusOK,
|
code: http.StatusOK,
|
||||||
validatorIdx: "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
|
validatorIdx: "0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
|
||||||
expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x307830303166303965643330356330373637643536663162336264623235663330313239383032376638653938613865306364326463626363363630373233643762","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n",
|
expectedResp: `{"data":{"index":"1","status":"withdrawal_possible","balance":"20125000000","validator":{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b","effective_balance":"20000000000","slashed":false,"activation_eligibility_epoch":"0","activation_epoch":"0","exit_epoch":"253","withdrawable_epoch":"257"}},"finalized":true,"execution_optimistic":false}` + "\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
blockID: "alabama",
|
blockID: "alabama",
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/go-chi/chi/v5"
|
"github.com/go-chi/chi/v5"
|
||||||
|
"github.com/go-chi/cors"
|
||||||
"github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration"
|
"github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration"
|
||||||
"github.com/ledgerwatch/erigon/cl/beacon/handler"
|
"github.com/ledgerwatch/erigon/cl/beacon/handler"
|
||||||
"github.com/ledgerwatch/erigon/cl/beacon/validatorapi"
|
"github.com/ledgerwatch/erigon/cl/beacon/validatorapi"
|
||||||
@ -25,6 +26,14 @@ func ListenAndServe(beaconHandler *LayeredBeaconHandler, routerCfg beacon_router
|
|||||||
}
|
}
|
||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
mux := chi.NewRouter()
|
mux := chi.NewRouter()
|
||||||
|
|
||||||
|
mux.Use(cors.Handler(
|
||||||
|
cors.Options{
|
||||||
|
AllowedOrigins: routerCfg.AllowedOrigins,
|
||||||
|
AllowedMethods: routerCfg.AllowedMethods,
|
||||||
|
AllowCredentials: routerCfg.AllowCredentials,
|
||||||
|
MaxAge: 4,
|
||||||
|
}))
|
||||||
// enforce json content type
|
// enforce json content type
|
||||||
mux.Use(func(h http.Handler) http.Handler {
|
mux.Use(func(h http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
@ -93,6 +93,7 @@ func (v *ValidatorApiHandler) GetEthV1BeaconStatesStateIdFork(w http.ResponseWri
|
|||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *ValidatorApiHandler) GetEthV1BeaconStatesStateIdValidatorsValidatorId(w http.ResponseWriter, r *http.Request) (any, error) {
|
func (v *ValidatorApiHandler) GetEthV1BeaconStatesStateIdValidatorsValidatorId(w http.ResponseWriter, r *http.Request) (any, error) {
|
||||||
stateId := chi.URLParam(r, "state_id")
|
stateId := chi.URLParam(r, "state_id")
|
||||||
// grab the correct state for the given state id
|
// grab the correct state for the given state id
|
||||||
|
@ -36,11 +36,10 @@ func (v *ValidatorApiHandler) Route(r chi.Router) {
|
|||||||
r.Route("/eth", func(r chi.Router) {
|
r.Route("/eth", func(r chi.Router) {
|
||||||
r.Route("/v1", func(r chi.Router) {
|
r.Route("/v1", func(r chi.Router) {
|
||||||
r.Route("/beacon", func(r chi.Router) {
|
r.Route("/beacon", func(r chi.Router) {
|
||||||
r.Get("/genesis", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconGenesis))
|
|
||||||
r.Route("/states", func(r chi.Router) {
|
r.Route("/states", func(r chi.Router) {
|
||||||
r.Route("/{state_id}", func(r chi.Router) {
|
r.Route("/{state_id}", func(r chi.Router) {
|
||||||
r.Get("/fork", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdFork))
|
r.Get("/fork", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdFork))
|
||||||
r.Get("/validators/{validator_id}", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdValidatorsValidatorId))
|
// r.Get("/validators/{validator_id}", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdValidatorsValidatorId))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
r.Post("/blocks", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconBlocks))
|
r.Post("/blocks", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconBlocks))
|
||||||
@ -51,7 +50,6 @@ func (v *ValidatorApiHandler) Route(r chi.Router) {
|
|||||||
})
|
})
|
||||||
r.Get("/node/syncing", beaconhttp.HandleEndpointFunc(v.GetEthV1NodeSyncing))
|
r.Get("/node/syncing", beaconhttp.HandleEndpointFunc(v.GetEthV1NodeSyncing))
|
||||||
})
|
})
|
||||||
r.Get("/config/spec", beaconhttp.HandleEndpointFunc(v.GetEthV1ConfigSpec))
|
|
||||||
r.Get("/events", v.EventSourceGetV1Events)
|
r.Get("/events", v.EventSourceGetV1Events)
|
||||||
r.Route("/validator", func(r chi.Router) {
|
r.Route("/validator", func(r chi.Router) {
|
||||||
// implemented by archive api (for now)
|
// implemented by archive api (for now)
|
||||||
|
@ -65,7 +65,7 @@ func (a *SignedAggregateAndProof) HashSSZ() ([32]byte, error) {
|
|||||||
* and signature is the aggregate BLS signature of the committee.
|
* and signature is the aggregate BLS signature of the committee.
|
||||||
*/
|
*/
|
||||||
type SyncAggregate struct {
|
type SyncAggregate struct {
|
||||||
SyncCommiteeBits libcommon.Bytes64 `json:"sync_commitee_bits"`
|
SyncCommiteeBits libcommon.Bytes64 `json:"sync_committee_bits"`
|
||||||
SyncCommiteeSignature libcommon.Bytes96 `json:"signature"`
|
SyncCommiteeSignature libcommon.Bytes96 `json:"signature"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ type BeaconBody struct {
|
|||||||
// Data related to the Ethereum 1.0 chain
|
// Data related to the Ethereum 1.0 chain
|
||||||
Eth1Data *Eth1Data `json:"eth1_data"`
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
||||||
// A byte array used to customize validators' behavior
|
// A byte array used to customize validators' behavior
|
||||||
Graffiti libcommon.Hash `json:"graffit"`
|
Graffiti libcommon.Hash `json:"graffiti"`
|
||||||
// A list of slashing events for validators who included invalid blocks in the chain
|
// A list of slashing events for validators who included invalid blocks in the chain
|
||||||
ProposerSlashings *solid.ListSSZ[*ProposerSlashing] `json:"proposer_slashings"`
|
ProposerSlashings *solid.ListSSZ[*ProposerSlashing] `json:"proposer_slashings"`
|
||||||
// A list of slashing events for validators who included invalid attestations in the chain
|
// A list of slashing events for validators who included invalid attestations in the chain
|
||||||
|
@ -32,7 +32,7 @@ type BlindedBeaconBody struct {
|
|||||||
// Data related to the Ethereum 1.0 chain
|
// Data related to the Ethereum 1.0 chain
|
||||||
Eth1Data *Eth1Data `json:"eth1_data"`
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
||||||
// A byte array used to customize validators' behavior
|
// A byte array used to customize validators' behavior
|
||||||
Graffiti libcommon.Hash `json:"graffit"`
|
Graffiti libcommon.Hash `json:"graffiti"`
|
||||||
// A list of slashing events for validators who included invalid blocks in the chain
|
// A list of slashing events for validators who included invalid blocks in the chain
|
||||||
ProposerSlashings *solid.ListSSZ[*ProposerSlashing] `json:"proposer_slashings"`
|
ProposerSlashings *solid.ListSSZ[*ProposerSlashing] `json:"proposer_slashings"`
|
||||||
// A list of slashing events for validators who included invalid attestations in the chain
|
// A list of slashing events for validators who included invalid attestations in the chain
|
||||||
|
@ -65,7 +65,7 @@ func (a *SignedContributionAndProof) HashSSZ() ([32]byte, error) {
|
|||||||
* and signature is the aggregate BLS signature of the committee.
|
* and signature is the aggregate BLS signature of the committee.
|
||||||
*/
|
*/
|
||||||
type SyncContribution struct {
|
type SyncContribution struct {
|
||||||
SyncCommiteeBits libcommon.Bytes64 `json:"sync_commitee_bits"`
|
SyncCommiteeBits libcommon.Bytes64 `json:"sync_committee_bits"`
|
||||||
SyncCommiteeSignature libcommon.Bytes96 `json:"signature"`
|
SyncCommiteeSignature libcommon.Bytes96 `json:"signature"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,19 +47,19 @@ func runTest(t *testing.T, blocks []*cltypes.SignedBeaconBlock, preState, postSt
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStateAntiquaryCapella(t *testing.T) {
|
func TestStateAntiquaryCapella(t *testing.T) {
|
||||||
t.Skip()
|
//t.Skip()
|
||||||
blocks, preState, postState := tests.GetCapellaRandom()
|
blocks, preState, postState := tests.GetCapellaRandom()
|
||||||
runTest(t, blocks, preState, postState)
|
runTest(t, blocks, preState, postState)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStateAntiquaryPhase0(t *testing.T) {
|
func TestStateAntiquaryPhase0(t *testing.T) {
|
||||||
t.Skip()
|
//t.Skip()
|
||||||
blocks, preState, postState := tests.GetPhase0Random()
|
blocks, preState, postState := tests.GetPhase0Random()
|
||||||
runTest(t, blocks, preState, postState)
|
runTest(t, blocks, preState, postState)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStateAntiquaryBellatrix(t *testing.T) {
|
func TestStateAntiquaryBellatrix(t *testing.T) {
|
||||||
t.Skip()
|
//t.Skip()
|
||||||
blocks, preState, postState := tests.GetBellatrixRandom()
|
blocks, preState, postState := tests.GetBellatrixRandom()
|
||||||
runTest(t, blocks, preState, postState)
|
runTest(t, blocks, preState, postState)
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,10 @@ type CaplinCliCfg struct {
|
|||||||
EngineAPIPort int `json:"engine_api_port"`
|
EngineAPIPort int `json:"engine_api_port"`
|
||||||
JwtSecret []byte
|
JwtSecret []byte
|
||||||
|
|
||||||
|
AllowedMethods []string `json:"allowed_methods"`
|
||||||
|
AllowedOrigins []string `json:"allowed_origins"`
|
||||||
|
AllowCredentials bool `json:"allow_credentials"`
|
||||||
|
|
||||||
InitalState *state.CachingBeaconState
|
InitalState *state.CachingBeaconState
|
||||||
Dirs datadir.Dirs
|
Dirs datadir.Dirs
|
||||||
}
|
}
|
||||||
@ -72,6 +76,9 @@ func SetupCaplinCli(ctx *cli.Context) (cfg *CaplinCliCfg, err error) {
|
|||||||
cfg.BeaconApiReadTimeout = time.Duration(ctx.Uint64(caplinflags.BeaconApiReadTimeout.Name)) * time.Second
|
cfg.BeaconApiReadTimeout = time.Duration(ctx.Uint64(caplinflags.BeaconApiReadTimeout.Name)) * time.Second
|
||||||
cfg.BeaconApiWriteTimeout = time.Duration(ctx.Uint(caplinflags.BeaconApiWriteTimeout.Name)) * time.Second
|
cfg.BeaconApiWriteTimeout = time.Duration(ctx.Uint(caplinflags.BeaconApiWriteTimeout.Name)) * time.Second
|
||||||
cfg.BeaconAddr = fmt.Sprintf("%s:%d", ctx.String(caplinflags.BeaconApiAddr.Name), ctx.Int(caplinflags.BeaconApiPort.Name))
|
cfg.BeaconAddr = fmt.Sprintf("%s:%d", ctx.String(caplinflags.BeaconApiAddr.Name), ctx.Int(caplinflags.BeaconApiPort.Name))
|
||||||
|
cfg.AllowCredentials = ctx.Bool(utils.BeaconApiAllowCredentialsFlag.Name)
|
||||||
|
cfg.AllowedMethods = ctx.StringSlice(utils.BeaconApiAllowMethodsFlag.Name)
|
||||||
|
cfg.AllowedOrigins = ctx.StringSlice(utils.BeaconApiAllowOriginsFlag.Name)
|
||||||
cfg.BeaconProtocol = "tcp"
|
cfg.BeaconProtocol = "tcp"
|
||||||
cfg.RecordMode = ctx.Bool(caplinflags.RecordModeFlag.Name)
|
cfg.RecordMode = ctx.Bool(caplinflags.RecordModeFlag.Name)
|
||||||
cfg.RecordDir = ctx.String(caplinflags.RecordModeDir.Name)
|
cfg.RecordDir = ctx.String(caplinflags.RecordModeDir.Name)
|
||||||
|
@ -23,6 +23,9 @@ var CliFlags = []cli.Flag{
|
|||||||
&EngineApiPortFlag,
|
&EngineApiPortFlag,
|
||||||
&JwtSecret,
|
&JwtSecret,
|
||||||
&utils.DataDirFlag,
|
&utils.DataDirFlag,
|
||||||
|
&utils.BeaconApiAllowCredentialsFlag,
|
||||||
|
&utils.BeaconApiAllowMethodsFlag,
|
||||||
|
&utils.BeaconApiAllowOriginsFlag,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -56,7 +59,6 @@ var (
|
|||||||
Usage: "sets the port to listen for beacon api requests",
|
Usage: "sets the port to listen for beacon api requests",
|
||||||
Value: 5555,
|
Value: 5555,
|
||||||
}
|
}
|
||||||
|
|
||||||
BeaconDBModeFlag = cli.StringFlag{
|
BeaconDBModeFlag = cli.StringFlag{
|
||||||
Name: "beacon-db-mode",
|
Name: "beacon-db-mode",
|
||||||
Usage: "level of storing on beacon chain, minimal(only 500k blocks stored), full (all blocks stored), light (no blocks stored)",
|
Usage: "level of storing on beacon chain, minimal(only 500k blocks stored), full (all blocks stored), light (no blocks stored)",
|
||||||
|
@ -132,11 +132,14 @@ func runCaplinNode(cliCtx *cli.Context) error {
|
|||||||
snapshotVersion := snapcfg.KnownCfg(cliCtx.String(utils.ChainFlag.Name), 0).Version
|
snapshotVersion := snapcfg.KnownCfg(cliCtx.String(utils.ChainFlag.Name), 0).Version
|
||||||
|
|
||||||
return caplin1.RunCaplinPhase1(ctx, sentinel, executionEngine, cfg.BeaconCfg, cfg.GenesisCfg, state, caplinFreezer, cfg.Dirs, snapshotVersion, beacon_router_configuration.RouterConfiguration{
|
return caplin1.RunCaplinPhase1(ctx, sentinel, executionEngine, cfg.BeaconCfg, cfg.GenesisCfg, state, caplinFreezer, cfg.Dirs, snapshotVersion, beacon_router_configuration.RouterConfiguration{
|
||||||
Protocol: cfg.BeaconProtocol,
|
Protocol: cfg.BeaconProtocol,
|
||||||
Address: cfg.BeaconAddr,
|
Address: cfg.BeaconAddr,
|
||||||
ReadTimeTimeout: cfg.BeaconApiReadTimeout,
|
ReadTimeTimeout: cfg.BeaconApiReadTimeout,
|
||||||
WriteTimeout: cfg.BeaconApiWriteTimeout,
|
WriteTimeout: cfg.BeaconApiWriteTimeout,
|
||||||
IdleTimeout: cfg.BeaconApiWriteTimeout,
|
IdleTimeout: cfg.BeaconApiWriteTimeout,
|
||||||
Active: !cfg.NoBeaconApi,
|
Active: !cfg.NoBeaconApi,
|
||||||
|
AllowedOrigins: cfg.AllowedOrigins,
|
||||||
|
AllowedMethods: cfg.AllowedMethods,
|
||||||
|
AllowCredentials: cfg.AllowCredentials,
|
||||||
}, nil, nil, false, false, historyDB, indiciesDB)
|
}, nil, nil, false, false, historyDB, indiciesDB)
|
||||||
}
|
}
|
||||||
|
@ -916,6 +916,21 @@ var (
|
|||||||
Usage: "enables archival node in caplin (Experimental, does not work)",
|
Usage: "enables archival node in caplin (Experimental, does not work)",
|
||||||
Value: false,
|
Value: false,
|
||||||
}
|
}
|
||||||
|
BeaconApiAllowCredentialsFlag = cli.BoolFlag{
|
||||||
|
Name: "beacon.api.cors.allow-credentials",
|
||||||
|
Usage: "set the cors' allow credentials",
|
||||||
|
Value: false,
|
||||||
|
}
|
||||||
|
BeaconApiAllowMethodsFlag = cli.StringSliceFlag{
|
||||||
|
Name: "beacon.api.cors.allow-methods",
|
||||||
|
Usage: "set the cors' allow methods",
|
||||||
|
Value: cli.NewStringSlice("GET", "POST", "PUT", "DELETE", "OPTIONS"),
|
||||||
|
}
|
||||||
|
BeaconApiAllowOriginsFlag = cli.StringSliceFlag{
|
||||||
|
Name: "beacon.api.cors.allow-origins",
|
||||||
|
Usage: "set the cors' allow origins",
|
||||||
|
Value: cli.NewStringSlice(),
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var MetricFlags = []cli.Flag{&MetricsEnabledFlag, &MetricsHTTPFlag, &MetricsPortFlag}
|
var MetricFlags = []cli.Flag{&MetricsEnabledFlag, &MetricsHTTPFlag, &MetricsPortFlag}
|
||||||
@ -1543,6 +1558,9 @@ func setBeaconAPI(ctx *cli.Context, cfg *ethconfig.Config) {
|
|||||||
cfg.BeaconRouter.ReadTimeTimeout = time.Duration(ctx.Uint64(BeaconApiReadTimeoutFlag.Name)) * time.Second
|
cfg.BeaconRouter.ReadTimeTimeout = time.Duration(ctx.Uint64(BeaconApiReadTimeoutFlag.Name)) * time.Second
|
||||||
cfg.BeaconRouter.WriteTimeout = time.Duration(ctx.Uint64(BeaconApiWriteTimeoutFlag.Name)) * time.Second
|
cfg.BeaconRouter.WriteTimeout = time.Duration(ctx.Uint64(BeaconApiWriteTimeoutFlag.Name)) * time.Second
|
||||||
cfg.BeaconRouter.IdleTimeout = time.Duration(ctx.Uint64(BeaconApiIdleTimeoutFlag.Name)) * time.Second
|
cfg.BeaconRouter.IdleTimeout = time.Duration(ctx.Uint64(BeaconApiIdleTimeoutFlag.Name)) * time.Second
|
||||||
|
cfg.BeaconRouter.AllowedMethods = ctx.StringSlice(BeaconApiAllowMethodsFlag.Name)
|
||||||
|
cfg.BeaconRouter.AllowedOrigins = ctx.StringSlice(BeaconApiAllowOriginsFlag.Name)
|
||||||
|
cfg.BeaconRouter.AllowCredentials = ctx.Bool(BeaconApiAllowCredentialsFlag.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setCaplin(ctx *cli.Context, cfg *ethconfig.Config) {
|
func setCaplin(ctx *cli.Context, cfg *ethconfig.Config) {
|
||||||
|
1
go.mod
1
go.mod
@ -38,6 +38,7 @@ require (
|
|||||||
github.com/gballet/go-verkle v0.0.0-20221121182333-31427a1f2d35
|
github.com/gballet/go-verkle v0.0.0-20221121182333-31427a1f2d35
|
||||||
github.com/gfx-labs/sse v0.0.0-20231226060816-f747e26a9baa
|
github.com/gfx-labs/sse v0.0.0-20231226060816-f747e26a9baa
|
||||||
github.com/go-chi/chi/v5 v5.0.10
|
github.com/go-chi/chi/v5 v5.0.10
|
||||||
|
github.com/go-chi/cors v1.2.1
|
||||||
github.com/goccy/go-json v0.9.11
|
github.com/goccy/go-json v0.9.11
|
||||||
github.com/gofrs/flock v0.8.1
|
github.com/gofrs/flock v0.8.1
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||||
|
2
go.sum
2
go.sum
@ -321,6 +321,8 @@ github.com/glycerine/goconvey v0.0.0-20190315024820-982ee783a72e/go.mod h1:Ogl1T
|
|||||||
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
||||||
github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk=
|
github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk=
|
||||||
github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||||
|
github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
|
||||||
|
github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
|
||||||
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
@ -170,6 +170,9 @@ var DefaultFlags = []cli.Flag{
|
|||||||
|
|
||||||
&utils.BeaconAPIFlag,
|
&utils.BeaconAPIFlag,
|
||||||
&utils.BeaconApiAddrFlag,
|
&utils.BeaconApiAddrFlag,
|
||||||
|
&utils.BeaconApiAllowMethodsFlag,
|
||||||
|
&utils.BeaconApiAllowOriginsFlag,
|
||||||
|
&utils.BeaconApiAllowCredentialsFlag,
|
||||||
&utils.BeaconApiPortFlag,
|
&utils.BeaconApiPortFlag,
|
||||||
&utils.BeaconApiReadTimeoutFlag,
|
&utils.BeaconApiReadTimeoutFlag,
|
||||||
&utils.BeaconApiWriteTimeoutFlag,
|
&utils.BeaconApiWriteTimeoutFlag,
|
||||||
|
Loading…
Reference in New Issue
Block a user