Source code for jam.chainspec

"""JAM protocol configuration."""
from dataclasses import dataclass
from enum import Enum
import os
from typing import Dict, Optional


[docs] class ChainSpec(Enum): """Chain specification types.""" TINY = "tiny" SMALL = "small" MEDIUM = "medium" LARGE = "large" XLARGE = "xlarge" XLARGE2 = "2xlarge" XLARGE3 = "3xlarge" FULL = "full"
[docs] @dataclass class JamConfig: """JAM protocol configuration.""" chain: ChainSpec num_validators: int num_cores: int slot_duration: int epoch_duration: int ticket_submission_end: int contest_duration: int tickets_per_validator: int max_tickets_per_extrinsic: int rotation_period: Optional[int]
[docs] @classmethod def tiny(cls) -> "JamConfig": """Create tiny chain configuration.""" return cls( chain=ChainSpec.TINY, num_validators=6, num_cores=2, slot_duration=6, epoch_duration=12, ticket_submission_end=10, contest_duration=10, tickets_per_validator=3, max_tickets_per_extrinsic=3, rotation_period=4, )
[docs] @classmethod def small(cls) -> "JamConfig": """Create small chain configuration.""" return cls( chain=ChainSpec.SMALL, num_validators=24, num_cores=8, slot_duration=6, epoch_duration=36, ticket_submission_end=30, contest_duration=30, tickets_per_validator=2, max_tickets_per_extrinsic=3, rotation_period=None, # TODO )
[docs] @classmethod def medium(cls) -> "JamConfig": """Create medium chain configuration.""" return cls( chain=ChainSpec.MEDIUM, num_validators=48, num_cores=16, slot_duration=6, epoch_duration=60, ticket_submission_end=50, contest_duration=50, tickets_per_validator=2, max_tickets_per_extrinsic=3, rotation_period=None, # TODO )
[docs] @classmethod def large(cls) -> "JamConfig": """Create large chain configuration.""" return cls( chain=ChainSpec.LARGE, num_validators=96, num_cores=32, slot_duration=6, epoch_duration=120, ticket_submission_end=100, contest_duration=100, tickets_per_validator=2, max_tickets_per_extrinsic=3, rotation_period=None, # TODO )
[docs] @classmethod def xlarge(cls) -> "JamConfig": """Create xlarge chain configuration.""" return cls( chain=ChainSpec.XLARGE, num_validators=192, num_cores=64, slot_duration=6, epoch_duration=240, ticket_submission_end=200, contest_duration=200, tickets_per_validator=2, max_tickets_per_extrinsic=3, rotation_period=None, # TODO )
[docs] @classmethod def xlarge2(cls) -> "JamConfig": """Create 2xlarge chain configuration.""" return cls( chain=ChainSpec.XLARGE2, num_validators=384, num_cores=128, slot_duration=6, epoch_duration=300, ticket_submission_end=250, contest_duration=250, tickets_per_validator=2, max_tickets_per_extrinsic=16, rotation_period=None, # TODO )
[docs] @classmethod def xlarge3(cls) -> "JamConfig": """Create 3xlarge chain configuration.""" return cls( chain=ChainSpec.XLARGE3, num_validators=576, num_cores=192, slot_duration=6, epoch_duration=600, ticket_submission_end=500, contest_duration=500, tickets_per_validator=2, max_tickets_per_extrinsic=16, rotation_period=None, # TODO )
[docs] @classmethod def full(cls) -> "JamConfig": """Create full chain configuration.""" return cls( chain=ChainSpec.FULL, num_validators=1023, num_cores=341, slot_duration=6, epoch_duration=600, ticket_submission_end=500, contest_duration=500, tickets_per_validator=2, max_tickets_per_extrinsic=16, rotation_period=10, )
[docs] @classmethod def from_chain(cls, chain: str) -> "JamConfig": """Create configuration from chain name.""" chain_map = { ChainSpec.TINY.value: cls.tiny, ChainSpec.SMALL.value: cls.small, ChainSpec.MEDIUM.value: cls.medium, ChainSpec.LARGE.value: cls.large, ChainSpec.XLARGE.value: cls.xlarge, ChainSpec.XLARGE2.value: cls.xlarge2, ChainSpec.XLARGE3.value: cls.xlarge3, ChainSpec.FULL.value: cls.full, } if chain not in chain_map: raise ValueError(f"Unknown chain spec: {chain}") return chain_map[chain]()
# Default to tiny chain if not specified DEFAULT_CHAIN = "tiny" # Load chain spec from environment variable CHAIN_SPEC = os.environ.get("JAM_CHAIN_SPEC", DEFAULT_CHAIN) # Create config from chain spec chain_config = JamConfig.from_chain(CHAIN_SPEC)