Skip to content
This repository was archived by the owner on Jun 7, 2023. It is now read-only.

Commit 08b8299

Browse files
authored
Merge pull request #49 from iotaledger/bugfix
Bugfix and bump to v0.9.6
2 parents d14c793 + f276f5f commit 08b8299

File tree

4 files changed

+54
-36
lines changed

4 files changed

+54
-36
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>org.iota</groupId>
66
<artifactId>jota</artifactId>
7-
<version>0.9.5-SNAPSHOT</version>
7+
<version>0.9.6-SNAPSHOT</version>
88
<name>JOTA</name>
99
<description>JOTA library is a simple Java wrapper around IOTA Node's JSON-REST HTTP interface.</description>
1010

src/main/java/jota/IotaAPIService.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public interface IotaAPIService {
1616

1717
String CONTENT_TYPE_HEADER = "Content-Type: application/json";
1818
String USER_AGENT_HEADER = "User-Agent: JOTA-API wrapper";
19+
String X_IOTA_API_VERSION_HEADER = "X-IOTA-API-Version: 1";
1920

2021
/**
2122
* Returns information about your node.
@@ -25,7 +26,7 @@ public interface IotaAPIService {
2526
*
2627
* @return a {@code NodeInfoResponse} object, if succesfull.
2728
*/
28-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
29+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
2930
@POST("./")
3031
Call<GetNodeInfoResponse> getNodeInfo(@Body IotaCommandRequest request);
3132

@@ -35,7 +36,7 @@ public interface IotaAPIService {
3536
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
3637
* -d '{"command": "getNeighbors"}'
3738
*/
38-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
39+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
3940
@POST("./")
4041
Call<GetNeighborsResponse> getNeighbors(@Body IotaCommandRequest request);
4142

@@ -45,7 +46,7 @@ public interface IotaAPIService {
4546
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
4647
* -d '{"command": "addNeighbors", "uris": ["udp://8.8.8.8:14265", "udp://8.8.8.5:14265"]}'
4748
*/
48-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
49+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
4950
@POST("./")
5051
Call<AddNeighborsResponse> addNeighbors(@Body IotaNeighborsRequest request);
5152

@@ -55,7 +56,7 @@ public interface IotaAPIService {
5556
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
5657
* -d '{"command": "removeNeighbors", "uris": ["udp://8.8.8.8:14265", "udp://8.8.8.5:14265"]}'
5758
*/
58-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
59+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
5960
@POST("./")
6061
Call<RemoveNeighborsResponse> removeNeighbors(@Body IotaNeighborsRequest request);
6162

@@ -65,7 +66,7 @@ public interface IotaAPIService {
6566
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
6667
* -d '{"command": "getTips"}'
6768
*/
68-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
69+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
6970
@POST("./")
7071
Call<GetTipsResponse> getTips(@Body IotaCommandRequest request);
7172

@@ -75,7 +76,7 @@ public interface IotaAPIService {
7576
* curl http://localhost:14265 \ -X POST \ -H 'Content-Type: application/json' \
7677
* -d '{"command": "findTransactions", "addresses": ["RVORZ9SIIP9RCYMREUIXXVPQIPHVCNPQ9HZWYKFWYWZRE9JQKG9REPKIASHUUECPSQO9JT9XNMVKWYGVAZETAIRPTM"]}'
7778
*/
78-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
79+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
7980
@POST("./")
8081
Call<FindTransactionResponse> findTransactions(@Body IotaFindTransactionsRequest request);
8182

@@ -86,7 +87,7 @@ public interface IotaAPIService {
8687
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
8788
* -d '{"command": "getInclusionStates", "transactions"Q9HZWYKFWYWZRE9JQKG9REPKIASHUUECPSQO9JT9XNMVKWYGVAZETAIRPTM"], "tips" : []}'
8889
*/
89-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
90+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
9091
@POST("./")
9192
Call<GetInclusionStateResponse> getInclusionStates(@Body IotaGetInclusionStateRequest request);
9293

@@ -96,7 +97,7 @@ public interface IotaAPIService {
9697
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
9798
* -d '{"command": "getTrytes", "hashes": ["OAATQS9VQLSXCLDJVJJVYUGONXAXOFMJOZNSYWRZSWECMXAQQURHQBJNLD9IOFEPGZEPEMPXCIVRX9999"]}'
9899
*/
99-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
100+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
100101
@POST("./")
101102
Call<GetTrytesResponse> getTrytes(@Body IotaGetTrytesRequest request);
102103

@@ -106,7 +107,7 @@ public interface IotaAPIService {
106107
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
107108
* -d '{"command": "getTransactionsToApprove", "depth": 27}'
108109
*/
109-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
110+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
110111
@POST("./")
111112
Call<GetTransactionsToApproveResponse> getTransactionsToApprove(@Body IotaGetTransactionsToApproveRequest request);
112113

@@ -116,7 +117,7 @@ public interface IotaAPIService {
116117
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
117118
* -d '{"command": "getBalances", "addresses": ["HBBYKAKTILIPVUKFOTSLHGENPTXYBNKXZFQFR9VQFWNBMTQNRVOUKPVPRNBSZVVILMAFBKOTBLGLWLOHQ"], "threshold": 100}'
118119
*/
119-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
120+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
120121
@POST("./")
121122
Call<GetBalancesResponse> getBalances(@Body IotaGetBalancesRequest request);
122123

@@ -126,7 +127,7 @@ public interface IotaAPIService {
126127
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
127128
* -d '{"command": "attachToTangle", "trunkTransaction": "JVMTDGDPDFYHMZPMWEKKANBQSLSDTIIHAYQUMZOKHXXXGJHJDQPOMDOMNRDKYCZRUFZROZDADTHZC9999", "branchTransaction": "P9KFSJVGSPLXAEBJSHWFZLGP9GGJTIO9YITDEHATDTGAFLPLBZ9FOFWWTKMAZXZHFGQHUOXLXUALY9999", "minWeightMagnitude": 18, "trytes": ["TRYTVALUEHERE"]}'
128129
*/
129-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
130+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
130131
@POST("./")
131132
Call<GetAttachToTangleResponse> attachToTangle(@Body IotaAttachToTangleRequest request);
132133

@@ -136,7 +137,7 @@ public interface IotaAPIService {
136137
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
137138
* -d '{"command": "interruptAttachingToTangle" }
138139
*/
139-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
140+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
140141
@POST("./")
141142
Call<InterruptAttachingToTangleResponse> interruptAttachingToTangle(@Body IotaCommandRequest request);
142143

@@ -146,7 +147,7 @@ public interface IotaAPIService {
146147
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
147148
* -d '{"command": "broadcastTransactions", "trytes": ["BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999"]}
148149
*/
149-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
150+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
150151
@POST("./")
151152
Call<BroadcastTransactionsResponse> broadcastTransactions(@Body IotaBroadcastTransactionRequest request);
152153

@@ -156,7 +157,7 @@ public interface IotaAPIService {
156157
* curl http://localhost:14265 -X POST -H 'Content-Type: application/json'
157158
* -d '{"command": "storeTransactions", "trytes": ["BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999"]}'
158159
*/
159-
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER})
160+
@Headers({CONTENT_TYPE_HEADER, USER_AGENT_HEADER, X_IOTA_API_VERSION_HEADER})
160161
@POST("./")
161162
Call<StoreTransactionsResponse> storeTransactions(@Body IotaStoreTransactionsRequest request);
162163
}

src/main/java/jota/model/Bundle.java

+28-9
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,17 @@ public void addEntry(int signatureMessageLength, String address, long value, Str
8989
* @param customCurl The custom curl.
9090
*/
9191
public void finalize(ICurl customCurl) {
92+
ICurl curl;
93+
int[] normalizedBundleValue;
94+
int[] hash = new int[243];
95+
int[] obsoleteTagTrits = new int[81];
96+
String hashInTrytes;
97+
boolean valid = true;
98+
curl = customCurl == null ? SpongeFactory.create(SpongeFactory.Mode.KERL) : customCurl;
99+
do {
100+
curl.reset();
92101

93-
ICurl curl = customCurl == null ? SpongeFactory.create(SpongeFactory.Mode.KERL) : customCurl;
94-
curl.reset();
95-
96-
for (int i = 0; i < this.getTransactions().size(); i++) {
102+
for (int i = 0; i < this.getTransactions().size(); i++) {
97103

98104
int[] valueTrits = Converter.trits(this.getTransactions().get(i).getValue(), 81);
99105

@@ -110,11 +116,24 @@ public void finalize(ICurl customCurl) {
110116
int[] t = Converter.trits(this.getTransactions().get(i).getAddress() + Converter.trytes(valueTrits) + this.getTransactions().get(i).getObsoleteTag() + Converter.trytes(timestampTrits) + Converter.trytes(currentIndexTrits) + Converter.trytes(lastIndexTrits));
111117

112118
curl.absorb(t, 0, t.length);
113-
}
119+
}
120+
121+
curl.squeeze(hash, 0, hash.length);
122+
hashInTrytes = Converter.trytes(hash);
123+
normalizedBundleValue = normalizedBundle(hashInTrytes);
124+
125+
boolean foundValue = false;
126+
for (int i = 0; i < normalizedBundleValue.length; i++) {
127+
if (normalizedBundleValue[i] == 13) {
128+
foundValue = true;
129+
obsoleteTagTrits = Converter.trits(this.getTransactions().get(0).getObsoleteTag());
130+
Converter.increment(obsoleteTagTrits, 81);
131+
this.getTransactions().get(0).setObsoleteTag(Converter.trytes(obsoleteTagTrits));
132+
}
133+
}
134+
valid = !foundValue;
114135

115-
int[] hash = new int[243];
116-
curl.squeeze(hash, 0, hash.length);
117-
String hashInTrytes = Converter.trytes(hash);
136+
} while (!valid);
118137

119138
for (int i = 0; i < this.getTransactions().size(); i++) {
120139
this.getTransactions().get(i).setBundle(hashInTrytes);
@@ -210,4 +229,4 @@ public int[] normalizedBundle(String bundleHash) {
210229
public int compareTo(Bundle o) {
211230
return Long.compare(this.getTransactions().get(0).getAttachmentTimestamp(), o.getTransactions().get(0).getAttachmentTimestamp());
212231
}
213-
}
232+
}

src/main/java/jota/utils/IotaAPIUtils.java

+10-12
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,19 @@ public static List<String> signInputsAndReturn(final String seed,
9696

9797
// Because the signature is > 2187 trytes, we need to
9898
// find the second transaction to add the remainder of the signature
99-
for (int k = 0; k < bundle.getTransactions().size(); k++) {
100-
// Same address as well as value = 0 (as we already spent the input)
101-
if (bundle.getTransactions().get(k).getAddress().equals(thisAddress) && bundle.getTransactions().get(k).getValue() == 0) {
102-
// Use the second 6562 trits
103-
int[] secondFragment = Arrays.copyOfRange(key, 6561, 6561 * 2);
99+
// Same address as well as value = 0 (as we already spent the input)
100+
if (bundle.getTransactions().get(i + j).getAddress().equals(thisAddress) && bundle.getTransactions().get(i + j).getValue() == 0) {
101+
// Use the second 6562 trits
102+
int[] secondFragment = Arrays.copyOfRange(key, 6561 * j, 6561 * (j + 1));
104103

105-
// The second 27 to 54 trytes of the bundle hash
106-
int[] secondBundleFragment = Arrays.copyOfRange(normalizedBundleHash, 27, 27 * 2);
104+
// The second 27 to 54 trytes of the bundle hash
105+
int[] secondBundleFragment = Arrays.copyOfRange(normalizedBundleHash, 27 * j, 27 * (j + 1));
107106

108-
// Calculate the new signature
109-
int[] secondSignedFragment = new Signing(curl).signatureFragment(secondBundleFragment, secondFragment);
107+
// Calculate the new signature
108+
int[] secondSignedFragment = new Signing(curl).signatureFragment(secondBundleFragment, secondFragment);
110109

111-
// Convert signature to trytes and assign it again to this bundle entry
112-
bundle.getTransactions().get(k).setSignatureFragments(Converter.trytes(secondSignedFragment));
113-
}
110+
// Convert signature to trytes and assign it again to this bundle entry
111+
bundle.getTransactions().get(i+j).setSignatureFragments(Converter.trytes(secondSignedFragment));
114112
}
115113
}
116114
}

0 commit comments

Comments
 (0)