Files
Shadowbroker/backend/services/infonet/tests/test_2_common_rep.py
T
2026-05-01 22:56:50 -06:00

106 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Sprint 2 — common rep base formula (Sprint 3 layers anti-gaming).
The formula in Sprint 2 is just ``base_rep = oracle_rep(upreper) *
weight_factor``. VCS / clustering / temporal multipliers ship in Sprint 3.
"""
from __future__ import annotations
from services.infonet.reputation import compute_common_rep
from services.infonet.tests._chain_factory import make_event, make_market_chain
def test_no_uprep_means_no_common_rep():
chain = make_market_chain(
"m1", "creator", outcome="yes",
predictions=[{"node_id": "alice", "side": "yes", "probability_at_bet": 30.0}],
)
assert compute_common_rep("alice", chain) == 0.0
def test_uprep_from_zero_oracle_rep_yields_zero_common_rep():
"""Plan §3.2: rep is oracle-weighted. A node with no oracle rep
cannot mint common rep through upreps."""
chain = [
make_event("uprep", "newbie", {"target_node_id": "alice", "target_event_id": "post1"},
timestamp=1.0, sequence=1),
]
assert compute_common_rep("alice", chain) == 0.0
def test_uprep_from_oracle_holder_mints_common_rep():
base = 1_000_000.0
chain = make_market_chain(
"m1", "creator", outcome="yes",
predictions=[
{"node_id": "ora", "side": "yes", "stake_amount": 10.0},
{"node_id": "loser", "side": "no", "stake_amount": 10.0},
],
base_ts=base,
participants=5, total_stake=20.0,
)
chain.append(make_event(
"uprep", "ora", {"target_node_id": "alice", "target_event_id": "post1"},
timestamp=base + 10_000, sequence=99,
))
# ora has 20 oracle rep, weight factor 0.1 → 2.0 common rep for alice.
assert compute_common_rep("alice", chain) == 2.0
def test_self_uprep_is_ignored():
base = 1_000_000.0
chain = make_market_chain(
"m1", "creator", outcome="yes",
predictions=[
{"node_id": "alice", "side": "yes", "stake_amount": 10.0},
{"node_id": "loser", "side": "no", "stake_amount": 10.0},
],
base_ts=base,
participants=5, total_stake=20.0,
)
chain.append(make_event(
"uprep", "alice", {"target_node_id": "alice", "target_event_id": "post1"},
timestamp=base + 10_000, sequence=99,
))
# Self-uprep silently ignored.
assert compute_common_rep("alice", chain) == 0.0
def test_multiple_upreps_accumulate():
base = 1_000_000.0
chain = make_market_chain(
"m1", "creator", outcome="yes",
predictions=[
{"node_id": "ora", "side": "yes", "stake_amount": 10.0},
{"node_id": "loser", "side": "no", "stake_amount": 10.0},
],
base_ts=base,
participants=5, total_stake=20.0,
)
for i in range(3):
chain.append(make_event(
"uprep", "ora",
{"target_node_id": "alice", "target_event_id": f"post{i}"},
timestamp=base + 10_000 + i, sequence=100 + i,
))
# 3 upreps × 20 oracle rep × 0.1 = 6.0
assert compute_common_rep("alice", chain) == 6.0
def test_weight_factor_override():
base = 1_000_000.0
chain = make_market_chain(
"m1", "creator", outcome="yes",
predictions=[
{"node_id": "ora", "side": "yes", "stake_amount": 10.0},
{"node_id": "loser", "side": "no", "stake_amount": 10.0},
],
base_ts=base,
participants=5, total_stake=20.0,
)
chain.append(make_event(
"uprep", "ora", {"target_node_id": "alice", "target_event_id": "post1"},
timestamp=base + 10_000, sequence=99,
))
assert compute_common_rep("alice", chain, weight_factor=0.5) == 10.0