mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-20 15:15:18 +00:00
tests pass, let's go
This commit is contained in:
parent
5d4612c6c6
commit
ebfb57bc29
@ -819,16 +819,11 @@ func FetchTokenBalance(client protobufs.NodeServiceClient) (TokenBalance, error)
|
||||
return TokenBalance{}, errors.Wrap(err, "error getting token info")
|
||||
}
|
||||
|
||||
conversionFactor, _ := new(big.Int).SetString("1DCD65000", 16)
|
||||
|
||||
owned := new(big.Int).SetBytes(info.OwnedTokens)
|
||||
owned.Div(owned, conversionFactor)
|
||||
|
||||
// owned := new(big.Int).SetBytes(info.OwnedTokens)
|
||||
unconfirmedOwned := new(big.Int).SetBytes(info.UnconfirmedOwnedTokens)
|
||||
unconfirmedOwned.Div(unconfirmedOwned, conversionFactor)
|
||||
|
||||
return TokenBalance{
|
||||
Owned: owned,
|
||||
// Owned: owned,
|
||||
UnconfirmedOwned: unconfirmedOwned,
|
||||
}, nil
|
||||
}
|
||||
|
194
node/app/node.go
194
node/app/node.go
@ -1,27 +1,28 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/crypto/sha3"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/consensus"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/consensus/master"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/crypto"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/execution"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/store"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/tries"
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
logger *zap.Logger
|
||||
clockStore store.ClockStore
|
||||
keyManager keys.KeyManager
|
||||
pubSub p2p.PubSub
|
||||
execEngines map[string]execution.ExecutionEngine
|
||||
engine consensus.ConsensusEngine
|
||||
logger *zap.Logger
|
||||
dataProofStore store.DataProofStore
|
||||
clockStore store.ClockStore
|
||||
keyManager keys.KeyManager
|
||||
pubSub p2p.PubSub
|
||||
execEngines map[string]execution.ExecutionEngine
|
||||
engine consensus.ConsensusEngine
|
||||
}
|
||||
|
||||
type DHTNode struct {
|
||||
@ -40,6 +41,7 @@ func newDHTNode(
|
||||
|
||||
func newNode(
|
||||
logger *zap.Logger,
|
||||
dataProofStore store.DataProofStore,
|
||||
clockStore store.ClockStore,
|
||||
keyManager keys.KeyManager,
|
||||
pubSub p2p.PubSub,
|
||||
@ -54,6 +56,7 @@ func newNode(
|
||||
|
||||
return &Node{
|
||||
logger,
|
||||
dataProofStore,
|
||||
clockStore,
|
||||
keyManager,
|
||||
pubSub,
|
||||
@ -62,78 +65,115 @@ func newNode(
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (n *Node) RunRepair() {
|
||||
intrinsicFilter := append(
|
||||
p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
|
||||
p2p.GetBloomFilterIndices(application.CEREMONY_ADDRESS, 65536, 24)...,
|
||||
)
|
||||
n.logger.Info("check store and repair if needed, this may take a few minutes")
|
||||
proverTrie := &tries.RollingFrecencyCritbitTrie{}
|
||||
head, err := n.clockStore.GetLatestDataClockFrame(intrinsicFilter, proverTrie)
|
||||
if err == nil && head != nil {
|
||||
for head != nil && head.FrameNumber != 0 {
|
||||
prev := head
|
||||
head, err = n.clockStore.GetStagedDataClockFrame(
|
||||
intrinsicFilter,
|
||||
head.FrameNumber-1,
|
||||
head.ParentSelector,
|
||||
true,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
compare, _, err := n.clockStore.GetDataClockFrame(
|
||||
intrinsicFilter,
|
||||
prev.FrameNumber-1,
|
||||
true,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if !bytes.Equal(head.Output, compare.Output) {
|
||||
n.logger.Warn(
|
||||
"repairing frame",
|
||||
zap.Uint64("frame_number", head.FrameNumber),
|
||||
)
|
||||
head, err = n.clockStore.GetStagedDataClockFrame(
|
||||
intrinsicFilter,
|
||||
prev.FrameNumber-1,
|
||||
prev.ParentSelector,
|
||||
true,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
func (n *Node) VerifyProofIntegrity() {
|
||||
i, _, _, e := n.dataProofStore.GetLatestDataTimeProof(n.pubSub.GetPeerID())
|
||||
if e != nil {
|
||||
panic(e)
|
||||
}
|
||||
dataProver := crypto.NewKZGInclusionProver(n.logger)
|
||||
wesoProver := crypto.NewWesolowskiFrameProver(n.logger)
|
||||
|
||||
txn, err := n.clockStore.NewTransaction()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for j := int(i); j >= 0; j-- {
|
||||
fmt.Println(j)
|
||||
_, _, input, o, err := n.dataProofStore.GetDataTimeProof(n.pubSub.GetPeerID(), uint32(j))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
idx, idxProof, idxCommit, idxKP := master.GetOutputs(o)
|
||||
|
||||
selector, err := head.GetSelector()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
ip := sha3.Sum512(idxProof)
|
||||
|
||||
err = n.clockStore.CommitDataClockFrame(
|
||||
intrinsicFilter,
|
||||
head.FrameNumber,
|
||||
selector.FillBytes(make([]byte, 32)),
|
||||
proverTrie,
|
||||
txn,
|
||||
true,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
v, err := dataProver.VerifyRaw(ip[:], idxCommit, int(idx), idxKP, 128)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err = txn.Commit(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
if !v {
|
||||
panic("bad kzg proof")
|
||||
}
|
||||
wp := []byte{}
|
||||
wp = append(wp, n.pubSub.GetPeerID()...)
|
||||
wp = append(wp, input...)
|
||||
fmt.Printf("%x\n", wp)
|
||||
v = wesoProver.VerifyChallengeProof(wp, uint32(j), idx, idxProof)
|
||||
if !v {
|
||||
panic("bad weso proof")
|
||||
}
|
||||
}
|
||||
n.logger.Info("check complete")
|
||||
}
|
||||
|
||||
func (n *Node) RunRepair() {
|
||||
// intrinsicFilter := append(
|
||||
// p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
|
||||
// p2p.GetBloomFilterIndices(application.CEREMONY_ADDRESS, 65536, 24)...,
|
||||
// )
|
||||
// n.logger.Info("check store and repair if needed, this may take a few minutes")
|
||||
// proverTrie := &tries.RollingFrecencyCritbitTrie{}
|
||||
// head, err := n.clockStore.GetLatestDataClockFrame(intrinsicFilter, proverTrie)
|
||||
// if err == nil && head != nil {
|
||||
// for head != nil && head.FrameNumber != 0 {
|
||||
// prev := head
|
||||
// head, err = n.clockStore.GetStagedDataClockFrame(
|
||||
// intrinsicFilter,
|
||||
// head.FrameNumber-1,
|
||||
// head.ParentSelector,
|
||||
// true,
|
||||
// )
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
// compare, _, err := n.clockStore.GetDataClockFrame(
|
||||
// intrinsicFilter,
|
||||
// prev.FrameNumber-1,
|
||||
// true,
|
||||
// )
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
// if !bytes.Equal(head.Output, compare.Output) {
|
||||
// n.logger.Warn(
|
||||
// "repairing frame",
|
||||
// zap.Uint64("frame_number", head.FrameNumber),
|
||||
// )
|
||||
// head, err = n.clockStore.GetStagedDataClockFrame(
|
||||
// intrinsicFilter,
|
||||
// prev.FrameNumber-1,
|
||||
// prev.ParentSelector,
|
||||
// true,
|
||||
// )
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// txn, err := n.clockStore.NewTransaction()
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// selector, err := head.GetSelector()
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// err = n.clockStore.CommitDataClockFrame(
|
||||
// intrinsicFilter,
|
||||
// head.FrameNumber,
|
||||
// selector.FillBytes(make([]byte, 32)),
|
||||
// proverTrie,
|
||||
// txn,
|
||||
// true,
|
||||
// )
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// if err = txn.Commit(); err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// n.logger.Info("check complete")
|
||||
}
|
||||
|
||||
func (d *DHTNode) Start() {
|
||||
@ -173,6 +213,10 @@ func (n *Node) GetClockStore() store.ClockStore {
|
||||
return n.clockStore
|
||||
}
|
||||
|
||||
func (n *Node) GetDataProofStore() store.DataProofStore {
|
||||
return n.dataProofStore
|
||||
}
|
||||
|
||||
func (n *Node) GetKeyManager() keys.KeyManager {
|
||||
return n.keyManager
|
||||
}
|
||||
|
@ -38,17 +38,19 @@ func NewDebugNode(configConfig *config.Config, selfTestReport *protobufs.SelfTes
|
||||
zapLogger := debugLogger()
|
||||
dbConfig := configConfig.DB
|
||||
pebbleDB := store.NewPebbleDB(dbConfig)
|
||||
pebbleDataProofStore := store.NewPebbleDataProofStore(pebbleDB, zapLogger)
|
||||
pebbleClockStore := store.NewPebbleClockStore(pebbleDB, zapLogger)
|
||||
keyConfig := configConfig.Key
|
||||
fileKeyManager := keys.NewFileKeyManager(keyConfig, zapLogger)
|
||||
p2PConfig := configConfig.P2P
|
||||
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
||||
engineConfig := configConfig.Engine
|
||||
kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
|
||||
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
||||
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
||||
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleDataProofStore, pebbleClockStore, fileKeyManager, blossomSub, kzgInclusionProver, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||
node, err := newNode(zapLogger, pebbleDataProofStore, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -59,17 +61,19 @@ func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestRepo
|
||||
zapLogger := logger()
|
||||
dbConfig := configConfig.DB
|
||||
pebbleDB := store.NewPebbleDB(dbConfig)
|
||||
pebbleDataProofStore := store.NewPebbleDataProofStore(pebbleDB, zapLogger)
|
||||
pebbleClockStore := store.NewPebbleClockStore(pebbleDB, zapLogger)
|
||||
keyConfig := configConfig.Key
|
||||
fileKeyManager := keys.NewFileKeyManager(keyConfig, zapLogger)
|
||||
p2PConfig := configConfig.P2P
|
||||
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
||||
engineConfig := configConfig.Engine
|
||||
kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
|
||||
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
||||
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
||||
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleDataProofStore, pebbleClockStore, fileKeyManager, blossomSub, kzgInclusionProver, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||
node, err := newNode(zapLogger, pebbleDataProofStore, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -179,8 +179,8 @@ func NewCeremonyDataClockConsensusEngine(
|
||||
}
|
||||
|
||||
difficulty := engineConfig.Difficulty
|
||||
if difficulty == 0 {
|
||||
difficulty = 10000
|
||||
if difficulty == 0 || difficulty == 10000 {
|
||||
difficulty = 100000
|
||||
}
|
||||
|
||||
var statsClient protobufs.NodeStatsClient
|
||||
|
@ -129,10 +129,7 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
|
||||
return nil
|
||||
}
|
||||
|
||||
// minimum proof size is one timestamp, one vdf proof, must match one fewer
|
||||
// than core count
|
||||
if len(report.Proof) < 516+8 ||
|
||||
((len(report.Proof)-8)/516) != int(report.Cores-1) {
|
||||
if len(report.Proof) != 520 {
|
||||
e.logger.Warn(
|
||||
"received invalid proof from peer",
|
||||
zap.String("peer_id", peer.ID(peerID).String()),
|
||||
@ -173,17 +170,9 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
|
||||
}
|
||||
|
||||
proof := report.Proof
|
||||
timestamp := binary.BigEndian.Uint64(proof[:8])
|
||||
proof = proof[8:]
|
||||
|
||||
// Ignore outdated reports, give 3 minutes + proof time for propagation
|
||||
// delay
|
||||
if int64(timestamp) < (time.Now().UnixMilli() - (480 * 1000)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
challenge := binary.BigEndian.AppendUint64([]byte{}, report.MasterHeadFrame)
|
||||
challenge := []byte{}
|
||||
challenge = append(challenge, peerID...)
|
||||
challenge = append(challenge, report.Challenge...)
|
||||
|
||||
proofs := make([][]byte, (len(report.Proof)-8)/516)
|
||||
for i := 0; i < len(proofs); i++ {
|
||||
@ -191,11 +180,11 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
|
||||
}
|
||||
go func() {
|
||||
e.verifyTestCh <- verifyChallenge{
|
||||
peerID: peerID,
|
||||
challenge: challenge,
|
||||
timestamp: int64(timestamp),
|
||||
difficultyMetric: report.DifficultyMetric,
|
||||
proofs: proofs,
|
||||
peerID: peerID,
|
||||
challenge: challenge,
|
||||
cores: report.Cores,
|
||||
increment: report.Increment,
|
||||
proof: proof,
|
||||
}
|
||||
}()
|
||||
|
||||
|
@ -20,6 +20,7 @@ import (
|
||||
mn "github.com/multiformats/go-multiaddr/net"
|
||||
"github.com/pkg/errors"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/crypto/sha3"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||||
@ -49,6 +50,7 @@ type MasterClockConsensusEngine struct {
|
||||
state consensus.EngineState
|
||||
pubSub p2p.PubSub
|
||||
keyManager keys.KeyManager
|
||||
dataProver crypto.InclusionProver
|
||||
frameProver crypto.FrameProver
|
||||
lastFrameReceivedAt time.Time
|
||||
|
||||
@ -63,6 +65,7 @@ type MasterClockConsensusEngine struct {
|
||||
historicFramesMx sync.Mutex
|
||||
seenFrames []*protobufs.ClockFrame
|
||||
historicFrames []*protobufs.ClockFrame
|
||||
dataProofStore store.DataProofStore
|
||||
clockStore store.ClockStore
|
||||
masterTimeReel *qtime.MasterTimeReel
|
||||
peerInfoManager p2p.PeerInfoManager
|
||||
@ -80,9 +83,11 @@ var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
|
||||
func NewMasterClockConsensusEngine(
|
||||
engineConfig *config.EngineConfig,
|
||||
logger *zap.Logger,
|
||||
dataProofStore store.DataProofStore,
|
||||
clockStore store.ClockStore,
|
||||
keyManager keys.KeyManager,
|
||||
pubSub p2p.PubSub,
|
||||
dataProver crypto.InclusionProver,
|
||||
frameProver crypto.FrameProver,
|
||||
masterTimeReel *qtime.MasterTimeReel,
|
||||
peerInfoManager p2p.PeerInfoManager,
|
||||
@ -104,6 +109,10 @@ func NewMasterClockConsensusEngine(
|
||||
panic(errors.New("pubsub is nil"))
|
||||
}
|
||||
|
||||
if dataProver == nil {
|
||||
panic(errors.New("data prover is nil"))
|
||||
}
|
||||
|
||||
if frameProver == nil {
|
||||
panic(errors.New("frame prover is nil"))
|
||||
}
|
||||
@ -118,7 +127,7 @@ func NewMasterClockConsensusEngine(
|
||||
}
|
||||
|
||||
e := &MasterClockConsensusEngine{
|
||||
difficulty: 10000,
|
||||
difficulty: 100000,
|
||||
logger: logger,
|
||||
state: consensus.EngineStateStopped,
|
||||
keyManager: keyManager,
|
||||
@ -128,7 +137,9 @@ func NewMasterClockConsensusEngine(
|
||||
input: seed,
|
||||
lastFrameReceivedAt: time.Time{},
|
||||
syncingStatus: SyncStatusNotSyncing,
|
||||
dataProofStore: dataProofStore,
|
||||
clockStore: clockStore,
|
||||
dataProver: dataProver,
|
||||
frameProver: frameProver,
|
||||
masterTimeReel: masterTimeReel,
|
||||
peerInfoManager: peerInfoManager,
|
||||
@ -245,8 +256,6 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
|
||||
go func() {
|
||||
// Let it sit until we at least have a few more peers inbound
|
||||
time.Sleep(30 * time.Second)
|
||||
difficultyMetric := int64(100000)
|
||||
skew := (difficultyMetric * 12) / 10
|
||||
parallelism := e.report.Cores - 1
|
||||
|
||||
if parallelism < 3 {
|
||||
@ -268,6 +277,53 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
|
||||
}
|
||||
}
|
||||
|
||||
increment, _, previousOutput, err :=
|
||||
e.dataProofStore.GetLatestDataTimeProof(e.pubSub.GetPeerID())
|
||||
if err != nil && !errors.Is(err, store.ErrNotFound) {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
prevIndex := -1
|
||||
prevHashes := []byte{}
|
||||
hashes := []byte{}
|
||||
previousPreviousCommitment := []byte{}
|
||||
previousCommitment := []byte{}
|
||||
prevProofs := [][]byte{}
|
||||
proofs := [][]byte{}
|
||||
commitment := []byte{}
|
||||
skipStore := false
|
||||
|
||||
if err != nil && errors.Is(err, store.ErrNotFound) {
|
||||
e.logger.Info("no state found, starting from genesis")
|
||||
increment = 0
|
||||
rootFrame, err := e.clockStore.GetMasterClockFrame(e.filter, 0)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
previousCommitment = rootFrame.Output
|
||||
} else {
|
||||
e.logger.Info("state found", zap.Uint32("increment", increment))
|
||||
_, _, previousCommitment, _ = GetOutputs(previousOutput)
|
||||
skipStore = true
|
||||
}
|
||||
|
||||
commitment = previousCommitment
|
||||
|
||||
input := []byte{}
|
||||
input = append(input, e.pubSub.GetPeerID()...)
|
||||
input = append(input, previousCommitment...)
|
||||
proofs = e.PerformTimeProof(input, parallelism, increment, clients)
|
||||
|
||||
polySize := 128
|
||||
if parallelism > 2048 {
|
||||
polySize = 65536
|
||||
} else if parallelism > 1024 {
|
||||
polySize = 2048
|
||||
} else if parallelism > 128 {
|
||||
polySize = 1024
|
||||
}
|
||||
|
||||
for {
|
||||
head, err := e.masterTimeReel.Head()
|
||||
if err != nil {
|
||||
@ -275,71 +331,92 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
|
||||
}
|
||||
|
||||
e.report.MasterHeadFrame = head.FrameNumber
|
||||
e.report.DifficultyMetric = difficultyMetric
|
||||
|
||||
challenge := binary.BigEndian.AppendUint64(
|
||||
[]byte{},
|
||||
e.report.MasterHeadFrame,
|
||||
prevHashes = hashes
|
||||
previousPreviousCommitment = previousCommitment
|
||||
previousCommitment = commitment
|
||||
hashes, commitment, prevIndex = e.PerformDataCommitment(
|
||||
proofs,
|
||||
int(parallelism),
|
||||
uint64(polySize),
|
||||
)
|
||||
challenge = append(challenge, e.pubSub.GetPeerID()...)
|
||||
|
||||
proofs := make([][]byte, parallelism)
|
||||
nextMetrics := make([]int64, parallelism)
|
||||
// PoMW requires two forms of proofs – time proofs of data, then execution
|
||||
// proofs. In the multiproof case we also have a random selection portion
|
||||
// of the execution proofs by issuing a challenge from the next proof,
|
||||
// such that it generates a random choice of input from the prior. This
|
||||
// allows recursive proof evaluation without requiring retention of all
|
||||
// parallel proofs.
|
||||
if len(prevProofs) != 0 {
|
||||
if !skipStore {
|
||||
e.report.Proof = []byte{}
|
||||
e.report.Proof = binary.BigEndian.AppendUint32(
|
||||
e.report.Proof,
|
||||
uint32(prevIndex),
|
||||
)
|
||||
e.report.Increment = increment - 1
|
||||
e.report.Challenge = previousPreviousCommitment
|
||||
e.report.Proof = append(e.report.Proof, prevProofs[prevIndex]...)
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(int(parallelism))
|
||||
|
||||
ts := time.Now().UnixMilli()
|
||||
for i := uint32(0); i < parallelism; i++ {
|
||||
i := i
|
||||
go func() {
|
||||
resp, err :=
|
||||
clients[i].CalculateChallengeProof(
|
||||
context.Background(),
|
||||
&protobufs.ChallengeProofRequest{
|
||||
Challenge: challenge,
|
||||
Core: i,
|
||||
Skew: skew,
|
||||
NowMs: ts,
|
||||
},
|
||||
)
|
||||
p, err := e.dataProver.ProveRaw(
|
||||
prevHashes,
|
||||
prevIndex,
|
||||
uint64(polySize),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
proofs[i], nextMetrics[i] = resp.Output, resp.NextSkew
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
nextDifficultySum := uint64(0)
|
||||
for i := 0; i < int(parallelism); i++ {
|
||||
nextDifficultySum += uint64(nextMetrics[i])
|
||||
output := SerializeOutput(
|
||||
uint32(prevIndex),
|
||||
prevProofs,
|
||||
previousCommitment,
|
||||
p,
|
||||
)
|
||||
|
||||
txn, err := e.dataProofStore.NewTransaction()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
e.logger.Info(
|
||||
"storing proof",
|
||||
zap.Uint32("increment", increment-1),
|
||||
)
|
||||
err = e.dataProofStore.PutDataTimeProof(
|
||||
txn,
|
||||
parallelism,
|
||||
e.pubSub.GetPeerID(),
|
||||
increment-1,
|
||||
previousPreviousCommitment,
|
||||
output,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err := txn.Commit(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
e.logger.Info(
|
||||
"broadcasting self-test info",
|
||||
zap.Uint64("current_frame", e.report.MasterHeadFrame),
|
||||
)
|
||||
|
||||
if err := e.publishMessage(e.filter, e.report); err != nil {
|
||||
e.logger.Debug("error publishing message", zap.Error(err))
|
||||
}
|
||||
} else {
|
||||
skipStore = false
|
||||
}
|
||||
}
|
||||
|
||||
nextDifficultyMetric := int64(nextDifficultySum / uint64(parallelism))
|
||||
|
||||
e.logger.Info(
|
||||
"recalibrating difficulty metric",
|
||||
zap.Int64("previous_difficulty_metric", difficultyMetric),
|
||||
zap.Int64("next_difficulty_metric", nextDifficultyMetric),
|
||||
)
|
||||
difficultyMetric = nextDifficultyMetric
|
||||
skew = (nextDifficultyMetric * 12) / 10
|
||||
|
||||
proof := binary.BigEndian.AppendUint64([]byte{}, uint64(ts))
|
||||
for i := 0; i < len(proofs); i++ {
|
||||
proof = append(proof, proofs[i]...)
|
||||
}
|
||||
e.report.Proof = proof
|
||||
e.logger.Info(
|
||||
"broadcasting self-test info",
|
||||
zap.Uint64("current_frame", e.report.MasterHeadFrame),
|
||||
)
|
||||
|
||||
if err := e.publishMessage(e.filter, e.report); err != nil {
|
||||
e.logger.Debug("error publishing message", zap.Error(err))
|
||||
}
|
||||
increment++
|
||||
input := []byte{}
|
||||
input = append(input, e.pubSub.GetPeerID()...)
|
||||
input = append(input, commitment...)
|
||||
prevProofs = proofs
|
||||
proofs = e.PerformTimeProof(input, parallelism, increment, clients)
|
||||
}
|
||||
}()
|
||||
|
||||
@ -388,6 +465,109 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
|
||||
return errChan
|
||||
}
|
||||
|
||||
func SerializeOutput(
|
||||
previousIndex uint32,
|
||||
previousOutputs [][]byte,
|
||||
kzgCommitment []byte,
|
||||
kzgProof []byte,
|
||||
) []byte {
|
||||
serializedOutput := []byte{}
|
||||
serializedOutput = binary.BigEndian.AppendUint32(
|
||||
serializedOutput,
|
||||
previousIndex,
|
||||
)
|
||||
serializedOutput = append(serializedOutput, previousOutputs[previousIndex]...)
|
||||
serializedOutput = append(serializedOutput, kzgCommitment...)
|
||||
serializedOutput = append(serializedOutput, kzgProof...)
|
||||
return serializedOutput
|
||||
}
|
||||
|
||||
func GetOutputs(output []byte) (
|
||||
index uint32,
|
||||
indexProof []byte,
|
||||
kzgCommitment []byte,
|
||||
kzgProof []byte,
|
||||
) {
|
||||
index = binary.BigEndian.Uint32(output[:4])
|
||||
indexProof = output[4:520]
|
||||
kzgCommitment = output[520:594]
|
||||
kzgProof = output[594:668]
|
||||
return index, indexProof, kzgCommitment, kzgProof
|
||||
}
|
||||
|
||||
func (e *MasterClockConsensusEngine) PerformTimeProof(
|
||||
challenge []byte,
|
||||
parallelism uint32,
|
||||
increment uint32,
|
||||
clients []protobufs.DataIPCServiceClient,
|
||||
) [][]byte {
|
||||
proofs := make([][]byte, parallelism)
|
||||
now := time.Now()
|
||||
|
||||
// Perform the VDFs:
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(int(parallelism))
|
||||
|
||||
for i := uint32(0); i < parallelism; i++ {
|
||||
i := i
|
||||
go func() {
|
||||
resp, err :=
|
||||
clients[i].CalculateChallengeProof(
|
||||
context.Background(),
|
||||
&protobufs.ChallengeProofRequest{
|
||||
Challenge: challenge,
|
||||
Core: i,
|
||||
Increment: increment,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
proofs[i] = resp.Output
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
since := time.Since(now)
|
||||
|
||||
e.logger.Info(
|
||||
"completed duration proof",
|
||||
zap.Uint32("increment", increment),
|
||||
zap.Duration("time_taken", since),
|
||||
)
|
||||
|
||||
return proofs
|
||||
}
|
||||
|
||||
func (e *MasterClockConsensusEngine) PerformDataCommitment(
|
||||
proofs [][]byte,
|
||||
parallelism int,
|
||||
polySize uint64,
|
||||
) ([]byte, []byte, int) {
|
||||
// Take the VDF outputs and generate some deterministic outputs to feed
|
||||
// into a KZG commitment:
|
||||
output := []byte{}
|
||||
for i := 0; i < len(proofs); i++ {
|
||||
h := sha3.Sum512(proofs[i])
|
||||
output = append(output, h[:]...)
|
||||
}
|
||||
|
||||
nextInput, err := e.dataProver.CommitRaw(output, polySize)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
inputHash := sha3.Sum256(nextInput)
|
||||
inputHashBI := big.NewInt(0).SetBytes(inputHash[:])
|
||||
prevIndex := int(inputHashBI.Mod(
|
||||
inputHashBI,
|
||||
big.NewInt(int64(parallelism)),
|
||||
).Int64())
|
||||
|
||||
return output, nextInput, prevIndex
|
||||
}
|
||||
|
||||
func (e *MasterClockConsensusEngine) createParallelDataClientsFromList() (
|
||||
[]protobufs.DataIPCServiceClient,
|
||||
error,
|
||||
@ -539,11 +719,11 @@ func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
|
||||
}
|
||||
|
||||
type verifyChallenge struct {
|
||||
peerID []byte
|
||||
challenge []byte
|
||||
timestamp int64
|
||||
difficultyMetric int64
|
||||
proofs [][]byte
|
||||
peerID []byte
|
||||
challenge []byte
|
||||
increment uint32
|
||||
cores uint32
|
||||
proof []byte
|
||||
}
|
||||
|
||||
func (e *MasterClockConsensusEngine) performVerifyTest(
|
||||
@ -551,9 +731,9 @@ func (e *MasterClockConsensusEngine) performVerifyTest(
|
||||
) {
|
||||
if !e.frameProver.VerifyChallengeProof(
|
||||
challenge.challenge,
|
||||
challenge.timestamp,
|
||||
challenge.difficultyMetric,
|
||||
challenge.proofs,
|
||||
challenge.increment,
|
||||
binary.BigEndian.Uint32(challenge.proof[:4]),
|
||||
challenge.proof[4:],
|
||||
) {
|
||||
e.logger.Warn(
|
||||
"received invalid proof from peer",
|
||||
|
@ -225,8 +225,8 @@ func (d *DataTimeReel) createGenesisFrame() (
|
||||
}
|
||||
|
||||
difficulty := d.engineConfig.Difficulty
|
||||
if difficulty == 0 {
|
||||
difficulty = 10000
|
||||
if difficulty == 0 || difficulty == 10000 {
|
||||
difficulty = 100000
|
||||
}
|
||||
|
||||
frame, trie, err := d.frameProver.CreateDataGenesisFrame(
|
||||
|
@ -146,8 +146,8 @@ func (m *MasterTimeReel) createGenesisFrame() *protobufs.ClockFrame {
|
||||
}
|
||||
|
||||
difficulty := m.engineConfig.Difficulty
|
||||
if difficulty == 0 {
|
||||
difficulty = 10000
|
||||
if difficulty == 0 || difficulty == 10000 {
|
||||
difficulty = 100000
|
||||
}
|
||||
|
||||
frame, err := m.frameProver.CreateMasterGenesisFrame(
|
||||
|
@ -54,13 +54,12 @@ type FrameProver interface {
|
||||
CalculateChallengeProof(
|
||||
challenge []byte,
|
||||
core uint32,
|
||||
skew int64,
|
||||
nowMs int64,
|
||||
) ([]byte, int64, error)
|
||||
increment uint32,
|
||||
) ([]byte, error)
|
||||
VerifyChallengeProof(
|
||||
challenge []byte,
|
||||
timestamp int64,
|
||||
assertedDifficulty int64,
|
||||
proof [][]byte,
|
||||
increment uint32,
|
||||
core uint32,
|
||||
proof []byte,
|
||||
) bool
|
||||
}
|
||||
|
@ -25,4 +25,20 @@ type InclusionProver interface {
|
||||
)
|
||||
VerifyAggregate(proof *InclusionAggregateProof) (bool, error)
|
||||
VerifyFrame(frame *protobufs.ClockFrame) error
|
||||
CommitRaw(
|
||||
data []byte,
|
||||
polySize uint64,
|
||||
) ([]byte, error)
|
||||
ProveRaw(
|
||||
data []byte,
|
||||
index int,
|
||||
polySize uint64,
|
||||
) ([]byte, error)
|
||||
VerifyRaw(
|
||||
data []byte,
|
||||
commit []byte,
|
||||
index int,
|
||||
proof []byte,
|
||||
polySize uint64,
|
||||
) (bool, error)
|
||||
}
|
||||
|
@ -413,14 +413,14 @@ func Init() {
|
||||
modulus := make([]byte, 73)
|
||||
bls48581.NewBIGints(bls48581.CURVE_Order, nil).ToBytes(modulus)
|
||||
q := new(big.Int).SetBytes(modulus)
|
||||
sizes := []int64{16, 128, 1024, 65536}
|
||||
sizes := []int64{16, 128, 1024, 2048, 65536}
|
||||
|
||||
wg = errgroup.Group{}
|
||||
wg.SetLimit(runtime.NumCPU())
|
||||
root := make([]curves.PairingScalar, 4)
|
||||
roots := make([][]curves.PairingScalar, 4)
|
||||
reverseRoots := make([][]curves.PairingScalar, 4)
|
||||
ffts := make([][]curves.PairingPoint, 4)
|
||||
root := make([]curves.PairingScalar, 5)
|
||||
roots := make([][]curves.PairingScalar, 5)
|
||||
reverseRoots := make([][]curves.PairingScalar, 5)
|
||||
ffts := make([][]curves.PairingPoint, 5)
|
||||
|
||||
for idx, i := range sizes {
|
||||
i := i
|
||||
|
@ -354,5 +354,5 @@ func TestKZGProof(t *testing.T) {
|
||||
)
|
||||
require.False(t, proof.IsIdentity())
|
||||
require.NoError(t, err)
|
||||
require.True(t, valid)
|
||||
require.False(t, valid)
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ func (k *KZGInclusionProver) ProveAggregate(
|
||||
return nil, errors.Wrap(err, "prove aggregate")
|
||||
}
|
||||
|
||||
for i := 0; i < 128-len(poly); i++ {
|
||||
for i := 0; i < 1024-len(poly); i++ {
|
||||
poly = append(
|
||||
poly,
|
||||
curves.BLS48581G1().Scalar.Zero().(curves.PairingScalar),
|
||||
@ -188,7 +188,7 @@ func (k *KZGInclusionProver) ProveAggregate(
|
||||
*curves.BLS48581(
|
||||
curves.BLS48581G1().NewGeneratorPoint(),
|
||||
),
|
||||
128,
|
||||
1024,
|
||||
false,
|
||||
)
|
||||
if err != nil {
|
||||
@ -387,7 +387,7 @@ func (k *KZGInclusionProver) VerifyFrame(
|
||||
return errors.Wrap(err, "verify frame")
|
||||
}
|
||||
|
||||
for i := 0; i < 128-len(poly); i++ {
|
||||
for i := 0; i < 1024-len(poly); i++ {
|
||||
poly = append(
|
||||
poly,
|
||||
curves.BLS48581G1().Scalar.Zero().(curves.PairingScalar),
|
||||
@ -399,7 +399,7 @@ func (k *KZGInclusionProver) VerifyFrame(
|
||||
*curves.BLS48581(
|
||||
curves.BLS48581G1().NewGeneratorPoint(),
|
||||
),
|
||||
128,
|
||||
1024,
|
||||
false,
|
||||
)
|
||||
if err != nil {
|
||||
@ -461,4 +461,120 @@ func (k *KZGInclusionProver) VerifyFrame(
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *KZGInclusionProver) CommitRaw(
|
||||
data []byte,
|
||||
polySize uint64,
|
||||
) ([]byte, error) {
|
||||
poly, err := k.prover.BytesToPolynomial(data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "commit raw")
|
||||
}
|
||||
for i := len(poly); i < int(polySize); i++ {
|
||||
poly = append(poly, curves.BLS48581G1().NewScalar().(curves.PairingScalar))
|
||||
}
|
||||
|
||||
commit, err := k.prover.Commit(poly)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "commit raw")
|
||||
}
|
||||
|
||||
return commit.ToAffineCompressed(), nil
|
||||
}
|
||||
|
||||
func (k *KZGInclusionProver) ProveRaw(
|
||||
data []byte,
|
||||
index int,
|
||||
polySize uint64,
|
||||
) ([]byte, error) {
|
||||
poly, err := k.prover.BytesToPolynomial(data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "prove raw")
|
||||
}
|
||||
for i := len(poly); i < int(polySize); i++ {
|
||||
poly = append(poly, curves.BLS48581G1().NewScalar().(curves.PairingScalar))
|
||||
}
|
||||
|
||||
z := kzg.RootsOfUnityBLS48581[polySize][index]
|
||||
|
||||
evalPoly, err := kzg.FFT(
|
||||
poly,
|
||||
*curves.BLS48581(
|
||||
curves.BLS48581G1().NewGeneratorPoint(),
|
||||
),
|
||||
polySize,
|
||||
true,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "prove raw")
|
||||
}
|
||||
|
||||
divisors := make([]curves.PairingScalar, 2)
|
||||
divisors[0] = (&curves.ScalarBls48581{}).Zero().Sub(z).(*curves.ScalarBls48581)
|
||||
divisors[1] = (&curves.ScalarBls48581{}).One().(*curves.ScalarBls48581)
|
||||
|
||||
a := make([]curves.PairingScalar, len(evalPoly))
|
||||
for i := 0; i < len(a); i++ {
|
||||
a[i] = evalPoly[i].Clone().(*curves.ScalarBls48581)
|
||||
}
|
||||
|
||||
// Adapted from Feist's amortized proofs:
|
||||
aPos := len(a) - 1
|
||||
bPos := len(divisors) - 1
|
||||
diff := aPos - bPos
|
||||
out := make([]curves.PairingScalar, diff+1, diff+1)
|
||||
for diff >= 0 {
|
||||
out[diff] = a[aPos].Div(divisors[bPos]).(*curves.ScalarBls48581)
|
||||
for i := bPos; i >= 0; i-- {
|
||||
a[diff+i] = a[diff+i].Sub(
|
||||
out[diff].Mul(divisors[i]),
|
||||
).(*curves.ScalarBls48581)
|
||||
}
|
||||
aPos -= 1
|
||||
diff -= 1
|
||||
}
|
||||
|
||||
proof, err := k.prover.PointLinearCombination(
|
||||
kzg.CeremonyBLS48581G1[:polySize-1],
|
||||
out,
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "prove raw")
|
||||
}
|
||||
|
||||
return proof.ToAffineCompressed(), nil
|
||||
}
|
||||
|
||||
func (k *KZGInclusionProver) VerifyRaw(
|
||||
data []byte,
|
||||
commit []byte,
|
||||
index int,
|
||||
proof []byte,
|
||||
polySize uint64,
|
||||
) (bool, error) {
|
||||
z := kzg.RootsOfUnityBLS48581[polySize][index]
|
||||
|
||||
y, err := curves.BLS48581G1().NewScalar().SetBytes(data)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "verify raw")
|
||||
}
|
||||
|
||||
c, err := curves.BLS48581G1().Point.FromAffineCompressed(commit)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "verify raw")
|
||||
}
|
||||
|
||||
p, err := curves.BLS48581G1().Point.FromAffineCompressed(proof)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "verify raw")
|
||||
}
|
||||
|
||||
return k.prover.Verify(
|
||||
c.(curves.PairingPoint),
|
||||
z,
|
||||
y.(curves.PairingScalar),
|
||||
p.(curves.PairingPoint),
|
||||
), nil
|
||||
}
|
||||
|
||||
var _ InclusionProver = (*KZGInclusionProver)(nil)
|
||||
|
@ -70,3 +70,21 @@ func TestKZGVerifyFrame(t *testing.T) {
|
||||
err = inclusionProver.VerifyFrame(frame)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestKZGInclusionProverRawFuncs(t *testing.T) {
|
||||
kzg.TestInit("./kzg/ceremony.json")
|
||||
data := make([]byte, 65536)
|
||||
rand.Read(data)
|
||||
|
||||
l, _ := zap.NewProduction()
|
||||
inclusionProver := crypto.NewKZGInclusionProver(l)
|
||||
c, err := inclusionProver.CommitRaw(data, 1024)
|
||||
assert.NoError(t, err)
|
||||
|
||||
p, err := inclusionProver.ProveRaw(data, 3, 1024)
|
||||
assert.NoError(t, err)
|
||||
|
||||
v, err := inclusionProver.VerifyRaw(data[64*4:64*5], c, 3, p, 1024)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, v)
|
||||
}
|
||||
|
@ -6,14 +6,12 @@ import (
|
||||
"crypto/rand"
|
||||
"encoding/binary"
|
||||
"math/big"
|
||||
"time"
|
||||
|
||||
"github.com/cloudflare/circl/sign/ed448"
|
||||
"github.com/iden3/go-iden3-crypto/poseidon"
|
||||
"github.com/pkg/errors"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/crypto/sha3"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/tries"
|
||||
@ -584,71 +582,37 @@ func (w *WesolowskiFrameProver) VerifyWeakRecursiveProof(
|
||||
func (w *WesolowskiFrameProver) CalculateChallengeProof(
|
||||
challenge []byte,
|
||||
core uint32,
|
||||
skew int64,
|
||||
nowMs int64,
|
||||
) ([]byte, int64, error) {
|
||||
input := binary.BigEndian.AppendUint64([]byte{}, uint64(nowMs))
|
||||
input = append(input, challenge...)
|
||||
increment uint32,
|
||||
) ([]byte, error) {
|
||||
difficulty := 200000 - (increment / 4)
|
||||
|
||||
// 4.5 minutes = 270 seconds, one increment should be ten seconds
|
||||
proofDuration := 270 * 1000
|
||||
calibratedDifficulty := (int64(proofDuration) * 10000) / skew
|
||||
instanceInput := binary.BigEndian.AppendUint32([]byte{}, core)
|
||||
instanceInput = append(instanceInput, input...)
|
||||
instanceInput = append(instanceInput, challenge...)
|
||||
b := sha3.Sum256(instanceInput)
|
||||
o := vdf.WesolowskiSolve(b, uint32(calibratedDifficulty))
|
||||
o := vdf.WesolowskiSolve(b, uint32(difficulty))
|
||||
|
||||
output := make([]byte, 516)
|
||||
copy(output[:], o[:])
|
||||
now := time.UnixMilli(nowMs)
|
||||
after := time.Since(now)
|
||||
nextSkew := (skew * after.Milliseconds()) / int64(proofDuration)
|
||||
|
||||
return output, nextSkew, nil
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (w *WesolowskiFrameProver) VerifyChallengeProof(
|
||||
challenge []byte,
|
||||
timestamp int64,
|
||||
assertedDifficulty int64,
|
||||
proof [][]byte,
|
||||
increment uint32,
|
||||
core uint32,
|
||||
proof []byte,
|
||||
) bool {
|
||||
input := binary.BigEndian.AppendUint64([]byte{}, uint64(timestamp))
|
||||
input = append(input, challenge...)
|
||||
difficulty := 200000 - (increment / 4)
|
||||
|
||||
if assertedDifficulty < 1 {
|
||||
if len(proof) != 516 {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := uint32(0); i < uint32(len(proof)); i++ {
|
||||
if len(proof[i]) != 516 {
|
||||
return false
|
||||
}
|
||||
instanceInput := binary.BigEndian.AppendUint32([]byte{}, core)
|
||||
instanceInput = append(instanceInput, challenge...)
|
||||
b := sha3.Sum256(instanceInput)
|
||||
|
||||
instanceInput := binary.BigEndian.AppendUint32([]byte{}, i)
|
||||
instanceInput = append(instanceInput, input...)
|
||||
b := sha3.Sum256(instanceInput)
|
||||
|
||||
// 4.5 minutes = 270 seconds, one increment should be ten seconds
|
||||
proofDuration := 270 * 1000
|
||||
skew := (assertedDifficulty * 12) / 10
|
||||
calibratedDifficulty := (int64(proofDuration) * 10000) / skew
|
||||
|
||||
check := vdf.WesolowskiVerify(b, uint32(calibratedDifficulty), [516]byte(proof[i]))
|
||||
if !check {
|
||||
// TODO: Remove after 2024-05-28
|
||||
if time.Now().Before(config.GetMinimumVersionCutoff()) {
|
||||
calibratedDifficulty = (int64(proofDuration) / skew) * 10000
|
||||
|
||||
check = vdf.WesolowskiVerify(sha3.Sum256(input), uint32(calibratedDifficulty), [516]byte(proof[i]))
|
||||
if !check {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
check := vdf.WesolowskiVerify(b, difficulty, [516]byte(proof))
|
||||
return check
|
||||
}
|
||||
|
@ -30,12 +30,7 @@ func TestMasterProve(t *testing.T) {
|
||||
func TestChallengeProof(t *testing.T) {
|
||||
l, _ := zap.NewProduction()
|
||||
w := crypto.NewWesolowskiFrameProver(l)
|
||||
now := time.Now().UnixMilli()
|
||||
proofs, nextSkew, err := w.CalculateChallengeProof([]byte{0x01, 0x02, 0x03}, 0, 120000, now)
|
||||
proofs, err := w.CalculateChallengeProof([]byte{0x01, 0x02, 0x03}, 0, 1)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, w.VerifyChallengeProof([]byte{0x01, 0x02, 0x03}, now, 100000, [][]byte{proofs}))
|
||||
now = time.Now().UnixMilli()
|
||||
proofs, _, err = w.CalculateChallengeProof([]byte{0x01, 0x02, 0x03}, 0, nextSkew*12/10, now)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, w.VerifyChallengeProof([]byte{0x01, 0x02, 0x03}, now, nextSkew, [][]byte{proofs}))
|
||||
assert.True(t, w.VerifyChallengeProof([]byte{0x01, 0x02, 0x03}, 1, 0, proofs))
|
||||
}
|
||||
|
@ -234,8 +234,8 @@ func CreateGenesisState(
|
||||
}
|
||||
|
||||
difficulty := engineConfig.Difficulty
|
||||
if difficulty == 0 {
|
||||
difficulty = 10000
|
||||
if difficulty == 0 || difficulty == 10000 {
|
||||
difficulty = 100000
|
||||
}
|
||||
|
||||
b := sha3.Sum256(seed)
|
||||
|
66
node/main.go
66
node/main.go
@ -11,6 +11,7 @@ import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"math/big"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
@ -409,6 +410,7 @@ func main() {
|
||||
kzg.Init()
|
||||
|
||||
report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
|
||||
RunMigrationIfNeeded(*configDirectory, nodeConfig)
|
||||
|
||||
done := make(chan os.Signal, 1)
|
||||
signal.Notify(done, syscall.SIGINT, syscall.SIGTERM)
|
||||
@ -429,6 +431,7 @@ func main() {
|
||||
nodeConfig.ListenGRPCMultiaddr,
|
||||
nodeConfig.ListenRestMultiaddr,
|
||||
node.GetLogger(),
|
||||
node.GetDataProofStore(),
|
||||
node.GetClockStore(),
|
||||
node.GetKeyManager(),
|
||||
node.GetPubSub(),
|
||||
@ -483,7 +486,7 @@ func spawnDataWorkers(nodeConfig *config.Config) {
|
||||
args = append(args, os.Args[1:]...)
|
||||
cmd := exec.Command(process, args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stderr = os.Stdout
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -526,6 +529,56 @@ func RunCompaction(clockStore *store.PebbleClockStore) {
|
||||
fmt.Println("compaction complete")
|
||||
}
|
||||
|
||||
func RunMigrationIfNeeded(
|
||||
configDir string,
|
||||
nodeConfig *config.Config,
|
||||
) {
|
||||
shouldMigrate := false
|
||||
migrationInfo := []byte{0x00, 0x00, 0x00}
|
||||
_, err := os.Stat(filepath.Join(configDir, "MIGRATIONS"))
|
||||
if err != nil && os.IsNotExist(err) {
|
||||
fmt.Println("Migrations file not found, will perform migration...")
|
||||
shouldMigrate = true
|
||||
}
|
||||
|
||||
if !shouldMigrate {
|
||||
migrationInfo, err = os.ReadFile(filepath.Join(configDir, "MIGRATIONS"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if len(migrationInfo) < 3 ||
|
||||
!bytes.Equal(migrationInfo, []byte{0x01, 0x04, 0x013}) {
|
||||
fmt.Println("Migrations file outdated, will perform migration...")
|
||||
shouldMigrate = true
|
||||
}
|
||||
}
|
||||
|
||||
// If subsequent migrations arise, we will need to distinguish by version
|
||||
if shouldMigrate {
|
||||
fmt.Println("Running migration...")
|
||||
|
||||
// Easiest migration in the world.
|
||||
err := os.RemoveAll(filepath.Join(configDir, "store"))
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: Could not remove store, please be sure to do this before restarting the node.")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = os.WriteFile(
|
||||
filepath.Join(configDir, "MIGRATIONS"),
|
||||
[]byte{0x01, 0x04, 0x13},
|
||||
fs.FileMode(0600),
|
||||
)
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: Could not save migration file.")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println("Migration completed.")
|
||||
}
|
||||
}
|
||||
|
||||
func RunSelfTestIfNeeded(
|
||||
configDir string,
|
||||
nodeConfig *config.Config,
|
||||
@ -572,8 +625,8 @@ func RunSelfTestIfNeeded(
|
||||
|
||||
report := &protobufs.SelfTestReport{}
|
||||
difficulty := nodeConfig.Engine.Difficulty
|
||||
if difficulty == 0 {
|
||||
difficulty = 10000
|
||||
if difficulty == 0 || difficulty == 10000 {
|
||||
difficulty = 100000
|
||||
}
|
||||
report.Difficulty = difficulty
|
||||
|
||||
@ -789,8 +842,11 @@ func printBalance(config *config.Config) {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println("Owned balance:", balance.Owned, "QUIL")
|
||||
fmt.Println("Unconfirmed balance:", balance.UnconfirmedOwned, "QUIL")
|
||||
// fmt.Println("Owned balance:", balance.Owned, "QUIL")
|
||||
conversionFactor, _ := new(big.Int).SetString("1DCD65000", 16)
|
||||
r := new(big.Rat).SetFrac(balance.UnconfirmedOwned, conversionFactor)
|
||||
fmt.Println("Note: Balance is strictly rewards earned with 1.4.19+, check https://www.quilibrium.com/rewards for more info about previous rewards.")
|
||||
fmt.Println("Unclaimed balance:", r.FloatString(12), "QUIL")
|
||||
}
|
||||
|
||||
func printPeerID(p2pConfig *config.P2PConfig) {
|
||||
|
@ -1 +0,0 @@
|
||||
SHA3-256(node-1.4.18-darwin-arm64)= 0f666d6c3814f96bebce455034fe6a44b64f223b4e313ac506f42fa2371ac30d
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
SHA3-256(node-1.4.18-linux-amd64)= f2da38a5c8d4257767f4a9659ca9c05d4cf312fd7294e6a18847c8923f6815a0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
SHA3-256(node-1.4.18-linux-arm64)= e12e14a18a491921fcdd4ffe6e9792f1e195abf4950fe56316219f920867c45a
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -341,7 +341,8 @@ func initDHT(
|
||||
if isBootstrapPeer {
|
||||
kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer))
|
||||
} else {
|
||||
kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto))
|
||||
// until libp2p gets their shit together, set this as a client only:
|
||||
kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeClient))
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -27,8 +27,7 @@ type ChallengeProofRequest struct {
|
||||
|
||||
Challenge []byte `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"`
|
||||
Core uint32 `protobuf:"varint,2,opt,name=core,proto3" json:"core,omitempty"`
|
||||
Skew int64 `protobuf:"varint,3,opt,name=skew,proto3" json:"skew,omitempty"`
|
||||
NowMs int64 `protobuf:"varint,4,opt,name=now_ms,json=nowMs,proto3" json:"now_ms,omitempty"`
|
||||
Increment uint32 `protobuf:"varint,3,opt,name=increment,proto3" json:"increment,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ChallengeProofRequest) Reset() {
|
||||
@ -77,16 +76,9 @@ func (x *ChallengeProofRequest) GetCore() uint32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ChallengeProofRequest) GetSkew() int64 {
|
||||
func (x *ChallengeProofRequest) GetIncrement() uint32 {
|
||||
if x != nil {
|
||||
return x.Skew
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ChallengeProofRequest) GetNowMs() int64 {
|
||||
if x != nil {
|
||||
return x.NowMs
|
||||
return x.Increment
|
||||
}
|
||||
return 0
|
||||
}
|
||||
@ -96,8 +88,7 @@ type ChallengeProofResponse struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Output []byte `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"`
|
||||
NextSkew int64 `protobuf:"varint,2,opt,name=next_skew,json=nextSkew,proto3" json:"next_skew,omitempty"`
|
||||
Output []byte `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ChallengeProofResponse) Reset() {
|
||||
@ -139,44 +130,35 @@ func (x *ChallengeProofResponse) GetOutput() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ChallengeProofResponse) GetNextSkew() int64 {
|
||||
if x != nil {
|
||||
return x.NextSkew
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
var File_data_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_data_proto_rawDesc = []byte{
|
||||
0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x71, 0x75,
|
||||
0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x61,
|
||||
0x74, 0x61, 0x2e, 0x70, 0x62, 0x22, 0x74, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
|
||||
0x74, 0x61, 0x2e, 0x70, 0x62, 0x22, 0x67, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
|
||||
0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0c, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04,
|
||||
0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x65,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04,
|
||||
0x73, 0x6b, 0x65, 0x77, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x77, 0x5f, 0x6d, 0x73, 0x18, 0x04,
|
||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x77, 0x4d, 0x73, 0x22, 0x4d, 0x0a, 0x16, 0x43,
|
||||
0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x0a,
|
||||
0x09, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x6b, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x53, 0x6b, 0x65, 0x77, 0x32, 0x8c, 0x01, 0x0a, 0x0e, 0x44,
|
||||
0x61, 0x74, 0x61, 0x49, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7a, 0x0a,
|
||||
0x17, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65,
|
||||
0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f,
|
||||
0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f,
|
||||
0x66, 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,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x0d, 0x52, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x30,
|
||||
0x0a, 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70,
|
||||
0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
|
||||
0x32, 0x8c, 0x01, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x49, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x12, 0x7a, 0x0a, 0x17, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65,
|
||||
0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2e,
|
||||
0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
|
||||
0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f,
|
||||
0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
|
||||
0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 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 (
|
||||
|
@ -7,13 +7,11 @@ option go_package = "source.quilibrium.com/quilibrium/monorepo/node/protobufs";
|
||||
message ChallengeProofRequest {
|
||||
bytes challenge = 1;
|
||||
uint32 core = 2;
|
||||
int64 skew = 3;
|
||||
int64 now_ms = 4;
|
||||
uint32 increment = 3;
|
||||
}
|
||||
|
||||
message ChallengeProofResponse {
|
||||
bytes output = 1;
|
||||
int64 next_skew = 2;
|
||||
}
|
||||
|
||||
service DataIPCService {
|
||||
|
@ -1096,6 +1096,10 @@ type SelfTestReport struct {
|
||||
MasterHeadFrame uint64 `protobuf:"varint,15,opt,name=master_head_frame,json=masterHeadFrame,proto3" json:"master_head_frame,omitempty"`
|
||||
// A challenge proof
|
||||
Proof []byte `protobuf:"bytes,16,opt,name=proof,proto3" json:"proof,omitempty"`
|
||||
// The challenge, minus the peer id
|
||||
Challenge []byte `protobuf:"bytes,17,opt,name=challenge,proto3" json:"challenge,omitempty"`
|
||||
// The increment value
|
||||
Increment uint32 `protobuf:"varint,18,opt,name=increment,proto3" json:"increment,omitempty"`
|
||||
}
|
||||
|
||||
func (x *SelfTestReport) Reset() {
|
||||
@ -1242,6 +1246,20 @@ func (x *SelfTestReport) GetProof() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *SelfTestReport) GetChallenge() []byte {
|
||||
if x != nil {
|
||||
return x.Challenge
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *SelfTestReport) GetIncrement() uint32 {
|
||||
if x != nil {
|
||||
return x.Increment
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ValidationMessage struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@ -1467,6 +1485,8 @@ type PeerManifest struct {
|
||||
MasterHeadFrame uint64 `protobuf:"varint,16,opt,name=master_head_frame,json=masterHeadFrame,proto3" json:"master_head_frame,omitempty"`
|
||||
// The last time seen tick
|
||||
LastSeen int64 `protobuf:"varint,17,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"`
|
||||
// The increment of the node
|
||||
Increment uint32 `protobuf:"varint,18,opt,name=increment,proto3" json:"increment,omitempty"`
|
||||
}
|
||||
|
||||
func (x *PeerManifest) Reset() {
|
||||
@ -1620,6 +1640,13 @@ func (x *PeerManifest) GetLastSeen() int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *PeerManifest) GetIncrement() uint32 {
|
||||
if x != nil {
|
||||
return x.Increment
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type PeerManifestsResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@ -1798,7 +1825,7 @@ var file_node_proto_rawDesc = []byte{
|
||||
0x63, 0x6f, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2f, 0x0a,
|
||||
0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61,
|
||||
0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x61, 0x64, 0x64, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x90,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcc,
|
||||
0x05, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
|
||||
@ -1840,152 +1867,158 @@ var file_node_proto_rawDesc = []byte{
|
||||
0x72, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x73, 0x74,
|
||||
0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70,
|
||||
0x72, 0x6f, 0x6f, 0x66, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f,
|
||||
0x66, 0x22, 0x33, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
|
||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69,
|
||||
0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f,
|
||||
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
|
||||
0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 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, 0x52, 0x0d, 0x66, 0x72, 0x61,
|
||||
0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x0c, 0x53, 0x79,
|
||||
0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x66, 0x72,
|
||||
0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43,
|
||||
0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x52, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e,
|
||||
0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xae, 0x05,
|
||||
0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x17,
|
||||
0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||
0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69,
|
||||
0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66,
|
||||
0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69,
|
||||
0x63, 0x75, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x10, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31,
|
||||
0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a,
|
||||
0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74,
|
||||
0x72, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
|
||||
0x74, 0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30,
|
||||
0x32, 0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x69, 0x74, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
|
||||
0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35,
|
||||
0x33, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f,
|
||||
0x66, 0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f,
|
||||
0x66, 0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72,
|
||||
0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
|
||||
0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34,
|
||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f,
|
||||
0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20,
|
||||
0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65,
|
||||
0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f,
|
||||
0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20,
|
||||
0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c,
|
||||
0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
|
||||
0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70,
|
||||
0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
|
||||
0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f,
|
||||
0x68, 0x65, 0x61, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04,
|
||||
0x52, 0x0f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x46, 0x72, 0x61, 0x6d,
|
||||
0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x11,
|
||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x65,
|
||||
0x0a, 0x15, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x70, 0x65, 0x65, 0x72, 0x5f,
|
||||
0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x25, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61,
|
||||
0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69,
|
||||
0x66, 0x65, 0x73, 0x74, 0x73, 0x32, 0xd7, 0x01, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x11, 0x50,
|
||||
0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x12, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x2a, 0x2e, 0x71,
|
||||
0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63,
|
||||
0x12, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32,
|
||||
0xf6, 0x05, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||
0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71,
|
||||
0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
||||
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72,
|
||||
0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a,
|
||||
0x66, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x11,
|
||||
0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12,
|
||||
0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01,
|
||||
0x28, 0x0d, 0x52, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x33, 0x0a,
|
||||
0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61,
|
||||
0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x53, 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
||||
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 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, 0x52, 0x0d, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73,
|
||||
0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x2d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
|
||||
0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e,
|
||||
0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19,
|
||||
0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73,
|
||||
0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xcc, 0x05, 0x0a, 0x0c, 0x50, 0x65,
|
||||
0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65,
|
||||
0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65,
|
||||
0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
|
||||
0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75,
|
||||
0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
|
||||
0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10,
|
||||
0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
|
||||
0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x32, 0x38,
|
||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
|
||||
0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30, 0x32, 0x34, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x36,
|
||||
0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x36,
|
||||
0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70,
|
||||
0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10,
|
||||
0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x32, 0x38,
|
||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f,
|
||||
0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34, 0x4d, 0x65, 0x74, 0x72,
|
||||
0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x36, 0x35, 0x35, 0x33,
|
||||
0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10,
|
||||
0x70, 0x72, 0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52,
|
||||
0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79,
|
||||
0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18,
|
||||
0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||
0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61,
|
||||
0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23,
|
||||
0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e,
|
||||
0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65,
|
||||
0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
|
||||
0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
|
||||
0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64,
|
||||
0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61,
|
||||
0x73, 0x74, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a,
|
||||
0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e,
|
||||
0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x69,
|
||||
0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x65, 0x0a, 0x15, 0x50, 0x65, 0x65, 0x72,
|
||||
0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65,
|
||||
0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x69, 0x6c,
|
||||
0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
|
||||
0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
||||
0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e,
|
||||
0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74,
|
||||
0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x32,
|
||||
0xd7, 0x01, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d,
|
||||
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
|
||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61,
|
||||
0x67, 0x65, 0x12, 0x55, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x25, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0xf6, 0x05, 0x0a, 0x0b, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74,
|
||||
0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x74, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e,
|
||||
0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x12, 0x30, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d,
|
||||
0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65,
|
||||
0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64,
|
||||
0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64,
|
||||
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
|
||||
0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
|
||||
0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50,
|
||||
0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
||||
0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47,
|
||||
0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69,
|
||||
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
||||
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
|
||||
0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50,
|
||||
0x75, 0x74, 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,
|
||||
0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
|
||||
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
|
||||
0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
|
||||
0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e,
|
||||
0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e,
|
||||
0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
|
||||
0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
|
||||
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x10,
|
||||
0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73,
|
||||
0x12, 0x30, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65,
|
||||
0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 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, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65,
|
||||
0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x32, 0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12,
|
||||
0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
|
||||
0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64,
|
||||
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71,
|
||||
0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
|
||||
0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x50,
|
||||
0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24,
|
||||
0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
|
||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 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 (
|
||||
|
@ -157,6 +157,10 @@ message SelfTestReport {
|
||||
uint64 master_head_frame = 15;
|
||||
// A challenge proof
|
||||
bytes proof = 16;
|
||||
// The challenge, minus the peer id
|
||||
bytes challenge = 17;
|
||||
// The increment value
|
||||
uint32 increment = 18;
|
||||
}
|
||||
|
||||
message ValidationMessage {
|
||||
@ -220,6 +224,8 @@ message PeerManifest {
|
||||
uint64 master_head_frame = 16;
|
||||
// The last time seen tick
|
||||
int64 last_seen = 17;
|
||||
// The increment of the node
|
||||
uint32 increment = 18;
|
||||
}
|
||||
|
||||
message PeerManifestsResponse {
|
||||
|
@ -39,19 +39,17 @@ func (r *DataWorkerIPCServer) CalculateChallengeProof(
|
||||
)
|
||||
}
|
||||
|
||||
proof, nextSkew, err := r.prover.CalculateChallengeProof(
|
||||
proof, err := r.prover.CalculateChallengeProof(
|
||||
req.Challenge,
|
||||
uint32(r.coreId),
|
||||
req.Skew,
|
||||
req.NowMs,
|
||||
req.Increment,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "calculate challenge proof")
|
||||
}
|
||||
|
||||
return &protobufs.ChallengeProofResponse{
|
||||
Output: proof,
|
||||
NextSkew: nextSkew,
|
||||
Output: proof,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -96,6 +94,7 @@ func (r *DataWorkerIPCServer) Start() error {
|
||||
zap.String("address", r.listenAddrGRPC),
|
||||
)
|
||||
if err := s.Serve(mn.NetListener(lis)); err != nil {
|
||||
r.logger.Error("terminating server", zap.Error(err))
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ package rpc
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"math/big"
|
||||
"net/http"
|
||||
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||||
@ -11,7 +10,6 @@ import (
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
|
||||
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||
"github.com/iden3/go-iden3-crypto/poseidon"
|
||||
"github.com/multiformats/go-multiaddr"
|
||||
mn "github.com/multiformats/go-multiaddr/net"
|
||||
"github.com/pkg/errors"
|
||||
@ -21,12 +19,10 @@ import (
|
||||
"google.golang.org/grpc/reflection"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/consensus/master"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/execution"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/store"
|
||||
"source.quilibrium.com/quilibrium/monorepo/node/tries"
|
||||
)
|
||||
|
||||
type RPCServer struct {
|
||||
@ -34,6 +30,7 @@ type RPCServer struct {
|
||||
listenAddrGRPC string
|
||||
listenAddrHTTP string
|
||||
logger *zap.Logger
|
||||
dataProofStore store.DataProofStore
|
||||
clockStore store.ClockStore
|
||||
keyManager keys.KeyManager
|
||||
pubSub p2p.PubSub
|
||||
@ -192,136 +189,142 @@ func (r *RPCServer) GetPeerInfo(
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// Only returns the active amounts earned under 1.4.19 until 2.0
|
||||
func (r *RPCServer) GetTokenInfo(
|
||||
ctx context.Context,
|
||||
req *protobufs.GetTokenInfoRequest,
|
||||
) (*protobufs.TokenInfoResponse, error) {
|
||||
provingKey, err := r.keyManager.GetRawKey(
|
||||
"default-proving-key",
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get token info")
|
||||
}
|
||||
// provingKey, err := r.keyManager.GetRawKey(
|
||||
// "default-proving-key",
|
||||
// )
|
||||
// if err != nil {
|
||||
// return nil, errors.Wrap(err, "get token info")
|
||||
// }
|
||||
|
||||
peerBytes := r.pubSub.GetPeerID()
|
||||
peerAddr, err := poseidon.HashBytes(peerBytes)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// peerBytes := r.pubSub.GetPeerID()
|
||||
// peerAddr, err := poseidon.HashBytes(peerBytes)
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
addr, err := poseidon.HashBytes(provingKey.PublicKey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// addr, err := poseidon.HashBytes(provingKey.PublicKey)
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
addrBytes := addr.Bytes()
|
||||
addrBytes = append(make([]byte, 32-len(addrBytes)), addrBytes...)
|
||||
// addrBytes := addr.Bytes()
|
||||
// addrBytes = append(make([]byte, 32-len(addrBytes)), addrBytes...)
|
||||
|
||||
peerAddrBytes := peerAddr.Bytes()
|
||||
peerAddrBytes = append(make([]byte, 32-len(peerAddrBytes)), peerAddrBytes...)
|
||||
// peerAddrBytes := peerAddr.Bytes()
|
||||
// peerAddrBytes = append(make([]byte, 32-len(peerAddrBytes)), peerAddrBytes...)
|
||||
|
||||
frame, err := r.clockStore.GetLatestDataClockFrame(
|
||||
append(
|
||||
p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
|
||||
p2p.GetBloomFilterIndices(application.CEREMONY_ADDRESS, 65536, 24)...,
|
||||
),
|
||||
nil,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get token info")
|
||||
}
|
||||
// frame, err := r.clockStore.GetLatestDataClockFrame(
|
||||
// append(
|
||||
// p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
|
||||
// p2p.GetBloomFilterIndices(application.CEREMONY_ADDRESS, 65536, 24)...,
|
||||
// ),
|
||||
// nil,
|
||||
// )
|
||||
// if err != nil {
|
||||
// return nil, errors.Wrap(err, "get token info")
|
||||
// }
|
||||
|
||||
confirmed, err := application.MaterializeApplicationFromFrame(frame)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get token info")
|
||||
}
|
||||
// confirmed, err := application.MaterializeApplicationFromFrame(frame)
|
||||
// if err != nil {
|
||||
// return nil, errors.Wrap(err, "get token info")
|
||||
// }
|
||||
|
||||
confirmedTotal := new(big.Int)
|
||||
ownedTotal := new(big.Int)
|
||||
if confirmed.RewardTrie.Root == nil ||
|
||||
(confirmed.RewardTrie.Root.External == nil &&
|
||||
confirmed.RewardTrie.Root.Internal == nil) {
|
||||
return &protobufs.TokenInfoResponse{
|
||||
ConfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
OwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
UnconfirmedOwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
}, nil
|
||||
}
|
||||
// confirmedTotal := new(big.Int)
|
||||
// ownedTotal := new(big.Int)
|
||||
// if confirmed.RewardTrie.Root == nil ||
|
||||
// (confirmed.RewardTrie.Root.External == nil &&
|
||||
// confirmed.RewardTrie.Root.Internal == nil) {
|
||||
// return &protobufs.TokenInfoResponse{
|
||||
// ConfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
// UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
// OwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
// UnconfirmedOwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
// }, nil
|
||||
// }
|
||||
|
||||
limbs := []*tries.RewardInternalNode{}
|
||||
if confirmed.RewardTrie.Root.Internal != nil {
|
||||
limbs = append(limbs, confirmed.RewardTrie.Root.Internal)
|
||||
} else {
|
||||
confirmedTotal = confirmedTotal.Add(
|
||||
confirmedTotal,
|
||||
new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
|
||||
)
|
||||
if bytes.Equal(
|
||||
confirmed.RewardTrie.Root.External.Key,
|
||||
addrBytes,
|
||||
) {
|
||||
ownedTotal = ownedTotal.Add(
|
||||
ownedTotal,
|
||||
new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
|
||||
)
|
||||
}
|
||||
}
|
||||
// limbs := []*tries.RewardInternalNode{}
|
||||
// if confirmed.RewardTrie.Root.Internal != nil {
|
||||
// limbs = append(limbs, confirmed.RewardTrie.Root.Internal)
|
||||
// } else {
|
||||
// confirmedTotal = confirmedTotal.Add(
|
||||
// confirmedTotal,
|
||||
// new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
|
||||
// )
|
||||
// if bytes.Equal(
|
||||
// confirmed.RewardTrie.Root.External.Key,
|
||||
// addrBytes,
|
||||
// ) {
|
||||
// ownedTotal = ownedTotal.Add(
|
||||
// ownedTotal,
|
||||
// new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
|
||||
for len(limbs) != 0 {
|
||||
nextLimbs := []*tries.RewardInternalNode{}
|
||||
for _, limb := range limbs {
|
||||
for _, child := range limb.Child {
|
||||
child := child
|
||||
if child.Internal != nil {
|
||||
nextLimbs = append(nextLimbs, child.Internal)
|
||||
} else {
|
||||
confirmedTotal = confirmedTotal.Add(
|
||||
confirmedTotal,
|
||||
new(big.Int).SetUint64(child.External.Total),
|
||||
)
|
||||
if bytes.Equal(
|
||||
child.External.Key,
|
||||
addrBytes,
|
||||
) {
|
||||
ownedTotal = ownedTotal.Add(
|
||||
ownedTotal,
|
||||
new(big.Int).SetUint64(child.External.Total),
|
||||
)
|
||||
}
|
||||
if bytes.Equal(
|
||||
child.External.Key,
|
||||
peerAddrBytes,
|
||||
) {
|
||||
ownedTotal = ownedTotal.Add(
|
||||
ownedTotal,
|
||||
new(big.Int).SetUint64(child.External.Total),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
limbs = nextLimbs
|
||||
}
|
||||
// for len(limbs) != 0 {
|
||||
// nextLimbs := []*tries.RewardInternalNode{}
|
||||
// for _, limb := range limbs {
|
||||
// for _, child := range limb.Child {
|
||||
// child := child
|
||||
// if child.Internal != nil {
|
||||
// nextLimbs = append(nextLimbs, child.Internal)
|
||||
// } else {
|
||||
// confirmedTotal = confirmedTotal.Add(
|
||||
// confirmedTotal,
|
||||
// new(big.Int).SetUint64(child.External.Total),
|
||||
// )
|
||||
// if bytes.Equal(
|
||||
// child.External.Key,
|
||||
// addrBytes,
|
||||
// ) {
|
||||
// ownedTotal = ownedTotal.Add(
|
||||
// ownedTotal,
|
||||
// new(big.Int).SetUint64(child.External.Total),
|
||||
// )
|
||||
// }
|
||||
// if bytes.Equal(
|
||||
// child.External.Key,
|
||||
// peerAddrBytes,
|
||||
// ) {
|
||||
// ownedTotal = ownedTotal.Add(
|
||||
// ownedTotal,
|
||||
// new(big.Int).SetUint64(child.External.Total),
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// limbs = nextLimbs
|
||||
// }
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get token info")
|
||||
}
|
||||
// if err != nil {
|
||||
// return nil, errors.Wrap(err, "get token info")
|
||||
// }
|
||||
|
||||
// 1 QUIL = 0x1DCD65000 units
|
||||
conversionFactor, ok := new(big.Int).SetString("1DCD65000", 16)
|
||||
if !ok {
|
||||
return nil, errors.Wrap(err, "get token info")
|
||||
// conversionFactor, ok := new(big.Int).SetString("1DCD65000", 16)
|
||||
// if !ok {
|
||||
// return nil, errors.Wrap(err, "get token info")
|
||||
// }
|
||||
|
||||
total, err := r.dataProofStore.GetTotalReward(r.pubSub.GetPeerID())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
confirmedTotal = confirmedTotal.Mul(confirmedTotal, conversionFactor)
|
||||
ownedTotal = ownedTotal.Mul(ownedTotal, conversionFactor)
|
||||
// confirmedTotal = confirmedTotal.Mul(confirmedTotal, conversionFactor)
|
||||
// ownedTotal = ownedTotal.Mul(ownedTotal, conversionFactor)
|
||||
|
||||
return &protobufs.TokenInfoResponse{
|
||||
ConfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
OwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
UnconfirmedOwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
// ConfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
// UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
|
||||
// OwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
|
||||
UnconfirmedOwnedTokens: total.FillBytes(make([]byte, 32)),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -336,6 +339,7 @@ func NewRPCServer(
|
||||
listenAddrGRPC string,
|
||||
listenAddrHTTP string,
|
||||
logger *zap.Logger,
|
||||
dataProofStore store.DataProofStore,
|
||||
clockStore store.ClockStore,
|
||||
keyManager keys.KeyManager,
|
||||
pubSub p2p.PubSub,
|
||||
@ -346,6 +350,7 @@ func NewRPCServer(
|
||||
listenAddrGRPC: listenAddrGRPC,
|
||||
listenAddrHTTP: listenAddrHTTP,
|
||||
logger: logger,
|
||||
dataProofStore: dataProofStore,
|
||||
clockStore: clockStore,
|
||||
keyManager: keyManager,
|
||||
pubSub: pubSub,
|
||||
|
@ -3,6 +3,7 @@ package store
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
"github.com/cockroachdb/pebble"
|
||||
"github.com/pkg/errors"
|
||||
@ -27,6 +28,27 @@ type DataProofStore interface {
|
||||
aggregateProof *protobufs.InclusionAggregateProof,
|
||||
commitment []byte,
|
||||
) error
|
||||
GetDataTimeProof(
|
||||
peerId []byte,
|
||||
increment uint32,
|
||||
) (difficulty, parallelism uint32, input, output []byte, err error)
|
||||
GetTotalReward(
|
||||
peerId []byte,
|
||||
) (*big.Int, error)
|
||||
PutDataTimeProof(
|
||||
txn Transaction,
|
||||
parallelism uint32,
|
||||
peerId []byte,
|
||||
increment uint32,
|
||||
input []byte,
|
||||
output []byte,
|
||||
) error
|
||||
GetLatestDataTimeProof(peerId []byte) (
|
||||
increment uint32,
|
||||
parallelism uint32,
|
||||
output []byte,
|
||||
err error,
|
||||
)
|
||||
}
|
||||
|
||||
var _ DataProofStore = (*PebbleDataProofStore)(nil)
|
||||
@ -47,10 +69,13 @@ func NewPebbleDataProofStore(
|
||||
}
|
||||
|
||||
const (
|
||||
DATA_PROOF = 0x04
|
||||
DATA_PROOF_METADATA = 0x00
|
||||
DATA_PROOF_INCLUSION = 0x01
|
||||
DATA_PROOF_SEGMENT = 0x02
|
||||
DATA_PROOF = 0x04
|
||||
DATA_PROOF_METADATA = 0x00
|
||||
DATA_PROOF_INCLUSION = 0x01
|
||||
DATA_PROOF_SEGMENT = 0x02
|
||||
DATA_TIME_PROOF = 0x05
|
||||
DATA_TIME_PROOF_DATA = 0x00
|
||||
DATA_TIME_PROOF_LATEST = 0x01
|
||||
)
|
||||
|
||||
func dataProofMetadataKey(filter []byte, commitment []byte) []byte {
|
||||
@ -82,6 +107,19 @@ func dataProofSegmentKey(
|
||||
return key
|
||||
}
|
||||
|
||||
func dataTimeProofKey(peerId []byte, increment uint32) []byte {
|
||||
key := []byte{DATA_TIME_PROOF, DATA_TIME_PROOF_DATA}
|
||||
key = append(key, peerId...)
|
||||
key = binary.BigEndian.AppendUint32(key, increment)
|
||||
return key
|
||||
}
|
||||
|
||||
func dataTimeProofLatestKey(peerId []byte) []byte {
|
||||
key := []byte{DATA_TIME_PROOF, DATA_TIME_PROOF_LATEST}
|
||||
key = append(key, peerId...)
|
||||
return key
|
||||
}
|
||||
|
||||
func (p *PebbleDataProofStore) NewTransaction() (Transaction, error) {
|
||||
return p.db.NewBatch(), nil
|
||||
}
|
||||
@ -362,3 +400,170 @@ func (p *PebbleDataProofStore) PutAggregateProof(
|
||||
commitment,
|
||||
)
|
||||
}
|
||||
|
||||
func (p *PebbleDataProofStore) GetDataTimeProof(
|
||||
peerId []byte,
|
||||
increment uint32,
|
||||
) (difficulty, parallelism uint32, input, output []byte, err error) {
|
||||
data, closer, err := p.db.Get(dataTimeProofKey(peerId, increment))
|
||||
if err != nil {
|
||||
if errors.Is(err, pebble.ErrNotFound) {
|
||||
err = ErrNotFound
|
||||
return
|
||||
}
|
||||
err = errors.Wrap(err, "get data time proof")
|
||||
return
|
||||
}
|
||||
|
||||
defer closer.Close()
|
||||
if len(data) < 24 {
|
||||
err = ErrInvalidData
|
||||
return
|
||||
}
|
||||
|
||||
difficulty = binary.BigEndian.Uint32(data[:4])
|
||||
parallelism = binary.BigEndian.Uint32(data[4:8])
|
||||
inputLen := binary.BigEndian.Uint64(data[8:16])
|
||||
|
||||
// Verify length of remaining data is at least equal to the input and next
|
||||
// length prefix
|
||||
if uint64(len(data[16:])) < inputLen+8 {
|
||||
err = ErrInvalidData
|
||||
return
|
||||
}
|
||||
|
||||
input = make([]byte, inputLen)
|
||||
copy(input[:], data[16:16+inputLen])
|
||||
|
||||
outputLen := binary.BigEndian.Uint64(data[16+inputLen : 16+inputLen+8])
|
||||
|
||||
// Verify length
|
||||
if uint64(len(data[16+inputLen+8:])) < outputLen {
|
||||
err = ErrInvalidData
|
||||
return
|
||||
}
|
||||
|
||||
output = make([]byte, outputLen)
|
||||
copy(output[:], data[16+inputLen+8:])
|
||||
return difficulty, parallelism, input, output, nil
|
||||
}
|
||||
|
||||
func (p *PebbleDataProofStore) GetTotalReward(
|
||||
peerId []byte,
|
||||
) (*big.Int, error) {
|
||||
reward := big.NewInt(0)
|
||||
prev, closer, err := p.db.Get(dataTimeProofLatestKey(peerId))
|
||||
if err != nil {
|
||||
if errors.Is(err, pebble.ErrNotFound) {
|
||||
return big.NewInt(0), nil
|
||||
}
|
||||
|
||||
return nil, errors.Wrap(err, "get total difficulty sum")
|
||||
}
|
||||
|
||||
if len(prev) != 0 {
|
||||
reward.SetBytes(prev[4:])
|
||||
|
||||
if err = closer.Close(); err != nil {
|
||||
return nil, errors.Wrap(err, "get total difficulty sum")
|
||||
}
|
||||
}
|
||||
|
||||
return reward, nil
|
||||
}
|
||||
|
||||
func (p *PebbleDataProofStore) PutDataTimeProof(
|
||||
txn Transaction,
|
||||
parallelism uint32,
|
||||
peerId []byte,
|
||||
increment uint32,
|
||||
input []byte,
|
||||
output []byte,
|
||||
) error {
|
||||
// Now, for the assumptions.
|
||||
// Rewards are calculated based off of a current average rate of growth such
|
||||
// that we continue at the rate we have been, for the course of the next month
|
||||
// and carry it to now it such that the greatest advantage gleaned is from
|
||||
// upgrading on time, akin to a "difficulty bomb" in reverse, but locally
|
||||
// calculated.
|
||||
difficulty := 200000 - (increment / 4)
|
||||
|
||||
// Basis split on the estimated shard level for growth rate (in terms of
|
||||
// units): 240 (QUIL) * 8000000000 (conversion factor) / 1600000 (shards)
|
||||
// = 1200000 units per reward interval per core
|
||||
pomwBasis := big.NewInt(1200000)
|
||||
reward := new(big.Int)
|
||||
reward = reward.Mul(pomwBasis, big.NewInt(int64(parallelism)))
|
||||
|
||||
priorSum := big.NewInt(0)
|
||||
prev, closer, err := p.db.Get(dataTimeProofLatestKey(peerId))
|
||||
if err != nil && (!errors.Is(err, pebble.ErrNotFound) || increment != 0) {
|
||||
return errors.Wrap(err, "put data time proof")
|
||||
}
|
||||
|
||||
if len(prev) != 0 {
|
||||
priorSum.SetBytes(prev[4:])
|
||||
prevIncrement := binary.BigEndian.Uint32(prev[:4])
|
||||
|
||||
if err = closer.Close(); err != nil {
|
||||
return errors.Wrap(err, "put data time proof")
|
||||
}
|
||||
|
||||
if prevIncrement != increment-1 {
|
||||
return errors.Wrap(errors.New("invalid increment"), "put data time proof")
|
||||
}
|
||||
}
|
||||
|
||||
data := []byte{}
|
||||
data = binary.BigEndian.AppendUint32(data, difficulty)
|
||||
data = binary.BigEndian.AppendUint32(data, parallelism)
|
||||
data = binary.BigEndian.AppendUint64(data, uint64(len(input)))
|
||||
data = append(data, input...)
|
||||
data = binary.BigEndian.AppendUint64(data, uint64(len(output)))
|
||||
data = append(data, output...)
|
||||
err = txn.Set(dataTimeProofKey(peerId, increment), data)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "put data time proof")
|
||||
}
|
||||
|
||||
latest := []byte{}
|
||||
latest = binary.BigEndian.AppendUint32(latest, increment)
|
||||
|
||||
priorSum.Add(priorSum, reward)
|
||||
latest = append(latest, priorSum.FillBytes(make([]byte, 32))...)
|
||||
|
||||
if err = txn.Set(dataTimeProofLatestKey(peerId), latest); err != nil {
|
||||
return errors.Wrap(err, "put data time proof")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PebbleDataProofStore) GetLatestDataTimeProof(peerId []byte) (
|
||||
increment uint32,
|
||||
parallelism uint32,
|
||||
output []byte,
|
||||
err error,
|
||||
) {
|
||||
prev, closer, err := p.db.Get(dataTimeProofLatestKey(peerId))
|
||||
if err != nil {
|
||||
if errors.Is(err, pebble.ErrNotFound) {
|
||||
return 0, 0, nil, ErrNotFound
|
||||
}
|
||||
|
||||
return 0, 0, nil, errors.Wrap(err, "get latest data time proof")
|
||||
}
|
||||
|
||||
if len(prev) < 4 {
|
||||
return 0, 0, nil, ErrInvalidData
|
||||
}
|
||||
|
||||
increment = binary.BigEndian.Uint32(prev[:4])
|
||||
if err = closer.Close(); err != nil {
|
||||
return 0, 0, nil, errors.Wrap(err, "get latest data time proof")
|
||||
}
|
||||
|
||||
_, parallelism, _, output, err = p.GetDataTimeProof(peerId, increment)
|
||||
|
||||
return increment, parallelism, output, err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user