github.com/platonnetwork/platon-go@v0.7.6/cases/tests/lib/genesis.py (about)

     1  from dataclasses import dataclass
     2  from dacite import from_dict
     3  from typing import Optional
     4  import json
     5  
     6  
     7  @dataclass
     8  class Cbft:
     9      initialNodes: list
    10      amount: int
    11      validatorMode: str
    12      period: int
    13  
    14  
    15  @dataclass
    16  class Config:
    17      chainId: int
    18      eip155Block: int
    19      cbft: Cbft
    20      genesisVersion: int
    21  
    22  
    23  @dataclass
    24  class Common:
    25      maxEpochMinutes: int
    26      maxConsensusVals: int
    27      additionalCycleTime: int
    28  
    29  
    30  @dataclass
    31  class Staking:
    32      stakeThreshold: int
    33      operatingThreshold: int
    34      maxValidators: int
    35      unStakeFreezeDuration: int
    36  
    37  
    38  @dataclass
    39  class Slashing:
    40      slashFractionDuplicateSign: int
    41      duplicateSignReportReward: int
    42      slashBlocksReward: int
    43      maxEvidenceAge: int
    44  
    45  
    46  @dataclass
    47  class Gov:
    48      versionProposalVoteDurationSeconds: int
    49      versionProposalSupportRate: float
    50      textProposalVoteDurationSeconds: int
    51      textProposalVoteRate: float
    52      textProposalSupportRate: float
    53      cancelProposalVoteRate: float
    54      cancelProposalSupportRate: float
    55      paramProposalVoteDurationSeconds: int
    56      paramProposalVoteRate: float
    57      paramProposalSupportRate: float
    58  
    59  
    60  @dataclass
    61  class Reward:
    62      newBlockRate: int
    63      platONFoundationYear: int
    64  
    65  
    66  @dataclass
    67  class InnerAcc:
    68      platonFundAccount: str
    69      platonFundBalance: int
    70      cdfAccount: str
    71      cdfBalance: int
    72  
    73  
    74  @dataclass
    75  class EconomicModel:
    76      common: Common
    77      staking: Staking
    78      slashing: Slashing
    79      gov: Gov
    80      reward: Reward
    81      innerAcc: InnerAcc
    82  
    83  
    84  @dataclass
    85  class Genesis:
    86      config: Config
    87      economicModel: EconomicModel
    88      nonce: str
    89      timestamp: str
    90      extraData: str
    91      gasLimit: str
    92      alloc: dict
    93      number: str
    94      gasUsed: str
    95      parentHash: str
    96  
    97      def to_dict(self):
    98          from copy import copy
    99          data = copy(self.__dict__)
   100          data["config"] = copy(self.config.__dict__)
   101          data["config"]["cbft"] = copy(self.config.cbft.__dict__)
   102          data["economicModel"] = copy(self.economicModel.__dict__)
   103          data["economicModel"]["common"] = copy(self.economicModel.common.__dict__)
   104          data["economicModel"]["staking"] = copy(self.economicModel.staking.__dict__)
   105          data["economicModel"]["slashing"] = copy(self.economicModel.slashing.__dict__)
   106          data["economicModel"]["gov"] = copy(self.economicModel.gov.__dict__)
   107          data["economicModel"]["reward"] = copy(self.economicModel.reward.__dict__)
   108          data["economicModel"]["innerAcc"] = copy(self.economicModel.innerAcc.__dict__)
   109          return data
   110  
   111      def to_file(self, file):
   112          data = self.to_dict()
   113          with open(file, "w") as f:
   114              f.write(json.dumps(data, indent=4))
   115  
   116  
   117  def to_genesis(genesis_conf) -> Genesis:
   118      return from_dict(Genesis, genesis_conf)
   119  
   120  
   121  if __name__ == "__main__":
   122      # from common.load_file import LoadFile
   123      # from conf.settings import GENESIS_FILE
   124      # import json
   125      # genesis_data = LoadFile(GENESIS_FILE).get_data()
   126      # genesis = from_dict(data_class=Genesis, data=genesis_data)
   127      # genesis.config.chainId = 1
   128      # # print(genesis_to_dict(genesis))
   129      # print(genesis.to_dict())
   130  
   131      pass