-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathminer_std.py
executable file
·82 lines (69 loc) · 2.49 KB
/
miner_std.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python3
from time import sleep
from commander import Commander
class Miner:
def __init__(self, node, mature):
self.node = node
self.wallet = Commander.ensure_miner(self.node)
self.addr = self.wallet.getnewaddress()
self.mature = mature
class MinerStd(Commander):
def set_test_params(self):
# This is just a minimum
self.num_nodes = 0
self.miners = []
def add_options(self, parser):
parser.description = "Generate blocks over time"
parser.usage = "warnet run /path/to/miner_std.py [options]"
parser.add_argument(
"--allnodes",
dest="allnodes",
action="store_true",
help="When true, generate blocks from all nodes instead of just nodes[0]",
)
parser.add_argument(
"--interval",
dest="interval",
default=60,
type=int,
help="Number of seconds between block generation (default 60 seconds)",
)
parser.add_argument(
"--mature",
dest="mature",
action="store_true",
help="When true, generate 101 blocks ONCE per miner",
)
parser.add_argument(
"--tank",
dest="tank",
type=str,
help="Select one tank by name as the only miner",
)
def run_test(self):
self.log.info("Starting miners.")
if self.options.tank:
self.miners = [Miner(self.tanks[self.options.tank], self.options.mature)]
else:
max_miners = len(self.nodes) if self.options.allnodes else 1
for index in range(max_miners):
self.miners.append(Miner(self.nodes[index], self.options.mature))
while True:
for miner in self.miners:
num = 1
if miner.mature:
num = 101
miner.mature = False
try:
self.generatetoaddress(miner.node, num, miner.addr, sync_fun=self.no_op)
height = miner.node.getblockcount()
self.log.info(
f"generated {num} block(s) from node {miner.node.index}. New chain height: {height}"
)
except Exception as e:
self.log.error(f"node {miner.node.index} error: {e}")
sleep(self.options.interval)
def main():
MinerStd().main()
if __name__ == "__main__":
main()