Merge pull request #58 from heinrichreimer/update-docs

Update documentation (fixes #39)
This commit is contained in:
Oliver Nitzschke
2017-11-07 07:28:26 +01:00
committed by GitHub
6 changed files with 362 additions and 165 deletions
-61
View File
@@ -1,61 +0,0 @@
== Contributing
*Thank you for your interest in contributing to this project!*
We welcome all contributions and we'd like to help you send your first contribution to us.
For that, this is what we recommend:
1. Look into the existing issues (or create a new one)
1. Discuss the possible solution
1. Code!
1. Test
1. Send a PR
=== Look
Take a look at the existing issues: perhaps there's one already related to the feature you want
to contribute! Otherwise, open a new one, describing the problem and your suggestion for the solution.
For bugs, it would be wonderful if you add a way to reproduce the issue.
=== Discuss
Usually, opening an issue is enough to get a feedback. If you prefer, join us on Slack, under
the `#developers` channel.
=== Code
Once you feel comfortable that the issue has been discussed and a general approach is agreed upon,
it's time to start coding.
First, fork this repository into your own namespace, clone it and add this repository as `upstream`:
```bash
git clone git@github.com:YOUR_USERNAME/iota.lib.java.git
git remote add upstream git@github.com:iotaledger/iota.lib.java.git
```
Then, create a new local branch based off of `master`, like this:
```bash
git fetch upstream
git rebase upstream/master
git checkout -b MyTopicBranch
```
Run a sanity check build with `mvn clean install`. It should complete successfully without errors
or test failures.
If everything worked, then do your changes as desired. Once you are done, run a local build with
`mvn clean install` to make sure nothing is broken. Ideally, your code should include tests for
the bugs you are fixing or for features you are adding. If you don't know how to test, it's OK to
open the PR with a title saying "[wip]" (for Work in Progress). We can guide you on how to write tests.
=== Send
Once your code is ready for a review or if you want feedback, send your branch as a pull request on
GitHub. If your branch is not ready to be merged for some reason, add "[wip]" to the title. It is
expected that all PRs are passing the continuous integration test.
During this process, someone will take a look at your contributions and make comments, ask questions
and suggest different approaches. Even though the reviewer strives to be polite, don't take a
possible criticism personally. After all, we'd really love to get your contribution!
+64
View File
@@ -0,0 +1,64 @@
# Contributing
*Thank you for your interest in contributing to this project!*
We welcome all contributions and we'd like to help you send your first contribution to us.
For that, this is what we recommend:
1. [Look](#look) into the existing [issues][issues] (or [create a new one][new-issue])
1. [Discuss](#discuss) the possible solution
1. [Code!](#code)
1. [Test](#test)
1. [Send](#send) a PR
## Look
Take a look at the [**existing issues**][issues] and linked [pull requests][pull-requests]: perhaps there's one already related to the feature you want to contribute!
Otherwise, [**open a new one**][new-issue], describing the problem and your suggestion for the solution.
For bugs, it would be wonderful if you describe a way to _reproduce the issue_.
## Discuss
Usually, opening an issue is enough to get a feedback. If you prefer, join us on [**Slack**][iota-slack], under
the **#developers** channel.
## Code
Once you feel comfortable that the issue has been discussed and a general approach is agreed upon, it's time to start coding.
First, **fork** this repository into your own namespace, **clone** it and add this repository as `upstream`:
```bash
git clone git@github.com:YOUR_USERNAME/iota.lib.java.git
git remote add upstream git@github.com:iotaledger/iota.lib.java.git
```
Then, create a new **local branch** based off of `master`, like this:
```bash
git fetch upstream
git rebase upstream/master
git checkout -b MyTopicBranch
```
Run a sanity check build with `mvn clean install`. It should complete successfully without errors or test failures.
If everything worked, then do your changes as desired. Once you are done, run a local build with `mvn clean install` to make sure nothing is broken. Ideally, your code should include tests for the bugs you are fixing or for features you are adding. If you don't know how to test, it's OK to open the PR with a title saying "[wip]" (for Work in Progress). We can guide you on how to write tests.
## Test
Once your code is considered ready, run all unit tests, including your own tests.
If any test fails, fix the test issues and retry.
## Send
Once your code is ready for a review or if you want feedback, send your branch as a [pull request on GitHub][new-pull-request]. If your branch is not ready to be merged for some reason, add "[wip]" to the title. It is expected that all PRs are passing the continuous integration test.
During this process, someone will take a look at your contributions and make comments, ask questions and suggest different approaches. Even though the reviewer strives to be polite, don't take a possible criticism personally.
After all, we'd really love to get your contribution!
[issues]: https://github.com/iotaledger/iota.lib.java/issues
[new-issue]: https://github.com/iotaledger/iota.lib.java/issues/new
[pull-requests]: https://github.com/iotaledger/iota.lib.java/pulls
[new-pull-request]: https://github.com/iotaledger/iota.lib.java/compare
[iota-slack]: http://slack.iota.org/
-82
View File
@@ -1,82 +0,0 @@
image:https://travis-ci.org/iotaledger/iota.lib.java.svg?branch=master[link="https://travis-ci.org/iotaledger/iota.lib.java",title="Build Status"]
= Introduction
The JOTA library is a simple Java wrapper around link:http://www.iotatoken.com[IOTA] Node's JSON-REST HTTP interface.
It allows to connect easily using Java directly to a local or a remote
link:https://iota.readme.io/docs/syncing-to-the-network[IOTA node].
- *Latest release:* 0.9.3
- *Compatibility:* fully compatible with IOTA IRI v1.4.0
- *API coverage:* 14 of 14 commands fully implemented
- *License:* Apache License 2.0
- *Readme updated:* 2017-09-23 21:05:02 (UTC)
A list of all *IOTA* JSON-REST API commands currently supported by JOTA wrapper can be found in the `Commands` enum
(see link:https://github.com/davassi/JOTA/blob/master/src/main/java/jota/IotaAPICommands.java[here] for more details).
JOTA java wrapper is being designed to be thread-safe and simplest as possible in order to be easily maintainable,
accordingly with the ongoing natural evolution of IOTA's API. All the boilerplate code for connecting to the node REST
interface has been eliminated using Retrofit.
== Technologies & dependencies
The JOTA library has been designed to be used with Java6+, in order to promote compatibility with Android.
Core dependencies:
- link:https://square.github.io/retrofit/[Retrofit Client 2.1.0]
- link:https://github.com/google/gson[Gson JSON Processor]
- link:https://github.com/rzwitserloot/lombok[Lombok 1.16.2]
Other dependencies:
- link:http://www.slf4j.org/[Simple Logging Facade for Java 1.7.21]
- link:http://commons.apache.org/proper/commons-lang/[Apache Commons Lang 3.3.2]
== Getting started [[getting-started]]
Connecting to your local node with the default settings is quite straightforward: it requires only 2 lines of code.
For example, in order to fetch the Node Info:
IotaAPI api = new IotaAPI.Builder().build();
GetNodeInfoResponse response = api.getNodeInfo();
or if you need to connect to a remote node:
IotaAPI api = new IotaAPI.Builder()
.protocol("http")
.host("somewhere_over_the_rainbow")
.port("14265")
.build();
GetNodeInfoResponse response = api.getNodeInfo();
In order to communicate with *IOTA node*, JOTA needs to be aware of your node's exact configuration. If you don't want
to use the builder, the easiest way of providing this information is via a `node_config.properties` file, for example:
iota.node.protocol=http``****************``
iota.node.host=127.0.0.1
iota.node.port=14265
== Warning
- This is pre-release software!
- There may be performance and stability issues.
- You may loose all your money :)
- Please report any issues using the <a href="https://github.com/iotaledger/iota.lib.java/issues">Issue Tracker</a>
== Examples
There's an extensive list of test coverages on the `src/test/java` directory that can be used as reference.
== Documentation
A hosted version of the javadoc for the latest release can be found [here](https://iotaledger.github.io/iota.lib.java/javadoc/)
== Supporting the project
If JOTA has been useful to you and you feel like contributing, consider posting a bug report or a pull request.
That's it!
+280
View File
@@ -0,0 +1,280 @@
![IOTA Logo][iota-logo]
# IOTA Java Library
[![JitPack][jitpack-badge]][jitpack]
[![Build Status][travis-badge]][travis]
[![License][license-badge]][license]
[![IOTA IRI compatibility][iota-iri-badge]][iota-iri]
[![IOTA API coverage][iota-api-badge]][iota-api]
This is the **official** Java library for the IOTA Core.
It's a simple Java wrapper around IOTA nodes [_JSON-REST HTTP interface_][iota-api]
and allows to connect to a _local_ or a _remote_ IOTA node easily using it's Java API interface.
The IOTA Java wrapper is designed to be **thread-safe** and kept as simple as possible in order to be **easily maintainable**, accordingly with the ongoing natural evolution of IOTAs API.
All the boilerplate code for connecting to the node REST interface has been hidden as implementation detail (using Retrofit 2) — you'll only interact with **pure Java**.
## Table of Contents
1. [Installation](#installation)
1. [Gradle Dependency](#gradle-dependency)
1. [Maven Dependency](#maven-dependency)
1. [Documentation](#documentation)
1. [Getting Started](#getting-started)
1. [Threading](#threading)
1. [Javadoc](#javadoc)
1. [API](#api)
1. [Examples](#examples)
1. [Technologies & dependencies](#technologies--dependencies)
1. [Dependencies](#dependencies)
1. [Changes](#changes)
1. [Disclaimer](#disclaimer)
1. [Supporting the project](#supporting-the-project)
1. [Join the Discussion](#join-the-discussion)
1. [License](#license)
## Installation
The IOTA Java library is available on [**jitpack.io**][jitpack].
### Gradle Dependency
To use the IOTA Java library in your Gradle build add this in your root `build.gradle` file (**not** your module `build.gradle` file):
```gradle
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
```
Add this in your module `build.gradle` file:
```gradle
dependencies {
compile 'com.github.iotaledger:iota.lib.java:v0.9.6'
}
```
### Maven Dependency
To use the IOTA Java library in your Maven build add this to your root `pom.xml` file:
```xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
```
Add this in your module `pom.xml` file:
```xml
<dependency>
<groupId>com.github.iotaledger</groupId>
<artifactId>iota.lib.java</artifactId>
<version>v0.9.6</version>
</dependency>
```
## Documentation
It should be noted that this is a temporary home for the official documentation. We are currently transitioning to a new developer hub, where we will have a dedicated website for the API documentation with concrete examples. The below documentation should be sufficient in enabling you to get started in the meantime.
### Getting Started
After you've successfully installed the library dependency, it is fairly easy to get started by simply creating a new **`IotaAPI` instance** using the `IotaAPI.Builder`.
Connecting to your device's _local node_ with the _default settings_ and fetching the node info is quite straightforward:
```java
IotaAPI api = new IotaAPI.Builder().build();
GetNodeInfoResponse response = api.getNodeInfo();
```
It doesn't get much more complicated if you need to connect to a _remote node_:
```java
IotaAPI api = new IotaAPI.Builder()
.protocol("http")
.host("somewhere_over_the_rainbow")
.port("14265")
.build();
GetNodeInfoResponse response = api.getNodeInfo();
```
In order to separate your node configuration from the implementation, you can also specify node configuration using a [**Java `.properties` file**](https://en.wikipedia.org/wiki/.properties) or command line properties which is very useful if you develop an open-source app which is deployed on a CI and don't want contributors to see the internal node configuration:
```java
iota.node.protocol=http
iota.node.host=127.0.0.1
iota.node.port=14265
```
The node configuration is optional and can have the following values:
1. **`protocol()`/`iota.node.protocol`:** `String`
Protocol to use when connecting to the remote node.
_Default:_ `http`
2. **`host()`/`iota.node.host`:** `String`
Host you want to connect to. Can be DNS, IPv4 or IPv6.
_Default_ `localhost`
3. **`port()`/`iota.node.port`:** `Int`
Port of the host you want to connect to.
_Default:_ `14265`
> **TODO:** Copy this section to the generated Javadoc.
### Threading
It should be noted that most API calls are done **synchronously**.
What this means is that you have to call the API from a background or worker thread, **not** from the main or UI thread!
### Javadoc
A hosted version of the complete [**Javadoc**][javadoc] for the latest release can be found [**here**][javadoc].
If you think there's something missing in the Javadoc, submit an [issue][new-issue] or open a [pull request][new-pull-request].
### API
The IOTA Java library implements both the [**official API**][iota-api], as well as some newly proposed functionality (such as _signing_, _bundles_, _utilities_ and _conversion_).
A full list of all IOTA JSON-REST API commands currently supported by the IOTA Java library can be found in the [commands enum](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPICommands.html#enum.constant.summary).
Here are some of the most commonly used API functions. Each list item below links to its corresponding [**Javadoc**][javadoc] where you can find _method signatures_, _preconditions_, _side-effects_ and _invariants_.
#### [**`IotaAPI`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html)
- [`getTransactionsObjects()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getTransactionsObjects-java.lang.String:A-)
- [`findTransactionObjects()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#findTransactionObjects-java.lang.String:A-)
- [`getLatestInclusion()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getLatestInclusion-java.lang.String:A-)
- [`broadcastAndStore()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#broadcastAndStore-java.lang.String...-)
- [`getNewAddress()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getNewAddress-java.lang.String-int-int-boolean-int-boolean-)
- [`getInputs()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getInputs-java.lang.String-int-int-int-long-)
- [`prepareTransfers()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#prepareTransfers-java.lang.String-int-java.util.List-java.lang.String-java.util.List-boolean-)
- [`sendTrytes()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#sendTrytes-java.lang.String:A-int-int-)
- [`sendTransfer()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#sendTransfer-java.lang.String-int-int-int-java.util.List-jota.model.Input:A-java.lang.String-)
- [`replayBundle()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#replayBundle-java.lang.String-int-int-)
- [`getBundle()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getBundle-java.lang.String-)
- [`getTransfers()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getTransfers-java.lang.String-int-java.lang.Integer-java.lang.Integer-java.lang.Boolean-)
- [`initiateTransfer()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#initiateTransfer-int-java.lang.String-java.lang.String-java.util.List-boolean-)
- [`getAccountData()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/IotaAPI.html#getAccountData-java.lang.String-int-int-boolean-int-boolean-int-int-boolean-long-)
#### [**`IotaUnitConverter`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/IotaUnitConverter.html)
- [`convertUnits()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/IotaUnitConverter.html#convertUnits-long-jota.utils.IotaUnits-jota.utils.IotaUnits-)
#### [**`Checksum`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Checksum.html)
- [`addChecksum()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Checksum.html#addChecksum-java.lang.String-)
- [`removeChecksum()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Checksum.html#removeChecksum-java.lang.String-)
- [`isValidChecksum()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Checksum.html#isValidChecksum-java.lang.String-)
#### [**`Transaction`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/model/Transaction.html)
- [`toTrytes()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/model/Transaction.html#toTrytes--)
#### [**`Converter`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Converter.html)
- [`trytes()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Converter.html#trytes-int:A-int-int-)
- [`trits()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Converter.html#trits-java.lang.String-int-)
#### [**`Signing`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Signing.html)
- [`validateSignatures()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Signing.html#validateSignatures-jota.model.Bundle-java.lang.String-)
#### [**`Multisig`**](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html)
- [`getKey()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html#getKey-java.lang.String-int-int-)
- [`getDigest()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html#getDigest-java.lang.String-int-int-)
- [`finalizeAddress()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html#finalizeAddress-java.lang.String-)
- [`validateAddress()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html#validateAddress-java.lang.String-int:A:A-)
- [`addSignature()`](https://iotaledger.github.io/iota.lib.java/javadoc/jota/utils/Multisig.html#addSignature-jota.model.Bundle-java.lang.String-java.lang.String-)
### Examples
There's an extensive list of **test cases** on the [`src/test/java` directory][tests] that can be used as reference when developing apps with IOTA.
A good starter is the [`IotaAPITest` case](https://github.com/iotaledger/iota.lib.java/blob/master/jota/src/test/java/jota/IotaAPITest.java).
## Technologies & dependencies
The IOTA Java library has been designed to be used with **Java 6** or higher, in order to promote full **compatibility with Android**.
### Dependencies:
The following third party library dependencies and versions are used by the IOTA Java library internally:
- [Retrofit 2](https://square.github.io/retrofit/) type-safe HTTP client: `2.3.0`
- [Simple Logging Facade for Java](http://www.slf4j.org/): `1.7.25`
- [Apache Commons Lang](http://commons.apache.org/proper/commons-lang/): `3.6`
- [Apache Commons IO](http://commons.apache.org/proper/commons-io/): `2.5`
- [Legion of the Bouncy Castle](https://www.bouncycastle.org/java.html) Java cryptography APIs: `1.58`
## Changes:
- Changes in [**v0.9.5**](https://github.com/iotaledger/iota.lib.java/compare/v0.9.4...v0.9.5)
- Changes in [**v0.9.4**](https://github.com/iotaledger/iota.lib.java/compare/v0.9.3...v0.9.4)
- Changes in [**v0.9.3**](https://github.com/iotaledger/iota.lib.java/compare/v0.9.2...v0.9.3)
- Changes in [**v0.9.2**](https://github.com/iotaledger/iota.lib.java/compare/v0.9.1...v0.9.2)
- Changes in [**v0.9.1**](https://github.com/iotaledger/iota.lib.java/commits/v0.9.1)
## Warning / Disclaimer
- This is _pre-release_ software!
- There may be _performance and stability issues_.
- You may loose all your money :)
- Please report any issues using our [**issue tracker**][issues].
## Supporting the project
If the IOTA Java library has been useful to you and you feel like contributing, consider posting a [**bug report**][new-issue], [**feature request**][new-issue] or a [**pull request**][new-pull-request].
We have some [basic contribution guidelines][contribution-guidelines] to keep our code base stable and consistent.
### Join the Discussion
If you want to get involved in the community, need help with getting setup, have any issues related with the library or just want to discuss Blockchain, Distributed Ledgers and IoT with other people, feel free to join our [**Slack**][iota-slack].
You can also ask questions on our dedicated [**IOTA Forum**][iota-forum].
## License:
The [**full license text**][license] can be found [**here**][license].
```
Copyright 2017 IOTA Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
[iota-logo]: https://raw.githubusercontent.com/iotaledger/documentation/master/source/images/iota-logo.png
[jitpack]: https://jitpack.io/#iotaledger/iota.lib.java
[jitpack-badge]: https://jitpack.io/v/iotaledger/iota.lib.java.svg
[travis]: https://travis-ci.org/iotaledger/iota.lib.java
[travis-badge]: https://travis-ci.org/iotaledger/iota.lib.java.svg?branch=master
[license]: https://github.com/iotaledger/iota.lib.java/blob/master/LICENSE
[license-badge]: https://img.shields.io/github/license/iotaledger/iota.lib.java.svg
[iota-iri]: https://github.com/iotaledger/iri/tree/v1.4.0
[iota-iri-badge]: https://img.shields.io/badge/IOTA%20IRI%20compatibility-v1.4.0-blue.svg
[iota-api]: https://iota.readme.io/reference
[iota-api-badge]: https://img.shields.io/badge/IOTA%20API%20coverage-14/14%20commands-blue.svg
[javadoc]: https://iotaledger.github.io/iota.lib.java/javadoc/
[issues]: https://github.com/iotaledger/iota.lib.java/issues
[new-issue]: https://github.com/iotaledger/iota.lib.java/issues/new
[pull-requests]: https://github.com/iotaledger/iota.lib.java/pulls
[new-pull-request]: https://github.com/iotaledger/iota.lib.java/compare
[contribution-guidelines]: https://github.com/iotaledger/iota.lib.java/blob/master/CONTRIBUTING.md
[tests]: https://github.com/iotaledger/iota.lib.java/tree/master/jota/src/test/java/jota
[iota-slack]: http://slack.iota.org/
[iota-forum]: https://forum.iota.org/
-22
View File
@@ -1,22 +0,0 @@
## Release process
This project uses a simplified release process, where you only need to push a tag starting with
`release-`, followed by a version number. For instance, pushing a tag named `release-0.9.3` would
tell Travis to release the version `0.9.3`.
### TL;DR
```bash
git checkout master
git fetch upstream
git rebase upstream/master
git tag release-0.9.3
git push upstream release-0.9.3
```
### Long version
Once a new tag is pushed to the main repository, a Travis build will be started for it. Once the
build script detects that it's a release build, it will start a new Maven release process
(`mvn release:prepare release:perform`) and upload the artifacts to Bintray, which is synchronized
with Maven Central.
+18
View File
@@ -0,0 +1,18 @@
# Release process
This project uses a simplified release process, where you only need to push a tag starting with `release-`, followed by a version number. For instance, pushing a tag named `release-0.9.3` would tell Travis CI to release the version `0.9.3`.
## TL;DR
```bash
git checkout master
git fetch upstream
git rebase upstream/master
git tag release-0.9.X
git push upstream release-0.9.X
```
## Explanation
Once a new tag is pushed to the main repository, a Travis build will be started for it.
Once the build script detects that it's a release build, it will start a new Maven release process (`mvn release:prepare release:perform`) and upload the artifacts to Bintray, which is synchronized with Maven Central.