diff --git a/README.md b/README.md
index ea1d69e..bbff6d1 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,17 @@
Verge Tor Wallet for Android
============================
+
+
## Building the app
Install [Android Studio](https://developer.android.com/sdk/installing/studio.html). Once it is
running, import tordroid by navigating to where you cloned or downloaded it and selecting
settings.gradle. When it is finished importing, click on the SDK Manager ![SDK Manager](https://developer.android.com/images/tools/sdk-manager-studio.png).
-You will want to install Android 15, SDK version 35 (API 35).
+You will want to install Android 13, SDK version 33 (API 33).
-Make sure that you have JDK 17 installed before building.
-You can get it [here from Oracle (login required)](https://www.oracle.com/java/technologies/downloads/?er=221886#java17).
+Make sure that you have JDK 11 installed before building.
+You can get it [here from Oracle (login required)](https://www.oracle.com/pk/java/technologies/javase/jdk11-archive-downloads.html).
Once you have that installed, navigate to File > Project Structure > SDK Location and change the path of your current JDK to
the path of the new JDK.
@@ -24,4 +26,7 @@ and enable USB Debugging.
Then plug your phone into your computer and hit the green play button at the top of
Android Studio. It will load for a moment before prompting you to select which device to install
it on. Select your device from the list, and hit continue.
-
+
+**NOTE**
+If you are attempting to build on a Lollipop emulator, please ensure that you are using *Android 5.*.* armeabi-v7*.
+It will not build on an x86/x86_64 emulator.
diff --git a/build.gradle b/build.gradle
index 0336c56..2597c85 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.5.1'
+ classpath 'com.android.tools.build:gradle:8.0.2'
// classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/core/build.gradle b/core/build.gradle
index b9a00ba..7013fd9 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -17,13 +17,13 @@ dependencies {
api 'com.google.code.findbugs:jsr305:3.0.2' //latest as of 10/2023
api 'com.madgag.spongycastle:core:1.58.0.0' //latest as of 10/2023
api 'com.lambdaworks:scrypt:1.4.0' //latest as of 10/2023
- api 'com.google.protobuf:protobuf-java:3.25.3' // updated on 7/22/2024
- api 'org.slf4j:slf4j-jdk14:2.0.13' //latest release ver as of 7/22/2024
- api 'org.json:json:20240303' //latest as of 7/22/2024
+ api 'com.google.protobuf:protobuf-java:3.24.3' //latest as of 9/23
+ api 'org.slf4j:slf4j-jdk14:2.0.9' //latest release ver as of 10/23
+ api 'org.json:json:20231013' //latest as of 10/23
api 'com.squareup.okhttp:okhttp:2.7.5' //latest as of 10/23
testImplementation 'junit:junit:4.13.2'
- testImplementation 'org.mockito:mockito-all:1.10.19'
+ testImplementation 'org.mockito:mockito-all:1.9.5'
testImplementation 'com.squareup.okhttp:mockwebserver:2.7.5'
}
diff --git a/core/src/main/java/com/vergepay/core/CoreUtils.java b/core/src/main/java/com/verge/core/CoreUtils.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/CoreUtils.java
rename to core/src/main/java/com/verge/core/CoreUtils.java
diff --git a/core/src/main/java/com/vergepay/core/Preconditions.java b/core/src/main/java/com/verge/core/Preconditions.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/Preconditions.java
rename to core/src/main/java/com/verge/core/Preconditions.java
diff --git a/core/src/main/java/com/vergepay/core/coins/BitcoinMain.java b/core/src/main/java/com/verge/core/coins/BitcoinMain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/BitcoinMain.java
rename to core/src/main/java/com/verge/core/coins/BitcoinMain.java
diff --git a/core/src/main/java/com/vergepay/core/coins/BitcoinTest.java b/core/src/main/java/com/verge/core/coins/BitcoinTest.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/BitcoinTest.java
rename to core/src/main/java/com/verge/core/coins/BitcoinTest.java
diff --git a/core/src/main/java/com/vergepay/core/coins/BurstMain.java b/core/src/main/java/com/verge/core/coins/BurstMain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/BurstMain.java
rename to core/src/main/java/com/verge/core/coins/BurstMain.java
diff --git a/core/src/main/java/com/vergepay/core/coins/CoinID.java b/core/src/main/java/com/verge/core/coins/CoinID.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/CoinID.java
rename to core/src/main/java/com/verge/core/coins/CoinID.java
diff --git a/core/src/main/java/com/vergepay/core/coins/CoinType.java b/core/src/main/java/com/verge/core/coins/CoinType.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/CoinType.java
rename to core/src/main/java/com/verge/core/coins/CoinType.java
diff --git a/core/src/main/java/com/vergepay/core/coins/FeePolicy.java b/core/src/main/java/com/verge/core/coins/FeePolicy.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/FeePolicy.java
rename to core/src/main/java/com/verge/core/coins/FeePolicy.java
diff --git a/core/src/main/java/com/vergepay/core/coins/FiatType.java b/core/src/main/java/com/verge/core/coins/FiatType.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/FiatType.java
rename to core/src/main/java/com/verge/core/coins/FiatType.java
diff --git a/core/src/main/java/com/vergepay/core/coins/FiatValue.java b/core/src/main/java/com/verge/core/coins/FiatValue.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/FiatValue.java
rename to core/src/main/java/com/verge/core/coins/FiatValue.java
diff --git a/core/src/main/java/com/vergepay/core/coins/LitecoinMain.java b/core/src/main/java/com/verge/core/coins/LitecoinMain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/LitecoinMain.java
rename to core/src/main/java/com/verge/core/coins/LitecoinMain.java
diff --git a/core/src/main/java/com/vergepay/core/coins/LitecoinTest.java b/core/src/main/java/com/verge/core/coins/LitecoinTest.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/LitecoinTest.java
rename to core/src/main/java/com/verge/core/coins/LitecoinTest.java
diff --git a/core/src/main/java/com/vergepay/core/coins/NxtMain.java b/core/src/main/java/com/verge/core/coins/NxtMain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/NxtMain.java
rename to core/src/main/java/com/verge/core/coins/NxtMain.java
diff --git a/core/src/main/java/com/vergepay/core/coins/SoftDustPolicy.java b/core/src/main/java/com/verge/core/coins/SoftDustPolicy.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/SoftDustPolicy.java
rename to core/src/main/java/com/verge/core/coins/SoftDustPolicy.java
diff --git a/core/src/main/java/com/vergepay/core/coins/Value.java b/core/src/main/java/com/verge/core/coins/Value.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/Value.java
rename to core/src/main/java/com/verge/core/coins/Value.java
diff --git a/core/src/main/java/com/vergepay/core/coins/ValueType.java b/core/src/main/java/com/verge/core/coins/ValueType.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/ValueType.java
rename to core/src/main/java/com/verge/core/coins/ValueType.java
diff --git a/core/src/main/java/com/vergepay/core/coins/VergeMain.java b/core/src/main/java/com/verge/core/coins/VergeMain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/VergeMain.java
rename to core/src/main/java/com/verge/core/coins/VergeMain.java
diff --git a/core/src/main/java/com/vergepay/core/coins/families/BitFamily.java b/core/src/main/java/com/verge/core/coins/families/BitFamily.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/families/BitFamily.java
rename to core/src/main/java/com/verge/core/coins/families/BitFamily.java
diff --git a/core/src/main/java/com/verge/core/coins/families/ClamsFamily.java b/core/src/main/java/com/verge/core/coins/families/ClamsFamily.java
new file mode 100644
index 0000000..865eaab
--- /dev/null
+++ b/core/src/main/java/com/verge/core/coins/families/ClamsFamily.java
@@ -0,0 +1,23 @@
+package com.vergepay.core.coins.families;
+
+import com.vergepay.core.messages.MessageFactory;
+import com.vergepay.core.wallet.families.clams.ClamsTxMessage;
+
+import javax.annotation.Nullable;
+
+/**
+ * @author John L. Jegutanis
+ *
+ * This family contains Clams
+ */
+public class ClamsFamily extends BitFamily {
+ {
+ family = Families.CLAMS;
+ }
+
+ @Override
+ @Nullable
+ public MessageFactory getMessagesFactory() {
+ return ClamsTxMessage.getFactory();
+ }
+}
diff --git a/core/src/main/java/com/vergepay/core/coins/families/Families.java b/core/src/main/java/com/verge/core/coins/families/Families.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/families/Families.java
rename to core/src/main/java/com/verge/core/coins/families/Families.java
diff --git a/core/src/main/java/com/verge/core/coins/families/NuFamily.java b/core/src/main/java/com/verge/core/coins/families/NuFamily.java
new file mode 100644
index 0000000..cf32ed9
--- /dev/null
+++ b/core/src/main/java/com/verge/core/coins/families/NuFamily.java
@@ -0,0 +1,12 @@
+package com.vergepay.core.coins.families;
+
+/**
+ * @author John L. Jegutanis
+ *
+ * This family contains NuBits, NuShares, BlockShares, etc
+ */
+public abstract class NuFamily extends BitFamily {
+ {
+ family = Families.NUBITS;
+ }
+}
diff --git a/core/src/main/java/com/vergepay/core/coins/families/NxtFamily.java b/core/src/main/java/com/verge/core/coins/families/NxtFamily.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/families/NxtFamily.java
rename to core/src/main/java/com/verge/core/coins/families/NxtFamily.java
diff --git a/core/src/main/java/com/vergepay/core/coins/families/PeerFamily.java b/core/src/main/java/com/verge/core/coins/families/PeerFamily.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/families/PeerFamily.java
rename to core/src/main/java/com/verge/core/coins/families/PeerFamily.java
diff --git a/core/src/main/java/com/verge/core/coins/families/ReddFamily.java b/core/src/main/java/com/verge/core/coins/families/ReddFamily.java
new file mode 100644
index 0000000..fd152e8
--- /dev/null
+++ b/core/src/main/java/com/verge/core/coins/families/ReddFamily.java
@@ -0,0 +1,12 @@
+package com.vergepay.core.coins.families;
+
+/**
+ * @author John L. Jegutanis
+ *
+ * This family contains Reddcoin, Cannacoin, etc
+ */
+public abstract class ReddFamily extends BitFamily {
+ {
+ family = Families.REDDCOIN;
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/com/verge/core/coins/families/VpncoinFamily.java b/core/src/main/java/com/verge/core/coins/families/VpncoinFamily.java
new file mode 100644
index 0000000..ce5158b
--- /dev/null
+++ b/core/src/main/java/com/verge/core/coins/families/VpncoinFamily.java
@@ -0,0 +1,23 @@
+package com.vergepay.core.coins.families;
+
+import com.vergepay.core.messages.MessageFactory;
+import com.vergepay.core.wallet.families.vpncoin.VpncoinTxMessage;
+
+import javax.annotation.Nullable;
+
+/**
+ * @author John L. Jegutanis
+ *
+ * This family contains Vpncoin
+ */
+public abstract class VpncoinFamily extends BitFamily {
+ {
+ family = Families.VPNCOIN;
+ }
+
+ @Override
+ @Nullable
+ public MessageFactory getMessagesFactory() {
+ return VpncoinTxMessage.getFactory();
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Account.java b/core/src/main/java/com/verge/core/coins/nxt/Account.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Account.java
rename to core/src/main/java/com/verge/core/coins/nxt/Account.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Appendix.java b/core/src/main/java/com/verge/core/coins/nxt/Appendix.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Appendix.java
rename to core/src/main/java/com/verge/core/coins/nxt/Appendix.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Attachment.java b/core/src/main/java/com/verge/core/coins/nxt/Attachment.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Attachment.java
rename to core/src/main/java/com/verge/core/coins/nxt/Attachment.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Constants.java b/core/src/main/java/com/verge/core/coins/nxt/Constants.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Constants.java
rename to core/src/main/java/com/verge/core/coins/nxt/Constants.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Convert.java b/core/src/main/java/com/verge/core/coins/nxt/Convert.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Convert.java
rename to core/src/main/java/com/verge/core/coins/nxt/Convert.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Crypto.java b/core/src/main/java/com/verge/core/coins/nxt/Crypto.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Crypto.java
rename to core/src/main/java/com/verge/core/coins/nxt/Crypto.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Curve25519.java b/core/src/main/java/com/verge/core/coins/nxt/Curve25519.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Curve25519.java
rename to core/src/main/java/com/verge/core/coins/nxt/Curve25519.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/EncryptedData.java b/core/src/main/java/com/verge/core/coins/nxt/EncryptedData.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/EncryptedData.java
rename to core/src/main/java/com/verge/core/coins/nxt/EncryptedData.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/NxtException.java b/core/src/main/java/com/verge/core/coins/nxt/NxtException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/NxtException.java
rename to core/src/main/java/com/verge/core/coins/nxt/NxtException.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/ReedSolomon.java b/core/src/main/java/com/verge/core/coins/nxt/ReedSolomon.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/ReedSolomon.java
rename to core/src/main/java/com/verge/core/coins/nxt/ReedSolomon.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/Transaction.java b/core/src/main/java/com/verge/core/coins/nxt/Transaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/Transaction.java
rename to core/src/main/java/com/verge/core/coins/nxt/Transaction.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/TransactionImpl.java b/core/src/main/java/com/verge/core/coins/nxt/TransactionImpl.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/TransactionImpl.java
rename to core/src/main/java/com/verge/core/coins/nxt/TransactionImpl.java
diff --git a/core/src/main/java/com/vergepay/core/coins/nxt/TransactionType.java b/core/src/main/java/com/verge/core/coins/nxt/TransactionType.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/coins/nxt/TransactionType.java
rename to core/src/main/java/com/verge/core/coins/nxt/TransactionType.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/AddressMalformedException.java b/core/src/main/java/com/verge/core/exceptions/AddressMalformedException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/AddressMalformedException.java
rename to core/src/main/java/com/verge/core/exceptions/AddressMalformedException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/Bip44KeyLookAheadExceededException.java b/core/src/main/java/com/verge/core/exceptions/Bip44KeyLookAheadExceededException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/Bip44KeyLookAheadExceededException.java
rename to core/src/main/java/com/verge/core/exceptions/Bip44KeyLookAheadExceededException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/InvalidMessageSignature.java b/core/src/main/java/com/verge/core/exceptions/InvalidMessageSignature.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/InvalidMessageSignature.java
rename to core/src/main/java/com/verge/core/exceptions/InvalidMessageSignature.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/KeyIsEncryptedException.java b/core/src/main/java/com/verge/core/exceptions/KeyIsEncryptedException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/KeyIsEncryptedException.java
rename to core/src/main/java/com/verge/core/exceptions/KeyIsEncryptedException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/MissingPrivateKeyException.java b/core/src/main/java/com/verge/core/exceptions/MissingPrivateKeyException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/MissingPrivateKeyException.java
rename to core/src/main/java/com/verge/core/exceptions/MissingPrivateKeyException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/NoSuchPocketException.java b/core/src/main/java/com/verge/core/exceptions/NoSuchPocketException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/NoSuchPocketException.java
rename to core/src/main/java/com/verge/core/exceptions/NoSuchPocketException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/TransactionBroadcastException.java b/core/src/main/java/com/verge/core/exceptions/TransactionBroadcastException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/TransactionBroadcastException.java
rename to core/src/main/java/com/verge/core/exceptions/TransactionBroadcastException.java
diff --git a/core/src/main/java/com/vergepay/core/exceptions/UnsupportedCoinTypeException.java b/core/src/main/java/com/verge/core/exceptions/UnsupportedCoinTypeException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exceptions/UnsupportedCoinTypeException.java
rename to core/src/main/java/com/verge/core/exceptions/UnsupportedCoinTypeException.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/Connection.java b/core/src/main/java/com/verge/core/exchange/shapeshift/Connection.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/Connection.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/Connection.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/ShapeShift.java b/core/src/main/java/com/verge/core/exchange/shapeshift/ShapeShift.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/ShapeShift.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/ShapeShift.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftAmountTx.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftAmountTx.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftAmountTx.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftAmountTx.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftBase.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftBase.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftBase.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftBase.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftCoin.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftCoin.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftCoin.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftCoin.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftCoins.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftCoins.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftCoins.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftCoins.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftEmail.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftEmail.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftEmail.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftEmail.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftException.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftException.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftException.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftExchangeRate.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftExchangeRate.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftExchangeRate.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftExchangeRate.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftLimit.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftLimit.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftLimit.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftLimit.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftMarketInfo.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftMarketInfo.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftMarketInfo.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftMarketInfo.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftNormalTx.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftNormalTx.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftNormalTx.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftNormalTx.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftPairBase.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftPairBase.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftPairBase.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftPairBase.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftRate.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftRate.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftRate.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftRate.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftTime.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftTime.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftTime.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftTime.java
diff --git a/core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftTxStatus.java b/core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftTxStatus.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/exchange/shapeshift/data/ShapeShiftTxStatus.java
rename to core/src/main/java/com/verge/core/exchange/shapeshift/data/ShapeShiftTxStatus.java
diff --git a/core/src/main/java/com/vergepay/core/messages/MessageFactory.java b/core/src/main/java/com/verge/core/messages/MessageFactory.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/messages/MessageFactory.java
rename to core/src/main/java/com/verge/core/messages/MessageFactory.java
diff --git a/core/src/main/java/com/vergepay/core/messages/TxMessage.java b/core/src/main/java/com/verge/core/messages/TxMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/messages/TxMessage.java
rename to core/src/main/java/com/verge/core/messages/TxMessage.java
diff --git a/core/src/main/java/com/vergepay/core/network/AddressStatus.java b/core/src/main/java/com/verge/core/network/AddressStatus.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/AddressStatus.java
rename to core/src/main/java/com/verge/core/network/AddressStatus.java
diff --git a/core/src/main/java/com/vergepay/core/network/BlockHeader.java b/core/src/main/java/com/verge/core/network/BlockHeader.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/BlockHeader.java
rename to core/src/main/java/com/verge/core/network/BlockHeader.java
diff --git a/core/src/main/java/com/vergepay/core/network/CoinAddress.java b/core/src/main/java/com/verge/core/network/CoinAddress.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/CoinAddress.java
rename to core/src/main/java/com/verge/core/network/CoinAddress.java
diff --git a/core/src/main/java/com/vergepay/core/network/ConnectivityHelper.java b/core/src/main/java/com/verge/core/network/ConnectivityHelper.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/ConnectivityHelper.java
rename to core/src/main/java/com/verge/core/network/ConnectivityHelper.java
diff --git a/core/src/main/java/com/vergepay/core/network/NxtServerClient.java b/core/src/main/java/com/verge/core/network/NxtServerClient.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/NxtServerClient.java
rename to core/src/main/java/com/verge/core/network/NxtServerClient.java
diff --git a/core/src/main/java/com/vergepay/core/network/ServerClient.java b/core/src/main/java/com/verge/core/network/ServerClient.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/ServerClient.java
rename to core/src/main/java/com/verge/core/network/ServerClient.java
diff --git a/core/src/main/java/com/vergepay/core/network/ServerClients.java b/core/src/main/java/com/verge/core/network/ServerClients.java
similarity index 92%
rename from core/src/main/java/com/vergepay/core/network/ServerClients.java
rename to core/src/main/java/com/verge/core/network/ServerClients.java
index 1657bd3..ca47ed6 100644
--- a/core/src/main/java/com/vergepay/core/network/ServerClients.java
+++ b/core/src/main/java/com/verge/core/network/ServerClients.java
@@ -2,6 +2,7 @@
import com.vergepay.core.coins.CoinType;
import com.vergepay.core.coins.families.BitFamily;
+import com.vergepay.core.coins.families.NxtFamily;
import com.vergepay.core.exceptions.UnsupportedCoinTypeException;
import com.vergepay.core.network.interfaces.BlockchainConnection;
import com.vergepay.core.wallet.WalletAccount;
@@ -75,6 +76,11 @@ private BlockchainConnection getConnection(CoinType type) {
client.setCacheDir(cacheDir, cacheSize);
connections.put(type, client);
return client;
+ } else if (type instanceof NxtFamily) {
+ NxtServerClient client = new NxtServerClient(addresses.get(type), connectivityHelper);
+ client.setCacheDir(cacheDir, cacheSize);
+ connections.put(type, client);
+ return client;
} else {
throw new UnsupportedCoinTypeException(type);
}
diff --git a/core/src/main/java/com/vergepay/core/network/interfaces/BlockchainConnection.java b/core/src/main/java/com/verge/core/network/interfaces/BlockchainConnection.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/interfaces/BlockchainConnection.java
rename to core/src/main/java/com/verge/core/network/interfaces/BlockchainConnection.java
diff --git a/core/src/main/java/com/vergepay/core/network/interfaces/ConnectionEventListener.java b/core/src/main/java/com/verge/core/network/interfaces/ConnectionEventListener.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/interfaces/ConnectionEventListener.java
rename to core/src/main/java/com/verge/core/network/interfaces/ConnectionEventListener.java
diff --git a/core/src/main/java/com/vergepay/core/network/interfaces/TransactionEventListener.java b/core/src/main/java/com/verge/core/network/interfaces/TransactionEventListener.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/network/interfaces/TransactionEventListener.java
rename to core/src/main/java/com/verge/core/network/interfaces/TransactionEventListener.java
diff --git a/core/src/main/java/com/vergepay/core/protos/Protos.java b/core/src/main/java/com/verge/core/protos/Protos.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/protos/Protos.java
rename to core/src/main/java/com/verge/core/protos/Protos.java
diff --git a/core/src/main/java/com/vergepay/core/uri/CoinURI.java b/core/src/main/java/com/verge/core/uri/CoinURI.java
similarity index 99%
rename from core/src/main/java/com/vergepay/core/uri/CoinURI.java
rename to core/src/main/java/com/verge/core/uri/CoinURI.java
index 059543f..e6fca9e 100644
--- a/core/src/main/java/com/vergepay/core/uri/CoinURI.java
+++ b/core/src/main/java/com/verge/core/uri/CoinURI.java
@@ -1,7 +1,6 @@
-
/*
* Copyright 2012, 2014 the original author or authors.
- *
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -14,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
- *
+ *
*/
package com.vergepay.core.uri;
@@ -81,7 +80,7 @@
* {@code label} any URL encoded alphanumeric
* {@code message} any URL encoded alphanumeric
*
- *
+ *
* @author Andreas Schildbach (initial code)
* @author Jim Burton (enhancements for MultiBit)
* @author Gary Rowe (BIP21 support)
@@ -149,7 +148,7 @@ public CoinURI(@Nullable CoinType uriType, String input) throws CoinURIParseExce
// URI is formed as bitcoin:?
// blockchain.info generates URIs of non-BIP compliant form bitcoin://address?....
// We support both until Ben fixes his code.
-
+
// Remove the bitcoin scheme.
// (Note: getSchemeSpecificPart() is not used as it unescapes the label and parse then fails.
// For instance with : bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=0.06&label=Tom%20%26%20Jerry
@@ -370,7 +369,7 @@ private void parseParameters(String[] nameValuePairTokens, List possib
/**
* Put the value against the key in the map checking for duplication. This avoids address field overwrite etc.
- *
+ *
* @param key The key for the map
* @param value The value to store
*/
@@ -480,7 +479,7 @@ public URI getAddressRequestUriResponse(String address) {
}
return null;
}
-
+
/**
* @param name The name of the parameter
* @return The parameter value, or null if not present
@@ -552,30 +551,30 @@ public static String convertToCoinURI(AbstractAddress address, @Nullable Value a
if (amount != null && amount.signum() < 0) {
throw new IllegalArgumentException("Coin must be positive");
}
-
+
StringBuilder builder = new StringBuilder();
// Removing appending verge: to all data
// builder.append(type.getUriScheme()).append(":").append(addressStr);
builder.append(addressStr);
boolean questionMarkHasBeenOutput = false;
-
+
if (amount != null) {
builder.append(QUESTION_MARK_SEPARATOR).append(FIELD_AMOUNT).append("=");
builder.append(GenericUtils.formatCoinValue(type, amount, true));
questionMarkHasBeenOutput = true;
}
-
+
if (label != null && !"".equals(label)) {
if (questionMarkHasBeenOutput) {
builder.append(AMPERSAND_SEPARATOR);
} else {
- builder.append(QUESTION_MARK_SEPARATOR);
+ builder.append(QUESTION_MARK_SEPARATOR);
questionMarkHasBeenOutput = true;
}
builder.append(FIELD_LABEL).append("=").append(encodeURLString(label));
}
-
+
if (message != null && !"".equals(message)) {
if (questionMarkHasBeenOutput) {
builder.append(AMPERSAND_SEPARATOR);
@@ -593,13 +592,13 @@ public static String convertToCoinURI(AbstractAddress address, @Nullable Value a
}
builder.append(FIELD_PUBKEY).append("=").append(encodeURLString(pubkey));
}
-
+
return builder.toString();
}
/**
* Encode a string using URL encoding
- *
+ *
* @param stringToEncode The string to URL encode
*/
static String encodeURLString(String stringToEncode) {
diff --git a/core/src/main/java/com/vergepay/core/uri/CoinURIParseException.java b/core/src/main/java/com/verge/core/uri/CoinURIParseException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/uri/CoinURIParseException.java
rename to core/src/main/java/com/verge/core/uri/CoinURIParseException.java
diff --git a/core/src/main/java/com/vergepay/core/uri/OptionalFieldValidationException.java b/core/src/main/java/com/verge/core/uri/OptionalFieldValidationException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/uri/OptionalFieldValidationException.java
rename to core/src/main/java/com/verge/core/uri/OptionalFieldValidationException.java
diff --git a/core/src/main/java/com/vergepay/core/uri/RequiredFieldValidationException.java b/core/src/main/java/com/verge/core/uri/RequiredFieldValidationException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/uri/RequiredFieldValidationException.java
rename to core/src/main/java/com/verge/core/uri/RequiredFieldValidationException.java
diff --git a/core/src/main/java/com/vergepay/core/util/BitAddressUtils.java b/core/src/main/java/com/verge/core/util/BitAddressUtils.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/BitAddressUtils.java
rename to core/src/main/java/com/verge/core/util/BitAddressUtils.java
diff --git a/core/src/main/java/com/vergepay/core/util/Currencies.java b/core/src/main/java/com/verge/core/util/Currencies.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/Currencies.java
rename to core/src/main/java/com/verge/core/util/Currencies.java
diff --git a/core/src/main/java/com/vergepay/core/util/ExchangeRate.java b/core/src/main/java/com/verge/core/util/ExchangeRate.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/ExchangeRate.java
rename to core/src/main/java/com/verge/core/util/ExchangeRate.java
diff --git a/core/src/main/java/com/vergepay/core/util/ExchangeRateBase.java b/core/src/main/java/com/verge/core/util/ExchangeRateBase.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/ExchangeRateBase.java
rename to core/src/main/java/com/verge/core/util/ExchangeRateBase.java
diff --git a/core/src/main/java/com/vergepay/core/util/GenericUtils.java b/core/src/main/java/com/verge/core/util/GenericUtils.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/GenericUtils.java
rename to core/src/main/java/com/verge/core/util/GenericUtils.java
diff --git a/core/src/main/java/com/vergepay/core/util/HardwareSoftwareCompliance.java b/core/src/main/java/com/verge/core/util/HardwareSoftwareCompliance.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/HardwareSoftwareCompliance.java
rename to core/src/main/java/com/verge/core/util/HardwareSoftwareCompliance.java
diff --git a/core/src/main/java/com/vergepay/core/util/KeyUtils.java b/core/src/main/java/com/verge/core/util/KeyUtils.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/KeyUtils.java
rename to core/src/main/java/com/verge/core/util/KeyUtils.java
diff --git a/core/src/main/java/com/vergepay/core/util/MonetaryFormat.java b/core/src/main/java/com/verge/core/util/MonetaryFormat.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/MonetaryFormat.java
rename to core/src/main/java/com/verge/core/util/MonetaryFormat.java
diff --git a/core/src/main/java/com/vergepay/core/util/TypeUtils.java b/core/src/main/java/com/verge/core/util/TypeUtils.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/util/TypeUtils.java
rename to core/src/main/java/com/verge/core/util/TypeUtils.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/AbstractAddress.java b/core/src/main/java/com/verge/core/wallet/AbstractAddress.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/AbstractAddress.java
rename to core/src/main/java/com/verge/core/wallet/AbstractAddress.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/AbstractTransaction.java b/core/src/main/java/com/verge/core/wallet/AbstractTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/AbstractTransaction.java
rename to core/src/main/java/com/verge/core/wallet/AbstractTransaction.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/AbstractWallet.java b/core/src/main/java/com/verge/core/wallet/AbstractWallet.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/AbstractWallet.java
rename to core/src/main/java/com/verge/core/wallet/AbstractWallet.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/BitWalletBase.java b/core/src/main/java/com/verge/core/wallet/BitWalletBase.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/BitWalletBase.java
rename to core/src/main/java/com/verge/core/wallet/BitWalletBase.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/BitWalletSingleKey.java b/core/src/main/java/com/verge/core/wallet/BitWalletSingleKey.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/BitWalletSingleKey.java
rename to core/src/main/java/com/verge/core/wallet/BitWalletSingleKey.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/SendRequest.java b/core/src/main/java/com/verge/core/wallet/SendRequest.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/SendRequest.java
rename to core/src/main/java/com/verge/core/wallet/SendRequest.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/SerializedKey.java b/core/src/main/java/com/verge/core/wallet/SerializedKey.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/SerializedKey.java
rename to core/src/main/java/com/verge/core/wallet/SerializedKey.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/SignedMessage.java b/core/src/main/java/com/verge/core/wallet/SignedMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/SignedMessage.java
rename to core/src/main/java/com/verge/core/wallet/SignedMessage.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/SimpleHDKeyChain.java b/core/src/main/java/com/verge/core/wallet/SimpleHDKeyChain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/SimpleHDKeyChain.java
rename to core/src/main/java/com/verge/core/wallet/SimpleHDKeyChain.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/SimpleKeyChain.java b/core/src/main/java/com/verge/core/wallet/SimpleKeyChain.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/SimpleKeyChain.java
rename to core/src/main/java/com/verge/core/wallet/SimpleKeyChain.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/TransactionCreator.java b/core/src/main/java/com/verge/core/wallet/TransactionCreator.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/TransactionCreator.java
rename to core/src/main/java/com/verge/core/wallet/TransactionCreator.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/TransactionWatcherWallet.java b/core/src/main/java/com/verge/core/wallet/TransactionWatcherWallet.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/TransactionWatcherWallet.java
rename to core/src/main/java/com/verge/core/wallet/TransactionWatcherWallet.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/Wallet.java b/core/src/main/java/com/verge/core/wallet/Wallet.java
similarity index 98%
rename from core/src/main/java/com/vergepay/core/wallet/Wallet.java
rename to core/src/main/java/com/verge/core/wallet/Wallet.java
index 6953c51..f6bb68e 100644
--- a/core/src/main/java/com/vergepay/core/wallet/Wallet.java
+++ b/core/src/main/java/com/verge/core/wallet/Wallet.java
@@ -4,8 +4,10 @@
import com.vergepay.core.coins.CoinType;
import com.vergepay.core.coins.Value;
import com.vergepay.core.coins.families.BitFamily;
+import com.vergepay.core.coins.families.NxtFamily;
import com.vergepay.core.exceptions.UnsupportedCoinTypeException;
import com.vergepay.core.protos.Protos;
+import com.vergepay.core.wallet.families.nxt.NxtFamilyWallet;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
@@ -288,6 +290,8 @@ private WalletAccount createAndAddAccount(CoinType coinType, @Nullable KeyParame
if (coinType instanceof BitFamily) {
newPocket = new WalletPocketHD(rootKey, coinType, getKeyCrypter(), key);
+ } else if (coinType instanceof NxtFamily) {
+ newPocket = new NxtFamilyWallet(rootKey, coinType, getKeyCrypter(), key);
} else {
throw new UnsupportedCoinTypeException(coinType);
}
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletAccount.java b/core/src/main/java/com/verge/core/wallet/WalletAccount.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletAccount.java
rename to core/src/main/java/com/verge/core/wallet/WalletAccount.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletAccountEventListener.java b/core/src/main/java/com/verge/core/wallet/WalletAccountEventListener.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletAccountEventListener.java
rename to core/src/main/java/com/verge/core/wallet/WalletAccountEventListener.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletCoinSelector.java b/core/src/main/java/com/verge/core/wallet/WalletCoinSelector.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletCoinSelector.java
rename to core/src/main/java/com/verge/core/wallet/WalletCoinSelector.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletConnectivityStatus.java b/core/src/main/java/com/verge/core/wallet/WalletConnectivityStatus.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletConnectivityStatus.java
rename to core/src/main/java/com/verge/core/wallet/WalletConnectivityStatus.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletFiles.java b/core/src/main/java/com/verge/core/wallet/WalletFiles.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletFiles.java
rename to core/src/main/java/com/verge/core/wallet/WalletFiles.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletPocketHD.java b/core/src/main/java/com/verge/core/wallet/WalletPocketHD.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletPocketHD.java
rename to core/src/main/java/com/verge/core/wallet/WalletPocketHD.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletPocketProtobufSerializer.java b/core/src/main/java/com/verge/core/wallet/WalletPocketProtobufSerializer.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletPocketProtobufSerializer.java
rename to core/src/main/java/com/verge/core/wallet/WalletPocketProtobufSerializer.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletProtobufSerializer.java b/core/src/main/java/com/verge/core/wallet/WalletProtobufSerializer.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletProtobufSerializer.java
rename to core/src/main/java/com/verge/core/wallet/WalletProtobufSerializer.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/WalletTransaction.java b/core/src/main/java/com/verge/core/wallet/WalletTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/WalletTransaction.java
rename to core/src/main/java/com/verge/core/wallet/WalletTransaction.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitAddress.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitAddress.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitAddress.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitAddress.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitBlockchainConnection.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitBlockchainConnection.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitBlockchainConnection.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitBlockchainConnection.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitSendRequest.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitSendRequest.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitSendRequest.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitSendRequest.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitTransaction.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitTransaction.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitTransaction.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitTransactionEventListener.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitTransactionEventListener.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitTransactionEventListener.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitTransactionEventListener.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitWalletTransaction.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/BitWalletTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/BitWalletTransaction.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/BitWalletTransaction.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/CoinSelection.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/CoinSelection.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/CoinSelection.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/CoinSelection.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/CoinSelector.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/CoinSelector.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/CoinSelector.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/CoinSelector.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/EmptyTransactionOutput.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/EmptyTransactionOutput.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/EmptyTransactionOutput.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/EmptyTransactionOutput.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/OutPointOutput.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/OutPointOutput.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/OutPointOutput.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/OutPointOutput.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedOutPoint.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedOutPoint.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedOutPoint.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedOutPoint.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedOutput.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedOutput.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedOutput.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedOutput.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedTransaction.java b/core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/bitcoin/TrimmedTransaction.java
rename to core/src/main/java/com/verge/core/wallet/families/bitcoin/TrimmedTransaction.java
diff --git a/core/src/main/java/com/verge/core/wallet/families/clams/ClamsTxMessage.java b/core/src/main/java/com/verge/core/wallet/families/clams/ClamsTxMessage.java
new file mode 100644
index 0000000..d78308a
--- /dev/null
+++ b/core/src/main/java/com/verge/core/wallet/families/clams/ClamsTxMessage.java
@@ -0,0 +1,121 @@
+package com.vergepay.core.wallet.families.clams;
+
+import com.vergepay.core.messages.MessageFactory;
+import com.vergepay.core.messages.TxMessage;
+import com.vergepay.core.wallet.AbstractTransaction;
+import com.vergepay.core.wallet.families.bitcoin.BitTransaction;
+import com.google.common.base.Charsets;
+
+import org.bitcoinj.core.Transaction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nullable;
+
+import static com.vergepay.core.Preconditions.checkArgument;
+
+/**
+ * @author John L. Jegutanis
+ */
+public class ClamsTxMessage implements TxMessage {
+ private static final Logger log = LoggerFactory.getLogger(ClamsTxMessage.class);
+
+ public static final int MAX_MESSAGE_BYTES = 140;
+
+ private String message;
+
+ ClamsTxMessage(String message) {
+ setMessage(message);
+ }
+
+ private final static ClamsMessageFactory instance = new ClamsMessageFactory();
+ public static MessageFactory getFactory() {
+ return instance;
+ }
+
+ public static ClamsTxMessage create(String message) throws IllegalArgumentException {
+ return new ClamsTxMessage(message);
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ checkArgument(serialize(message).length <= MAX_MESSAGE_BYTES, "Message is too big");
+ this.message = message;
+ }
+
+ @Nullable
+ public static ClamsTxMessage parse(AbstractTransaction tx) {
+ try {
+ Transaction rawTx = ((BitTransaction) tx).getRawTransaction();
+ byte[] bytes = rawTx.getExtraBytes();
+ if (bytes == null || bytes.length == 0) return null;
+ checkArgument(bytes.length <= MAX_MESSAGE_BYTES, "Maximum data size exceeded");
+
+ return new ClamsTxMessage(new String(bytes, Charsets.UTF_8));
+ } catch (Exception e) {
+ log.info("Could not parse message: {}", e.getMessage());
+ return null;
+ }
+ }
+
+ public boolean isEmpty() {
+ return isNullOrEmpty(message);
+ }
+
+ private static boolean isNullOrEmpty(String str) {
+ return str == null || str.trim().isEmpty();
+ }
+
+ @Override
+ public Type getType() {
+ return Type.PUBLIC; // Only public is supported
+ }
+
+ @Override
+ public String toString() {
+ return message;
+ }
+
+ @Override
+ public void serializeTo(AbstractTransaction transaction) {
+ if (transaction instanceof BitTransaction) {
+ Transaction rawTx = ((BitTransaction) transaction).getRawTransaction();
+ rawTx.setExtraBytes(serialize(message));
+ }
+ }
+
+ static byte[] serialize(String message) {
+ return message.getBytes(Charsets.UTF_8);
+ }
+
+ public static class ClamsMessageFactory implements MessageFactory {
+ @Override
+ public int maxMessageSizeBytes() {
+ return MAX_MESSAGE_BYTES;
+ }
+
+ @Override
+ public boolean canHandlePublicMessages() {
+ return true;
+ }
+
+ @Override
+ public boolean canHandlePrivateMessages() {
+ return false;
+ }
+
+ @Override
+ public TxMessage createPublicMessage(String message) {
+ return create(message);
+ }
+
+ @Nullable
+ @Override
+ public TxMessage extractPublicMessage(AbstractTransaction transaction) {
+ return parse(transaction);
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtAddress.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtAddress.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtAddress.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtAddress.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyKey.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyKey.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyKey.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyKey.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWallet.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyWallet.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWallet.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyWallet.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWalletProtobufSerializer.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyWalletProtobufSerializer.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWalletProtobufSerializer.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtFamilyWalletProtobufSerializer.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtSendRequest.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtSendRequest.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtSendRequest.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtSendRequest.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtTransaction.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtTransaction.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtTransaction.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtTransaction.java
diff --git a/core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtTxMessage.java b/core/src/main/java/com/verge/core/wallet/families/nxt/NxtTxMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/core/wallet/families/nxt/NxtTxMessage.java
rename to core/src/main/java/com/verge/core/wallet/families/nxt/NxtTxMessage.java
diff --git a/core/src/main/java/com/verge/core/wallet/families/vpncoin/VpncoinTxMessage.java b/core/src/main/java/com/verge/core/wallet/families/vpncoin/VpncoinTxMessage.java
new file mode 100644
index 0000000..9acf4e8
--- /dev/null
+++ b/core/src/main/java/com/verge/core/wallet/families/vpncoin/VpncoinTxMessage.java
@@ -0,0 +1,363 @@
+package com.vergepay.core.wallet.families.vpncoin;
+
+import com.vergepay.core.messages.MessageFactory;
+import com.vergepay.core.messages.TxMessage;
+import com.vergepay.core.wallet.AbstractTransaction;
+import com.vergepay.core.wallet.families.bitcoin.BitTransaction;
+import com.google.common.base.Charsets;
+
+import org.bitcoinj.core.Transaction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.spongycastle.util.encoders.Base64;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.DataFormatException;
+import java.util.zip.Inflater;
+
+import javax.annotation.Nullable;
+
+import static com.vergepay.core.Preconditions.checkArgument;
+
+/**
+ * @author John L. Jegutanis
+ */
+public class VpncoinTxMessage implements TxMessage {
+ private static final Logger log = LoggerFactory.getLogger(VpncoinTxMessage.class);
+
+ static final int SIZE_LENGTH = 4;
+
+ public static final int MAX_TX_DATA = 65536;
+ public static final int MAX_TX_DATA_FROM = 128;
+ public static final int MAX_TX_DATA_SUBJ = 128;
+ public static final int MAX_TX_DATA_MSG = MAX_TX_DATA - MAX_TX_DATA_FROM - MAX_TX_DATA_SUBJ;
+
+ static final Pattern MESSAGE_REGEX =
+ Pattern.compile("(?s)@(?:FROM|SUBJ|MSG)=.*?(?=@(?:FROM|SUBJ|MSG)=|$)");
+
+ static final String FROM = "@FROM=";
+ static final String SUBJ = "@SUBJ=";
+ static final String MSG = "@MSG=";
+
+ private String from;
+ private String subject;
+ private String message;
+
+ VpncoinTxMessage() { }
+
+ VpncoinTxMessage(String message) {
+ setMessage(message);
+ }
+
+ VpncoinTxMessage(String from, String subject, String message) {
+ setFrom(from);
+ setSubject(subject);
+ setMessage(message);
+ }
+
+ private final static VpncoinMessageFactory instance = new VpncoinMessageFactory();
+ public static MessageFactory getFactory() {
+ return instance;
+ }
+
+ public static VpncoinTxMessage create(String message) throws IllegalArgumentException {
+ return new VpncoinTxMessage(message);
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setFrom(String from) {
+ checkArgument(from.length() <= MAX_TX_DATA_FROM, "'From' field size exceeded");
+ this.from = from;
+ }
+
+ public void setSubject(String subject) {
+ checkArgument(subject.length() <= MAX_TX_DATA_SUBJ, "'Subject' field size exceeded");
+ this.subject = subject;
+ }
+
+ public void setMessage(String message) {
+ checkArgument(message.length() <= MAX_TX_DATA_MSG, "'Message' field size exceeded");
+ this.message = message;
+ }
+
+ @Nullable
+ public static VpncoinTxMessage parse(AbstractTransaction tx) {
+ Transaction rawTx = null;
+ byte[] bytes;
+ String fullMessage = null;
+ try {
+ rawTx = ((BitTransaction) tx).getRawTransaction();
+ bytes = rawTx.getExtraBytes();
+ if (bytes == null || bytes.length == 0) return null;
+
+ fullMessage = new String(bytes, Charsets.UTF_8);
+ return parseUnencrypted(fullMessage);
+ } catch (Exception e) {
+ if (rawTx == null || fullMessage == null) return null;
+ try {
+ return parseEncrypted(rawTx.getTime(), fullMessage);
+ } catch (Exception e1) {
+ log.info("Could not parse message: {}", e1.getMessage());
+ return null;
+ }
+ }
+ }
+
+ @Nullable
+ public static VpncoinTxMessage parse(String fullMessage) {
+ if (fullMessage == null || fullMessage.length() == 0) {
+ return null;
+ }
+
+ try {
+ return parseUnencrypted(fullMessage);
+ } catch (Exception e) {
+ log.info("Could not parse message: {}", e.getLocalizedMessage());
+ return null;
+ }
+ }
+
+ public boolean isEmpty() {
+ return isNullOrEmpty(from) && isNullOrEmpty(subject) && isNullOrEmpty(message);
+ }
+
+ private static boolean isNullOrEmpty(String str) {
+ return str == null || str.trim().isEmpty();
+ }
+
+ @Override
+ public Type getType() {
+ return Type.PUBLIC; // Only public is supported
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ if (!isNullOrEmpty(from)) {
+ sb.append(from);
+ }
+ if (!isNullOrEmpty(subject)) {
+ if (sb.length() != 0) sb.append("\n\n");
+ sb.append(subject);
+ }
+ if (!isNullOrEmpty(message)) {
+ if (sb.length() != 0) sb.append("\n\n");
+ sb.append(message);
+ }
+
+ return sb.toString();
+ }
+
+ @Override
+ public void serializeTo(AbstractTransaction transaction) {
+ if (transaction instanceof BitTransaction) {
+ Transaction rawTx = ((BitTransaction) transaction).getRawTransaction();
+ rawTx.setExtraBytes(serialize());
+ }
+ }
+
+ byte[] serialize() {
+ StringBuilder sb = new StringBuilder();
+ if (!isNullOrEmpty(from)) {
+ sb.append(FROM);
+ sb.append(from);
+ }
+ if (!isNullOrEmpty(subject)) {
+ sb.append(SUBJ);
+ sb.append(subject);
+ }
+ if (!isNullOrEmpty(message)) {
+ sb.append(MSG);
+ sb.append(message);
+ }
+
+ return sb.toString().getBytes(Charsets.UTF_8);
+ }
+
+ static VpncoinTxMessage parseEncrypted(long key, String fullMessage) throws Exception {
+ return parseUnencrypted(decrypt(key, fullMessage));
+ }
+
+ static VpncoinTxMessage parseUnencrypted(String fullMessage) throws Exception {
+ checkArgument(fullMessage.length() <= MAX_TX_DATA, "Maximum data size exceeded");
+
+ Matcher matcher = MESSAGE_REGEX.matcher(fullMessage);
+ VpncoinTxMessage msg = new VpncoinTxMessage();
+ while (matcher.find()) {
+ String part = matcher.group();
+ // Be more relaxed about each field size that we receive from the network
+ if (part.startsWith(FROM)) {
+ msg.from = part.replace(FROM, "");
+ } else if (part.startsWith(SUBJ)) {
+ msg.subject = part.replace(SUBJ, "");
+ } else if (part.startsWith(MSG)) {
+ msg.message = part.replace(MSG, "");
+ }
+ }
+ if (msg.isEmpty()) {
+ throw new Exception("Message is empty");
+ }
+ return msg;
+ }
+
+ static int checksum(byte[] data, int offset) {
+ int crc = 0xffff;
+ for (int i = offset; i < data.length; i++) {
+ byte b = data[i];
+ crc = ((crc >> 4) & 0x0fff) ^ CRC_TBL[((crc ^ b) & 15)];
+ b >>= 4;
+ crc = ((crc >> 4) & 0x0fff) ^ CRC_TBL[((crc ^ b) & 15)];
+ }
+ return ~crc & 0xffff;
+ }
+
+ static byte[] uncompress(ByteBuffer compressed) throws DataFormatException {
+ if (compressed.remaining() <= SIZE_LENGTH) {
+ throw new DataFormatException("Invalid compressed data size");
+ }
+ Inflater inflater = new Inflater();
+
+ // The first 4 bytes of the input is an integer encoding the size of the uncompressed data
+ int expectedSize = compressed.getInt();
+
+ // Check the maximum data that we are willing to handle
+ if (expectedSize > MAX_TX_DATA * 2) {
+ throw new DataFormatException("Maximum data size exceeded");
+ }
+
+ // Ignore the size bytes when uncompressing
+ inflater.setInput(compressed.array(), compressed.position(), compressed.remaining());
+ byte[] buffer = new byte[expectedSize];
+ int size = inflater.inflate(buffer);
+
+ // Check that the uncompressed size matches the expected size
+ if (expectedSize != size) throw new DataFormatException("Unexpected data size");
+ if (!inflater.finished()) throw new DataFormatException("Data larger than expected");
+
+ return buffer;
+ }
+
+ static String decrypt(long key, String fullMessage) throws DataFormatException {
+ byte[] bytes = decryptBytes(key, Base64.decode(fullMessage));
+ return new String(bytes);
+ }
+
+ static byte[] decryptBytes(long key, byte[] data) throws DataFormatException {
+ byte[] m_keyParts = makeKey(key);
+ byte version = data[0];
+
+ if (version != 3) { //we only work with version 3
+ throw new IllegalArgumentException("Invalid version or not a cyphertext.");
+ }
+
+ byte flags = data[1];
+ ByteBuffer buffer = ByteBuffer.wrap(Arrays.copyOfRange(data, 2, data.length));
+
+ byte lastByte = 0;
+ while (buffer.hasRemaining()) {
+ int pos = buffer.position();
+ byte curByte = buffer.get();
+ buffer.position(pos);
+ buffer.put((byte)(curByte ^ lastByte ^ m_keyParts[pos % 8]));
+ lastByte = curByte;
+ }
+ buffer.rewind();
+ //chop off the random number at the start
+ buffer.get();
+
+ boolean integrityOk = true;
+ if (CryptoFlag.CryptoFlagChecksum.isSet(flags)) {
+ int storedChecksum = buffer.getShort() & 0xffff;
+ int checksum = checksum(buffer.array(), buffer.position());
+ integrityOk = (checksum == storedChecksum);
+ } else if (CryptoFlag.CryptoFlagHash.isSet(flags)) {
+ throw new RuntimeException("Not implemented");
+ }
+
+ if (!integrityOk) throw new DataFormatException("Integrity failed");
+
+ if (CryptoFlag.CryptoFlagCompression.isSet(flags)) {
+ return uncompress(buffer);
+ } else {
+ return Arrays.copyOfRange(buffer.array(), buffer.position(), buffer.array().length);
+ }
+ }
+
+ private static byte[] makeKey(long key) {
+ byte[] m_keyParts = new byte[8];
+ for (int i=0;i<8;i++) {
+ long part = key;
+ for (int j=i; j>0; j--)
+ part = part >> 8;
+ part = part & 0xff;
+ m_keyParts[i] = (byte) part;
+ }
+ return m_keyParts;
+ }
+
+ enum CryptoFlag {
+ CryptoFlagNone((byte)0),
+ CryptoFlagCompression((byte)0x01),
+ CryptoFlagChecksum((byte)0x02),
+ CryptoFlagHash((byte)0x04);
+
+ private final byte flag;
+
+ CryptoFlag(byte b) {
+ flag = b;
+ }
+
+ public boolean isSet(byte flags) {
+ return (flags & flag) == flag;
+ }
+ }
+
+ static final int[] CRC_TBL = {
+ 0x0000, 0x1081, 0x2102, 0x3183,
+ 0x4204, 0x5285, 0x6306, 0x7387,
+ 0x8408, 0x9489, 0xa50a, 0xb58b,
+ 0xc60c, 0xd68d, 0xe70e, 0xf78f
+ };
+
+ public static class VpncoinMessageFactory implements MessageFactory {
+ @Override
+ public int maxMessageSizeBytes() {
+ return MAX_TX_DATA_MSG;
+ }
+
+ @Override
+ public boolean canHandlePublicMessages() {
+ return true;
+ }
+
+ @Override
+ public boolean canHandlePrivateMessages() {
+ return false;
+ }
+
+ @Override
+ public TxMessage createPublicMessage(String message) {
+ return create(message);
+ }
+
+ @Override
+ @Nullable
+ public TxMessage extractPublicMessage(AbstractTransaction transaction) {
+ return parse(transaction);
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/com/vergepay/stratumj/ServerAddress.java b/core/src/main/java/com/verge/stratumj/ServerAddress.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/ServerAddress.java
rename to core/src/main/java/com/verge/stratumj/ServerAddress.java
diff --git a/core/src/main/java/com/vergepay/stratumj/StratumClient.java b/core/src/main/java/com/verge/stratumj/StratumClient.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/StratumClient.java
rename to core/src/main/java/com/verge/stratumj/StratumClient.java
diff --git a/core/src/main/java/com/vergepay/stratumj/messages/BaseMessage.java b/core/src/main/java/com/verge/stratumj/messages/BaseMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/messages/BaseMessage.java
rename to core/src/main/java/com/verge/stratumj/messages/BaseMessage.java
diff --git a/core/src/main/java/com/vergepay/stratumj/messages/CallMessage.java b/core/src/main/java/com/verge/stratumj/messages/CallMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/messages/CallMessage.java
rename to core/src/main/java/com/verge/stratumj/messages/CallMessage.java
diff --git a/core/src/main/java/com/vergepay/stratumj/messages/MessageException.java b/core/src/main/java/com/verge/stratumj/messages/MessageException.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/messages/MessageException.java
rename to core/src/main/java/com/verge/stratumj/messages/MessageException.java
diff --git a/core/src/main/java/com/vergepay/stratumj/messages/ResultMessage.java b/core/src/main/java/com/verge/stratumj/messages/ResultMessage.java
similarity index 100%
rename from core/src/main/java/com/vergepay/stratumj/messages/ResultMessage.java
rename to core/src/main/java/com/verge/stratumj/messages/ResultMessage.java
diff --git a/core/src/test/java/com/vergepay/core/coins/ValueTest.java b/core/src/test/java/com/coinomi/core/coins/ValueTest.java
similarity index 92%
rename from core/src/test/java/com/vergepay/core/coins/ValueTest.java
rename to core/src/test/java/com/coinomi/core/coins/ValueTest.java
index c0ebfe5..69fd637 100644
--- a/core/src/test/java/com/vergepay/core/coins/ValueTest.java
+++ b/core/src/test/java/com/coinomi/core/coins/ValueTest.java
@@ -36,10 +36,11 @@
public class ValueTest {
final CoinType BTC = BitcoinMain.get();
final CoinType LTC = LitecoinMain.get();
- final CoinType XVG = VergeMain.get();
+ final CoinType PPC = PeercoinMain.get();
+ final CoinType NBT = NuBitsMain.get();
final FiatType USD = FiatType.get("USD");
- ValueType[] types = {BTC, LTC, USD};
+ ValueType[] types = {BTC, LTC, NBT, USD};
@Test
public void parseCoin() {
@@ -51,8 +52,12 @@ public void parseCoin() {
assertEquals(133700, BTC.value("0.001337").value);
// Peercoin family
- assertEquals(1337000, XVG.value("1.337").value);
- assertEquals(1337, XVG.value("0.001337").value);
+ assertEquals(1337000, PPC.value("1.337").value);
+ assertEquals(1337, PPC.value("0.001337").value);
+
+ // NuBits family
+ assertEquals(13370, NBT.value("1.337").value);
+ assertEquals(13, NBT.value("0.0013").value);
}
@Test(expected = ArithmeticException.class)
@@ -61,8 +66,8 @@ public void parseCoinErrorBitcoin() {
}
@Test(expected = ArithmeticException.class)
- public void parseCoinErrorVerge() {
- XVG.value("3.14159265");
+ public void parseCoinErrorPeercoin() {
+ PPC.value("3.14159265");
}
@Test
@@ -156,7 +161,7 @@ public void testEquals() {
Value btcSatoshi2 = Value.valueOf(BitcoinMain.get(), 1);
Value btcValue = Value.parse(BitcoinMain.get(), "3.14159");
Value ltcSatoshi = Value.valueOf(LitecoinMain.get(), 1);
- Value ppcValue = Value.parse(VergeMain.get(), "3.14159");
+ Value ppcValue = Value.parse(PeercoinMain.get(), "3.14159");
assertTrue(btcSatoshi.equals(btcSatoshi2));
assertFalse(btcSatoshi.equals(ltcSatoshi));
@@ -189,8 +194,8 @@ public void testMathOperators() {
assertEquals(LTC.value("1"), LTC.value("100").subtract(LTC.value("99")));
assertEquals(LTC.value("1"), LTC.value("100").subtract("99"));
assertEquals(100L, USD.value("100").divide(USD.value("1")));
- assertArrayEquals(new Value[]{XVG.value("0.0001"), XVG.value("0.0002")},
- XVG.value("0.0012").divideAndRemainder(10));
+ assertArrayEquals(new Value[]{NBT.value("0.0001"), NBT.value("0.0002")},
+ NBT.value("0.0012").divideAndRemainder(10));
// max
assertEquals(BTC.value("10"), Value.max(BTC.value("1"), BTC.value("10")));
assertEquals(BTC.value("0.5"), Value.max(BTC.value("0.5"), BTC.value("-0.5")));
diff --git a/core/src/test/java/com/vergepay/core/coins/nxt/NxtFamilyTest.java b/core/src/test/java/com/coinomi/core/coins/nxt/NxtFamilyTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/coins/nxt/NxtFamilyTest.java
rename to core/src/test/java/com/coinomi/core/coins/nxt/NxtFamilyTest.java
diff --git a/core/src/test/java/com/coinomi/core/exchange/shapeshift/ExchangeRateTest.java b/core/src/test/java/com/coinomi/core/exchange/shapeshift/ExchangeRateTest.java
new file mode 100644
index 0000000..8c90b37
--- /dev/null
+++ b/core/src/test/java/com/coinomi/core/exchange/shapeshift/ExchangeRateTest.java
@@ -0,0 +1,67 @@
+package com.vergepay.core.exchange.shapeshift;
+
+import com.vergepay.core.coins.BitcoinMain;
+import com.vergepay.core.coins.CoinType;
+import com.vergepay.core.coins.DogecoinMain;
+import com.vergepay.core.coins.FiatValue;
+import com.vergepay.core.coins.NuBitsMain;
+import com.vergepay.core.exchange.shapeshift.data.ShapeShiftExchangeRate;
+import com.vergepay.core.util.ExchangeRateBase;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author John L. Jegutanis
+ */
+public class ExchangeRateTest {
+ final CoinType BTC = BitcoinMain.get();
+ final CoinType DOGE = DogecoinMain.get();
+ final CoinType NBT = NuBitsMain.get();
+
+
+ @Test
+ public void baseFee() {
+ ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(BTC, NBT, "100", "0.01");
+
+ assertEquals(BTC.value("1"), rate.value1);
+ assertEquals(NBT.value("100"), rate.value2);
+ assertEquals(NBT.value("0.01"), rate.minerFee);
+
+ assertEquals(NBT.value("99.99"), rate.convert(BTC.oneCoin()));
+ assertEquals(BTC.value("1"), rate.convert(NBT.value("99.99")));
+
+ rate = new ShapeShiftExchangeRate(BTC.oneCoin(),
+ DOGE.value("1911057.69230769"), DOGE.value("1"));
+ assertEquals(BTC.value("1"), rate.value1);
+ assertEquals(DOGE.value("1911057.69230769"), rate.value2);
+ assertEquals(DOGE.value("1"), rate.minerFee);
+ assertEquals(BTC.value("0.00052379"), rate.convert(DOGE.value("1000")));
+
+ rate = new ShapeShiftExchangeRate(BTC.oneCoin(),
+ DOGE.value("1878207.54716981"), DOGE.value("1"));
+ assertEquals(BTC.value("1"), rate.value1);
+ assertEquals(DOGE.value("1878207.54716981"), rate.value2);
+ assertEquals(DOGE.value("1"), rate.minerFee);
+ assertEquals(BTC.value("0.00532476"), rate.convert(DOGE.value("10000")));
+ }
+
+ @Test
+ public void zeroValues() {
+ ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(BTC, NBT, "100", "0.01");
+ assertEquals(BTC.value("0"), rate.convert(NBT.value("0")));
+ assertEquals(NBT.value("0"), rate.convert(BTC.value("0")));
+ }
+
+ @Test
+ public void smallValues() {
+ ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(DOGE, BTC, "5.1e-7", "0.0001");
+ assertEquals(BTC.value("0"), rate.convert(DOGE.value("1")));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void zeroExchangeRate() throws Exception {
+ new ShapeShiftExchangeRate(BTC, NBT, "0", "0.01");
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/com/vergepay/core/exchange/shapeshift/MessagesTest.java b/core/src/test/java/com/coinomi/core/exchange/shapeshift/MessagesTest.java
similarity index 93%
rename from core/src/test/java/com/vergepay/core/exchange/shapeshift/MessagesTest.java
rename to core/src/test/java/com/coinomi/core/exchange/shapeshift/MessagesTest.java
index 172a3a2..6287b71 100644
--- a/core/src/test/java/com/vergepay/core/exchange/shapeshift/MessagesTest.java
+++ b/core/src/test/java/com/coinomi/core/exchange/shapeshift/MessagesTest.java
@@ -2,7 +2,10 @@
import com.vergepay.core.coins.BitcoinMain;
import com.vergepay.core.coins.CoinType;
+import com.vergepay.core.coins.DogecoinMain;
import com.vergepay.core.coins.LitecoinMain;
+import com.vergepay.core.coins.NuBitsMain;
+import com.vergepay.core.coins.PeercoinMain;
import com.vergepay.core.coins.Value;
import com.vergepay.core.exchange.shapeshift.data.ShapeShiftAmountTx;
import com.vergepay.core.exchange.shapeshift.data.ShapeShiftCoin;
@@ -29,6 +32,9 @@
public class MessagesTest {
final CoinType BTC = BitcoinMain.get();
final CoinType LTC = LitecoinMain.get();
+ final CoinType DOGE = DogecoinMain.get();
+ final CoinType NBT = NuBitsMain.get();
+ final CoinType PPC = PeercoinMain.get();
final Value ONE_BTC = BTC.oneCoin();
@Test
@@ -107,11 +113,14 @@ public void testMarketInfo() throws JSONException, ShapeShiftException {
assertEquals("btc_nbt", marketInfo.pair);
assertTrue(marketInfo.isPair("BTC_NBT"));
assertTrue(marketInfo.isPair("btc_nbt"));
+ assertTrue(marketInfo.isPair(BTC, NBT));
assertFalse(marketInfo.isPair("doge_ltc"));
+ assertFalse(marketInfo.isPair(DOGE, LTC));
assertNotNull(marketInfo.rate);
assertNotNull(marketInfo.limit);
assertNotNull(marketInfo.minimum);
+ assertEquals(NBT.value("99.99"), marketInfo.rate.convert(BTC.value("1")));
assertEquals(BTC.value("4"), marketInfo.limit);
assertEquals(BTC.value("0.00000104"), marketInfo.minimum);
}
@@ -126,7 +135,9 @@ public void testMarketInfo2() throws JSONException, ShapeShiftException {
"limit: 2162.11925969,\n" +
"minimum: 0.17391304\n" +
"}"));
- assertEquals(BTC.value("0.00098678").subtract("0.0001"), info.rate.convert(LTC.value("1")));
+ assertEquals(BTC.value("0.00098678").subtract("0.0001"), info.rate.convert(PPC.value("1")));
+ assertEquals(PPC.value("2162.119259"), info.limit);
+ assertEquals(PPC.value("0.173914"), info.minimum);
info = new ShapeShiftMarketInfo(new JSONObject(
"{\n" +
@@ -136,6 +147,7 @@ public void testMarketInfo2() throws JSONException, ShapeShiftException {
"limit: 1.1185671,\n" +
"minimum: 0.0000198\n" +
"}"));
+ assertEquals(PPC.value("866.739130").subtract("0.01"), info.rate.convert(BTC.value("1")));
assertEquals(BTC.value("1.1185671"), info.limit);
assertEquals(BTC.value("0.0000198"), info.minimum);
@@ -147,6 +159,7 @@ public void testMarketInfo2() throws JSONException, ShapeShiftException {
"limit: 3.70968678,\n" +
"minimum: 0.00008692\n" +
"}"));
+ assertEquals(NBT.value("226.3957").subtract("0.01"), info.rate.convert(BTC.value("1")));
assertEquals(BTC.value("3.70968678"), info.limit);
assertEquals(BTC.value("0.00008692"), info.minimum);
@@ -158,7 +171,9 @@ public void testMarketInfo2() throws JSONException, ShapeShiftException {
"limit: 1021.50337123,\n" +
"minimum: 0.04542677\n" +
"}"));
- assertEquals(BTC.value("0.00433171").subtract("0.0001"), info.rate.convert(LTC.value("1")));
+ assertEquals(BTC.value("0.00433171").subtract("0.0001"), info.rate.convert(NBT.value("1")));
+ assertEquals(NBT.value("1021.5033"), info.limit);
+ assertEquals(NBT.value("0.0455"), info.minimum);
}
@Test
@@ -193,8 +208,8 @@ public void testRateWithoutMinerFee2() throws JSONException, ShapeShiftException
assertEquals("btc_nbt", rate.pair);
assertNotNull(rate.rate);
- assertEquals(LTC, rate.rate.convert(ONE_BTC).type);
- assertEquals(BTC, rate.rate.convert(LTC.oneCoin()).type);
+ assertEquals(NBT, rate.rate.convert(ONE_BTC).type);
+ assertEquals(BTC, rate.rate.convert(NBT.oneCoin()).type);
}
@Test
@@ -211,8 +226,8 @@ public void testRateWithMinerFee() throws JSONException, ShapeShiftException {
assertEquals("btc_nbt", rate.pair);
assertNotNull(rate.rate);
- assertEquals(LTC.value("99.99"), rate.rate.convert(BTC.value("1")));
- assertEquals(BTC.value("1"), rate.rate.convert(LTC.value("99.99")));
+ assertEquals(NBT.value("99.99"), rate.rate.convert(BTC.value("1")));
+ assertEquals(BTC.value("1"), rate.rate.convert(NBT.value("99.99")));
}
@Test
@@ -249,8 +264,8 @@ public void testLimit2() throws JSONException, ShapeShiftException {
assertNotNull(limit.limit);
assertNotNull(limit.minimum);
- assertEquals(LTC.value("1015.1535"), limit.limit);
- assertEquals(LTC.value("0.0532"), limit.minimum);
+ assertEquals(NBT.value("1015.1535"), limit.limit);
+ assertEquals(NBT.value("0.0532"), limit.minimum);
}
@Test
@@ -368,9 +383,9 @@ public void testTxStatus3Alt() throws JSONException, ShapeShiftException {
assertEquals("1NDQPAGamGePkSZXW2CYBzXJEefB7N4bTN", txStatus.address.toString());
assertEquals(BTC, txStatus.address.getType());
assertEquals("BB6kZZi87mCd7mC1tWWJjuKGPTYQ1n2Fcg", txStatus.withdraw.toString());
- assertEquals(LTC, txStatus.withdraw.getType());
+ assertEquals(NBT, txStatus.withdraw.getType());
assertEquals(BTC.value("0.01"), txStatus.incomingValue);
- assertEquals(LTC.value("2.33"), txStatus.outgoingValue);
+ assertEquals(NBT.value("2.33"), txStatus.outgoingValue);
assertEquals("66fa0b4c11227f9f05efa13d23e58c65b50acbd6395a126b5cd751064e6e79df",
txStatus.transactionId);
}
@@ -425,7 +440,7 @@ public void testNormalTx() throws JSONException, ShapeShiftException {
assertEquals("18ETaXCYhJ8sxurh41vpKC3E6Tu7oJ94q8", normalTx.deposit.toString());
assertEquals(BTC, normalTx.deposit.getType());
assertEquals("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV", normalTx.withdrawal.toString());
- assertEquals(LTC, normalTx.withdrawal.getType());
+ assertEquals(DOGE, normalTx.withdrawal.getType());
}
@Test
@@ -450,10 +465,10 @@ public void testAmountTxWithoutMinerFee() throws JSONException, ShapeShiftExcept
assertEquals(BTC, amountTx.deposit.getType());
assertEquals(BTC.value("0.00052327"), amountTx.depositAmount);
assertEquals("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV", amountTx.withdrawal.toString());
- assertEquals(LTC, amountTx.withdrawal.getType());
- assertEquals(LTC.value("1000"), amountTx.withdrawalAmount);
+ assertEquals(DOGE, amountTx.withdrawal.getType());
+ assertEquals(DOGE.value("1000"), amountTx.withdrawalAmount);
assertEquals(1427149038191L, amountTx.expiration.getTime());
- assertEquals(BTC.value("0.00052327"), amountTx.rate.convert(Value.parse(LTC, "1000")));
+ assertEquals(BTC.value("0.00052327"), amountTx.rate.convert(Value.parse(DOGE, "1000")));
}
@Test
@@ -479,10 +494,10 @@ public void testAmountTxWithMinerFee() throws JSONException, ShapeShiftException
assertEquals(BTC, amountTx.deposit.getType());
assertEquals(BTC.value("0.00052379"), amountTx.depositAmount);
assertEquals("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV", amountTx.withdrawal.toString());
- assertEquals(LTC, amountTx.withdrawal.getType());
- assertEquals(LTC.value("1000"), amountTx.withdrawalAmount);
+ assertEquals(DOGE, amountTx.withdrawal.getType());
+ assertEquals(DOGE.value("1000"), amountTx.withdrawalAmount);
assertEquals(1427149038191L, amountTx.expiration.getTime());
- assertEquals(BTC.value("0.00052379"), amountTx.rate.convert(Value.parse(LTC, "1000")));
+ assertEquals(BTC.value("0.00052379"), amountTx.rate.convert(Value.parse(DOGE, "1000")));
}
@Test
diff --git a/core/src/test/java/com/vergepay/core/exchange/shapeshift/ServerTest.java b/core/src/test/java/com/coinomi/core/exchange/shapeshift/ServerTest.java
similarity index 86%
rename from core/src/test/java/com/vergepay/core/exchange/shapeshift/ServerTest.java
rename to core/src/test/java/com/coinomi/core/exchange/shapeshift/ServerTest.java
index ab01190..3772468 100644
--- a/core/src/test/java/com/vergepay/core/exchange/shapeshift/ServerTest.java
+++ b/core/src/test/java/com/coinomi/core/exchange/shapeshift/ServerTest.java
@@ -2,7 +2,9 @@
import com.vergepay.core.coins.BitcoinMain;
import com.vergepay.core.coins.CoinType;
+import com.vergepay.core.coins.DogecoinMain;
import com.vergepay.core.coins.LitecoinMain;
+import com.vergepay.core.coins.NuBitsMain;
import com.vergepay.core.coins.Value;
import com.vergepay.core.exceptions.AddressMalformedException;
import com.vergepay.core.exchange.shapeshift.data.ShapeShiftAmountTx;
@@ -41,6 +43,9 @@ public class ServerTest {
final CoinType BTC = BitcoinMain.get();
final CoinType LTC = LitecoinMain.get();
+ final CoinType DOGE = DogecoinMain.get();
+ final CoinType NBT = NuBitsMain.get();
+
private MockWebServer server;
private ShapeShift shapeShift;
@@ -88,7 +93,7 @@ public void testGetMarketInfo() throws ShapeShiftException, IOException, Interru
// Schedule some responses.
server.enqueue(new MockResponse().setBody(MARKET_INFO_BTC_NBT_JSON));
- ShapeShiftMarketInfo marketInfoReply = shapeShift.getMarketInfo(BTC, LTC);
+ ShapeShiftMarketInfo marketInfoReply = shapeShift.getMarketInfo(BTC, NBT);
assertFalse(marketInfoReply.isError);
assertEquals("btc_nbt", marketInfoReply.pair);
assertNotNull(marketInfoReply.rate);
@@ -97,7 +102,7 @@ public void testGetMarketInfo() throws ShapeShiftException, IOException, Interru
assertNotNull(marketInfoReply.limit);
assertNotNull(marketInfoReply.minimum);
- assertEquals(LTC.value("99.99"), marketInfoReply.rate.convert(BTC.value("1")));
+ assertEquals(NBT.value("99.99"), marketInfoReply.rate.convert(BTC.value("1")));
assertEquals(BTC.value("4"), marketInfoReply.limit);
assertEquals(BTC.value("0.00000104"), marketInfoReply.minimum);
@@ -148,7 +153,7 @@ public void testGetTime() throws ShapeShiftException, IOException, InterruptedEx
server.enqueue(new MockResponse().setBody(GET_TIME_PENDING_JSON));
server.enqueue(new MockResponse().setBody(GET_TIME_EXPIRED_JSON));
- AbstractAddress address = LitecoinMain.get().newAddress("BPjxHqswNZB5vznbrAAxi5zGVq3ruhtBU8");
+ AbstractAddress address = NuBitsMain.get().newAddress("BPjxHqswNZB5vznbrAAxi5zGVq3ruhtBU8");
ShapeShiftTime timeReply = shapeShift.getTime(address);
assertFalse(timeReply.isError);
@@ -228,7 +233,7 @@ public void testNormalTransaction() throws ShapeShiftException, IOException, Int
// Schedule some responses.
server.enqueue(new MockResponse().setBody(NORMAL_TRANSACTION_JSON));
- AbstractAddress withdrawal = LTC.newAddress("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV");
+ AbstractAddress withdrawal = DOGE.newAddress("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV");
AbstractAddress refund = BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW");
ShapeShiftNormalTx normalTxReply = shapeShift.exchange(withdrawal, refund);
assertFalse(normalTxReply.isError);
@@ -236,7 +241,7 @@ public void testNormalTransaction() throws ShapeShiftException, IOException, Int
assertEquals("18ETaXCYhJ8sxurh41vpKC3E6Tu7oJ94q8", normalTxReply.deposit.toString());
assertEquals(BTC, normalTxReply.deposit.getType());
assertEquals(withdrawal.toString(), normalTxReply.withdrawal.toString());
- assertEquals(LTC, normalTxReply.withdrawal.getType());
+ assertEquals(DOGE, normalTxReply.withdrawal.getType());
// Optional: confirm that your app made the HTTP requests you were expecting.
RecordedRequest request = server.takeRequest();
@@ -254,9 +259,9 @@ public void testFixedAmountTransaction() throws ShapeShiftException, IOException
// Schedule some responses.
server.enqueue(new MockResponse().setBody(FIXED_AMOUNT_TRANSACTION_JSON));
- AbstractAddress withdrawal = LTC.newAddress("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV");
+ AbstractAddress withdrawal = DOGE.newAddress("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV");
AbstractAddress refund = BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW");
- Value amount = LTC.value("1000");
+ Value amount = DOGE.value("1000");
ShapeShiftAmountTx amountTxReply = shapeShift.exchangeForAmount(amount, withdrawal, refund);
assertFalse(amountTxReply.isError);
assertEquals("btc_doge", amountTxReply.pair);
@@ -267,12 +272,12 @@ public void testFixedAmountTransaction() throws ShapeShiftException, IOException
assertEquals(BTC, amountTxReply.depositAmount.type);
assertEquals(withdrawal.toString(), amountTxReply.withdrawal.toString());
- assertEquals(LTC, amountTxReply.withdrawal.getType());
+ assertEquals(DOGE, amountTxReply.withdrawal.getType());
assertEquals(amount.toPlainString(), amountTxReply.withdrawalAmount.toPlainString());
- assertEquals(LTC, amountTxReply.withdrawalAmount.type);
+ assertEquals(DOGE, amountTxReply.withdrawalAmount.type);
assertEquals(1427149038191L, amountTxReply.expiration.getTime());
- assertEquals(BTC.value(".00052379"), amountTxReply.rate.convert(Value.parse(LTC, "1000")));
+ assertEquals(BTC.value(".00052379"), amountTxReply.rate.convert(Value.parse(DOGE, "1000")));
// Optional: confirm that your app made the HTTP requests you were expecting.
RecordedRequest request = server.takeRequest();
@@ -331,7 +336,14 @@ public void testGetMarketInfoFail() throws ShapeShiftException, IOException {
public void testGetRateFail() throws ShapeShiftException, IOException {
server.enqueue(new MockResponse().setBody(GET_RATE_BTC_LTC_JSON));
// Incorrect pair
- shapeShift.getRate(BTC, LTC);
+ shapeShift.getRate(NBT, LTC);
+ }
+
+ @Test(expected = ShapeShiftException.class)
+ public void testGetLimitFail() throws ShapeShiftException, IOException {
+ server.enqueue(new MockResponse().setBody(GET_LIMIT_BTC_LTC_JSON));
+ // Incorrect pair
+ shapeShift.getLimit(LTC, DOGE);
}
@Test(expected = ShapeShiftException.class)
@@ -341,6 +353,44 @@ public void testGetTxStatusFail() throws ShapeShiftException, AddressMalformedEx
shapeShift.getTxStatus(BTC.newAddress("18ETaXCYhJ8sxurh41vpKC3E6Tu7oJ94q8"));
}
+ @Test(expected = ShapeShiftException.class)
+ public void testNormalTransactionFail() throws ShapeShiftException, AddressMalformedException, IOException {
+ server.enqueue(new MockResponse().setBody(NORMAL_TRANSACTION_JSON));
+ // Incorrect Dogecoin address, correct is DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV
+ shapeShift.exchange(DOGE.newAddress("DSntbp199h851m3Y1g3ruYCQHzWYCZQmmA"),
+ BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW"));
+ }
+
+ @Test(expected = ShapeShiftException.class)
+ public void testFixedAmountTransactionFail()
+ throws ShapeShiftException, AddressMalformedException, IOException {
+ server.enqueue(new MockResponse().setBody(FIXED_AMOUNT_TRANSACTION_JSON));
+ // We withdraw Dogecoins to a Bitcoin address
+ shapeShift.exchangeForAmount(DOGE.value("1000"),
+ BTC.newAddress("18ETaXCYhJ8sxurh41vpKC3E6Tu7oJ94q8"),
+ BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW"));
+ }
+
+ @Test(expected = ShapeShiftException.class)
+ public void testFixedAmountTransactionFail2()
+ throws ShapeShiftException, AddressMalformedException, IOException {
+ server.enqueue(new MockResponse().setBody(FIXED_AMOUNT_TRANSACTION_JSON));
+ // Incorrect Dogecoin address, correct is DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV
+ shapeShift.exchangeForAmount(DOGE.value("1000"),
+ DOGE.newAddress("DSntbp199h851m3Y1g3ruYCQHzWYCZQmmA"),
+ BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW"));
+ }
+
+ @Test(expected = ShapeShiftException.class)
+ public void testFixedAmountTransactionFail3()
+ throws ShapeShiftException, AddressMalformedException, IOException {
+ server.enqueue(new MockResponse().setBody(FIXED_AMOUNT_TRANSACTION_JSON));
+ // Incorrect amount, correct is 1000
+ shapeShift.exchangeForAmount(DOGE.value("1"),
+ DOGE.newAddress("DMHLQYG4j96V8cZX9WSuXxLs5RnZn6ibrV"),
+ BTC.newAddress("1Nz4xHJjNCnZFPjRUq8CN4BZEXTgLZfeUW"));
+ }
+
public static final String GET_COINS_JSON =
"{" +
"BTC: {" +
diff --git a/core/src/test/java/com/vergepay/core/uri/CoinURITest.java b/core/src/test/java/com/coinomi/core/uri/CoinURITest.java
similarity index 95%
rename from core/src/test/java/com/vergepay/core/uri/CoinURITest.java
rename to core/src/test/java/com/coinomi/core/uri/CoinURITest.java
index ebff193..61e58db 100644
--- a/core/src/test/java/com/vergepay/core/uri/CoinURITest.java
+++ b/core/src/test/java/com/coinomi/core/uri/CoinURITest.java
@@ -22,6 +22,7 @@
import com.vergepay.core.coins.BitcoinTest;
import com.vergepay.core.coins.CoinType;
import com.vergepay.core.coins.LitecoinMain;
+import com.vergepay.core.coins.PeercoinMain;
import com.vergepay.core.util.GenericUtils;
import com.vergepay.core.wallet.families.bitcoin.BitAddress;
import com.vergepay.core.wallet.families.nxt.NxtAddress;
@@ -94,6 +95,12 @@ public void testAltChainsConvertToCoinURI() throws Exception {
goodAddress = BitAddress.from(LTC, hash160);
goodAddressStr = goodAddress.toString();
assertEquals("litecoin:" + goodAddressStr + "?amount=12.34&label=Hello&message=AMessage", CoinURI.convertToCoinURI(goodAddress, LTC.value("12.34"), "Hello", "AMessage"));
+
+
+ // Peercoin
+ goodAddress = BitAddress.from(PPC, hash160);
+ goodAddressStr = goodAddress.toString();
+ assertEquals("peercoin:" + goodAddressStr + "?amount=12.34&label=Hello&message=AMessage", CoinURI.convertToCoinURI(goodAddress, PPC.value("12.34"), "Hello", "AMessage"));
}
@Test
@@ -124,6 +131,18 @@ public void testAltChainsGoodAmount() throws Exception {
goodAddressStr = goodAddress.toString();
testObject = new CoinURI(LTC, "litecoin:" + goodAddressStr + "?amount=12.34");
assertEquals("12.34", GenericUtils.formatCoinValue(LTC, testObject.getAmount()));
+
+ // Dogecoin
+ goodAddress = BitAddress.from(DOGE, hash160);
+ goodAddressStr = goodAddress.toString();
+ testObject = new CoinURI(DOGE, "dogecoin:" + goodAddressStr + "?amount=12.34");
+ assertEquals("12.34", GenericUtils.formatCoinValue(DOGE, testObject.getAmount()));
+
+ // Peercoin
+ goodAddress = BitAddress.from(PPC, hash160);
+ goodAddressStr = goodAddress.toString();
+ testObject = new CoinURI(PPC, "peercoin:" + goodAddressStr + "?amount=12.34");
+ assertEquals("12.34", GenericUtils.formatCoinValue(PPC, testObject.getAmount()));
}
@Test
diff --git a/core/src/test/java/com/vergepay/core/util/ExchangeRateTest.java b/core/src/test/java/com/coinomi/core/util/ExchangeRateTest.java
similarity index 90%
rename from core/src/test/java/com/vergepay/core/util/ExchangeRateTest.java
rename to core/src/test/java/com/coinomi/core/util/ExchangeRateTest.java
index 8b55838..52cb7a8 100644
--- a/core/src/test/java/com/vergepay/core/util/ExchangeRateTest.java
+++ b/core/src/test/java/com/coinomi/core/util/ExchangeRateTest.java
@@ -22,6 +22,7 @@
import com.vergepay.core.coins.FiatType;
import com.vergepay.core.coins.FiatValue;
import com.vergepay.core.coins.LitecoinMain;
+import com.vergepay.core.coins.NuBitsMain;
import com.vergepay.core.coins.Value;
import org.junit.Test;
@@ -33,9 +34,9 @@
public class ExchangeRateTest {
final CoinType BTC = BitcoinMain.get();
final CoinType LTC = LitecoinMain.get();
- final CoinType XVG = LitecoinMain.get();
+ final CoinType NBT = NuBitsMain.get();
final Value oneBtc = BTC.oneCoin();
- final Value oneXvg = XVG.oneCoin();
+ final Value oneNbt = NBT.oneCoin();
@Test
public void getOtherType() throws Exception {
@@ -47,10 +48,10 @@ public void getOtherType() throws Exception {
@Test
public void canConvert() throws Exception {
- ExchangeRateBase rate = new ExchangeRateBase(oneBtc, oneXvg);
+ ExchangeRateBase rate = new ExchangeRateBase(oneBtc, oneNbt);
- assertTrue(rate.canConvert(BTC, XVG));
- assertTrue(rate.canConvert(XVG, BTC));
+ assertTrue(rate.canConvert(BTC, NBT));
+ assertTrue(rate.canConvert(NBT, BTC));
assertFalse(rate.canConvert(LTC, BTC));
assertFalse(rate.canConvert(LTC, FiatType.get("USD")));
}
@@ -78,8 +79,8 @@ public void cryptoToCryptoRate() throws Exception {
assertEquals("0.01", rate.convert(LTC.oneCoin()).toPlainString());
// 250NBT = 1BTC
- rate = new ExchangeRateBase(oneXvg.multiply(250), oneBtc);
- assertEquals("0.004", rate.convert(oneXvg).toPlainString());
+ rate = new ExchangeRateBase(oneNbt.multiply(250), oneBtc);
+ assertEquals("0.004", rate.convert(oneNbt).toPlainString());
assertEquals("2500", rate.convert(oneBtc.multiply(10)).toPlainString());
}
@@ -99,23 +100,23 @@ public void cryptoToCryptoRateParseConstructor() throws Exception {
public void scalingAndRounding() throws Exception {
// 1BTC = 100.1234567890NBT
// This rate causes the BTC & NBT to overflow so it sets the correct scale and rounding
- ExchangeRateBase rate = new ExchangeRateBase(BTC, XVG, "100.1234567890");
+ ExchangeRateBase rate = new ExchangeRateBase(BTC, NBT, "100.1234567890");
// Check the rate's internal state
assertEquals("100000", rate.value1.toPlainString());
assertEquals("10012345.6789", rate.value2.toPlainString());
// Make some conversions
- assertEquals("0.00998767", rate.convert(oneXvg).toPlainString());
- assertEquals("0.000001", rate.convert(Value.parse(XVG, "0.0001")).toPlainString());
+ assertEquals("0.00998767", rate.convert(oneNbt).toPlainString());
+ assertEquals("0.000001", rate.convert(Value.parse(NBT, "0.0001")).toPlainString());
assertEquals("0.0001", rate.convert(Value.parse(BTC, "0.00000099")).toPlainString());
assertEquals("0.0099", rate.convert(Value.parse(BTC, "0.000099")).toPlainString());
assertEquals("10012345.6789", rate.convert(oneBtc.multiply(100000)).toPlainString());
assertEquals("1001.2346", rate.convert(oneBtc.multiply(10)).toPlainString());
- assertEquals("998766.95438852", rate.convert(oneXvg.multiply(100000000)).toPlainString());
+ assertEquals("998766.95438852", rate.convert(oneNbt.multiply(100000000)).toPlainString());
// Check too precise rates
- rate = new ExchangeRateBase(BTC, XVG, "100.12345678901999");
+ rate = new ExchangeRateBase(BTC, NBT, "100.12345678901999");
assertEquals("100000", rate.value1.toPlainString());
assertEquals("10012345.6789", rate.value2.toPlainString());
}
diff --git a/core/src/test/java/com/vergepay/core/util/GenericUtilsTests.java b/core/src/test/java/com/coinomi/core/util/GenericUtilsTests.java
similarity index 86%
rename from core/src/test/java/com/vergepay/core/util/GenericUtilsTests.java
rename to core/src/test/java/com/coinomi/core/util/GenericUtilsTests.java
index bc5bca0..e92bfd6 100644
--- a/core/src/test/java/com/vergepay/core/util/GenericUtilsTests.java
+++ b/core/src/test/java/com/coinomi/core/util/GenericUtilsTests.java
@@ -24,14 +24,25 @@ public class GenericUtilsTests {
@Test
public void getPossibleTypes() throws AddressMalformedException {
List types = GenericUtils.getPossibleTypes("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ");
+ assertTrue(types.contains(BlackcoinMain.get()));
+ assertTrue(types.contains(NuBitsMain.get()));
assertTrue(GenericUtils.hasMultipleTypes("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ"));
// Many coins share Bitcoin's multisig addresses...
types = GenericUtils.getPossibleTypes("3Lp1ZbdoDfZF21BLMBpctM6CrM6j4t2JyU");
assertTrue(types.contains(BitcoinMain.get()));
assertTrue(types.contains(LitecoinMain.get()));
+ assertTrue(types.contains(FeathercoinMain.get()));
+ assertTrue(types.contains(DigitalcoinMain.get()));
assertTrue(GenericUtils.hasMultipleTypes("3Lp1ZbdoDfZF21BLMBpctM6CrM6j4t2JyU"));
+ // Address method
+ AbstractAddress address = BlackcoinMain.get().newAddress("BPa5FmbZRGpmNfy4qaUzarXwSSFbJKFRMQ");
+ types = GenericUtils.getPossibleTypes(address);
+ assertTrue(types.contains(BlackcoinMain.get()));
+ assertTrue(types.contains(NuBitsMain.get()));
+ assertTrue(GenericUtils.hasMultipleTypes(address));
+
// Classic Bitcoin addresses should have only one type
types = GenericUtils.getPossibleTypes("1AjnxP4frz7Nb4v2soLnhN2uV9UocqvaGH");
assertTrue(types.contains(BitcoinMain.get()));
diff --git a/core/src/test/java/com/vergepay/core/util/MonetaryFormatTest.java b/core/src/test/java/com/coinomi/core/util/MonetaryFormatTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/util/MonetaryFormatTest.java
rename to core/src/test/java/com/coinomi/core/util/MonetaryFormatTest.java
diff --git a/core/src/test/java/com/vergepay/core/wallet/SimpleHDKeyChainTest.java b/core/src/test/java/com/coinomi/core/wallet/SimpleHDKeyChainTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/wallet/SimpleHDKeyChainTest.java
rename to core/src/test/java/com/coinomi/core/wallet/SimpleHDKeyChainTest.java
diff --git a/core/src/test/java/com/vergepay/core/wallet/SweepWalletTest.java b/core/src/test/java/com/coinomi/core/wallet/SweepWalletTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/wallet/SweepWalletTest.java
rename to core/src/test/java/com/coinomi/core/wallet/SweepWalletTest.java
diff --git a/core/src/test/java/com/vergepay/core/wallet/WalletPocketHDTest.java b/core/src/test/java/com/coinomi/core/wallet/WalletPocketHDTest.java
similarity index 83%
rename from core/src/test/java/com/vergepay/core/wallet/WalletPocketHDTest.java
rename to core/src/test/java/com/coinomi/core/wallet/WalletPocketHDTest.java
index 3af9818..6c7a387 100644
--- a/core/src/test/java/com/vergepay/core/wallet/WalletPocketHDTest.java
+++ b/core/src/test/java/com/coinomi/core/wallet/WalletPocketHDTest.java
@@ -2,7 +2,10 @@
import com.vergepay.core.coins.BitcoinMain;
import com.vergepay.core.coins.CoinType;
+import com.vergepay.core.coins.DogecoinTest;
+import com.vergepay.core.coins.NuBitsMain;
import com.vergepay.core.coins.Value;
+import com.vergepay.core.coins.VpncoinMain;
import com.vergepay.core.exceptions.AddressMalformedException;
import com.vergepay.core.exceptions.Bip44KeyLookAheadExceededException;
import com.vergepay.core.exceptions.KeyIsEncryptedException;
@@ -67,11 +70,14 @@
*/
public class WalletPocketHDTest {
static final CoinType BTC = BitcoinMain.get();
+ static final CoinType DOGE = DogecoinTest.get();
+ static final CoinType NBT = NuBitsMain.get();
+ static final CoinType VPN = VpncoinMain.get();
static final List MNEMONIC = ImmutableList.of("citizen", "fever", "scale", "nurse", "brief", "round", "ski", "fiction", "car", "fitness", "pluck", "act");
static final byte[] AES_KEY_BYTES = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7};
static final long AMOUNT_TO_SEND = 2700000000L;
static final String MESSAGE = "test";
- static final String MESSAGE_UNICODE = "test";
+ static final String MESSAGE_UNICODE = "δοκιμή испытание 测试";
static final String EXPECTED_BITCOIN_SIG = "IMBbIFDDuUwomYlvSjwWytqP/CXYym2yOKbJUx8Y+ujzZKBwoCFMr73GUxpr1Ird/DvnNZcsQLphvx18ftqN54o=";
static final String EXPECTED_BITCOIN_SIG_UNICODE = "IGGZEOBsVny5dozTOfc2/3UuvmZGdDI4XK/03HIk34PILd2oXbnq+87GINT3lumeXcgSO2NkGzUFcQ1SCSVI3Hk=";
static final String EXPECTED_NUBITS_SIG = "IMuzNZTZIjZjLicyDFGzqFl21vqNBGW1N5m4qHBRqbTvLBbkQeGjraeLmZEt7mRH4MSMPLFXW2T3Maz+HYx1tEc=";
@@ -80,11 +86,20 @@ public class WalletPocketHDTest {
DeterministicSeed seed = new DeterministicSeed(MNEMONIC, null, "", 0);
DeterministicKey masterKey = HDKeyDerivation.createMasterPrivateKey(checkNotNull(seed.getSeedBytes()));
DeterministicHierarchy hierarchy = new DeterministicHierarchy(masterKey);
+ DeterministicKey rootKey = hierarchy.get(DOGE.getBip44Path(0), false, true);
KeyParameter aesKey = new KeyParameter(AES_KEY_BYTES);
KeyCrypter crypter = new KeyCrypterScrypt();
WalletPocketHD pocket;
+ @Before
+ public void setup() {
+ BriefLogFormatter.init();
+
+ pocket = new WalletPocketHD(rootKey, DOGE, null, null);
+ pocket.keys.setLookaheadSize(20);
+ }
+
@Test
public void testId() throws Exception {
assertEquals("8747886e9a77fe2a1588df3168b867648434d6d339b0b448793ae1db8f283f41", pocket.getId());
@@ -93,9 +108,9 @@ public void testId() throws Exception {
@Test
public void testSingleAddressWallet() throws Exception {
ECKey key = pocket.keys.getCurrentUnusedKey(KeyChain.KeyPurpose.RECEIVE_FUNDS);
- BitWalletSingleKey bitWalletSingleKey = new BitWalletSingleKey(BTC, key);
- bitWalletSingleKey.onConnection(getBlockchainConnection(BTC));
- assertEquals(BTC.value("10"), bitWalletSingleKey.getBalance());
+ BitWalletSingleKey bitWalletSingleKey = new BitWalletSingleKey(DOGE, key);
+ bitWalletSingleKey.onConnection(getBlockchainConnection(DOGE));
+ assertEquals(DOGE.value("10"), bitWalletSingleKey.getBalance());
}
@Test
@@ -104,10 +119,65 @@ public void xpubWallet() {
DeterministicKey key = DeterministicKey.deserializeB58(null, xpub);
WalletPocketHD account = new WalletPocketHD(key, BTC, null, null);
assertEquals("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", account.getReceiveAddress().toString());
- account = new WalletPocketHD(key, BTC, null, null);
+ account = new WalletPocketHD(key, NBT, null, null);
assertEquals("BNvJUwg3BgkbQk5br1CxvHxdcDp1EC3saE", account.getReceiveAddress().toString());
}
+ @Test
+ public void xpubWalletSerialized() throws Exception {
+ WalletPocketHD account = new WalletPocketHD(rootKey, BTC, null, null);
+ Protos.WalletPocket proto = account.toProtobuf();
+ WalletPocketHD newAccount = new WalletPocketProtobufSerializer().readWallet(proto, null);
+ assertEquals(account.getPublicKeySerialized(), newAccount.getPublicKeySerialized());
+ }
+
+ @Test
+ public void signMessage() throws AddressMalformedException, MissingPrivateKeyException, KeyIsEncryptedException {
+ WalletPocketHD pocketHD = new WalletPocketHD(rootKey, BTC, null, null);
+ pocketHD.getReceiveAddress(); // Generate the first key
+ SignedMessage signedMessage = new SignedMessage("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", MESSAGE);
+ pocketHD.signMessage(signedMessage, null);
+ assertEquals(EXPECTED_BITCOIN_SIG, signedMessage.getSignature());
+
+ signedMessage = new SignedMessage("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", MESSAGE_UNICODE);
+ pocketHD.signMessage(signedMessage, null);
+ assertEquals(EXPECTED_BITCOIN_SIG_UNICODE, signedMessage.getSignature());
+
+ pocketHD = new WalletPocketHD(rootKey, NBT, null, null);
+ pocketHD.getReceiveAddress(); // Generate the first key
+ signedMessage = new SignedMessage("BNvJUwg3BgkbQk5br1CxvHxdcDp1EC3saE", MESSAGE);
+ pocketHD.signMessage(signedMessage, null);
+ assertEquals(EXPECTED_NUBITS_SIG, signedMessage.getSignature());
+
+ signedMessage = new SignedMessage("BNvJUwg3BgkbQk5br1CxvHxdcDp1EC3saE", MESSAGE_UNICODE);
+ pocketHD.signMessage(signedMessage, null);
+ assertEquals(EXPECTED_NUBITS_SIG_UNICODE, signedMessage.getSignature());
+ }
+
+ @Test
+ public void signMessageEncrypted() throws AddressMalformedException, MissingPrivateKeyException, KeyIsEncryptedException {
+ WalletPocketHD pocketHD = new WalletPocketHD(rootKey, BTC, null, null);
+ pocketHD.getReceiveAddress(); // Generate the first key
+ pocketHD.encrypt(crypter, aesKey);
+ SignedMessage signedMessage = new SignedMessage("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", MESSAGE);
+ pocketHD.signMessage(signedMessage, aesKey);
+ assertEquals(EXPECTED_BITCOIN_SIG, signedMessage.getSignature());
+
+ signedMessage = new SignedMessage("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", MESSAGE_UNICODE);
+ pocketHD.signMessage(signedMessage, aesKey);
+ assertEquals(EXPECTED_BITCOIN_SIG_UNICODE, signedMessage.getSignature());
+ }
+
+ @Test
+ public void signMessageEncryptedFailed() throws AddressMalformedException, MissingPrivateKeyException, KeyIsEncryptedException {
+ WalletPocketHD pocketHD = new WalletPocketHD(rootKey, BTC, null, null);
+ pocketHD.getReceiveAddress(); // Generate the first key
+ pocketHD.encrypt(crypter, aesKey);
+ SignedMessage signedMessage = new SignedMessage("1KUDsEDqSBAgxubSEWszoA9xscNRRCmujM", MESSAGE);
+ pocketHD.signMessage(signedMessage, null);
+ assertEquals(SignedMessage.Status.KeyIsEncrypted, signedMessage.status);
+ }
+
@Test
public void watchingAddresses() {
List watchingAddresses = pocket.getAddressesToWatch();
@@ -152,7 +222,7 @@ public void issuedKeysLimit() throws Exception {
assertEquals(19, pocket.getIssuedReceiveAddresses().size());
}
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
assertTrue(pocket.canCreateFreshReceiveAddress());
try {
@@ -189,7 +259,7 @@ public void issuedKeysLimit2() throws Exception {
public void usedAddresses() throws Exception {
assertEquals(0, pocket.getUsedAddresses().size());
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
// Receive and change addresses
assertEquals(13, pocket.getUsedAddresses().size());
@@ -262,14 +332,14 @@ private void setTrustedTransaction(WalletPocketHD account, Sha256Hash txId) {
@Test
public void testLoading() throws Exception {
assertFalse(pocket.isLoading());
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
// TODO add fine grained control to the blockchain connection in order to test the loading status
assertFalse(pocket.isLoading());
}
@Test
public void fillTransactions() throws Exception {
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
checkUnspentOutputs(getDummyUtxoSet(), pocket);
assertEquals(11000000000L, pocket.getBalance().value);
@@ -299,7 +369,62 @@ public void fillTransactions() throws Exception {
assertEquals(11000000000L, pocket.getBalance().value);
}
-
+
+ @Test
+ public void serializeTransactionsBtc() throws Exception, Bip44KeyLookAheadExceededException {
+ WalletPocketHD account = new WalletPocketHD(rootKey, BTC, null, null);
+ Transaction tx = new Transaction(BTC);
+ tx.addOutput(BTC.oneCoin().toCoin(), account.getReceiveAddress());
+ account.addNewTransactionIfNeeded(tx);
+ testWalletSerializationForCoin(account);
+ }
+
+ @Test
+ public void serializeTransactionsNbt() throws Exception, Bip44KeyLookAheadExceededException {
+ WalletPocketHD account = new WalletPocketHD(rootKey, NBT, null, null);
+ Transaction tx = new Transaction(NBT);
+ tx.addOutput(NBT.oneCoin().toCoin(), account.getReceiveAddress());
+ account.addNewTransactionIfNeeded(tx);
+ testWalletSerializationForCoin(account);
+ }
+
+ @Test
+ public void serializeTransactionsVpn() throws Exception, Bip44KeyLookAheadExceededException {
+ WalletPocketHD account = new WalletPocketHD(rootKey, VPN, null, null);
+ // Test tx with null extra bytes
+ Transaction tx = new Transaction(VPN);
+ tx.setTime(0x99999999);
+ tx.addOutput(VPN.oneCoin().toCoin(), account.getFreshReceiveAddress());
+ account.addNewTransactionIfNeeded(tx);
+ WalletPocketHD newAccount = testWalletSerializationForCoin(account);
+ Transaction newTx = newAccount.getRawTransaction(tx.getHash());
+ assertNotNull(newTx);
+ assertNotNull(newTx.getExtraBytes());
+ assertEquals(0, newTx.getExtraBytes().length);
+ // Test tx with empty extra bytes
+ tx = new Transaction(VPN);
+ tx.setTime(0x99999999);
+ tx.setExtraBytes(new byte[0]);
+ tx.addOutput(VPN.oneCoin().toCoin(), account.getFreshReceiveAddress());
+ account.addNewTransactionIfNeeded(tx);
+ newAccount = testWalletSerializationForCoin(account);
+ newTx = newAccount.getRawTransaction(tx.getHash());
+ assertNotNull(newTx);
+ assertNotNull(newTx.getExtraBytes());
+ assertEquals(0, newTx.getExtraBytes().length);
+ // Test tx with extra bytes
+ tx = new Transaction(VPN);
+ tx.setTime(0x99999999);
+ byte[] bytes = {0x1, 0x2, 0x3};
+ tx.setExtraBytes(bytes);
+ tx.addOutput(VPN.oneCoin().toCoin(), account.getFreshReceiveAddress());
+ account.addNewTransactionIfNeeded(tx);
+ newAccount = testWalletSerializationForCoin(account);
+ newTx = newAccount.getRawTransaction(tx.getHash());
+ assertNotNull(newTx);
+ assertArrayEquals(bytes, newTx.getExtraBytes());
+ }
+
private WalletPocketHD testWalletSerializationForCoin(WalletPocketHD account) throws UnreadableWalletException {
Protos.WalletPocket proto = account.toProtobuf();
WalletPocketHD newAccount = new WalletPocketProtobufSerializer().readWallet(proto, null);
@@ -315,7 +440,7 @@ private WalletPocketHD testWalletSerializationForCoin(WalletPocketHD account) th
@Test
public void serializeUnencryptedNormal() throws Exception {
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
Protos.WalletPocket walletPocketProto = pocket.toProtobuf();
System.out.println(walletPocketProto.toString());
@@ -323,7 +448,7 @@ public void serializeUnencryptedNormal() throws Exception {
WalletPocketHD newPocket = new WalletPocketProtobufSerializer().readWallet(walletPocketProto, null);
assertEquals(pocket.getBalance().value, newPocket.getBalance().value);
- assertEquals(BTC.value(11000000000l), newPocket.getBalance());
+ assertEquals(DOGE.value(11000000000l), newPocket.getBalance());
Map expectedUtxoSet = getDummyUtxoSet();
checkUnspentOutputs(expectedUtxoSet, pocket);
@@ -352,7 +477,7 @@ public void serializeUnencryptedNormal() throws Exception {
assertEquals(18, newPocket.keys.getNumIssuedExternalKeys());
assertEquals(9, newPocket.keys.getNumIssuedInternalKeys());
- newPocket.onConnection(getBlockchainConnection(BTC));
+ newPocket.onConnection(getBlockchainConnection(DOGE));
// No addresses left to subscribe
List addressesToWatch = newPocket.getAddressesToWatch();
@@ -423,15 +548,15 @@ public void serializeEncryptedEmpty() throws Exception {
public void serializeEncryptedNormal() throws Exception {
pocket.maybeInitializeAllKeys();
pocket.encrypt(crypter, aesKey);
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
- assertEquals(BTC.value(11000000000l), pocket.getBalance());
+ assertEquals(DOGE.value(11000000000l), pocket.getBalance());
assertAllKeysEncrypted(pocket);
WalletPocketHD newPocket = new WalletPocketProtobufSerializer().readWallet(pocket.toProtobuf(), crypter);
- assertEquals(BTC.value(11000000000l), newPocket.getBalance());
+ assertEquals(DOGE.value(11000000000l), newPocket.getBalance());
Map expectedUtxoSet = getDummyUtxoSet();
checkUnspentOutputs(expectedUtxoSet, pocket);
@@ -473,28 +598,28 @@ private void assertAllKeysEncrypted(WalletPocketHD pocket) {
@Test
public void createDustTransactionFee() throws Exception {
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
- BitAddress toAddr = BitAddress.from(BTC, "nZB8PHkfgJvuCJqchSexmfY3ABXa2aE1vp");
+ BitAddress toAddr = BitAddress.from(DOGE, "nZB8PHkfgJvuCJqchSexmfY3ABXa2aE1vp");
- Value softDust = BTC.getSoftDustLimit();
+ Value softDust = DOGE.getSoftDustLimit();
assertNotNull(softDust);
// Send a soft dust
- BitSendRequest sendRequest = pocket.sendCoinsOffline(toAddr, softDust.subtract(BTC.value(1)));
+ BitSendRequest sendRequest = pocket.sendCoinsOffline(toAddr, softDust.subtract(DOGE.value(1)));
pocket.completeTransaction(sendRequest);
- assertEquals(BTC.getFeeValue().multiply(2), sendRequest.tx.getFee());
+ assertEquals(DOGE.getFeeValue().multiply(2), sendRequest.tx.getFee());
}
@Test
public void createTransactionAndBroadcast() throws Exception {
- pocket.onConnection(getBlockchainConnection(BTC));
+ pocket.onConnection(getBlockchainConnection(DOGE));
- BitAddress toAddr = BitAddress.from(BTC, "nZB8PHkfgJvuCJqchSexmfY3ABXa2aE1vp");
+ BitAddress toAddr = BitAddress.from(DOGE, "nZB8PHkfgJvuCJqchSexmfY3ABXa2aE1vp");
Value orgBalance = pocket.getBalance();
- BitSendRequest sendRequest = pocket.sendCoinsOffline(toAddr, BTC.value(AMOUNT_TO_SEND));
+ BitSendRequest sendRequest = pocket.sendCoinsOffline(toAddr, DOGE.value(AMOUNT_TO_SEND));
sendRequest.shuffleOutputs = false;
- sendRequest.feePerTxSize = BTC.value(0);
+ sendRequest.feePerTxSize = DOGE.value(0);
pocket.completeTransaction(sendRequest);
// FIXME, mock does not work here
@@ -521,7 +646,7 @@ HashMap getDummyStatuses() throws AddressMalform
HashMap status = new HashMap<>(40);
for (int i = 0; i < addresses.size(); i++) {
- AbstractAddress address = BTC.newAddress(addresses.get(i));
+ AbstractAddress address = DOGE.newAddress(addresses.get(i));
status.put(address, new AddressStatus(address, statuses[i]));
}
@@ -537,7 +662,7 @@ private HashMap> getDummyHistoryTXs() thro
for (int j = 0; j < jsonArray.length(); j++) {
list.add(new HistoryTx(jsonArray.getJSONObject(j)));
}
- htxs.put(BTC.newAddress(addresses.get(i)), list);
+ htxs.put(DOGE.newAddress(addresses.get(i)), list);
}
return htxs;
@@ -552,7 +677,7 @@ private HashMap> getDummyUnspentTXs() thro
for (int j = 0; j < jsonArray.length(); j++) {
list.add(new UnspentTx(jsonArray.getJSONObject(j)));
}
- utxs.put(BTC.newAddress(addresses.get(i)), list);
+ utxs.put(DOGE.newAddress(addresses.get(i)), list);
}
return utxs;
@@ -562,15 +687,15 @@ private Map getDummyUtxoSet() throws AddressMal
final HashMap unspentOutputs = new HashMap<>();
for (int i = 0; i < statuses.length; i++) {
- BitAddress address = (BitAddress) BTC.newAddress(addresses.get(i));
+ BitAddress address = (BitAddress) DOGE.newAddress(addresses.get(i));
JSONArray utxoArray = new JSONArray(unspent[i]);
for (int j = 0; j < utxoArray.length(); j++) {
JSONObject utxoObject = utxoArray.getJSONObject(j);
//"[{\"tx_hash\": \"ef74da273e8a77e2d60b707414fb7e0ccb35c7b1b936800a49fe953195b1799f\", \"tx_pos\": 11, \"value\": 500000000, \"height\": 160267}]",
- TrimmedOutPoint outPoint = new TrimmedOutPoint(BTC, utxoObject.getInt("tx_pos"),
+ TrimmedOutPoint outPoint = new TrimmedOutPoint(DOGE, utxoObject.getInt("tx_pos"),
new Sha256Hash(utxoObject.getString("tx_hash")));
- TransactionOutput output = new TransactionOutput(BTC, null,
+ TransactionOutput output = new TransactionOutput(DOGE, null,
Coin.valueOf(utxoObject.getLong("value")), address);
OutPointOutput utxo = new OutPointOutput(outPoint, output, false);
unspentOutputs.put(outPoint, utxo);
diff --git a/core/src/test/java/com/vergepay/core/wallet/WalletTest.java b/core/src/test/java/com/coinomi/core/wallet/WalletTest.java
similarity index 97%
rename from core/src/test/java/com/vergepay/core/wallet/WalletTest.java
rename to core/src/test/java/com/coinomi/core/wallet/WalletTest.java
index a7f0bea..caf1801 100644
--- a/core/src/test/java/com/vergepay/core/wallet/WalletTest.java
+++ b/core/src/test/java/com/coinomi/core/wallet/WalletTest.java
@@ -27,7 +27,7 @@
*/
public class WalletTest {
static final List MNEMONIC = ImmutableList.of("citizen", "fever", "scale", "nurse", "brief", "round", "ski", "fiction", "car", "fitness", "pluck", "act");
- CoinType type = BitcoinMain.get();
+ CoinType type = BitcoinTest.get();
private Wallet wallet;
static final byte[] aesKeyBytes = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7};
KeyParameter aesKey = new KeyParameter(aesKeyBytes);
@@ -40,7 +40,7 @@ public void setup() throws IOException, MnemonicException {
wallet = new Wallet(MNEMONIC);
ImmutableList typesToCreate = ImmutableList.of(BitcoinMain.get(),
- LitecoinMain.get());
+ LitecoinMain.get()
wallet.createAccounts(typesToCreate, true, aesKey);
}
diff --git a/core/src/test/java/com/vergepay/core/wallet/families/bitcoin/BitAddressTest.java b/core/src/test/java/com/coinomi/core/wallet/families/bitcoin/BitAddressTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/wallet/families/bitcoin/BitAddressTest.java
rename to core/src/test/java/com/coinomi/core/wallet/families/bitcoin/BitAddressTest.java
diff --git a/core/src/test/java/com/coinomi/core/wallet/families/bitcoin/TransactionTest.java b/core/src/test/java/com/coinomi/core/wallet/families/bitcoin/TransactionTest.java
new file mode 100644
index 0000000..3cfd998
--- /dev/null
+++ b/core/src/test/java/com/coinomi/core/wallet/families/bitcoin/TransactionTest.java
@@ -0,0 +1,38 @@
+package com.vergepay.core.wallet.families.bitcoin;
+
+import com.vergepay.core.coins.CannacoinMain;
+import com.vergepay.core.coins.NuBitsMain;
+import com.vergepay.core.coins.PeercoinMain;
+
+import org.bitcoinj.core.Transaction;
+import org.junit.Test;
+import org.spongycastle.util.encoders.Hex;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author John L. Jegutanis
+ */
+public class TransactionTest {
+ String peercoinHash = "f1311469970c2a7bd1a0f69affe627222e7bae446dbafdbe90479706b75263ca";
+ Transaction peercoinTx = new Transaction(PeercoinMain.get(), Hex.decode("01000000896dc3550448d7832861e532b3fbd225017cb7ca9a20caf79b6f802255520b37415959570d030000006c493046022100871f5b7a75cc9732d4c1410787a7e07131c74410420efaf7e5f438f86a3933fa022100dff501634f5d3fd64075f685173830c5023824cbfc46ea013d29da78c7eda9d3012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffff8b015753b65cf8a5fa8af15aa955d2925d9138dde80ac07f94056a56331a7407010000006b483045022054030eb85636ddb9362505af46d334cd16c5df09245f9ad44d7d065ec7a4de420221009368aa9b145ec952dd5c2edd65a32210049328b8d57681e367da72bfc63e9029012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffffb7eb79dd9205847bb19571b544e96d3f479f1aebc7818b185c31b150b2157453010000006b48304502205c7b91f7057563c992ce2d1a56b7c7b61394f327ccd5e0d6ceafb6c42d70e330022100ba76acfb2b5e1592b03e9f32c4c0756d56e73f99a78766d12915effd0648f635012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffff33c208bc6fe2c2c12c218617325849536c9adc24e673d25c24758d3dd96cbdef540000006c493046022100a03ff05c33b2ac34aff5a8dfb4b545d14cf53887d70ec48a9ae203038b9f228f022100f287e59fdd132b11c095ec105b9b7d4f9cd18cb2de26f9de32912d626dc870d50121038a64028ae8fe1801158a8f72f6f9e8757fe46c06fed4705424aa7a0cb50ce371ffffffff0162b31701000000001976a914181805d5c08a3f5cc0c0c1e6fd40304259dbaddc88ac00000000"));
+ String nuBitsHash = "95cde4252ec3d369462f2ba13cab68d19ede4966b19bce951cb1eb872aeebfdf";
+ Transaction nuBitsTx = new Transaction(NuBitsMain.get(), Hex.decode("01000000da65c45501a9a56af031323ff6f0f45281660567389328dfc1d83e88cd6b29b505cf402a43010000006c4930460221008a12caa723b15eb6057478a0f1029f5c99921a426fec44cdacec4f0f11e75971022100f05c8344323bb1b184eb5868f702fdfb7f523d73776c2c78df70867a75baaaeb01210254eac4efa6c28776e4d63e0c65587be41c559bc3cb639ab5dfd572d252ece7d5ffffffff0769000000000000001976a9143de7f23c25936b9bddc3b21fae3082fcfc09fd9888ac66000000000000001976a9147c46bc2b5ad3ca40c6f4d039afe3ecd743487d0a88ac68000000000000001976a9149a9e312da46341905f87f599fefff65f415ccbe388ac4e040000000000001976a914de31e58402ae8c6ced0169b3bd07fee0248ae5da88ac21710200000000001976a914912958e7ee82e34b18babfaa5d240e89b81ee01188ac68000000000000001976a9144d27246db88ccacae6ad86cd65753e51efd37e7288ac6a000000000000001976a9146043d55ef117b0cdeb8e5c8247eb14858930557e88ac0000000042"));
+ String cannacoinHash = "e2329805f536c1f7aaa2d199fe8be8f98ead72f72abc28785f11b927996975da";
+ Transaction cannacoinTx = new Transaction(CannacoinMain.get(), Hex.decode("0200000001c3ca26255b0ea4e5f0ce72d30a529fa8f154a4b14669a6a12c2abcf2e2831650010000006b483045022100fc8d7234352eda12025a4bb4d89872d4fbdb24ef0adc3ca1b6f184f2a90d94bb022023e26ea1c0605148975e4458258827123737a8a47f44446f852df0c3a69c7160012102ec2091d47d010eb4a949dc7e470db08df242b1164ea7e63b154982b8b1071037ffffffff0238098b00000000001976a914b1adb719e8e6a6fff83e6e35dc0ac053b206ed7888acc2536908000000001976a91476074a88f5224d534ae7f458935e1c411e627f2588ac000000003d55c654"));
+
+ @Test
+ public void peercoinTxTest() {
+ assertEquals(peercoinHash, peercoinTx.getHashAsString());
+ }
+
+ @Test
+ public void nuBitsTxTest() {
+ assertEquals(nuBitsHash, nuBitsTx.getHashAsString());
+ }
+
+ @Test
+ public void cannacoinTxTest() {
+ assertEquals(cannacoinHash, cannacoinTx.getHashAsString());
+ }
+}
diff --git a/core/src/test/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWalletTest.java b/core/src/test/java/com/coinomi/core/wallet/families/nxt/NxtFamilyWalletTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/core/wallet/families/nxt/NxtFamilyWalletTest.java
rename to core/src/test/java/com/coinomi/core/wallet/families/nxt/NxtFamilyWalletTest.java
diff --git a/core/src/test/java/com/vergepay/core/wallet/families/vpncoin/TransactionTest.java b/core/src/test/java/com/coinomi/core/wallet/families/vpncoin/TransactionTest.java
similarity index 66%
rename from core/src/test/java/com/vergepay/core/wallet/families/vpncoin/TransactionTest.java
rename to core/src/test/java/com/coinomi/core/wallet/families/vpncoin/TransactionTest.java
index c7cc1d1..6b84765 100644
--- a/core/src/test/java/com/vergepay/core/wallet/families/vpncoin/TransactionTest.java
+++ b/core/src/test/java/com/coinomi/core/wallet/families/vpncoin/TransactionTest.java
@@ -1,6 +1,6 @@
package com.vergepay.core.wallet.families.vpncoin;
-import com.vergepay.core.coins.BitcoinMain;
+import com.vergepay.core.coins.VpncoinMain;
import com.vergepay.core.messages.MessageFactory;
import com.google.common.base.Charsets;
@@ -34,11 +34,21 @@ public class TransactionTest {
"Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue.";
String TX_HASH_1 = "192c485deab867c994a2396c815a48e4c3808c166b4edd70f87085e22c1417e5";
- Transaction TX_1 = new Transaction(BitcoinMain.get(), Hex.decode("0100000089cec45502c8f83c02c59583876c6e1fa447e7ab6083e392753ddf8707269b36340afcf028000000006a47304402206552a703cc1865c72bc43899d4841502f52f5110d2cb637983965e153abe197802200b31b94c1d014fc0ea360f5d29a79ab98421f6104145477a7077540393aeb0bd0121028cbb0a3d32a4e076c5131c90b49ddcb940eaa67cf918a1484ca69d19d475a579ffffffff35908ed4a3aa92f2c0b19605a07fbb9a76146db542cc30b9d5e75d2259ac8735010000006a473044022053a2f59dc313e43c96b01b3787bfab948aa1b95a40a1b9691eff01545d924d9e02204845df419347bff68207febe7fe05bed41daa5164d7f26ec170cac7455b0e4d601210282a4a113c70c352ee86d2a60297a7eeb719664f8610514d442346d7999ffa3b6ffffffff0220b81800000000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac00000000384177494d6465373776652b6737566e5665466c354e5641312f47487735363251324c31592b6c464543566f64495031622f73577533664d3d"));
+ Transaction TX_1 = new Transaction(VpncoinMain.get(), Hex.decode("0100000089cec45502c8f83c02c59583876c6e1fa447e7ab6083e392753ddf8707269b36340afcf028000000006a47304402206552a703cc1865c72bc43899d4841502f52f5110d2cb637983965e153abe197802200b31b94c1d014fc0ea360f5d29a79ab98421f6104145477a7077540393aeb0bd0121028cbb0a3d32a4e076c5131c90b49ddcb940eaa67cf918a1484ca69d19d475a579ffffffff35908ed4a3aa92f2c0b19605a07fbb9a76146db542cc30b9d5e75d2259ac8735010000006a473044022053a2f59dc313e43c96b01b3787bfab948aa1b95a40a1b9691eff01545d924d9e02204845df419347bff68207febe7fe05bed41daa5164d7f26ec170cac7455b0e4d601210282a4a113c70c352ee86d2a60297a7eeb719664f8610514d442346d7999ffa3b6ffffffff0220b81800000000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac00000000384177494d6465373776652b6737566e5665466c354e5641312f47487735363251324c31592b6c464543566f64495031622f73577533664d3d"));
String TX_HASH_2 = "9925c0724b5ce11e13c9cb1349cb084377ab6e3245112eec109d54d3bcf38b34";
- Transaction TX_2 = new Transaction(BitcoinMain.get(), Hex.decode("01000000347bc75501f4fddc83d4a27cb80e73547503e23f3f9336effa180aed06cf60c65f6625059c010000006b483045022100be8e81194d4e77ca53cf472973f065f04709a8fe7b429955b829b08c69ac6213022040db08bb6f8a9d8a78157752c1f534239d9d339546423d5cfd1462fda5408b9101210351548af711794d4e556d2c215bd25f9d2a4d7ec5c99d5ca42d4c33fb21307835ffffffff02f09eb31e030000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac000000006c4177493672364f32384b4c746f4b6b30584a313638307173426642336353526d4c424842425750515566362b3835536f55745a58687a6e705938692b4f724e6a316761504a46766561324776452b6b384e6430536c316e6c483955596c535438543563457075566f77513d3d"));
+ Transaction TX_2 = new Transaction(VpncoinMain.get(), Hex.decode("01000000347bc75501f4fddc83d4a27cb80e73547503e23f3f9336effa180aed06cf60c65f6625059c010000006b483045022100be8e81194d4e77ca53cf472973f065f04709a8fe7b429955b829b08c69ac6213022040db08bb6f8a9d8a78157752c1f534239d9d339546423d5cfd1462fda5408b9101210351548af711794d4e556d2c215bd25f9d2a4d7ec5c99d5ca42d4c33fb21307835ffffffff02f09eb31e030000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac000000006c4177493672364f32384b4c746f4b6b30584a313638307173426642336353526d4c424842425750515566362b3835536f55745a58687a6e705938692b4f724e6a316761504a46766561324776452b6b384e6430536c316e6c483955596c535438543563457075566f77513d3d"));
String TX_HASH_3 = "51f0ce3a8c56078d2d05660a042b820dffd2c81f370ab5af0d1135477461348a";
- Transaction TX_3 = new Transaction(BitcoinMain.get(), Hex.decode("01000000f07ac75501b14681fad878ae6d2416816be38bc926a5d428c7140a43e8dc4a64b61f324306010000006b483045022100f7beded6ce2b642af5523e1141032c68bc76fed629080766891b7aa54a4831b802200ad9a30203b93a3661f8132e5f132d865328874e709fe14b953c2ab72e20c7d50121025e3c4bfdc18ea84ec3403360c4b5f01b71fc4cdca5e170e508b05a121ffd5230ffffffff02f00f1789000000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac00000000fd900241774d4b5161667938764532546d53443139395669636e46735751425631766c70495256726e6e6b597149774d36734c6c6b7a736b793946414c58744b75317a716859417578796c3831717542773245694462426a7245716b3868532f4e5467563476334e3872752f304151656a384f7578392b75676d6e6a575231705945715a5a484d34323338794f50305076613668355935437a54654959715047513279374c54572b4e456c6e354d796e7155586e465739774944687776582b4d3347464771534266746651743654666152776373743631436e4876397a704d6263546170644e6b7249767a474533684a4b2b6945577147434a6f644c4274426b656b7035365073787558716562653068764843724b4f4e7553587a5a6447436f506868344b476f635876394b6c4b6d53706f6863434e4f504f2f376d47784874503159577747636336687644764e4d653374454b5179424835526c4d3771637067513764563174647374646c4f704c50696f643865666b57704336584e4135633259546266325a66376d2b524c2b3367586763636b32616f764349305778336575437a5642486963664c346634376247413634314e2b59523561724376645458444e667665586e446a723065443263474f594639672f433646625a7165553567376947466a79715a6467504134326b4b5176496b54437a796c464576334a6a2b5859526f537635367a7979595a65544563484b6d2f446f454f6162736d5633467542786b5337377845352b455a447a74735a42754843667234304e68616c5967532b2b41644f684273533069575150504646496349326b42663963506b6d356842763161717654346a663145426a2b73483076793444764a7a747233392f33715733513064374b797665704c3338646b413d3d"));
+ Transaction TX_3 = new Transaction(VpncoinMain.get(), Hex.decode("01000000f07ac75501b14681fad878ae6d2416816be38bc926a5d428c7140a43e8dc4a64b61f324306010000006b483045022100f7beded6ce2b642af5523e1141032c68bc76fed629080766891b7aa54a4831b802200ad9a30203b93a3661f8132e5f132d865328874e709fe14b953c2ab72e20c7d50121025e3c4bfdc18ea84ec3403360c4b5f01b71fc4cdca5e170e508b05a121ffd5230ffffffff02f00f1789000000001976a914a620a48d22391100afceaff72c73a4032f3fb02b88ac00e40b54020000001976a914ce7f924d1886c3525e8454eebda251a0f0d1b10b88ac00000000fd900241774d4b5161667938764532546d53443139395669636e46735751425631766c70495256726e6e6b597149774d36734c6c6b7a736b793946414c58744b75317a716859417578796c3831717542773245694462426a7245716b3868532f4e5467563476334e3872752f304151656a384f7578392b75676d6e6a575231705945715a5a484d34323338794f50305076613668355935437a54654959715047513279374c54572b4e456c6e354d796e7155586e465739774944687776582b4d3347464771534266746651743654666152776373743631436e4876397a704d6263546170644e6b7249767a474533684a4b2b6945577147434a6f644c4274426b656b7035365073787558716562653068764843724b4f4e7553587a5a6447436f506868344b476f635876394b6c4b6d53706f6863434e4f504f2f376d47784874503159577747636336687644764e4d653374454b5179424835526c4d3771637067513764563174647374646c4f704c50696f643865666b57704336584e4135633259546266325a66376d2b524c2b3367586763636b32616f764349305778336575437a5642486963664c346634376247413634314e2b59523561724376645458444e667665586e446a723065443263474f594639672f433646625a7165553567376947466a79715a6467504134326b4b5176496b54437a796c464576334a6a2b5859526f537635367a7979595a65544563484b6d2f446f454f6162736d5633467542786b5337377845352b455a447a74735a42754843667234304e68616c5967532b2b41644f684273533069575150504646496349326b42663963506b6d356842763161717654346a663145426a2b73483076793444764a7a747233392f33715733513064374b797665704c3338646b413d3d"));
+
+ @Test
+ public void decrypt() throws Exception {
+ assertArrayEquals(ORIGINAL_BYTES, VpncoinTxMessage.decryptBytes(ENCRYPTION_KEY, ENCRYPTED));
+ }
+
+ @Test
+ public void uncompress() throws Exception {
+ assertArrayEquals(ORIGINAL_BYTES, VpncoinTxMessage.uncompress(ByteBuffer.wrap(COMPRESSED)));
+ }
@Test
public void hashes() {
@@ -46,7 +56,67 @@ public void hashes() {
assertEquals(TX_HASH_2, TX_2.getHashAsString());
assertEquals(TX_HASH_3, TX_3.getHashAsString());
}
+ @Test
+ public void messageRegex() {
+ String messageString = "@FROM=" + FROM_USER + "@SUBJ=" + SUBJECT + "@MSG=" + MESSAGE;
+ Matcher matcher = VpncoinTxMessage.MESSAGE_REGEX.matcher(messageString);
+ assertTrue(matcher.find());
+ assertEquals("@FROM=" + FROM_USER, matcher.group());
+ assertTrue(matcher.find());
+ assertEquals("@SUBJ=" + SUBJECT, matcher.group());
+ assertTrue(matcher.find());
+ assertEquals("@MSG=" + MESSAGE, matcher.group());
+ }
+
+ @Test
+ public void emptyMessages() {
+ MessageFactory factory = VpncoinTxMessage.getFactory();
+ assertEquals("", factory.createPublicMessage("").toString());
+ assertEquals("", factory.createPublicMessage(" ").toString());
+ assertEquals("", factory.createPublicMessage("\n\n").toString());
+ assertEquals("", factory.createPublicMessage(" \t \t").toString());
+
+ assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage("")).serialize().length);
+ assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage(" ")).serialize().length);
+ assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage("\n\n")).serialize().length);
+ assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage(" \t \t")).serialize().length);
+ }
+
+ @Test
+ public void messageStringParsing() {
+ VpncoinTxMessage message = VpncoinTxMessage.parse("@FROM=" + FROM_USER + "@SUBJ=" + SUBJECT + "@MSG=" + MESSAGE);
+ assertEquals(FROM_USER, message.getFrom());
+ assertEquals(SUBJECT, message.getSubject());
+ assertEquals(MESSAGE, message.getMessage());
+ assertEquals(FROM_USER + "\n\n"+SUBJECT+"\n\n"+MESSAGE, message.toString());
+ message = VpncoinTxMessage.parse("@MSG=" + MESSAGE);
+ assertNull(message.getFrom());
+ assertNull(message.getSubject());
+ assertEquals(MESSAGE, message.getMessage());
+ assertEquals(MESSAGE, message.toString());
+ }
+
+ @Test
+ public void messageSerialization() {
+ VpncoinTxMessage message = new VpncoinTxMessage(FROM_USER, SUBJECT, MESSAGE);
+ String expected = "@FROM="+FROM_USER+"@SUBJ="+SUBJECT+"@MSG="+MESSAGE;
+ assertArrayEquals(expected.getBytes(Charsets.UTF_8), message.serialize());
+
+ message = new VpncoinTxMessage(MESSAGE);
+ assertNull(message.getFrom());
+ assertNull(message.getSubject());
+ assertArrayEquals(("@MSG=" + MESSAGE).getBytes(Charsets.UTF_8), message.serialize());
+ }
+
+ @Test
+ public void messageToString() {
+ VpncoinTxMessage message = new VpncoinTxMessage(FROM_USER, SUBJECT, MESSAGE);
+ assertEquals(FROM_USER + "\n\n"+SUBJECT+"\n\n"+MESSAGE, message.toString());
+
+ message = new VpncoinTxMessage(MESSAGE);
+ assertEquals(MESSAGE, message.toString());
+ }
/*
@Test
public void messagesEncrypted() {
@@ -58,9 +128,9 @@ public void messagesEncrypted() {
message = VpncoinTxMessage.parse(TX_2);
assert message != null;
- assertEquals("bit lee, message.getFrom());
- assertEquals("hello, message.getSubject());
- assertEquals("thanks" +
+ assertEquals("比特李", message.getFrom());
+ assertEquals("信息", message.getSubject());
+ assertEquals("сообщение\n" +
"μήνυμα\n" +
"رسالة", message.getMessage());
diff --git a/core/src/test/java/com/vergepay/stratumj/CommunicationsTest.java b/core/src/test/java/com/coinomi/stratumj/CommunicationsTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/stratumj/CommunicationsTest.java
rename to core/src/test/java/com/coinomi/stratumj/CommunicationsTest.java
diff --git a/core/src/test/java/com/vergepay/stratumj/MessagesTest.java b/core/src/test/java/com/coinomi/stratumj/MessagesTest.java
similarity index 100%
rename from core/src/test/java/com/vergepay/stratumj/MessagesTest.java
rename to core/src/test/java/com/coinomi/stratumj/MessagesTest.java
diff --git a/core/src/test/java/com/vergepay/core/exchange/shapeshift/ExchangeRateTest.java b/core/src/test/java/com/vergepay/core/exchange/shapeshift/ExchangeRateTest.java
deleted file mode 100644
index cf07423..0000000
--- a/core/src/test/java/com/vergepay/core/exchange/shapeshift/ExchangeRateTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.vergepay.core.exchange.shapeshift;
-
-import com.vergepay.core.coins.BitcoinMain;
-import com.vergepay.core.coins.CoinType;
-import com.vergepay.core.coins.FiatValue;
-import com.vergepay.core.coins.VergeMain;
-import com.vergepay.core.exchange.shapeshift.data.ShapeShiftExchangeRate;
-import com.vergepay.core.util.ExchangeRateBase;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author John L. Jegutanis
- */
-public class ExchangeRateTest {
- final CoinType BTC = BitcoinMain.get();
- final CoinType XVG = VergeMain.get();
-
-
- @Test
- public void baseFee() {
- ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(BTC, XVG, "100", "0.01");
-
- assertEquals(BTC.value("1"), rate.value1);
- assertEquals(XVG.value("100"), rate.value2);
- assertEquals(XVG.value("0.01"), rate.minerFee);
-
- assertEquals(XVG.value("99.99"), rate.convert(BTC.oneCoin()));
- assertEquals(BTC.value("1"), rate.convert(XVG.value("99.99")));
-
- rate = new ShapeShiftExchangeRate(BTC.oneCoin(),
- XVG.value("1911057.69230769"), XVG.value("1"));
- assertEquals(BTC.value("1"), rate.value1);
- assertEquals(XVG.value("1911057.69230769"), rate.value2);
- assertEquals(XVG.value("1"), rate.minerFee);
- assertEquals(BTC.value("0.00052379"), rate.convert(XVG.value("1000")));
-
- rate = new ShapeShiftExchangeRate(BTC.oneCoin(),
- XVG.value("1878207.54716981"), XVG.value("1"));
- assertEquals(BTC.value("1"), rate.value1);
- assertEquals(XVG.value("1878207.54716981"), rate.value2);
- assertEquals(XVG.value("1"), rate.minerFee);
- assertEquals(BTC.value("0.00532476"), rate.convert(XVG.value("10000")));
- }
-
- @Test
- public void zeroValues() {
- ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(BTC, XVG, "100", "0.01");
- assertEquals(BTC.value("0"), rate.convert(XVG.value("0")));
- assertEquals(XVG.value("0"), rate.convert(BTC.value("0")));
- }
-
- @Test
- public void smallValues() {
- ShapeShiftExchangeRate rate = new ShapeShiftExchangeRate(XVG, BTC, "5.1e-7", "0.0001");
- assertEquals(BTC.value("0"), rate.convert(XVG.value("1")));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void zeroExchangeRate() throws Exception {
- new ShapeShiftExchangeRate(BTC, XVG, "0", "0.01");
- }
-}
\ No newline at end of file
diff --git a/core/src/test/java/com/vergepay/core/wallet/families/bitcoin/TransactionTest.java b/core/src/test/java/com/vergepay/core/wallet/families/bitcoin/TransactionTest.java
deleted file mode 100644
index e390aaa..0000000
--- a/core/src/test/java/com/vergepay/core/wallet/families/bitcoin/TransactionTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vergepay.core.wallet.families.bitcoin;
-
-import com.vergepay.core.coins.VergeMain;
-
-import org.bitcoinj.core.Transaction;
-import org.junit.Test;
-import org.spongycastle.util.encoders.Hex;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author John L. Jegutanis
- */
-public class TransactionTest {
- String vergeHash = "f1311469970c2a7bd1a0f69affe627222e7bae446dbafdbe90479706b75263ca";
- Transaction vergeTx = new Transaction(VergeMain.get(), Hex.decode("01000000896dc3550448d7832861e532b3fbd225017cb7ca9a20caf79b6f802255520b37415959570d030000006c493046022100871f5b7a75cc9732d4c1410787a7e07131c74410420efaf7e5f438f86a3933fa022100dff501634f5d3fd64075f685173830c5023824cbfc46ea013d29da78c7eda9d3012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffff8b015753b65cf8a5fa8af15aa955d2925d9138dde80ac07f94056a56331a7407010000006b483045022054030eb85636ddb9362505af46d334cd16c5df09245f9ad44d7d065ec7a4de420221009368aa9b145ec952dd5c2edd65a32210049328b8d57681e367da72bfc63e9029012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffffb7eb79dd9205847bb19571b544e96d3f479f1aebc7818b185c31b150b2157453010000006b48304502205c7b91f7057563c992ce2d1a56b7c7b61394f327ccd5e0d6ceafb6c42d70e330022100ba76acfb2b5e1592b03e9f32c4c0756d56e73f99a78766d12915effd0648f635012103bcce424f94449613ad54050739ed5a5f79bc97cb526c5e850f19e6fcf030f5d2ffffffff33c208bc6fe2c2c12c218617325849536c9adc24e673d25c24758d3dd96cbdef540000006c493046022100a03ff05c33b2ac34aff5a8dfb4b545d14cf53887d70ec48a9ae203038b9f228f022100f287e59fdd132b11c095ec105b9b7d4f9cd18cb2de26f9de32912d626dc870d50121038a64028ae8fe1801158a8f72f6f9e8757fe46c06fed4705424aa7a0cb50ce371ffffffff0162b31701000000001976a914181805d5c08a3f5cc0c0c1e6fd40304259dbaddc88ac00000000"));
-
- @Test
- public void vergeTxTest() {
- assertEquals(vergeHash, vergeTx.getHashAsString());
- }
-}
diff --git a/gradle.properties b/gradle.properties
index 7f5f271..f95d3e4 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -14,6 +14,7 @@
# org.gradle.configureondemand=true
# org.gradle.jvmargs=-Xms512m -Xmx2048m -XX:MaxPermSize=512m
#
+android.defaults.buildfeatures.buildconfig=true
android.nonFinalResIds=false
android.nonTransitiveRClass=false
org.gradle.jvmargs=-Xmx1920M \
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b9771be..da1db5f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Tue Jul 23 18:23:13 EDT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/wallet/build.gradle b/wallet/build.gradle
index 09bb893..1bdd3b1 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -1,8 +1,8 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 34
- buildToolsVersion '34.0.0'
+ compileSdkVersion 33
+ buildToolsVersion '33.0.0'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
@@ -12,12 +12,12 @@ android {
defaultConfig {
applicationId "com.vergepay.wallet"
- minSdk 34
- targetSdkVersion 34
- compileSdkVersion 34
+ minSdk 31
+ targetSdkVersion 33
+ compileSdkVersion 33
ndkVersion "21.3.6528147" //shouldn't matter but gradle complains
- versionCode 2060
- versionName "v2.6"
+ versionCode 20559
+ versionName "v2.59"
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -25,9 +25,11 @@ android {
buildTypes {
release {
+ minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
+ minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
@@ -38,6 +40,12 @@ android {
}
}
+ repositories {
+ flatDir {
+ dirs 'aars'
+ }
+ }
+
//sourceSets {
// unitTest {
// java.srcDir file('src/test/java')
@@ -53,15 +61,15 @@ android {
// androidTestCompile 'org.robolectric:robolectric:2.3'
// androidTestCompile 'com.squareup:fest-android:1.0.+'
implementation project(':core')
- implementation 'com.android.support:gridlayout-v7:28.0.0' //most recent as of 7/23/2024
- implementation 'com.android.support:support-v4:28.0.0' //most recent as of 7/23/2024
- implementation 'com.android.support:appcompat-v7:28.0.0' //most recent as of 7/23/2024
+ implementation 'com.android.support:gridlayout-v7:28.0.0'
+ implementation 'com.android.support:support-v4:28.0.0'
+ implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.guava:guava:21.0' //TODO ToStringHelper update for 19.0+
implementation 'com.google.code.findbugs:jsr305:3.0.2' // most recent as of 7/2023
implementation 'com.madgag.spongycastle:core:1.58.0.0' // most recent as of 7/2023
- implementation 'com.google.protobuf:protobuf-java:3.25.3' // most used as of 7/23/2024
- implementation 'com.google.zxing:core:3.5.3' //most recent as of 7/23/2024
- implementation 'ch.acra:acra:4.11.1' //most recent as of 7/23/2024
+ implementation 'com.google.protobuf:protobuf-java:3.24.3' //latest as of 10/2023
+ implementation 'com.google.zxing:core:3.5.2' //most recent as of 10/2023
+ implementation 'ch.acra:acra:4.11.1' //most recent as of 10/2023
implementation 'com.android.support:support-v4-preferencefragment:1.0.0@aar'
implementation 'com.jakewharton:butterknife:8.8.1' // ButterKnife.findById() is deprecated, needs FindByViewId() updates
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0'
diff --git a/wallet/support-v4-preferencefragment-1.0.0.aar b/wallet/support-v4-preferencefragment-1.0.0.aar
deleted file mode 100644
index 8b3474f..0000000
Binary files a/wallet/support-v4-preferencefragment-1.0.0.aar and /dev/null differ