full nodes (1st class) and validator nodes (2nd class)

This is a hack to see how differentiating node classes work.
A more generic setup is needed with configurable parameters.

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
Csaba Kiraly 2023-12-12 15:23:44 +01:00
parent 95cfc1a893
commit 6dfdb01bee
No known key found for this signature in database
GPG Key ID: 0FE274EE8C95166E
2 changed files with 21 additions and 13 deletions

View File

@ -48,6 +48,8 @@ class Simulator:
self.glob = Observer(self.logger, self.shape) self.glob = Observer(self.logger, self.shape)
self.validators = [] self.validators = []
if self.config.evenLineDistribution: if self.config.evenLineDistribution:
self.logger.error("evenLineDistribution NOT YET SUPPORTED.", extra=self.format)
exit(1)
lightNodes = int(self.shape.numberNodes * self.shape.class1ratio) lightNodes = int(self.shape.numberNodes * self.shape.class1ratio)
heavyNodes = self.shape.numberNodes - lightNodes heavyNodes = self.shape.numberNodes - lightNodes
@ -102,12 +104,18 @@ class Simulator:
elif self.shape.chiR > self.shape.blockSizeC: elif self.shape.chiR > self.shape.blockSizeC:
self.logger.error("ChiR has to be smaller than %d" % self.shape.blockSizeC) self.logger.error("ChiR has to be smaller than %d" % self.shape.blockSizeC)
vs = []
nodeClass = 1 if (i <= self.shape.numberNodes * self.shape.class1ratio) else 2 nodeClass = 1 if (i <= self.shape.numberNodes * self.shape.class1ratio) else 2
vpn = self.shape.vpn1 if (nodeClass == 1) else self.shape.vpn2 if nodeClass == 1: # nodes
for v in range(vpn): validators = []
vs.append(initValidator(self.shape.blockSizeC, self.shape.chiR, self.shape.blockSizeR, self.shape.chiC)) rows = set()
val = Node(i, int(not i!=0), self.logger, self.shape, self.config, vs) columns = set(random.sample(range(self.shape.blockSizeR), self.shape.chiC))
val = Node(i, int(not i!=0), self.logger, self.shape, self.config, validators, rows, columns)
else: # validators
validators = []
vpn = self.shape.vpn1 if (nodeClass == 1) else self.shape.vpn2
for _ in range(vpn):
validators.append(initValidator(self.shape.blockSizeC, self.shape.chiR, self.shape.blockSizeR, 0))
val = Node(i, int(not i!=0), self.logger, self.shape, self.config, validators)
if i == self.proposerID: if i == self.proposerID:
val.initBlock() val.initBlock()
else: else:

View File

@ -48,7 +48,7 @@ evenLineDistribution = False
runs = [1] runs = [1]
# Number of validators # Number of validators
numberNodes = [4000] numberNodes = [1000]
# select failure model between: "random, sequential, MEP, MEP+1, DEP, DEP+1, MREP, MREP-1" # select failure model between: "random, sequential, MEP, MEP+1, DEP, DEP+1, MREP, MREP-1"
failureModels = ["random"] failureModels = ["random"]
@ -70,20 +70,20 @@ rowsN = rowsK
netDegrees = [8] netDegrees = [8]
# number of rows and columns a validator is interested in # number of rows and columns a validator is interested in
chiR = 1 chiR = 1 # Number of rows observed by validators (not Beacon nodes with validators, but individual validators)
chiC = 1 chiC = 16 # Number of columns observed by full nodes
# ratio of class1 nodes (see below for parameters per class) # ratio of class1 nodes (see below for parameters per class)
class1ratios = [1] class1ratios = [.5]
# Number of validators per beacon node # Number of validators per beacon node
validatorsPerNode1 = [1] validatorsPerNode1 = [0] # Full nodes, without validators
validatorsPerNode2 = [500] validatorsPerNode2 = [500] # Nodes with validators
# Set uplink bandwidth in megabits/second # Set uplink bandwidth in megabits/second
bwUplinksProd = [200] bwUplinksProd = [200]
bwUplinks1 = [10] bwUplinks1 = [10] # Full nodes
bwUplinks2 = [200] bwUplinks2 = [200] # Nodes with validators
# Step duration in miliseconds (Classic RTT is about 100ms) # Step duration in miliseconds (Classic RTT is about 100ms)
stepDuration = 50 stepDuration = 50