import sys from typing import List from time import time from clvm_rs import run_generator from clvm import KEYWORD_FROM_ATOM, KEYWORD_TO_ATOM from clvm.casts import int_from_bytes from clvm.operators import OP_REWRITE from chia.types.full_block import FullBlock from chia.types.blockchain_format.program import Program from chia.consensus.default_constants import DEFAULT_CONSTANTS from chia.wallet.puzzles.rom_bootstrap_generator import get_generator from chia.types.condition_opcodes import ConditionOpcode GENERATOR_ROM = bytes(get_generator()) native_opcode_names_by_opcode = dict(("op_%s" % OP_REWRITE.get(k, k), op) for op, k in KEYWORD_FROM_ATOM.items() if k not in "qa.") def run_gen(env_data: bytes, block_program_args: bytes): max_cost = DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM cost_per_byte = DEFAULT_CONSTANTS.COST_PER_BYTE # we don't charge for the size of the generator ROM. However, we do charge # cost for the operations it executes max_cost -= len(env_data) * cost_per_byte env_data = b"\xff" + env_data + b"\xff" + block_program_args + b"\x80"
import logging from typing import List, Optional, Union, Tuple from chia.types.blockchain_format.program import Program, SerializedProgram from chia.types.generator_types import BlockGenerator, GeneratorArg, GeneratorBlockCacheInterface, CompressorArg from chia.util.ints import uint32, uint64 from chia.wallet.puzzles.load_clvm import load_clvm from chia.wallet.puzzles.rom_bootstrap_generator import get_generator GENERATOR_MOD = get_generator() DECOMPRESS_BLOCK = load_clvm("block_program_zero.clvm", package_or_requirement="chia.wallet.puzzles") DECOMPRESS_PUZZLE = load_clvm("decompress_puzzle.clvm", package_or_requirement="chia.wallet.puzzles") # DECOMPRESS_CSE = load_clvm("decompress_coin_solution_entry.clvm", package_or_requirement="chia.wallet.puzzles") DECOMPRESS_CSE_WITH_PREFIX = load_clvm( "decompress_coin_solution_entry_with_prefix.clvm", package_or_requirement="chia.wallet.puzzles") log = logging.getLogger(__name__) def create_block_generator( generator: SerializedProgram, block_heights_list: List[uint32], generator_block_cache: GeneratorBlockCacheInterface ) -> Optional[BlockGenerator]: """`create_block_generator` will returns None if it fails to look up any referenced block""" generator_arg_list: List[GeneratorArg] = [] for i in block_heights_list: previous_generator = generator_block_cache.get_generator_for_block_height( i)