# # 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 11 to build and run Bisq binaries; see # https://jdk.java.net/archive/ # # # 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+D # 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+N 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 Bisq binaries and shell scripts used in the targets below build: seednode/build desktop/build seednode/build: ./gradlew :seednode:build desktop/build: ./gradlew :desktop: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-XMR_STAGENET_Alice_dao .localnet/alice mv .localnet/bisq-XMR_STAGENET_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 manually run each of the targets listed below # commands manually in a separate terminal or as background jobs. deploy: setup # create a new screen session named 'localnet' screen -dmS localnet # deploy each node in its own named screen window for target in \ bitcoind \ seednode \ seednode2 \ alice \ bob \ mediator; do \ screen -S localnet -X screen -t $$target; \ screen -S localnet -p $$target -X stuff "make $$target\n"; \ done; # give bitcoind rpc server time to start sleep 5 # generate a block to ensure Bisq nodes get dao-synced make block # Undeploy a running localnet by killing all Bitcoin and Bisq # node processes, then killing the localnet screen session altogether undeploy: # kill all Bitcoind and Bisq nodes running in screen windows screen -S localnet -X at "#" stuff "^C" # quit all screen windows which results in killing the session screen -S localnet -X at "#" kill bitcoind: .localnet bitcoind \ -regtest \ -prune=0 \ -txindex=1 \ -peerbloomfilters=1 \ -server \ -rpcuser=bisqdao \ -rpcpassword=bsq \ -datadir=.localnet/bitcoind \ -blocknotify='.localnet/bitcoind/blocknotify %s' seednode: seednode/build ./bisq-seednode \ --baseCurrencyNetwork=XMR_STAGENET \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --fullDaoNode=true \ --rpcUser=bisqdao \ --rpcPassword=bsq \ --rpcBlockNotificationPort=5120 \ --nodePort=2002 \ --userDataDir=.localnet \ --appName=seednode seednode2: seednode/build ./bisq-seednode \ --baseCurrencyNetwork=XMR_STAGENET \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --fullDaoNode=true \ --rpcUser=bisqdao \ --rpcPassword=bsq \ --rpcBlockNotificationPort=5121 \ --nodePort=3002 \ --userDataDir=.localnet \ --appName=seednode2 mediator: desktop/build ./bisq-desktop \ --baseCurrencyNetwork=XMR_STAGENET \ --useLocalhostForP2P=true \ --useDevPrivilegeKeys=true \ --nodePort=4444 \ --appDataDir=.localnet/mediator \ --appName=Mediator alice: setup ./bisq-desktop \ --baseCurrencyNetwork=XMR_STAGENET \ --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=XMR_STAGENET \ --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 # Generate more than 1 block. # Instead of running `make block` 24 times, # you can now run `make blocks n=24` blocks: bitcoin-cli \ -regtest \ -rpcuser=bisqdao \ -rpcpassword=bsq \ getnewaddress \ | xargs bitcoin-cli \ -regtest \ -rpcuser=bisqdao \ -rpcpassword=bsq \ generatetoaddress $(n) .PHONY: build seednode