Skip to content

Commit c36739a

Browse files
authored
test: add more justification rule cases (leanEthereum#136)
* test: add more justification rule cases * test: fix line length * fix: more linting
1 parent 299902a commit c36739a

1 file changed

Lines changed: 36 additions & 61 deletions

File tree

tests/consensus/devnet/fc/test_attestation_target_selection.py

Lines changed: 36 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -320,51 +320,6 @@ def test_attestation_target_justifiable_constraint(
320320
2. delta is a perfect square (1, 4, 9, 16, 25, ...)
321321
3. delta is a pronic number (2, 6, 12, 20, 30, ...)
322322
323-
Expected Target Advancement:
324-
- Slots 1-3: 3-slot walkback target = slot 0
325-
delta = slot 0 (target) - slot 0 (finalized) = 0
326-
Use Rule 1: delta 0 ≤ 5
327-
328-
- Slot 4: 3-slot walkback target = slot 1
329-
delta = slot 1 (target) - slot 0 (finalized) = 1
330-
Uses Rule 1: delta 1 ≤ 5
331-
332-
- Slot 5: 3-slot walkback target = slot 2
333-
delta = slot 2 (target) - slot 0 (finalized) = 2
334-
Uses Rule 1: delta 2 ≤ 5
335-
336-
- Slot 6: 3-slot walkback target = slot 3
337-
delta = slot 3 (target) - slot 0 (finalized) = 3
338-
Uses Rule 1: delta 3 ≤ 5
339-
340-
- Slot 7: 3-slot walkback target = slot 4
341-
delta = slot 4 (target) - slot 0 (finalized) = 4
342-
Uses Rule 1: delta 4 ≤ 5
343-
344-
- Slot 8: 3-slot walkback target = slot 5
345-
delta = slot 5 (target) - slot 0 (finalized) = 5
346-
Uses Rule 1: delta 5 ≤ 5
347-
348-
- Slot 9: 3-slot walkback target = slot 6
349-
delta = slot 6 (target) - slot 0 (finalized) = 6
350-
Uses Rule 3: delta 6 is pronic (2×3)
351-
352-
- Slot 10: 3-slot walkback target = slot 7
353-
delta = slot 7 (target) - slot 0 (finalized) = 7
354-
Target can't advance: delta 7 fails all rules
355-
356-
- Slot 11: 3-slot walkback target = slot 8
357-
delta = slot 8 (target) - slot 0 (finalized) = 8
358-
Target can't advance: delta 8 fails all rules
359-
360-
- Slot 12: 3-slot walkback target = slot 9
361-
delta = slot 9 (target) - slot 0 (finalized) = 9
362-
Uses Rule 2: delta 9 is a perfect square (3^2)
363-
364-
- Slot 13: 3-slot walkback target = slot 10
365-
delta = slot 10 (target) - slot 0 (finalized) = 10
366-
Target can't advance: delta 10 fails all rules
367-
368323
Why This Matters
369324
----------------
370325
The justifiability rules prevent long-range attacks by restricting which
@@ -381,25 +336,45 @@ def test_attestation_target_justifiable_constraint(
381336
block=BlockSpec(slot=Slot(i)),
382337
checks=StoreChecks(
383338
head_slot=Slot(i),
384-
# Target advancement pattern:
385-
# - Slot 1: target = 0 (3-slot walkback reaches safe target at slot 0)
386-
# - Slot 2: target = 0 (3-slot walkback reaches safe target at slot 0)
387-
# - Slot 3: target = 0 (3-slot walkback reaches safe target at slot 0)
388-
# - Slot 4: target = 1 (begins advancing)
389-
# - Slot 5: target = 2
390-
# - Slot 6: target = 3
391-
# - Slot 7: target = 4
392-
# - Slot 8: target = 5
393-
# - Slot 9: target = 6
394-
# - Slot 10: target = 6 (advancement slows)
395-
# - Slot 11: target = 6 (advancement slows)
396-
# - Slot 12: target = 9
397-
# - Slot 13: target = 9 (advancement slows)
398339
attestation_target_slot=Slot(
399-
0 if i <= 3 else (i - 3 if i <= 9 else (6 if i <= 11 else 9))
340+
# Mapping of current slot -> expected target slot
341+
# delta = current_slot - JUSTIFICATION_LOOKBACK_SLOTS - finalized_slot
342+
# delta = current_slot - 3 - 0
343+
{
344+
1: 0, # 3-slot walkback reaches safe target at slot 0
345+
2: 0, # 3-slot walkback reaches safe target at slot 0
346+
3: 0, # 3-slot walkback reaches safe target at slot 0
347+
4: 1, # delta = 4 - 3 - 0 = 1, Rule 1: delta 1 ≤ 5
348+
5: 2, # delta = 5 - 3 - 0 = 2, Rule 1: delta 2 ≤ 5
349+
6: 3, # delta = 6 - 3 - 0 = 3, Rule 1: delta 3 ≤ 5
350+
7: 4, # delta = 7 - 3 - 0 = 4, Rule 1: delta 4 ≤ 5
351+
8: 5, # delta = 8 - 3 - 0 = 5, Rule 1: delta 5 ≤ 5
352+
9: 6, # delta = 6 - 0 = 6, Rule 3: pronic number (2*3)
353+
10: 6, # delta = 10 - 3 - 0 = 7
354+
11: 6, # delta = 11 - 3 - 0 = 8
355+
12: 9, # delta = 9 - 0 = 9, Rule 2: perfect square (3^2)
356+
13: 9, # delta = 13 - 3 - 0 = 10
357+
14: 9, # delta = 14 - 3 - 0 = 11
358+
15: 12, # delta = 15 - 3 - 0 = 12, Rule 3: pronic number (3*4)
359+
16: 12, # delta = 16 - 3 - 0 = 13
360+
17: 12, # delta = 17 - 3 - 0 = 14
361+
18: 12, # delta = 18 - 3 - 0 = 15
362+
19: 16, # delta = 19 - 3 - 0 = 16, Rule 2: perfect square (4^2)
363+
20: 16, # delta = 20 - 3 - 0 = 17
364+
21: 16, # delta = 21 - 3 - 0 = 18
365+
22: 16, # delta = 22 - 3 - 0 = 19
366+
23: 20, # delta = 23 - 3 - 0 = 20, Rule 3: pronic number (4*5)
367+
24: 20, # delta = 24 - 3 - 0 = 21
368+
25: 20, # delta = 25 - 3 - 0 = 22
369+
26: 20, # delta = 26 - 3 - 0 = 23
370+
27: 20, # delta = 27 - 3 - 0 = 24
371+
28: 25, # delta = 28 - 3 - 0 = 25, Rule 2: perfect square (5^2)
372+
29: 25, # delta = 29 - 3 - 0 = 26
373+
30: 25, # delta = 30 - 3 - 0 = 27
374+
}[i]
400375
),
401376
),
402377
)
403-
for i in range(1, 13)
378+
for i in range(1, 31)
404379
],
405380
)

0 commit comments

Comments
 (0)