from dataclasses import dataclass
from jam.types.base.boolean import Boolean
from jam.types.base.integers.fixed import U32
from jam.types.base.sequences.array import Array, decodable_array
from jam.types.base.sequences.vector import Vector, decodable_vector
from jam.utils.codec.codable import Codable
from jam.utils.codec.decorators.dataclasses import decodable_dataclass
from jam.types.protocol.crypto import Ed25519Public, Ed25519Signature, WorkReportHash
from jam.types.protocol.core import ValidatorIndex
from jam.utils.constants import VALIDATORS_SUPER_MAJORITY
from jam.utils.json.serde import JsonSerde
[docs]
@decodable_dataclass
@dataclass
class Judgement(Codable, JsonSerde):
"""Judgement structure."""
vote: Boolean
index: ValidatorIndex
signature: Ed25519Signature
[docs]
@decodable_dataclass
@dataclass
class Culprit(Codable, JsonSerde):
"""Culprit structure."""
target: WorkReportHash
key: Ed25519Public
signature: Ed25519Signature
[docs]
@decodable_dataclass
@dataclass
class Fault(Codable, JsonSerde):
"""Fault structure."""
target: WorkReportHash
vote: Boolean
key: Ed25519Public
signature: Ed25519Signature
[docs]
@decodable_array(length=VALIDATORS_SUPER_MAJORITY, element_type=Judgement)
class JudgementVotes(Array[Judgement]):
...
[docs]
@decodable_dataclass
@dataclass
class Verdict(Codable, JsonSerde):
"""Verdict structure."""
target: WorkReportHash
age: U32
votes: JudgementVotes
[docs]
@decodable_vector(WorkReportHash)
class WorkReportHashes(Vector[WorkReportHash]):
...
[docs]
@decodable_vector(Ed25519Public)
class Offenders(Vector[Ed25519Public]):
...
[docs]
@decodable_dataclass
@dataclass
class DisputesRecords(Codable, JsonSerde):
"""Disputes records structure."""
good: WorkReportHashes
bad: WorkReportHashes
wonky: WorkReportHashes
offenders: Offenders
[docs]
@decodable_vector(Verdict)
class Verdicts(Vector[Verdict]):
...
[docs]
@decodable_vector(Culprit)
class Culprits(Vector[Culprit]):
...
[docs]
@decodable_vector(Fault)
class Faults(Vector[Fault]):
...
[docs]
@decodable_dataclass
@dataclass
class DisputesExtrinsic(Codable, JsonSerde):
"""Disputes extrinsic structure."""
verdicts: Verdicts
culprits: Culprits
faults: Faults