Files
zeekayandHanzo Dev 920d56f2ec Carry the P and X chain packages the node still held
The platform and exchange VMs are the last chain code living in luxfi/node
and the reason the node cannot be retired. This brings over the part of them
proto did not already have: the adopt registry, the ZAP wire generators for
signer, warp and validator fees, the hybrid and runtime proof-of-possession
signers, the native admission check, the zwarp client and server, the
X-chain network layer, the xvmroot state root, the batch verifier and owner
root, and the credential policy the P and X mempools share, which lands
beside the mempool it gates as proto/txs/auth.

The X-chain genesis builder moves into proto/x/genesis, where the codec it
calls already lives, so it no longer reaches for the xvm package to build
primary-asset bytes.

Imports point at the packages that already have homes: cache, upgrade,
version and util as their own modules, and gas, verify and index in
luxfi/vm. The three generated files bring github.com/zap-proto/go with them,
which requires go 1.26.5.

Most of the remaining difference between the node's trees and proto is not a
backlog. proto restructured this code in August and the node's copies predate
it, so files that look absent are largely present here under other names.
What genuinely cannot come yet is anything reaching for node/server/http,
node/vms or node/wallet, and the tests written against tx constructors
proto's tx layer no longer exports.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-06 11:46:03 -07:00

94 lines
4.8 KiB
Go

// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package network
import (
"time"
"github.com/luxfi/constants"
)
var DefaultConfig = Config{
MaxValidatorSetStaleness: time.Minute,
TargetGossipSize: 20 * constants.KiB,
PushGossipPercentStake: .9,
PushGossipNumValidators: 100,
PushGossipNumPeers: 0,
PushRegossipNumValidators: 10,
PushRegossipNumPeers: 0,
PushGossipDiscardedCacheSize: 16384,
PushGossipMaxRegossipFrequency: 30 * time.Second,
PushGossipFrequency: 500 * time.Millisecond,
PullGossipPollSize: 1,
PullGossipFrequency: 1500 * time.Millisecond,
PullGossipThrottlingPeriod: 10 * time.Second,
PullGossipThrottlingLimit: 2,
ExpectedBloomFilterElements: 8 * 1024,
ExpectedBloomFilterFalsePositiveProbability: .01,
MaxBloomFilterFalsePositiveProbability: .05,
}
type Config struct {
// MaxValidatorSetStaleness limits how old of a validator set the network
// will use for peer sampling and rate limiting.
MaxValidatorSetStaleness time.Duration `json:"max-validator-set-staleness"`
// TargetGossipSize is the number of bytes that will be attempted to be
// sent when pushing transactions and when responded to transaction pull
// requests.
TargetGossipSize int `json:"target-gossip-size"`
// PushGossipPercentStake is the percentage of total stake to push
// transactions to in the first round of gossip. Nodes with higher stake are
// preferred over nodes with less stake to minimize the number of messages
// sent over the p2p network.
PushGossipPercentStake float64 `json:"push-gossip-percent-stake"`
// PushGossipNumValidators is the number of validators to push transactions
// to in the first round of gossip.
PushGossipNumValidators int `json:"push-gossip-num-validators"`
// PushGossipNumPeers is the number of peers to push transactions to in the
// first round of gossip.
PushGossipNumPeers int `json:"push-gossip-num-peers"`
// PushRegossipNumValidators is the number of validators to push
// transactions to after the first round of gossip.
PushRegossipNumValidators int `json:"push-regossip-num-validators"`
// PushRegossipNumPeers is the number of peers to push transactions to after
// the first round of gossip.
PushRegossipNumPeers int `json:"push-regossip-num-peers"`
// PushGossipDiscardedCacheSize is the number of txIDs to cache to avoid
// pushing transactions that were recently dropped from the mempool.
PushGossipDiscardedCacheSize int `json:"push-gossip-discarded-cache-size"`
// PushGossipMaxRegossipFrequency is the limit for how frequently a
// transaction will be push gossiped.
PushGossipMaxRegossipFrequency time.Duration `json:"push-gossip-max-regossip-frequency"`
// PushGossipFrequency is how frequently rounds of push gossip are
// performed.
PushGossipFrequency time.Duration `json:"push-gossip-frequency"`
// PullGossipPollSize is the number of validators to sample when performing
// a round of pull gossip.
PullGossipPollSize int `json:"pull-gossip-poll-size"`
// PullGossipFrequency is how frequently rounds of pull gossip are
// performed.
PullGossipFrequency time.Duration `json:"pull-gossip-frequency"`
// PullGossipThrottlingPeriod is how large of a window the throttler should
// use.
PullGossipThrottlingPeriod time.Duration `json:"pull-gossip-throttling-period"`
// PullGossipThrottlingLimit is the number of pull querys that are allowed
// by a validator in every throttling window.
PullGossipThrottlingLimit int `json:"pull-gossip-throttling-limit"`
// ExpectedBloomFilterElements is the number of elements to expect when
// creating a new bloom filter. The larger this number is, the larger the
// bloom filter will be.
ExpectedBloomFilterElements int `json:"expected-bloom-filter-elements"`
// ExpectedBloomFilterFalsePositiveProbability is the expected probability
// of a false positive after having inserted ExpectedBloomFilterElements
// into a bloom filter. The smaller this number is, the larger the bloom
// filter will be.
ExpectedBloomFilterFalsePositiveProbability float64 `json:"expected-bloom-filter-false-positive-probability"`
// MaxBloomFilterFalsePositiveProbability is used to determine when the
// bloom filter should be refreshed. Once the expected probability of a
// false positive exceeds this value, the bloom filter will be regenerated.
// The smaller this number is, the more frequently that the bloom filter
// will be regenerated.
MaxBloomFilterFalsePositiveProbability float64 `json:"max-bloom-filter-false-positive-probability"`
}