Add SpecialRecord Type and Updated Config (#624)

This commit is contained in:
terence tsao
2018-10-06 08:30:15 -07:00
committed by GitHub
parent e79655183f
commit 1c7af71774
14 changed files with 381 additions and 187 deletions

View File

@@ -21,6 +21,8 @@ go_library(
go_test(
name = "go_default_test",
size = "large",
timeout = "short",
srcs = [
"incentives_test.go",
"sharding_test.go",

View File

@@ -87,7 +87,7 @@ func SlotMaxInterestRate(dynasty uint64, validators []*pb.ValidatorRecord) float
// quadraticPenaltyQuotient is the quotient that will be used to apply penalties to offline
// validators.
func quadraticPenaltyQuotient() uint64 {
dropTimeFactor := params.GetConfig().SqrtDropTime / params.GetConfig().SlotDuration
dropTimeFactor := params.GetConfig().SqrtExpDropTime / params.GetConfig().SlotDuration
return dropTimeFactor * dropTimeFactor
}

View File

@@ -122,8 +122,7 @@ func TestSlotMaxInterestRate(t *testing.T) {
func TestQuadraticPenaltyQuotient(t *testing.T) {
penaltyQuotient := quadraticPenaltyQuotient()
if penaltyQuotient != uint64(math.Pow(math.Pow(2, 17), 2)) {
if penaltyQuotient != uint64(math.Pow(math.Pow(2, 13), 2)) {
t.Errorf("incorrect penalty quotient %d", penaltyQuotient)
}
}
@@ -168,7 +167,7 @@ func TestPenaltyCrosslink(t *testing.T) {
quadraticQuotient := quadraticPenaltyQuotient()
PenaliseValidatorCrosslink(timeSinceConfirmation, rewardQuotient, validator)
expectedBalance := 1e18 - (1e18/rewardQuotient + 1e18*10/quadraticQuotient)
expectedBalance := 1e18 - (1e18/rewardQuotient + 1e18*timeSinceConfirmation/quadraticQuotient)
if validator.Balance != expectedBalance {
t.Fatalf("balances not updated correctly %d, %d", validator.Balance, expectedBalance)

View File

@@ -37,12 +37,13 @@ func TestGetShardAndCommitteesForSlots(t *testing.T) {
}
}
func TestMaxValidators(t *testing.T) {
// Create more validators than MaxValidators defined in config, this should fail.
var validators []*pb.ValidatorRecord
for i := 0; i < params.GetConfig().MaxValidators+1; i++ {
validator := &pb.ValidatorRecord{StartDynasty: 1, EndDynasty: 100}
validators = append(validators, validator)
func TestExceedingMaxValidatorsFails(t *testing.T) {
// Create more validators than ModuloBias defined in config, this should fail.
size := params.GetConfig().ModuloBias + 1
validators := make([]*pb.ValidatorRecord, size)
validator := &pb.ValidatorRecord{StartDynasty: 1, EndDynasty: 100}
for i := 0; i < size; i++ {
validators[i] = validator
}
// ValidatorsBySlotShard should fail the same.
@@ -51,6 +52,19 @@ func TestMaxValidators(t *testing.T) {
}
}
func BenchmarkMaxValidators(b *testing.B) {
var validators []*pb.ValidatorRecord
validator := &pb.ValidatorRecord{StartDynasty: 1, EndDynasty: 100}
for i := 0; i < params.GetConfig().ModuloBias; i++ {
validators = append(validators, validator)
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
ShuffleValidatorsToCommittees(common.Hash{'A'}, validators, 1, 0)
}
}
func TestShuffleActiveValidators(t *testing.T) {
// Create 1000 validators in ActiveValidators.
var validators []*pb.ValidatorRecord

View File

@@ -14,7 +14,7 @@ const bitsInByte = 8
// ActiveValidatorIndices filters out active validators based on start and end dynasty
// and returns their indices in a list.
func ActiveValidatorIndices(validators []*pb.ValidatorRecord, dynasty uint64) []uint32 {
var indices []uint32
var indices = make([]uint32, 0, len(validators))
for i := 0; i < len(validators); i++ {
if validators[i].StartDynasty <= dynasty && dynasty < validators[i].EndDynasty {
indices = append(indices, uint32(i))

View File

@@ -1,4 +1,4 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
@@ -6,3 +6,9 @@ go_library(
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/params",
visibility = ["//beacon-chain:__subpackages__"],
)
go_test(
name = "go_default_test",
srcs = ["config_test.go"],
embed = [":go_default_library"],
)

View File

@@ -8,57 +8,100 @@ import (
var env = "default"
// ValidatorStatusCode defines which stage a validator is in.
type ValidatorStatusCode int
// SpecialRecordType defines type of special record this message represents.
type SpecialRecordType int
// ValidatorSetDeltaFlags is used for light client to track validator entries.
type ValidatorSetDeltaFlags int
// Config contains configs for node to participate in beacon chain.
type Config struct {
ShardCount int // ShardCount is a fixed number.
DefaultBalance *big.Int // DefaultBalance of a validator in wei.
MaxValidators int // MaxValidators in the protocol.
Cofactor int // Cofactor is used cutoff algorithm to select slot and shard cutoffs.
ShardCount int // ShardCount is the fixed number of shards in Ethereum 2.0.
DepositSize *big.Int // DepositSize is how much a validator has deposited in wei.
BootstrappedValidatorsCount int // BootstrappedValidatorsCount is the number of validators we seed the first crystallized state.
ModuloBias int // ModuloBias is the upper bound of validator shuffle function. Can shuffle validator lists up to that size.
EtherDenomination int // EtherDenomination is the denomination of ether in wei.
CycleLength uint64 // CycleLength is the beacon chain cycle length in slots.
SlotDuration uint64 // SlotDuration in seconds.
CycleLength uint64 // CycleLength is one beacon chain cycle length in slots.
SlotDuration uint64 // SlotDuration is how many seconds are in a single slot.
MinCommiteeSize uint64 // MinDynastyLength is the slots needed before dynasty transition happens.
DefaultEndDynasty uint64 // DefaultEndDynasty is the upper bound of dynasty. We use it to track queued and exited validators.
MinDynastyLength uint64 // MinCommiteeSize is the minimal number of validator needs to be in a committee.
BaseRewardQuotient uint64 // BaseRewardQuotient is used to calculate validator per-slot interest rate.
SqrtDropTime uint64 // SqrtDropTime is a constant to reflect time it takes to cut offline validators deposits by 39.4%.
SqrtExpDropTime uint64 // SqrtEDropTime is a constant to reflect time it takes to cut offline validators deposits by 39.4%.
GenesisTime time.Time // GenesisTime used by the protocol.
LogOutMessage string // This is the message a validator will send in order to log out.
WithdrawalPeriod uint64 // WithdrawalPeriod is the number of slots between a validator exit and validator balance being withdrawable.
MaxValidatorChurnQuotient uint64 // MaxValidatorChurnQuotient defines the quotient how many validators can change during each dynasty.
}
var defaultConfig = &Config{
GenesisTime: time.Date(2018, 9, 0, 0, 0, 0, 0, time.UTC),
ModuloBias: 16777216,
CycleLength: uint64(64),
ShardCount: 1024,
DefaultBalance: new(big.Int).Div(big.NewInt(32), big.NewInt(int64(1e18))),
MaxValidators: 4194304,
EtherDenomination: 1e18,
DepositSize: new(big.Int).Div(big.NewInt(32), big.NewInt(int64(1e18))),
SlotDuration: uint64(8),
Cofactor: 19,
MinCommiteeSize: uint64(128),
DefaultEndDynasty: uint64(999999999999999999),
BootstrappedValidatorsCount: 1000,
MinDynastyLength: uint64(256),
EtherDenomination: 1e18,
BaseRewardQuotient: uint64(32768),
SqrtDropTime: uint64(1048576),
SqrtExpDropTime: uint64(65536),
WithdrawalPeriod: uint64(524288),
MaxValidatorChurnQuotient: uint64(32),
}
var demoConfig = &Config{
GenesisTime: time.Now(),
CycleLength: uint64(5),
ShardCount: 3,
DefaultBalance: new(big.Int).Div(big.NewInt(32), big.NewInt(int64(1e18))),
MaxValidators: 10,
SlotDuration: uint64(8),
Cofactor: 19,
MinCommiteeSize: uint64(3),
DefaultEndDynasty: uint64(999999999999999999),
MinDynastyLength: uint64(256),
EtherDenomination: 1e18,
BaseRewardQuotient: uint64(32768),
SqrtDropTime: uint64(1048576),
GenesisTime: time.Now(),
ModuloBias: 16777216,
CycleLength: uint64(5),
ShardCount: 3,
EtherDenomination: 1e18,
DepositSize: new(big.Int).Div(big.NewInt(32), big.NewInt(int64(1e18))),
SlotDuration: uint64(8),
MinCommiteeSize: uint64(3),
DefaultEndDynasty: uint64(999999999999999999),
MinDynastyLength: uint64(256),
BaseRewardQuotient: uint64(32768),
SqrtExpDropTime: uint64(65536),
WithdrawalPeriod: uint64(128),
MaxValidatorChurnQuotient: uint64(32),
}
const (
// PendingActivation means a validator is queued and waiting to be active.
PendingActivation ValidatorStatusCode = iota
// Active means a validator is participating validator duties.
Active
// PendingExit means a validator is waiting to exit.
PendingExit
// PendingWithdraw means a validator is waiting to get balance back.
PendingWithdraw
// Withdrawn means a validator has successfully withdrawn balance.
Withdrawn
// Penalized means a validator did something bad and got slashed.
Penalized = 128
)
const (
// Logout means a validator is requesting to exit the validator pool.
Logout SpecialRecordType = iota
// CasperSlashing means a validator has committed slashing penalty, you want to submit a msg
// to report and earn rewards.
CasperSlashing
)
const (
// Entry means this is an entry message for light client to track overall validator status.
Entry ValidatorSetDeltaFlags = iota
// Exit means this is an exit message for light client to track overall validator status.
Exit
)
// GetConfig retrieves beacon node config.
func GetConfig() *Config {
switch env {

View File

@@ -0,0 +1,54 @@
package params
import (
"testing"
)
func TestValidatorStatusCode(t *testing.T) {
tests := []struct {
a ValidatorStatusCode
b int
}{
{a: PendingActivation, b: 0},
{a: Active, b: 1},
{a: PendingExit, b: 2},
{a: PendingWithdraw, b: 3},
{a: Withdrawn, b: 4},
{a: Penalized, b: 128},
}
for _, tt := range tests {
if int(tt.a) != tt.b {
t.Errorf("Incorrect validator status code. Wanted: %d, Got: %d", int(tt.a), tt.b)
}
}
}
func TestSpecialRecordTypes(t *testing.T) {
tests := []struct {
a SpecialRecordType
b int
}{
{a: Logout, b: 0},
{a: CasperSlashing, b: 1},
}
for _, tt := range tests {
if int(tt.a) != tt.b {
t.Errorf("Incorrect special record types. Wanted: %d, Got: %d", int(tt.a), tt.b)
}
}
}
func TestValidatorSetDeltaFlags(t *testing.T) {
tests := []struct {
a ValidatorSetDeltaFlags
b int
}{
{a: Entry, b: 0},
{a: Exit, b: 1},
}
for _, tt := range tests {
if int(tt.a) != tt.b {
t.Errorf("Incorrect validator set delta flags. Wanted: %d, Got: %d", int(tt.a), tt.b)
}
}
}

View File

@@ -33,7 +33,7 @@ func initialValidators() []*pb.ValidatorRecord {
validator := &pb.ValidatorRecord{
StartDynasty: 0,
EndDynasty: params.GetConfig().DefaultEndDynasty,
Balance: params.GetConfig().DefaultBalance.Uint64(),
Balance: params.GetConfig().DepositSize.Uint64(),
WithdrawalAddress: []byte{},
PublicKey: []byte{},
}

View File

@@ -281,9 +281,11 @@ func TestNewDynastyRecalculationsInvalid(t *testing.T) {
}
// Negative test case, shuffle validators with more than MaxValidators.
var validators []*pb.ValidatorRecord
for i := 0; i < params.GetConfig().MaxValidators+1; i++ {
validators = append(validators, &pb.ValidatorRecord{StartDynasty: 0, EndDynasty: params.GetConfig().DefaultEndDynasty})
size := params.GetConfig().ModuloBias + 1
validators := make([]*pb.ValidatorRecord, size)
validator := &pb.ValidatorRecord{StartDynasty: 0, EndDynasty: params.GetConfig().DefaultEndDynasty}
for i := 0; i < size; i++ {
validators[i] = validator
}
cState.data.Validators = validators
if _, _, err := cState.newDynastyRecalculations([32]byte{'A'}); err == nil {

View File

@@ -12,16 +12,19 @@ import (
// ShuffleIndices returns a list of pseudorandomly sampled
// indices. This is used to use to select attesters and proposers.
func ShuffleIndices(seed common.Hash, validatorList []uint32) ([]uint32, error) {
if len(validatorList) > params.GetConfig().MaxValidators {
return nil, errors.New("Validator count has exceeded MaxValidator Count")
// Since we are consuming 3 bytes of entropy at a time in the loop,
// we have a bias at 2**24, this check defines our max list size and is used to remove the bias.
// more info on modulo bias: https://stackoverflow.com/questions/10984974/why-do-people-say-there-is-modulo-bias-when-using-a-random-number-generator.
if len(validatorList) > params.GetConfig().ModuloBias {
return nil, errors.New("exceeded upper bound for validator shuffle")
}
hashSeed := blake2b.Sum512(seed[:])
validatorCount := len(validatorList)
// shuffle stops at the second to last index.
// Shuffle stops at the second to last index.
for i := 0; i < validatorCount-1; i++ {
// convert every 3 bytes to random number, replace validator index with that number.
// Convert every 3 bytes to random number, replace validator index with that number.
for j := 0; j+3 < len(hashSeed); j += 3 {
swapNum := int(hashSeed[j] + hashSeed[j+1] + hashSeed[j+2])
remaining := validatorCount - i

View File

@@ -11,12 +11,12 @@ import (
func TestFaultyShuffleIndices(t *testing.T) {
var list []uint32
for i := 0; i < params.GetConfig().MaxValidators+1; i++ {
for i := 0; i < params.GetConfig().ModuloBias+1; i++ {
list = append(list, uint32(i))
}
if _, err := ShuffleIndices(common.Hash{'a'}, list); err == nil {
t.Error("Shuffle should have failed when validator count exceeds MaxValidators")
t.Error("Shuffle should have failed when validator count exceeds ModuloBias")
}
}

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: proto/beacon/p2p/v1/messages.proto
// source: messages.proto
package v1
package ethereum_beacon_p2p_v1
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
@@ -66,7 +66,7 @@ func (x Topic) String() string {
return proto.EnumName(Topic_name, int32(x))
}
func (Topic) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{0}
return fileDescriptor_messages_eea3fbe422924d56, []int{0}
}
type BeaconBlockHashAnnounce struct {
@@ -80,7 +80,7 @@ func (m *BeaconBlockHashAnnounce) Reset() { *m = BeaconBlockHashAnnounce
func (m *BeaconBlockHashAnnounce) String() string { return proto.CompactTextString(m) }
func (*BeaconBlockHashAnnounce) ProtoMessage() {}
func (*BeaconBlockHashAnnounce) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{0}
return fileDescriptor_messages_eea3fbe422924d56, []int{0}
}
func (m *BeaconBlockHashAnnounce) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlockHashAnnounce.Unmarshal(m, b)
@@ -118,7 +118,7 @@ func (m *BeaconBlockRequest) Reset() { *m = BeaconBlockRequest{} }
func (m *BeaconBlockRequest) String() string { return proto.CompactTextString(m) }
func (*BeaconBlockRequest) ProtoMessage() {}
func (*BeaconBlockRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{1}
return fileDescriptor_messages_eea3fbe422924d56, []int{1}
}
func (m *BeaconBlockRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlockRequest.Unmarshal(m, b)
@@ -146,7 +146,7 @@ func (m *BeaconBlockRequest) GetHash() []byte {
}
type BeaconBlockRequestBySlotNumber struct {
SlotNumber uint64 `protobuf:"varint,1,opt,name=slot_number,json=slotNumber" json:"slot_number,omitempty"`
SlotNumber uint64 `protobuf:"varint,1,opt,name=slot_number,json=slotNumber,proto3" json:"slot_number,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -156,7 +156,7 @@ func (m *BeaconBlockRequestBySlotNumber) Reset() { *m = BeaconBlockReque
func (m *BeaconBlockRequestBySlotNumber) String() string { return proto.CompactTextString(m) }
func (*BeaconBlockRequestBySlotNumber) ProtoMessage() {}
func (*BeaconBlockRequestBySlotNumber) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{2}
return fileDescriptor_messages_eea3fbe422924d56, []int{2}
}
func (m *BeaconBlockRequestBySlotNumber) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlockRequestBySlotNumber.Unmarshal(m, b)
@@ -184,8 +184,8 @@ func (m *BeaconBlockRequestBySlotNumber) GetSlotNumber() uint64 {
}
type BeaconBlockResponse struct {
Block *BeaconBlock `protobuf:"bytes,1,opt,name=block" json:"block,omitempty"`
Attestation *AggregatedAttestation `protobuf:"bytes,2,opt,name=attestation" json:"attestation,omitempty"`
Block *BeaconBlock `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"`
Attestation *AggregatedAttestation `protobuf:"bytes,2,opt,name=attestation,proto3" json:"attestation,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -195,7 +195,7 @@ func (m *BeaconBlockResponse) Reset() { *m = BeaconBlockResponse{} }
func (m *BeaconBlockResponse) String() string { return proto.CompactTextString(m) }
func (*BeaconBlockResponse) ProtoMessage() {}
func (*BeaconBlockResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{3}
return fileDescriptor_messages_eea3fbe422924d56, []int{3}
}
func (m *BeaconBlockResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlockResponse.Unmarshal(m, b)
@@ -231,13 +231,14 @@ func (m *BeaconBlockResponse) GetAttestation() *AggregatedAttestation {
type BeaconBlock struct {
ParentHash []byte `protobuf:"bytes,1,opt,name=parent_hash,json=parentHash,proto3" json:"parent_hash,omitempty"`
SlotNumber uint64 `protobuf:"varint,2,opt,name=slot_number,json=slotNumber" json:"slot_number,omitempty"`
SlotNumber uint64 `protobuf:"varint,2,opt,name=slot_number,json=slotNumber,proto3" json:"slot_number,omitempty"`
RandaoReveal []byte `protobuf:"bytes,3,opt,name=randao_reveal,json=randaoReveal,proto3" json:"randao_reveal,omitempty"`
PowChainRef []byte `protobuf:"bytes,4,opt,name=pow_chain_ref,json=powChainRef,proto3" json:"pow_chain_ref,omitempty"`
ActiveStateHash []byte `protobuf:"bytes,5,opt,name=active_state_hash,json=activeStateHash,proto3" json:"active_state_hash,omitempty"`
CrystallizedStateHash []byte `protobuf:"bytes,6,opt,name=crystallized_state_hash,json=crystallizedStateHash,proto3" json:"crystallized_state_hash,omitempty"`
Timestamp *timestamp.Timestamp `protobuf:"bytes,7,opt,name=timestamp" json:"timestamp,omitempty"`
Attestations []*AggregatedAttestation `protobuf:"bytes,8,rep,name=attestations" json:"attestations,omitempty"`
Timestamp *timestamp.Timestamp `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
Attestations []*AggregatedAttestation `protobuf:"bytes,8,rep,name=attestations,proto3" json:"attestations,omitempty"`
Specials []*SpecialRecord `protobuf:"bytes,9,rep,name=specials,proto3" json:"specials,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -247,7 +248,7 @@ func (m *BeaconBlock) Reset() { *m = BeaconBlock{} }
func (m *BeaconBlock) String() string { return proto.CompactTextString(m) }
func (*BeaconBlock) ProtoMessage() {}
func (*BeaconBlock) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{4}
return fileDescriptor_messages_eea3fbe422924d56, []int{4}
}
func (m *BeaconBlock) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BeaconBlock.Unmarshal(m, b)
@@ -323,6 +324,13 @@ func (m *BeaconBlock) GetAttestations() []*AggregatedAttestation {
return nil
}
func (m *BeaconBlock) GetSpecials() []*SpecialRecord {
if m != nil {
return m.Specials
}
return nil
}
type CrystallizedStateHashAnnounce struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -334,7 +342,7 @@ func (m *CrystallizedStateHashAnnounce) Reset() { *m = CrystallizedState
func (m *CrystallizedStateHashAnnounce) String() string { return proto.CompactTextString(m) }
func (*CrystallizedStateHashAnnounce) ProtoMessage() {}
func (*CrystallizedStateHashAnnounce) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{5}
return fileDescriptor_messages_eea3fbe422924d56, []int{5}
}
func (m *CrystallizedStateHashAnnounce) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrystallizedStateHashAnnounce.Unmarshal(m, b)
@@ -372,7 +380,7 @@ func (m *CrystallizedStateRequest) Reset() { *m = CrystallizedStateReque
func (m *CrystallizedStateRequest) String() string { return proto.CompactTextString(m) }
func (*CrystallizedStateRequest) ProtoMessage() {}
func (*CrystallizedStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{6}
return fileDescriptor_messages_eea3fbe422924d56, []int{6}
}
func (m *CrystallizedStateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrystallizedStateRequest.Unmarshal(m, b)
@@ -400,7 +408,7 @@ func (m *CrystallizedStateRequest) GetHash() []byte {
}
type CrystallizedStateResponse struct {
CrystallizedState *CrystallizedState `protobuf:"bytes,1,opt,name=crystallized_state,json=crystallizedState" json:"crystallized_state,omitempty"`
CrystallizedState *CrystallizedState `protobuf:"bytes,1,opt,name=crystallized_state,json=crystallizedState,proto3" json:"crystallized_state,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -410,7 +418,7 @@ func (m *CrystallizedStateResponse) Reset() { *m = CrystallizedStateResp
func (m *CrystallizedStateResponse) String() string { return proto.CompactTextString(m) }
func (*CrystallizedStateResponse) ProtoMessage() {}
func (*CrystallizedStateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{7}
return fileDescriptor_messages_eea3fbe422924d56, []int{7}
}
func (m *CrystallizedStateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrystallizedStateResponse.Unmarshal(m, b)
@@ -438,16 +446,16 @@ func (m *CrystallizedStateResponse) GetCrystallizedState() *CrystallizedState {
}
type CrystallizedState struct {
LastStateRecalc uint64 `protobuf:"varint,1,opt,name=last_state_recalc,json=lastStateRecalc" json:"last_state_recalc,omitempty"`
JustifiedStreak uint64 `protobuf:"varint,2,opt,name=justified_streak,json=justifiedStreak" json:"justified_streak,omitempty"`
LastJustifiedSlot uint64 `protobuf:"varint,3,opt,name=last_justified_slot,json=lastJustifiedSlot" json:"last_justified_slot,omitempty"`
LastFinalizedSlot uint64 `protobuf:"varint,4,opt,name=last_finalized_slot,json=lastFinalizedSlot" json:"last_finalized_slot,omitempty"`
CurrentDynasty uint64 `protobuf:"varint,5,opt,name=current_dynasty,json=currentDynasty" json:"current_dynasty,omitempty"`
LastStateRecalc uint64 `protobuf:"varint,1,opt,name=last_state_recalc,json=lastStateRecalc,proto3" json:"last_state_recalc,omitempty"`
JustifiedStreak uint64 `protobuf:"varint,2,opt,name=justified_streak,json=justifiedStreak,proto3" json:"justified_streak,omitempty"`
LastJustifiedSlot uint64 `protobuf:"varint,3,opt,name=last_justified_slot,json=lastJustifiedSlot,proto3" json:"last_justified_slot,omitempty"`
LastFinalizedSlot uint64 `protobuf:"varint,4,opt,name=last_finalized_slot,json=lastFinalizedSlot,proto3" json:"last_finalized_slot,omitempty"`
CurrentDynasty uint64 `protobuf:"varint,5,opt,name=current_dynasty,json=currentDynasty,proto3" json:"current_dynasty,omitempty"`
DynastySeed []byte `protobuf:"bytes,6,opt,name=dynasty_seed,json=dynastySeed,proto3" json:"dynasty_seed,omitempty"`
DynastyStart uint64 `protobuf:"varint,7,opt,name=dynasty_start,json=dynastyStart" json:"dynasty_start,omitempty"`
CrosslinkRecords []*CrosslinkRecord `protobuf:"bytes,8,rep,name=crosslink_records,json=crosslinkRecords" json:"crosslink_records,omitempty"`
Validators []*ValidatorRecord `protobuf:"bytes,9,rep,name=validators" json:"validators,omitempty"`
ShardAndCommitteesForSlots []*ShardAndCommitteeArray `protobuf:"bytes,10,rep,name=shard_and_committees_for_slots,json=shardAndCommitteesForSlots" json:"shard_and_committees_for_slots,omitempty"`
DynastyStart uint64 `protobuf:"varint,7,opt,name=dynasty_start,json=dynastyStart,proto3" json:"dynasty_start,omitempty"`
CrosslinkRecords []*CrosslinkRecord `protobuf:"bytes,8,rep,name=crosslink_records,json=crosslinkRecords,proto3" json:"crosslink_records,omitempty"`
Validators []*ValidatorRecord `protobuf:"bytes,9,rep,name=validators,proto3" json:"validators,omitempty"`
ShardAndCommitteesForSlots []*ShardAndCommitteeArray `protobuf:"bytes,10,rep,name=shard_and_committees_for_slots,json=shardAndCommitteesForSlots,proto3" json:"shard_and_committees_for_slots,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -457,7 +465,7 @@ func (m *CrystallizedState) Reset() { *m = CrystallizedState{} }
func (m *CrystallizedState) String() string { return proto.CompactTextString(m) }
func (*CrystallizedState) ProtoMessage() {}
func (*CrystallizedState) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{8}
return fileDescriptor_messages_eea3fbe422924d56, []int{8}
}
func (m *CrystallizedState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrystallizedState.Unmarshal(m, b)
@@ -548,7 +556,7 @@ func (m *CrystallizedState) GetShardAndCommitteesForSlots() []*ShardAndCommittee
}
type ShardAndCommitteeArray struct {
ArrayShardAndCommittee []*ShardAndCommittee `protobuf:"bytes,1,rep,name=array_shard_and_committee,json=arrayShardAndCommittee" json:"array_shard_and_committee,omitempty"`
ArrayShardAndCommittee []*ShardAndCommittee `protobuf:"bytes,1,rep,name=array_shard_and_committee,json=arrayShardAndCommittee,proto3" json:"array_shard_and_committee,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -558,7 +566,7 @@ func (m *ShardAndCommitteeArray) Reset() { *m = ShardAndCommitteeArray{}
func (m *ShardAndCommitteeArray) String() string { return proto.CompactTextString(m) }
func (*ShardAndCommitteeArray) ProtoMessage() {}
func (*ShardAndCommitteeArray) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{9}
return fileDescriptor_messages_eea3fbe422924d56, []int{9}
}
func (m *ShardAndCommitteeArray) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardAndCommitteeArray.Unmarshal(m, b)
@@ -596,7 +604,7 @@ func (m *ActiveStateHashAnnounce) Reset() { *m = ActiveStateHashAnnounce
func (m *ActiveStateHashAnnounce) String() string { return proto.CompactTextString(m) }
func (*ActiveStateHashAnnounce) ProtoMessage() {}
func (*ActiveStateHashAnnounce) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{10}
return fileDescriptor_messages_eea3fbe422924d56, []int{10}
}
func (m *ActiveStateHashAnnounce) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActiveStateHashAnnounce.Unmarshal(m, b)
@@ -634,7 +642,7 @@ func (m *ActiveStateRequest) Reset() { *m = ActiveStateRequest{} }
func (m *ActiveStateRequest) String() string { return proto.CompactTextString(m) }
func (*ActiveStateRequest) ProtoMessage() {}
func (*ActiveStateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{11}
return fileDescriptor_messages_eea3fbe422924d56, []int{11}
}
func (m *ActiveStateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActiveStateRequest.Unmarshal(m, b)
@@ -662,8 +670,8 @@ func (m *ActiveStateRequest) GetHash() []byte {
}
type ShardAndCommittee struct {
ShardId uint64 `protobuf:"varint,1,opt,name=shard_id,json=shardId" json:"shard_id,omitempty"`
Committee []uint32 `protobuf:"varint,2,rep,packed,name=committee" json:"committee,omitempty"`
ShardId uint64 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
Committee []uint32 `protobuf:"varint,2,rep,packed,name=committee,proto3" json:"committee,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -673,7 +681,7 @@ func (m *ShardAndCommittee) Reset() { *m = ShardAndCommittee{} }
func (m *ShardAndCommittee) String() string { return proto.CompactTextString(m) }
func (*ShardAndCommittee) ProtoMessage() {}
func (*ShardAndCommittee) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{12}
return fileDescriptor_messages_eea3fbe422924d56, []int{12}
}
func (m *ShardAndCommittee) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardAndCommittee.Unmarshal(m, b)
@@ -708,7 +716,7 @@ func (m *ShardAndCommittee) GetCommittee() []uint32 {
}
type ActiveStateResponse struct {
ActiveState *ActiveState `protobuf:"bytes,1,opt,name=active_state,json=activeState" json:"active_state,omitempty"`
ActiveState *ActiveState `protobuf:"bytes,1,opt,name=active_state,json=activeState,proto3" json:"active_state,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -718,7 +726,7 @@ func (m *ActiveStateResponse) Reset() { *m = ActiveStateResponse{} }
func (m *ActiveStateResponse) String() string { return proto.CompactTextString(m) }
func (*ActiveStateResponse) ProtoMessage() {}
func (*ActiveStateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{13}
return fileDescriptor_messages_eea3fbe422924d56, []int{13}
}
func (m *ActiveStateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActiveStateResponse.Unmarshal(m, b)
@@ -746,8 +754,9 @@ func (m *ActiveStateResponse) GetActiveState() *ActiveState {
}
type ActiveState struct {
PendingAttestations []*AggregatedAttestation `protobuf:"bytes,1,rep,name=pending_attestations,json=pendingAttestations" json:"pending_attestations,omitempty"`
PendingAttestations []*AggregatedAttestation `protobuf:"bytes,1,rep,name=pending_attestations,json=pendingAttestations,proto3" json:"pending_attestations,omitempty"`
RecentBlockHashes [][]byte `protobuf:"bytes,2,rep,name=recent_block_hashes,json=recentBlockHashes,proto3" json:"recent_block_hashes,omitempty"`
PendingSpecials []*SpecialRecord `protobuf:"bytes,3,rep,name=pending_specials,json=pendingSpecials,proto3" json:"pending_specials,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -757,7 +766,7 @@ func (m *ActiveState) Reset() { *m = ActiveState{} }
func (m *ActiveState) String() string { return proto.CompactTextString(m) }
func (*ActiveState) ProtoMessage() {}
func (*ActiveState) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{14}
return fileDescriptor_messages_eea3fbe422924d56, []int{14}
}
func (m *ActiveState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ActiveState.Unmarshal(m, b)
@@ -791,14 +800,21 @@ func (m *ActiveState) GetRecentBlockHashes() [][]byte {
return nil
}
func (m *ActiveState) GetPendingSpecials() []*SpecialRecord {
if m != nil {
return m.PendingSpecials
}
return nil
}
type ValidatorRecord struct {
PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
WithdrawalShard uint64 `protobuf:"varint,2,opt,name=withdrawal_shard,json=withdrawalShard" json:"withdrawal_shard,omitempty"`
WithdrawalShard uint64 `protobuf:"varint,2,opt,name=withdrawal_shard,json=withdrawalShard,proto3" json:"withdrawal_shard,omitempty"`
WithdrawalAddress []byte `protobuf:"bytes,3,opt,name=withdrawal_address,json=withdrawalAddress,proto3" json:"withdrawal_address,omitempty"`
RandaoCommitment []byte `protobuf:"bytes,4,opt,name=randao_commitment,json=randaoCommitment,proto3" json:"randao_commitment,omitempty"`
Balance uint64 `protobuf:"varint,5,opt,name=balance" json:"balance,omitempty"`
StartDynasty uint64 `protobuf:"varint,6,opt,name=start_dynasty,json=startDynasty" json:"start_dynasty,omitempty"`
EndDynasty uint64 `protobuf:"varint,7,opt,name=end_dynasty,json=endDynasty" json:"end_dynasty,omitempty"`
Balance uint64 `protobuf:"varint,5,opt,name=balance,proto3" json:"balance,omitempty"`
StartDynasty uint64 `protobuf:"varint,6,opt,name=start_dynasty,json=startDynasty,proto3" json:"start_dynasty,omitempty"`
EndDynasty uint64 `protobuf:"varint,7,opt,name=end_dynasty,json=endDynasty,proto3" json:"end_dynasty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -808,7 +824,7 @@ func (m *ValidatorRecord) Reset() { *m = ValidatorRecord{} }
func (m *ValidatorRecord) String() string { return proto.CompactTextString(m) }
func (*ValidatorRecord) ProtoMessage() {}
func (*ValidatorRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{15}
return fileDescriptor_messages_eea3fbe422924d56, []int{15}
}
func (m *ValidatorRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidatorRecord.Unmarshal(m, b)
@@ -878,14 +894,14 @@ func (m *ValidatorRecord) GetEndDynasty() uint64 {
}
type AggregatedAttestation struct {
Slot uint64 `protobuf:"varint,1,opt,name=slot" json:"slot,omitempty"`
ShardId uint64 `protobuf:"varint,2,opt,name=shard_id,json=shardId" json:"shard_id,omitempty"`
JustifiedSlot uint64 `protobuf:"varint,3,opt,name=justified_slot,json=justifiedSlot" json:"justified_slot,omitempty"`
Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"`
ShardId uint64 `protobuf:"varint,2,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
JustifiedSlot uint64 `protobuf:"varint,3,opt,name=justified_slot,json=justifiedSlot,proto3" json:"justified_slot,omitempty"`
JustifiedBlockHash []byte `protobuf:"bytes,4,opt,name=justified_block_hash,json=justifiedBlockHash,proto3" json:"justified_block_hash,omitempty"`
ShardBlockHash []byte `protobuf:"bytes,5,opt,name=shard_block_hash,json=shardBlockHash,proto3" json:"shard_block_hash,omitempty"`
AttesterBitfield []byte `protobuf:"bytes,6,opt,name=attester_bitfield,json=attesterBitfield,proto3" json:"attester_bitfield,omitempty"`
ObliqueParentHashes [][]byte `protobuf:"bytes,7,rep,name=oblique_parent_hashes,json=obliqueParentHashes,proto3" json:"oblique_parent_hashes,omitempty"`
AggregateSig []uint64 `protobuf:"varint,8,rep,packed,name=aggregate_sig,json=aggregateSig" json:"aggregate_sig,omitempty"`
AggregateSig []uint64 `protobuf:"varint,8,rep,packed,name=aggregate_sig,json=aggregateSig,proto3" json:"aggregate_sig,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -895,7 +911,7 @@ func (m *AggregatedAttestation) Reset() { *m = AggregatedAttestation{} }
func (m *AggregatedAttestation) String() string { return proto.CompactTextString(m) }
func (*AggregatedAttestation) ProtoMessage() {}
func (*AggregatedAttestation) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{16}
return fileDescriptor_messages_eea3fbe422924d56, []int{16}
}
func (m *AggregatedAttestation) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AggregatedAttestation.Unmarshal(m, b)
@@ -972,9 +988,9 @@ func (m *AggregatedAttestation) GetAggregateSig() []uint64 {
}
type CrosslinkRecord struct {
Dynasty uint64 `protobuf:"varint,1,opt,name=dynasty" json:"dynasty,omitempty"`
Dynasty uint64 `protobuf:"varint,1,opt,name=dynasty,proto3" json:"dynasty,omitempty"`
Blockhash []byte `protobuf:"bytes,2,opt,name=blockhash,proto3" json:"blockhash,omitempty"`
Slot uint64 `protobuf:"varint,3,opt,name=slot" json:"slot,omitempty"`
Slot uint64 `protobuf:"varint,3,opt,name=slot,proto3" json:"slot,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -984,7 +1000,7 @@ func (m *CrosslinkRecord) Reset() { *m = CrosslinkRecord{} }
func (m *CrosslinkRecord) String() string { return proto.CompactTextString(m) }
func (*CrosslinkRecord) ProtoMessage() {}
func (*CrosslinkRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{17}
return fileDescriptor_messages_eea3fbe422924d56, []int{17}
}
func (m *CrosslinkRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CrosslinkRecord.Unmarshal(m, b)
@@ -1036,7 +1052,7 @@ func (m *AttestationHashes) Reset() { *m = AttestationHashes{} }
func (m *AttestationHashes) String() string { return proto.CompactTextString(m) }
func (*AttestationHashes) ProtoMessage() {}
func (*AttestationHashes) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_93214d6100104a7a, []int{18}
return fileDescriptor_messages_eea3fbe422924d56, []int{18}
}
func (m *AttestationHashes) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttestationHashes.Unmarshal(m, b)
@@ -1063,6 +1079,52 @@ func (m *AttestationHashes) GetAttestationHash() [][]byte {
return nil
}
type SpecialRecord struct {
Kind uint32 `protobuf:"varint,1,opt,name=kind,proto3" json:"kind,omitempty"`
Data [][]byte `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SpecialRecord) Reset() { *m = SpecialRecord{} }
func (m *SpecialRecord) String() string { return proto.CompactTextString(m) }
func (*SpecialRecord) ProtoMessage() {}
func (*SpecialRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_messages_eea3fbe422924d56, []int{19}
}
func (m *SpecialRecord) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SpecialRecord.Unmarshal(m, b)
}
func (m *SpecialRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SpecialRecord.Marshal(b, m, deterministic)
}
func (dst *SpecialRecord) XXX_Merge(src proto.Message) {
xxx_messageInfo_SpecialRecord.Merge(dst, src)
}
func (m *SpecialRecord) XXX_Size() int {
return xxx_messageInfo_SpecialRecord.Size(m)
}
func (m *SpecialRecord) XXX_DiscardUnknown() {
xxx_messageInfo_SpecialRecord.DiscardUnknown(m)
}
var xxx_messageInfo_SpecialRecord proto.InternalMessageInfo
func (m *SpecialRecord) GetKind() uint32 {
if m != nil {
return m.Kind
}
return 0
}
func (m *SpecialRecord) GetData() [][]byte {
if m != nil {
return m.Data
}
return nil
}
func init() {
proto.RegisterType((*BeaconBlockHashAnnounce)(nil), "ethereum.beacon.p2p.v1.BeaconBlockHashAnnounce")
proto.RegisterType((*BeaconBlockRequest)(nil), "ethereum.beacon.p2p.v1.BeaconBlockRequest")
@@ -1083,95 +1145,97 @@ func init() {
proto.RegisterType((*AggregatedAttestation)(nil), "ethereum.beacon.p2p.v1.AggregatedAttestation")
proto.RegisterType((*CrosslinkRecord)(nil), "ethereum.beacon.p2p.v1.CrosslinkRecord")
proto.RegisterType((*AttestationHashes)(nil), "ethereum.beacon.p2p.v1.AttestationHashes")
proto.RegisterType((*SpecialRecord)(nil), "ethereum.beacon.p2p.v1.SpecialRecord")
proto.RegisterEnum("ethereum.beacon.p2p.v1.Topic", Topic_name, Topic_value)
}
func init() {
proto.RegisterFile("proto/beacon/p2p/v1/messages.proto", fileDescriptor_messages_93214d6100104a7a)
}
func init() { proto.RegisterFile("messages.proto", fileDescriptor_messages_eea3fbe422924d56) }
var fileDescriptor_messages_93214d6100104a7a = []byte{
// 1297 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x5d, 0x73, 0xd3, 0x46,
0x17, 0x7e, 0xfd, 0x91, 0x84, 0x1c, 0x3b, 0xc4, 0xde, 0x10, 0x50, 0xf2, 0x16, 0x92, 0x8a, 0x76,
0x48, 0x60, 0x70, 0x4a, 0x98, 0xe9, 0xb4, 0x37, 0x9d, 0x91, 0x8d, 0x29, 0x94, 0xd4, 0x06, 0xc9,
0xa1, 0xa5, 0x33, 0x8c, 0xba, 0x96, 0xd6, 0xb6, 0x88, 0x2c, 0x89, 0xdd, 0x75, 0x32, 0xee, 0x45,
0xef, 0xfb, 0x0b, 0x7a, 0xd9, 0xe9, 0x1f, 0xa2, 0x7f, 0xa9, 0xb3, 0xab, 0x95, 0x2c, 0xdb, 0x4a,
0x68, 0x7b, 0x27, 0x3d, 0xe7, 0x39, 0x67, 0xcf, 0xf7, 0x2e, 0xe8, 0x11, 0x0d, 0x79, 0x78, 0xd4,
0x27, 0xd8, 0x09, 0x83, 0xa3, 0xe8, 0x38, 0x3a, 0x3a, 0x7f, 0x74, 0x34, 0x26, 0x8c, 0xe1, 0x21,
0x61, 0x0d, 0x29, 0x44, 0x37, 0x09, 0x1f, 0x11, 0x4a, 0x26, 0xe3, 0x46, 0x4c, 0x6b, 0x44, 0xc7,
0x51, 0xe3, 0xfc, 0xd1, 0xee, 0xde, 0x30, 0x0c, 0x87, 0x3e, 0x39, 0x92, 0xac, 0xfe, 0x64, 0x70,
0xc4, 0xbd, 0x31, 0x61, 0x1c, 0x8f, 0xa3, 0x58, 0x51, 0x7f, 0x08, 0xb7, 0x9a, 0x52, 0xa3, 0xe9,
0x87, 0xce, 0xd9, 0x33, 0xcc, 0x46, 0x46, 0x10, 0x84, 0x93, 0xc0, 0x21, 0x08, 0x41, 0x79, 0x84,
0xd9, 0x48, 0x2b, 0xec, 0x17, 0x0e, 0xaa, 0xa6, 0xfc, 0xd6, 0x0f, 0x00, 0x65, 0xe8, 0x26, 0x79,
0x3f, 0x21, 0x8c, 0xe7, 0x32, 0x0d, 0xb8, 0xb3, 0xcc, 0x6c, 0x4e, 0x2d, 0x3f, 0xe4, 0x9d, 0xc9,
0xb8, 0x4f, 0x28, 0xda, 0x83, 0x0a, 0xf3, 0x43, 0x6e, 0x07, 0xf2, 0x57, 0x2a, 0x97, 0x4d, 0x60,
0x29, 0x41, 0xff, 0xb3, 0x00, 0x5b, 0x73, 0x36, 0x58, 0x14, 0x06, 0x8c, 0xa0, 0xaf, 0x61, 0xa5,
0x2f, 0x00, 0xa9, 0x52, 0x39, 0xbe, 0xdb, 0xc8, 0x0f, 0xbe, 0x91, 0xd5, 0x8d, 0x35, 0x50, 0x17,
0x2a, 0x98, 0x73, 0x91, 0x01, 0xee, 0x85, 0x81, 0x56, 0x94, 0x06, 0x1e, 0x5e, 0x66, 0xc0, 0x18,
0x0e, 0x29, 0x19, 0x62, 0x4e, 0x5c, 0x63, 0xa6, 0x64, 0x66, 0x2d, 0xe8, 0xbf, 0x95, 0xa0, 0x92,
0x39, 0x47, 0x04, 0x15, 0x61, 0x4a, 0x02, 0x6e, 0x67, 0x32, 0x02, 0x31, 0x24, 0xb2, 0xbb, 0x18,
0x75, 0x71, 0x31, 0x6a, 0x74, 0x17, 0x36, 0x28, 0x0e, 0x5c, 0x1c, 0xda, 0x94, 0x9c, 0x13, 0xec,
0x6b, 0x25, 0x69, 0xa3, 0x1a, 0x83, 0xa6, 0xc4, 0x90, 0x0e, 0x1b, 0x51, 0x78, 0x61, 0x3b, 0x23,
0xec, 0x05, 0x36, 0x25, 0x03, 0xad, 0x2c, 0x49, 0x95, 0x28, 0xbc, 0x68, 0x09, 0xcc, 0x24, 0x03,
0x74, 0x1f, 0xea, 0xd8, 0xe1, 0xde, 0x39, 0xb1, 0x85, 0xb3, 0x24, 0x76, 0x68, 0x45, 0xf2, 0x36,
0x63, 0x81, 0x25, 0x70, 0xe9, 0xd5, 0x97, 0x70, 0xcb, 0xa1, 0x53, 0xc6, 0xb1, 0xef, 0x7b, 0xbf,
0x10, 0x37, 0xab, 0xb1, 0x2a, 0x35, 0xb6, 0xb3, 0xe2, 0x99, 0xde, 0x57, 0xb0, 0x9e, 0x76, 0x94,
0xb6, 0x26, 0xb3, 0xb9, 0xdb, 0x88, 0x7b, 0xae, 0x91, 0xf4, 0x5c, 0xa3, 0x97, 0x30, 0xcc, 0x19,
0x19, 0xbd, 0x82, 0x6a, 0x26, 0x8f, 0x4c, 0xbb, 0xb6, 0x5f, 0xfa, 0xf7, 0xa5, 0x98, 0x33, 0xa1,
0x3f, 0x86, 0xdb, 0xad, 0x3c, 0x2f, 0xaf, 0xec, 0xe8, 0x06, 0x68, 0x4b, 0x4a, 0x57, 0xf5, 0xf5,
0x04, 0x76, 0x72, 0xf8, 0xaa, 0x33, 0x7f, 0x04, 0xb4, 0x9c, 0x46, 0xd5, 0xa6, 0x87, 0x97, 0x85,
0xb6, 0x6c, 0xae, 0xbe, 0x94, 0x6c, 0xfd, 0x43, 0x19, 0xea, 0x4b, 0x44, 0x51, 0x62, 0x1f, 0x33,
0xae, 0xca, 0x45, 0x89, 0x83, 0x7d, 0x47, 0x0d, 0xd2, 0xa6, 0x10, 0x28, 0xef, 0x04, 0x8c, 0x0e,
0xa1, 0xf6, 0x6e, 0xc2, 0xb8, 0x37, 0xf0, 0xa4, 0x63, 0x94, 0xe0, 0x33, 0xd5, 0x7d, 0x9b, 0x29,
0x6e, 0x49, 0x18, 0x35, 0x60, 0x4b, 0x9a, 0xcd, 0xf0, 0xfd, 0x90, 0xcb, 0x46, 0x2c, 0x9b, 0xf2,
0xc4, 0xef, 0x52, 0x0d, 0x3f, 0xe4, 0x29, 0x7f, 0xe0, 0x05, 0x58, 0x05, 0x2e, 0xf8, 0xe5, 0x19,
0xff, 0x69, 0x22, 0x91, 0xfc, 0x7b, 0xb0, 0xe9, 0x4c, 0xa8, 0x9c, 0x12, 0x77, 0x1a, 0x60, 0xc6,
0xa7, 0xb2, 0x2f, 0xcb, 0xe6, 0x75, 0x05, 0x3f, 0x89, 0x51, 0xf4, 0x29, 0x54, 0x15, 0xc1, 0x66,
0x84, 0xb8, 0xaa, 0x17, 0x2b, 0x0a, 0xb3, 0x08, 0x71, 0xc5, 0xb8, 0xa4, 0x14, 0x8e, 0x29, 0x97,
0x5d, 0x58, 0x36, 0x13, 0x3d, 0x4b, 0x60, 0xa8, 0x07, 0x75, 0x87, 0x86, 0x8c, 0xf9, 0x5e, 0x70,
0x26, 0xd2, 0x14, 0x52, 0x37, 0xe9, 0xb8, 0x7b, 0x97, 0x97, 0x45, 0x29, 0x98, 0x92, 0x6f, 0xd6,
0x9c, 0x79, 0x80, 0xa1, 0x6f, 0x01, 0xce, 0xb1, 0xef, 0xb9, 0x98, 0x87, 0x94, 0x69, 0xeb, 0x57,
0x9b, 0x7b, 0x9d, 0x30, 0x95, 0xb9, 0x8c, 0x2a, 0xa2, 0x70, 0x87, 0x8d, 0x30, 0x75, 0x6d, 0x1c,
0xb8, 0xb6, 0x13, 0x8e, 0xc7, 0x1e, 0xe7, 0x84, 0x30, 0x7b, 0x10, 0x52, 0x99, 0x49, 0xa6, 0x81,
0x34, 0xde, 0xb8, 0xcc, 0xb8, 0x25, 0xb4, 0x8d, 0xc0, 0x6d, 0x25, 0xba, 0x06, 0xa5, 0x78, 0x6a,
0xee, 0xb2, 0x45, 0x9c, 0x3d, 0x0d, 0xa9, 0x28, 0x01, 0xd3, 0x7f, 0x85, 0x9b, 0xf9, 0x5a, 0xc8,
0x85, 0x1d, 0x2c, 0x3e, 0xec, 0x1c, 0x9f, 0xb4, 0x82, 0x74, 0xe4, 0xf0, 0x1f, 0x3b, 0x62, 0xde,
0x94, 0xb6, 0x96, 0x70, 0x71, 0xf1, 0x18, 0xf3, 0x4b, 0xe8, 0x63, 0x17, 0x4f, 0x86, 0x7e, 0xd5,
0x80, 0x9e, 0x40, 0x7d, 0xe9, 0x34, 0xb4, 0x03, 0xd7, 0xe2, 0x68, 0x3c, 0x57, 0xcd, 0xc7, 0x9a,
0xfc, 0x7f, 0xee, 0xa2, 0x4f, 0x60, 0x7d, 0x16, 0x5e, 0x71, 0xbf, 0x74, 0xb0, 0x61, 0xce, 0x00,
0xfd, 0x2d, 0x6c, 0xcd, 0x9d, 0xab, 0x06, 0xfd, 0x29, 0x54, 0xb3, 0xbb, 0xf5, 0x63, 0x37, 0x51,
0xd6, 0x44, 0x25, 0xb3, 0x7b, 0xf5, 0x3f, 0x0a, 0x50, 0xc9, 0x08, 0xd1, 0xcf, 0x70, 0x23, 0x22,
0x81, 0xeb, 0x05, 0x43, 0x7b, 0x6e, 0x3b, 0x16, 0xfe, 0xcb, 0x76, 0xdc, 0x52, 0xa6, 0x32, 0x18,
0x13, 0xb3, 0x4a, 0x89, 0x23, 0x46, 0x4f, 0xde, 0x88, 0x72, 0xc7, 0x13, 0x26, 0x03, 0xaf, 0x9a,
0xf5, 0x58, 0x94, 0xbe, 0x05, 0x08, 0xd3, 0x7f, 0x2f, 0xc2, 0xe6, 0x42, 0xef, 0xa2, 0xdb, 0x00,
0xd1, 0xa4, 0xef, 0x7b, 0x8e, 0x7d, 0x46, 0xa6, 0x2a, 0xf9, 0xeb, 0x31, 0xf2, 0x82, 0x4c, 0xc5,
0xa6, 0xb9, 0xf0, 0xf8, 0xc8, 0xa5, 0xf8, 0x02, 0xfb, 0x71, 0x17, 0x25, 0x9b, 0x66, 0x86, 0xcb,
0x1a, 0xa1, 0x87, 0x80, 0x32, 0x54, 0xec, 0xba, 0x94, 0x30, 0xa6, 0x6e, 0xbc, 0xfa, 0x4c, 0x62,
0xc4, 0x02, 0xf4, 0x00, 0xea, 0xea, 0x6e, 0x8c, 0x2b, 0x34, 0x26, 0x01, 0x57, 0x57, 0x5f, 0x2d,
0x16, 0xb4, 0x52, 0x1c, 0x69, 0xb0, 0xd6, 0xc7, 0x3e, 0x0e, 0x1c, 0xa2, 0xb6, 0x4b, 0xf2, 0x2b,
0x76, 0x86, 0xdc, 0x15, 0xe9, 0xf6, 0x59, 0x8d, 0x77, 0x86, 0x04, 0x93, 0xdd, 0xb3, 0x07, 0x15,
0x12, 0xb8, 0x29, 0x25, 0x5e, 0x2b, 0x40, 0x02, 0x57, 0x11, 0xf4, 0xbf, 0x8a, 0xb0, 0x9d, 0x9b,
0x78, 0xd1, 0x96, 0x72, 0x01, 0xc6, 0x9d, 0x26, 0xbf, 0xe7, 0x3a, 0xb0, 0x38, 0xdf, 0x81, 0x9f,
0xc3, 0xf5, 0xdc, 0x4d, 0xbb, 0xf1, 0x6e, 0x6e, 0xcb, 0x7e, 0x01, 0x37, 0x66, 0xb4, 0x59, 0xf1,
0x54, 0xfc, 0x28, 0x95, 0xa5, 0xd5, 0x43, 0x07, 0x50, 0x8b, 0xcf, 0xcc, 0xb0, 0xe3, 0x07, 0xc0,
0x75, 0x89, 0xcf, 0x98, 0x0f, 0xa0, 0x1e, 0xf7, 0x1b, 0xa1, 0x76, 0xdf, 0xe3, 0x03, 0x8f, 0xf8,
0xc9, 0xb6, 0xad, 0x25, 0x82, 0xa6, 0xc2, 0xd1, 0x31, 0x6c, 0x87, 0x7d, 0xdf, 0x7b, 0x3f, 0x21,
0x76, 0xe6, 0xad, 0x43, 0x98, 0xb6, 0x26, 0x9b, 0x68, 0x4b, 0x09, 0x5f, 0xa6, 0x8f, 0x1e, 0xc2,
0x44, 0xca, 0x71, 0x92, 0x2b, 0x9b, 0x79, 0x43, 0xb9, 0x7d, 0xcb, 0x66, 0x35, 0x05, 0x2d, 0x6f,
0xa8, 0xbf, 0x85, 0xcd, 0x85, 0xad, 0x2b, 0x8a, 0x98, 0x54, 0x40, 0xcd, 0xad, 0xfa, 0x15, 0x73,
0x2b, 0xc3, 0x92, 0x51, 0x15, 0xe3, 0x1e, 0x4c, 0x81, 0xb4, 0x04, 0xa5, 0x59, 0x09, 0xf4, 0x6f,
0xa0, 0x9e, 0xa9, 0x92, 0x72, 0xec, 0x10, 0x6a, 0x99, 0x49, 0x4b, 0x5e, 0x6d, 0x25, 0xf9, 0x48,
0x9a, 0x27, 0xdf, 0xff, 0x50, 0x84, 0x95, 0x5e, 0x18, 0x79, 0x0e, 0xaa, 0xc0, 0xda, 0x69, 0xe7,
0x45, 0xa7, 0xfb, 0x43, 0xa7, 0xf6, 0x3f, 0x74, 0x07, 0x76, 0x9b, 0x6d, 0xa3, 0xd5, 0xed, 0xd8,
0xcd, 0x93, 0x6e, 0xeb, 0x85, 0xfd, 0xcc, 0xb0, 0x9e, 0xd9, 0x46, 0xa7, 0xd3, 0x3d, 0xed, 0xb4,
0xda, 0xb5, 0x02, 0xd2, 0xe0, 0xc6, 0x9c, 0xdc, 0x6c, 0xbf, 0x3a, 0x6d, 0x5b, 0xbd, 0x5a, 0x11,
0xdd, 0x83, 0xbb, 0x79, 0x12, 0xbb, 0xf9, 0xc6, 0xb6, 0x4e, 0xba, 0x3d, 0xbb, 0x73, 0xfa, 0x7d,
0xb3, 0x6d, 0xd6, 0x4a, 0x68, 0x07, 0xb6, 0x17, 0x88, 0xd6, 0xcb, 0x6e, 0xc7, 0x6a, 0xd7, 0xca,
0xe8, 0x33, 0xd8, 0x6f, 0x99, 0x6f, 0xac, 0x9e, 0x71, 0x72, 0xf2, 0xfc, 0xa7, 0xf6, 0x13, 0xdb,
0xea, 0x19, 0xbd, 0xf6, 0x82, 0x0f, 0x2b, 0xc2, 0xc7, 0x1c, 0x56, 0xe2, 0xc9, 0x2a, 0xda, 0x83,
0xff, 0xe7, 0xca, 0xd5, 0x31, 0x6b, 0xc2, 0x80, 0xd1, 0xea, 0x3d, 0x7f, 0xdd, 0xce, 0x3d, 0xe0,
0x9a, 0x08, 0x72, 0x4e, 0x9e, 0x98, 0x5e, 0x17, 0xbe, 0x2f, 0x48, 0x94, 0x51, 0xe8, 0xaf, 0xca,
0x27, 0xe2, 0xe3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x78, 0xf7, 0x68, 0xc2, 0xe2, 0x0c, 0x00,
0x00,
var fileDescriptor_messages_eea3fbe422924d56 = []byte{
// 1353 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x6f, 0x73, 0xd3, 0xc6,
0x13, 0xfe, 0xc5, 0x76, 0xfe, 0xad, 0x9d, 0xd8, 0xbe, 0x10, 0x50, 0xf2, 0x2b, 0x24, 0x15, 0x65,
0x48, 0x60, 0x10, 0x2d, 0xcc, 0xf4, 0xcf, 0x9b, 0xce, 0xc8, 0xc6, 0x14, 0x4a, 0x6a, 0x83, 0xe4,
0xd0, 0xd2, 0x19, 0x46, 0x3d, 0x4b, 0x67, 0x5b, 0x44, 0x96, 0xcc, 0xdd, 0x39, 0x19, 0xf7, 0x45,
0xbf, 0x46, 0x5f, 0xf7, 0xfb, 0x74, 0xe8, 0x67, 0xe9, 0x37, 0xe8, 0xdc, 0xe9, 0x24, 0x4b, 0xb6,
0x03, 0xa5, 0xef, 0xa4, 0x67, 0x9f, 0xdd, 0xbb, 0xbd, 0xdd, 0x7d, 0xee, 0x60, 0x7b, 0x44, 0x18,
0xc3, 0x03, 0xc2, 0x8c, 0x31, 0x8d, 0x78, 0x84, 0xae, 0x12, 0x3e, 0x24, 0x94, 0x4c, 0x46, 0x46,
0x8f, 0x60, 0x37, 0x0a, 0x8d, 0xf1, 0x83, 0xb1, 0x71, 0xfe, 0xc5, 0xfe, 0xc1, 0x20, 0x8a, 0x06,
0x01, 0xb9, 0x2f, 0x59, 0xbd, 0x49, 0xff, 0x3e, 0xf7, 0x47, 0x84, 0x71, 0x3c, 0x1a, 0xc7, 0x8e,
0xfa, 0x3d, 0xb8, 0xd6, 0x90, 0x1e, 0x8d, 0x20, 0x72, 0xcf, 0x9e, 0x60, 0x36, 0x34, 0xc3, 0x30,
0x9a, 0x84, 0x2e, 0x41, 0x08, 0x4a, 0x43, 0xcc, 0x86, 0xda, 0xca, 0xe1, 0xca, 0x51, 0xc5, 0x92,
0xdf, 0xfa, 0x11, 0xa0, 0x0c, 0xdd, 0x22, 0x6f, 0x27, 0x84, 0xf1, 0xa5, 0x4c, 0x13, 0x6e, 0x2c,
0x32, 0x1b, 0x53, 0x3b, 0x88, 0x78, 0x7b, 0x32, 0xea, 0x11, 0x8a, 0x0e, 0xa0, 0xcc, 0x82, 0x88,
0x3b, 0xa1, 0xfc, 0x95, 0xce, 0x25, 0x0b, 0x58, 0x4a, 0xd0, 0xff, 0x58, 0x81, 0x9d, 0x5c, 0x0c,
0x36, 0x8e, 0x42, 0x46, 0xd0, 0x37, 0xb0, 0xda, 0x13, 0x80, 0x74, 0x29, 0x3f, 0xb8, 0x69, 0x2c,
0x4f, 0xde, 0xc8, 0xfa, 0xc6, 0x1e, 0xa8, 0x03, 0x65, 0xcc, 0xb9, 0x38, 0x01, 0xee, 0x47, 0xa1,
0x56, 0x90, 0x01, 0xee, 0x5d, 0x16, 0xc0, 0x1c, 0x0c, 0x28, 0x19, 0x60, 0x4e, 0x3c, 0x73, 0xe6,
0x64, 0x65, 0x23, 0xe8, 0x7f, 0x16, 0xa1, 0x9c, 0x59, 0x47, 0x24, 0x35, 0xc6, 0x94, 0x84, 0xdc,
0xc9, 0x9c, 0x08, 0xc4, 0x90, 0x38, 0xdd, 0xf9, 0xac, 0x0b, 0xf3, 0x59, 0xa3, 0x9b, 0xb0, 0x45,
0x71, 0xe8, 0xe1, 0xc8, 0xa1, 0xe4, 0x9c, 0xe0, 0x40, 0x2b, 0xca, 0x18, 0x95, 0x18, 0xb4, 0x24,
0x86, 0x74, 0xd8, 0x1a, 0x47, 0x17, 0x8e, 0x3b, 0xc4, 0x7e, 0xe8, 0x50, 0xd2, 0xd7, 0x4a, 0x92,
0x54, 0x1e, 0x47, 0x17, 0x4d, 0x81, 0x59, 0xa4, 0x8f, 0xee, 0x40, 0x1d, 0xbb, 0xdc, 0x3f, 0x27,
0x8e, 0xd8, 0x2c, 0x89, 0x37, 0xb4, 0x2a, 0x79, 0xd5, 0xd8, 0x60, 0x0b, 0x5c, 0xee, 0xea, 0x4b,
0xb8, 0xe6, 0xd2, 0x29, 0xe3, 0x38, 0x08, 0xfc, 0x5f, 0x89, 0x97, 0xf5, 0x58, 0x93, 0x1e, 0xbb,
0x59, 0xf3, 0xcc, 0xef, 0x6b, 0xd8, 0x4c, 0x3b, 0x4a, 0x5b, 0x97, 0xa7, 0xb9, 0x6f, 0xc4, 0x3d,
0x67, 0x24, 0x3d, 0x67, 0x74, 0x13, 0x86, 0x35, 0x23, 0xa3, 0x17, 0x50, 0xc9, 0x9c, 0x23, 0xd3,
0x36, 0x0e, 0x8b, 0x1f, 0x5f, 0x8a, 0x5c, 0x08, 0x64, 0xc2, 0x06, 0x1b, 0x13, 0xd7, 0xc7, 0x01,
0xd3, 0x36, 0x65, 0xb8, 0x5b, 0x97, 0x85, 0xb3, 0x63, 0x9e, 0x45, 0xdc, 0x88, 0x7a, 0x56, 0xea,
0xa6, 0x3f, 0x84, 0xeb, 0xcd, 0x65, 0x89, 0xbe, 0x77, 0x28, 0x0c, 0xd0, 0x16, 0x9c, 0xde, 0x37,
0x1a, 0x13, 0xd8, 0x5b, 0xc2, 0x57, 0xcd, 0xfd, 0x13, 0xa0, 0xc5, 0x4a, 0xa8, 0x4e, 0x3f, 0xbe,
0x2c, 0x9d, 0xc5, 0x70, 0xf5, 0x85, 0x7a, 0xe9, 0xef, 0x4a, 0x50, 0x5f, 0x20, 0x8a, 0x2e, 0x09,
0x30, 0xe3, 0xaa, 0xe2, 0x94, 0xb8, 0x38, 0x70, 0xd5, 0x2c, 0x56, 0x85, 0x41, 0xed, 0x4e, 0xc0,
0xe8, 0x18, 0x6a, 0x6f, 0x26, 0x8c, 0xfb, 0x7d, 0x5f, 0x6e, 0x8c, 0x12, 0x7c, 0xa6, 0x1a, 0xb8,
0x9a, 0xe2, 0xb6, 0x84, 0x91, 0x01, 0x3b, 0x32, 0x6c, 0x86, 0x1f, 0x44, 0x5c, 0xf6, 0x72, 0xc9,
0x92, 0x2b, 0x7e, 0x9f, 0x7a, 0x04, 0x11, 0x4f, 0xf9, 0x7d, 0x3f, 0xc4, 0x2a, 0x71, 0xc1, 0x2f,
0xcd, 0xf8, 0x8f, 0x13, 0x8b, 0xe4, 0xdf, 0x86, 0xaa, 0x3b, 0xa1, 0x72, 0xd0, 0xbc, 0x69, 0x88,
0x19, 0x9f, 0xca, 0xd6, 0x2e, 0x59, 0xdb, 0x0a, 0x7e, 0x14, 0xa3, 0xe8, 0x53, 0xa8, 0x28, 0x82,
0xc3, 0x08, 0xf1, 0x54, 0x3b, 0x97, 0x15, 0x66, 0x13, 0xe2, 0x89, 0x89, 0x4b, 0x29, 0x1c, 0x53,
0x2e, 0x1b, 0xb9, 0x64, 0x25, 0x7e, 0xb6, 0xc0, 0x50, 0x17, 0xea, 0x2e, 0x8d, 0x18, 0x0b, 0xfc,
0xf0, 0x4c, 0x1c, 0x53, 0x44, 0xbd, 0xa4, 0x69, 0x6f, 0x5f, 0x5e, 0x16, 0xe5, 0xa0, 0xfa, 0xac,
0xe6, 0xe6, 0x01, 0x86, 0xbe, 0x03, 0x38, 0xc7, 0x81, 0xef, 0x61, 0x1e, 0xd1, 0xa4, 0x69, 0x2f,
0x0d, 0xf7, 0x32, 0x61, 0xaa, 0x70, 0x19, 0x57, 0x44, 0xe1, 0x06, 0x1b, 0x62, 0xea, 0x39, 0x38,
0xf4, 0x1c, 0x37, 0x1a, 0x8d, 0x7c, 0xce, 0x09, 0x61, 0x4e, 0x3f, 0xa2, 0xf2, 0x24, 0x99, 0x06,
0x32, 0xb8, 0x71, 0xe9, 0x44, 0x08, 0x6f, 0x33, 0xf4, 0x9a, 0x89, 0xaf, 0x49, 0x29, 0x9e, 0x5a,
0xfb, 0x6c, 0x1e, 0x67, 0x8f, 0x23, 0x2a, 0x4a, 0xc0, 0xf4, 0xdf, 0xe0, 0xea, 0x72, 0x2f, 0xe4,
0xc1, 0x1e, 0x16, 0x1f, 0xce, 0x92, 0x3d, 0x69, 0x2b, 0x72, 0x23, 0xc7, 0xff, 0x7a, 0x23, 0xd6,
0x55, 0x19, 0x6b, 0x01, 0x17, 0x77, 0x97, 0x99, 0xd7, 0xb1, 0x0f, 0xdd, 0x5d, 0x19, 0xfa, 0xfb,
0x06, 0xf4, 0x04, 0xea, 0x0b, 0xab, 0xa1, 0x3d, 0xd8, 0x88, 0xb3, 0xf1, 0x3d, 0x35, 0x1f, 0xeb,
0xf2, 0xff, 0xa9, 0x87, 0x3e, 0x81, 0xcd, 0x59, 0x7a, 0x85, 0xc3, 0xe2, 0xd1, 0x96, 0x35, 0x03,
0xf4, 0xd7, 0xb0, 0x93, 0x5b, 0x57, 0x0d, 0xfa, 0x63, 0xa8, 0x64, 0xe5, 0xf9, 0x43, 0x97, 0x59,
0x36, 0x44, 0x39, 0x23, 0xdf, 0xfa, 0xdf, 0x2b, 0x50, 0xce, 0x18, 0xd1, 0x2f, 0x70, 0x65, 0x4c,
0x42, 0xcf, 0x0f, 0x07, 0x4e, 0x4e, 0x60, 0x57, 0xfe, 0x8b, 0xc0, 0xee, 0xa8, 0x50, 0x66, 0x56,
0x67, 0x0d, 0xd8, 0xa1, 0xc4, 0x15, 0xa3, 0x27, 0x2f, 0x55, 0x79, 0x4d, 0x10, 0x26, 0x13, 0xaf,
0x58, 0xf5, 0xd8, 0x94, 0x3e, 0x27, 0x08, 0x43, 0xcf, 0xa1, 0x96, 0xec, 0x28, 0xd5, 0xe7, 0xe2,
0xc7, 0xe8, 0x73, 0x55, 0xb9, 0xdb, 0x89, 0x4c, 0xff, 0x5e, 0x80, 0xea, 0xdc, 0x34, 0xa0, 0xeb,
0x00, 0xe3, 0x49, 0x2f, 0xf0, 0x5d, 0xe7, 0x8c, 0x4c, 0x55, 0x39, 0x37, 0x63, 0xe4, 0x19, 0x99,
0x0a, 0xed, 0xba, 0xf0, 0xf9, 0xd0, 0xa3, 0xf8, 0x02, 0x07, 0x71, 0x5f, 0x26, 0xda, 0x35, 0xc3,
0x65, 0xd5, 0xd1, 0x3d, 0x40, 0x19, 0x2a, 0xf6, 0x3c, 0x4a, 0x18, 0x53, 0xd7, 0x70, 0x7d, 0x66,
0x31, 0x63, 0x03, 0xba, 0x0b, 0x75, 0x75, 0x61, 0xc7, 0x35, 0x1f, 0x91, 0x90, 0xab, 0xfb, 0xb8,
0x16, 0x1b, 0x9a, 0x29, 0x8e, 0x34, 0x58, 0xef, 0xe1, 0x00, 0x87, 0x2e, 0x51, 0x7a, 0x95, 0xfc,
0x0a, 0x15, 0x92, 0xea, 0x93, 0xea, 0xd9, 0x5a, 0xac, 0x42, 0x12, 0x4c, 0xd4, 0xec, 0x00, 0xca,
0x24, 0xf4, 0x52, 0x4a, 0x2c, 0x54, 0x40, 0x42, 0x4f, 0x11, 0xf4, 0xbf, 0x0a, 0xb0, 0xbb, 0xb4,
0x94, 0xa2, 0xd1, 0xa5, 0xa4, 0xc6, 0xbd, 0x2b, 0xbf, 0x73, 0x3d, 0x5d, 0xc8, 0xf7, 0xf4, 0x2d,
0xd8, 0x5e, 0xaa, 0xdd, 0x5b, 0x6f, 0x72, 0xba, 0xfd, 0x39, 0x5c, 0x99, 0xd1, 0x66, 0xed, 0xa0,
0xf2, 0x47, 0xa9, 0x2d, 0xed, 0x07, 0x74, 0x04, 0xb5, 0x78, 0xcd, 0x0c, 0x3b, 0x7e, 0x95, 0x6c,
0x4b, 0x7c, 0xc6, 0xbc, 0x0b, 0xf5, 0xb8, 0x83, 0x09, 0x75, 0x7a, 0x3e, 0xef, 0xfb, 0x24, 0x48,
0xf4, 0xbb, 0x96, 0x18, 0x1a, 0x0a, 0x47, 0x0f, 0x60, 0x37, 0xea, 0x05, 0xfe, 0xdb, 0x09, 0x71,
0x32, 0x0f, 0x30, 0xc2, 0xb4, 0x75, 0xd9, 0x96, 0x3b, 0xca, 0xf8, 0x3c, 0x7d, 0x89, 0x11, 0x26,
0x8e, 0x1c, 0x27, 0x67, 0xe5, 0x30, 0x7f, 0x20, 0xf5, 0xbc, 0x64, 0x55, 0x52, 0xd0, 0xf6, 0x07,
0xfa, 0x6b, 0xa8, 0xce, 0xe9, 0xb8, 0x28, 0x62, 0x52, 0x01, 0xa5, 0x04, 0xea, 0x57, 0x28, 0x81,
0x4c, 0x4b, 0x66, 0x55, 0x88, 0x7b, 0x30, 0x05, 0xd2, 0x12, 0x14, 0x67, 0x25, 0xd0, 0xbf, 0x85,
0x7a, 0xa6, 0x4a, 0x6a, 0x63, 0xc7, 0x50, 0xcb, 0xcc, 0x6e, 0xf2, 0x94, 0x2c, 0xca, 0x97, 0x5b,
0x9e, 0xac, 0x7f, 0x05, 0x5b, 0xb9, 0x61, 0x11, 0x8b, 0x9c, 0xf9, 0x61, 0xac, 0x51, 0x5b, 0x96,
0xfc, 0x16, 0x98, 0x87, 0x39, 0x56, 0x23, 0x2a, 0xbf, 0xef, 0xbc, 0x2b, 0xc0, 0x6a, 0x37, 0x1a,
0xfb, 0x2e, 0x2a, 0xc3, 0xfa, 0x69, 0xfb, 0x59, 0xbb, 0xf3, 0x63, 0xbb, 0xf6, 0x3f, 0x74, 0x03,
0xf6, 0x1b, 0x2d, 0xb3, 0xd9, 0x69, 0x3b, 0x8d, 0x93, 0x4e, 0xf3, 0x99, 0xf3, 0xc4, 0xb4, 0x9f,
0x38, 0x66, 0xbb, 0xdd, 0x39, 0x6d, 0x37, 0x5b, 0xb5, 0x15, 0xa4, 0xc1, 0x95, 0x9c, 0xdd, 0x6a,
0xbd, 0x38, 0x6d, 0xd9, 0xdd, 0x5a, 0x01, 0xdd, 0x86, 0x9b, 0xcb, 0x2c, 0x4e, 0xe3, 0x95, 0x63,
0x9f, 0x74, 0xba, 0x4e, 0xfb, 0xf4, 0x87, 0x46, 0xcb, 0xaa, 0x15, 0xd1, 0x1e, 0xec, 0xce, 0x11,
0xed, 0xe7, 0x9d, 0xb6, 0xdd, 0xaa, 0x95, 0xd0, 0x67, 0x70, 0xd8, 0xb4, 0x5e, 0xd9, 0x5d, 0xf3,
0xe4, 0xe4, 0xe9, 0xcf, 0xad, 0x47, 0x8e, 0xdd, 0x35, 0xbb, 0xad, 0xb9, 0x3d, 0xac, 0x8a, 0x3d,
0x2e, 0x61, 0x25, 0x3b, 0x59, 0x43, 0x07, 0xf0, 0xff, 0xa5, 0x76, 0xb5, 0xcc, 0xba, 0x08, 0x60,
0x36, 0xbb, 0x4f, 0x5f, 0xb6, 0x96, 0x2e, 0xb0, 0x21, 0x92, 0xcc, 0xd9, 0x93, 0xd0, 0x9b, 0x62,
0xef, 0x73, 0x16, 0x15, 0x14, 0x7a, 0x6b, 0xf2, 0xc1, 0xfb, 0xf0, 0x9f, 0x00, 0x00, 0x00, 0xff,
0xff, 0xad, 0x2f, 0xe7, 0xd9, 0x9c, 0x0d, 0x00, 0x00,
}

View File

@@ -44,6 +44,7 @@ message BeaconBlock {
bytes crystallized_state_hash = 6;
google.protobuf.Timestamp timestamp = 7;
repeated AggregatedAttestation attestations = 8;
repeated SpecialRecord specials = 9;
}
message CrystallizedStateHashAnnounce {
@@ -95,6 +96,7 @@ message ActiveStateResponse {
message ActiveState {
repeated AggregatedAttestation pending_attestations = 1;
repeated bytes recent_block_hashes = 2;
repeated SpecialRecord pending_specials = 3;
}
message ValidatorRecord {
@@ -127,3 +129,8 @@ message CrosslinkRecord {
message AttestationHashes {
repeated bytes attestation_hash = 1;
}
message SpecialRecord {
uint32 kind = 1;
repeated bytes data = 2;
}