# See docs/installing.md

build: localnet haveno

clean:
	./gradlew clean

clean-localnet:
	rm -rf .localnet

localnet:
	mkdir -p .localnet

haveno:
	./gradlew build

update-dependencies:
	./gradlew --refresh-dependencies && ./gradlew --write-verification-metadata sha256

# build haveno without tests
skip-tests: localnet
	./gradlew build -x test -x checkstyleMain -x checkstyleTest

# quick build desktop and daemon apps without tests
haveno-apps:
	./gradlew :core:compileJava :desktop:build -x test -x checkstyleMain -x checkstyleTest

refresh-deps:
	./gradlew --write-verification-metadata sha256 && ./gradlew build --refresh-keys --refresh-dependencies -x test -x checkstyleMain -x checkstyleTest

deploy-screen:
	# create a new screen session named 'localnet'
	screen -dmS localnet
	# deploy each node in its own named screen window
	for target in \
		seednode-local \
		user1-desktop-local \
		user2-desktop-local \
		arbitrator-desktop-local; do \
			screen -S localnet -X screen -t $$target; \
			screen -S localnet -p $$target -X stuff "make $$target\n"; \
		done;
	# give time to start
	sleep 5

deploy-tmux:
	# Start a new tmux session named 'localnet' (detached)
	tmux new-session -d -s localnet -n main "make seednode-local"
	# Split the window into panes and run each node in its own pane
	tmux split-window -h -t localnet "make user1-desktop-local"  # Split horizontally for user1
	tmux split-window -v -t localnet:0.0 "make user2-desktop-local"  # Split vertically on the left for user2
	tmux split-window -v -t localnet:0.1 "make arbitrator-desktop-local"  # Split vertically on the right for arbitrator
	tmux select-layout -t localnet tiled
	# give time to start
	sleep 5
	# Attach to the tmux session
	tmux attach-session -t localnet

.PHONY: build seednode localnet

# Local network

monerod1-local:
	./.localnet/monerod \
		--testnet \
		--no-igd \
		--hide-my-port \
		--data-dir .localnet/xmr_local/node1 \
		--p2p-bind-ip 127.0.0.1 \
		--log-level 0 \
		--add-exclusive-node 127.0.0.1:48080 \
		--add-exclusive-node 127.0.0.1:58080 \
		--rpc-access-control-origins http://localhost:8080 \
		--fixed-difficulty 500 \
		--disable-rpc-ban \

monerod2-local:
	./.localnet/monerod \
		--testnet \
		--no-igd \
		--hide-my-port \
		--data-dir .localnet/xmr_local/node2 \
		--p2p-bind-ip 127.0.0.1 \
		--p2p-bind-port 48080 \
		--rpc-bind-port 48081 \
		--zmq-rpc-bind-port 48082 \
		--log-level 0 \
		--confirm-external-bind \
		--add-exclusive-node 127.0.0.1:28080 \
		--add-exclusive-node 127.0.0.1:58080 \
		--rpc-access-control-origins http://localhost:8080 \
		--fixed-difficulty 500 \
		--disable-rpc-ban \

monerod3-local:
	./.localnet/monerod \
		--testnet \
		--no-igd \
		--hide-my-port \
		--data-dir .localnet/xmr_local/node3 \
		--p2p-bind-ip 127.0.0.1 \
		--p2p-bind-port 58080 \
		--rpc-bind-port 58081 \
		--zmq-rpc-bind-port 58082 \
		--log-level 0 \
		--confirm-external-bind \
		--add-exclusive-node 127.0.0.1:28080 \
		--add-exclusive-node 127.0.0.1:48080 \
		--rpc-access-control-origins http://localhost:8080 \
		--fixed-difficulty 500 \
		--disable-rpc-ban \

#--proxy 127.0.0.1:49775 \

funding-wallet-local:
	./.localnet/monero-wallet-rpc \
		--testnet \
		--daemon-address http://localhost:28081 \
		--rpc-bind-port 28084 \
		--rpc-login rpc_user:abc123 \
		--rpc-access-control-origins http://localhost:8080 \
		--wallet-dir ./.localnet \

funding-wallet-stagenet:
	./.localnet/monero-wallet-rpc \
		--stagenet \
		--rpc-bind-port 38084 \
		--rpc-login rpc_user:abc123 \
		--rpc-access-control-origins http://localhost:8080 \
		--wallet-dir ./.localnet \
		--daemon-ssl-allow-any-cert \
		--daemon-address http://127.0.0.1:38081 \

funding-wallet-mainnet:
	./.localnet/monero-wallet-rpc \
		--rpc-bind-port 18084 \
		--rpc-login rpc_user:abc123 \
		--rpc-access-control-origins http://localhost:8080 \
		--wallet-dir ./.localnet \

# use .bat extension for windows binaries
APP_EXT :=
ifeq ($(OS),Windows_NT)
	APP_EXT := .bat
endif

seednode-local:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=2002 \
		--appName=haveno-XMR_LOCAL_Seed_2002 \
		--xmrNode=http://localhost:28081 \

seednode2-local:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=2003 \
		--appName=haveno-XMR_LOCAL_Seed_2003 \
		--xmrNode=http://localhost:28081 \

arbitrator-daemon-local:
	# Arbitrator needs to be registered before making trades
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=4444 \
		--appName=haveno-XMR_LOCAL_arbitrator \
		--apiPassword=apitest \
		--apiPort=9998 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

arbitrator-desktop-local:
	# Arbitrator needs to be registered before making trades
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=4444 \
		--appName=haveno-XMR_LOCAL_arbitrator \
		--apiPassword=apitest \
		--apiPort=9998 \
		--useNativeXmrWallet=false \

arbitrator2-daemon-local:
	# Arbitrator needs to be registered before making trades
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=7777 \
		--appName=haveno-XMR_LOCAL_arbitrator2 \
		--apiPassword=apitest \
		--apiPort=10001 \
		--useNativeXmrWallet=false \

arbitrator2-desktop-local:
	# Arbitrator needs to be registered before making trades
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=7777 \
		--appName=haveno-XMR_LOCAL_arbitrator2 \
		--apiPassword=apitest \
		--apiPort=10001 \
		--useNativeXmrWallet=false \

user1-daemon-local:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=5555 \
		--appName=haveno-XMR_LOCAL_user1 \
		--apiPassword=apitest \
		--apiPort=9999 \
		--walletRpcBindPort=38091 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

user1-desktop-local:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=5555 \
		--appName=haveno-XMR_LOCAL_user1 \
		--apiPassword=apitest \
		--apiPort=9999 \
		--walletRpcBindPort=38091 \
		--logLevel=info \
		--useNativeXmrWallet=false \

user2-desktop-local:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=6666 \
		--appName=haveno-XMR_LOCAL_user2 \
		--apiPassword=apitest \
		--apiPort=10000 \
		--walletRpcBindPort=38092 \
		--useNativeXmrWallet=false \

user2-daemon-local:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=6666 \
		--appName=haveno-XMR_LOCAL_user2 \
		--apiPassword=apitest \
		--apiPort=10000 \
		--walletRpcBindPort=38092 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

user3-desktop-local:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=7778 \
		--appName=haveno-XMR_LOCAL_user3 \
		--apiPassword=apitest \
		--apiPort=10002 \
		--walletRpcBindPort=38093 \
		--useNativeXmrWallet=false \

user3-daemon-local:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_LOCAL \
		--useLocalhostForP2P=true \
		--useDevPrivilegeKeys=true \
		--nodePort=7778 \
		--appName=haveno-XMR_LOCAL_user3 \
		--apiPassword=apitest \
		--apiPort=10002 \
		--walletRpcBindPort=38093 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

# Stagenet network

monerod-stagenet:
	./.localnet/monerod \
		--stagenet \
		--bootstrap-daemon-address auto \
		--rpc-access-control-origins http://localhost:8080 \

monerod-stagenet-custom:
	./.localnet/monerod \
		--stagenet \
		--no-zmq \
		--p2p-bind-port 39080 \
		--rpc-bind-port 39081 \
		--bootstrap-daemon-address auto \
		--rpc-access-control-origins http://localhost:8080 \

seednode-stagenet:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=3002 \
		--appName=haveno-XMR_STAGENET_Seed_3002 \
		--xmrNode=http://127.0.0.1:38081 \

seednode2-stagenet:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=3003 \
		--appName=haveno-XMR_STAGENET_Seed_3003 \
		--xmrNode=http://127.0.0.1:38081 \

arbitrator-daemon-stagenet:
	# Arbitrator needs to be registered before making trades
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_arbitrator \
		--apiPassword=apitest \
		--apiPort=3200 \
		--passwordRequired=false \
		--xmrNode=http://127.0.0.1:38081 \
		--useNativeXmrWallet=false \

# Arbitrator needs to be registered before making trades
arbitrator-desktop-stagenet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_arbitrator \
		--apiPassword=apitest \
		--apiPort=3200 \
		--xmrNode=http://127.0.0.1:38081 \
		--useNativeXmrWallet=false \

user1-daemon-stagenet:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_user1 \
		--apiPassword=apitest \
		--apiPort=3201 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

user1-desktop-stagenet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_user1 \
		--apiPassword=apitest \
		--apiPort=3201 \
		--useNativeXmrWallet=false \

user2-daemon-stagenet:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_user2 \
		--apiPassword=apitest \
		--apiPort=3202 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \

user2-desktop-stagenet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_user2 \
		--apiPassword=apitest \
		--apiPort=3202 \
		--useNativeXmrWallet=false \

user3-desktop-stagenet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_STAGENET_user3 \
		--apiPassword=apitest \
		--apiPort=3203 \
		--useNativeXmrWallet=false \

haveno-desktop-stagenet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_STAGENET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=Haveno \
		--apiPassword=apitest \
		--apiPort=3204 \
		--useNativeXmrWallet=false \

# Mainnet network

monerod:
	./.localnet/monerod \
		--bootstrap-daemon-address auto \
		--rpc-access-control-origins http://localhost:8080 \

seednode:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=1002 \
		--appName=haveno-XMR_MAINNET_Seed_1002 \
		--xmrNode=http://127.0.0.1:18081 \

seednode2:
	./haveno-seednode$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=1003 \
		--appName=haveno-XMR_MAINNET_Seed_1003 \
		--xmrNode=http://127.0.0.1:18081 \

arbitrator-daemon-mainnet:
	# Arbitrator needs to be registered before making trades
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_arbitrator \
		--apiPassword=apitest \
		--apiPort=1200 \
		--passwordRequired=false \
		--xmrNode=http://127.0.0.1:18081 \
		--useNativeXmrWallet=false \

arbitrator-desktop-mainnet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_arbitrator \
		--apiPassword=apitest \
		--apiPort=1200 \
		--xmrNode=http://127.0.0.1:18081 \
		--useNativeXmrWallet=false \

haveno-daemon-mainnet:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=Haveno \
		--apiPassword=apitest \
		--apiPort=1201 \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

haveno-desktop-mainnet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=Haveno \
		--apiPassword=apitest \
		--apiPort=1201 \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

user1-daemon-mainnet:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_user1 \
		--apiPassword=apitest \
		--apiPort=1202 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

user1-desktop-mainnet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_user1 \
		--apiPassword=apitest \
		--apiPort=1202 \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

user2-daemon-mainnet:
	./haveno-daemon$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_user2 \
		--apiPassword=apitest \
		--apiPort=1203 \
		--passwordRequired=false \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

user2-desktop-mainnet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_user2 \
		--apiPassword=apitest \
		--apiPort=1203 \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \

user3-desktop-mainnet:
	./haveno-desktop$(APP_EXT) \
		--baseCurrencyNetwork=XMR_MAINNET \
		--useLocalhostForP2P=false \
		--useDevPrivilegeKeys=false \
		--nodePort=9999 \
		--appName=haveno-XMR_MAINNET_user3 \
		--apiPassword=apitest \
		--apiPort=1204 \
		--useNativeXmrWallet=false \
		--ignoreLocalXmrNode=false \