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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141 | @pytest.mark.parametrize(
"requests_list",
[
pytest.param(
[],
id="empty_request_list",
),
pytest.param(
[
*consolidation_list_with_custom_fee(1),
],
id="1_consolidation_request",
),
pytest.param(
[
*consolidation_list_with_custom_fee(2),
],
id="2_consolidation_requests",
),
pytest.param(
[
*consolidation_list_with_custom_fee(3),
],
id="3_consolidation_requests",
),
pytest.param(
[
*consolidation_list_with_custom_fee(4),
],
id="4_consolidation_requests",
),
pytest.param(
[
*consolidation_list_with_custom_fee(5),
],
id="5_consolidation_requests",
),
],
)
def test_extra_consolidations(
blockchain_test: BlockchainTestFiller,
pre: Alloc,
requests_list: List[ConsolidationRequest],
) -> None:
"""
Test how clients were to behave with more than 2 consolidations per block.
"""
modified_code: Bytecode = Bytecode()
memory_offset: int = 0
amount_of_requests: int = 0
for consolidation_request in requests_list:
# update memory_offset with the correct value
consolidation_request_bytes_amount: int = len(
bytes(consolidation_request)
)
assert consolidation_request_bytes_amount == 116, (
"Expected consolidation request to be of size 116 but got size "
f"{consolidation_request_bytes_amount}"
)
memory_offset += consolidation_request_bytes_amount
modified_code += Om.MSTORE(bytes(consolidation_request), memory_offset)
amount_of_requests += 1
modified_code += Op.RETURN(0, Op.MSIZE())
pre[Spec_EIP7251.CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS] = Account(
code=modified_code,
nonce=1,
balance=0,
)
# given a list of consolidation requests construct a consolidation request
# transaction
consolidation_request_transaction = ConsolidationRequestTransaction(
requests=requests_list
)
# prepare consolidation senders
consolidation_request_transaction.update_pre(pre=pre)
# get transaction list
txs: List[Transaction] = consolidation_request_transaction.transactions()
blockchain_test(
pre=pre,
blocks=[
Block(
txs=txs,
requests_hash=Requests(*requests_list),
),
],
post={},
)
|