
Use of the Spring Environment ----------------------------- This change replaces the use of the argparse4j library and basic Properties objects with the Spring Framework's Environment abstraction. The Environment allows for managing any number of 'property sources' in a hierarchical fashion, such that a call to `environment.getProperty("someKey")` iterates through an ordered set of property sources, returning the first value associated with the given key. BitsquareEnvironment, introduced in this commit, eliminates the functionality previously present in ConfigLoader, modeling the bitsquare.conf and bitsquare.properties files as Spring Resource objects, and in turn creating ResourcePropertySources out of them. These custom property sources are combined with standard property sources based on system environment variables and Java system properties as well as a property source based on the command-line arguments passed to a Bitsquare application to form a unified, one-stop configuration hierarchy. For example, let's say a Bitsquare user wishes to customize the port that his Bitsquare application listens on. The simplest approach (assuming the user is comfortable with the command line), would be the following: java -jar bitsquare.jar --port=1234 where '1234' is the custom port of choice. This is convenient enough for one-off experimentation, but if the user wishes to make this a permanent arrangement, he may want to add a `port=1234` entry to his {bitsquare_app_dir}/bitsquare.conf file. Alternatively, the user may wish to specify the port value as an environment variable, e.g.: PORT=1234 java -jar bitsquare.jar or with a JVM system property, e.g.: java -jar -DPORT=1234 bitsquare.jar With BitsquareEnvironment, and its customized set of PropertySources in place, the value of the port property may be specified in any of the ways described above, and it is all handled in a unified way. Restructuring of *Main classes ------------------------------ This commit also introduces significant changes to the structure of executable Bitsquare applications. For example, prior to this change, the io.bitsquare.app.gui.Main class was responsible for being both a JavaFX Application and a standard Java main class. Now, however, these concerns have been renamed and separated. BitsquareApp is the JavaFX Application, and BitsquareAppMain is the Java main class. Likewise, BootstrapNode has been broken out into BootstrapNode and BootstrapNodeMain. A common base class for the *Main classes has been extracted, named BitsquareExecutable, which creates a template for option parsing, environment creation, and ultimately application execution that applies both to the BootstrapNode and BitsquareApp cases. Improved help text ------------------ With the removal of argparse4j and the introduction of JOpt for argument parsing, the application's help text has been improved. Use --help to display this text, where you'll see information about default values, etc. To do this easily from the Gradle build, run any of the following commands: # Display help text ./gradlew run -Pargs="--help" # Qualify the application name as "Bitsquare-Alice" ./gradlew run -Pargs="--appName=Alice" # Customize the port ./gradlew run -Pargs="--port=7377" Renaming of FatalException -------------------------- Finally, the exception formerly known as io.bitsquare.gui.FatalException has been moved up a package and generalized to io.bitsquare.BitsquareException, as it is now used more widely.

What is Bitsquare?
Bitsquare is a cross-platform desktop application that allows users to trade fiat money (dollars, euros, etc) for bitcoin without relying on centralized exchanges such as Coinbase, Bitstamp or (the former) Mt. Gox.
By running Bitsquare on their local machines, users form a peer-to-peer network. Offers to buy and sell bitcoin are broadcast to that network, and through the process of offering and accepting these trades via the Bitsquare UI, a market is established.
There are no central points of control or failure in the Bitsquare network. There are no trusted third parties. When two parties agree to trade fiat money for bitcoin, the bitcoin to be bought or sold is held in escrow using multisignature transaction capabilities native to the bitcoin protocol.
Because the fiat money portion of any trade must be transferred via traditional means such as a wire transfer, Bitsquare incorporates first-class support for human arbitration to resolve any errors or disputes.
You can read about all of this and more in the overview, whitepaper, arbitration and risk analysis documents. Several screencasts are available as well.
Status
The team is currently working on a series of pre-releases on the way to version 1.0. See the roadmap for details.
Alpha testers welcome! Please see the instructions for alpha testing, where you'll find detailed information about downloading and using our native installers, building from source and more.
Staying in Touch
Contact the team and keep up to date using any of the following:
- The Bitsquare Website
- The #bitsquare IRC channel on Freenode (logs)
- Our mailing list
- @bitsquare_ on Twitter
- Get in contact with us
- GitHub Issues
License
Bitsquare is free software, licensed under version 3 of the GNU Affero General Public License.
In short, this means you are free to fork this repository and do anything with it that you please. However, if you distribute your changes, i.e. create your own build of the software and make it available for others to use, you must:
- Publish your changes under the same license, so as to ensure the software remains free.
- Use a name and logo substantially different than "Bitsquare" and the Bitsquare logo seen here. This allows for competition without confusion.
See LICENSE for complete details.