Skip to content

Commit 4387a5b

Browse files
committed
Merge branch 'dev'
2 parents e0648f6 + e76c759 commit 4387a5b

File tree

8 files changed

+140
-40
lines changed

8 files changed

+140
-40
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ project build.gradle
2424
```groovy
2525
2626
ext {
27-
minterBlockchainSDK = "0.3.1"
27+
minterBlockchainSDK = "0.4.0"
2828
}
2929
3030
dependencies {

RELEASE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Release notes
22

3+
## 0.4.0
4+
- BREAKING:
5+
- Added Min/MaxValueToBuy to Sell/SellAll/Buy coin model and it's all required
6+
- Renamed some methods for more consistency
7+
38
## 0.3.1
49
- Added minter check creation support
510
- Updated core library

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ apply plugin: 'com.jfrog.bintray'
5858

5959

6060
group = 'network.minter.android'
61-
version = '0.3.1'
61+
version = '0.4.0'
6262

6363
ext {
6464
minterMinSdk = 16

src/main/java/network/minter/blockchain/models/operational/TxCoinBuy.java

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public TxCoinBuy[] newArray(int size) {
6363
private String mCoinToBuy;
6464
private BigInteger mValueToBuy;
6565
private String mCoinToSell;
66+
private BigInteger mMaxValueToSell;
6667

6768
public TxCoinBuy(Transaction rawTx) {
6869
super(rawTx);
@@ -73,6 +74,7 @@ protected TxCoinBuy(Parcel in) {
7374
mCoinToBuy = in.readString();
7475
mValueToBuy = (BigInteger) in.readValue(BigInteger.class.getClassLoader());
7576
mCoinToSell = in.readString();
77+
mMaxValueToSell = (BigInteger) in.readValue(BigInteger.class.getClassLoader());
7678
}
7779

7880
@Override
@@ -86,6 +88,7 @@ public void writeToParcel(Parcel dest, int flags) {
8688
dest.writeString(mCoinToBuy);
8789
dest.writeValue(mValueToBuy);
8890
dest.writeString(mCoinToSell);
91+
dest.writeValue(mMaxValueToSell);
8992
}
9093

9194
public String getCoinToBuy() {
@@ -106,22 +109,35 @@ public TxCoinBuy setCoinToSell(String coin) {
106109
return this;
107110
}
108111

109-
public BigInteger getValueBigInteger() {
112+
/**
113+
* Original value in bigint format
114+
* @return origin value
115+
*/
116+
public BigInteger getValueToBuyBigInteger() {
110117
return mValueToBuy;
111118
}
112119

120+
/**
121+
* Normalized original value in bigdecal format
122+
* @return bigdeciaml value
123+
*/
113124
public BigDecimal getValueToBuy() {
114125
return Transaction.VALUE_MUL_DEC.divide(new BigDecimal(mValueToBuy));
115126
}
116127

128+
/**
129+
* Use double value carefuly, only on a not a big numbers, otherwise number will be overflowed
130+
* @return double value
131+
*/
132+
public double getValueToBuyDouble() {
133+
return getValueToBuy().doubleValue();
134+
}
135+
117136
public TxCoinBuy setValueToBuy(BigInteger amount) {
118137
mValueToBuy = amount;
119138
return this;
120139
}
121140

122-
public double getValueToBuyDouble() {
123-
return getValueToBuy().doubleValue();
124-
}
125141

126142
public TxCoinBuy setValueToBuy(double amount) {
127143
return setValueToBuy(new BigDecimal(amount));
@@ -131,6 +147,19 @@ public TxCoinBuy setValueToBuy(BigDecimal amount) {
131147
return setValueToBuy(amount.multiply(Transaction.VALUE_MUL_DEC).toBigInteger());
132148
}
133149

150+
public TxCoinBuy setMaxValueToSell(double amount) {
151+
return setMaxValueToSell(new BigDecimal(amount));
152+
}
153+
154+
public TxCoinBuy setMaxValueToSell(BigInteger amount) {
155+
mMaxValueToSell = amount;
156+
return this;
157+
}
158+
159+
public TxCoinBuy setMaxValueToSell(BigDecimal amount) {
160+
return setMaxValueToSell(amount.multiply(Transaction.VALUE_MUL_DEC).toBigInteger());
161+
}
162+
134163
@Override
135164
public OperationType getType() {
136165
return OperationType.BuyCoin;
@@ -142,7 +171,8 @@ protected FieldsValidationResult validate() {
142171
return new FieldsValidationResult()
143172
.addResult("mCoinToBuy", mCoinToBuy != null && mCoinToBuy.length() > 2 && mCoinToBuy.length() < 11, "Coin length must be from 3 to 10 chars")
144173
.addResult("mCoinToSell", mCoinToSell != null && mCoinToSell.length() > 2 && mCoinToSell.length() < 11, "Coin length must be from 3 to 10 chars")
145-
.addResult("mValueToBuy", mValueToBuy != null, "Value must be set");
174+
.addResult("mValueToBuy", mValueToBuy != null, "Value must be set")
175+
.addResult("mMaxValueToSell", mMaxValueToSell != null, "Maximum value to sell must be set");
146176
}
147177

148178
@Nonnull
@@ -151,7 +181,8 @@ protected byte[] encodeRLP() {
151181
return RLP.encode(new Object[]{
152182
mCoinToBuy,
153183
mValueToBuy,
154-
mCoinToSell
184+
mCoinToSell,
185+
mMaxValueToSell
155186
});
156187
}
157188

@@ -163,5 +194,6 @@ protected void decodeRLP(@Nonnull byte[] rlpEncodedData) {
163194
mCoinToBuy = bytesToString(fromRawRlp(0, decoded));
164195
mValueToBuy = fixBigintSignedByte(fromRawRlp(1, decoded));
165196
mCoinToSell = bytesToString(fromRawRlp(2, decoded));
197+
mMaxValueToSell = fixBigintSignedByte(fromRawRlp(3, decoded));
166198
}
167199
}

src/main/java/network/minter/blockchain/models/operational/TxCoinSell.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public TxCoinSell[] newArray(int size) {
6363
private String mCoinToSell;
6464
private BigInteger mValueToSell;
6565
private String mCoinToBuy;
66+
private BigInteger mMinValueToBuy;
6667

6768
public TxCoinSell(Transaction rawTx) {
6869
super(rawTx);
@@ -73,6 +74,7 @@ protected TxCoinSell(Parcel in) {
7374
mCoinToSell = in.readString();
7475
mValueToSell = (BigInteger) in.readValue(BigInteger.class.getClassLoader());
7576
mCoinToBuy = in.readString();
77+
mMinValueToBuy = (BigInteger) in.readValue(BigInteger.class.getClassLoader());
7678
}
7779

7880
@Override
@@ -86,6 +88,7 @@ public void writeToParcel(Parcel dest, int flags) {
8688
dest.writeString(mCoinToSell);
8789
dest.writeValue(mValueToSell);
8890
dest.writeString(mCoinToBuy);
91+
dest.writeValue(mMinValueToBuy);
8992
}
9093

9194
public String getCoinToSell() {
@@ -106,22 +109,22 @@ public TxCoinSell setCoinToBuy(String coin) {
106109
return this;
107110
}
108111

109-
public BigInteger getValueBigInteger() {
112+
public BigInteger getValueToSellBigInteger() {
110113
return mValueToSell;
111114
}
112115

113116
public BigDecimal getValueToSell() {
114-
return Transaction.VALUE_MUL_DEC.divide(new BigDecimal(mValueToSell));
115-
}
116-
117-
public TxCoinSell setValueToSell(double amount) {
118-
return setValueToSell(new BigDecimal(amount));
117+
return new BigDecimal(mValueToSell).divide(Transaction.VALUE_MUL_DEC);
119118
}
120119

121120
public double getValueToSellDouble() {
122121
return getValueToSell().doubleValue();
123122
}
124123

124+
public TxCoinSell setValueToSell(double amount) {
125+
return setValueToSell(new BigDecimal(amount));
126+
}
127+
125128
public TxCoinSell setValueToSell(BigInteger amount) {
126129
mValueToSell = amount;
127130
return this;
@@ -131,6 +134,19 @@ public TxCoinSell setValueToSell(BigDecimal amount) {
131134
return setValueToSell(amount.multiply(Transaction.VALUE_MUL_DEC).toBigInteger());
132135
}
133136

137+
public TxCoinSell setMinValueToBuy(double amount) {
138+
return setMinValueToBuy(new BigDecimal(amount));
139+
}
140+
141+
public TxCoinSell setMinValueToBuy(BigInteger amount) {
142+
mMinValueToBuy = amount;
143+
return this;
144+
}
145+
146+
public TxCoinSell setMinValueToBuy(BigDecimal amount) {
147+
return setMinValueToBuy(amount.multiply(Transaction.VALUE_MUL_DEC).toBigInteger());
148+
}
149+
134150
@Override
135151
public OperationType getType() {
136152
return OperationType.SellCoin;
@@ -142,7 +158,8 @@ protected FieldsValidationResult validate() {
142158
return new FieldsValidationResult()
143159
.addResult("mCoinToBuy", mCoinToBuy != null && mCoinToBuy.length() > 2 && mCoinToBuy.length() < 11, "Coin length must be from 3 to 10 chars")
144160
.addResult("mCoinToSell", mCoinToSell != null && mCoinToSell.length() > 2 && mCoinToSell.length() < 11, "Coin length must be from 3 to 10 chars")
145-
.addResult("mValueToSell", mValueToSell != null, "Value must be set");
161+
.addResult("mValueToSell", mValueToSell != null, "Value must be set")
162+
.addResult("mMinValueToBuy", mMinValueToBuy != null, "Minimum value to buy must be set");
146163
}
147164

148165
@Nonnull
@@ -151,7 +168,8 @@ protected byte[] encodeRLP() {
151168
return RLP.encode(new Object[]{
152169
mCoinToSell,
153170
mValueToSell,
154-
mCoinToBuy
171+
mCoinToBuy,
172+
mMinValueToBuy
155173
});
156174
}
157175

@@ -163,5 +181,6 @@ protected void decodeRLP(@Nonnull byte[] rlpEncodedData) {
163181
mCoinToSell = bytesToString(fromRawRlp(0, decoded));
164182
mValueToSell = fixBigintSignedByte(fromRawRlp(1, decoded));
165183
mCoinToBuy = bytesToString(fromRawRlp(2, decoded));
184+
mMinValueToBuy = fixBigintSignedByte(fromRawRlp(3, decoded));
166185
}
167186
}

src/main/java/network/minter/blockchain/models/operational/TxCoinSellAll.java

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,21 @@
2929
import android.os.Parcel;
3030
import android.os.Parcelable;
3131

32+
import java.math.BigDecimal;
33+
import java.math.BigInteger;
34+
3235
import javax.annotation.Nonnull;
3336
import javax.annotation.Nullable;
3437

3538
import network.minter.core.internal.helpers.StringHelper;
3639
import network.minter.core.util.DecodeResult;
3740
import network.minter.core.util.RLP;
3841

42+
import static network.minter.core.internal.helpers.BytesHelper.fixBigintSignedByte;
3943
import static network.minter.core.internal.helpers.StringHelper.bytesToString;
4044

4145
/**
4246
* minter-android-blockchain. 2018
43-
*
4447
* @author Eduard Maximovich <edward.vstock@gmail.com>
4548
*/
4649
public final class TxCoinSellAll extends Operation {
@@ -58,6 +61,7 @@ public TxCoinSellAll[] newArray(int size) {
5861
};
5962
private String mCoinToSell;
6063
private String mCoinToBuy;
64+
private BigInteger mMinValueToBuy;
6165

6266
public TxCoinSellAll(Transaction rawTx) {
6367
super(rawTx);
@@ -67,13 +71,15 @@ protected TxCoinSellAll(Parcel in) {
6771
super(in);
6872
mCoinToSell = in.readString();
6973
mCoinToBuy = in.readString();
74+
mMinValueToBuy = (BigInteger) in.readValue(BigInteger.class.getClassLoader());
7075
}
7176

7277
@Override
7378
public void writeToParcel(Parcel dest, int flags) {
7479
super.writeToParcel(dest, flags);
7580
dest.writeString(mCoinToSell);
7681
dest.writeString(mCoinToBuy);
82+
dest.writeValue(mMinValueToBuy);
7783
}
7884

7985
public String getCoinToSell() {
@@ -94,6 +100,31 @@ public TxCoinSellAll setCoinToBuy(String coin) {
94100
return this;
95101
}
96102

103+
public TxCoinSellAll setMinValueToBuy(BigInteger amount) {
104+
mMinValueToBuy = amount;
105+
return this;
106+
}
107+
108+
public TxCoinSellAll setMinValueToBuy(BigDecimal amount) {
109+
return setMinValueToBuy(amount.multiply(Transaction.VALUE_MUL_DEC).toBigInteger());
110+
}
111+
112+
public BigInteger getMinValueToBuyBigInteger() {
113+
return mMinValueToBuy;
114+
}
115+
116+
public BigDecimal getMinValueToBuy() {
117+
return new BigDecimal(mMinValueToBuy).divide(Transaction.VALUE_MUL_DEC);
118+
}
119+
120+
public TxCoinSellAll setMinValueToBuy(double amount) {
121+
return setMinValueToBuy(new BigDecimal(amount));
122+
}
123+
124+
public double getMinValueToBuyDouble() {
125+
return getMinValueToBuy().doubleValue();
126+
}
127+
97128
@Override
98129
public OperationType getType() {
99130
return OperationType.SellAllCoins;
@@ -104,15 +135,17 @@ public OperationType getType() {
104135
protected FieldsValidationResult validate() {
105136
return new FieldsValidationResult()
106137
.addResult("mCoinToBuy", mCoinToBuy != null && mCoinToBuy.length() > 2 && mCoinToBuy.length() < 11, "Coin length must be from 3 to 10 chars")
107-
.addResult("mCoinToSell", mCoinToSell != null && mCoinToSell.length() > 2 && mCoinToSell.length() < 11, "Coin length must be from 3 to 10 chars");
138+
.addResult("mCoinToSell", mCoinToSell != null && mCoinToSell.length() > 2 && mCoinToSell.length() < 11, "Coin length must be from 3 to 10 chars")
139+
.addResult("mMinValueToBuy", mMinValueToBuy != null, "Minimum value to buy must be set");
108140
}
109141

110142
@Nonnull
111143
@Override
112144
protected byte[] encodeRLP() {
113145
return RLP.encode(new Object[]{
114146
mCoinToSell,
115-
mCoinToBuy
147+
mCoinToBuy,
148+
mMinValueToBuy
116149
});
117150
}
118151

@@ -123,5 +156,6 @@ protected void decodeRLP(@Nonnull byte[] rlpEncodedData) {
123156

124157
mCoinToSell = bytesToString(fromRawRlp(0, decoded));
125158
mCoinToBuy = bytesToString(fromRawRlp(1, decoded));
159+
mMinValueToBuy = fixBigintSignedByte(fromRawRlp(2, decoded));
126160
}
127161
}

src/test/java/network/minter/blockchain/TransactionBuyCoinTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,18 @@ public class TransactionBuyCoinTest {
5555
}
5656

5757
@Test
58-
public void testEncodeSignle() throws OperationInvalidDataException {
58+
public void testEncodeSingle() throws OperationInvalidDataException {
5959
final BigInteger nonce = new BigInteger("1");
60-
final String validTx = "f87401018a4d4e540000000000000004a0df8a4d4e5400000000000000880de0b6b3a76400008a5445535400000000000080801ba006ad0dc7da7253d2c4927c0fac643e53e82e5fcbf91aac70ff6075869d62cdf7a0180b8af5f54da22cdd9200068270d6ccc092d21c9769c12beb1d9b60a8d1be53";
61-
final PrivateKey privateKey = new PrivateKey("4c9a495b52aeaa839e53c3eb2f2d6650d892277bde58a24bb6a396f2bb31aa37");
60+
final String validTx = "f88401018a4d4e540000000000000004abea8a54455354000000000000880de0b6b3a76400008a4d4e54000000000000008a31000000000000000000808001b845f8431ba0c30019067fe6ede8d5dff8e6977ac19d02a34159ff6f9ac270879b1154ae738ba07038e90b2ba9d5a779a3eb41de5f55679b4b144f8e8ab03ac1d1ea7952531235";
61+
final PrivateKey privateKey = new PrivateKey("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142");
6262

6363
Transaction tx = new Transaction.Builder(nonce)
6464
.setGasCoin("MNT")
6565
.buyCoin()
66-
.setCoinToBuy("MNT")
67-
.setCoinToSell("TEST")
66+
.setCoinToBuy("TEST")
67+
.setCoinToSell("MNT")
6868
.setValueToBuy(1)
69+
.setMaxValueToSell(1)
6970
.build();
7071

7172
assertNotNull(tx);
@@ -78,7 +79,7 @@ public void testDecodeSingle() {
7879
// final BigInteger nonce = new BigInteger("1");
7980
// final String validTx = "f87401018a4d4e540000000000000004a0df8a4d4e5400000000000000880de0b6b3a76400008a5445535400000000000080801ba006ad0dc7da7253d2c4927c0fac643e53e82e5fcbf91aac70ff6075869d62cdf7a0180b8af5f54da22cdd9200068270d6ccc092d21c9769c12beb1d9b60a8d1be53";
8081
//
81-
// Transaction tx = Transaction.fromEncoded(validTx, TxCoinBuy.class);
82+
// Transaction tx = Transaction.fromEncoded(validTx);
8283
// assertNotNull(tx);
8384
//
8485
// assertEquals(nonce, tx.getNonce());

0 commit comments

Comments
 (0)