mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-26 00:25:17 +00:00
v1.4.18
This commit is contained in:
parent
54f123ede8
commit
06947eb307
3
.gitignore
vendored
3
.gitignore
vendored
@ -5,3 +5,6 @@ ceremony-client
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
*.mprof
|
*.mprof
|
||||||
.env
|
.env
|
||||||
|
.env.signers
|
||||||
|
.task
|
||||||
|
node-tmp-*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Quilibrium - Dawn
|
# Quilibrium - Aurora
|
||||||
|
|
||||||
Quilibrium is a decentralized alternative to platform as a service providers.
|
Quilibrium is a decentralized alternative to platform as a service providers.
|
||||||
This release, mirrored to GitHub, is the Dawn release, which contains the
|
This release, mirrored to GitHub, is the Dawn release, which contains the
|
||||||
@ -94,7 +94,7 @@ This section contains community-built clients, applications, guides, etc <br /><
|
|||||||
|
|
||||||
### 1. The Q Guide - Beginners’ Guide
|
### 1. The Q Guide - Beginners’ Guide
|
||||||
|
|
||||||
- A detailed beginners' guide for how to setup a Quilibrium Node (on VPS, Ubuntu 22.04) - [link](https://github.com/demipoet/demipoet.github.io)<br/>
|
- A detailed beginners' guide for how to setup a Quilibrium Node, created by [@demipoet](https://www.github.com/demipoet) - [link](https://quilibrium.guide/)<br/>
|
||||||
|
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
|
@ -25,7 +25,7 @@ func init() {
|
|||||||
rootCmd.PersistentFlags().StringVar(
|
rootCmd.PersistentFlags().StringVar(
|
||||||
&configDirectory,
|
&configDirectory,
|
||||||
"config",
|
"config",
|
||||||
"../node/.config/",
|
".config/",
|
||||||
"config directory (default is ../node/.config/)",
|
"config directory (default is .config/)",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ services:
|
|||||||
node:
|
node:
|
||||||
image: ${QUILIBRIUM_IMAGE_NAME:-quilibrium}
|
image: ${QUILIBRIUM_IMAGE_NAME:-quilibrium}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
command: ["--signature-check=false"]
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
|
@ -865,26 +865,26 @@ func logoVersion(width int) string {
|
|||||||
var out string
|
var out string
|
||||||
|
|
||||||
if width >= 83 {
|
if width >= 83 {
|
||||||
out = " %#########\n"
|
out = " ..-------..\n"
|
||||||
out += " #############################\n"
|
out += " ..---'''' ''''---..\n"
|
||||||
out += " ########################################&\n"
|
out += " .---'' ''---.\n"
|
||||||
out += " ###############################################\n"
|
out += " .-' '-.\n"
|
||||||
out += " &#####################% %######################\n"
|
out += " ..-' ..--'''''''''''%######################\n"
|
||||||
out += " ################# #################\n"
|
out += " .' .--'' #################\n"
|
||||||
out += " ############### ###############\n"
|
out += " .'' ..-' ###############\n"
|
||||||
out += " ############# ##############\n"
|
out += " ' ' ##############\n"
|
||||||
out += " ############# ############&\n"
|
out += " '' .'' ############&\n"
|
||||||
out += " ############ ############\n"
|
out += " ' '' ############\n"
|
||||||
out += " ########### ########## &###########\n"
|
out += " ' ' ########## &###########\n"
|
||||||
out += " ########### ############## ###########\n"
|
out += " ' ' ############## ###########\n"
|
||||||
out += " ########### ############## ##########&\n"
|
out += " ' ' ############## ##########&\n"
|
||||||
out += " ########## ############## ##########\n"
|
out += " ' ' ############## ##########\n"
|
||||||
out += "%########## ########## ##########\n"
|
out += "' ' ########## ##########\n"
|
||||||
out += "########## ##########\n"
|
out += "' ' ##########\n"
|
||||||
out += "########## &#########\n"
|
out += "' ' &#########\n"
|
||||||
out += "########## ####### ####### ##########\n"
|
out += "' ' ####### ####### ##########\n"
|
||||||
out += "%######### &######################### ##########\n"
|
out += "' ' &######################### ##########\n"
|
||||||
out += " ########## ##############% ############## &##########\n"
|
out += " ' ' ##############% ############## &##########\n"
|
||||||
out += " ' ' &############## ############### ##########\n"
|
out += " ' ' &############## ############### ##########\n"
|
||||||
out += " ' ' ############### ##############% ###########\n"
|
out += " ' ' ############### ##############% ###########\n"
|
||||||
out += " ' '. ########## ############### ########\n"
|
out += " ' '. ########## ############### ########\n"
|
||||||
@ -899,11 +899,11 @@ func logoVersion(width int) string {
|
|||||||
out += " ''---.. ...---'' ##\n"
|
out += " ''---.. ...---'' ##\n"
|
||||||
out += " ''----------''\n"
|
out += " ''----------''\n"
|
||||||
out += " \n"
|
out += " \n"
|
||||||
out += " Quilibrium Node - v" + config.GetVersionString() + " – Sunset\n"
|
out += " Quilibrium Node - v" + config.GetVersionString() + " – Nebula\n"
|
||||||
out += " \n"
|
out += " \n"
|
||||||
out += " DB Console\n"
|
out += " DB Console\n"
|
||||||
} else {
|
} else {
|
||||||
out = "Quilibrium Node - v" + config.GetVersionString() + " – Sunset - DB Console\n"
|
out = "Quilibrium Node - v" + config.GetVersionString() + " – Nebula - DB Console\n"
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"source.quilibrium.com/quilibrium/monorepo/node/consensus"
|
"source.quilibrium.com/quilibrium/monorepo/node/consensus"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/consensus/master"
|
"source.quilibrium.com/quilibrium/monorepo/node/consensus/master"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/execution"
|
"source.quilibrium.com/quilibrium/monorepo/node/execution"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
|
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
"source.quilibrium.com/quilibrium/monorepo/node/keys"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
||||||
@ -44,7 +43,7 @@ func newNode(
|
|||||||
clockStore store.ClockStore,
|
clockStore store.ClockStore,
|
||||||
keyManager keys.KeyManager,
|
keyManager keys.KeyManager,
|
||||||
pubSub p2p.PubSub,
|
pubSub p2p.PubSub,
|
||||||
ceremonyExecutionEngine *ceremony.CeremonyExecutionEngine,
|
// execution engines wire in here
|
||||||
engine consensus.ConsensusEngine,
|
engine consensus.ConsensusEngine,
|
||||||
) (*Node, error) {
|
) (*Node, error) {
|
||||||
if engine == nil {
|
if engine == nil {
|
||||||
@ -52,9 +51,6 @@ func newNode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
execEngines := make(map[string]execution.ExecutionEngine)
|
execEngines := make(map[string]execution.ExecutionEngine)
|
||||||
if ceremonyExecutionEngine != nil {
|
|
||||||
execEngines[ceremonyExecutionEngine.GetName()] = ceremonyExecutionEngine
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Node{
|
return &Node{
|
||||||
logger,
|
logger,
|
||||||
|
@ -45,13 +45,10 @@ func NewDebugNode(configConfig *config.Config, selfTestReport *protobufs.SelfTes
|
|||||||
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
||||||
engineConfig := configConfig.Engine
|
engineConfig := configConfig.Engine
|
||||||
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
||||||
kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
|
|
||||||
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
||||||
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
||||||
pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
|
|
||||||
ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, inMemoryPeerInfoManager, pebbleKeyStore)
|
|
||||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||||
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
|
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -69,13 +66,10 @@ func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestRepo
|
|||||||
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
|
||||||
engineConfig := configConfig.Engine
|
engineConfig := configConfig.Engine
|
||||||
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
|
||||||
kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
|
|
||||||
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
|
||||||
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
|
||||||
pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
|
|
||||||
ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, inMemoryPeerInfoManager, pebbleKeyStore)
|
|
||||||
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, selfTestReport)
|
||||||
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
|
node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, masterClockConsensusEngine)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -54,16 +54,14 @@ var BootstrapPeers = []string{
|
|||||||
"/dns/quidditch.quilibrium.com/udp/8336/quic/p2p/QmbZEGuinaCndj4XLb6fteZmjmP3C1Tsgijmc5BGuUk8Ma",
|
"/dns/quidditch.quilibrium.com/udp/8336/quic/p2p/QmbZEGuinaCndj4XLb6fteZmjmP3C1Tsgijmc5BGuUk8Ma",
|
||||||
"/dns/quagmire.quilibrium.com/udp/8336/quic/p2p/QmaQ9KAaKtqXhYSQ5ARQNnn8B8474cWGvvD6PgJ4gAtMrx",
|
"/dns/quagmire.quilibrium.com/udp/8336/quic/p2p/QmaQ9KAaKtqXhYSQ5ARQNnn8B8474cWGvvD6PgJ4gAtMrx",
|
||||||
"/ip4/204.186.74.46/udp/8316/quic/p2p/QmeqBjm3iX7sdTieyto1gys5ruQrQNPKfaTGcVQQWJPYDV",
|
"/ip4/204.186.74.46/udp/8316/quic/p2p/QmeqBjm3iX7sdTieyto1gys5ruQrQNPKfaTGcVQQWJPYDV",
|
||||||
"/ip4/185.209.178.115/udp/8336/quic/p2p/Qmekz5obb9qCRP5CrZ4D8Tmabbr5mJf6mgBJHTaitrx7Fx",
|
"/ip4/103.219.170.9/udp/8336/quic/p2p/QmfEdMfmdhNoYuGVhhw5LBApHHG1rbVAHXwGWpW8s9bXeg",
|
||||||
"/ip4/186.233.187.185/udp/8336/quic/p2p/QmR7jT9NKL3yZ1iRjLxPJjAVNbk38HAfDtAKF5SCZmHdpK",
|
"/ip4/185.143.102.84/udp/8336/quic/p2p/Qmce68gLLq9eMdwCcmd1ptfoC2nVoe861LF1cjdVHC2DwK",
|
||||||
"/ip4/149.86.224.152/udp/8336/quic/p2p/QmaVaJ93mKaaqDnsYbHGEUBzEtbWhb3s4DAutt6JeJC5Wz",
|
|
||||||
"/ip4/65.109.17.13/udp/8336/quic/p2p/Qmc35n99eojSvW3PkbfBczJoSX92WmnnKh3Fg114ok3oo4",
|
"/ip4/65.109.17.13/udp/8336/quic/p2p/Qmc35n99eojSvW3PkbfBczJoSX92WmnnKh3Fg114ok3oo4",
|
||||||
"/ip4/65.108.194.84/udp/8336/quic/p2p/QmP8C7g9ZRiWzhqN2AgFu5onS6HwHzR6Vv1TCHxAhnCSnq",
|
"/ip4/65.108.194.84/udp/8336/quic/p2p/QmP8C7g9ZRiWzhqN2AgFu5onS6HwHzR6Vv1TCHxAhnCSnq",
|
||||||
"/dns/quil.dfcnodes.eu/udp/8336/quic/p2p/QmQaFmbYVrKSwoen5UQdaqyDq4QhXfSSLDVnYpYD4SF9tX",
|
"/dns/quil.dfcnodes.eu/udp/8336/quic/p2p/QmQaFmbYVrKSwoen5UQdaqyDq4QhXfSSLDVnYpYD4SF9tX",
|
||||||
"/ip4/87.98.167.207/udp/8336/quic/p2p/QmafiAXLu1JWktyfzDtD67i78GRBYCfQ4doTfq7pp7wfQ1",
|
"/ip4/87.98.167.207/udp/8336/quic/p2p/QmafiAXLu1JWktyfzDtD67i78GRBYCfQ4doTfq7pp7wfQ1",
|
||||||
"/ip4/216.244.76.122/udp/8336/quic/p2p/QmUSbMytVBUYiiGE266aZHrHrP17vLx5UJFd7o74HkDoaV",
|
"/ip4/216.244.76.122/udp/8336/quic/p2p/QmUSbMytVBUYiiGE266aZHrHrP17vLx5UJFd7o74HkDoaV",
|
||||||
"/ip4/216.244.79.194/udp/8336/quic/p2p/QmQn3bWk5aqaNSv9dwPjBg4qdeGBGNEB72tvuhgEc64Ki5",
|
"/ip4/216.244.79.194/udp/8336/quic/p2p/QmQn3bWk5aqaNSv9dwPjBg4qdeGBGNEB72tvuhgEc64Ki5",
|
||||||
"/ip4/5.199.168.233/udp/8336/quic/p2p/QmeV1f11qjPTPaPspkJfdUb7p8kJ3fgsCqqozBtaW4nGFh",
|
|
||||||
// purged peers (keep your node online to return to this list)
|
// purged peers (keep your node online to return to this list)
|
||||||
// "/ip4/204.186.74.47/udp/8317/quic/p2p/Qmd233pLUDvcDW3ama27usfbG1HxKNh1V9dmWVW1SXp1pd",
|
// "/ip4/204.186.74.47/udp/8317/quic/p2p/Qmd233pLUDvcDW3ama27usfbG1HxKNh1V9dmWVW1SXp1pd",
|
||||||
// "/ip4/186.233.184.181/udp/8336/quic/p2p/QmW6QDvKuYqJYYMP5tMZSp12X3nexywK28tZNgqtqNpEDL",
|
// "/ip4/186.233.184.181/udp/8336/quic/p2p/QmW6QDvKuYqJYYMP5tMZSp12X3nexywK28tZNgqtqNpEDL",
|
||||||
@ -117,6 +115,7 @@ func LoadConfig(configPath string, proverKey string) (*Config, error) {
|
|||||||
ListenMultiaddr: "/ip4/0.0.0.0/udp/8336/quic",
|
ListenMultiaddr: "/ip4/0.0.0.0/udp/8336/quic",
|
||||||
BootstrapPeers: BootstrapPeers,
|
BootstrapPeers: BootstrapPeers,
|
||||||
PeerPrivKey: "",
|
PeerPrivKey: "",
|
||||||
|
Network: 0,
|
||||||
},
|
},
|
||||||
Engine: &EngineConfig{
|
Engine: &EngineConfig{
|
||||||
ProvingKeyId: "default-proving-key",
|
ProvingKeyId: "default-proving-key",
|
||||||
|
@ -37,4 +37,5 @@ type P2PConfig struct {
|
|||||||
PeerPrivKey string `yaml:"peerPrivKey"`
|
PeerPrivKey string `yaml:"peerPrivKey"`
|
||||||
TraceLogFile string `yaml:"traceLogFile"`
|
TraceLogFile string `yaml:"traceLogFile"`
|
||||||
MinPeers int `yaml:"minPeers"`
|
MinPeers int `yaml:"minPeers"`
|
||||||
|
Network uint8 `yaml:"network"`
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func GetMinimumVersionCutoff() time.Time {
|
func GetMinimumVersionCutoff() time.Time {
|
||||||
return time.Date(2024, time.April, 4, 6, 20, 0, 0, time.UTC)
|
return time.Date(2024, time.May, 24, 4, 0, 0, 0, time.UTC)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMinimumVersion() []byte {
|
func GetMinimumVersion() []byte {
|
||||||
return []byte{0x01, 0x04, 0x10}
|
return []byte{0x01, 0x04, 0x12}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVersion() []byte {
|
func GetVersion() []byte {
|
||||||
return []byte{0x01, 0x04, 0x11}
|
return []byte{0x01, 0x04, 0x12}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVersionString() string {
|
func GetVersionString() string {
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/iden3/go-iden3-crypto/poseidon"
|
"github.com/iden3/go-iden3-crypto/poseidon"
|
||||||
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"github.com/mr-tron/base58"
|
"github.com/mr-tron/base58"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -124,9 +125,31 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
|
|||||||
return errors.Wrap(err, "handle self test report")
|
return errors.Wrap(err, "handle self test report")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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) {
|
||||||
|
e.logger.Warn(
|
||||||
|
"received invalid proof from peer",
|
||||||
|
zap.String("peer_id", peer.ID(peerID).String()),
|
||||||
|
)
|
||||||
|
e.pubSub.SetPeerScore(peerID, -1000)
|
||||||
|
return errors.Wrap(errors.New("invalid report"), "handle self test report")
|
||||||
|
}
|
||||||
|
|
||||||
|
e.logger.Debug(
|
||||||
|
"received proof from peer",
|
||||||
|
zap.String("peer_id", peer.ID(peerID).String()),
|
||||||
|
)
|
||||||
|
|
||||||
info := e.peerInfoManager.GetPeerInfo(peerID)
|
info := e.peerInfoManager.GetPeerInfo(peerID)
|
||||||
if info != nil {
|
if info != nil {
|
||||||
|
if (time.Now().UnixMilli() - info.LastSeen) < (270 * 1000) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
info.MasterHeadFrame = report.MasterHeadFrame
|
info.MasterHeadFrame = report.MasterHeadFrame
|
||||||
|
|
||||||
if info.Bandwidth <= 1048576 {
|
if info.Bandwidth <= 1048576 {
|
||||||
go func() {
|
go func() {
|
||||||
ctx, cancel := context.WithTimeout(context.TODO(), 5*time.Minute)
|
ctx, cancel := context.WithTimeout(context.TODO(), 5*time.Minute)
|
||||||
@ -141,6 +164,42 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proof := report.Proof
|
||||||
|
timestamp := binary.BigEndian.Uint64(proof[:8])
|
||||||
|
proof = proof[8:]
|
||||||
|
|
||||||
|
// Ignore outdated reports, give 3 minutes for propagation delay
|
||||||
|
if int64(timestamp) < (time.Now().UnixMilli() - (480 * 1000)) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
challenge := binary.BigEndian.AppendUint64([]byte{}, report.MasterHeadFrame)
|
||||||
|
challenge = append(challenge, peerID...)
|
||||||
|
|
||||||
|
proofs := make([][]byte, (len(report.Proof)-8)/516)
|
||||||
|
for i := 0; i < len(proofs); i++ {
|
||||||
|
proofs[i] = proof[i*516 : (i+1)*516]
|
||||||
|
}
|
||||||
|
if !e.frameProver.VerifyChallengeProof(
|
||||||
|
challenge,
|
||||||
|
int64(timestamp),
|
||||||
|
report.DifficultyMetric,
|
||||||
|
proofs,
|
||||||
|
) {
|
||||||
|
e.logger.Warn(
|
||||||
|
"received invalid proof from peer",
|
||||||
|
zap.String("peer_id", peer.ID(peerID).String()),
|
||||||
|
)
|
||||||
|
e.pubSub.SetPeerScore(peerID, -1000)
|
||||||
|
|
||||||
|
return errors.Wrap(
|
||||||
|
errors.New("invalid report"),
|
||||||
|
"handle self test report",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
info.LastSeen = time.Now().UnixMilli()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ func (e *MasterClockConsensusEngine) collect(
|
|||||||
|
|
||||||
for i := 0; i < len(peers); i++ {
|
for i := 0; i < len(peers); i++ {
|
||||||
peer := peers[i]
|
peer := peers[i]
|
||||||
e.logger.Debug("setting syncing target", zap.Binary("peer_id", peer))
|
e.logger.Info("setting syncing target", zap.Binary("peer_id", peer))
|
||||||
|
|
||||||
cc, err := e.pubSub.GetDirectChannel(peer, "validation")
|
cc, err := e.pubSub.GetDirectChannel(peer, "validation")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
|
"encoding/binary"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"io"
|
"io"
|
||||||
"math/big"
|
"math/big"
|
||||||
@ -226,18 +227,42 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
|
|||||||
time.Sleep(30 * time.Second)
|
time.Sleep(30 * time.Second)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
e.logger.Info("broadcasting self-test info")
|
|
||||||
head, err := e.masterTimeReel.Head()
|
head, err := e.masterTimeReel.Head()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
e.report.MasterHeadFrame = head.FrameNumber
|
e.report.MasterHeadFrame = head.FrameNumber
|
||||||
|
parallelism := e.report.Cores - 1
|
||||||
|
skew := (e.report.DifficultyMetric * 12) / 10
|
||||||
|
challenge := binary.BigEndian.AppendUint64(
|
||||||
|
[]byte{},
|
||||||
|
e.report.MasterHeadFrame,
|
||||||
|
)
|
||||||
|
challenge = append(challenge, e.pubSub.GetPeerID()...)
|
||||||
|
|
||||||
|
ts, proofs, err := e.frameProver.CalculateChallengeProof(
|
||||||
|
challenge,
|
||||||
|
parallelism,
|
||||||
|
skew,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
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 {
|
if err := e.publishMessage(e.filter, e.report); err != nil {
|
||||||
e.logger.Debug("error publishing message", zap.Error(err))
|
e.logger.Debug("error publishing message", zap.Error(err))
|
||||||
}
|
}
|
||||||
time.Sleep(5 * time.Minute)
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -460,6 +485,7 @@ func (
|
|||||||
Memory: new(big.Int).SetBytes(peerManifest.Memory).Bytes(),
|
Memory: new(big.Int).SetBytes(peerManifest.Memory).Bytes(),
|
||||||
Storage: new(big.Int).SetBytes(peerManifest.Storage).Bytes(),
|
Storage: new(big.Int).SetBytes(peerManifest.Storage).Bytes(),
|
||||||
MasterHeadFrame: peerManifest.MasterHeadFrame,
|
MasterHeadFrame: peerManifest.MasterHeadFrame,
|
||||||
|
LastSeen: peerManifest.LastSeen,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, capability := range peerManifest.Capabilities {
|
for _, capability := range peerManifest.Capabilities {
|
||||||
@ -563,6 +589,7 @@ func (e *MasterClockConsensusEngine) addPeerManifestReport(
|
|||||||
Storage: report.Storage,
|
Storage: report.Storage,
|
||||||
Capabilities: []p2p.Capability{},
|
Capabilities: []p2p.Capability{},
|
||||||
MasterHeadFrame: report.MasterHeadFrame,
|
MasterHeadFrame: report.MasterHeadFrame,
|
||||||
|
LastSeen: time.Now().UnixMilli(),
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, capability := range manifest.Capabilities {
|
for _, capability := range manifest.Capabilities {
|
||||||
|
@ -51,4 +51,15 @@ type FrameProver interface {
|
|||||||
proof []byte,
|
proof []byte,
|
||||||
deepVerifier *protobufs.ClockFrame,
|
deepVerifier *protobufs.ClockFrame,
|
||||||
) bool
|
) bool
|
||||||
|
CalculateChallengeProof(
|
||||||
|
challenge []byte,
|
||||||
|
parallelism uint32,
|
||||||
|
skew int64,
|
||||||
|
) (int64, [][]byte, error)
|
||||||
|
VerifyChallengeProof(
|
||||||
|
challenge []byte,
|
||||||
|
timestamp int64,
|
||||||
|
assertedDifficulty int64,
|
||||||
|
proof [][]byte,
|
||||||
|
) bool
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package kzg
|
package kzg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
_ "embed"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -292,13 +293,11 @@ func TestInit(file string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:embed ceremony.json
|
||||||
|
var csBytes []byte
|
||||||
|
|
||||||
func Init() {
|
func Init() {
|
||||||
// start with phase 1 ceremony:
|
// start with phase 1 ceremony:
|
||||||
csBytes, err := os.ReadFile("./ceremony.json")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
bls48581.Init()
|
bls48581.Init()
|
||||||
|
|
||||||
cs := &CeremonyState{}
|
cs := &CeremonyState{}
|
||||||
|
@ -17,7 +17,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
csBytes, err := os.ReadFile("../../ceremony.json")
|
csBytes, err := os.ReadFile("./ceremony.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestKZGVerifyFrame(t *testing.T) {
|
func TestKZGVerifyFrame(t *testing.T) {
|
||||||
kzg.TestInit("../ceremony.json")
|
kzg.TestInit("./kzg/ceremony.json")
|
||||||
data := make([]byte, 1024)
|
data := make([]byte, 1024)
|
||||||
rand.Read(data)
|
rand.Read(data)
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/cloudflare/circl/sign/ed448"
|
"github.com/cloudflare/circl/sign/ed448"
|
||||||
"github.com/iden3/go-iden3-crypto/poseidon"
|
"github.com/iden3/go-iden3-crypto/poseidon"
|
||||||
@ -593,3 +595,75 @@ func (w *WesolowskiFrameProver) VerifyWeakRecursiveProof(
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *WesolowskiFrameProver) CalculateChallengeProof(
|
||||||
|
challenge []byte,
|
||||||
|
parallelism uint32,
|
||||||
|
skew int64,
|
||||||
|
) (int64, [][]byte, error) {
|
||||||
|
now := time.Now().UnixMilli()
|
||||||
|
input := binary.BigEndian.AppendUint64([]byte{}, uint64(now))
|
||||||
|
input = append(input, challenge...)
|
||||||
|
outputs := make([][]byte, parallelism)
|
||||||
|
|
||||||
|
wg := sync.WaitGroup{}
|
||||||
|
wg.Add(int(parallelism))
|
||||||
|
|
||||||
|
for i := uint32(0); i < parallelism; i++ {
|
||||||
|
i := i
|
||||||
|
go func() {
|
||||||
|
instanceInput := binary.BigEndian.AppendUint32([]byte{}, i)
|
||||||
|
instanceInput = append(instanceInput, input...)
|
||||||
|
b := sha3.Sum256(input)
|
||||||
|
|
||||||
|
// 4.5 minutes = 270 seconds, one increment should be ten seconds
|
||||||
|
proofDuration := 270 * 1000
|
||||||
|
calibratedDifficulty := (int64(proofDuration) / skew) * 10000
|
||||||
|
|
||||||
|
v := vdf.New(uint32(calibratedDifficulty), b)
|
||||||
|
|
||||||
|
v.Execute()
|
||||||
|
o := v.GetOutput()
|
||||||
|
|
||||||
|
outputs[i] = make([]byte, 516)
|
||||||
|
copy(outputs[i][:], o[:])
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
return now, outputs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *WesolowskiFrameProver) VerifyChallengeProof(
|
||||||
|
challenge []byte,
|
||||||
|
timestamp int64,
|
||||||
|
assertedDifficulty int64,
|
||||||
|
proof [][]byte,
|
||||||
|
) bool {
|
||||||
|
input := binary.BigEndian.AppendUint64([]byte{}, uint64(timestamp))
|
||||||
|
input = append(input, challenge...)
|
||||||
|
|
||||||
|
for i := uint32(0); i < uint32(len(proof)); i++ {
|
||||||
|
if len(proof[i]) != 516 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
instanceInput := binary.BigEndian.AppendUint32([]byte{}, i)
|
||||||
|
instanceInput = append(instanceInput, input...)
|
||||||
|
b := sha3.Sum256(input)
|
||||||
|
|
||||||
|
// 4.5 minutes = 270 seconds, one increment should be ten seconds
|
||||||
|
proofDuration := 270 * 1000
|
||||||
|
skew := (assertedDifficulty * 12) / 10
|
||||||
|
calibratedDifficulty := (int64(proofDuration) / skew) * 10000
|
||||||
|
|
||||||
|
v := vdf.New(uint32(calibratedDifficulty), b)
|
||||||
|
check := v.Verify([516]byte(proof[i]))
|
||||||
|
if !check {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
@ -26,3 +26,11 @@ func TestMasterProve(t *testing.T) {
|
|||||||
err = w.VerifyMasterClockFrame(next)
|
err = w.VerifyMasterClockFrame(next)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChallengeProof(t *testing.T) {
|
||||||
|
l, _ := zap.NewProduction()
|
||||||
|
w := crypto.NewWesolowskiFrameProver(l)
|
||||||
|
now, proofs, err := w.CalculateChallengeProof([]byte{0x01, 0x02, 0x03}, 3, 120000)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, w.VerifyChallengeProof([]byte{0x01, 0x02, 0x03}, now, 100000, proofs))
|
||||||
|
}
|
||||||
|
@ -4,12 +4,12 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto"
|
"crypto"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
|
_ "embed"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -206,6 +206,11 @@ func (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2024-01-03: 1.2.0
|
||||||
|
//
|
||||||
|
//go:embed retroactive_peers.json
|
||||||
|
var retroactivePeersJsonBinary []byte
|
||||||
|
|
||||||
// Creates a genesis state for the intrinsic
|
// Creates a genesis state for the intrinsic
|
||||||
func CreateGenesisState(
|
func CreateGenesisState(
|
||||||
logger *zap.Logger,
|
logger *zap.Logger,
|
||||||
@ -324,12 +329,6 @@ func CreateGenesisState(
|
|||||||
rewardTrie.Add(addrBytes, 0, 50)
|
rewardTrie.Add(addrBytes, 0, 50)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2024-01-03: 1.2.0
|
|
||||||
d, err := os.ReadFile("./retroactive_peers.json")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
type peerData struct {
|
type peerData struct {
|
||||||
PeerId string `json:"peer_id"`
|
PeerId string `json:"peer_id"`
|
||||||
TokenBalance uint64 `json:"token_balance"`
|
TokenBalance uint64 `json:"token_balance"`
|
||||||
@ -339,7 +338,7 @@ func CreateGenesisState(
|
|||||||
}
|
}
|
||||||
|
|
||||||
retroEntries := &rewards{}
|
retroEntries := &rewards{}
|
||||||
err = json.Unmarshal(d, retroEntries)
|
err = json.Unmarshal(retroactivePeersJsonBinary, retroEntries)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
162
node/main.go
162
node/main.go
@ -3,6 +3,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
@ -16,10 +17,12 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"runtime/pprof"
|
"runtime/pprof"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
"golang.org/x/crypto/sha3"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
"source.quilibrium.com/quilibrium/monorepo/node/p2p"
|
||||||
@ -27,6 +30,7 @@ import (
|
|||||||
"source.quilibrium.com/quilibrium/monorepo/node/store"
|
"source.quilibrium.com/quilibrium/monorepo/node/store"
|
||||||
"source.quilibrium.com/quilibrium/monorepo/node/utils"
|
"source.quilibrium.com/quilibrium/monorepo/node/utils"
|
||||||
|
|
||||||
|
"github.com/cloudflare/circl/sign/ed448"
|
||||||
"github.com/libp2p/go-libp2p/core/crypto"
|
"github.com/libp2p/go-libp2p/core/crypto"
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"github.com/pbnjay/memory"
|
"github.com/pbnjay/memory"
|
||||||
@ -89,11 +93,109 @@ var (
|
|||||||
false,
|
false,
|
||||||
"sets a node to run strictly as a dht bootstrap peer (not full node)",
|
"sets a node to run strictly as a dht bootstrap peer (not full node)",
|
||||||
)
|
)
|
||||||
|
network = flag.Uint(
|
||||||
|
"network",
|
||||||
|
0,
|
||||||
|
"sets the active network for the node (mainnet = 0, primary testnet = 1)",
|
||||||
)
|
)
|
||||||
|
signatureCheck = flag.Bool(
|
||||||
|
"signature-check",
|
||||||
|
true,
|
||||||
|
"enables or disables signature validation (default true)",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
var signatories = []string{
|
||||||
|
"b1214da7f355f5a9edb7bcc23d403bdf789f070cca10db2b4cadc22f2d837afb650944853e35d5f42ef3c4105b802b144b4077d5d3253e4100",
|
||||||
|
"de4cfe7083104bfe32f0d4082fa0200464d8b10804a811653eedda376efcad64dd222f0f0ceb0b8ae58abe830d7a7e3f3b2d79d691318daa00",
|
||||||
|
"540237a35e124882d6b64e7bb5718273fa338e553f772b77fe90570e45303762b34131bdcb6c0b9f2cf9e393d9c7e0f546eeab0bcbbd881680",
|
||||||
|
"fbe4166e37f93f90d2ebf06305315ae11b37e501d09596f8bde11ba9d343034fbca80f252205aa2f582a512a72ad293df371baa582da072900",
|
||||||
|
"4160572e493e1bf15c44e055b11bf75230c76c7d2c67b48066770ab03dfd5ed34c97b9a431ec18578c83a0df9250b8362c38068650e8b01400",
|
||||||
|
"45170b626884b85d61ae109f2aa9b0e1ecc18b181508431ea6308f3869f2adae49da9799a0a594eaa4ef3ad492518fb1729decd44169d40d00",
|
||||||
|
"92cd8ee5362f3ae274a75ab9471024dbc144bff441ed8af7d19750ac512ff51e40e7f7b01e4f96b6345dd58878565948c3eb52c53f250b5080",
|
||||||
|
"001a4cbfce5d9aeb7e20665b0d236721b228a32f0baee62ffa77f45b82ecaf577e8a38b7ef91fcf7d2d2d2b504f085461398d30b24abb1d700",
|
||||||
|
"65b835071731c6e785bb2d107c7d85d8a537d79c435c3f42bb2f87027f93f858d7b37c598cef267a5db46e345f7a6f81969b465686657d1e00",
|
||||||
|
"4507626f7164e7d8c304c07ff8d2e23c113fe108b221d2e60672f4d07750345815e2b4b3cc3df4d3466bf2f669c35c3172e06511270612ab00",
|
||||||
|
"4fb2537345e46be3d5f96340c1441007501702dd5bfaf6dbf6943bbefceca8fb2b94ec0a8a1a2f49850fbe1d10244889a4f40abfa9e0c9e000",
|
||||||
|
"57be2861faf0fffcbfd122c85c77010dce8f213030905781b85b6f345d912c7b5ace17797d9810899dfb8d13e7c8369595740725ab3dd5bd00",
|
||||||
|
"61628beef8f6964466fd078d6a2b90a397ab0777a14b9728227fd19f36752f9451b1a8d780740a0b9a8ce3df5f89ca7b9ff17de9274a270980",
|
||||||
|
"5547afc71b02821e2f5bfdd30fbe1374c3853898deff20a1b5cc729b8e81670fbbb9d1e917f85d153ea4b26bbf6f9c546dc1b64b9916608d80",
|
||||||
|
"81d63a45f068629f568de812f18be5807bfe828a830097f09cf02330d6acd35e3607401df3fda08b03b68ea6e68afd506b23506b11e87a0f80",
|
||||||
|
"6e2872f73c4868c4286bef7bfe2f5479a41c42f4e07505efa4883c7950c740252e0eea78eef10c584b19b1dcda01f7767d3135d07c33244100",
|
||||||
|
"a114b061f8d35e3f3497c8c43d83ba6b4af67aa7b39b743b1b0a35f2d66110b5051dd3d86f69b57122a35b64e624b8180bee63b6152fce4280",
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
if *signatureCheck {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
fmt.Println("Signature check not available for windows yet, skipping...")
|
||||||
|
} else {
|
||||||
|
ex, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := os.ReadFile(ex)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(
|
||||||
|
"Error encountered during signature check – are you running this " +
|
||||||
|
"from source? (use --signature-check=false)",
|
||||||
|
)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum := sha3.Sum256(b)
|
||||||
|
digest, err := os.ReadFile(ex + ".dgst")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Digest file not found")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.Split(string(digest), " ")
|
||||||
|
if len(parts) != 2 {
|
||||||
|
fmt.Println("Invalid digest file format")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
digestBytes, err := hex.DecodeString(parts[1][:64])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Invalid digest file format")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !bytes.Equal(checksum[:], digestBytes) {
|
||||||
|
fmt.Println("Invalid digest for node")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
count := 0
|
||||||
|
|
||||||
|
for i := 1; i <= len(signatories); i++ {
|
||||||
|
signatureFile := fmt.Sprintf(ex+".dgst.sig.%d", i)
|
||||||
|
sig, err := os.ReadFile(signatureFile)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
pubkey, _ := hex.DecodeString(signatories[i-1])
|
||||||
|
if !ed448.Verify(pubkey, digest, sig, "") {
|
||||||
|
fmt.Printf("Failed signature check for signatory #%d\n", i)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
if count < len(signatories)/2 {
|
||||||
|
fmt.Printf("Quorum on signatures not met")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Signature check passed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if *memprofile != "" {
|
if *memprofile != "" {
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
@ -173,6 +275,26 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if *network != 0 {
|
||||||
|
if nodeConfig.P2P.BootstrapPeers[0] == config.BootstrapPeers[0] {
|
||||||
|
fmt.Println(
|
||||||
|
"Node has specified to run outside of mainnet but is still " +
|
||||||
|
"using default bootstrap list. This will fail. Exiting.",
|
||||||
|
)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeConfig.Engine.GenesisSeed = fmt.Sprintf(
|
||||||
|
"%02x%s",
|
||||||
|
byte(*network),
|
||||||
|
nodeConfig.Engine.GenesisSeed,
|
||||||
|
)
|
||||||
|
nodeConfig.P2P.Network = uint8(*network)
|
||||||
|
fmt.Println(
|
||||||
|
"Node is operating outside of mainnet – be sure you intended to do this.",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
clearIfTestData(*configDirectory, nodeConfig)
|
clearIfTestData(*configDirectory, nodeConfig)
|
||||||
|
|
||||||
if *dbConsole {
|
if *dbConsole {
|
||||||
@ -185,13 +307,6 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !*dhtOnly {
|
|
||||||
fmt.Println("Loading ceremony state and starting node...")
|
|
||||||
kzg.Init()
|
|
||||||
}
|
|
||||||
|
|
||||||
report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
|
|
||||||
|
|
||||||
if *dhtOnly {
|
if *dhtOnly {
|
||||||
dht, err := app.NewDHTNode(nodeConfig)
|
dht, err := app.NewDHTNode(nodeConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -207,6 +322,11 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("Loading ceremony state and starting node...")
|
||||||
|
kzg.Init()
|
||||||
|
|
||||||
|
report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
|
||||||
|
|
||||||
var node *app.Node
|
var node *app.Node
|
||||||
if *debug {
|
if *debug {
|
||||||
node, err = app.NewDebugNode(nodeConfig, report)
|
node, err = app.NewDebugNode(nodeConfig, report)
|
||||||
@ -579,19 +699,19 @@ func printNodeInfo(cfg *config.Config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printLogo() {
|
func printLogo() {
|
||||||
fmt.Println(" %#########")
|
fmt.Println(" ..-------..")
|
||||||
fmt.Println(" #############################")
|
fmt.Println(" ..---'''' ''''---..")
|
||||||
fmt.Println(" ########################################&")
|
fmt.Println(" .---'' ''---.")
|
||||||
fmt.Println(" ###############################################")
|
fmt.Println(" .-' '-.")
|
||||||
fmt.Println(" &#####################% %######################")
|
fmt.Println(" ..-' ..--'''''''''''%######################")
|
||||||
fmt.Println(" ################# #################")
|
fmt.Println(" .' .--'' #################")
|
||||||
fmt.Println(" ############### ###############")
|
fmt.Println(" .'' ..-' ###############")
|
||||||
fmt.Println(" ############# ##############")
|
fmt.Println(" ' ' ##############")
|
||||||
fmt.Println(" ############# ############&")
|
fmt.Println(" '' .'' ############&")
|
||||||
fmt.Println(" ############ ############")
|
fmt.Println(" ' '' ############")
|
||||||
fmt.Println(" ########### ########## &###########")
|
fmt.Println(" ' ' ########## &###########")
|
||||||
fmt.Println(" ########### ############## ###########")
|
fmt.Println(" ' ' ############## ###########")
|
||||||
fmt.Println(" ########### ############## ##########&")
|
fmt.Println(" ' ' ############## ##########&")
|
||||||
fmt.Println(" ' ' ############## ##########")
|
fmt.Println(" ' ' ############## ##########")
|
||||||
fmt.Println("' ' ########## ##########")
|
fmt.Println("' ' ########## ##########")
|
||||||
fmt.Println("' ' ##########")
|
fmt.Println("' ' ##########")
|
||||||
@ -616,5 +736,5 @@ func printLogo() {
|
|||||||
|
|
||||||
func printVersion() {
|
func printVersion() {
|
||||||
fmt.Println(" ")
|
fmt.Println(" ")
|
||||||
fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + " – Aurora")
|
fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + " – Nebula")
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,7 @@ type BlossomSub struct {
|
|||||||
peerScore map[string]int64
|
peerScore map[string]int64
|
||||||
peerScoreMx sync.Mutex
|
peerScoreMx sync.Mutex
|
||||||
isBootstrapPeer bool
|
isBootstrapPeer bool
|
||||||
|
network uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ PubSub = (*BlossomSub)(nil)
|
var _ PubSub = (*BlossomSub)(nil)
|
||||||
@ -60,7 +61,7 @@ var BITMASK_ALL = []byte{
|
|||||||
// While we iterate through these next phases, we're going to aggressively
|
// While we iterate through these next phases, we're going to aggressively
|
||||||
// enforce keeping updated. This will be achieved through announce strings
|
// enforce keeping updated. This will be achieved through announce strings
|
||||||
// that will vary with each update
|
// that will vary with each update
|
||||||
var ANNOUNCE = "quilibrium-1.4.16-sunset-noctilucent"
|
var ANNOUNCE_PREFIX = "quilibrium-1.4.18-nebula-"
|
||||||
|
|
||||||
func getPeerID(p2pConfig *config.P2PConfig) peer.ID {
|
func getPeerID(p2pConfig *config.P2PConfig) peer.ID {
|
||||||
peerPrivKey, err := hex.DecodeString(p2pConfig.PeerPrivKey)
|
peerPrivKey, err := hex.DecodeString(p2pConfig.PeerPrivKey)
|
||||||
@ -129,6 +130,7 @@ func NewBlossomSub(
|
|||||||
signKey: privKey,
|
signKey: privKey,
|
||||||
peerScore: make(map[string]int64),
|
peerScore: make(map[string]int64),
|
||||||
isBootstrapPeer: isBootstrapPeer,
|
isBootstrapPeer: isBootstrapPeer,
|
||||||
|
network: p2pConfig.Network,
|
||||||
}
|
}
|
||||||
|
|
||||||
h, err := libp2p.New(opts...)
|
h, err := libp2p.New(opts...)
|
||||||
@ -140,7 +142,7 @@ func NewBlossomSub(
|
|||||||
|
|
||||||
kademliaDHT := initDHT(ctx, p2pConfig, logger, h, isBootstrapPeer)
|
kademliaDHT := initDHT(ctx, p2pConfig, logger, h, isBootstrapPeer)
|
||||||
routingDiscovery := routing.NewRoutingDiscovery(kademliaDHT)
|
routingDiscovery := routing.NewRoutingDiscovery(kademliaDHT)
|
||||||
util.Advertise(ctx, routingDiscovery, ANNOUNCE)
|
util.Advertise(ctx, routingDiscovery, getNetworkNamespace(p2pConfig.Network))
|
||||||
|
|
||||||
discoverPeers(p2pConfig, ctx, logger, h, routingDiscovery)
|
discoverPeers(p2pConfig, ctx, logger, h, routingDiscovery)
|
||||||
|
|
||||||
@ -212,7 +214,8 @@ func NewBlossomSub(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *BlossomSub) PublishToBitmask(bitmask []byte, data []byte) error {
|
func (b *BlossomSub) PublishToBitmask(bitmask []byte, data []byte) error {
|
||||||
bm, ok := b.bitmaskMap[string(bitmask)]
|
networkBitmask := append([]byte{b.network}, bitmask...)
|
||||||
|
bm, ok := b.bitmaskMap[string(networkBitmask)]
|
||||||
if !ok {
|
if !ok {
|
||||||
b.logger.Error(
|
b.logger.Error(
|
||||||
"error while publishing to bitmask",
|
"error while publishing to bitmask",
|
||||||
@ -237,19 +240,20 @@ func (b *BlossomSub) Subscribe(
|
|||||||
raw bool,
|
raw bool,
|
||||||
) {
|
) {
|
||||||
eval := func(bitmask []byte) error {
|
eval := func(bitmask []byte) error {
|
||||||
_, ok := b.bitmaskMap[string(bitmask)]
|
networkBitmask := append([]byte{b.network}, bitmask...)
|
||||||
|
_, ok := b.bitmaskMap[string(networkBitmask)]
|
||||||
if ok {
|
if ok {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
b.logger.Info("joining broadcast")
|
b.logger.Info("joining broadcast")
|
||||||
bm, err := b.ps.Join(bitmask)
|
bm, err := b.ps.Join(networkBitmask)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.logger.Error("join failed", zap.Error(err))
|
b.logger.Error("join failed", zap.Error(err))
|
||||||
return errors.Wrap(err, "subscribe")
|
return errors.Wrap(err, "subscribe")
|
||||||
}
|
}
|
||||||
|
|
||||||
b.bitmaskMap[string(bitmask)] = bm
|
b.bitmaskMap[string(networkBitmask)] = bm
|
||||||
|
|
||||||
b.logger.Info("subscribe to bitmask", zap.Binary("bitmask", bitmask))
|
b.logger.Info("subscribe to bitmask", zap.Binary("bitmask", bitmask))
|
||||||
sub, err := bm.Subscribe()
|
sub, err := bm.Subscribe()
|
||||||
@ -293,7 +297,8 @@ func (b *BlossomSub) Subscribe(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *BlossomSub) Unsubscribe(bitmask []byte, raw bool) {
|
func (b *BlossomSub) Unsubscribe(bitmask []byte, raw bool) {
|
||||||
bm, ok := b.bitmaskMap[string(bitmask)]
|
networkBitmask := append([]byte{b.network}, bitmask...)
|
||||||
|
bm, ok := b.bitmaskMap[string(networkBitmask)]
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -306,7 +311,8 @@ func (b *BlossomSub) GetPeerID() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *BlossomSub) GetRandomPeer(bitmask []byte) ([]byte, error) {
|
func (b *BlossomSub) GetRandomPeer(bitmask []byte) ([]byte, error) {
|
||||||
peers := b.ps.ListPeers(bitmask)
|
networkBitmask := append([]byte{b.network}, bitmask...)
|
||||||
|
peers := b.ps.ListPeers(networkBitmask)
|
||||||
if len(peers) == 0 {
|
if len(peers) == 0 {
|
||||||
return nil, errors.Wrap(
|
return nil, errors.Wrap(
|
||||||
ErrNoPeersAvailable,
|
ErrNoPeersAvailable,
|
||||||
@ -351,6 +357,8 @@ func initDHT(
|
|||||||
)
|
)
|
||||||
|
|
||||||
defaultBootstrapPeers := append([]string{}, p2pConfig.BootstrapPeers...)
|
defaultBootstrapPeers := append([]string{}, p2pConfig.BootstrapPeers...)
|
||||||
|
|
||||||
|
if p2pConfig.Network == 0 {
|
||||||
for _, peer := range config.BootstrapPeers {
|
for _, peer := range config.BootstrapPeers {
|
||||||
found := false
|
found := false
|
||||||
for _, existing := range defaultBootstrapPeers {
|
for _, existing := range defaultBootstrapPeers {
|
||||||
@ -363,6 +371,7 @@ func initDHT(
|
|||||||
defaultBootstrapPeers = append(defaultBootstrapPeers, peer)
|
defaultBootstrapPeers = append(defaultBootstrapPeers, peer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, peerAddr := range defaultBootstrapPeers {
|
for _, peerAddr := range defaultBootstrapPeers {
|
||||||
peerinfo, err := peer.AddrInfoFromString(peerAddr)
|
peerinfo, err := peer.AddrInfoFromString(peerAddr)
|
||||||
@ -379,7 +388,7 @@ func initDHT(
|
|||||||
if err := h.Connect(ctx, *peerinfo); err != nil {
|
if err := h.Connect(ctx, *peerinfo); err != nil {
|
||||||
logger.Debug("error while connecting to dht peer", zap.Error(err))
|
logger.Debug("error while connecting to dht peer", zap.Error(err))
|
||||||
} else {
|
} else {
|
||||||
logger.Info(
|
logger.Debug(
|
||||||
"connected to peer",
|
"connected to peer",
|
||||||
zap.String("peer_id", peerinfo.ID.String()),
|
zap.String("peer_id", peerinfo.ID.String()),
|
||||||
)
|
)
|
||||||
@ -417,11 +426,11 @@ func (b *BlossomSub) GetBitmaskPeers() map[string][]string {
|
|||||||
peers := map[string][]string{}
|
peers := map[string][]string{}
|
||||||
|
|
||||||
for _, k := range b.bitmaskMap {
|
for _, k := range b.bitmaskMap {
|
||||||
peers[fmt.Sprintf("%+x", k.Bitmask())] = []string{}
|
peers[fmt.Sprintf("%+x", k.Bitmask()[1:])] = []string{}
|
||||||
|
|
||||||
for _, p := range k.ListPeers() {
|
for _, p := range k.ListPeers() {
|
||||||
peers[fmt.Sprintf("%+x", k.Bitmask())] = append(
|
peers[fmt.Sprintf("%+x", k.Bitmask()[1:])] = append(
|
||||||
peers[fmt.Sprintf("%+x", k.Bitmask())],
|
peers[fmt.Sprintf("%+x", k.Bitmask()[1:])],
|
||||||
p.String(),
|
p.String(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -502,6 +511,8 @@ func (b *BlossomSub) GetDirectChannel(key []byte, purpose string) (
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// Open question: should we prefix this so a node can run both in mainnet and
|
||||||
|
// testnet? Feels like a bad idea and would be preferable to discourage.
|
||||||
dialCtx, err = grpc.DialContext(
|
dialCtx, err = grpc.DialContext(
|
||||||
b.ctx,
|
b.ctx,
|
||||||
base58.Encode(key),
|
base58.Encode(key),
|
||||||
@ -556,7 +567,10 @@ func discoverPeers(
|
|||||||
logger.Info("initiating peer discovery")
|
logger.Info("initiating peer discovery")
|
||||||
|
|
||||||
discover := func() {
|
discover := func() {
|
||||||
peerChan, err := routingDiscovery.FindPeers(ctx, ANNOUNCE)
|
peerChan, err := routingDiscovery.FindPeers(
|
||||||
|
ctx,
|
||||||
|
getNetworkNamespace(p2pConfig.Network),
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("could not find peers", zap.Error(err))
|
logger.Error("could not find peers", zap.Error(err))
|
||||||
}
|
}
|
||||||
@ -717,3 +731,20 @@ func mergeDefaults(p2pConfig *config.P2PConfig) blossomsub.BlossomSubParams {
|
|||||||
SlowHeartbeatWarning: 0.1,
|
SlowHeartbeatWarning: 0.1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getNetworkNamespace(network uint8) string {
|
||||||
|
var network_name string
|
||||||
|
switch network {
|
||||||
|
case 0:
|
||||||
|
network_name = "mainnet"
|
||||||
|
break
|
||||||
|
case 1:
|
||||||
|
network_name = "testnet-primary"
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
network_name = fmt.Sprintf("network-%d", network)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return ANNOUNCE_PREFIX + network_name
|
||||||
|
}
|
||||||
|
@ -39,6 +39,7 @@ type PeerManifest struct {
|
|||||||
Capabilities []Capability
|
Capabilities []Capability
|
||||||
MasterHeadFrame uint64
|
MasterHeadFrame uint64
|
||||||
Bandwidth uint64
|
Bandwidth uint64
|
||||||
|
LastSeen int64
|
||||||
}
|
}
|
||||||
|
|
||||||
type InMemoryPeerInfoManager struct {
|
type InMemoryPeerInfoManager struct {
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
start_process() {
|
|
||||||
GOEXPERIMENT=arenas go run ./... &
|
|
||||||
main_process_id=$!
|
|
||||||
local child_process_pid=$(pgrep -P $main_process_id)
|
|
||||||
echo "process started with PID $main_process_id and child PID $child_process_pid"
|
|
||||||
}
|
|
||||||
|
|
||||||
is_process_running() {
|
|
||||||
ps -p $main_process_id > /dev/null 2>&1
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
kill_process() {
|
|
||||||
local process_count=$(ps -ef | grep "exe/node" | grep -v grep | wc -l)
|
|
||||||
local process_pids=$(ps -ef | grep "exe/node" | grep -v grep | awk '{print $2}' | xargs)
|
|
||||||
|
|
||||||
if [ $process_count -gt 0 ]; then
|
|
||||||
echo "killing processes $process_pids"
|
|
||||||
kill $process_pids
|
|
||||||
|
|
||||||
local child_process_count=$(pgrep -P $process_pids | wc -l)
|
|
||||||
local child_process_pids=$(pgrep -P $process_pids | xargs)
|
|
||||||
if [ $child_process_count -gt 0 ]; then
|
|
||||||
echo "killing child processes $child_process_pids"
|
|
||||||
kill $child_process_pids
|
|
||||||
else
|
|
||||||
echo "no child processes running"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "no processes running"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
kill_process
|
|
||||||
|
|
||||||
start_process
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
if ! is_process_running; then
|
|
||||||
echo "process crashed or stopped. restarting..."
|
|
||||||
start_process
|
|
||||||
fi
|
|
||||||
|
|
||||||
git fetch
|
|
||||||
|
|
||||||
local_head=$(git rev-parse HEAD)
|
|
||||||
remote_head=$(git rev-parse @{u})
|
|
||||||
|
|
||||||
if [ "$local_head" != "$remote_head" ]; then
|
|
||||||
kill_process
|
|
||||||
|
|
||||||
git pull
|
|
||||||
|
|
||||||
start_process
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 60
|
|
||||||
done
|
|
@ -1094,6 +1094,8 @@ type SelfTestReport struct {
|
|||||||
Capabilities []*Capability `protobuf:"bytes,14,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
|
Capabilities []*Capability `protobuf:"bytes,14,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
|
||||||
// The highest master frame the node has
|
// The highest master frame the node has
|
||||||
MasterHeadFrame uint64 `protobuf:"varint,15,opt,name=master_head_frame,json=masterHeadFrame,proto3" json:"master_head_frame,omitempty"`
|
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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SelfTestReport) Reset() {
|
func (x *SelfTestReport) Reset() {
|
||||||
@ -1233,6 +1235,13 @@ func (x *SelfTestReport) GetMasterHeadFrame() uint64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *SelfTestReport) GetProof() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.Proof
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type ValidationMessage struct {
|
type ValidationMessage struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -1456,6 +1465,8 @@ type PeerManifest struct {
|
|||||||
Capabilities []*Capability `protobuf:"bytes,15,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
|
Capabilities []*Capability `protobuf:"bytes,15,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
|
||||||
// The highest master frame the node has
|
// The highest master frame the node has
|
||||||
MasterHeadFrame uint64 `protobuf:"varint,16,opt,name=master_head_frame,json=masterHeadFrame,proto3" json:"master_head_frame,omitempty"`
|
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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *PeerManifest) Reset() {
|
func (x *PeerManifest) Reset() {
|
||||||
@ -1602,6 +1613,13 @@ func (x *PeerManifest) GetMasterHeadFrame() uint64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *PeerManifest) GetLastSeen() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.LastSeen
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type PeerManifestsResponse struct {
|
type PeerManifestsResponse struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -1780,8 +1798,8 @@ var file_node_proto_rawDesc = []byte{
|
|||||||
0x63, 0x6f, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2f, 0x0a,
|
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,
|
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,
|
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, 0xfa,
|
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x90,
|
||||||
0x04, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72,
|
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,
|
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,
|
0x01, 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,
|
0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x5f,
|
||||||
@ -1820,151 +1838,154 @@ var file_node_proto_rawDesc = []byte{
|
|||||||
0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12,
|
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,
|
0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x66,
|
||||||
0x72, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x73, 0x74,
|
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, 0x22, 0x33, 0x0a, 0x11, 0x56,
|
0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70,
|
||||||
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
0x72, 0x6f, 0x6f, 0x66, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f,
|
||||||
0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
|
0x66, 0x22, 0x33, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
|
||||||
0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
|
||||||
0x22, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69,
|
||||||
0x53, 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
|
||||||
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f,
|
||||||
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e,
|
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 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,
|
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,
|
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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x66, 0x72, 0x61,
|
||||||
0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x0a, 0x17,
|
0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x0c, 0x53, 0x79,
|
||||||
0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73,
|
0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x66, 0x72,
|
||||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x91, 0x05, 0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72,
|
0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20,
|
||||||
0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72,
|
0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
||||||
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49,
|
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43,
|
||||||
0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18,
|
0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
|
0x73, 0x65, 0x52, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x5f,
|
0x73, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e,
|
||||||
0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x69,
|
0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xae, 0x05,
|
||||||
0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x28,
|
0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x17,
|
||||||
0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72,
|
0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||||
0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
|
0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69,
|
||||||
0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d,
|
0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66,
|
||||||
0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x05, 0x20,
|
0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69,
|
||||||
0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x32, 0x38, 0x4d, 0x65,
|
0x63, 0x75, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01,
|
||||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31,
|
0x28, 0x03, 0x52, 0x10, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65,
|
||||||
0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
|
0x74, 0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31,
|
||||||
0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30, 0x32, 0x34, 0x4d, 0x65, 0x74, 0x72,
|
0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
|
||||||
0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x36, 0x35, 0x35,
|
0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a,
|
||||||
0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74,
|
||||||
0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74, 0x72,
|
0x72, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
|
||||||
0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x36, 0x5f, 0x6d,
|
0x74, 0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f,
|
||||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f,
|
0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||||
0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72,
|
0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30,
|
||||||
0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x09,
|
0x32, 0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x32, 0x38, 0x4d, 0x65,
|
0x69, 0x74, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
|
||||||
0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x30,
|
0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35,
|
||||||
0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x33, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f,
|
||||||
0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
0x66, 0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28,
|
||||||
0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f,
|
0x03, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||||
0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x72,
|
0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65,
|
||||||
0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x14,
|
0x74, 0x72, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f,
|
||||||
0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63,
|
0x66, 0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72,
|
||||||
0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0d,
|
0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
|
||||||
0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07,
|
0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34,
|
||||||
0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73,
|
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f,
|
||||||
0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69,
|
0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01,
|
||||||
0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71,
|
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,
|
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,
|
0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12,
|
0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63,
|
||||||
0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x66,
|
0x12, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
|
||||||
0x72, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x73, 0x74,
|
0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52,
|
||||||
0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x15, 0x50,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||||
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, 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, 0x69, 0x62, 0x72,
|
|
||||||
0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
|
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,
|
0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
0xf6, 0x05, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||||
0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65,
|
0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71,
|
||||||
0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65,
|
0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
|
||||||
0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e,
|
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,
|
||||||
|
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,
|
||||||
|
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,
|
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, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f,
|
||||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69,
|
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,
|
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,
|
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77,
|
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69,
|
||||||
0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
|
||||||
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
|
0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
|
||||||
0x62, 0x2e, 0x47, 0x65, 0x74, 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,
|
||||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
|
||||||
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
|
0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
|
||||||
0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
|
0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
|
||||||
0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
|
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,
|
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,
|
0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
|
0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
|
||||||
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,
|
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,
|
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50,
|
||||||
0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
|
0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
|
||||||
0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73,
|
0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72,
|
0x62, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
|
||||||
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
|
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,
|
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,
|
0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f,
|
||||||
0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
|
0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
|
||||||
0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52,
|
0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f,
|
||||||
0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f,
|
|
||||||
0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
|
||||||
0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -155,6 +155,8 @@ message SelfTestReport {
|
|||||||
repeated Capability capabilities = 14;
|
repeated Capability capabilities = 14;
|
||||||
// The highest master frame the node has
|
// The highest master frame the node has
|
||||||
uint64 master_head_frame = 15;
|
uint64 master_head_frame = 15;
|
||||||
|
// A challenge proof
|
||||||
|
bytes proof = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ValidationMessage {
|
message ValidationMessage {
|
||||||
@ -216,6 +218,8 @@ message PeerManifest {
|
|||||||
repeated Capability capabilities = 15;
|
repeated Capability capabilities = 15;
|
||||||
// The highest master frame the node has
|
// The highest master frame the node has
|
||||||
uint64 master_head_frame = 16;
|
uint64 master_head_frame = 16;
|
||||||
|
// The last time seen tick
|
||||||
|
int64 last_seen = 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
message PeerManifestsResponse {
|
message PeerManifestsResponse {
|
||||||
|
7
signers/.env.example
Normal file
7
signers/.env.example
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Full path to your private key, used for signing and also the corresponding pem file number. Both required to generate signatures.
|
||||||
|
SIGNING_KEY_PATH=
|
||||||
|
SIGNING_KEY_ID=
|
||||||
|
|
||||||
|
# Full path to your public key, used to generate hex for reference.
|
||||||
|
SIGNING_PUB_KEY_PATH=
|
||||||
|
|
18
signers/Dockerfile
Normal file
18
signers/Dockerfile
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM golang:1.20.14-bookworm
|
||||||
|
|
||||||
|
ENV GOEXPERIMENT=arenas
|
||||||
|
ENV QUILIBRIUM_DOCKER_CONTAINER=true
|
||||||
|
|
||||||
|
ARG USER_NAME=default
|
||||||
|
ARG UID=1000
|
||||||
|
ARG GID=1000
|
||||||
|
|
||||||
|
RUN groupadd -g ${GID} ${USER_NAME} \
|
||||||
|
&& useradd -u ${UID} -g ${USER_NAME} -s /bin/bash ${USER_NAME}
|
||||||
|
|
||||||
|
RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
|
||||||
|
RUN apt-get update && apt-get install git
|
||||||
|
|
||||||
|
USER ${USER_NAME}
|
||||||
|
|
||||||
|
WORKDIR /home/${USER_NAME}
|
20
signers/README.md
Normal file
20
signers/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Release Signatories
|
||||||
|
|
||||||
|
Scripts in this folder are tools for release signers to build and sign Quilibrium binaries.
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
- bash environment (Ubuntu, macOS, etc.)
|
||||||
|
- openssl - digests and signatures
|
||||||
|
- git - to checkout this branch
|
||||||
|
- Docker - to run a container with golang and compile binaries
|
||||||
|
- [Taskfile](https://taskfile.dev/installation/)
|
||||||
|
|
||||||
|
Checkout the whole repo from a release branch and then in the `signers` folder you can run `task` commands. Before you
|
||||||
|
can run commands you have to copy `.env.example` to `.env` and fill it out. You need a local folder with all the pem
|
||||||
|
files, required by signature verification.
|
||||||
|
|
||||||
|
Important tasks:
|
||||||
|
- `task build` to build the binaries in a dedicated docker image
|
||||||
|
- `task verify:build` to verify that you can build the exact same binaries
|
||||||
|
- `task verify:digest` to verify the digests
|
||||||
|
- `task verify:signatures` to verify all signatures
|
202
signers/Taskfile.yaml
Normal file
202
signers/Taskfile.yaml
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
# https://taskfile.dev
|
||||||
|
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
dotenv:
|
||||||
|
- '.env'
|
||||||
|
|
||||||
|
env:
|
||||||
|
GOEXPERIMENT: arenas
|
||||||
|
|
||||||
|
vars:
|
||||||
|
VERSION:
|
||||||
|
sh: cat ../node/config/version.go | grep -A 1 "func GetVersion() \[\]byte {" | grep -Eo '0x[0-9a-fA-F]+' | xargs printf "%d.%d.%d"
|
||||||
|
MAX_KEY_ID: 15
|
||||||
|
QUILIBRIUM_SIGNERS_IMAGE_NAME: 'quilibrium-signers'
|
||||||
|
USER_NAME:
|
||||||
|
sh: whoami
|
||||||
|
PARENT_FOLDER:
|
||||||
|
sh: dirname $(pwd)
|
||||||
|
SIGNING_KEYS_PEM_DIR: 'pems'
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
status:
|
||||||
|
desc: Display configuration info.
|
||||||
|
cmds:
|
||||||
|
- echo -n "Version :" && echo " {{.VERSION}}"
|
||||||
|
- echo -n "Priv Key Path :" && echo " {{.SIGNING_KEY_PATH}}"
|
||||||
|
- echo -n "Pub Key Path :" && echo " {{.SIGNING_PUB_KEY_PATH}}"
|
||||||
|
- echo -n "Key ID :" && echo " {{.SIGNING_KEY_ID}}"
|
||||||
|
silent: true
|
||||||
|
|
||||||
|
hex:
|
||||||
|
desc: Print the hex representation of your public key.
|
||||||
|
cmds:
|
||||||
|
- cat {{.SIGNING_PUB_KEY_PATH}} | openssl ec -inform pem -pubin -noout -text
|
||||||
|
|
||||||
|
docker:build_image:
|
||||||
|
desc: Build the Quilibrium Signers docker image, unless it is already built.
|
||||||
|
aliases:
|
||||||
|
- image
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -z "$QUILIBRIUM_DOCKER_CONTAINER"'
|
||||||
|
msg: 'This command cannot be run inside the container'
|
||||||
|
cmds:
|
||||||
|
- |
|
||||||
|
docker build \
|
||||||
|
--build-arg USER_NAME={{.USER_NAME}} \
|
||||||
|
--build-arg UID=$(id -u) \
|
||||||
|
--build-arg GID=$(id -g) \
|
||||||
|
-t {{.QUILIBRIUM_SIGNERS_IMAGE_NAME}}:latest \
|
||||||
|
.
|
||||||
|
status:
|
||||||
|
- |
|
||||||
|
docker image inspect \
|
||||||
|
{{.QUILIBRIUM_SIGNERS_IMAGE_NAME}} \
|
||||||
|
>/dev/null 2>/dev/null
|
||||||
|
|
||||||
|
build:
|
||||||
|
desc: Build the Quilibrium node binaries by starting a container and starting the build inside the container.
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -z "$QUILIBRIUM_DOCKER_CONTAINER"'
|
||||||
|
msg: 'This command cannot be run inside the container'
|
||||||
|
deps:
|
||||||
|
- docker:build_image
|
||||||
|
cmds:
|
||||||
|
- docker run --name signers --rm -it -v {{.PARENT_FOLDER}}:/home/{{.USER_NAME}}/ceremonyclient -u {{.USER_NAME}} -w /home/{{.USER_NAME}}/ceremonyclient/signers {{.QUILIBRIUM_SIGNERS_IMAGE_NAME}} task build:container
|
||||||
|
|
||||||
|
build:shell:
|
||||||
|
desc: Start a shell in a build container.
|
||||||
|
aliases:
|
||||||
|
- shell
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -z "$QUILIBRIUM_DOCKER_CONTAINER"'
|
||||||
|
msg: 'This command cannot be run inside the container'
|
||||||
|
deps:
|
||||||
|
- docker:build_image
|
||||||
|
cmds:
|
||||||
|
- docker run --name signers --rm -it -v {{.PARENT_FOLDER}}:/home/{{.USER_NAME}}/ceremonyclient -u {{.USER_NAME}} -w /home/{{.USER_NAME}}/ceremonyclient/signers {{.QUILIBRIUM_SIGNERS_IMAGE_NAME}} bash
|
||||||
|
|
||||||
|
build:container:
|
||||||
|
desc: Build the Quilibrium node binaries, inside the Docker container.
|
||||||
|
dir: ../node
|
||||||
|
sources:
|
||||||
|
- '**/*.go'
|
||||||
|
generates:
|
||||||
|
- node-{{.VERSION}}-*.bin
|
||||||
|
cmds:
|
||||||
|
- GOOS=darwin go build -ldflags "-s -w" -o node-{{.VERSION}}-darwin-arm64.bin
|
||||||
|
- GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o node-{{.VERSION}}-linux-amd64.bin
|
||||||
|
- GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o node-{{.VERSION}}-linux-arm64.bin
|
||||||
|
|
||||||
|
digest:
|
||||||
|
desc: Generate digests for node binaries.
|
||||||
|
deps: [build]
|
||||||
|
dir: ../node
|
||||||
|
sources:
|
||||||
|
- node-{{.VERSION}}-*.bin
|
||||||
|
generates:
|
||||||
|
- node-{{.VERSION}}-*.dgst
|
||||||
|
cmds:
|
||||||
|
- openssl sha3-256 -out node-{{.VERSION}}-darwin-arm64.dgst node-{{.VERSION}}-darwin-arm64.bin
|
||||||
|
- openssl sha3-256 -out node-{{.VERSION}}-linux-amd64.dgst node-{{.VERSION}}-linux-amd64.bin
|
||||||
|
- openssl sha3-256 -out node-{{.VERSION}}-linux-arm64.dgst node-{{.VERSION}}-linux-arm64.bin
|
||||||
|
|
||||||
|
sign:
|
||||||
|
desc: Generate signatures for node binaries.
|
||||||
|
deps: [digest]
|
||||||
|
dir: ../node
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -n "$SIGNING_KEY_PATH"'
|
||||||
|
msg: 'The path to the signing key must be set in SIGNING_KEY_PATH'
|
||||||
|
- sh: 'test -n "$SIGNING_KEY_ID"'
|
||||||
|
msg: 'The signing key id must be set in SIGNING_KEY_ID'
|
||||||
|
sources:
|
||||||
|
- node-{{.VERSION}}-*.dgst
|
||||||
|
generates:
|
||||||
|
- node-{{.VERSION}}-*.dgst.sig.{{.SIGNING_KEY_ID}}
|
||||||
|
cmds:
|
||||||
|
- openssl pkeyutl -sign -inkey {{.SIGNING_KEY_PATH}} -rawin -in node-{{.VERSION}}-darwin-arm64.dgst -out node-{{.VERSION}}-darwin-arm64.dgst.sig.{{.SIGNING_KEY_ID}}
|
||||||
|
- openssl pkeyutl -sign -inkey {{.SIGNING_KEY_PATH}} -rawin -in node-{{.VERSION}}-linux-amd64.dgst -out node-{{.VERSION}}-linux-amd64.dgst.sig.{{.SIGNING_KEY_ID}}
|
||||||
|
- openssl pkeyutl -sign -inkey {{.SIGNING_KEY_PATH}} -rawin -in node-{{.VERSION}}-linux-arm64.dgst -out node-{{.VERSION}}-linux-arm64.dgst.sig.{{.SIGNING_KEY_ID}}
|
||||||
|
|
||||||
|
verify:build:
|
||||||
|
desc: Verify that the existing binaries can be rebuilt exactly the same.
|
||||||
|
dir: ../node
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -z "$QUILIBRIUM_DOCKER_CONTAINER"'
|
||||||
|
msg: 'This command cannot be run inside the container'
|
||||||
|
deps:
|
||||||
|
- docker:build_image
|
||||||
|
cmds:
|
||||||
|
- docker run --name signers --rm -it -v {{.PARENT_FOLDER}}:/home/{{.USER_NAME}}/ceremonyclient -u {{.USER_NAME}} -w /home/{{.USER_NAME}}/ceremonyclient/signers {{.QUILIBRIUM_SIGNERS_IMAGE_NAME}} task verify:build:container
|
||||||
|
- diff node-{{.VERSION}}-darwin-arm64.bin node-tmp-darwin-arm64.bin
|
||||||
|
- diff node-{{.VERSION}}-linux-amd64.bin node-tmp-linux-amd64.bin
|
||||||
|
- diff node-{{.VERSION}}-linux-arm64.bin node-tmp-linux-arm64.bin
|
||||||
|
|
||||||
|
verify:build:container:
|
||||||
|
desc: Verify that the existing binaries can be rebuilt exactly the same, inside tbe Docker container.
|
||||||
|
dir: ../node
|
||||||
|
sources:
|
||||||
|
- '**/*.go'
|
||||||
|
generates:
|
||||||
|
- node-tmp-*.bin
|
||||||
|
cmds:
|
||||||
|
- GOOS=darwin go build -ldflags "-s -w" -o node-tmp-darwin-arm64.bin
|
||||||
|
- GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o node-tmp-linux-amd64.bin
|
||||||
|
- GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o node-tmp-linux-arm64.bin
|
||||||
|
- diff node-{{.VERSION}}-darwin-arm64.bin node-tmp-darwin-arm64.bin
|
||||||
|
- diff node-{{.VERSION}}-linux-amd64.bin node-tmp-linux-amd64.bin
|
||||||
|
- diff node-{{.VERSION}}-linux-arm64.bin node-tmp-linux-arm64.bin
|
||||||
|
|
||||||
|
verify:digest:
|
||||||
|
desc: Verify that the existing digests are correct.
|
||||||
|
dir: ../node
|
||||||
|
cmds:
|
||||||
|
- openssl sha3-256 -out node-tmp-darwin-arm64.dgst node-{{.VERSION}}-darwin-arm64.bin
|
||||||
|
- openssl sha3-256 -out node-tmp-linux-amd64.dgst node-{{.VERSION}}-linux-amd64.bin
|
||||||
|
- openssl sha3-256 -out node-tmp-linux-arm64.dgst node-{{.VERSION}}-linux-arm64.bin
|
||||||
|
- diff node-{{.VERSION}}-darwin-arm64.dgst node-tmp-darwin-arm64.dgst
|
||||||
|
- diff node-{{.VERSION}}-linux-amd64.dgst node-tmp-linux-amd64.dgst
|
||||||
|
- diff node-{{.VERSION}}-linux-arm64.dgst node-tmp-linux-arm64.dgst
|
||||||
|
|
||||||
|
verify:signatures:
|
||||||
|
desc: Verify all signatures.
|
||||||
|
dir: ../node
|
||||||
|
cmds:
|
||||||
|
- |
|
||||||
|
for i in {1..{{.MAX_KEY_ID}}}
|
||||||
|
do
|
||||||
|
if [ -f node-{{.VERSION}}-darwin-arm64.dgst.sig.$i ]
|
||||||
|
then
|
||||||
|
echo $i
|
||||||
|
echo "node-{{.VERSION}}-darwin-arm64"
|
||||||
|
openssl pkeyutl -verify -rawin -inkey {{.SIGNING_KEYS_PEM_DIR}}/$i.pem -pubin -sigfile node-{{.VERSION}}-darwin-arm64.dgst.sig.$i -in node-{{.VERSION}}-darwin-arm64.dgst
|
||||||
|
echo "node-{{.VERSION}}-linux-amd64"
|
||||||
|
openssl pkeyutl -verify -rawin -inkey {{.SIGNING_KEYS_PEM_DIR}}/$i.pem -pubin -sigfile node-{{.VERSION}}-linux-amd64.dgst.sig.$i -in node-{{.VERSION}}-linux-amd64.dgst
|
||||||
|
echo "node-{{.VERSION}}-linux-arm64"
|
||||||
|
openssl pkeyutl -verify -rawin -inkey {{.SIGNING_KEYS_PEM_DIR}}/$i.pem -pubin -sigfile node-{{.VERSION}}-linux-arm64.dgst.sig.$i -in node-{{.VERSION}}-linux-arm64.dgst
|
||||||
|
else
|
||||||
|
if [ -f node-{{.VERSION}}-linux-arm64.dgst.sig.$i ]
|
||||||
|
then
|
||||||
|
echo "$i is missing signatures"
|
||||||
|
else
|
||||||
|
if [ -f node-{{.VERSION}}-linux-amd64.dgst.sig.$i ]
|
||||||
|
then
|
||||||
|
echo "$i is missing signatures"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
silent: true
|
||||||
|
|
||||||
|
clean:
|
||||||
|
desc: Remove temporary files, docker containers and image.
|
||||||
|
dir: ../node
|
||||||
|
preconditions:
|
||||||
|
- sh: 'test -z "$QUILIBRIUM_DOCKER_CONTAINER"'
|
||||||
|
msg: 'This command cannot be run inside the container'
|
||||||
|
cmds:
|
||||||
|
- rm -f node-tmp-*
|
||||||
|
- docker container rm -f signers
|
||||||
|
- docker image rm -f {{.QUILIBRIUM_SIGNERS_IMAGE_NAME}}
|
4
signers/pems/1.pem
Normal file
4
signers/pems/1.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAsSFNp/NV9antt7zCPUA733ifBwzKENsrTK3CLy2DevtlCUSF
|
||||||
|
PjXV9C7zxBBbgCsUS0B31dMlPkEA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/10.pem
Normal file
4
signers/pems/10.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoARQdib3Fk59jDBMB/+NLiPBE/4QiyIdLmBnL00HdQNFgV4rSz
|
||||||
|
zD3000Zr8vZpw1wxcuBlEScGEqsA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/11.pem
Normal file
4
signers/pems/11.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAT7JTc0Xka+PV+WNAwUQQB1AXAt1b+vbb9pQ7vvzsqPsrlOwK
|
||||||
|
ihovSYUPvh0QJEiJpPQKv6ngyeAA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/12.pem
Normal file
4
signers/pems/12.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAV74oYfrw//y/0SLIXHcBDc6PITAwkFeBuFtvNF2RLHtazhd5
|
||||||
|
fZgQiZ37jRPnyDaVlXQHJas91b0A
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/13.pem
Normal file
4
signers/pems/13.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAYWKL7vj2lkRm/QeNaiuQo5erB3ehS5coIn/RnzZ1L5RRsajX
|
||||||
|
gHQKC5qM499ficp7n/F96SdKJwmA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/14.pem
Normal file
4
signers/pems/14.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAVUevxxsCgh4vW/3TD74TdMOFOJje/yChtcxym46BZw+7udHp
|
||||||
|
F/hdFT6ksmu/b5xUbcG2S5kWYI2A
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/15.pem
Normal file
4
signers/pems/15.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAgdY6RfBoYp9WjegS8YvlgHv+goqDAJfwnPAjMNas0142B0Ad
|
||||||
|
8/2giwO2jqbmiv1QayNQaxHoeg+A
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/2.pem
Normal file
4
signers/pems/2.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoA3kz+cIMQS/4y8NQIL6AgBGTYsQgEqBFlPu3aN278rWTdIi8P
|
||||||
|
DOsLiuWKvoMNen4/Oy151pExjaoA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/3.pem
Normal file
4
signers/pems/3.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAVAI3o14SSILWtk57tXGCc/ozjlU/dyt3/pBXDkUwN2KzQTG9
|
||||||
|
y2wLnyz545PZx+D1Ru6rC8u9iBaA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/4.pem
Normal file
4
signers/pems/4.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoA++QWbjf5P5DS6/BjBTFa4Rs35QHQlZb4veEbqdNDA0+8qA8l
|
||||||
|
IgWqL1gqUSpyrSk983G6pYLaBykA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/5.pem
Normal file
4
signers/pems/5.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAQWBXLkk+G/FcROBVsRv3UjDHbH0sZ7SAZncKsD39XtNMl7mk
|
||||||
|
MewYV4yDoN+SULg2LDgGhlDosBQA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/6.pem
Normal file
4
signers/pems/6.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoARRcLYmiEuF1hrhCfKqmw4ezBixgVCEMepjCPOGnyra5J2peZ
|
||||||
|
oKWU6qTvOtSSUY+xcp3s1EFp1A0A
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/7.pem
Normal file
4
signers/pems/7.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAks2O5TYvOuJ0p1q5RxAk28FEv/RB7Yr30ZdQrFEv9R5A5/ew
|
||||||
|
Hk+WtjRd1Yh4VllIw+tSxT8lC1CA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/8.pem
Normal file
4
signers/pems/8.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAABpMv85dmut+IGZbDSNnIbIooy8LruYv+nf0W4Lsr1d+iji3
|
||||||
|
75H899LS0rUE8IVGE5jTCySrsdcA
|
||||||
|
-----END PUBLIC KEY-----
|
4
signers/pems/9.pem
Normal file
4
signers/pems/9.pem
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MEMwBQYDK2VxAzoAZbg1BxcxxueFuy0QfH2F2KU315xDXD9Cuy+HAn+T+FjXs3xZ
|
||||||
|
jO8mel20bjRfem+BlptGVoZlfR4A
|
||||||
|
-----END PUBLIC KEY-----
|
Loading…
Reference in New Issue
Block a user