# # INTRODUCTION # # This makefile is designed to help Bisq contributors get up and running # as quickly as possible with a local regtest Bisq network deployment, # or 'localnet' for short. A localnet is a complete and self-contained # "mini Bisq network" suitable for development and end-to-end testing # efforts. # # # REQUIREMENTS # # You'll need the following to proceed: # # - Linux, macOS or similar *nix with standard tools like `make` # - bitcoind and bitcoin-cli (`brew install bitcoin` on macOS) # - JDK 10 to build and run Bisq binaries; see # https://www.oracle.com/java/technologies/java-archive-javase10-downloads.html # # # USAGE # # The following commands (and a couple manual instructions) will get your # localnet up and running quickly. # # STEP 1: Build all Bisq binaries and set up localnet resources. This will # take a few minutes the first time through. # # $ make # # Notes: # # - When complete, you'll have a number of scripts available in the # root directory. They will be used in the make targets below to start # the various Bisq seed and desktop nodes that will make up your # localnet: # # $ ls -1 bisq-* # bisq-desktop # bisq-monitor # bisq-pricenode # bisq-relay # bisq-seednode # bisq-statsnode # # - You will see a new '.localnet' directory containing the data dirs # for your regtest Bitcoin and Bisq nodes. Once you've deployed # them in the step below, the directory will look as follows: # # $ tree -d -L 1 .localnet # .localnet # ├── alice # ├── bitcoind # ├── bob # ├── mediator # ├── seednode # └── seednode2 # # STEP 2: Deploy the Bitcoin and Bisq nodes that make up the localnet. # Run each of the following in a SEPARATE TERMINAL WINDOW, as they are # long-running processes. # # $ make bitcoind # $ make seednode # $ make seednode2 # $ make mediator # $ make alice # $ make bob # # Tip: Those familiar with the `screen` terminal multiplexer can # automate the above by running the `deploy` target found below. # # Notes: # # - The 'seednode' targets launch headless Bisq nodes that help # desktop nodes discover other peers, as well as storing and # forwarding p2p network messages for nodes as they go on and # offline. # # - As you run the 'mediator', 'alice' and 'bob' targets above, # you'll see a Bisq desktop node window appear for each. The Alice # and Bob instances represent two traders who can make and take # offers with one another. The Mediator instance represents a Bisq # contributor who can help resolve any technical problems or disputes # that come up between the two traders. # # STEP 3: Configure the mediator Bisq node. In order to make and take # offers, Alice and Bob will need to have a mediator and a refund agent # registered on the network. Follow the instructions below to complete # that process: # # a) Go to the Account screen in the Mediator instance and press CMD+N # and a popup will appear. Click 'Unlock' and then click 'Register' to # register the instance as a mediator. # # b) While still in the Account screen, press CMD+D and follow the same # steps as above to register the instance as a refund agent. # # When the steps above are complete, your localnet should be up and # ready to use. You can now test in isolation all Bisq features and use # cases. # # Set up everything necessary for deploying your localnet. This is the # default target. setup: build .localnet clean: clean-build clean-localnet clean-build: ./gradlew clean clean-localnet: rm -rf .localnet ./dao-setup # Build all Bisq binaries and generate the shell scripts used to run # them in the targets below build: ./gradlew build # Unpack and customize a Bitcoin regtest node and Alice and Bob Bisq # nodes that have been preconfigured with a blockchain containing the # BSQ genesis transaction .localnet: # Unpack the old dao-setup.zip and move things around for more concise # and intuitive naming. This is a temporary measure until we clean these # resources up more thoroughly. unzip docs/dao-setup.zip mv dao-setup .localnet mv .localnet/Bitcoin-regtest .localnet/bitcoind mv .localnet/bisq-BTC_REGTEST_Alice_dao .localnet/alice mv .localnet/bisq-BTC_REGTEST_Bob_dao .localnet/bob # Remove the preconfigured bitcoin.conf in favor of explicitly # parameterizing the invocation of bitcoind in the target below rm -v .localnet/bitcoind/bitcoin.conf # Avoid spurious 'runCommand' errors in the bitcoind log when nc # fails to bind to one of the listed block notification ports echo exit 0 >> .localnet/bitcoind/blocknotify # Alias '.localnet' to 'localnet' so the target is discoverable in tab # completion localnet: .localnet # Deploy a complete localnet by running all required Bitcoin and Bisq # nodes, each in their own named screen window. If you are not a screen # user, you'll need to run each of the make commands manually in a # separate terminal or as a background job. # # NOTE: You MUST already be attached to a screen session for the # following commands to work properly. deploy: setup screen -t bitcoin make bitcoind sleep 2 # wait for bitcoind rpc server to start make block # generate a block to ensure Bisq nodes get dao-synced screen -t seednode make seednode screen -t seednode2 make seednode2 screen -t alice make alice screen -t bob make bob screen -t mediator make mediator bitcoind: .localnet bitcoind \ -regtest \ -prune=0 \ -txindex=1 \ -server \ -rpcuser=bisqdao \ -rpcpassword=bsq \ -datadir=.localnet/bitcoind \ -blocknotify='.localnet/bitcoind/blocknotify %s' seednode: build ./bisq-seednode \ --baseCurrencyNetwork=BTC_REGTEST \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --fullDaoNode=true \ --rpcUser=bisqdao \ --rpcPassword=bsq \ --rpcBlockNotificationPort=5120 \ --nodePort=2002 \ --userDataDir=.localnet \ --appName=seednode seednode2: build ./bisq-seednode \ --baseCurrencyNetwork=BTC_REGTEST \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --fullDaoNode=true \ --rpcUser=bisqdao \ --rpcPassword=bsq \ --rpcBlockNotificationPort=5121 \ --nodePort=3002 \ --userDataDir=.localnet \ --appName=seednode2 mediator: build ./bisq-desktop \ --baseCurrencyNetwork=BTC_REGTEST \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --nodePort=4444 \ --appDataDir=.localnet/mediator \ --appName=Mediator alice: setup ./bisq-desktop \ --baseCurrencyNetwork=BTC_REGTEST \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --nodePort=5555 \ --fullDaoNode=true \ --rpcUser=bisqdao \ --rpcPassword=bsq \ --rpcBlockNotificationPort=5122 \ --genesisBlockHeight=111 \ --genesisTxId=30af0050040befd8af25068cc697e418e09c2d8ebd8d411d2240591b9ec203cf \ --appDataDir=.localnet/alice \ --appName=Alice bob: setup ./bisq-desktop \ --baseCurrencyNetwork=BTC_REGTEST \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --nodePort=6666 \ --appDataDir=.localnet/bob \ --appName=Bob # Generate a new block on your Bitcoin regtest network. Requires that # bitcoind is already running. See the `bitcoind` target above. block: bitcoin-cli \ -regtest \ -rpcuser=bisqdao \ -rpcpassword=bsq \ getnewaddress \ | xargs bitcoin-cli \ -regtest \ -rpcuser=bisqdao \ -rpcpassword=bsq \ generatetoaddress 1 .PHONY: build seednode