diff --git a/app/app.iml b/app/app.iml
new file mode 100644
index 0000000..8021953
--- /dev/null
+++ b/app/app.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..080b5c4
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,3 @@
+dependencies {
+ compile project(':graphenej')
+}
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Main.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Main.class
new file mode 100644
index 0000000..af1c6e2
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Main.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class
new file mode 100644
index 0000000..305df1e
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class
new file mode 100644
index 0000000..fa6dad8
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class
new file mode 100644
index 0000000..2464a77
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class
new file mode 100644
index 0000000..ba8aac9
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class
new file mode 100644
index 0000000..e7b87b8
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class
new file mode 100644
index 0000000..ced2c06
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class
new file mode 100644
index 0000000..3de8b98
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class
new file mode 100644
index 0000000..2aa3568
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class
new file mode 100644
index 0000000..482acdc
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class
new file mode 100644
index 0000000..1b621b9
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class
new file mode 100644
index 0000000..77eab30
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class
new file mode 100644
index 0000000..8f541ac
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class
new file mode 100644
index 0000000..3bee1a4
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class
new file mode 100644
index 0000000..a2ae547
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class
new file mode 100644
index 0000000..6b7299e
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class
new file mode 100644
index 0000000..143179a
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class
new file mode 100644
index 0000000..e9618b7
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class
new file mode 100644
index 0000000..e48ba41
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class
new file mode 100644
index 0000000..603d92d
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class
new file mode 100644
index 0000000..6013844
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class
new file mode 100644
index 0000000..8578950
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class differ
diff --git a/app/build/classes/main/de/bitsharesmunich/graphenej/Test.class b/app/build/classes/main/de/bitsharesmunich/graphenej/Test.class
new file mode 100644
index 0000000..49c3f2b
Binary files /dev/null and b/app/build/classes/main/de/bitsharesmunich/graphenej/Test.class differ
diff --git a/app/build/libs/app.jar b/app/build/libs/app.jar
new file mode 100644
index 0000000..1310b06
Binary files /dev/null and b/app/build/libs/app.jar differ
diff --git a/app/build/tmp/jar/MANIFEST.MF b/app/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 0000000..59499bc
--- /dev/null
+++ b/app/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/app/src/main/java/de/bitsharesmunich/graphenej/Main.java b/app/src/main/java/de/bitsharesmunich/graphenej/Main.java
new file mode 100644
index 0000000..86014c8
--- /dev/null
+++ b/app/src/main/java/de/bitsharesmunich/graphenej/Main.java
@@ -0,0 +1,89 @@
+package de.bitsharesmunich.graphenej;
+
+public class Main {
+
+ // Brain key from Nelson's app referencing the bilthon-83 account
+ public static final String BILTHON_83_BRAIN_KEY = System.getenv("BILTHON_83_BRAIN_KEY");
+
+ public static final String BILTHON_83_ORIGINAL_BRAIN_KEY = System.getenv("BILTHON_83_ORIGINAL_BRAIN_KEY");
+
+ public static final String BILTHON_1_BRAIN_KEY = System.getenv("BILTHON_1_BRAIN_KEY");
+
+ public static final String BILTHON_5_BRAIN_KEY = System.getenv("BILTHON_5_BRAIN_KEY");
+
+ public static final String BILTHON_7_BRAIN_KEY = System.getenv("BILTHON_7_BRAIN_KEY");
+
+ public static final String BIP39_KEY = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
+
+ public static final String WIF = "5KMzB2GqGhnh7ufhgddmz1eKPHS72uTLeL9hHjSvPb1UywWknF5";
+
+ public static final String BILTHON_83_PASSWORD = System.getenv("BILTHON_83_PASSWORD");
+
+ public static final String BILTHON_25_PASSWORD = System.getenv("BILTHON_25_PASSWORD");
+
+ public static final String BILTHON_11_BRAIN_KEY = System.getenv("BILTHON_11_BRAIN_KEY");
+
+ // Static block information used for transaction serialization tests
+ public static int REF_BLOCK_NUM = 56204;
+ public static int REF_BLOCK_PREFIX = 1614747814;
+ public static int RELATIVE_EXPIRATION = 1478385607;
+
+ public static void main(String[] args) {
+ Test test = new Test();
+
+// test.testTransactionSerialization();
+// ECKey.ECDSASignature signature = test.testSigning();
+
+// try {
+// test.testWebSocketTransfer();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// test.testCustomSerializer();
+// test.testUserAccountSerialization();
+// test.testTransactionSerialization();
+// test.testLoginSerialization();
+// test.testNetworkBroadcastSerialization();
+// test.testNetworkBroadcastDeserialization();
+// test.testGetDynamicParams();
+// test.testGetRequiredFeesSerialization();
+// test.testRequiredFeesResponse();
+// test.testTransactionBroadcastSequence();
+// test.testAccountLookupDeserialization();
+// test.testPrivateKeyManipulations();
+// test.testPublicKeyManipulations();
+// test.testGetAccountByName();
+// test.testGetRequiredFees();
+// test.testRandomNumberGeneration();
+// test.testBrainKeyOperations(false);
+// test.testBip39Opertion();
+// test.testAccountNamebyAddress();
+// test.testAccountNameById();
+// test.testRelativeAccountHistory();
+// test.testingInvoiceGeneration();
+// test.testCompression();
+// test.testAccountUpdateSerialization();
+// test.testAccountUpdateOperationBroadcast();
+// test.testCreateBinFile();
+ test.testImportBinFile();
+// test.testExportBinFile();
+// test.testLzmaCompression();
+// test.testLzmaDecompression();
+// test.testSimpleDecompression();
+// test.testLookupAccounts();
+// test.testLookupAccounts();
+// test.testDecodeMemo();
+// test.testGetRelativeAccountHistory();
+// test.testLookupAssetSymbols();
+// test.testListAssets();
+// test.testGetObjects();
+// test.testGetBlockHeader();
+// test.testGetLimitOrders();
+// test.testGetTradeHistory();
+// test.testAssetSerialization();
+// test.testGetMarketHistory();
+// test.testGetAccountBalances();
+// test.testGetAssetHoldersCount();
+// test.testSubscription(null);
+ }
+}
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Test.java b/app/src/main/java/de/bitsharesmunich/graphenej/Test.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Test.java
rename to app/src/main/java/de/bitsharesmunich/graphenej/Test.java
diff --git a/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java b/app/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java
similarity index 100%
rename from src/test/java/de/bitsharesmunich/graphenej/AssetTest.java
rename to app/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java
diff --git a/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java b/app/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java
similarity index 100%
rename from src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java
rename to app/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java
diff --git a/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java b/app/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java
similarity index 100%
rename from src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java
rename to app/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java
diff --git a/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java b/app/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java
similarity index 100%
rename from src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java
rename to app/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java
diff --git a/build.gradle b/build.gradle
index c314687..e5b03c4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,16 +1,10 @@
-group 'com.luminiasoft'
-version '0.1-SNAPSHOT'
+allprojects {
+ task hello << { task -> println "I'm $task.project.name" }
+}
-apply plugin: 'java'
-
-repositories {
+subprojects {
+ apply plugin: "java"
+ repositories {
mavenCentral()
-}
-
-dependencies {
- testCompile group: 'junit', name: 'junit', version: '4.12'
- compile 'com.neovisionaries:nv-websocket-client:1.30'
- compile 'org.bitcoinj:bitcoinj-core:0.14.3'
- compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
- compile group: "org.tukaani", name: "xz", version: "1.6"
+ }
}
diff --git a/LICENSE b/graphenej/LICENSE
similarity index 100%
rename from LICENSE
rename to graphenej/LICENSE
diff --git a/README.md b/graphenej/README.md
similarity index 100%
rename from README.md
rename to graphenej/README.md
diff --git a/graphenej/build.gradle b/graphenej/build.gradle
new file mode 100644
index 0000000..8f156ee
--- /dev/null
+++ b/graphenej/build.gradle
@@ -0,0 +1,22 @@
+group 'de.bitsharesmunich'
+version '0.1-SNAPSHOT'
+
+//apply plugin: 'java'
+//
+//model {
+// components {
+// main(JvmLibrarySpec)
+// }
+//}
+//
+//repositories {
+// mavenCentral()
+//}
+
+dependencies {
+ testCompile group: 'junit', name: 'junit', version: '4.12'
+ compile 'com.neovisionaries:nv-websocket-client:1.30'
+ compile 'org.bitcoinj:bitcoinj-core:0.14.3'
+ compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
+ compile group: "org.tukaani", name: "xz", version: "1.6"
+}
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions$AccountOptionsDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions$AccountOptionsDeserializer.class
new file mode 100644
index 0000000..114f1cc
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions$AccountOptionsDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions.class
new file mode 100644
index 0000000..cd9d508
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountOptions.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateOperation.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateOperation.class
new file mode 100644
index 0000000..4edaca7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateOperation.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.class
new file mode 100644
index 0000000..27e4f4b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Address.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Address.class
new file mode 100644
index 0000000..d92f366
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Address.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetDeserializer.class
new file mode 100644
index 0000000..e1468d5
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetType.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetType.class
new file mode 100644
index 0000000..72f2697
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset$AssetType.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset.class
new file mode 100644
index 0000000..e48987e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Asset.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountDeserializer.class
new file mode 100644
index 0000000..a3c33b7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountSerializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountSerializer.class
new file mode 100644
index 0000000..48587ad
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount$AssetAmountSerializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount.class
new file mode 100644
index 0000000..18edbf0
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetAmount.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetOptions.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetOptions.class
new file mode 100644
index 0000000..d758d66
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/AssetOptions.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority$AuthorityDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority$AuthorityDeserializer.class
new file mode 100644
index 0000000..c1df239
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority$AuthorityDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority.class
new file mode 100644
index 0000000..d31ea13
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Authority.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BIP39.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BIP39.class
new file mode 100644
index 0000000..461a343
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BIP39.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BaseOperation.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BaseOperation.class
new file mode 100644
index 0000000..86a0170
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BaseOperation.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BlockData.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BlockData.class
new file mode 100644
index 0000000..73d1f31
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BlockData.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BrainKey.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BrainKey.class
new file mode 100644
index 0000000..4cfdb75
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/BrainKey.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$BITSHARES.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$BITSHARES.class
new file mode 100644
index 0000000..12e641b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$BITSHARES.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$GRAPHENE.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$GRAPHENE.class
new file mode 100644
index 0000000..776800d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$GRAPHENE.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$TEST.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$TEST.class
new file mode 100644
index 0000000..5c3c42a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains$TEST.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains.class
new file mode 100644
index 0000000..df2aff2
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Chains.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Converter.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Converter.class
new file mode 100644
index 0000000..73df061
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Converter.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Extensions.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Extensions.class
new file mode 100644
index 0000000..c602a45
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Extensions.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/FileBin.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/FileBin.class
new file mode 100644
index 0000000..cef4d9e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/FileBin.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/GrapheneObject.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/GrapheneObject.class
new file mode 100644
index 0000000..f71844a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/GrapheneObject.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Invoice.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Invoice.class
new file mode 100644
index 0000000..5324a3e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Invoice.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LimitOrder.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LimitOrder.class
new file mode 100644
index 0000000..86be6e8
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LimitOrder.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LineItem.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LineItem.class
new file mode 100644
index 0000000..f3cdb61
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/LineItem.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Main.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Main.class
new file mode 100644
index 0000000..9029bd0
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Main.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/MarketTrade.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/MarketTrade.class
new file mode 100644
index 0000000..f83f779
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/MarketTrade.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/ObjectType.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/ObjectType.class
new file mode 100644
index 0000000..5ab4738
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/ObjectType.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/OperationType.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/OperationType.class
new file mode 100644
index 0000000..4c58f6d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/OperationType.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Optional.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Optional.class
new file mode 100644
index 0000000..e8af76a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Optional.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Price.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Price.class
new file mode 100644
index 0000000..0930f37
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Price.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/PublicKey.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/PublicKey.class
new file mode 100644
index 0000000..a11bcab
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/PublicKey.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/RPC.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/RPC.class
new file mode 100644
index 0000000..f564bc3
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/RPC.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class
new file mode 100644
index 0000000..305df1e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class
new file mode 100644
index 0000000..fa6dad8
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$10.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class
new file mode 100644
index 0000000..2464a77
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$11.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class
new file mode 100644
index 0000000..ba8aac9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$12.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class
new file mode 100644
index 0000000..e7b87b8
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$13.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class
new file mode 100644
index 0000000..ced2c06
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$14.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class
new file mode 100644
index 0000000..3de8b98
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$15.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class
new file mode 100644
index 0000000..2aa3568
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$16.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class
new file mode 100644
index 0000000..482acdc
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$17.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class
new file mode 100644
index 0000000..1b621b9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$18.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class
new file mode 100644
index 0000000..77eab30
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$19.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class
new file mode 100644
index 0000000..8f541ac
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class
new file mode 100644
index 0000000..3bee1a4
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$20.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class
new file mode 100644
index 0000000..a2ae547
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$21.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class
new file mode 100644
index 0000000..6b7299e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$3.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class
new file mode 100644
index 0000000..143179a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$4.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class
new file mode 100644
index 0000000..e9618b7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$5.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class
new file mode 100644
index 0000000..e48ba41
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$6.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class
new file mode 100644
index 0000000..603d92d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$7.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class
new file mode 100644
index 0000000..6013844
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$8.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class
new file mode 100644
index 0000000..8578950
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test$9.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test.class
new file mode 100644
index 0000000..49c3f2b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Test.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionDeserializer.class
new file mode 100644
index 0000000..8817fcf
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionSerializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionSerializer.class
new file mode 100644
index 0000000..c987873
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction$TransactionSerializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction.class
new file mode 100644
index 0000000..e2996ac
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Transaction.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransactionBuilder.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransactionBuilder.class
new file mode 100644
index 0000000..5273bfd
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransactionBuilder.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferDeserializer.class
new file mode 100644
index 0000000..2c253f5
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferSerializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferSerializer.class
new file mode 100644
index 0000000..93b22fe
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation$TransferSerializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation.class
new file mode 100644
index 0000000..e63b648
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferOperation.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferTransactionBuilder.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferTransactionBuilder.class
new file mode 100644
index 0000000..4ce14e6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/TransferTransactionBuilder.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountDeserializer.class
new file mode 100644
index 0000000..ab9177b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountSimpleDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountSimpleDeserializer.class
new file mode 100644
index 0000000..d612b23
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount$UserAccountSimpleDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount.class
new file mode 100644
index 0000000..eba9e8a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/UserAccount.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Util.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Util.class
new file mode 100644
index 0000000..a24968c
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Util.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Varint.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Varint.class
new file mode 100644
index 0000000..c5c99a9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Varint.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Vote.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Vote.class
new file mode 100644
index 0000000..d21294e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/Vote.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.class
new file mode 100644
index 0000000..dffd204
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances$1.class
new file mode 100644
index 0000000..9d49dee
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances.class
new file mode 100644
index 0000000..d52ebe6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountBalances.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName$1.class
new file mode 100644
index 0000000..1fab0b3
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName.class
new file mode 100644
index 0000000..116a19f
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountByName.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountHistory.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountHistory.class
new file mode 100644
index 0000000..347ffa6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountHistory.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts$1.class
new file mode 100644
index 0000000..109ab0a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts.class
new file mode 100644
index 0000000..1c5de78
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccounts.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress$1.class
new file mode 100644
index 0000000..38c20df
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.class
new file mode 100644
index 0000000..720a23b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$1.class
new file mode 100644
index 0000000..140e41d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$2.class
new file mode 100644
index 0000000..1a07df9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.class
new file mode 100644
index 0000000..0bdc2fd
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$1.class
new file mode 100644
index 0000000..463ba0c
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$2.class
new file mode 100644
index 0000000..a76b9a6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader.class
new file mode 100644
index 0000000..39a6dd4
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetBlockHeader.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders$1.class
new file mode 100644
index 0000000..e64b17a
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders.class
new file mode 100644
index 0000000..c1c2550
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetLimitOrders.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$1.class
new file mode 100644
index 0000000..4cc9146
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$2.class
new file mode 100644
index 0000000..05ac6d7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory.class
new file mode 100644
index 0000000..0b8d6ff
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetMarketHistory.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects$1.class
new file mode 100644
index 0000000..853cfcd
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects.class
new file mode 100644
index 0000000..cc0e6ca
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetObjects.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$1.class
new file mode 100644
index 0000000..5cdbc68
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$2.class
new file mode 100644
index 0000000..9386f1e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.class
new file mode 100644
index 0000000..442efd4
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees$1.class
new file mode 100644
index 0000000..ae7cc99
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees.class
new file mode 100644
index 0000000..39ebac8
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetRequiredFees.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory$1.class
new file mode 100644
index 0000000..9c0e097
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory.class
new file mode 100644
index 0000000..275ab91
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/GetTradeHistory.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets$1.class
new file mode 100644
index 0000000..50cd4d5
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets.class
new file mode 100644
index 0000000..a48ce15
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/ListAssets.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts$1.class
new file mode 100644
index 0000000..74dcb86
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts.class
new file mode 100644
index 0000000..5ebbe06
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAccounts.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols$1.class
new file mode 100644
index 0000000..69283bd
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.class
new file mode 100644
index 0000000..29d9f82
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub$1.class
new file mode 100644
index 0000000..2c4a348
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.class
new file mode 100644
index 0000000..19a8718
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$1.class
new file mode 100644
index 0000000..87f81f0
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$2.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$2.class
new file mode 100644
index 0000000..068611b
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$2.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$3.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$3.class
new file mode 100644
index 0000000..32dd377
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$3.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$4.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$4.class
new file mode 100644
index 0000000..0c70581
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence$4.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.class
new file mode 100644
index 0000000..a448a76
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.class
new file mode 100644
index 0000000..d21eacf
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/EntropySource.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/EntropySource.class
new file mode 100644
index 0000000..eff8a86
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/EntropySource.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/RandomSource.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/RandomSource.class
new file mode 100644
index 0000000..84b2d15
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/RandomSource.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.class
new file mode 100644
index 0000000..ccd0783
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener$1.class
new file mode 100644
index 0000000..bdc8f07
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.class
new file mode 100644
index 0000000..b14d676
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/ChecksumException.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/ChecksumException.class
new file mode 100644
index 0000000..80c692e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/ChecksumException.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.class
new file mode 100644
index 0000000..4228ce9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.class
new file mode 100644
index 0000000..9a0ac31
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedAddressException.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedAddressException.class
new file mode 100644
index 0000000..8e3002e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedAddressException.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.class
new file mode 100644
index 0000000..ed88a5f
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.class
new file mode 100644
index 0000000..bca8df6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.class
new file mode 100644
index 0000000..2676430
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.class
new file mode 100644
index 0000000..0a2391d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.class
new file mode 100644
index 0000000..6cb21b1
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.class
new file mode 100644
index 0000000..44f4113
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.class
new file mode 100644
index 0000000..5bf0ccb
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.class
new file mode 100644
index 0000000..92f5218
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountProperties.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountProperties.class
new file mode 100644
index 0000000..bc7e536
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AccountProperties.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall$ApiCallSerializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall$ApiCallSerializer.class
new file mode 100644
index 0000000..1943e41
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall$ApiCallSerializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall.class
new file mode 100644
index 0000000..8854a98
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/ApiCall.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetFeed.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetFeed.class
new file mode 100644
index 0000000..be93dcb
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetFeed.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount$HoldersCountDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount$HoldersCountDeserializer.class
new file mode 100644
index 0000000..fdae570
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount$HoldersCountDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount.class
new file mode 100644
index 0000000..7f89afb
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/AssetHolderCount.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$Error.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$Error.class
new file mode 100644
index 0000000..bcfdb08
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$Error.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$ErrorData.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$ErrorData.class
new file mode 100644
index 0000000..f227071
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse$ErrorData.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse.class
new file mode 100644
index 0000000..8c3a09d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BaseResponse.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BitAssetData.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BitAssetData.class
new file mode 100644
index 0000000..7360d0f
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BitAssetData.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BlockHeader.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BlockHeader.class
new file mode 100644
index 0000000..5ddeb80
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BlockHeader.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.class
new file mode 100644
index 0000000..b435b98
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$BucketDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$BucketDeserializer.class
new file mode 100644
index 0000000..f31fda6
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$BucketDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$Key.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$Key.class
new file mode 100644
index 0000000..3bb1b3e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject$Key.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject.class
new file mode 100644
index 0000000..16aeac9
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/BucketObject.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.class
new file mode 100644
index 0000000..5a35242
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/HistoricalTransfer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/HistoricalTransfer.class
new file mode 100644
index 0000000..daebc9e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/HistoricalTransfer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse$SubscriptionResponseDeserializer.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse$SubscriptionResponseDeserializer.class
new file mode 100644
index 0000000..276c17e
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse$SubscriptionResponseDeserializer.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse.class
new file mode 100644
index 0000000..85e164c
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/SubscriptionResponse.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/WitnessResponse.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/WitnessResponse.class
new file mode 100644
index 0000000..c0502c7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/WitnessResponse.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.class
new file mode 100644
index 0000000..5256b29
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.class
new file mode 100644
index 0000000..a6cf9a3
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/Wallet.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/Wallet.class
new file mode 100644
index 0000000..6d5bfb7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/Wallet.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/WalletBackup.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/WalletBackup.class
new file mode 100644
index 0000000..9ff3766
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/models/backup/WalletBackup.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/objects/Memo.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/objects/Memo.class
new file mode 100644
index 0000000..235f6fb
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/objects/Memo.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$1.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$1.class
new file mode 100644
index 0000000..98efdd7
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$1.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$NaiveTrustManager.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$NaiveTrustManager.class
new file mode 100644
index 0000000..2b58b80
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext$NaiveTrustManager.class differ
diff --git a/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext.class b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext.class
new file mode 100644
index 0000000..e2f604d
Binary files /dev/null and b/graphenej/build/classes/main/de/bitsharesmunich/graphenej/test/NaiveSSLContext.class differ
diff --git a/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AssetTest.class b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AssetTest.class
new file mode 100644
index 0000000..37353c3
Binary files /dev/null and b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AssetTest.class differ
diff --git a/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AuthorityTest.class b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AuthorityTest.class
new file mode 100644
index 0000000..917b4a5
Binary files /dev/null and b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/AuthorityTest.class differ
diff --git a/graphenej/build/classes/test/de/bitsharesmunich/graphenej/PublicKeyTest.class b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/PublicKeyTest.class
new file mode 100644
index 0000000..b4273b3
Binary files /dev/null and b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/PublicKeyTest.class differ
diff --git a/graphenej/build/classes/test/de/bitsharesmunich/graphenej/objects/MemoTest.class b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/objects/MemoTest.class
new file mode 100644
index 0000000..018d099
Binary files /dev/null and b/graphenej/build/classes/test/de/bitsharesmunich/graphenej/objects/MemoTest.class differ
diff --git a/graphenej/build/libs/graphenej-0.1-SNAPSHOT.jar b/graphenej/build/libs/graphenej-0.1-SNAPSHOT.jar
new file mode 100644
index 0000000..d2ef14f
Binary files /dev/null and b/graphenej/build/libs/graphenej-0.1-SNAPSHOT.jar differ
diff --git a/graphenej/build/libs/graphenej-all-0.1-SNAPSHOT.jar b/graphenej/build/libs/graphenej-all-0.1-SNAPSHOT.jar
new file mode 100644
index 0000000..b29ccb6
Binary files /dev/null and b/graphenej/build/libs/graphenej-all-0.1-SNAPSHOT.jar differ
diff --git a/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AssetTest.html b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AssetTest.html
new file mode 100644
index 0000000..86624cb
--- /dev/null
+++ b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AssetTest.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+Test results - Class de.bitsharesmunich.graphenej.AssetTest
+
+
+
+
+
+
+
Class de.bitsharesmunich.graphenej.AssetTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tests
+
+
+
+Test
+Duration
+Result
+
+
+
+equals
+0.004s
+passed
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AuthorityTest.html b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AuthorityTest.html
new file mode 100644
index 0000000..9fc091e
--- /dev/null
+++ b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.AuthorityTest.html
@@ -0,0 +1,191 @@
+
+
+
+
+
+Test results - Class de.bitsharesmunich.graphenej.AuthorityTest
+
+
+
+
+
+
+
Class de.bitsharesmunich.graphenej.AuthorityTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Failed tests
+
+
+
equals
+
+java.lang.AssertionError: Different authorities expected:<de.bitsharesmunich.graphenej.Authority@4108679d> but was:<de.bitsharesmunich.graphenej.Authority@5155d26c>
+ at org.junit.Assert.fail(Assert.java:88)
+ at org.junit.Assert.failNotEquals(Assert.java:834)
+ at org.junit.Assert.assertEquals(Assert.java:118)
+ at de.bitsharesmunich.graphenej.AuthorityTest.equals(AuthorityTest.java:54)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+ at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
+ at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
+ at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+ at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+
Tests
+
+
+
+Test
+Duration
+Result
+
+
+
+equals
+0.214s
+failed
+
+
+toBytes
+0.001s
+passed
+
+
+
+
+
Standard output
+
+key auths match: true
+account auths match: true
+weight threshold matches: true
+key auths match: true
+account auths match: false
+weight threshold matches: true
+
+
+
+
+
Standard error
+
+SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.PublicKeyTest.html b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.PublicKeyTest.html
new file mode 100644
index 0000000..54fcc64
--- /dev/null
+++ b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.PublicKeyTest.html
@@ -0,0 +1,158 @@
+
+
+
+
+
+Test results - Class de.bitsharesmunich.graphenej.PublicKeyTest
+
+
+
+
+
+
+
Class de.bitsharesmunich.graphenej.PublicKeyTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Failed tests
+
+
+
equals
+
+org.bitcoinj.core.AddressFormatException: Illegal character 0 at position 48
+ at org.bitcoinj.core.Base58.decode(Base58.java:110)
+ at de.bitsharesmunich.graphenej.Address.<init>(Address.java:33)
+ at de.bitsharesmunich.graphenej.PublicKeyTest.equals(PublicKeyTest.java:20)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+ at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
+ at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
+ at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+ at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+
Tests
+
+
+
+Test
+Duration
+Result
+
+
+
+equals
+0.001s
+failed
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.objects.MemoTest.html b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.objects.MemoTest.html
new file mode 100644
index 0000000..a475d84
--- /dev/null
+++ b/graphenej/build/reports/tests/test/classes/de.bitsharesmunich.graphenej.objects.MemoTest.html
@@ -0,0 +1,121 @@
+
+
+
+
+
+Test results - Class de.bitsharesmunich.graphenej.objects.MemoTest
+
+
+
+
+
+
+
Class de.bitsharesmunich.graphenej.objects.MemoTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tests
+
+
+
+Test
+Duration
+Result
+
+
+
+shouldBeByteSerializable
+0.003s
+passed
+
+
+shouldBeJsonObjectSerializable
+0.009s
+passed
+
+
+shouldEncryptAndDecryptLongerMessage
+0.006s
+passed
+
+
+shouldEncryptAndDecryptShortMessage
+0.031s
+passed
+
+
+shouldMatchPredefinedChiphertext
+0.005s
+passed
+
+
+shouldThrowException
+0.013s
+passed
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/css/base-style.css b/graphenej/build/reports/tests/test/css/base-style.css
new file mode 100644
index 0000000..4afa73e
--- /dev/null
+++ b/graphenej/build/reports/tests/test/css/base-style.css
@@ -0,0 +1,179 @@
+
+body {
+ margin: 0;
+ padding: 0;
+ font-family: sans-serif;
+ font-size: 12pt;
+}
+
+body, a, a:visited {
+ color: #303030;
+}
+
+#content {
+ padding-left: 50px;
+ padding-right: 50px;
+ padding-top: 30px;
+ padding-bottom: 30px;
+}
+
+#content h1 {
+ font-size: 160%;
+ margin-bottom: 10px;
+}
+
+#footer {
+ margin-top: 100px;
+ font-size: 80%;
+ white-space: nowrap;
+}
+
+#footer, #footer a {
+ color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+ vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+ vertical-align: middle;
+}
+
+ul {
+ margin-left: 0;
+}
+
+h1, h2, h3 {
+ white-space: nowrap;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+ul.tabLinks {
+ padding-left: 0;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ overflow: auto;
+ min-width: 800px;
+ width: auto !important;
+ width: 800px;
+}
+
+ul.tabLinks li {
+ float: left;
+ height: 100%;
+ list-style: none;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ margin-bottom: 0;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+ margin-right: 25px;
+ border: solid 1px #d4d4d4;
+ background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+ background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+ background-color: #c5f0f5;
+ border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+ font-size: 120%;
+ display: block;
+ outline: none;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+}
+
+ul.tabLinks li h2 {
+ margin: 0;
+ padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+ display: block;
+}
+
+div.deselected {
+ display: none;
+}
+
+div.tab table {
+ min-width: 350px;
+ width: auto !important;
+ width: 350px;
+ border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+ border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+ text-align: left;
+ white-space: nowrap;
+ padding-left: 6em;
+}
+
+div.tab th:first-child {
+ padding-left: 0;
+}
+
+div.tab td {
+ white-space: nowrap;
+ padding-left: 6em;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+ padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+ text-align: right;
+}
+
+span.code {
+ display: inline-block;
+ margin-top: 0em;
+ margin-bottom: 1em;
+}
+
+span.code pre {
+ font-size: 11pt;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ margin: 0;
+ background-color: #f7f7f7;
+ border: solid 1px #d0d0d0;
+ min-width: 700px;
+ width: auto !important;
+ width: 700px;
+}
+
+span.wrapped pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+
+label.hidden {
+ display: none;
+}
\ No newline at end of file
diff --git a/graphenej/build/reports/tests/test/css/style.css b/graphenej/build/reports/tests/test/css/style.css
new file mode 100644
index 0000000..3dc4913
--- /dev/null
+++ b/graphenej/build/reports/tests/test/css/style.css
@@ -0,0 +1,84 @@
+
+#summary {
+ margin-top: 30px;
+ margin-bottom: 40px;
+}
+
+#summary table {
+ border-collapse: collapse;
+}
+
+#summary td {
+ vertical-align: top;
+}
+
+.breadcrumbs, .breadcrumbs a {
+ color: #606060;
+}
+
+.infoBox {
+ width: 110px;
+ padding-top: 15px;
+ padding-bottom: 15px;
+ text-align: center;
+}
+
+.infoBox p {
+ margin: 0;
+}
+
+.counter, .percent {
+ font-size: 120%;
+ font-weight: bold;
+ margin-bottom: 8px;
+}
+
+#duration {
+ width: 125px;
+}
+
+#successRate, .summaryGroup {
+ border: solid 2px #d0d0d0;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+
+#successRate {
+ width: 140px;
+ margin-left: 35px;
+}
+
+#successRate .percent {
+ font-size: 180%;
+}
+
+.success, .success a {
+ color: #008000;
+}
+
+div.success, #successRate.success {
+ background-color: #bbd9bb;
+ border-color: #008000;
+}
+
+.failures, .failures a {
+ color: #b60808;
+}
+
+.skipped, .skipped a {
+ color: #c09853;
+}
+
+div.failures, #successRate.failures {
+ background-color: #ecdada;
+ border-color: #b60808;
+}
+
+ul.linkList {
+ padding-left: 0;
+}
+
+ul.linkList li {
+ list-style: none;
+ margin-bottom: 5px;
+}
diff --git a/graphenej/build/reports/tests/test/index.html b/graphenej/build/reports/tests/test/index.html
new file mode 100644
index 0000000..0df48ed
--- /dev/null
+++ b/graphenej/build/reports/tests/test/index.html
@@ -0,0 +1,185 @@
+
+
+
+
+
+Test results - Test Summary
+
+
+
+
+
+
+
Test Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/js/report.js b/graphenej/build/reports/tests/test/js/report.js
new file mode 100644
index 0000000..83bab4a
--- /dev/null
+++ b/graphenej/build/reports/tests/test/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+ "use strict";
+
+ var tabs = {};
+
+ function changeElementClass(element, classValue) {
+ if (element.getAttribute("className")) {
+ element.setAttribute("className", classValue);
+ } else {
+ element.setAttribute("class", classValue);
+ }
+ }
+
+ function getClassAttribute(element) {
+ if (element.getAttribute("className")) {
+ return element.getAttribute("className");
+ } else {
+ return element.getAttribute("class");
+ }
+ }
+
+ function addClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element) + " " + classValue);
+ }
+
+ function removeClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+ }
+
+ function initTabs() {
+ var container = document.getElementById("tabs");
+
+ tabs.tabs = findTabs(container);
+ tabs.titles = findTitles(tabs.tabs);
+ tabs.headers = findHeaders(container);
+ tabs.select = select;
+ tabs.deselectAll = deselectAll;
+ tabs.select(0);
+
+ return true;
+ }
+
+ function getCheckBox() {
+ return document.getElementById("line-wrapping-toggle");
+ }
+
+ function getLabelForCheckBox() {
+ return document.getElementById("label-for-line-wrapping-toggle");
+ }
+
+ function findCodeBlocks() {
+ var spans = document.getElementById("tabs").getElementsByTagName("span");
+ var codeBlocks = [];
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].className.indexOf("code") >= 0) {
+ codeBlocks.push(spans[i]);
+ }
+ }
+ return codeBlocks;
+ }
+
+ function forAllCodeBlocks(operation) {
+ var codeBlocks = findCodeBlocks();
+
+ for (var i = 0; i < codeBlocks.length; ++i) {
+ operation(codeBlocks[i], "wrapped");
+ }
+ }
+
+ function toggleLineWrapping() {
+ var checkBox = getCheckBox();
+
+ if (checkBox.checked) {
+ forAllCodeBlocks(addClass);
+ } else {
+ forAllCodeBlocks(removeClass);
+ }
+ }
+
+ function initControls() {
+ if (findCodeBlocks().length > 0) {
+ var checkBox = getCheckBox();
+ var label = getLabelForCheckBox();
+
+ checkBox.onclick = toggleLineWrapping;
+ checkBox.checked = false;
+
+ removeClass(label, "hidden");
+ }
+ }
+
+ function switchTab() {
+ var id = this.id.substr(1);
+
+ for (var i = 0; i < tabs.tabs.length; i++) {
+ if (tabs.tabs[i].id === id) {
+ tabs.select(i);
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ function select(i) {
+ this.deselectAll();
+
+ changeElementClass(this.tabs[i], "tab selected");
+ changeElementClass(this.headers[i], "selected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var h2 = document.createElement("H2");
+
+ h2.appendChild(document.createTextNode(this.titles[i]));
+ this.headers[i].appendChild(h2);
+ }
+
+ function deselectAll() {
+ for (var i = 0; i < this.tabs.length; i++) {
+ changeElementClass(this.tabs[i], "tab deselected");
+ changeElementClass(this.headers[i], "deselected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var a = document.createElement("A");
+
+ a.setAttribute("id", "ltab" + i);
+ a.setAttribute("href", "#tab" + i);
+ a.onclick = switchTab;
+ a.appendChild(document.createTextNode(this.titles[i]));
+
+ this.headers[i].appendChild(a);
+ }
+ }
+
+ function findTabs(container) {
+ return findChildElements(container, "DIV", "tab");
+ }
+
+ function findHeaders(container) {
+ var owner = findChildElements(container, "UL", "tabLinks");
+ return findChildElements(owner[0], "LI", null);
+ }
+
+ function findTitles(tabs) {
+ var titles = [];
+
+ for (var i = 0; i < tabs.length; i++) {
+ var tab = tabs[i];
+ var header = findChildElements(tab, "H2", null)[0];
+
+ header.parentNode.removeChild(header);
+
+ if (header.innerText) {
+ titles.push(header.innerText);
+ } else {
+ titles.push(header.textContent);
+ }
+ }
+
+ return titles;
+ }
+
+ function findChildElements(container, name, targetClass) {
+ var elements = [];
+ var children = container.childNodes;
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children.item(i);
+
+ if (child.nodeType === 1 && child.nodeName === name) {
+ if (targetClass && child.className.indexOf(targetClass) < 0) {
+ continue;
+ }
+
+ elements.push(child);
+ }
+ }
+
+ return elements;
+ }
+
+ // Entry point.
+
+ window.onload = function() {
+ initTabs();
+ initControls();
+ };
+} (window, window.document));
\ No newline at end of file
diff --git a/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.html b/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.html
new file mode 100644
index 0000000..0ce0406
--- /dev/null
+++ b/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.html
@@ -0,0 +1,139 @@
+
+
+
+
+
+Test results - Package de.bitsharesmunich.graphenej
+
+
+
+
+
+
+
Package de.bitsharesmunich.graphenej
+
+
all > de.bitsharesmunich.graphenej
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Classes
+
+
+
+Class
+Tests
+Failures
+Ignored
+Duration
+Success rate
+
+
+
+
+AssetTest
+
+1
+0
+0
+0.004s
+100%
+
+
+
+AuthorityTest
+
+2
+1
+0
+0.215s
+50%
+
+
+
+PublicKeyTest
+
+1
+1
+0
+0.001s
+0%
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.objects.html b/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.objects.html
new file mode 100644
index 0000000..31dc27a
--- /dev/null
+++ b/graphenej/build/reports/tests/test/packages/de.bitsharesmunich.graphenej.objects.html
@@ -0,0 +1,103 @@
+
+
+
+
+
+Test results - Package de.bitsharesmunich.graphenej.objects
+
+
+
+
+
+
+
Package de.bitsharesmunich.graphenej.objects
+
+
all > de.bitsharesmunich.graphenej.objects
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Classes
+
+
+
+Class
+Tests
+Failures
+Ignored
+Duration
+Success rate
+
+
+
+
+MemoTest
+
+6
+0
+0
+0.067s
+100%
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AssetTest.xml b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AssetTest.xml
new file mode 100644
index 0000000..1e77fe2
--- /dev/null
+++ b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AssetTest.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AuthorityTest.xml b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AuthorityTest.xml
new file mode 100644
index 0000000..381b7e2
--- /dev/null
+++ b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.AuthorityTest.xml
@@ -0,0 +1,69 @@
+
+
+
+
+ java.lang.AssertionError: Different authorities expected:<de.bitsharesmunich.graphenej.Authority@4108679d> but was:<de.bitsharesmunich.graphenej.Authority@5155d26c>
+ at org.junit.Assert.fail(Assert.java:88)
+ at org.junit.Assert.failNotEquals(Assert.java:834)
+ at org.junit.Assert.assertEquals(Assert.java:118)
+ at de.bitsharesmunich.graphenej.AuthorityTest.equals(AuthorityTest.java:54)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+ at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
+ at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
+ at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+ at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+
diff --git a/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.PublicKeyTest.xml b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.PublicKeyTest.xml
new file mode 100644
index 0000000..a32c871
--- /dev/null
+++ b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.PublicKeyTest.xml
@@ -0,0 +1,58 @@
+
+
+
+
+ org.bitcoinj.core.AddressFormatException: Illegal character 0 at position 48
+ at org.bitcoinj.core.Base58.decode(Base58.java:110)
+ at de.bitsharesmunich.graphenej.Address.<init>(Address.java:33)
+ at de.bitsharesmunich.graphenej.PublicKeyTest.equals(PublicKeyTest.java:20)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+ at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+ at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+ at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+ at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+ at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+ at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+ at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
+ at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
+ at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+ at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
diff --git a/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.objects.MemoTest.xml b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.objects.MemoTest.xml
new file mode 100644
index 0000000..8602385
--- /dev/null
+++ b/graphenej/build/test-results/test/TEST-de.bitsharesmunich.graphenej.objects.MemoTest.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graphenej/build/test-results/test/binary/output.bin.idx b/graphenej/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 0000000..a9658ee
Binary files /dev/null and b/graphenej/build/test-results/test/binary/output.bin.idx differ
diff --git a/graphenej/build/tmp/fatJar/MANIFEST.MF b/graphenej/build/tmp/fatJar/MANIFEST.MF
new file mode 100644
index 0000000..5b0d8fb
--- /dev/null
+++ b/graphenej/build/tmp/fatJar/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Implementation-Title: Graphenej test
+Implementation-Version: 0.1-SNAPSHOT
+Main-Class: de.bitsharesmunich.graphenej.Main
+
diff --git a/graphenej/build/tmp/jar/MANIFEST.MF b/graphenej/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 0000000..59499bc
--- /dev/null
+++ b/graphenej/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/gradle/wrapper/gradle-wrapper.jar b/graphenej/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.jar
rename to graphenej/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/wrapper/gradle-wrapper.properties b/graphenej/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.properties
rename to graphenej/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradlew b/graphenej/gradlew
similarity index 100%
rename from gradlew
rename to graphenej/gradlew
diff --git a/gradlew.bat b/graphenej/gradlew.bat
similarity index 96%
rename from gradlew.bat
rename to graphenej/gradlew.bat
index f6d5974..832fdb6 100644
--- a/gradlew.bat
+++ b/graphenej/gradlew.bat
@@ -1,90 +1,90 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/graphenej/old.settings.gradle b/graphenej/old.settings.gradle
new file mode 100644
index 0000000..b36009e
--- /dev/null
+++ b/graphenej/old.settings.gradle
@@ -0,0 +1,3 @@
+rootProject.name = 'graphenej'
+include 'application'
+
diff --git a/src/main/java/de/bitsharesmunich/graphenej/AccountOptions.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountOptions.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/AccountOptions.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountOptions.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateOperation.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateOperation.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/AccountUpdateOperation.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateOperation.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/AccountUpdateTransactionBuilder.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Address.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Address.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Address.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Address.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Asset.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Asset.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Asset.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Asset.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/AssetAmount.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/AssetAmount.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/AssetAmount.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/AssetAmount.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/AssetOptions.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/AssetOptions.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/AssetOptions.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/AssetOptions.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Authority.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Authority.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Authority.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Authority.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/BIP39.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/BIP39.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/BIP39.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/BIP39.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/BaseOperation.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/BaseOperation.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/BaseOperation.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/BaseOperation.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/BlockData.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/BlockData.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/BlockData.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/BlockData.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/BrainKey.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/BrainKey.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/BrainKey.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/BrainKey.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Chains.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Chains.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Chains.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Chains.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Converter.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Converter.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Converter.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Converter.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Extensions.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Extensions.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Extensions.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Extensions.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/FileBin.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/FileBin.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/FileBin.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/FileBin.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/GrapheneObject.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/GrapheneObject.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/GrapheneObject.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/GrapheneObject.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Invoice.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Invoice.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Invoice.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Invoice.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/LimitOrder.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/LimitOrder.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/LimitOrder.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/LimitOrder.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/LineItem.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/LineItem.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/LineItem.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/LineItem.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Main.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Main.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Main.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Main.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/MarketTrade.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/MarketTrade.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/MarketTrade.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/MarketTrade.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/ObjectType.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/ObjectType.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/ObjectType.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/ObjectType.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/OperationType.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/OperationType.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/OperationType.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/OperationType.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Optional.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Optional.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Optional.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Optional.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Price.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Price.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Price.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Price.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/PublicKey.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/PublicKey.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/PublicKey.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/PublicKey.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/RPC.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/RPC.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/RPC.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/RPC.java
diff --git a/graphenej/src/main/java/de/bitsharesmunich/graphenej/Test.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Test.java
new file mode 100644
index 0000000..8322619
--- /dev/null
+++ b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Test.java
@@ -0,0 +1,1415 @@
+package de.bitsharesmunich.graphenej;
+
+import com.google.common.primitives.Bytes;
+import de.bitsharesmunich.graphenej.interfaces.SubscriptionListener;
+import de.bitsharesmunich.graphenej.models.*;
+import de.bitsharesmunich.graphenej.models.backup.LinkedAccount;
+import de.bitsharesmunich.graphenej.models.backup.PrivateKeyBackup;
+import de.bitsharesmunich.graphenej.models.backup.Wallet;
+import de.bitsharesmunich.graphenej.models.backup.WalletBackup;
+import de.bitsharesmunich.graphenej.objects.Memo;
+import com.google.common.primitives.UnsignedLong;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.reflect.TypeToken;
+import de.bitsharesmunich.graphenej.errors.MalformedAddressException;
+import de.bitsharesmunich.graphenej.errors.MalformedTransactionException;
+import de.bitsharesmunich.graphenej.interfaces.WitnessResponseListener;
+import de.bitsharesmunich.graphenej.test.NaiveSSLContext;
+import com.neovisionaries.ws.client.*;
+import de.bitsharesmunich.graphenej.api.*;
+import org.bitcoinj.core.*;
+import org.spongycastle.crypto.digests.RIPEMD160Digest;
+import org.tukaani.xz.*;
+
+import javax.net.ssl.SSLContext;
+import java.io.*;
+import java.lang.reflect.Type;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Created by nelson on 11/9/16.
+ */
+public class Test {
+
+ public static final String AMAZON_WITNESS = "ws://54.91.97.99:8090";
+ public static final String WITNESS_URL = "api://api.devling.xyz:8088";
+ public static final String OPENLEDGER_WITNESS_URL = "wss://bitshares.openledger.info/api";
+ public static final String BLOCK_PAY_DE = "wss://de.blockpay.ch:8089";
+ public static final String BLOCK_PAY_FR = "wss://fr.blockpay.ch:8089";
+
+ private Transaction transaction;
+
+ public Transaction GetTransaction() {
+ return transaction;
+ }
+
+ private WitnessResponseListener mListener = new WitnessResponseListener() {
+
+ @Override
+ public void onSuccess(WitnessResponse response) {
+
+ if (response.result.getClass() == AccountProperties.class) {
+ AccountProperties accountProperties = (AccountProperties) response.result;
+ System.out.println("Got account properties");
+ System.out.println("account: " + accountProperties.toString());
+ System.out.println("id: " + accountProperties.id);
+
+ } else if (response.result.getClass() == ArrayList.class) {
+ List list = (List) response.result;
+ if (list.size() > 0) {
+ if (list.get(0) instanceof AccountProperties) {
+ List accountPropertiesList = list;
+ for (AccountProperties accountProperties : accountPropertiesList) {
+ System.out.println("Account id: " + accountProperties.id);
+ }
+ } else if (list.get(0) instanceof AssetAmount) {
+ AssetAmount assetAmount = (AssetAmount) list.get(0);
+ System.out.println("Got fee");
+ System.out.println("amount: " + assetAmount.getAmount() + ", asset id: " + assetAmount.getAsset().getObjectId());
+ } else if (list.get(0).getClass() == ArrayList.class) {
+ List sl = (List) list.get(0);
+ if (sl.size() > 0) {
+ if (response.result.getClass() == AccountProperties.class) {
+ AccountProperties accountProperties = (AccountProperties) response.result;
+ System.out.println("Got account properties " + accountProperties);
+ } else {
+ String accountId = (String) sl.get(0);
+ System.out.println("account id : " + accountId);
+ try {
+
+ // Create a custom SSL context.
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(OPENLEDGER_WITNESS_URL);
+ ArrayList userAccounts = new ArrayList();
+ userAccounts.add(new UserAccount(accountId));
+ mWebSocket.addListener(new GetAccounts(userAccounts, null));
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException ex) {
+ Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+ } else {
+ System.out.println("Got empty list!");
+ }
+ } else if (response.result.getClass() == JsonArray.class) {
+ System.out.println("Json array : " + ((JsonArray) response.result));
+ } else {
+ System.out.println("Got other: " + response.result.getClass());
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError. message: " + error.message);
+ }
+ };
+
+ public ECKey.ECDSASignature testSigning() {
+ byte[] serializedTransaction = this.transaction.toBytes();
+ Sha256Hash hash = Sha256Hash.wrap(Sha256Hash.hash(serializedTransaction));
+ byte[] bytesDigest = hash.getBytes();
+ ECKey sk = transaction.getPrivateKey();
+ ECKey.ECDSASignature signature = sk.sign(hash);
+ return signature;
+ }
+
+ public String testSigningMessage() {
+ byte[] serializedTransaction = this.transaction.toBytes();
+ Sha256Hash hash = Sha256Hash.wrap(Sha256Hash.hash(serializedTransaction));
+ ECKey sk = transaction.getPrivateKey();
+ return sk.signMessage(hash.toString());
+ }
+
+ public byte[] signMessage() {
+ byte[] serializedTransaction = this.transaction.toBytes();
+ Sha256Hash hash = Sha256Hash.wrap(Sha256Hash.hash(serializedTransaction));
+ System.out.println(">> digest <<");
+ System.out.println(Util.bytesToHex(hash.getBytes()));
+ ECKey sk = transaction.getPrivateKey();
+ System.out.println("Private key bytes");
+ System.out.println(Util.bytesToHex(sk.getPrivKeyBytes()));
+ boolean isCanonical = false;
+ int recId = -1;
+ ECKey.ECDSASignature sig = null;
+ while (!isCanonical) {
+ sig = sk.sign(hash);
+ if (!sig.isCanonical()) {
+ System.out.println("Signature was not canonical, retrying");
+ continue;
+ } else {
+ System.out.println("Signature is canonical");
+ isCanonical = true;
+ }
+ // Now we have to work backwards to figure out the recId needed to recover the signature.
+ for (int i = 0; i < 4; i++) {
+ ECKey k = ECKey.recoverFromSignature(i, sig, hash, sk.isCompressed());
+ if (k != null && k.getPubKeyPoint().equals(sk.getPubKeyPoint())) {
+ recId = i;
+ break;
+ } else {
+ if (k == null) {
+ System.out.println("Recovered key was null");
+ }
+ if (k.getPubKeyPoint().equals(sk.getPubKeyPoint())) {
+ System.out.println("Recovered pub point is not equal to sk pub point");
+ }
+ }
+ }
+ if (recId == -1) {
+ throw new RuntimeException("Could not construct a recoverable key. This should never happen.");
+ }
+ }
+ int headerByte = recId + 27 + (sk.isCompressed() ? 4 : 0);
+ byte[] sigData = new byte[65]; // 1 header + 32 bytes for R + 32 bytes for S
+ sigData[0] = (byte) headerByte;
+ System.arraycopy(Utils.bigIntegerToBytes(sig.r, 32), 0, sigData, 1, 32);
+ System.arraycopy(Utils.bigIntegerToBytes(sig.s, 32), 0, sigData, 33, 32);
+ System.out.println("recId: " + recId);
+ System.out.println("r: " + Util.bytesToHex(sig.r.toByteArray()));
+ System.out.println("s: " + Util.bytesToHex(sig.s.toByteArray()));
+ return sigData;
+// return new String(Base64.encode(sigData), Charset.forName("UTF-8"));
+ }
+
+ public void testTransactionSerialization(long head_block_number, String head_block_id, long relative_expiration) {
+ BlockData blockData = new BlockData(head_block_number, head_block_id, relative_expiration);
+
+ ArrayList operations = new ArrayList();
+ UserAccount from = new UserAccount("1.2.138632");
+ UserAccount to = new UserAccount("1.2.129848");
+ AssetAmount amount = new AssetAmount(UnsignedLong.valueOf(100), new Asset("1.3.120"));
+ AssetAmount fee = new AssetAmount(UnsignedLong.valueOf(264174), new Asset("1.3.0"));
+ operations.add(new TransferOperation(from, to, amount, fee));
+ BrainKey brainKey = new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0);
+ this.transaction = new Transaction(brainKey.getWalletImportFormat(), blockData, operations);
+ byte[] serializedTransaction = this.transaction.toBytes();
+ System.out.println("Serialized transaction");
+ System.out.println(Util.bytesToHex(serializedTransaction));
+ }
+
+ public void testCustomSerializer() {
+ AssetAmount amount = new AssetAmount(UnsignedLong.valueOf(100), new Asset("1.3.120"));
+ String jsonAmount = amount.toJsonString();
+ System.out.println("JSON amount");
+ System.out.println(jsonAmount);
+ }
+
+ public void testUserAccountSerialization() {
+ UserAccount account = new UserAccount("1.2.138632");
+ System.out.println(Util.bytesToHex(account.toBytes()));
+ }
+
+ public void testTransactionSerialization() {
+ try {
+ Transaction transaction = new TransferTransactionBuilder()
+ .setSource(new UserAccount("1.2.138632"))
+ .setDestination(new UserAccount("1.2.129848"))
+ .setAmount(new AssetAmount(UnsignedLong.valueOf(100), new Asset("1.3.120")))
+ .setFee(new AssetAmount(UnsignedLong.valueOf(264174), new Asset("1.3.0")))
+ .setPrivateKey(DumpedPrivateKey.fromBase58(null, Main.WIF).getKey())
+ .setBlockData(new BlockData(Main.REF_BLOCK_NUM, Main.REF_BLOCK_PREFIX, Main.RELATIVE_EXPIRATION))
+ .build();
+
+ ArrayList transactionList = new ArrayList<>();
+ transactionList.add(transaction);
+
+ byte[] signature = transaction.getGrapheneSignature();
+ System.out.println(Util.bytesToHex(signature));
+ ApiCall call = new ApiCall(4, "call", "broadcast_transaction", transactionList, "2.0", 1);
+ String jsonCall = call.toJsonString();
+ System.out.println("json call");
+ System.out.println(jsonCall);
+ } catch (MalformedTransactionException e) {
+ System.out.println("MalformedTransactionException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testLoginSerialization() {
+ ArrayList loginParams = new ArrayList<>();
+// loginParams.add("nelson");
+// loginParams.add("supersecret");
+ loginParams.add(null);
+ loginParams.add(null);
+ ApiCall loginCall = new ApiCall(1, "login", loginParams, "2.0", 1);
+ String jsonLoginCall = loginCall.toJsonString();
+ System.out.println("login call");
+ System.out.println(jsonLoginCall);
+ }
+
+ public void testNetworkBroadcastSerialization() {
+ ArrayList params = new ArrayList<>();
+ ApiCall networkParamsCall = new ApiCall(3, "network_broadcast", params, "2.0", 1);
+ String call = networkParamsCall.toJsonString();
+ System.out.println("network broadcast");
+ System.out.println(call);
+ }
+
+ public void testNetworkBroadcastDeserialization() {
+ String response = "{\"id\":2,\"result\":2}";
+ Gson gson = new Gson();
+ Type ApiIdResponse = new TypeToken>() {
+ }.getType();
+ WitnessResponse witnessResponse = gson.fromJson(response, ApiIdResponse);
+ }
+
+ public void testGetDynamicParams() {
+ ArrayList emptyParams = new ArrayList<>();
+ ApiCall getDynamicParametersCall = new ApiCall(0, "get_dynamic_global_properties", emptyParams, "2.0", 0);
+ System.out.println(getDynamicParametersCall.toJsonString());
+ }
+
+ public void testRequiredFeesResponse() {
+ String response = "{\"id\":1,\"result\":[{\"amount\":264174,\"asset_id\":\"1.3.0\"}]}";
+ Type AccountLookupResponse = new TypeToken>>() {
+ }.getType();
+ GsonBuilder gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter(AssetAmount.class, new AssetAmount.AssetAmountDeserializer());
+ WitnessResponse> witnessResponse = gsonBuilder.create().fromJson(response, AccountLookupResponse);
+ for (AssetAmount assetAmount : witnessResponse.result) {
+ System.out.println("asset : " + assetAmount.toJsonString());
+ }
+ }
+
+ public void testTransactionBroadcastSequence() {
+ String url = Test.OPENLEDGER_WITNESS_URL;
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ System.out.println(error.data.message);
+ }
+ };
+
+ try {
+ ECKey from = new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0).getPrivateKey();
+ PublicKey to = new PublicKey(ECKey.fromPublicOnly(new BrainKey(Main.BILTHON_5_BRAIN_KEY, 0).getPublicKey()));
+
+ // Creating memo
+ long nonce = 1;
+ byte[] encryptedMessage = Memo.encryptMessage(from, to, nonce, "another message");
+ Memo memo = new Memo(new Address(ECKey.fromPublicOnly(from.getPubKey())), new Address(to.getKey()), nonce, encryptedMessage);
+
+ // Creating transaction
+ Transaction transaction = new TransferTransactionBuilder()
+ .setSource(new UserAccount("1.2.138632")) // bilthon-83
+ .setDestination(new UserAccount("1.2.139313")) // bilthon-5
+ .setAmount(new AssetAmount(UnsignedLong.valueOf(1), new Asset("1.3.0")))
+ .setFee(new AssetAmount(UnsignedLong.valueOf(264174), new Asset("1.3.0")))
+ .setPrivateKey(new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0).getPrivateKey())
+ .setMemo(memo)
+ .build();
+
+ ArrayList transactionList = new ArrayList<>();
+ transactionList.add(transaction);
+
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new TransactionBroadcastSequence(transaction, new Asset("1.3.0"), listener));
+ mWebSocket.connect();
+
+ } catch (MalformedTransactionException e) {
+ System.out.println("MalformedTransactionException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgoritmException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testAccountLookupDeserialization() {
+ String response = "{\"id\":1,\"result\":[[\"ken\",\"1.2.3111\"],[\"ken-1\",\"1.2.101491\"],[\"ken-k\",\"1.2.108646\"]]}";
+ Type AccountLookupResponse = new TypeToken>>>() {
+ }.getType();
+ Gson gson = new Gson();
+ WitnessResponse>> witnessResponse = gson.fromJson(response, AccountLookupResponse);
+ for (int i = 0; i < witnessResponse.result.size(); i++) {
+ System.out.println("suggested name: " + witnessResponse.result.get(i).get(0));
+ }
+ }
+
+ public void testPrivateKeyManipulations() {
+ String brainKeyWords = "PUMPER ISOTOME SERE STAINER CLINGER MOONLIT CHAETA UPBRIM AEDILIC BERTHER NIT SHAP SAID SHADING JUNCOUS CHOUGH";
+ BrainKey brainKey = new BrainKey(brainKeyWords, 0);
+
+ ECKey privateKey = DumpedPrivateKey.fromBase58(null, brainKey.getWalletImportFormat()).getKey();
+ System.out.println("private key..............: " + Util.bytesToHex(privateKey.getSecretBytes()));
+ System.out.println("public key uncompressed..: " + Util.bytesToHex(privateKey.getPubKey()));
+ System.out.println("public key compressed....: " + Util.bytesToHex(privateKey.getPubKeyPoint().getEncoded(true)));
+ System.out.println("base58...................: " + Base58.encode(privateKey.getPubKeyPoint().getEncoded(true)));
+ System.out.println("base58...................: " + Base58.encode(privateKey.getPubKey()));
+ }
+
+ public void testPublicKeyManipulations() {
+// PublicKey publicKey = new PublicKey("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+// System.out.println("Public key bytes");
+// System.out.println(Util.bytesToHex(publicKey.toBytes()));
+ Address address = null;
+ try {
+ address = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ System.out.println("Public key");
+ System.out.println(Util.bytesToHex(address.getPublicKey().toBytes()));
+ } catch (MalformedAddressException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void testGetAccountByName() {
+
+ WitnessResponseListener accountByNameListener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ AccountProperties accountProperties = (AccountProperties) response.result;
+ System.out.println("Owner and active authorities are the same: "+accountProperties.active.equals(accountProperties.owner));
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError. Msg: "+error.message);
+ }
+ };
+
+ try {
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new GetAccountByName("bilthon-83", accountByNameListener));
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testGetRequiredFees() {
+ ArrayList accountParams = new ArrayList<>();
+ Asset asset = new Asset("1.3.0");
+ UserAccount from = new UserAccount("1.2.138632");
+ UserAccount to = new UserAccount("1.2.129848");
+ AssetAmount amount = new AssetAmount(UnsignedLong.valueOf(100), new Asset("1.3.120"));
+ AssetAmount fee = new AssetAmount(UnsignedLong.valueOf(264174), new Asset("1.3.0"));
+ TransferOperation transfer = new TransferOperation(from, to, amount, fee);
+ ArrayList operations = new ArrayList<>();
+ operations.add(transfer);
+
+ accountParams.add(operations);
+ accountParams.add(asset.getObjectId());
+
+ try {
+ WebSocketFactory factory = new WebSocketFactory().setConnectionTimeout(5000);
+ WebSocket mWebSocket = factory.createSocket(WITNESS_URL);
+ mWebSocket.addListener(new GetRequiredFees(operations, asset, mListener));
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ }
+ }
+
+ /**
+ * The final purpose of this test is to convert the plain brainkey at
+ * Main.BILTHON_83_BRAIN_KEY into the WIF at Main.WIF
+ */
+ public void testBrainKeyOperations(boolean random) {
+ try {
+ BrainKey brainKey;
+ if (random) {
+ String current = new java.io.File(".").getCanonicalPath();
+ File file = new File(current + "/src/main/java/com/luminiasoft/bitshares/brainkeydict.txt");
+
+ BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
+ StringBuffer buffer = new StringBuffer();
+ String words = bufferedReader.readLine();
+ String suggestion = BrainKey.suggest(words);
+ brainKey = new BrainKey(suggestion, 0);
+ } else {
+ System.out.println("Using brain key: " + Main.BILTHON_5_BRAIN_KEY);
+ brainKey = new BrainKey(Main.BILTHON_5_BRAIN_KEY, 0);
+
+ }
+ ECKey key = brainKey.getPrivateKey();
+ System.out.println("Private key..................: " + Util.bytesToHex(key.getSecretBytes()));
+ String wif = key.getPrivateKeyAsWiF(NetworkParameters.fromID(NetworkParameters.ID_MAINNET));
+ System.out.println("Wif Compressed...............: " + wif);
+ String wif2 = key.decompress().getPrivateKeyAsWiF(NetworkParameters.fromID(NetworkParameters.ID_MAINNET));
+ System.out.println("Wif Decompressed.............: " + wif2);
+ System.out.println("Wif from BrainKey............: " + brainKey.getWalletImportFormat());
+
+ byte[] uncompressedPubKey = key.decompress().getPubKey();
+ byte[] compressedPubKey = key.getPubKey();
+
+ System.out.println("Public Key Decompressed......: " + Util.bytesToHex(uncompressedPubKey));
+ System.out.println("Public Key Compressed........: " + Util.bytesToHex(compressedPubKey));
+
+ // Address generation test
+ Address address = new Address(ECKey.fromPublicOnly(key.getPubKey()));
+ System.out.println("Block explorer's address.....: " + address);
+ } catch (FileNotFoundException e) {
+ System.out.println("FileNotFoundException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public byte[] calculateChecksum(byte[] input) {
+ byte[] answer = new byte[4];
+ RIPEMD160Digest ripemd160Digest = new RIPEMD160Digest();
+ ripemd160Digest.update(input, 0, input.length);
+ byte[] output = new byte[160 / 8];
+ ripemd160Digest.doFinal(output, 0);
+ System.arraycopy(output, 0, answer, 0, 4);
+ return answer;
+ }
+
+ public void testBip39Opertion() {
+ BIP39 bip39 = new BIP39(Main.BIP39_KEY, "");
+ }
+
+ public void testAccountNamebyAddress() {
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ BrainKey brainKey = new BrainKey(Main.BILTHON_83_ORIGINAL_BRAIN_KEY, 0);
+// Address address = new Address(ECKey.fromPublicOnly(brainKey.getPrivateKey().getPubKey()));
+ try {
+ Address address = new Address("BTS5BgjNRDeawGSc1NPk91p2BYYEhJWKgsjLZGDmFgY6uwhAYLy9G");
+
+ // Create a custom SSL context.
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+ mWebSocket.addListener(new GetAccountsByAddress(address, listener));
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ }
+ catch (MalformedAddressException e) {
+ System.out.println("MalformedAddressException. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testAccountNameById() {
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ try {
+ // Create a custom SSL context.
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_FR);
+ ArrayList userAccounts = new ArrayList<>();
+ userAccounts.add(new UserAccount("1.2.138632"));
+ mWebSocket.addListener(new GetAccounts(userAccounts, listener));
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testRelativeAccountHistory() {
+ GetRelativeAccountHistory relativeAccountHistory = new GetRelativeAccountHistory(new UserAccount("1.2.138632"), mListener);
+ try {
+ // Create a custom SSL context.
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(AMAZON_WITNESS);
+ mWebSocket.addListener(relativeAccountHistory);
+ mWebSocket.connect();
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testingInvoiceGeneration() {
+ LineItem[] lineItem = new LineItem[]{new LineItem("Apples", 2, 2.00)};
+ Invoice invoice = new Invoice("bilthon-83", "Bilthon's store", "Invoice #12", "BTS", lineItem, "Thank you", "");
+ String qrCodeData = Invoice.toQrCode(invoice);
+ System.out.println("qrCodeData");
+ System.out.println(qrCodeData);
+ Invoice recovered = Invoice.fromQrCode(qrCodeData);
+ System.out.println("recovered invoice: " + recovered.toJsonString());
+ }
+
+ public void testCompression() {
+ String test = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+ System.out.println("to compress");
+ System.out.println(Util.bytesToHex(test.getBytes()));
+ byte[] compressed = Util.compress(test.getBytes(), Util.XZ);
+ System.out.println("compressed");
+ System.out.println(Util.bytesToHex(compressed));
+ }
+
+ public void testCreateBinFile() {
+ byte[] fileOutput = FileBin.getBytesFromBrainKey(Main.BILTHON_83_BRAIN_KEY, "123456", "bithon-83");
+ ///String stringFile = "02f9f3eb0f61a0a96134975d86048bf92e114d6a1ce286140cad3a96c33e697282bc0a8a24d1ad0c7bc084a79816ce38e36bd2d624aa8bf686f53fb4c7e25e3974da9b40e0b17e9d0b5b82793a04b19646169c49c58cd67f4950aee7d275141dd24f52baaaee772995a9bd6a6562a7a38aae08951236d3f612aecef7aedd720a91eacbab3a792ca3ebe0105838fe11f6e9d0e83e5d77eb82f17c7ba85c670e69294a8bcf8365cfeca487a60093498496bbec394c729e3fda9f32fdccdea56288b36fb14a26aa309b548a6dd9c1d616d22167348f8d580f9dc7361b4457d2dc6d75ec985d8e2d3dcdff89cd425d9f14037ac961eb10ac5f92bab356ccecd8cf018ec05ab40d915b628a75ae32cfa4005634f08b24c0dc8c5a7636ed70cbd86a7f0c4f6236d74310470fafe3af8b5346c8cb61957f7292b468d276498f9e806399588b0afd5777e6ee5fe7cd3a6691d9b5486cb5c7adbd5ad0b17588dd32d82b01d49ecf0f2bf24ee54a490ee620e8ab049047ffa416b5efa8f1f0155d8f1be866a10d0d62ae44a3a8ecc0121c08837c2ee1a25f8b6dd7266273c41f4b9a5e3d600e3fb4de870f99ab1a7196d93f222595f92e97a2480f58b61b62639154a374b987664fd317622aaad156f831b03f2d9606537b65b3b1fcfb1fb6be39560ad2c301dd1fc25cee755e61b49ebfe42ca7e64b4b0fc4aa347b48a85c0b585a3499fe278e25cb2141f8009b9afc875fa2a2c439bf6cdec4b5190a6deb7f9390f072beb24749a8a2114cc1870c07be079abb3ee0ebc827f9b53e158a529bc6552eba280f05edf5f7ae1911de7acb4888150a509d029ec7c9da6de8adabbca6773a0a293a0a42de8278c82e88b9390b42b56f58bd8633fb97130e799a47a744e2e8958fd5";
+ //fileOutput = new BigInteger(stringFile, 16).toByteArray();
+ System.out.println(FileBin.getBrainkeyFromByte(fileOutput, "123456"));
+ }
+
+ public void testImportBinFile() {
+ try {
+ String current = new File(".").getCanonicalPath();
+ File file = new File(current + "/src/main/java/de/bitsharesmunich/graphenej/bts_bilthon-25_20170214.bin");
+ Path path = Paths.get(file.getAbsolutePath());
+ byte[] data = Files.readAllBytes(path);
+ byte[] publicKey = new byte[FileBin.PUBLIC_KEY_LENGTH];
+ System.arraycopy(data, 0, publicKey, 0, FileBin.PUBLIC_KEY_LENGTH);
+
+ MessageDigest md = MessageDigest.getInstance("SHA-256");
+ ECKey randomECKey = ECKey.fromPublicOnly(publicKey);
+ byte[] finalKey = randomECKey.getPubKeyPoint().multiply(ECKey.fromPrivate(md.digest(Main.BILTHON_25_PASSWORD.getBytes("UTF-8"))).getPrivKey()).normalize().getXCoord().getEncoded();
+
+ WalletBackup walletBackup = FileBin.deserializeWalletBackup(data, Main.BILTHON_25_PASSWORD);
+ System.out.println("Number of wallets: "+walletBackup.getWalletCount());
+ String brainKeyString = walletBackup.getWallet(0).decryptBrainKey(Main.BILTHON_25_PASSWORD);
+ System.out.println("Brain key: "+brainKeyString);
+ BrainKey brainKey = new BrainKey(brainKeyString, 1);
+ byte[] privateKey = brainKey.getPrivateKey().getPrivKeyBytes();
+ System.out.println("Brainkey derived private....: " + Util.bytesToHex(privateKey));
+
+ byte[] privateKey2 = walletBackup.getPrivateKeyBackup(0).decryptPrivateKey(walletBackup.getWallet(0).getEncryptionKey(Main.BILTHON_25_PASSWORD));
+ System.out.println("Encrypted private key.......: "+Util.bytesToHex(privateKey2));
+
+ Address addr1 = new Address(ECKey.fromPublicOnly(ECKey.fromPrivate(privateKey).getPubKey()));
+ Address addr2 = new Address(ECKey.fromPublicOnly(ECKey.fromPrivate(privateKey2).getPubKey()));
+ Address addr3 = new Address(ECKey.fromPublicOnly(publicKey));
+ System.out.println("Addr1: "+addr1.toString());
+ System.out.println("Addr2: "+addr2.toString());
+ System.out.println("Addr3: "+addr3.toString());
+ } catch (IOException e) {
+ System.out.println("IOException while trying to open bin file. Msg: "+e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException while trying to open bin file. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testExportBinFile(){
+ String password = "123456";
+ BrainKey brainKey = new BrainKey(Main.BILTHON_11_BRAIN_KEY, 0);
+ Wallet wallet = new Wallet("bilthon-11", brainKey.getBrainKey(), brainKey.getSequenceNumber(), Chains.BITSHARES.CHAIN_ID, password);
+ byte[] privateKey = brainKey.getPrivateKey().getPrivKeyBytes();
+ PrivateKeyBackup privateKeyBackup = new PrivateKeyBackup(privateKey, brainKey.getSequenceNumber(), 1, wallet.getEncryptionKey(password));
+ LinkedAccount linkedAccount = new LinkedAccount("bilthon-11", Chains.BITSHARES.CHAIN_ID);
+
+ ArrayList walletList = new ArrayList<>();
+ walletList.add(wallet);
+ ArrayList keyList = new ArrayList<>();
+ keyList.add(privateKeyBackup);
+ ArrayList linkedAccounts = new ArrayList<>();
+ linkedAccounts.add(linkedAccount);
+ WalletBackup backup = new WalletBackup(walletList, keyList, linkedAccounts);
+ byte[] serialized = FileBin.serializeWalletBackup(backup, password);
+ System.out.println("Serialized: "+Util.bytesToHex(serialized));
+ try {
+ String current = new File(".").getCanonicalPath();
+ String fullPath = current + "/scwall_bithon_11.bin";
+ System.out.println("Full path: "+fullPath);
+ File file = new File(fullPath);
+ FileOutputStream out = new FileOutputStream(file);
+ out.write(serialized);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void testLzmaCompression(){
+ String data = "A long time ago in a galaxy far, far away...";
+ byte[] compressed = Util.compress(data.getBytes(), Util.LZMA);
+
+ try {
+ String current = new File(".").getCanonicalPath();
+ File file = new File(current + "/src/main/java/de/bitsharesmunich/graphenej/java_compressed_1.4.lzma");
+ FileOutputStream out = new FileOutputStream(file);
+ System.out.println("Writing "+compressed.length+" bytes");
+ out.write(compressed);
+ out.close();
+ }catch(IOException e){
+ System.out.println("IOException. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testSimpleDecompression(){
+ try{
+ String current = new File(".").getCanonicalPath();
+// File file = new File(current + "/src/main/java/de/bitsharesmunich/graphenej/node_compressed_1.2.lzma");
+ File file = new File(current + "/src/main/java/de/bitsharesmunich/graphenej/decrypted.bin");
+ Path path = Paths.get(file.getAbsolutePath());
+ byte[] data = Files.readAllBytes(path);
+ byte[] decompressed = Util.decompress(data, Util.LZMA);
+ System.out.println("Decompressed.......: "+Util.bytesToHex(decompressed));
+ String message = new String(decompressed);
+ System.out.println("Decompressed msg...: "+message);
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testLzmaDecompression(){
+ try {
+ String current = new File(".").getCanonicalPath();
+ File file = new File(current + "/src/main/java/de/bitsharesmunich/graphenej/java_compressed_1.4.lzma");
+ Path path = Paths.get(file.getAbsolutePath());
+ byte[] data = Files.readAllBytes(path);
+ System.out.println("Compressed bytes...: " + Util.bytesToHex(data));
+
+ InputStream in = null;
+ byte[] decompressed;
+ byte[] properties = Arrays.copyOfRange(data, 0, 1);
+ byte[] dictSize = Arrays.copyOfRange(data, 1, 5);
+ byte[] uncompressedSize = Arrays.copyOfRange(data, 5, 13);
+ byte[] header = Bytes.concat(properties, Util.revertBytes(dictSize), Util.revertBytes(uncompressedSize));
+ byte[] payload = Arrays.copyOfRange(data, 13, data.length);
+ System.out.println("Header.............: "+Util.bytesToHex(header));
+ System.out.println("Payload............: "+Util.bytesToHex(payload));
+ ByteArrayInputStream input = new ByteArrayInputStream(Bytes.concat(header, payload));
+ ByteArrayOutputStream output = new ByteArrayOutputStream(2 * 2048);
+// in = new LZMAInputStream(input, 44, (byte) 0x5d, 65536);
+ in = new LZMAInputStream(input);
+ int size;
+ try{
+ while ((size = in.read()) != -1) {
+ output.write(size);
+ }
+ }catch(IOException e){
+ System.out.println("IOException detected. End of stream reached. Msg: "+e.getMessage());
+ }
+ in.close();
+ decompressed = output.toByteArray();
+
+ System.out.println("Decompressed bytes.: " + Util.bytesToHex(decompressed));
+ String decompressedString = new String(decompressed);
+ System.out.println("Decompressed: " + decompressedString);
+ } catch (CorruptedInputException e) {
+ System.out.println("CorruptedInputException. Msg: " + e.getMessage());
+ } catch (UnsupportedOptionsException e){
+ System.out.println("UnsupportedOptionsException. Msg: "+e.getMessage());
+ } catch(IOException e){
+ System.out.println("IOException. Msg: "+e.getMessage());
+ }
+ }
+
+ public void testAccountUpdateSerialization() {
+ String newAddress = "BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY";
+ try {
+ Address address = new Address(newAddress);
+ HashMap authMap = new HashMap<>();
+ authMap.put(address.getPublicKey(), 1);
+ Authority authority = new Authority(1, authMap, null);
+ AccountOptions options = new AccountOptions(address.getPublicKey());
+ BrainKey brainKey = new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0);
+ Transaction transaction = new AccountUpdateTransactionBuilder(brainKey.getPrivateKey())
+ .setAccont(new UserAccount("1.2.140994"))
+// .setOwner(authority)
+ .setActive(authority)
+ .setOptions(options)
+ .setBlockData(new BlockData(Main.REF_BLOCK_NUM, Main.REF_BLOCK_PREFIX, Main.RELATIVE_EXPIRATION))
+ .build();
+
+ System.out.println("Json object");
+ System.out.println(transaction.toJsonString());
+ System.out.println("Serialized transaction");
+ System.out.println(Util.bytesToHex(transaction.toBytes()));
+ } catch (MalformedAddressException e) {
+ System.out.println("MalformedAddressException. Msg: " + e.getMessage());
+ } catch (MalformedTransactionException e) {
+ System.out.println("MalformedTransactionException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testAccountUpdateOperationBroadcast() {
+
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ String newAddress = "BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY";
+ try {
+ Address address = new Address(newAddress);
+ HashMap authMap = new HashMap<>();
+ authMap.put(address.getPublicKey(), 1);
+ Authority authority = new Authority(1, authMap, null);
+ AccountOptions options = new AccountOptions(address.getPublicKey());
+ BrainKey brainKey = new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0);
+ Transaction transaction = new AccountUpdateTransactionBuilder(brainKey.getPrivateKey())
+ .setAccont(new UserAccount("1.2.138632"))
+// .setOwner(authority)
+ .setActive(authority)
+ .setOptions(options)
+ .build();
+
+ SSLContext context = null;
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new TransactionBroadcastSequence(transaction, new Asset("1.3.0"), listener));
+ mWebSocket.connect();
+
+ } catch (MalformedAddressException e) {
+ System.out.println("MalformedAddressException. Msg: " + e.getMessage());
+ } catch (MalformedTransactionException e) {
+ System.out.println("MalformedTransactionException. Msg: " + e.getMessage());
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testLookupAccounts() {
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new LookupAccounts("bilthon", listener));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testDecodeMemo() {
+
+ ECKey from = new BrainKey(Main.BILTHON_83_BRAIN_KEY, 0).getPrivateKey();
+ PublicKey to = new PublicKey(ECKey.fromPublicOnly(new BrainKey(Main.BILTHON_5_BRAIN_KEY, 0).getPublicKey()));
+
+// Memo sendMemo = new MemoBuilder().setFromKey(from).setToKey(to).setMessage("test message").build();
+
+// JsonElement memoJson = sendMemo.toJsonObject();
+// System.out.println("generated Json : " + memoJson.toString());
+// System.out.println("Decode Memo : " + Memo.decryptMessage(from, to, memoJson.getAsJsonObject().get("message").getAsString(), memoJson.getAsJsonObject().get("nonce").getAsString()));
+ }
+
+ public void testGetRelativeAccountHistory(){
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ List transactionHistory = (List) response.result;
+ System.out.println("Number of transactions: "+transactionHistory.size());
+ for(HistoricalTransfer historical : transactionHistory){
+ if(historical.getOperation() != null){
+ TransferOperation op = historical.getOperation();
+ System.out.println("from: "+op.getFrom().getObjectId()+", to: "+op.getTo().getObjectId()+", amount: "+op.getAssetAmount().getAmount()+", block #: "+historical.getBlockNum());
+ }
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new GetRelativeAccountHistory(new UserAccount("1.2.140994"), listener));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testLookupAssetSymbols(){
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ WitnessResponse> resp = response;
+ for(Asset asset : resp.result){
+ System.out.println("Asset: "+asset.getObjectId()+", Symbol: "+asset.getSymbol()+", supply: ");
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ ArrayList assets = new ArrayList<>();
+ assets.add(new Asset("1.3.0"));
+ assets.add(new Asset("1.3.120"));
+ assets.add(new Asset("1.3.121"));
+ mWebSocket.addListener(new LookupAssetSymbols(assets, listener));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testListAssets(){
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ List resp = (List) response.result;
+ System.out.println(String.format("Got %d assets", resp.size()));
+ int count = 0;
+ for(Asset asset : resp){
+ if(asset.getBitassetId() != null){
+ System.out.println("Asset: " + asset.getObjectId() +
+ ", Symbol: "+asset.getSymbol() +
+ ", bitasset id: "+asset.getBitassetId());
+ count++;
+ }
+ }
+ System.out.println("Got "+count+" smartcoins");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ mWebSocket.addListener(new ListAssets("", ListAssets.LIST_ALL, listener));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testGetObjects(){
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ List bitAssetDataArray = (List) response.result;
+ for(BitAssetData bitAssetData : bitAssetDataArray){
+// System.out.println(String.format("is prediction market: %b", bitAssetData.is_prediction_market));
+ System.out.println("base: "+bitAssetData.current_feed.core_exchange_rate.base.getAmount().longValue());
+ System.out.println("quote: "+bitAssetData.current_feed.core_exchange_rate.quote.getAmount().longValue());
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ ArrayList ids = new ArrayList<>();
+ ids.add("2.4.54");
+ mWebSocket.addListener(new GetObjects(ids, listener));
+ mWebSocket.connect();
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testGetBlockHeader(){
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+
+ mWebSocket.addListener(new GetBlockHeader(11989481, listener));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ void testGetLimitOrders() {
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ Asset base = new Asset("1.3.120", "EUR", 4);
+ Asset quote = new Asset("1.3.121", "USD", 4);
+
+ mWebSocket.addListener(new GetLimitOrders(base.getObjectId(), quote.getObjectId(), 100, new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ List orders = (List) response.result;
+ Converter converter = new Converter();
+ System.out.println();
+ for(LimitOrder order : orders){
+// System.out.println(String.format("base: %d, quote: %d",
+// order.sell_price.base.getAmount().longValue(),
+// order.sell_price.quote.getAmount().longValue()));
+ order.sell_price.base.getAsset().setPrecision(base.getPrecision());
+ order.sell_price.quote.getAsset().setPrecision(quote.getPrecision());
+ double baseToQuoteExchange = converter.getConversionRate(order.sell_price, Converter.BASE_TO_QUOTE);
+ double quoteToBaseExchange = converter.getConversionRate(order.sell_price, Converter.QUOTE_TO_BASE);
+ System.out.println(String.format("base to quote: %.5f, quote to base: %.5f", baseToQuoteExchange, quoteToBaseExchange));
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+ }));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ void testGetTradeHistory() {
+ SSLContext context = null;
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_FR);
+
+ Calendar from = Calendar.getInstance();
+ from.roll(Calendar.DAY_OF_MONTH, false);
+ from.roll(Calendar.DAY_OF_MONTH, false);
+ Calendar to = Calendar.getInstance();
+ to.roll(Calendar.DAY_OF_MONTH, false);
+
+ mWebSocket.addListener(new GetTradeHistory("BTS", "EUR", "20161215T0130000", "20161212T233000",100, new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ List orders = (List) response.result;
+ for(MarketTrade markeTrade : orders){
+ System.out.println("At " + markeTrade.date + " amount " + markeTrade.amount + " value " + markeTrade.value + " price " + markeTrade.price);
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ }
+ }));
+ mWebSocket.connect();
+
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testGetMarketHistory(){
+ SSLContext context = null;
+
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ List bucketList = (List) response.result;
+ if(bucketList.size() > 0){
+ BucketObject bucket = bucketList.get(0);
+ Asset base = bucket.key.base;
+ Asset quote = bucket.key.quote;
+ base.setPrecision(5);
+ quote.setPrecision(4);
+ System.out.println(String.format("Base. symbol: %s, precision: %d", base.getObjectId(), base.getPrecision()));
+ System.out.println(String.format("Quote. symbol: %s, precision: %d", quote.getObjectId(), quote.getPrecision()));
+ Converter converter = new Converter(base, quote, bucket);
+ double rate = converter.getConversionRate(Converter.CLOSE_VALUE, Converter.BASE_TO_QUOTE);
+ System.out.println(String.format("Conversion rate is 1 base -> %f quote", rate));
+ double rate2 = converter.getConversionRate(Converter.CLOSE_VALUE, Converter.QUOTE_TO_BASE);
+ System.out.println(String.format("Conversion rate is 1 quote -> %f base", rate2));
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_FR);
+
+ long posixInstant = 1484089226000l;
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(posixInstant);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MINUTE, 0);
+
+ Asset USD = new Asset("1.3.121", "USD", 4);
+ Asset BTS = new Asset("1.3.0", "BTS", 5);
+ long bucket = 3600;
+
+ mWebSocket.addListener(new GetMarketHistory(BTS, USD, bucket, cal.getTime(), cal.getTime(), listener));
+ mWebSocket.connect();
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testAssetSerialization(){
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ DataOutput out = new DataOutputStream(byteArrayOutputStream);
+ try {
+ Varint.writeUnsignedVarLong(120, out);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ byte[] bytes = byteArrayOutputStream.toByteArray();
+ System.out.println("serialized: "+Util.bytesToHex(bytes));
+ }
+
+ public void testGetAccountBalances(){
+ SSLContext context = null;
+
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_FR);
+
+ UserAccount account = new UserAccount("1.2.138632");
+ Asset asset = new Asset("1.3.121"); //USD
+ ArrayList assetList = new ArrayList<>();
+ assetList.add(asset);
+ mWebSocket.addListener(new GetAccountBalances(account, assetList, listener));
+ mWebSocket.connect();
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testGetAssetHoldersCount(){
+ SSLContext context = null;
+
+ WitnessResponseListener listener = new WitnessResponseListener() {
+ @Override
+ public void onSuccess(WitnessResponse response) {
+ System.out.println("onSuccess");
+ List holdersCountList = (List) response.result;
+ for(AssetHolderCount holdersCount : holdersCountList){
+ System.out.println(String.format("Asset %s has %d holders", holdersCount.asset.getObjectId(), holdersCount.count));
+ }
+ }
+
+ @Override
+ public void onError(BaseResponse.Error error) {
+ System.out.println("onError");
+ }
+ };
+
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(AMAZON_WITNESS);
+
+ mWebSocket.addListener(new GetAllAssetHolders(listener));
+ mWebSocket.connect();
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+
+ public void testSubscription(WitnessResponseListener listener){
+ SSLContext context = null;
+
+ try {
+ context = NaiveSSLContext.getInstance("TLS");
+ WebSocketFactory factory = new WebSocketFactory();
+
+ // Set the custom SSL context.
+ factory.setSSLContext(context);
+
+ WebSocket mWebSocket = factory.createSocket(BLOCK_PAY_DE);
+
+ SubscriptionMessagesHub subscriptionHub = new SubscriptionMessagesHub("", "");
+ mWebSocket.addListener(subscriptionHub);
+ mWebSocket.connect();
+ subscriptionHub.addSubscriptionListener(new SubscriptionListener() {
+ @Override
+ public ObjectType getInterestObjectType() {
+ return ObjectType.TRANSACTION_OBJECT;
+ }
+
+ @Override
+ public void onSubscriptionUpdate(SubscriptionResponse response) {
+ try{
+ List updatedObjects = (List) response.params.get(1);
+ if(updatedObjects.size() > 0){
+ for(Serializable update : updatedObjects){
+ if(update instanceof BroadcastedTransaction){
+ Transaction t = ((BroadcastedTransaction) update).getTransaction();
+ if(t.getOperations().size() > 0){
+ for(BaseOperation op : t.getOperations()){
+ if(op instanceof TransferOperation){
+ System.out.println(String.format("Got transaction from: %s, to: %s", ((TransferOperation) op).getFrom().getObjectId(), ((TransferOperation) op).getTo().getObjectId()));
+ }
+ }
+ }
+ }
+ }
+ }
+ }catch(Exception e){
+ System.out.println("Exception. Msg: "+e.getMessage());
+ for(StackTraceElement el : e.getStackTrace()){
+ System.out.println(el.getFileName()+"#"+el.getMethodName()+":"+el.getLineNumber());
+ }
+ }
+ }
+ });
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("NoSuchAlgorithmException. Msg: " + e.getMessage());
+ } catch (WebSocketException e) {
+ System.out.println("WebSocketException. Msg: " + e.getMessage());
+ } catch (IOException e) {
+ System.out.println("IOException. Msg: " + e.getMessage());
+ }
+ }
+}
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Transaction.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Transaction.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Transaction.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Transaction.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/TransactionBuilder.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/TransactionBuilder.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/TransactionBuilder.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/TransactionBuilder.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/TransferOperation.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/TransferOperation.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/TransferOperation.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/TransferOperation.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/TransferTransactionBuilder.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/TransferTransactionBuilder.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/TransferTransactionBuilder.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/TransferTransactionBuilder.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/UserAccount.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/UserAccount.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/UserAccount.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/UserAccount.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Util.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Util.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Util.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Util.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Varint.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Varint.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Varint.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Varint.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/Vote.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/Vote.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/Vote.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/Vote.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/BaseGrapheneHandler.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountBalances.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountBalances.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAccountBalances.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountBalances.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountByName.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountByName.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAccountByName.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountByName.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountHistory.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountHistory.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAccountHistory.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountHistory.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAccounts.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccounts.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAccounts.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccounts.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAccountsByAddress.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetAllAssetHolders.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetBlockHeader.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetBlockHeader.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetBlockHeader.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetBlockHeader.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetLimitOrders.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetLimitOrders.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetLimitOrders.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetLimitOrders.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetMarketHistory.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetMarketHistory.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetMarketHistory.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetMarketHistory.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetObjects.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetObjects.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetObjects.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetObjects.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetRelativeAccountHistory.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetRequiredFees.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetRequiredFees.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetRequiredFees.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetRequiredFees.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/GetTradeHistory.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetTradeHistory.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/GetTradeHistory.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/GetTradeHistory.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/ListAssets.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/ListAssets.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/ListAssets.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/ListAssets.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/LookupAccounts.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/LookupAccounts.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/LookupAccounts.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/LookupAccounts.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/LookupAssetSymbols.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/SubscriptionMessagesHub.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/api/TransactionBroadcastSequence.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/brainkeydict.txt b/graphenej/src/main/java/de/bitsharesmunich/graphenej/brainkeydict.txt
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/brainkeydict.txt
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/brainkeydict.txt
diff --git a/src/main/java/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/AndroidRandomSource.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/crypto/EntropySource.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/EntropySource.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/crypto/EntropySource.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/EntropySource.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/crypto/RandomSource.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/RandomSource.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/crypto/RandomSource.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/RandomSource.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomGenerator.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/crypto/SecureRandomStrengthener.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/errors/ChecksumException.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/ChecksumException.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/errors/ChecksumException.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/ChecksumException.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/IncompatibleOperation.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/IncompleteAssetError.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedAddressException.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedAddressException.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/errors/MalformedAddressException.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedAddressException.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/errors/MalformedTransactionException.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/ByteSerializable.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/GrapheneSerializable.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/JsonSerializable.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionHub.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/SubscriptionListener.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/interfaces/WitnessResponseListener.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AccountBalanceUpdate.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/AccountProperties.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AccountProperties.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/AccountProperties.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AccountProperties.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/ApiCall.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/ApiCall.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/ApiCall.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/ApiCall.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/AssetFeed.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AssetFeed.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/AssetFeed.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AssetFeed.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/AssetHolderCount.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AssetHolderCount.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/AssetHolderCount.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/AssetHolderCount.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/BaseResponse.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BaseResponse.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/BaseResponse.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BaseResponse.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/BitAssetData.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BitAssetData.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/BitAssetData.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BitAssetData.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/BlockHeader.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BlockHeader.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/BlockHeader.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BlockHeader.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BroadcastedTransaction.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/BucketObject.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BucketObject.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/BucketObject.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/BucketObject.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/DynamicGlobalProperties.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/HistoricalTransfer.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/HistoricalTransfer.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/HistoricalTransfer.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/HistoricalTransfer.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/SubscriptionResponse.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/SubscriptionResponse.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/SubscriptionResponse.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/SubscriptionResponse.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/WitnessResponse.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/WitnessResponse.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/WitnessResponse.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/WitnessResponse.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/LinkedAccount.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/PrivateKeyBackup.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/backup/Wallet.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/Wallet.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/backup/Wallet.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/Wallet.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/models/backup/WalletBackup.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/WalletBackup.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/models/backup/WalletBackup.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/models/backup/WalletBackup.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/objects/Memo.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/objects/Memo.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/objects/Memo.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/objects/Memo.java
diff --git a/src/main/java/de/bitsharesmunich/graphenej/test/NaiveSSLContext.java b/graphenej/src/main/java/de/bitsharesmunich/graphenej/test/NaiveSSLContext.java
similarity index 100%
rename from src/main/java/de/bitsharesmunich/graphenej/test/NaiveSSLContext.java
rename to graphenej/src/main/java/de/bitsharesmunich/graphenej/test/NaiveSSLContext.java
diff --git a/graphenej/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java b/graphenej/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java
new file mode 100644
index 0000000..81d01dc
--- /dev/null
+++ b/graphenej/src/test/java/de/bitsharesmunich/graphenej/AssetTest.java
@@ -0,0 +1,19 @@
+package de.bitsharesmunich.graphenej;
+
+import org.junit.*;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by nelson on 12/24/16.
+ */
+public class AssetTest {
+
+ @org.junit.Test
+ public void equals() throws Exception {
+ Asset bts = new Asset("1.3.0");
+ Asset bitUSD = new Asset("1.3.121");
+ assertNotEquals("Different assets should not be equal", bts, bitUSD);
+ }
+
+}
\ No newline at end of file
diff --git a/graphenej/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java b/graphenej/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java
new file mode 100644
index 0000000..cc9846d
--- /dev/null
+++ b/graphenej/src/test/java/de/bitsharesmunich/graphenej/AuthorityTest.java
@@ -0,0 +1,61 @@
+package de.bitsharesmunich.graphenej;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.InputMismatchException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+/**
+ * Created by nelson on 12/16/16.
+ */
+public class AuthorityTest {
+ private Authority authority;
+ private Authority sameAuthority;
+ private Authority differentAuthority;
+ private Authority keyAuthority1;
+ private Authority keyAuthority2;
+
+ @Before
+ public void setUp() throws Exception {
+ authority = new Authority();
+ sameAuthority = new Authority();
+ HashMap accountAuthorityMap = new HashMap<>();
+ UserAccount userAccount = new UserAccount("1.2.20000");
+ accountAuthorityMap.put(userAccount, 1);
+ differentAuthority = new Authority(1, null, accountAuthorityMap);
+
+ Address address1 = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ Address address2 = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ PublicKey publicKey = address1.getPublicKey();
+ PublicKey samePublicKey = address2.getPublicKey();
+ HashMap keyMap1 = new HashMap<>();
+ HashMap keyMap2 = new HashMap<>();
+ keyMap1.put(publicKey, 1);
+ keyMap2.put(samePublicKey, 1);
+ keyAuthority1 = new Authority(1, keyMap1, null);
+ keyAuthority2 = new Authority(1, keyMap2, null);
+
+ }
+
+ @org.junit.Test
+ public void toBytes() throws Exception {
+
+ }
+
+ @Test
+ public void equals() throws Exception {
+ assertEquals("Equal authorities", authority, sameAuthority);
+ assertEquals("Different authorities ", authority, differentAuthority);
+ assertEquals("Two public keys with the same public key should be equal", keyAuthority1, keyAuthority2);
+ }
+
+ @After
+ public void tearDown(){
+ }
+}
\ No newline at end of file
diff --git a/graphenej/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java b/graphenej/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java
new file mode 100644
index 0000000..fe6307a
--- /dev/null
+++ b/graphenej/src/test/java/de/bitsharesmunich/graphenej/PublicKeyTest.java
@@ -0,0 +1,33 @@
+package de.bitsharesmunich.graphenej;
+
+import org.bitcoinj.core.*;
+import org.junit.*;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by nelson on 12/16/16.
+ */
+public class PublicKeyTest {
+ @Before
+ public void setUp() throws Exception {
+
+ }
+ @org.junit.Test
+ public void equals() throws Exception {
+ Address address1 = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ Address address2 = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ Address address3 = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYp00");
+ PublicKey pk1 = address1.getPublicKey();
+ PublicKey pk2 = address2.getPublicKey();
+ PublicKey pk3 = address3.getPublicKey();
+ assertEquals("Public keys must be equal", pk1, pk2);
+ assertNotEquals("Public keys must not be equal", pk1, pk3);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+
+ }
+
+}
\ No newline at end of file
diff --git a/graphenej/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java b/graphenej/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java
new file mode 100644
index 0000000..33cd015
--- /dev/null
+++ b/graphenej/src/test/java/de/bitsharesmunich/graphenej/objects/MemoTest.java
@@ -0,0 +1,105 @@
+package de.bitsharesmunich.graphenej.objects;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import de.bitsharesmunich.graphenej.Address;
+import de.bitsharesmunich.graphenej.Util;
+import de.bitsharesmunich.graphenej.errors.ChecksumException;
+import org.bitcoinj.core.DumpedPrivateKey;
+import org.bitcoinj.core.ECKey;
+import org.junit.*;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Created by nelson on 12/19/16.
+ */
+public class MemoTest {
+
+ private ECKey sourcePrivate;
+ private Address sourceAddress;
+
+ private ECKey destinationPrivate;
+ private Address destinationAddress;
+
+ private long nonce;
+ private String shortMessage = "test";
+ private String longerMessage = "testing now longer string!!";
+
+ private byte[] shortEncryptedMessage = Util.hexToBytes("4c81c2db6ebc61e3f9e0ead65c0559dd");
+ private byte[] longerEncryptedMessage = Util.hexToBytes("1f8a08f1ff53dcefd48eeb052d26fba425f2a917f508ce61fc3d5696b10efa17");
+
+ private String decodedMessage;
+
+ @Before
+ public void setUp() throws Exception {
+ sourcePrivate = DumpedPrivateKey.fromBase58(null, "5J96pne45qWM1WpektoeazN6k9Mt93jQ7LyueRxFfEMTiy6yxjM").getKey();
+ destinationPrivate = DumpedPrivateKey.fromBase58(null, "5HuGQT8qwHScBgD4XsGbQUmXQF18MrbzxaQDiGGXFNRrCtqgT5Q").getKey();
+
+ sourceAddress = new Address("BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ destinationAddress = new Address("BTS8ADjGaswhfFoxMGxqCdBtzhTBJsrGadCLoc9Ey5AGc8eoVZ5bV");
+
+ nonce = 5;
+ }
+
+ @Test
+ public void shouldMatchPredefinedChiphertext(){
+ byte[] encrypted = Memo.encryptMessage(sourcePrivate, destinationAddress, 1, shortMessage);
+ assertArrayEquals("Testing with short message and nonce 1", encrypted, shortEncryptedMessage);
+
+ byte[] encryptedLong = Memo.encryptMessage(sourcePrivate, destinationAddress, 1, longerMessage);
+ assertArrayEquals("Testing with longer message and nonce 1", encryptedLong, longerEncryptedMessage);
+ }
+
+ @Test
+ public void shouldEncryptAndDecryptShortMessage(){
+ try {
+ byte[] encrypted = Memo.encryptMessage(sourcePrivate, destinationAddress, nonce, shortMessage);
+ String decrypted = decrypted = Memo.decryptMessage(destinationPrivate, sourceAddress, nonce, encrypted);
+ assertEquals("Decrypted message must be equal to original", decrypted, shortMessage);
+ } catch (ChecksumException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void shouldEncryptAndDecryptLongerMessage(){
+ try{
+ byte[] longEncrypted = Memo.encryptMessage(sourcePrivate, destinationAddress, nonce, longerMessage);
+ String longDecrypted = Memo.decryptMessage(destinationPrivate, sourceAddress, nonce, longEncrypted);
+ assertEquals("The longer message must be equal to the original", longerMessage, longDecrypted);
+ } catch (ChecksumException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(expected = ChecksumException.class)
+ public void shouldThrowException() throws ChecksumException {
+ byte[] corrupted = Memo.encryptMessage(sourcePrivate, destinationAddress, nonce, longerMessage);
+ corrupted[0] = 0;
+ String longDecrypted = Memo.decryptMessage(destinationPrivate, sourceAddress, nonce, corrupted);
+ }
+
+ @Test
+ public void shouldBeJsonObjectSerializable(){
+ byte[] encrypted = Memo.encryptMessage(sourcePrivate, destinationAddress, 1, shortMessage);
+ Memo memo = new Memo(sourceAddress, destinationAddress, 1, encrypted);
+ JsonElement jsonObject = memo.toJsonObject();
+ JsonObject reference = new JsonObject();
+ reference.addProperty("from", "BTS8RiFgs8HkcVPVobHLKEv6yL3iXcC9SWjbPVS15dDAXLG9GYhnY");
+ reference.addProperty("to", "BTS8ADjGaswhfFoxMGxqCdBtzhTBJsrGadCLoc9Ey5AGc8eoVZ5bV");
+ reference.addProperty("nonce", "1");
+ reference.addProperty("message", "4c81c2db6ebc61e3f9e0ead65c0559dd");
+ assertEquals("Memo instance should generate a valid JsonObject",jsonObject, reference);
+ }
+
+ @Test
+ public void shouldBeByteSerializable(){
+ String byteReference = "0103d1fb8c7421db64d46fba7e36f428854ca06eff65698b293f37c7ffaa54e2c2b203aece7c31616c02fcc96b50d3397c0e8d33d6384655d477c300d9196c728a5ee20100000000000000104c81c2db6ebc61e3f9e0ead65c0559dd";
+ byte[] encrypted = Memo.encryptMessage(sourcePrivate, destinationAddress, 1, shortMessage);
+ Memo memo = new Memo(sourceAddress, destinationAddress, 1, encrypted);
+ byte[] memoBytes = memo.toBytes();
+ assertEquals("Memo instance should generate a valid byte array", byteReference, Util.bytesToHex(memoBytes));
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index b36009e..a9ac6b8 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,3 @@
-rootProject.name = 'graphenej'
-include 'application'
+rootProject.name = "Graphenej"
+include ":graphenej", ":app"