"""Work report types for the JAM protocol."""
from dataclasses import dataclass
from typing import Any, Tuple, Union
from jam.types.base.choices.choice import Choice, decodable_choice
from jam.types.base.integers import U16, U32
from jam.types.base.sequences.bytes.bytes import Bytes
from jam.types.base.null import Nullable
from jam.types.base import Vector
from jam.types.base.sequences.vector import decodable_vector
from jam.types.protocol.crypto import OpaqueHash
from jam.types.protocol.core import ErasureRoot, ExportsRoot, WorkPackageHash
from jam.utils.codec.codable import Codable
from jam.utils.codec.decorators.dataclasses import decodable_dataclass
from jam.types.protocol.core import ServiceId, Gas, CoreIndex
from jam.types.work.refine_context import RefineContext
from jam.utils.json.serde import JsonSerde
[docs]
@decodable_choice
class WorkExecResult(Choice):
"""Work execution result choice."""
ok: Bytes
out_of_gas: Nullable
panic: Nullable
bad_code: Nullable
code_oversize: Nullable
[docs]
@decodable_dataclass
@dataclass
class WorkResult(Codable, JsonSerde):
"""Work result structure."""
service_id: ServiceId
code_hash: OpaqueHash
payload_hash: OpaqueHash
accumulate_gas: Gas
result: WorkExecResult
[docs]
@decodable_dataclass
@dataclass
class WorkPackageSpec(Codable, JsonSerde):
"""Work package specification structure."""
hash: WorkPackageHash
length: U32
erasure_root: ErasureRoot
exports_root: ExportsRoot
exports_count: U16
[docs]
@decodable_dataclass
@dataclass
class SegmentRootLookupItem(Codable, JsonSerde):
"""Segment root lookup item structure."""
work_package_hash: WorkPackageHash
segment_tree_root: OpaqueHash
[docs]
@decodable_vector(SegmentRootLookupItem)
class SegmentRootLookup(Vector[SegmentRootLookupItem]):
...
[docs]
@decodable_vector(WorkResult)
class WorkResults(Vector[WorkResult]):
...
[docs]
@decodable_dataclass
@dataclass
class WorkReport(Codable, JsonSerde):
"""Work report structure."""
package_spec: WorkPackageSpec
context: RefineContext
core_index: CoreIndex
authorizer_hash: OpaqueHash
auth_output: Bytes
segment_root_lookup: SegmentRootLookup
results: WorkResults