import os from pathlib import Path import subprocess import traceback FULL_NODE='chik/full_node/puzzles' CAT_WALLET='chik/wallet/cat_wallet/puzzles' DID_WALLET='chik/wallet/did_wallet/puzzles' NFT_WALLET='chik/wallet/nft_wallet/puzzles' POOLS='chik/pools/puzzles' CONSENSUS='chik/consensus/puzzles' GENTEST='tests/generator/puzzles' def full_node(x): return {'fname': x, 'dirname': FULL_NODE} def cat_wallet(x): return {'fname': x, 'dirname': CAT_WALLET} def did_wallet(x): return {'fname': x, 'dirname': DID_WALLET} def nft_wallet(x): return {'fname': x, 'dirname': NFT_WALLET} def pools(x): return {'fname': x, 'dirname': POOLS} def consensus(x): return {'fname': x, 'dirname': CONSENSUS} def gentest(x): return {'fname': x, 'dirname': GENTEST} recompile_list = [ full_node('block_program_zero.clsp'), full_node('decompress_coin_spend_entry.clsp'), full_node('decompress_coin_spend_entry_with_prefix.clsp'), full_node('decompress_puzzle.clsp'), cat_wallet('delegated_tail.clsp'), cat_wallet('everything_with_signature.clsp'), cat_wallet('genesis_by_coin_id.clsp'), cat_wallet('genesis_by_puzzle_hash.clsp'), did_wallet('did_innerpuz.clsp'), nft_wallet('nft_metadata_updater_default.clsp'), nft_wallet('nft_metadata_updater_updateable.clsp'), nft_wallet('nft_ownership_layer.clsp'), nft_wallet('nft_ownership_transfer_program_one_way_claim_with_royalties.clsp'), nft_wallet('nft_state_layer.clsp'), pools('pool_member_innerpuz.clsp'), pools('pool_waitingroom_innerpuz.clsp'), consensus('rom_bootstrap_generator.clsp'), 'p2_conditions.clsp', 'p2_delegated_conditions.clsp', 'p2_delegated_puzzle.clsp', 'p2_delegated_puzzle_or_hidden_puzzle.clsp', 'p2_m_of_n_delegate_direct.clsp', 'p2_puzzle_hash.clsp', 'p2_singleton.clsp', 'p2_singleton_or_delayed_puzhash.clsp', 'settlement_payments.clsp', 'singleton_launcher.clsp', 'singleton_top_layer.clsp', 'singleton_top_layer_v1_1.clsp', gentest('test_generator_deserialize.clsp'), gentest('test_multiple_generator_input_arguments.clsp') ] for recompile_entry in recompile_list: if 'dirname' in recompile_entry and 'fname' in recompile_entry: dirname = recompile_entry['dirname'] filename = recompile_entry['fname'] else: filename = recompile_entry dirname = 'chik/wallet/puzzles' srcfile = str(Path(dirname) / Path(filename)) hexfile = f'{str(srcfile)}.hex' hexdata = open(hexfile).read().strip() os.unlink(hexfile) try: compiled = subprocess.check_output(['../target/release/run', '-i', dirname, '-i', 'chik/wallet/puzzles', srcfile]).strip() recompile = subprocess.check_output(['../target/release/opc', compiled]).decode('utf8').strip() except: print(f'compiling {fname}') traceback.print_exc() if hexdata != recompile: print(f'*** COMPILE RESULTED IN DIFFERENT OUTPUT FOR FILE {fname}') assert hexdata == recompile