mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2025-01-12 08:45:17 +00:00
parent
0baa4ea341
commit
5a3af70dc8
@ -26,7 +26,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
BlossomSubD = 6
|
BlossomSubD = 6
|
||||||
BlossomSubDlo = 5
|
BlossomSubDlo = 5
|
||||||
BlossomSubDhi = 24
|
BlossomSubDhi = 10
|
||||||
BlossomSubDscore = 4
|
BlossomSubDscore = 4
|
||||||
BlossomSubDout = 2
|
BlossomSubDout = 2
|
||||||
BlossomSubHistoryLength = 5
|
BlossomSubHistoryLength = 5
|
||||||
|
@ -27,10 +27,23 @@ func logger() *zap.Logger {
|
|||||||
return log
|
return log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func debugLogger() *zap.Logger {
|
||||||
|
log, err := zap.NewDevelopment()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return log
|
||||||
|
}
|
||||||
|
|
||||||
var loggerSet = wire.NewSet(
|
var loggerSet = wire.NewSet(
|
||||||
logger,
|
logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var debugLoggerSet = wire.NewSet(
|
||||||
|
debugLogger,
|
||||||
|
)
|
||||||
|
|
||||||
var keyManagerSet = wire.NewSet(
|
var keyManagerSet = wire.NewSet(
|
||||||
wire.FieldsOf(new(*config.Config), "Key"),
|
wire.FieldsOf(new(*config.Config), "Key"),
|
||||||
keys.NewFileKeyManager,
|
keys.NewFileKeyManager,
|
||||||
@ -75,6 +88,18 @@ var consensusSet = wire.NewSet(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func NewDebugNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) {
|
||||||
|
panic(wire.Build(
|
||||||
|
debugLoggerSet,
|
||||||
|
keyManagerSet,
|
||||||
|
storeSet,
|
||||||
|
pubSubSet,
|
||||||
|
engineSet,
|
||||||
|
consensusSet,
|
||||||
|
newNode,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
func NewNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) {
|
func NewNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) {
|
||||||
panic(wire.Build(
|
panic(wire.Build(
|
||||||
loggerSet,
|
loggerSet,
|
||||||
|
@ -23,6 +23,30 @@ import (
|
|||||||
|
|
||||||
// Injectors from wire.go:
|
// Injectors from wire.go:
|
||||||
|
|
||||||
|
func NewDebugNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) {
|
||||||
|
zapLogger := debugLogger()
|
||||||
|
dbConfig := configConfig.DB
|
||||||
|
pebbleDB := store.NewPebbleDB(dbConfig)
|
||||||
|
pebbleClockStore := store.NewPebbleClockStore(pebbleDB, zapLogger)
|
||||||
|
keyConfig := configConfig.Key
|
||||||
|
fileKeyManager := keys.NewFileKeyManager(keyConfig, zapLogger)
|
||||||
|
p2PConfig := configConfig.P2P
|
||||||
|
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
||||||
|
engineConfig := configConfig.Engine
|
||||||
|
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
||||||
|
kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
|
||||||
|
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
||||||
|
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
||||||
|
pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
|
||||||
|
ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, inMemoryPeerInfoManager, pebbleKeyStore)
|
||||||
|
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||||
|
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return node, nil
|
||||||
|
}
|
||||||
|
|
||||||
func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) {
|
func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) {
|
||||||
zapLogger := logger()
|
zapLogger := logger()
|
||||||
dbConfig := configConfig.DB
|
dbConfig := configConfig.DB
|
||||||
@ -74,10 +98,23 @@ func logger() *zap.Logger {
|
|||||||
return log
|
return log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func debugLogger() *zap.Logger {
|
||||||
|
log, err := zap.NewDevelopment()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return log
|
||||||
|
}
|
||||||
|
|
||||||
var loggerSet = wire.NewSet(
|
var loggerSet = wire.NewSet(
|
||||||
logger,
|
logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var debugLoggerSet = wire.NewSet(
|
||||||
|
debugLogger,
|
||||||
|
)
|
||||||
|
|
||||||
var keyManagerSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "Key"), keys.NewFileKeyManager, wire.Bind(new(keys.KeyManager), new(*keys.FileKeyManager)))
|
var keyManagerSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "Key"), keys.NewFileKeyManager, wire.Bind(new(keys.KeyManager), new(*keys.FileKeyManager)))
|
||||||
|
|
||||||
var storeSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "DB"), store.NewPebbleDB, wire.Bind(new(store.KVDB), new(*store.PebbleDB)), store.NewPebbleClockStore, store.NewPebbleKeyStore, store.NewPebbleDataProofStore, wire.Bind(new(store.ClockStore), new(*store.PebbleClockStore)), wire.Bind(new(store.KeyStore), new(*store.PebbleKeyStore)), wire.Bind(new(store.DataProofStore), new(*store.PebbleDataProofStore)))
|
var storeSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "DB"), store.NewPebbleDB, wire.Bind(new(store.KVDB), new(*store.PebbleDB)), store.NewPebbleClockStore, store.NewPebbleKeyStore, store.NewPebbleDataProofStore, wire.Bind(new(store.ClockStore), new(*store.PebbleClockStore)), wire.Bind(new(store.KeyStore), new(*store.PebbleKeyStore)), wire.Bind(new(store.DataProofStore), new(*store.PebbleDataProofStore)))
|
||||||
|
@ -6,15 +6,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func GetMinimumVersionCutoff() time.Time {
|
func GetMinimumVersionCutoff() time.Time {
|
||||||
return time.Date(2024, time.March, 21, 5, 00, 0, 0, time.UTC)
|
return time.Date(2024, time.March, 27, 8, 30, 0, 0, time.UTC)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMinimumVersion() []byte {
|
func GetMinimumVersion() []byte {
|
||||||
return []byte{0x01, 0x04, 0x0B}
|
return []byte{0x01, 0x04, 0x0D}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVersion() []byte {
|
func GetVersion() []byte {
|
||||||
return []byte{0x01, 0x04, 0x0C}
|
return []byte{0x01, 0x04, 0x0D}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVersionString() string {
|
func GetVersionString() string {
|
||||||
|
@ -242,7 +242,7 @@ func NewCeremonyDataClockConsensusEngine(
|
|||||||
dataTimeReel: dataTimeReel,
|
dataTimeReel: dataTimeReel,
|
||||||
peerInfoManager: peerInfoManager,
|
peerInfoManager: peerInfoManager,
|
||||||
statsClient: statsClient,
|
statsClient: statsClient,
|
||||||
messageProcessorCh: make(chan *pb.Message, 128),
|
messageProcessorCh: make(chan *pb.Message),
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Info("constructing consensus engine")
|
logger.Info("constructing consensus engine")
|
||||||
@ -280,9 +280,7 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go e.runMessageHandler()
|
||||||
e.runMessageHandler()
|
|
||||||
}()
|
|
||||||
|
|
||||||
e.logger.Info("subscribing to pubsub messages")
|
e.logger.Info("subscribing to pubsub messages")
|
||||||
e.pubSub.Subscribe(e.filter, e.handleMessage, true)
|
e.pubSub.Subscribe(e.filter, e.handleMessage, true)
|
||||||
@ -309,8 +307,6 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
|
|||||||
thresholdBeforeConfirming := 4
|
thresholdBeforeConfirming := 4
|
||||||
|
|
||||||
for {
|
for {
|
||||||
time.Sleep(120 * time.Second)
|
|
||||||
|
|
||||||
list := &protobufs.CeremonyPeerListAnnounce{
|
list := &protobufs.CeremonyPeerListAnnounce{
|
||||||
PeerList: []*protobufs.CeremonyPeer{},
|
PeerList: []*protobufs.CeremonyPeer{},
|
||||||
}
|
}
|
||||||
@ -413,12 +409,12 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
|
|||||||
if thresholdBeforeConfirming > 0 {
|
if thresholdBeforeConfirming > 0 {
|
||||||
thresholdBeforeConfirming--
|
thresholdBeforeConfirming--
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time.Sleep(120 * time.Second)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go e.runLoop()
|
||||||
e.runLoop()
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
errChan <- nil
|
errChan <- nil
|
||||||
@ -467,7 +463,10 @@ func (e *CeremonyDataClockConsensusEngine) runLoop() {
|
|||||||
if e.latestFrameReceived < latestFrame.FrameNumber {
|
if e.latestFrameReceived < latestFrame.FrameNumber {
|
||||||
e.latestFrameReceived = latestFrame.FrameNumber
|
e.latestFrameReceived = latestFrame.FrameNumber
|
||||||
go func() {
|
go func() {
|
||||||
e.frameChan <- latestFrame
|
select {
|
||||||
|
case e.frameChan <- latestFrame:
|
||||||
|
default:
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,7 +511,10 @@ func (e *CeremonyDataClockConsensusEngine) runLoop() {
|
|||||||
if e.latestFrameReceived < latestFrame.FrameNumber {
|
if e.latestFrameReceived < latestFrame.FrameNumber {
|
||||||
e.latestFrameReceived = latestFrame.FrameNumber
|
e.latestFrameReceived = latestFrame.FrameNumber
|
||||||
go func() {
|
go func() {
|
||||||
e.frameChan <- latestFrame
|
select {
|
||||||
|
case e.frameChan <- latestFrame:
|
||||||
|
default:
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ package ceremony
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/binary"
|
|
||||||
"io"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||||||
@ -161,6 +159,13 @@ func (e *CeremonyDataClockConsensusEngine) GetMostAheadPeer(
|
|||||||
var peer []byte = nil
|
var peer []byte = nil
|
||||||
e.peerMapMx.RLock()
|
e.peerMapMx.RLock()
|
||||||
for _, v := range e.peerMap {
|
for _, v := range e.peerMap {
|
||||||
|
e.logger.Debug(
|
||||||
|
"checking peer info",
|
||||||
|
zap.Binary("peer_id", v.peerId),
|
||||||
|
zap.Uint64("max_frame_number", v.maxFrame),
|
||||||
|
zap.Int64("timestamp", v.timestamp),
|
||||||
|
zap.Binary("version", v.version),
|
||||||
|
)
|
||||||
_, ok := e.uncooperativePeersMap[string(v.peerId)]
|
_, ok := e.uncooperativePeersMap[string(v.peerId)]
|
||||||
if v.maxFrame > max &&
|
if v.maxFrame > max &&
|
||||||
v.timestamp > config.GetMinimumVersionCutoff().UnixMilli() &&
|
v.timestamp > config.GetMinimumVersionCutoff().UnixMilli() &&
|
||||||
@ -203,52 +208,16 @@ func (e *CeremonyDataClockConsensusEngine) sync(
|
|||||||
|
|
||||||
client := protobufs.NewCeremonyServiceClient(cc)
|
client := protobufs.NewCeremonyServiceClient(cc)
|
||||||
|
|
||||||
from := latest.FrameNumber
|
response, err := client.GetDataFrame(
|
||||||
if from == 0 {
|
context.TODO(),
|
||||||
from = 1
|
&protobufs.GetDataFrameRequest{
|
||||||
}
|
FrameNumber: 0,
|
||||||
|
},
|
||||||
rangeParentSelectors := []*protobufs.ClockFrameParentSelectors{}
|
|
||||||
if from > 128 {
|
|
||||||
rangeSubtract := uint64(16)
|
|
||||||
for {
|
|
||||||
if from <= rangeSubtract {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
parentNumber := from - uint64(rangeSubtract)
|
|
||||||
rangeSubtract *= 2
|
|
||||||
parent, _, err := e.clockStore.GetDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
parentNumber,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
parentSelector, err := parent.GetSelector()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
rangeParentSelectors = append(
|
|
||||||
rangeParentSelectors,
|
|
||||||
&protobufs.ClockFrameParentSelectors{
|
|
||||||
FrameNumber: parentNumber,
|
|
||||||
ParentSelector: parentSelector.FillBytes(make([]byte, 32)),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s, err := client.NegotiateCompressedSyncFrames(
|
|
||||||
context.Background(),
|
|
||||||
grpc.MaxCallRecvMsgSize(600*1024*1024),
|
grpc.MaxCallRecvMsgSize(600*1024*1024),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logger.Debug(
|
e.logger.Error(
|
||||||
"received error from peer",
|
"could not get frame",
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
)
|
)
|
||||||
e.peerMapMx.Lock()
|
e.peerMapMx.Lock()
|
||||||
@ -258,249 +227,31 @@ func (e *CeremonyDataClockConsensusEngine) sync(
|
|||||||
delete(e.peerMap, string(peerId))
|
delete(e.peerMap, string(peerId))
|
||||||
}
|
}
|
||||||
e.peerMapMx.Unlock()
|
e.peerMapMx.Unlock()
|
||||||
return latest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
challenge := binary.BigEndian.AppendUint64(
|
|
||||||
append([]byte{}, peerId...),
|
|
||||||
uint64(time.Now().UnixMilli()),
|
|
||||||
)
|
|
||||||
signature, err := e.pubSub.SignMessage(challenge)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
|
|
||||||
SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Authentication{
|
|
||||||
Authentication: &protobufs.SyncRequestAuthentication{
|
|
||||||
PeerId: e.pubSub.GetPeerID(),
|
|
||||||
Challenge: challenge,
|
|
||||||
Response: &protobufs.Ed448Signature{
|
|
||||||
Signature: signature,
|
|
||||||
PublicKey: &protobufs.Ed448PublicKey{
|
|
||||||
KeyValue: e.pubSub.GetPublicKey(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
return latest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
|
|
||||||
SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Preflight{
|
|
||||||
Preflight: &protobufs.ClockFramesPreflight{
|
|
||||||
RangeParentSelectors: rangeParentSelectors,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
return latest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
syncMsg, err := s.Recv()
|
|
||||||
if err != nil {
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
return latest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
preflight, ok := syncMsg.
|
|
||||||
SyncMessage.(*protobufs.CeremonyCompressedSyncResponseMessage_Preflight)
|
|
||||||
if !ok {
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
s.CloseSend()
|
|
||||||
return latest, errors.Wrap(
|
|
||||||
errors.New("preflight message invalid"),
|
|
||||||
"sync",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// loop through parent selectors, set found to first match, and if subsequent
|
|
||||||
// matches fail to be found, cancel the search, start from 1.
|
|
||||||
found := uint64(0)
|
|
||||||
parentSelector := make([]byte, 32)
|
|
||||||
|
|
||||||
for _, selector := range preflight.Preflight.RangeParentSelectors {
|
|
||||||
match, err := e.clockStore.GetStagedDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
selector.FrameNumber,
|
|
||||||
selector.ParentSelector,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil && found == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err != nil && found != 0 {
|
|
||||||
found = 1
|
|
||||||
e.logger.Info("could not find interstitial frame, setting search to 1")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if match != nil && found == 0 {
|
|
||||||
found = match.FrameNumber
|
|
||||||
parentSelector = match.ParentSelector
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if found != 0 && !bytes.Equal(parentSelector, make([]byte, 32)) {
|
|
||||||
check, err := e.clockStore.GetStagedDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
found,
|
|
||||||
parentSelector,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
from = 1
|
|
||||||
} else {
|
|
||||||
e.logger.Info("checking interstitial continuity")
|
|
||||||
for check.FrameNumber > 1 {
|
|
||||||
check, err = e.clockStore.GetStagedDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
check.FrameNumber-1,
|
|
||||||
check.ParentSelector,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
from = 1
|
|
||||||
e.logger.Info(
|
|
||||||
"could not confirm interstitial continuity, setting search to 1",
|
|
||||||
)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
from = found
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
|
|
||||||
SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Request{
|
|
||||||
Request: &protobufs.ClockFramesRequest{
|
|
||||||
Filter: e.filter,
|
|
||||||
FromFrameNumber: from,
|
|
||||||
ToFrameNumber: 0,
|
|
||||||
ParentSelector: parentSelector,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return latest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
for syncMsg, err = s.Recv(); err == nil; syncMsg, err = s.Recv() {
|
|
||||||
sync, ok := syncMsg.
|
|
||||||
SyncMessage.(*protobufs.CeremonyCompressedSyncResponseMessage_Response)
|
|
||||||
if !ok {
|
|
||||||
return latest, errors.Wrap(
|
|
||||||
errors.New("response message invalid"),
|
|
||||||
"sync",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
response := sync.Response
|
|
||||||
|
|
||||||
e.logger.Info(
|
|
||||||
"received compressed sync frame",
|
|
||||||
zap.Uint64("from", response.FromFrameNumber),
|
|
||||||
zap.Uint64("to", response.ToFrameNumber),
|
|
||||||
zap.Int("frames", len(response.TruncatedClockFrames)),
|
|
||||||
zap.Int("proofs", len(response.Proofs)),
|
|
||||||
)
|
|
||||||
|
|
||||||
// This can only happen if we get a peer with state that was initially
|
|
||||||
// farther ahead, but something happened. However, this has a sticking
|
|
||||||
// effect that doesn't go away for them until they're caught up again,
|
|
||||||
// so let's not penalize their score and make everyone else suffer,
|
|
||||||
// let's just move on:
|
|
||||||
if response.FromFrameNumber == 0 && response.ToFrameNumber == 0 {
|
|
||||||
if err := cc.Close(); err != nil {
|
|
||||||
e.logger.Error("error while closing connection", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentLatest, errors.Wrap(ErrNoNewFrames, "sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
var next *protobufs.ClockFrame
|
|
||||||
if next, err = e.decompressAndStoreCandidates(
|
|
||||||
peerId,
|
|
||||||
response,
|
|
||||||
); err != nil && !errors.Is(err, ErrNoNewFrames) {
|
|
||||||
e.logger.Error(
|
|
||||||
"could not decompress and store candidate",
|
|
||||||
zap.Error(err),
|
|
||||||
)
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().
|
|
||||||
UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
|
|
||||||
if err := cc.Close(); err != nil {
|
|
||||||
e.logger.Error("error while closing connection", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentLatest, errors.Wrap(err, "sync")
|
|
||||||
}
|
|
||||||
if next != nil {
|
|
||||||
latest = next
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err != nil && err != io.EOF && !errors.Is(err, ErrNoNewFrames) {
|
|
||||||
e.logger.Debug("error while receiving sync", zap.Error(err))
|
|
||||||
|
|
||||||
if err := cc.Close(); err != nil {
|
if err := cc.Close(); err != nil {
|
||||||
e.logger.Error("error while closing connection", zap.Error(err))
|
e.logger.Error("error while closing connection", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
e.peerMapMx.Lock()
|
|
||||||
if _, ok := e.peerMap[string(peerId)]; ok {
|
|
||||||
e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
|
|
||||||
e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
|
|
||||||
delete(e.peerMap, string(peerId))
|
|
||||||
}
|
|
||||||
e.peerMapMx.Unlock()
|
|
||||||
|
|
||||||
return latest, errors.Wrap(err, "sync")
|
return latest, errors.Wrap(err, "sync")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if response == nil {
|
||||||
|
e.logger.Error("received no response from peer")
|
||||||
|
if err := cc.Close(); err != nil {
|
||||||
|
e.logger.Error("error while closing connection", zap.Error(err))
|
||||||
|
}
|
||||||
|
return latest, nil
|
||||||
|
}
|
||||||
|
|
||||||
e.logger.Info(
|
e.logger.Info(
|
||||||
"received new leading frame",
|
"received new leading frame",
|
||||||
zap.Uint64("frame_number", latest.FrameNumber),
|
zap.Uint64("frame_number", response.ClockFrame.FrameNumber),
|
||||||
)
|
)
|
||||||
if err := cc.Close(); err != nil {
|
if err := cc.Close(); err != nil {
|
||||||
e.logger.Error("error while closing connection", zap.Error(err))
|
e.logger.Error("error while closing connection", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
e.dataTimeReel.Insert(latest, false)
|
e.dataTimeReel.Insert(response.ClockFrame, false)
|
||||||
|
|
||||||
return latest, nil
|
return response.ClockFrame, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *CeremonyDataClockConsensusEngine) collect(
|
func (e *CeremonyDataClockConsensusEngine) collect(
|
||||||
|
@ -20,6 +20,7 @@ func (e *CeremonyDataClockConsensusEngine) runMessageHandler() {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case message := <-e.messageProcessorCh:
|
case message := <-e.messageProcessorCh:
|
||||||
|
e.logger.Debug("handling message")
|
||||||
msg := &protobufs.Message{}
|
msg := &protobufs.Message{}
|
||||||
|
|
||||||
if err := proto.Unmarshal(message.Data, msg); err != nil {
|
if err := proto.Unmarshal(message.Data, msg); err != nil {
|
||||||
@ -84,6 +85,7 @@ func (e *CeremonyDataClockConsensusEngine) runMessageHandler() {
|
|||||||
|
|
||||||
any := &anypb.Any{}
|
any := &anypb.Any{}
|
||||||
if err := proto.Unmarshal(msg.Payload, any); err != nil {
|
if err := proto.Unmarshal(msg.Payload, any); err != nil {
|
||||||
|
e.logger.Error("error while unmarshaling", zap.Error(err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +96,7 @@ func (e *CeremonyDataClockConsensusEngine) runMessageHandler() {
|
|||||||
peer.version,
|
peer.version,
|
||||||
config.GetMinimumVersion(),
|
config.GetMinimumVersion(),
|
||||||
) < 0 {
|
) < 0 {
|
||||||
|
e.logger.Debug("received frame from unknown or outdated peer")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := e.handleClockFrameData(
|
if err := e.handleClockFrameData(
|
||||||
@ -334,7 +337,10 @@ func (e *CeremonyDataClockConsensusEngine) handleClockFrameData(
|
|||||||
if e.latestFrameReceived < frame.FrameNumber {
|
if e.latestFrameReceived < frame.FrameNumber {
|
||||||
e.latestFrameReceived = frame.FrameNumber
|
e.latestFrameReceived = frame.FrameNumber
|
||||||
go func() {
|
go func() {
|
||||||
e.frameChan <- frame
|
select {
|
||||||
|
case e.frameChan <- frame:
|
||||||
|
default:
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
e.dataTimeReel.Insert(frame, isSync)
|
e.dataTimeReel.Insert(frame, isSync)
|
||||||
|
@ -3,14 +3,9 @@ package ceremony
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/binary"
|
|
||||||
"io"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
pcrypto "github.com/libp2p/go-libp2p/core/crypto"
|
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
|
||||||
"github.com/mr-tron/base58"
|
"github.com/mr-tron/base58"
|
||||||
"github.com/pbnjay/memory"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
@ -24,347 +19,63 @@ import (
|
|||||||
|
|
||||||
var ErrNoNewFrames = errors.New("peer reported no frames")
|
var ErrNoNewFrames = errors.New("peer reported no frames")
|
||||||
|
|
||||||
// Compressed sync negotiation:
|
func (e *CeremonyDataClockConsensusEngine) GetDataFrame(
|
||||||
// Recipients of the sync Servers providing sync
|
ctx context.Context,
|
||||||
// | |
|
request *protobufs.GetDataFrameRequest,
|
||||||
// |---------[Preflight{HEAD, HEAD-16, HEAD-32, HEAD-64, ..., 1}]------------->|
|
) (*protobufs.DataFrameResponse, error) {
|
||||||
// |<--------[Preflight{HEAD, HEAD-16, HEAD-32, HEAD-64, ..., M}]--------------|
|
e.logger.Debug(
|
||||||
// | M = matching selector or 1 |
|
"received frame request",
|
||||||
// |------------------------------[Request{N}]-------------------------------->|
|
zap.Uint64("frame_number", request.FrameNumber),
|
||||||
// | N = matching higher selector or M |
|
)
|
||||||
// |<-------------------------[Response{N...N+16}]-----------------------------|
|
var frame *protobufs.ClockFrame
|
||||||
// |<--------------------------[Response{N+17...}]-----------------------------|
|
var err error
|
||||||
// |<--------------------------[Response{...HEAD}]-----------------------------|
|
if request.FrameNumber == 0 {
|
||||||
|
frame, err = e.dataTimeReel.Head()
|
||||||
|
} else {
|
||||||
|
frame, _, err = e.clockStore.GetDataClockFrame(
|
||||||
|
e.filter,
|
||||||
|
request.FrameNumber,
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.logger.Error(
|
||||||
|
"received error while fetching time reel head",
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return nil, errors.Wrap(err, "get data frame")
|
||||||
|
}
|
||||||
|
|
||||||
|
idx, err := e.frameProver.GenerateWeakRecursiveProofIndex(frame)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "get data frame")
|
||||||
|
}
|
||||||
|
|
||||||
|
indexFrame, _, err := e.clockStore.GetDataClockFrame(e.filter, idx, false)
|
||||||
|
if err != nil {
|
||||||
|
return &protobufs.DataFrameResponse{
|
||||||
|
ClockFrame: frame,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
proof := e.frameProver.FetchRecursiveProof(indexFrame)
|
||||||
|
|
||||||
|
e.logger.Debug(
|
||||||
|
"sending frame response",
|
||||||
|
zap.Uint64("frame_number", frame.FrameNumber),
|
||||||
|
)
|
||||||
|
|
||||||
|
return &protobufs.DataFrameResponse{
|
||||||
|
ClockFrame: frame,
|
||||||
|
Proof: proof,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *CeremonyDataClockConsensusEngine) NegotiateCompressedSyncFrames(
|
func (e *CeremonyDataClockConsensusEngine) NegotiateCompressedSyncFrames(
|
||||||
server protobufs.CeremonyService_NegotiateCompressedSyncFramesServer,
|
server protobufs.CeremonyService_NegotiateCompressedSyncFramesServer,
|
||||||
) error {
|
) error {
|
||||||
e.currentReceivingSyncPeersMx.Lock()
|
return nil
|
||||||
if e.currentReceivingSyncPeers > int(
|
|
||||||
memory.TotalMemory()/uint64(4294967296)-4,
|
|
||||||
) {
|
|
||||||
e.currentReceivingSyncPeersMx.Unlock()
|
|
||||||
|
|
||||||
e.logger.Debug(
|
|
||||||
"currently processing maximum sync requests, returning",
|
|
||||||
)
|
|
||||||
|
|
||||||
if err := server.SendMsg(
|
|
||||||
&protobufs.CeremonyCompressedSyncResponseMessage{
|
|
||||||
SyncMessage: &protobufs.CeremonyCompressedSyncResponseMessage_Response{
|
|
||||||
Response: &protobufs.CeremonyCompressedSync{
|
|
||||||
FromFrameNumber: 0,
|
|
||||||
ToFrameNumber: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
); err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
request, err := server.Recv()
|
|
||||||
if err == io.EOF {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
authentication, ok := request.
|
|
||||||
SyncMessage.(*protobufs.CeremonyCompressedSyncRequestMessage_Authentication)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if authentication.Authentication == nil ||
|
|
||||||
authentication.Authentication.Challenge == nil ||
|
|
||||||
authentication.Authentication.PeerId == nil ||
|
|
||||||
authentication.Authentication.Response == nil ||
|
|
||||||
authentication.Authentication.Response.PublicKey == nil ||
|
|
||||||
authentication.Authentication.Response.PublicKey.KeyValue == nil ||
|
|
||||||
authentication.Authentication.Response.Signature == nil ||
|
|
||||||
len(authentication.Authentication.Challenge) < 8 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if !bytes.Equal(
|
|
||||||
authentication.Authentication.Challenge[:len(
|
|
||||||
authentication.Authentication.Challenge,
|
|
||||||
)-8],
|
|
||||||
e.pubSub.GetPeerID(),
|
|
||||||
) {
|
|
||||||
e.logger.Warn(
|
|
||||||
"peer provided invalid challenge",
|
|
||||||
)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// probably some remark to make about chronometers here, whether one or three
|
|
||||||
challenge := int64(
|
|
||||||
binary.BigEndian.Uint64(
|
|
||||||
authentication.Authentication.Challenge[len(
|
|
||||||
authentication.Authentication.Challenge,
|
|
||||||
)-8:],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
dist := time.Now().UnixMilli() - challenge
|
|
||||||
if dist < 0 {
|
|
||||||
dist *= -1
|
|
||||||
}
|
|
||||||
|
|
||||||
// account for skew
|
|
||||||
if dist > 30000 {
|
|
||||||
e.logger.Debug(
|
|
||||||
"peer provided challenge with too great of a distance",
|
|
||||||
zap.Int64("distance", dist),
|
|
||||||
)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
key, err := pcrypto.UnmarshalEd448PublicKey(
|
|
||||||
authentication.Authentication.Response.PublicKey.KeyValue,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
e.logger.Debug(
|
|
||||||
"peer provided invalid pubkey",
|
|
||||||
zap.Binary(
|
|
||||||
"public_key",
|
|
||||||
authentication.Authentication.Response.PublicKey.KeyValue,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !(peer.ID(authentication.Authentication.PeerId)).MatchesPublicKey(key) {
|
|
||||||
e.logger.Debug(
|
|
||||||
"peer id does not match pubkey",
|
|
||||||
zap.Binary("peer_id", authentication.Authentication.PeerId),
|
|
||||||
zap.Binary(
|
|
||||||
"public_key",
|
|
||||||
authentication.Authentication.Response.PublicKey.KeyValue,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := key.Verify(
|
|
||||||
authentication.Authentication.Challenge,
|
|
||||||
authentication.Authentication.Response.Signature,
|
|
||||||
)
|
|
||||||
if err != nil || !b {
|
|
||||||
e.logger.Debug(
|
|
||||||
"peer provided invalid signature",
|
|
||||||
zap.Binary("peer_id", authentication.Authentication.PeerId),
|
|
||||||
zap.Binary(
|
|
||||||
"public_key",
|
|
||||||
authentication.Authentication.Response.PublicKey.KeyValue,
|
|
||||||
),
|
|
||||||
zap.Binary(
|
|
||||||
"signature",
|
|
||||||
authentication.Authentication.Response.Signature,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
manifest := e.peerInfoManager.GetPeerInfo(
|
|
||||||
authentication.Authentication.PeerId,
|
|
||||||
)
|
|
||||||
if manifest == nil || manifest.Bandwidth <= 1048576 {
|
|
||||||
e.logger.Debug(
|
|
||||||
"peer manifest was null or bandwidth was low",
|
|
||||||
zap.Binary("peer_id", authentication.Authentication.PeerId),
|
|
||||||
)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: should give this more tlc, but should remap into blossomsub
|
|
||||||
// heuristics
|
|
||||||
|
|
||||||
e.currentReceivingSyncPeers++
|
|
||||||
e.currentReceivingSyncPeersMx.Unlock()
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
e.currentReceivingSyncPeersMx.Lock()
|
|
||||||
e.currentReceivingSyncPeers--
|
|
||||||
e.currentReceivingSyncPeersMx.Unlock()
|
|
||||||
}()
|
|
||||||
|
|
||||||
for {
|
|
||||||
request, err := server.Recv()
|
|
||||||
if err == io.EOF {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
switch msg := request.SyncMessage.(type) {
|
|
||||||
case *protobufs.CeremonyCompressedSyncRequestMessage_Preflight:
|
|
||||||
e.logger.Debug(
|
|
||||||
"received clock frame preflight",
|
|
||||||
zap.Int("selector_count", len(msg.Preflight.RangeParentSelectors)),
|
|
||||||
)
|
|
||||||
|
|
||||||
from := uint64(1)
|
|
||||||
|
|
||||||
preflightResponse := []*protobufs.ClockFrameParentSelectors{}
|
|
||||||
for _, selector := range msg.Preflight.RangeParentSelectors {
|
|
||||||
frame, _, err := e.clockStore.GetDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
selector.FrameNumber,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err == nil && frame != nil {
|
|
||||||
from = selector.FrameNumber
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
head, err := e.dataTimeReel.Head()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
to := head.FrameNumber
|
|
||||||
selector, err := head.GetSelector()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
preflightResponse = append(
|
|
||||||
preflightResponse,
|
|
||||||
&protobufs.ClockFrameParentSelectors{
|
|
||||||
FrameNumber: to,
|
|
||||||
ParentSelector: selector.FillBytes(make([]byte, 32)),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
rangeSubtract := uint64(4)
|
|
||||||
for {
|
|
||||||
parentNumber := to - uint64(rangeSubtract)
|
|
||||||
|
|
||||||
if parentNumber < from {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
rangeSubtract *= 2
|
|
||||||
parent, _, err := e.clockStore.GetDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
parentNumber,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
parentSelector, err := parent.GetSelector()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
preflightResponse = append(
|
|
||||||
preflightResponse,
|
|
||||||
&protobufs.ClockFrameParentSelectors{
|
|
||||||
FrameNumber: parent.FrameNumber,
|
|
||||||
ParentSelector: parentSelector.FillBytes(make([]byte, 32)),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
err = server.Send(&protobufs.CeremonyCompressedSyncResponseMessage{
|
|
||||||
SyncMessage: &protobufs.CeremonyCompressedSyncResponseMessage_Preflight{
|
|
||||||
Preflight: &protobufs.ClockFramesPreflight{
|
|
||||||
RangeParentSelectors: preflightResponse,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
case *protobufs.CeremonyCompressedSyncRequestMessage_Request:
|
|
||||||
e.logger.Info(
|
|
||||||
"received clock frame request",
|
|
||||||
zap.Uint64("from_frame_number", msg.Request.FromFrameNumber),
|
|
||||||
zap.Uint64("to_frame_number", msg.Request.ToFrameNumber),
|
|
||||||
)
|
|
||||||
from := msg.Request.FromFrameNumber
|
|
||||||
_, _, err := e.clockStore.GetDataClockFrame(
|
|
||||||
e.filter,
|
|
||||||
from,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
if !errors.Is(err, store.ErrNotFound) {
|
|
||||||
e.logger.Error(
|
|
||||||
"peer asked for frame that returned error",
|
|
||||||
zap.Uint64("frame_number", msg.Request.FromFrameNumber),
|
|
||||||
)
|
|
||||||
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
} else {
|
|
||||||
from = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
head, err := e.dataTimeReel.Head()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
max := head.FrameNumber
|
|
||||||
to := msg.Request.ToFrameNumber
|
|
||||||
|
|
||||||
// We need to slightly rewind, to compensate for unconfirmed frame heads
|
|
||||||
// on a given branch
|
|
||||||
if from >= 2 {
|
|
||||||
from--
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
|
||||||
if to == 0 || to-from > 4 {
|
|
||||||
if max > from+3 {
|
|
||||||
to = from + 4
|
|
||||||
} else {
|
|
||||||
to = max + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
syncMsg, err := e.clockStore.GetCompressedDataClockFrames(
|
|
||||||
e.filter,
|
|
||||||
from,
|
|
||||||
to,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := server.Send(&protobufs.CeremonyCompressedSyncResponseMessage{
|
|
||||||
SyncMessage: &protobufs.
|
|
||||||
CeremonyCompressedSyncResponseMessage_Response{
|
|
||||||
Response: syncMsg,
|
|
||||||
},
|
|
||||||
}); err != nil {
|
|
||||||
return errors.Wrap(err, "negotiate compressed sync frames")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg.Request.ToFrameNumber == 0 || msg.Request.ToFrameNumber > to) &&
|
|
||||||
max > to {
|
|
||||||
from = to + 1
|
|
||||||
if msg.Request.ToFrameNumber > to {
|
|
||||||
to = msg.Request.ToFrameNumber
|
|
||||||
} else {
|
|
||||||
to = 0
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: Use NegotiateCompressedSyncFrames.
|
// Deprecated: Use NegotiateCompressedSyncFrames.
|
||||||
|
@ -123,7 +123,7 @@ func NewMasterClockConsensusEngine(
|
|||||||
masterTimeReel: masterTimeReel,
|
masterTimeReel: masterTimeReel,
|
||||||
peerInfoManager: peerInfoManager,
|
peerInfoManager: peerInfoManager,
|
||||||
report: report,
|
report: report,
|
||||||
frameValidationCh: make(chan *protobufs.ClockFrame, 10),
|
frameValidationCh: make(chan *protobufs.ClockFrame),
|
||||||
bandwidthTestCh: make(chan []byte),
|
bandwidthTestCh: make(chan []byte),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,9 +135,9 @@ func (d *DataTimeReel) Start() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
d.totalDistance = big.NewInt(0)
|
||||||
d.proverTrie = trie
|
d.proverTrie = trie
|
||||||
d.headDistance, err = d.GetDistance(frame)
|
d.headDistance, err = d.GetDistance(frame)
|
||||||
d.totalDistance = d.getTotalDistance(frame)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
go d.runLoop()
|
go d.runLoop()
|
||||||
@ -287,7 +287,11 @@ func (d *DataTimeReel) runLoop() {
|
|||||||
case frame := <-d.frames:
|
case frame := <-d.frames:
|
||||||
// Most common scenario: in order – new frame is higher number
|
// Most common scenario: in order – new frame is higher number
|
||||||
if d.head.FrameNumber < frame.frameNumber {
|
if d.head.FrameNumber < frame.frameNumber {
|
||||||
d.logger.Debug("frame is higher")
|
d.logger.Debug(
|
||||||
|
"frame is higher",
|
||||||
|
zap.Uint64("head_frame_number", d.head.FrameNumber),
|
||||||
|
zap.Uint64("frame_number", frame.frameNumber),
|
||||||
|
)
|
||||||
|
|
||||||
// tag: equinox – master filter changes
|
// tag: equinox – master filter changes
|
||||||
_, err := d.clockStore.GetMasterClockFrame(
|
_, err := d.clockStore.GetMasterClockFrame(
|
||||||
@ -302,17 +306,9 @@ func (d *DataTimeReel) runLoop() {
|
|||||||
if !errors.Is(err, store.ErrNotFound) {
|
if !errors.Is(err, store.ErrNotFound) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
d.addPending(frame.selector, frame.parentSelector, frame.frameNumber)
|
|
||||||
d.processPending(d.head, frame)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
headSelector, err := d.head.GetSelector()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
rawFrame, err := d.clockStore.GetStagedDataClockFrame(
|
rawFrame, err := d.clockStore.GetStagedDataClockFrame(
|
||||||
d.filter,
|
d.filter,
|
||||||
frame.frameNumber,
|
frame.frameNumber,
|
||||||
@ -328,25 +324,8 @@ func (d *DataTimeReel) runLoop() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the frame has a gap from the head or is not descendent, mark it as
|
|
||||||
// pending:
|
|
||||||
if frame.frameNumber-d.head.FrameNumber != 1 ||
|
|
||||||
frame.parentSelector.Cmp(headSelector) != 0 {
|
|
||||||
d.logger.Debug(
|
|
||||||
"frame has has gap or is non-descendent, fork choice",
|
|
||||||
zap.Bool("has_gap", frame.frameNumber-d.head.FrameNumber != 1),
|
|
||||||
zap.String("parent_selector", frame.parentSelector.Text(16)),
|
|
||||||
zap.String("head_selector", headSelector.Text(16)),
|
|
||||||
)
|
|
||||||
|
|
||||||
d.forkChoice(rawFrame, distance)
|
|
||||||
d.processPending(d.head, frame)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise set it as the next and process all pending
|
// Otherwise set it as the next and process all pending
|
||||||
d.setHead(rawFrame, distance)
|
d.setHead(rawFrame, distance)
|
||||||
d.processPending(d.head, frame)
|
|
||||||
} else if d.head.FrameNumber == frame.frameNumber {
|
} else if d.head.FrameNumber == frame.frameNumber {
|
||||||
// frames are equivalent, no need to act
|
// frames are equivalent, no need to act
|
||||||
headSelector, err := d.head.GetSelector()
|
headSelector, err := d.head.GetSelector()
|
||||||
@ -356,7 +335,6 @@ func (d *DataTimeReel) runLoop() {
|
|||||||
|
|
||||||
if headSelector.Cmp(frame.selector) == 0 {
|
if headSelector.Cmp(frame.selector) == 0 {
|
||||||
d.logger.Debug("equivalent frame")
|
d.logger.Debug("equivalent frame")
|
||||||
d.processPending(d.head, frame)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,44 +361,11 @@ func (d *DataTimeReel) runLoop() {
|
|||||||
d.logger.Debug(
|
d.logger.Debug(
|
||||||
"frame shares parent, has shorter distance, short circuit",
|
"frame shares parent, has shorter distance, short circuit",
|
||||||
)
|
)
|
||||||
d.totalDistance.Sub(d.totalDistance, d.headDistance)
|
|
||||||
d.setHead(rawFrame, distance)
|
d.setHead(rawFrame, distance)
|
||||||
d.processPending(d.head, frame)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Choose fork
|
|
||||||
d.forkChoice(rawFrame, distance)
|
|
||||||
d.processPending(d.head, frame)
|
|
||||||
} else {
|
} else {
|
||||||
d.logger.Debug("frame is lower height")
|
d.logger.Debug("frame is lower height")
|
||||||
|
|
||||||
// tag: dusk – we should have some kind of check here to avoid brutal
|
|
||||||
// thrashing
|
|
||||||
existing, _, err := d.clockStore.GetDataClockFrame(
|
|
||||||
d.filter,
|
|
||||||
frame.frameNumber,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
// if this returns an error it's either not found (which shouldn't
|
|
||||||
// happen without corruption) or pebble is borked, either way, panic
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
existingSelector, err := existing.GetSelector()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// It's a fork, but it's behind. We need to stash it until it catches
|
|
||||||
// up (or dies off)
|
|
||||||
if existingSelector.Cmp(frame.selector) != 0 {
|
|
||||||
d.logger.Debug("is fork, add pending")
|
|
||||||
|
|
||||||
d.addPending(frame.selector, frame.parentSelector, frame.frameNumber)
|
|
||||||
d.processPending(d.head, frame)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case <-d.done:
|
case <-d.done:
|
||||||
return
|
return
|
||||||
@ -616,14 +561,6 @@ func (d *DataTimeReel) setHead(frame *protobufs.ClockFrame, distance *big.Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
d.head = frame
|
d.head = frame
|
||||||
d.totalDistance.Add(d.totalDistance, distance)
|
|
||||||
|
|
||||||
d.clockStore.SetTotalDistance(
|
|
||||||
d.filter,
|
|
||||||
frame.FrameNumber,
|
|
||||||
selector.FillBytes(make([]byte, 32)),
|
|
||||||
d.totalDistance,
|
|
||||||
)
|
|
||||||
|
|
||||||
d.headDistance = distance
|
d.headDistance = distance
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -40,4 +40,15 @@ type FrameProver interface {
|
|||||||
VerifyDataClockFrame(
|
VerifyDataClockFrame(
|
||||||
frame *protobufs.ClockFrame,
|
frame *protobufs.ClockFrame,
|
||||||
) error
|
) error
|
||||||
|
GenerateWeakRecursiveProofIndex(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
) (uint64, error)
|
||||||
|
FetchRecursiveProof(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
) []byte
|
||||||
|
VerifyWeakRecursiveProof(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
proof []byte,
|
||||||
|
deepVerifier *protobufs.ClockFrame,
|
||||||
|
) bool
|
||||||
}
|
}
|
||||||
|
@ -481,3 +481,115 @@ func (w *WesolowskiFrameProver) VerifyDataClockFrame(
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *WesolowskiFrameProver) GenerateWeakRecursiveProofIndex(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
) (uint64, error) {
|
||||||
|
hash, err := poseidon.HashBytes(frame.Output)
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.Wrap(err, "generate weak recursive proof")
|
||||||
|
}
|
||||||
|
|
||||||
|
return hash.Mod(
|
||||||
|
hash,
|
||||||
|
new(big.Int).SetUint64(frame.FrameNumber),
|
||||||
|
).Uint64(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *WesolowskiFrameProver) FetchRecursiveProof(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
) []byte {
|
||||||
|
var pubkey []byte
|
||||||
|
ed448PublicKey := frame.GetPublicKeySignatureEd448()
|
||||||
|
if ed448PublicKey != nil {
|
||||||
|
pubkey = ed448PublicKey.PublicKey.KeyValue
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
h, err := poseidon.HashBytes(pubkey)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
address := h.Bytes()
|
||||||
|
input := []byte{}
|
||||||
|
input = append(input, frame.Filter...)
|
||||||
|
input = binary.BigEndian.AppendUint64(input, frame.FrameNumber)
|
||||||
|
input = binary.BigEndian.AppendUint64(input, uint64(frame.Timestamp))
|
||||||
|
input = binary.BigEndian.AppendUint32(input, frame.Difficulty)
|
||||||
|
input = append(input, address...)
|
||||||
|
input = append(input, frame.Input...)
|
||||||
|
input = append(input, frame.Output...)
|
||||||
|
|
||||||
|
return input
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *WesolowskiFrameProver) VerifyWeakRecursiveProof(
|
||||||
|
frame *protobufs.ClockFrame,
|
||||||
|
proof []byte,
|
||||||
|
deepVerifier *protobufs.ClockFrame,
|
||||||
|
) bool {
|
||||||
|
hash, err := poseidon.HashBytes(frame.Output)
|
||||||
|
if err != nil {
|
||||||
|
w.logger.Debug("could not hash output")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
frameNumber := hash.Mod(
|
||||||
|
hash,
|
||||||
|
new(big.Int).SetUint64(frame.FrameNumber),
|
||||||
|
).Uint64()
|
||||||
|
|
||||||
|
if len(proof) < 1084 {
|
||||||
|
w.logger.Debug("invalid proof size")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
filter := proof[:len(frame.Filter)]
|
||||||
|
check := binary.BigEndian.Uint64(proof[len(frame.Filter) : len(frame.Filter)+8])
|
||||||
|
timestamp := binary.BigEndian.Uint64(
|
||||||
|
proof[len(frame.Filter)+8 : len(frame.Filter)+16],
|
||||||
|
)
|
||||||
|
difficulty := binary.BigEndian.Uint32(
|
||||||
|
proof[len(frame.Filter)+16 : len(frame.Filter)+20],
|
||||||
|
)
|
||||||
|
input := proof[len(frame.Filter)+52:]
|
||||||
|
|
||||||
|
if check != frameNumber ||
|
||||||
|
!bytes.Equal(filter, frame.Filter) ||
|
||||||
|
int64(timestamp) >= frame.Timestamp ||
|
||||||
|
difficulty > frame.Difficulty ||
|
||||||
|
len(input) < 1032 {
|
||||||
|
w.logger.Debug(
|
||||||
|
"check failed",
|
||||||
|
zap.Bool("failed_frame_number", check != frameNumber),
|
||||||
|
zap.Bool("failed_filter", !bytes.Equal(filter, frame.Filter)),
|
||||||
|
zap.Bool("failed_timestamp", int64(timestamp) >= frame.Timestamp),
|
||||||
|
zap.Bool("failed_difficulty", difficulty > frame.Difficulty),
|
||||||
|
zap.Bool("failed_input_size", len(input) < 1032),
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if deepVerifier != nil && (check != deepVerifier.FrameNumber ||
|
||||||
|
!bytes.Equal(filter, deepVerifier.Filter) ||
|
||||||
|
int64(timestamp) != deepVerifier.Timestamp ||
|
||||||
|
difficulty != deepVerifier.Difficulty ||
|
||||||
|
!bytes.Equal(input[:len(input)-516], deepVerifier.Input)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
b := sha3.Sum256(input[:len(input)-516])
|
||||||
|
v := vdf.New(difficulty, b)
|
||||||
|
output := [516]byte{}
|
||||||
|
copy(output[:], input[len(input)-516:])
|
||||||
|
|
||||||
|
if v.Verify(output) {
|
||||||
|
w.logger.Debug("verification succeeded")
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
w.logger.Debug("verification failed")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -447,9 +447,7 @@ func (e *CeremonyExecutionEngine) Start() <-chan error {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go e.RunWorker()
|
||||||
e.RunWorker()
|
|
||||||
}()
|
|
||||||
|
|
||||||
errChan <- nil
|
errChan <- nil
|
||||||
}()
|
}()
|
||||||
|
12
node/main.go
12
node/main.go
@ -79,6 +79,11 @@ var (
|
|||||||
false,
|
false,
|
||||||
"print node related information",
|
"print node related information",
|
||||||
)
|
)
|
||||||
|
debug = flag.Bool(
|
||||||
|
"debug",
|
||||||
|
false,
|
||||||
|
"sets log output to debug (verbose)",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -180,7 +185,12 @@ func main() {
|
|||||||
|
|
||||||
report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
|
report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
|
||||||
|
|
||||||
node, err := app.NewNode(nodeConfig, report)
|
var node *app.Node
|
||||||
|
if *debug {
|
||||||
|
node, err = app.NewDebugNode(nodeConfig, report)
|
||||||
|
} else {
|
||||||
|
node, err = app.NewNode(nodeConfig, report)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -1634,6 +1634,108 @@ func (x *InclusionCommitmentsMap) GetSegmentHashes() [][]byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetDataFrameRequest struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
FrameNumber uint64 `protobuf:"varint,1,opt,name=frame_number,json=frameNumber,proto3" json:"frame_number,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *GetDataFrameRequest) Reset() {
|
||||||
|
*x = GetDataFrameRequest{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_ceremony_proto_msgTypes[22]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *GetDataFrameRequest) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*GetDataFrameRequest) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *GetDataFrameRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_ceremony_proto_msgTypes[22]
|
||||||
|
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 GetDataFrameRequest.ProtoReflect.Descriptor instead.
|
||||||
|
func (*GetDataFrameRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return file_ceremony_proto_rawDescGZIP(), []int{22}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *GetDataFrameRequest) GetFrameNumber() uint64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.FrameNumber
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
type DataFrameResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
ClockFrame *ClockFrame `protobuf:"bytes,1,opt,name=clock_frame,json=clockFrame,proto3" json:"clock_frame,omitempty"`
|
||||||
|
Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *DataFrameResponse) Reset() {
|
||||||
|
*x = DataFrameResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_ceremony_proto_msgTypes[23]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *DataFrameResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*DataFrameResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *DataFrameResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_ceremony_proto_msgTypes[23]
|
||||||
|
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 DataFrameResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*DataFrameResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_ceremony_proto_rawDescGZIP(), []int{23}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *DataFrameResponse) GetClockFrame() *ClockFrame {
|
||||||
|
if x != nil {
|
||||||
|
return x.ClockFrame
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *DataFrameResponse) GetProof() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Proof
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var File_ceremony_proto protoreflect.FileDescriptor
|
var File_ceremony_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_ceremony_proto_rawDesc = []byte{
|
var file_ceremony_proto_rawDesc = []byte{
|
||||||
@ -2036,39 +2138,56 @@ var file_ceremony_proto_rawDesc = []byte{
|
|||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a,
|
||||||
0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18,
|
0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18,
|
||||||
0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61,
|
0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61,
|
||||||
0x73, 0x68, 0x65, 0x73, 0x32, 0xb6, 0x03, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
|
0x73, 0x68, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x46,
|
||||||
0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43,
|
0x72, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66,
|
||||||
0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61,
|
0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x6d, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x70,
|
||||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43,
|
0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61,
|
||||||
0x74, 0x1a, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
|
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||||
0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
|
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b,
|
||||||
0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73,
|
0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x0a,
|
||||||
0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67,
|
0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72,
|
||||||
0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64,
|
0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66,
|
||||||
0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x71, 0x75, 0x69,
|
0x32, 0xa8, 0x04, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72,
|
||||||
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72,
|
0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72,
|
||||||
0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
|
0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12,
|
||||||
0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52,
|
0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e,
|
0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
|
||||||
|
0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e,
|
||||||
0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
||||||
0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
|
0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
|
||||||
0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79,
|
0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79,
|
||||||
0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61,
|
||||||
0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c,
|
0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63,
|
||||||
0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||||
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e,
|
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
|
||||||
0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
|
0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d,
|
||||||
0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e,
|
0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
||||||
0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
|
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65,
|
||||||
0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3a, 0x5a,
|
0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
|
||||||
0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
|
0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
|
||||||
0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30,
|
||||||
0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f,
|
0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
|
||||||
0x33,
|
0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e,
|
||||||
|
0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76,
|
||||||
|
0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
|
||||||
|
0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e,
|
||||||
|
0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76,
|
||||||
|
0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x70, 0x0a, 0x0c, 0x47, 0x65, 0x74,
|
||||||
|
0x44, 0x61, 0x74, 0x61, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
||||||
|
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65,
|
||||||
|
0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x46,
|
||||||
|
0x72, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x71, 0x75,
|
||||||
|
0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65,
|
||||||
|
0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x72,
|
||||||
|
0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73,
|
||||||
|
0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
||||||
|
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f,
|
||||||
|
0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -2083,7 +2202,7 @@ func file_ceremony_proto_rawDescGZIP() []byte {
|
|||||||
return file_ceremony_proto_rawDescData
|
return file_ceremony_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_ceremony_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
|
var file_ceremony_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
|
||||||
var file_ceremony_proto_goTypes = []interface{}{
|
var file_ceremony_proto_goTypes = []interface{}{
|
||||||
(*CeremonyTranscript)(nil), // 0: quilibrium.node.ceremony.pb.CeremonyTranscript
|
(*CeremonyTranscript)(nil), // 0: quilibrium.node.ceremony.pb.CeremonyTranscript
|
||||||
(*CeremonyLobbyState)(nil), // 1: quilibrium.node.ceremony.pb.CeremonyLobbyState
|
(*CeremonyLobbyState)(nil), // 1: quilibrium.node.ceremony.pb.CeremonyLobbyState
|
||||||
@ -2107,80 +2226,85 @@ var file_ceremony_proto_goTypes = []interface{}{
|
|||||||
(*InclusionProofsMap)(nil), // 19: quilibrium.node.ceremony.pb.InclusionProofsMap
|
(*InclusionProofsMap)(nil), // 19: quilibrium.node.ceremony.pb.InclusionProofsMap
|
||||||
(*InclusionSegmentsMap)(nil), // 20: quilibrium.node.ceremony.pb.InclusionSegmentsMap
|
(*InclusionSegmentsMap)(nil), // 20: quilibrium.node.ceremony.pb.InclusionSegmentsMap
|
||||||
(*InclusionCommitmentsMap)(nil), // 21: quilibrium.node.ceremony.pb.InclusionCommitmentsMap
|
(*InclusionCommitmentsMap)(nil), // 21: quilibrium.node.ceremony.pb.InclusionCommitmentsMap
|
||||||
(*BLS48581G1PublicKey)(nil), // 22: quilibrium.node.keys.pb.BLS48581G1PublicKey
|
(*GetDataFrameRequest)(nil), // 22: quilibrium.node.ceremony.pb.GetDataFrameRequest
|
||||||
(*BLS48581G2PublicKey)(nil), // 23: quilibrium.node.keys.pb.BLS48581G2PublicKey
|
(*DataFrameResponse)(nil), // 23: quilibrium.node.ceremony.pb.DataFrameResponse
|
||||||
(*Ed448PublicKey)(nil), // 24: quilibrium.node.keys.pb.Ed448PublicKey
|
(*BLS48581G1PublicKey)(nil), // 24: quilibrium.node.keys.pb.BLS48581G1PublicKey
|
||||||
(*Ed448Signature)(nil), // 25: quilibrium.node.keys.pb.Ed448Signature
|
(*BLS48581G2PublicKey)(nil), // 25: quilibrium.node.keys.pb.BLS48581G2PublicKey
|
||||||
(*BLS48581Signature)(nil), // 26: quilibrium.node.keys.pb.BLS48581Signature
|
(*Ed448PublicKey)(nil), // 26: quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
(*X448PublicKey)(nil), // 27: quilibrium.node.keys.pb.X448PublicKey
|
(*Ed448Signature)(nil), // 27: quilibrium.node.keys.pb.Ed448Signature
|
||||||
(*ClockFrame)(nil), // 28: quilibrium.node.clock.pb.ClockFrame
|
(*BLS48581Signature)(nil), // 28: quilibrium.node.keys.pb.BLS48581Signature
|
||||||
(*ClockFramesPreflight)(nil), // 29: quilibrium.node.clock.pb.ClockFramesPreflight
|
(*X448PublicKey)(nil), // 29: quilibrium.node.keys.pb.X448PublicKey
|
||||||
(*ClockFramesRequest)(nil), // 30: quilibrium.node.clock.pb.ClockFramesRequest
|
(*ClockFrame)(nil), // 30: quilibrium.node.clock.pb.ClockFrame
|
||||||
(*P2PChannelEnvelope)(nil), // 31: quilibrium.node.channel.pb.P2PChannelEnvelope
|
(*ClockFramesPreflight)(nil), // 31: quilibrium.node.clock.pb.ClockFramesPreflight
|
||||||
|
(*ClockFramesRequest)(nil), // 32: quilibrium.node.clock.pb.ClockFramesRequest
|
||||||
|
(*P2PChannelEnvelope)(nil), // 33: quilibrium.node.channel.pb.P2PChannelEnvelope
|
||||||
}
|
}
|
||||||
var file_ceremony_proto_depIdxs = []int32{
|
var file_ceremony_proto_depIdxs = []int32{
|
||||||
22, // 0: quilibrium.node.ceremony.pb.CeremonyTranscript.g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
24, // 0: quilibrium.node.ceremony.pb.CeremonyTranscript.g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
||||||
23, // 1: quilibrium.node.ceremony.pb.CeremonyTranscript.g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
25, // 1: quilibrium.node.ceremony.pb.CeremonyTranscript.g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
||||||
22, // 2: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g1_256_witnesses:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
24, // 2: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g1_256_witnesses:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
||||||
23, // 3: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g2_256_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
25, // 3: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g2_256_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
||||||
9, // 4: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_open_state:type_name -> quilibrium.node.ceremony.pb.CeremonyOpenState
|
9, // 4: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_open_state:type_name -> quilibrium.node.ceremony.pb.CeremonyOpenState
|
||||||
10, // 5: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_in_progress_state:type_name -> quilibrium.node.ceremony.pb.CeremonyInProgressState
|
10, // 5: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_in_progress_state:type_name -> quilibrium.node.ceremony.pb.CeremonyInProgressState
|
||||||
11, // 6: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_finalizing_state:type_name -> quilibrium.node.ceremony.pb.CeremonyFinalizingState
|
11, // 6: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_finalizing_state:type_name -> quilibrium.node.ceremony.pb.CeremonyFinalizingState
|
||||||
12, // 7: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_validating_state:type_name -> quilibrium.node.ceremony.pb.CeremonyValidatingState
|
12, // 7: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_validating_state:type_name -> quilibrium.node.ceremony.pb.CeremonyValidatingState
|
||||||
0, // 8: quilibrium.node.ceremony.pb.CeremonyLobbyState.latest_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
|
0, // 8: quilibrium.node.ceremony.pb.CeremonyLobbyState.latest_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
|
||||||
24, // 9: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.seen_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 9: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.seen_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
25, // 10: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 10: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
24, // 11: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.dropped_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 11: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.dropped_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
25, // 12: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 12: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
22, // 13: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
24, // 13: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
||||||
23, // 14: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
25, // 14: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
||||||
22, // 15: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
24, // 15: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
|
||||||
23, // 16: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
25, // 16: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
|
||||||
25, // 17: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 17: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
25, // 18: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 18: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
26, // 19: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.contribution_signature:type_name -> quilibrium.node.keys.pb.BLS48581Signature
|
28, // 19: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.contribution_signature:type_name -> quilibrium.node.keys.pb.BLS48581Signature
|
||||||
5, // 20: quilibrium.node.ceremony.pb.CeremonyAdvanceRound.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
5, // 20: quilibrium.node.ceremony.pb.CeremonyAdvanceRound.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
||||||
27, // 21: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.identity_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
|
29, // 21: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.identity_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
|
||||||
27, // 22: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.signed_pre_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
|
29, // 22: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.signed_pre_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
|
||||||
25, // 23: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.public_key_signature_ed448:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 23: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.public_key_signature_ed448:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
7, // 24: quilibrium.node.ceremony.pb.CeremonyOpenState.joined_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
7, // 24: quilibrium.node.ceremony.pb.CeremonyOpenState.joined_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
||||||
24, // 25: quilibrium.node.ceremony.pb.CeremonyOpenState.preferred_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 25: quilibrium.node.ceremony.pb.CeremonyOpenState.preferred_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
7, // 26: quilibrium.node.ceremony.pb.CeremonyInProgressState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
7, // 26: quilibrium.node.ceremony.pb.CeremonyInProgressState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
||||||
2, // 27: quilibrium.node.ceremony.pb.CeremonyInProgressState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
|
2, // 27: quilibrium.node.ceremony.pb.CeremonyInProgressState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
|
||||||
3, // 28: quilibrium.node.ceremony.pb.CeremonyInProgressState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
|
3, // 28: quilibrium.node.ceremony.pb.CeremonyInProgressState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
|
||||||
6, // 29: quilibrium.node.ceremony.pb.CeremonyInProgressState.transcript_round_advance_commits:type_name -> quilibrium.node.ceremony.pb.CeremonyAdvanceRound
|
6, // 29: quilibrium.node.ceremony.pb.CeremonyInProgressState.transcript_round_advance_commits:type_name -> quilibrium.node.ceremony.pb.CeremonyAdvanceRound
|
||||||
24, // 30: quilibrium.node.ceremony.pb.CeremonyInProgressState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 30: quilibrium.node.ceremony.pb.CeremonyInProgressState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
7, // 31: quilibrium.node.ceremony.pb.CeremonyFinalizingState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
7, // 31: quilibrium.node.ceremony.pb.CeremonyFinalizingState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
|
||||||
2, // 32: quilibrium.node.ceremony.pb.CeremonyFinalizingState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
|
2, // 32: quilibrium.node.ceremony.pb.CeremonyFinalizingState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
|
||||||
3, // 33: quilibrium.node.ceremony.pb.CeremonyFinalizingState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
|
3, // 33: quilibrium.node.ceremony.pb.CeremonyFinalizingState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
|
||||||
5, // 34: quilibrium.node.ceremony.pb.CeremonyFinalizingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
5, // 34: quilibrium.node.ceremony.pb.CeremonyFinalizingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
||||||
4, // 35: quilibrium.node.ceremony.pb.CeremonyFinalizingState.shares:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptShare
|
4, // 35: quilibrium.node.ceremony.pb.CeremonyFinalizingState.shares:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptShare
|
||||||
24, // 36: quilibrium.node.ceremony.pb.CeremonyFinalizingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 36: quilibrium.node.ceremony.pb.CeremonyFinalizingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
5, // 37: quilibrium.node.ceremony.pb.CeremonyValidatingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
5, // 37: quilibrium.node.ceremony.pb.CeremonyValidatingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
|
||||||
0, // 38: quilibrium.node.ceremony.pb.CeremonyValidatingState.updated_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
|
0, // 38: quilibrium.node.ceremony.pb.CeremonyValidatingState.updated_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
|
||||||
24, // 39: quilibrium.node.ceremony.pb.CeremonyValidatingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
26, // 39: quilibrium.node.ceremony.pb.CeremonyValidatingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
|
||||||
14, // 40: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce.peer_list:type_name -> quilibrium.node.ceremony.pb.CeremonyPeer
|
14, // 40: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce.peer_list:type_name -> quilibrium.node.ceremony.pb.CeremonyPeer
|
||||||
28, // 41: quilibrium.node.ceremony.pb.CeremonyCompressedSync.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
|
30, // 41: quilibrium.node.ceremony.pb.CeremonyCompressedSync.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
|
||||||
19, // 42: quilibrium.node.ceremony.pb.CeremonyCompressedSync.proofs:type_name -> quilibrium.node.ceremony.pb.InclusionProofsMap
|
19, // 42: quilibrium.node.ceremony.pb.CeremonyCompressedSync.proofs:type_name -> quilibrium.node.ceremony.pb.InclusionProofsMap
|
||||||
20, // 43: quilibrium.node.ceremony.pb.CeremonyCompressedSync.segments:type_name -> quilibrium.node.ceremony.pb.InclusionSegmentsMap
|
20, // 43: quilibrium.node.ceremony.pb.CeremonyCompressedSync.segments:type_name -> quilibrium.node.ceremony.pb.InclusionSegmentsMap
|
||||||
25, // 44: quilibrium.node.ceremony.pb.SyncRequestAuthentication.response:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
27, // 44: quilibrium.node.ceremony.pb.SyncRequestAuthentication.response:type_name -> quilibrium.node.keys.pb.Ed448Signature
|
||||||
29, // 45: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
|
31, // 45: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
|
||||||
30, // 46: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.request:type_name -> quilibrium.node.clock.pb.ClockFramesRequest
|
32, // 46: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.request:type_name -> quilibrium.node.clock.pb.ClockFramesRequest
|
||||||
16, // 47: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.authentication:type_name -> quilibrium.node.ceremony.pb.SyncRequestAuthentication
|
16, // 47: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.authentication:type_name -> quilibrium.node.ceremony.pb.SyncRequestAuthentication
|
||||||
29, // 48: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
|
31, // 48: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
|
||||||
15, // 49: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.response:type_name -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
|
15, // 49: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.response:type_name -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
|
||||||
21, // 50: quilibrium.node.ceremony.pb.InclusionProofsMap.commitments:type_name -> quilibrium.node.ceremony.pb.InclusionCommitmentsMap
|
21, // 50: quilibrium.node.ceremony.pb.InclusionProofsMap.commitments:type_name -> quilibrium.node.ceremony.pb.InclusionCommitmentsMap
|
||||||
30, // 51: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:input_type -> quilibrium.node.clock.pb.ClockFramesRequest
|
30, // 51: quilibrium.node.ceremony.pb.DataFrameResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
|
||||||
17, // 52: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:input_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
|
32, // 52: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:input_type -> quilibrium.node.clock.pb.ClockFramesRequest
|
||||||
31, // 53: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:input_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
|
17, // 53: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:input_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
|
||||||
15, // 54: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
|
33, // 54: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:input_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
|
||||||
18, // 55: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
|
22, // 55: quilibrium.node.ceremony.pb.CeremonyService.GetDataFrame:input_type -> quilibrium.node.ceremony.pb.GetDataFrameRequest
|
||||||
31, // 56: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:output_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
|
15, // 56: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
|
||||||
54, // [54:57] is the sub-list for method output_type
|
18, // 57: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
|
||||||
51, // [51:54] is the sub-list for method input_type
|
33, // 58: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:output_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
|
||||||
51, // [51:51] is the sub-list for extension type_name
|
23, // 59: quilibrium.node.ceremony.pb.CeremonyService.GetDataFrame:output_type -> quilibrium.node.ceremony.pb.DataFrameResponse
|
||||||
51, // [51:51] is the sub-list for extension extendee
|
56, // [56:60] is the sub-list for method output_type
|
||||||
0, // [0:51] is the sub-list for field type_name
|
52, // [52:56] is the sub-list for method input_type
|
||||||
|
52, // [52:52] is the sub-list for extension type_name
|
||||||
|
52, // [52:52] is the sub-list for extension extendee
|
||||||
|
0, // [0:52] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_ceremony_proto_init() }
|
func init() { file_ceremony_proto_init() }
|
||||||
@ -2456,6 +2580,30 @@ func file_ceremony_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
file_ceremony_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*GetDataFrameRequest); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_ceremony_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*DataFrameResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
file_ceremony_proto_msgTypes[1].OneofWrappers = []interface{}{
|
file_ceremony_proto_msgTypes[1].OneofWrappers = []interface{}{
|
||||||
(*CeremonyLobbyState_CeremonyOpenState)(nil),
|
(*CeremonyLobbyState_CeremonyOpenState)(nil),
|
||||||
@ -2478,7 +2626,7 @@ func file_ceremony_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_ceremony_proto_rawDesc,
|
RawDescriptor: file_ceremony_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 22,
|
NumMessages: 24,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 1,
|
NumServices: 1,
|
||||||
},
|
},
|
||||||
|
@ -142,6 +142,40 @@ func request_CeremonyService_GetPublicChannel_0(ctx context.Context, marshaler r
|
|||||||
return stream, metadata, nil
|
return stream, metadata, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func request_CeremonyService_GetDataFrame_0(ctx context.Context, marshaler runtime.Marshaler, client CeremonyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq GetDataFrameRequest
|
||||||
|
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.GetDataFrame(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func local_request_CeremonyService_GetDataFrame_0(ctx context.Context, marshaler runtime.Marshaler, server CeremonyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq GetDataFrameRequest
|
||||||
|
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.GetDataFrame(ctx, &protoReq)
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// RegisterCeremonyServiceHandlerServer registers the http handlers for service CeremonyService to "mux".
|
// RegisterCeremonyServiceHandlerServer registers the http handlers for service CeremonyService to "mux".
|
||||||
// UnaryRPC :call CeremonyServiceServer directly.
|
// UnaryRPC :call CeremonyServiceServer 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.
|
||||||
@ -169,6 +203,31 @@ func RegisterCeremonyServiceHandlerServer(ctx context.Context, mux *runtime.Serv
|
|||||||
return
|
return
|
||||||
})
|
})
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_CeremonyService_GetDataFrame_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)
|
||||||
|
var err error
|
||||||
|
var annotatedContext context.Context
|
||||||
|
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/quilibrium.node.ceremony.pb.CeremonyService/GetDataFrame", runtime.WithHTTPPathPattern("/quilibrium.node.ceremony.pb.CeremonyService/GetDataFrame"))
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := local_request_CeremonyService_GetDataFrame_0(annotatedContext, inboundMarshaler, server, req, pathParams)
|
||||||
|
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||||
|
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_CeremonyService_GetDataFrame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,6 +335,28 @@ func RegisterCeremonyServiceHandlerClient(ctx context.Context, mux *runtime.Serv
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_CeremonyService_GetDataFrame_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)
|
||||||
|
var err error
|
||||||
|
var annotatedContext context.Context
|
||||||
|
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/quilibrium.node.ceremony.pb.CeremonyService/GetDataFrame", runtime.WithHTTPPathPattern("/quilibrium.node.ceremony.pb.CeremonyService/GetDataFrame"))
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := request_CeremonyService_GetDataFrame_0(annotatedContext, inboundMarshaler, client, req, pathParams)
|
||||||
|
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_CeremonyService_GetDataFrame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,6 +366,8 @@ var (
|
|||||||
pattern_CeremonyService_NegotiateCompressedSyncFrames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.ceremony.pb.CeremonyService", "NegotiateCompressedSyncFrames"}, ""))
|
pattern_CeremonyService_NegotiateCompressedSyncFrames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.ceremony.pb.CeremonyService", "NegotiateCompressedSyncFrames"}, ""))
|
||||||
|
|
||||||
pattern_CeremonyService_GetPublicChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.ceremony.pb.CeremonyService", "GetPublicChannel"}, ""))
|
pattern_CeremonyService_GetPublicChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.ceremony.pb.CeremonyService", "GetPublicChannel"}, ""))
|
||||||
|
|
||||||
|
pattern_CeremonyService_GetDataFrame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.ceremony.pb.CeremonyService", "GetDataFrame"}, ""))
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -293,4 +376,6 @@ var (
|
|||||||
forward_CeremonyService_NegotiateCompressedSyncFrames_0 = runtime.ForwardResponseStream
|
forward_CeremonyService_NegotiateCompressedSyncFrames_0 = runtime.ForwardResponseStream
|
||||||
|
|
||||||
forward_CeremonyService_GetPublicChannel_0 = runtime.ForwardResponseStream
|
forward_CeremonyService_GetPublicChannel_0 = runtime.ForwardResponseStream
|
||||||
|
|
||||||
|
forward_CeremonyService_GetDataFrame_0 = runtime.ForwardResponseMessage
|
||||||
)
|
)
|
||||||
|
@ -189,8 +189,18 @@ message InclusionCommitmentsMap {
|
|||||||
repeated bytes segment_hashes = 3;
|
repeated bytes segment_hashes = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message GetDataFrameRequest {
|
||||||
|
uint64 frame_number = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DataFrameResponse {
|
||||||
|
quilibrium.node.clock.pb.ClockFrame clock_frame = 1;
|
||||||
|
bytes proof = 2;
|
||||||
|
}
|
||||||
|
|
||||||
service CeremonyService {
|
service CeremonyService {
|
||||||
rpc GetCompressedSyncFrames (quilibrium.node.clock.pb.ClockFramesRequest) returns (stream CeremonyCompressedSync);
|
rpc GetCompressedSyncFrames (quilibrium.node.clock.pb.ClockFramesRequest) returns (stream CeremonyCompressedSync);
|
||||||
rpc NegotiateCompressedSyncFrames (stream CeremonyCompressedSyncRequestMessage) returns (stream CeremonyCompressedSyncResponseMessage);
|
rpc NegotiateCompressedSyncFrames (stream CeremonyCompressedSyncRequestMessage) returns (stream CeremonyCompressedSyncResponseMessage);
|
||||||
rpc GetPublicChannel (stream quilibrium.node.channel.pb.P2PChannelEnvelope) returns (stream quilibrium.node.channel.pb.P2PChannelEnvelope);
|
rpc GetPublicChannel (stream quilibrium.node.channel.pb.P2PChannelEnvelope) returns (stream quilibrium.node.channel.pb.P2PChannelEnvelope);
|
||||||
|
rpc GetDataFrame (GetDataFrameRequest) returns (DataFrameResponse);
|
||||||
}
|
}
|
@ -22,6 +22,7 @@ const (
|
|||||||
CeremonyService_GetCompressedSyncFrames_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/GetCompressedSyncFrames"
|
CeremonyService_GetCompressedSyncFrames_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/GetCompressedSyncFrames"
|
||||||
CeremonyService_NegotiateCompressedSyncFrames_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/NegotiateCompressedSyncFrames"
|
CeremonyService_NegotiateCompressedSyncFrames_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/NegotiateCompressedSyncFrames"
|
||||||
CeremonyService_GetPublicChannel_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/GetPublicChannel"
|
CeremonyService_GetPublicChannel_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/GetPublicChannel"
|
||||||
|
CeremonyService_GetDataFrame_FullMethodName = "/quilibrium.node.ceremony.pb.CeremonyService/GetDataFrame"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CeremonyServiceClient is the client API for CeremonyService service.
|
// CeremonyServiceClient is the client API for CeremonyService service.
|
||||||
@ -31,6 +32,7 @@ type CeremonyServiceClient interface {
|
|||||||
GetCompressedSyncFrames(ctx context.Context, in *ClockFramesRequest, opts ...grpc.CallOption) (CeremonyService_GetCompressedSyncFramesClient, error)
|
GetCompressedSyncFrames(ctx context.Context, in *ClockFramesRequest, opts ...grpc.CallOption) (CeremonyService_GetCompressedSyncFramesClient, error)
|
||||||
NegotiateCompressedSyncFrames(ctx context.Context, opts ...grpc.CallOption) (CeremonyService_NegotiateCompressedSyncFramesClient, error)
|
NegotiateCompressedSyncFrames(ctx context.Context, opts ...grpc.CallOption) (CeremonyService_NegotiateCompressedSyncFramesClient, error)
|
||||||
GetPublicChannel(ctx context.Context, opts ...grpc.CallOption) (CeremonyService_GetPublicChannelClient, error)
|
GetPublicChannel(ctx context.Context, opts ...grpc.CallOption) (CeremonyService_GetPublicChannelClient, error)
|
||||||
|
GetDataFrame(ctx context.Context, in *GetDataFrameRequest, opts ...grpc.CallOption) (*DataFrameResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ceremonyServiceClient struct {
|
type ceremonyServiceClient struct {
|
||||||
@ -135,6 +137,15 @@ func (x *ceremonyServiceGetPublicChannelClient) Recv() (*P2PChannelEnvelope, err
|
|||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ceremonyServiceClient) GetDataFrame(ctx context.Context, in *GetDataFrameRequest, opts ...grpc.CallOption) (*DataFrameResponse, error) {
|
||||||
|
out := new(DataFrameResponse)
|
||||||
|
err := c.cc.Invoke(ctx, CeremonyService_GetDataFrame_FullMethodName, in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CeremonyServiceServer is the server API for CeremonyService service.
|
// CeremonyServiceServer is the server API for CeremonyService service.
|
||||||
// All implementations must embed UnimplementedCeremonyServiceServer
|
// All implementations must embed UnimplementedCeremonyServiceServer
|
||||||
// for forward compatibility
|
// for forward compatibility
|
||||||
@ -142,6 +153,7 @@ type CeremonyServiceServer interface {
|
|||||||
GetCompressedSyncFrames(*ClockFramesRequest, CeremonyService_GetCompressedSyncFramesServer) error
|
GetCompressedSyncFrames(*ClockFramesRequest, CeremonyService_GetCompressedSyncFramesServer) error
|
||||||
NegotiateCompressedSyncFrames(CeremonyService_NegotiateCompressedSyncFramesServer) error
|
NegotiateCompressedSyncFrames(CeremonyService_NegotiateCompressedSyncFramesServer) error
|
||||||
GetPublicChannel(CeremonyService_GetPublicChannelServer) error
|
GetPublicChannel(CeremonyService_GetPublicChannelServer) error
|
||||||
|
GetDataFrame(context.Context, *GetDataFrameRequest) (*DataFrameResponse, error)
|
||||||
mustEmbedUnimplementedCeremonyServiceServer()
|
mustEmbedUnimplementedCeremonyServiceServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +170,9 @@ func (UnimplementedCeremonyServiceServer) NegotiateCompressedSyncFrames(Ceremony
|
|||||||
func (UnimplementedCeremonyServiceServer) GetPublicChannel(CeremonyService_GetPublicChannelServer) error {
|
func (UnimplementedCeremonyServiceServer) GetPublicChannel(CeremonyService_GetPublicChannelServer) error {
|
||||||
return status.Errorf(codes.Unimplemented, "method GetPublicChannel not implemented")
|
return status.Errorf(codes.Unimplemented, "method GetPublicChannel not implemented")
|
||||||
}
|
}
|
||||||
|
func (UnimplementedCeremonyServiceServer) GetDataFrame(context.Context, *GetDataFrameRequest) (*DataFrameResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method GetDataFrame not implemented")
|
||||||
|
}
|
||||||
func (UnimplementedCeremonyServiceServer) mustEmbedUnimplementedCeremonyServiceServer() {}
|
func (UnimplementedCeremonyServiceServer) mustEmbedUnimplementedCeremonyServiceServer() {}
|
||||||
|
|
||||||
// UnsafeCeremonyServiceServer may be embedded to opt out of forward compatibility for this service.
|
// UnsafeCeremonyServiceServer may be embedded to opt out of forward compatibility for this service.
|
||||||
@ -244,13 +259,36 @@ func (x *ceremonyServiceGetPublicChannelServer) Recv() (*P2PChannelEnvelope, err
|
|||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _CeremonyService_GetDataFrame_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(GetDataFrameRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(CeremonyServiceServer).GetDataFrame(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: CeremonyService_GetDataFrame_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(CeremonyServiceServer).GetDataFrame(ctx, req.(*GetDataFrameRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
// CeremonyService_ServiceDesc is the grpc.ServiceDesc for CeremonyService service.
|
// CeremonyService_ServiceDesc is the grpc.ServiceDesc for CeremonyService service.
|
||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
var CeremonyService_ServiceDesc = grpc.ServiceDesc{
|
var CeremonyService_ServiceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "quilibrium.node.ceremony.pb.CeremonyService",
|
ServiceName: "quilibrium.node.ceremony.pb.CeremonyService",
|
||||||
HandlerType: (*CeremonyServiceServer)(nil),
|
HandlerType: (*CeremonyServiceServer)(nil),
|
||||||
Methods: []grpc.MethodDesc{},
|
Methods: []grpc.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "GetDataFrame",
|
||||||
|
Handler: _CeremonyService_GetDataFrame_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
Streams: []grpc.StreamDesc{
|
Streams: []grpc.StreamDesc{
|
||||||
{
|
{
|
||||||
StreamName: "GetCompressedSyncFrames",
|
StreamName: "GetCompressedSyncFrames",
|
||||||
|
Loading…
Reference in New Issue
Block a user