A decentralized bitcoin exchange network
Find a file
Chris Beams 5fb4b2156c
Refine deploy target for better use of screen
Problem: Prior to this change, it was necessary to first create and
attach to a screen session and then to run `make deploy` within it. This
meant extra steps for the user and was generally error-prone.

Solution: Usage of screen has been refined such that a screen session
named 'localnet' is created on the users behalf without any need to
attach to it. Individual node deployment targets such as `make
bitcoind`, `make alice`, et al. are issued to new windows within the
localnet screen session, and the user is free to attach or not whenever
they choose. The result is that a new user can clone the repository and
type nothing more than `make deploy` to get up and running with their
localnet.

This also reverts the changes in commit 97dd342e5 ("Make build target
phony") for the following reasons:

 - As mentioned in that commit message, Gradle was not deleting the its
   'build' directory when running `gradle clean`, meaning that the
   'build' target was always up-to-date, even after running `make
   clean`. This made it impossible to get a correct rebuild workflow. On
   analysis, howewer, this situation was because of a badly behaving
   Kotlin plugin not cleaning up after itself, leaving a subdirectory at
   build/kotlin and preventing the build directory itself from being
   deleted altogether. To address this, the `make clean` target has been
   updated to `rm -rf build` instead of calling `build gradle`. While
   it's a workaround until we back out the Kotlin changes that caused
   this, it does have the added benefit of being faster than invoking
   `gradle clean`.

 - By making the 'build' target PHONY, this meant that `./gradlew build`
   was getting invoked every time a dependent target was called. For
   example, `make alice` depends on the 'setup' target, which in turn
   depends on the 'build' target. When calling such targets in
   isolation, this arrangement works out fine, because the phony 'build'
   target always runs, invoking `./gradle build`, and the Gradle build
   completes quickly assuming everything is up-to-date. The problem
   arises when calling a number of these targets in rapid succession, as
   we do when calling `make deploy` and running each individual node
   target in its own screen window. This causes contention in two ways.
   The first is that these multiple, simultaneous Gradle processes
   compete for access to an available Gradle daemon, and because each
   process needs its own, it ends up that as many Gradle daemons get
   created as Bisq nodes we need to deploy (5 in total). This is a big
   waste of time and resources. The second way it causes not only
   contention but outright failure is that each of these builds are
   operating in the same directory, and while most aspects of the build
   are in fact up-to-date and therefore not modified in any way, there
   are exceptions to this rule. The result is that build artifacts, e.g.
   jars are getting deleted and rebuilt from underneath competing Gradle
   processes, and all manner of chaos ensues, such as NoClassDefFound
   errors and much more. This change (reverting 'build' back to a
   normal, non-phony target) avoids these problems entirely. When
   running `make deploy`, we run the 'build' target once as a function
   of the 'deploy' target depending on it. At this point, the 'build'
   directory exists, and all subsequent node deployment targets, e.g.
   'alice', 'bob', etc do not re-run the build target because it is
   up-to-date. For workflows where the user definitely wants to rebuild
   prior to redeploying a given node, they can either run `make
   clean-build`, or drop down to issuing Gradle build commands directly,
   e.g. `./gradlew :desktop:build` followed by `make desktop`.
2019-12-02 20:15:02 +01:00
.github Tweak issue template to send users to keybase for support requests (#3535) 2019-10-31 21:24:39 +01:00
.idea Release/v1.2.0 (#3532) 2019-10-31 12:49:26 +01:00
assets/src List LBRY Credits (LBC) 2019-10-18 07:33:38 -06:00
common/src P2PDataStorage and FileManager improvements (#3690) 2019-11-26 14:34:32 +01:00
core Reputation BSQ added to BSQ Wallet screen (#3366) 2019-11-26 15:50:35 +01:00
desktop Reputation BSQ added to BSQ Wallet screen (#3366) 2019-11-26 15:50:35 +01:00
docs Fix typos and cleanup 2019-11-20 01:24:48 +02:00
gradle Merge pull request #3585 from blabno/sort-gradle-witness 2019-11-20 10:37:50 +01:00
monitor Get monitor up to speed again (#3633) 2019-11-21 09:42:40 +01:00
p2p/src Refactor checkMaxConnections (#3126) 2019-11-26 15:16:07 +01:00
pricenode Replace bouncycastle Hex with guava Hex 2019-09-03 13:54:32 +02:00
relay Fix typos and cleanup 2019-11-21 11:17:48 +02:00
scripts Add shell script for creating DAO genesis transaction 2019-06-24 13:15:37 -07:00
seednode Add missing blocknotify.sh script and README instructions 2019-11-17 04:29:49 -10:00
statsnode/src/main Sync up code with SeedNodeMain 2019-04-16 18:00:09 -05:00
.editorconfig Update .editorconfig to use hard tabs in Makefile 2019-12-02 17:52:28 +01:00
.gitattributes Add .gitattributes file 2018-11-15 22:34:05 -08:00
.gitignore Use STATE_DIR := .localnet in makefile 2019-11-30 07:50:59 +01:00
.travis.yml Reformat travis config 2019-08-27 10:44:14 +02:00
build.gradle Upgrade Gradle Shadow plugin from 4.0.2 => 5.2.0 2019-11-19 18:05:14 +01:00
CODEOWNERS Update node operators 2019-05-14 14:25:26 +02:00
CONTRIBUTING.md Fix typos and cleanup 2019-11-21 11:17:48 +02:00
gradle.properties Increase Gradle HTTP timeouts from 30 => 120 seconds 2018-03-22 10:39:52 +01:00
gradlew Bump gradle wrapper to version 5.6.4 (#3627) 2019-11-18 09:31:58 +01:00
gradlew.bat Bump gradle wrapper to version 5.6.4 (#3627) 2019-11-18 09:31:58 +01:00
LICENSE add basic wallet, update nav buttons, move unused img 2014-04-24 16:55:55 +02:00
Makefile Refine deploy target for better use of screen 2019-12-02 20:15:02 +01:00
README.md jdk10 is no longer needed to build and run the test suite 2019-08-14 18:11:57 +02:00
settings.gradle Merge statsnode repository at fc0a288 2018-09-14 11:53:35 +02:00

Bisq

Build Status

What is Bisq?

Bisq is a safe, private and decentralized way to exchange bitcoin for national currencies and other digital assets. Bisq uses peer-to-peer networking and multi-signature escrow to facilitate trading without a third party. Bisq is non-custodial and incorporates a human arbitration system to resolve disputes.

To learn more, see the doc and video at https://bisq.network/intro.

Get started using Bisq

Follow the step-by-step instructions at https://bisq.network/get-started.

Contribute to Bisq

See CONTRIBUTING.md and the developer docs.