async def setup_full_system(dic={}): node_iters = [ setup_introducer(21233), setup_harvester(21234), setup_farmer(21235), setup_timelord(21236), setup_vdf_clients(8000), setup_full_node("blockchain_test.db", 21237, 21233, dic), setup_full_node("blockchain_test_2.db", 21238, 21233, dic), ] introducer, introducer_server = await node_iters[0].__anext__() harvester, harvester_server = await node_iters[1].__anext__() farmer, farmer_server = await node_iters[2].__anext__() timelord, timelord_server = await node_iters[3].__anext__() vdf = await node_iters[4].__anext__() node1, node1_server = await node_iters[5].__anext__() node2, node2_server = await node_iters[6].__anext__() await harvester_server.start_client( PeerInfo("127.0.0.1", uint16(farmer_server._port)), None) await farmer_server.start_client( PeerInfo("127.0.0.1", uint16(node1_server._port)), None) await timelord_server.start_client( PeerInfo("127.0.0.1", uint16(node1_server._port)), None) yield (node1, node2) for node_iter in node_iters: try: await node_iter.__anext__() except StopAsyncIteration: pass
async def setup_full_system(dic={}): node_iters = [ setup_introducer(21233), setup_harvester(21234, dic), setup_farmer(21235, dic), setup_timelord(21236, dic), setup_vdf_clients(8000), setup_full_node("blockchain_test.db", 21237, 21233, dic), setup_full_node("blockchain_test_2.db", 21238, 21233, dic), ] introducer, introducer_server = await node_iters[0].__anext__() harvester, harvester_server = await node_iters[1].__anext__() farmer, farmer_server = await node_iters[2].__anext__() timelord, timelord_server = await node_iters[3].__anext__() vdf = await node_iters[4].__anext__() node1, node1_server = await node_iters[5].__anext__() node2, node2_server = await node_iters[6].__anext__() await harvester_server.start_client(PeerInfo("127.0.0.1", uint16(farmer_server._port)), auth=True) await farmer_server.start_client( PeerInfo("127.0.0.1", uint16(node1_server._port))) await timelord_server.start_client( PeerInfo("127.0.0.1", uint16(node1_server._port))) yield (node1, node2, harvester, farmer, introducer, timelord, vdf) await _teardown_nodes(node_iters)
async def setup_farmer( port, consensus_constants: ConsensusConstants, full_node_port: Optional[uint16] = None, ): config = load_config(bt.root_path, "config.yaml", "farmer") config_pool = load_config(bt.root_path, "config.yaml", "pool") config["xch_target_puzzle_hash"] = bt.farmer_ph.hex() config["pool_public_keys"] = [bytes(pk).hex() for pk in bt.pool_pubkeys] config_pool["xch_target_puzzle_hash"] = bt.pool_ph.hex() if full_node_port: connect_peers = [PeerInfo(self_hostname, full_node_port)] else: connect_peers = [] api = Farmer(config, config_pool, bt.keychain, consensus_constants) started = asyncio.Event() async def start_callback(): nonlocal started started.set() service = Service( root_path=bt.root_path, api=api, node_type=NodeType.FARMER, advertised_port=port, service_name="farmer", server_listen_ports=[port], on_connect_callback=api._on_connect, connect_peers=connect_peers, auth_connect_peers=False, start_callback=start_callback, parse_cli_args=False, ) run_task = asyncio.create_task(service.run()) await started.wait() yield api, api.server service.stop() await run_task
async def setup_timelord(port, full_node_port, sanitizer, consensus_constants: ConsensusConstants): config = load_config(bt.root_path, "config.yaml", "timelord") config["sanitizer_mode"] = sanitizer if sanitizer: config["vdf_server"]["port"] = 7999 api = Timelord(config, consensus_constants.DISCRIMINANT_SIZE_BITS) started = asyncio.Event() async def start_callback(): await api._start() nonlocal started started.set() def stop_callback(): api._close() async def await_closed_callback(): await api._await_closed() service = Service( root_path=bt.root_path, api=api, node_type=NodeType.TIMELORD, advertised_port=port, service_name="timelord", server_listen_ports=[port], connect_peers=[PeerInfo(self_hostname, full_node_port)], auth_connect_peers=False, start_callback=start_callback, stop_callback=stop_callback, await_closed_callback=await_closed_callback, parse_cli_args=False, ) run_task = asyncio.create_task(service.run()) await started.wait() yield api, api.server service.stop() await run_task
async def setup_harvester(port, farmer_port, consensus_constants: ConsensusConstants): kwargs = service_kwargs_for_harvester(bt.root_path, bt.config["harvester"], consensus_constants) kwargs.update( server_listen_ports=[port], advertised_port=port, connect_peers=[PeerInfo(self_hostname, farmer_port)], parse_cli_args=False, ) service = Service(**kwargs) await service.start() yield service._api, service._api.server service.stop() await service.wait_closed()
async def setup_harvester(port, farmer_port, dic={}): test_constants_copy = test_constants.copy() for k in dic.keys(): test_constants_copy[k] = dic[k] api = Harvester(bt.root_path, test_constants_copy) started = asyncio.Event() async def start_callback(): await api._start() nonlocal started started.set() def stop_callback(): api._close() async def await_closed_callback(): await api._await_closed() service = Service( root_path=bt.root_path, api=api, node_type=NodeType.HARVESTER, advertised_port=port, service_name="harvester", server_listen_ports=[port], connect_peers=[PeerInfo(self_hostname, farmer_port)], auth_connect_peers=True, start_callback=start_callback, stop_callback=stop_callback, await_closed_callback=await_closed_callback, parse_cli_args=False, ) run_task = asyncio.create_task(service.run()) await started.wait() yield api, api.server service.stop() await run_task
async def setup_full_node( consensus_constants: ConsensusConstants, db_name, port, introducer_port=None, simulator=False, send_uncompact_interval=30, ): db_path = bt.root_path / f"{db_name}" if db_path.exists(): db_path.unlink() config = load_config(bt.root_path, "config.yaml", "full_node") config["database_path"] = db_name config["send_uncompact_interval"] = send_uncompact_interval periodic_introducer_poll = None if introducer_port is not None: periodic_introducer_poll = ( PeerInfo(self_hostname, introducer_port), 30, config["target_peer_count"], ) if not simulator: api: FullNode = FullNode( config=config, root_path=bt.root_path, consensus_constants=consensus_constants, name=f"full_node_{port}", ) else: api = FullNodeSimulator( config=config, root_path=bt.root_path, consensus_constants=consensus_constants, name=f"full_node_sim_{port}", bt=bt, ) started = asyncio.Event() async def start_callback(): await api._start() nonlocal started started.set() def stop_callback(): api._close() async def await_closed_callback(): await api._await_closed() service = Service( root_path=bt.root_path, api=api, node_type=NodeType.FULL_NODE, advertised_port=port, service_name="full_node", server_listen_ports=[port], auth_connect_peers=False, on_connect_callback=api._on_connect, start_callback=start_callback, stop_callback=stop_callback, await_closed_callback=await_closed_callback, periodic_introducer_poll=periodic_introducer_poll, parse_cli_args=False, ) run_task = asyncio.create_task(service.run()) await started.wait() yield api, api.server service.stop() await run_task if db_path.exists(): db_path.unlink()
async def setup_wallet_node( port, consensus_constants: ConsensusConstants, full_node_port=None, introducer_port=None, key_seed=None, starting_height=None, ): config = load_config(bt.root_path, "config.yaml", "wallet") if starting_height is not None: config["starting_height"] = starting_height config["initial_num_public_keys"] = 5 entropy = token_bytes(32) keychain = Keychain(entropy.hex(), True) keychain.add_private_key(bytes_to_mnemonic(entropy), "") first_pk = keychain.get_first_public_key() assert first_pk is not None db_path_key_suffix = str(first_pk.get_fingerprint()) db_name = f"test-wallet-db-{port}" db_path = bt.root_path / f"test-wallet-db-{port}-{db_path_key_suffix}" if db_path.exists(): db_path.unlink() config["database_path"] = str(db_name) config["testing"] = True api = WalletNode( config, keychain, bt.root_path, consensus_constants=consensus_constants, name="wallet1", ) periodic_introducer_poll = None if introducer_port is not None: periodic_introducer_poll = ( PeerInfo(self_hostname, introducer_port), 30, config["target_peer_count"], ) connect_peers: List[PeerInfo] = [] if full_node_port is not None: connect_peers = [PeerInfo(self_hostname, full_node_port)] started = asyncio.Event() async def start_callback(): await api._start(new_wallet=True) nonlocal started started.set() def stop_callback(): api._close() async def await_closed_callback(): await api._await_closed() service = Service( root_path=bt.root_path, api=api, node_type=NodeType.WALLET, advertised_port=port, service_name="wallet", server_listen_ports=[port], connect_peers=connect_peers, auth_connect_peers=False, on_connect_callback=api._on_connect, start_callback=start_callback, stop_callback=stop_callback, await_closed_callback=await_closed_callback, periodic_introducer_poll=periodic_introducer_poll, parse_cli_args=False, ) run_task = asyncio.create_task(service.run()) await started.wait() yield api, api.server service.stop() await run_task if db_path.exists(): db_path.unlink() keychain.delete_all_keys()