chia-blockchain/src/server/start_farmer.py

63 lines
2.0 KiB
Python

import asyncio
import signal
import logging
try:
import uvloop
except ImportError:
uvloop = None
from src.farmer import Farmer
from src.server.outbound_message import NodeType
from src.server.server import ChiaServer
from src.types.peer_info import PeerInfo
from src.util.config import load_config, load_config_cli
from src.util.default_root import DEFAULT_ROOT_PATH
from src.util.logging import initialize_logging
from src.util.setproctitle import setproctitle
async def main():
root_path = DEFAULT_ROOT_PATH
net_config = load_config(root_path, "config.yaml")
config = load_config_cli(root_path, "config.yaml", "farmer")
try:
key_config = load_config(root_path, "keys.yaml")
except FileNotFoundError:
raise RuntimeError("Keys not generated. Run chia-generate-keys")
initialize_logging("Farmer %(name)-25s", config["logging"])
log = logging.getLogger(__name__)
setproctitle("chia_farmer")
farmer = Farmer(config, key_config)
harvester_peer = PeerInfo(
config["harvester_peer"]["host"], config["harvester_peer"]["port"]
)
full_node_peer = PeerInfo(
config["full_node_peer"]["host"], config["full_node_peer"]["port"]
)
ping_interval = net_config.get("ping_interval")
network_id = net_config.get("network_id")
server = ChiaServer(config["port"], farmer, NodeType.FARMER, ping_interval, network_id)
asyncio.get_running_loop().add_signal_handler(signal.SIGINT, server.close_all)
asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, server.close_all)
_ = await server.start_server(farmer._on_connect, config)
await asyncio.sleep(1) # Prevents TCP simultaneous connect with harvester
_ = await server.start_client(harvester_peer, None, config)
_ = await server.start_client(full_node_peer, None, config)
farmer.set_server(server)
farmer._start_bg_tasks()
await server.await_closed()
farmer._shut_down = True
log.info("Farmer fully closed.")
if uvloop is not None:
uvloop.install()
asyncio.run(main())