-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathScheduler.py
72 lines (63 loc) · 2.88 KB
/
Scheduler.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
from InputsConfig import InputsConfig as p
import random
from Models.Block import Block
from Event import Event, Queue
if p.model == 2:
from Models.Ethereum.Block import Block
elif p.model == 3:
from Models.AppendableBlock.Block import Block as AB
from Models.AppendableBlock.Node import Node
else:
from Models.Block import Block
class Scheduler:
# Schedule a block creation event for a miner and add it to the event list
def create_block_event(miner, eventTime):
eventType = "create_block"
if eventTime <= p.simTime:
# prepare attributes for the event
block = Block()
block.miner = miner.id
block.depth = len(miner.blockchain)
block.id = random.randrange(100000000000)
block.previous = miner.last_block().id
block.timestamp = eventTime
event = Event(eventType, block.miner, eventTime,
block) # create the event
Queue.add_event(event) # add the event to the queue
# Schedule a block receiving event for a node and add it to the event list
def receive_block_event(recipient, block, blockDelay):
receive_block_time = block.timestamp + blockDelay
if receive_block_time <= p.simTime:
e = Event("receive_block", recipient.id, receive_block_time, block)
Queue.add_event(e)
# Schedule a block creation event for a gateway - AppendableBlock model
def create_block_event_AB(node, eventTime, receiverGatewayId):
eventType = "create_block"
if eventTime <= p.simTime:
# Populate event attributes
block = AB()
block.id = random.randrange(100000000000)
block.timestamp = eventTime
block.nodeId = node.id
block.gatewayIds = node.gatewayIds
block.receiverGatewayId = receiverGatewayId
event = Event(eventType, node.id, eventTime, block)
Queue.add_event(event) # add the event to the queue
# Schedule a create transaction list event for a gateway
def append_tx_list_event(txList, gatewayId, tokenTime, eventTime):
eventType = "append_tx_list"
if eventTime <= p.simTime:
block = AB()
block.transactions = txList.copy()
block.timestamp = tokenTime
event = Event(eventType, gatewayId, eventTime, block)
Queue.add_event(event)
# Schedule a transaction list receiving event for a gateway
def receive_tx_list_event(txList, gatewayId, tokenTime, eventTime):
eventType = "receive_tx_list"
if eventTime <= p.simTime:
block = AB()
block.transactions = txList.copy()
block.timestamp = tokenTime
event = Event(eventType, gatewayId, eventTime, block)
Queue.add_event(event)