restructured

This commit is contained in:
pinpong 2017-11-09 17:41:17 +01:00
parent 0ff9b4463c
commit 422ad402cd
26 changed files with 329 additions and 409 deletions

View File

@ -1,7 +1,7 @@
package jota;
import jota.dto.response.*;
import jota.error.*;
import jota.error.ArgumentException;
import jota.model.*;
import jota.pow.ICurl;
import jota.pow.SpongeFactory;
@ -46,10 +46,9 @@ public class IotaAPI extends IotaAPICore {
* @param total Total number of addresses to generate.
* @param returnAll If <code>true</code>, it returns all addresses which were deterministically generated (until findTransactions returns null).
* @return An array of strings with the specifed number of addresses.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public GetNewAddressResponse getNewAddress(final String seed, int security, final int index, final boolean checksum, final int total, final boolean returnAll) throws InvalidSecurityLevelException, InvalidAddressException {
public GetNewAddressResponse getNewAddress(final String seed, int security, final int index, final boolean checksum, final int total, final boolean returnAll) throws ArgumentException, ArgumentException {
StopWatch stopWatch = new StopWatch();
@ -94,15 +93,9 @@ public class IotaAPI extends IotaAPICore {
* @param end Ending key index.
* @param inclusionStates If <code>true</code>, it gets the inclusion states of the transfers.
* @return Bundle of transfers.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws InvalidSignatureException is thrown when an invalid signature is encountered.
* @throws NoNodeInfoException is thrown when its not possible to get node info.
* @throws NoInclusionStatesException when it not possible to get a inclusion state.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public GetTransferResponse getTransfers(String seed, int security, Integer start, Integer end, Boolean inclusionStates) throws ArgumentException, InvalidBundleException, InvalidSignatureException, NoNodeInfoException, NoInclusionStatesException, InvalidSecurityLevelException, InvalidAddressException {
public GetTransferResponse getTransfers(String seed, int security, Integer start, Integer end, Boolean inclusionStates) throws ArgumentException {
// validate seed
if ((!InputValidator.isValidSeed(seed))) {
@ -129,15 +122,11 @@ public class IotaAPI extends IotaAPICore {
* @param addresses List of addresses.
* @param inclusionStates If <code>true</code>, it gets the inclusion states of the transfers.
* @return A Transaction objects.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws InvalidSignatureException is thrown when an invalid signature is encountered.
* @throws NoNodeInfoException is thrown when its not possible to get node info.
* @throws NoInclusionStatesException when it not possible to get a inclusion state.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public Bundle[] bundlesFromAddresses(String[] addresses, final Boolean inclusionStates) throws ArgumentException, InvalidBundleException, InvalidSignatureException, NoNodeInfoException, NoInclusionStatesException {
public Bundle[] bundlesFromAddresses(String[] addresses, final Boolean inclusionStates) throws ArgumentException {
List<Transaction> trxs = findTransactionObjects(addresses);
List<Transaction> trxs = findTransactionObjectsByAddresses(addresses);
// set of tail transactions
List<String> tailTransactions = new ArrayList<>();
List<String> nonTailBundleHashes = new ArrayList<>();
@ -170,13 +159,9 @@ public class IotaAPI extends IotaAPICore {
// of the tail transactions, and thus the bundles
GetInclusionStateResponse gisr = null;
if (tailTxArray.length != 0 && inclusionStates) {
try {
gisr = getLatestInclusion(tailTxArray);
} catch (IllegalAccessError ignored) {
throw new NoInclusionStatesException();
}
if (gisr == null || gisr.getStates() == null || gisr.getStates().length == 0) {
throw new NoInclusionStatesException();
throw new IllegalStateException("No inclusion states for transaction");
}
}
final GetInclusionStateResponse finalInclusionStates = gisr;
@ -200,7 +185,7 @@ public class IotaAPI extends IotaAPICore {
finalBundles.add(gbr);
}
// If error returned from getBundle, simply ignore it because the bundle was most likely incorrect
} catch (InvalidBundleException | ArgumentException | InvalidSignatureException e) {
} catch (ArgumentException e) {
log.warn("GetBundleError: ", e);
}
}
@ -219,15 +204,18 @@ public class IotaAPI extends IotaAPICore {
*
* @param trytes The trytes.
* @return A StoreTransactionsResponse.
* @throws BroadcastAndStoreException is thrown if its not possible to broadcast and store.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public StoreTransactionsResponse broadcastAndStore(final String... trytes) throws BroadcastAndStoreException {
public StoreTransactionsResponse broadcastAndStore(final String... trytes) throws ArgumentException {
if (!InputValidator.isArrayOfAttachedTrytes(trytes)) {
throw new ArgumentException("Invalid trytes provided");
}
try {
broadcastTransactions(trytes);
} catch (Exception e) {
log.error("Impossible to broadcastAndStore, aborting.", e);
throw new BroadcastAndStoreException();
throw new ArgumentException(e.toString());
}
return storeTransactions(trytes);
}
@ -239,9 +227,9 @@ public class IotaAPI extends IotaAPICore {
* @param depth The depth.
* @param minWeightMagnitude The minimum weight magnitude.
* @return Transactions objects.
* @throws InvalidTrytesException is thrown when invalid trytes is provided.
* @throws ArgumentException is thrown when invalid trytes is provided.
*/
public List<Transaction> sendTrytes(final String[] trytes, final int depth, final int minWeightMagnitude) throws InvalidTrytesException {
public List<Transaction> sendTrytes(final String[] trytes, final int depth, final int minWeightMagnitude) throws ArgumentException {
final GetTransactionsToApproveResponse txs = getTransactionsToApprove(depth);
// attach to tangle - do pow
@ -249,7 +237,7 @@ public class IotaAPI extends IotaAPICore {
try {
broadcastAndStore(res.getTrytes());
} catch (BroadcastAndStoreException e) {
} catch (ArgumentException e) {
return new ArrayList<>();
}
@ -268,7 +256,7 @@ public class IotaAPI extends IotaAPICore {
* @param hashes The hashes
* @return Transaction objects.
**/
public List<Transaction> getTransactionsObjects(String[] hashes) {
public List<Transaction> findTransactionsObjectsByHashes(String[] hashes) throws ArgumentException {
if (!InputValidator.isArrayOfHashes(hashes)) {
throw new IllegalStateException("Not an Array of Hashes: " + Arrays.toString(hashes));
@ -286,34 +274,71 @@ public class IotaAPI extends IotaAPICore {
/**
* Wrapper function for findTransactions, getTrytes and transactionObjects.
* Returns the transactionObject of a transaction hash. The input can be a valid findTransactions input.
* Returns the transactionObject of a transaction hash. The input can be a list of valid addresses.
*
* @param input The inputs.
* @param addresses The addresses.
* @return Transactions.
**/
public List<Transaction> findTransactionObjects(String[] input) {
FindTransactionResponse ftr = findTransactions(input, null, null, null);
public List<Transaction> findTransactionObjectsByAddresses(String[] addresses) throws ArgumentException {
List<String> addressesWithoutChecksum = new ArrayList<>();
for (String address : addresses) {
String addressO = Checksum.removeChecksum(address);
addressesWithoutChecksum.add(addressO);
}
FindTransactionResponse ftr = findTransactions(addressesWithoutChecksum.toArray(new String[]{}), null, null, null);
if (ftr == null || ftr.getHashes() == null)
return new ArrayList<>();
// get the transaction objects of the transactions
return getTransactionsObjects(ftr.getHashes());
return findTransactionsObjectsByHashes(ftr.getHashes());
}
/**
* Wrapper function for findTransactions, getTrytes and transactionObjects.
* Returns the transactionObject of a transaction hash. The input can be a valid.
* findTransactions input
* Returns the transactionObject of a transaction hash. The input can be a list of valid tags.
*
* @param input The inputs.
* @param tags The tags.
* @return Transactions.
**/
public List<Transaction> findTransactionObjectsByBundle(String[] input) {
FindTransactionResponse ftr = findTransactions(null, null, null, input);
public List<Transaction> findTransactionObjectsByTag(String[] tags) throws ArgumentException {
FindTransactionResponse ftr = findTransactions(null, tags, null, null);
if (ftr == null || ftr.getHashes() == null)
return new ArrayList<>();
// get the transaction objects of the transactions
return findTransactionsObjectsByHashes(ftr.getHashes());
}
/**
* Wrapper function for findTransactions, getTrytes and transactionObjects.
* Returns the transactionObject of a transaction hash. The input can be a list of valid approvees.
*
* @param approvees The approvees.
* @return Transactions.
**/
public List<Transaction> findTransactionObjectsByApprovees(String[] approvees) throws ArgumentException {
FindTransactionResponse ftr = findTransactions(null, null, approvees, null);
if (ftr == null || ftr.getHashes() == null)
return new ArrayList<>();
// get the transaction objects of the transactions
return findTransactionsObjectsByHashes(ftr.getHashes());
}
/**
* Wrapper function for findTransactions, getTrytes and transactionObjects.
* Returns the transactionObject of a transaction hash. The input can be a list of valid bundles.
* findTransactions input
*
* @param bundles The bundles.
* @return Transactions.
**/
public List<Transaction> findTransactionObjectsByBundle(String[] bundles) throws ArgumentException {
FindTransactionResponse ftr = findTransactions(null, null, null, bundles);
if (ftr == null || ftr.getHashes() == null)
return new ArrayList<>();
// get the transaction objects of the transactions
return getTransactionsObjects(ftr.getHashes());
return findTransactionsObjectsByHashes(ftr.getHashes());
}
/**
@ -326,12 +351,9 @@ public class IotaAPI extends IotaAPICore {
* @param inputs The inputs.
* @param validateInputs whether or not to validate the balances of the provided inputs
* @return Returns bundle trytes.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws NotEnoughBalanceException is thrown when a transfer fails because their is not enough balance to perform the transfer.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws InvalidTransferException is thrown when an invalid transfer is provided.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public List<String> prepareTransfers(String seed, int security, final List<Transfer> transfers, String remainder, List<Input> inputs, boolean validateInputs) throws NotEnoughBalanceException, InvalidSecurityLevelException, InvalidAddressException, InvalidTransferException {
public List<String> prepareTransfers(String seed, int security, final List<Transfer> transfers, String remainder, List<Input> inputs, boolean validateInputs) throws ArgumentException {
// validate seed
if ((!InputValidator.isValidSeed(seed))) {
@ -339,12 +361,12 @@ public class IotaAPI extends IotaAPICore {
}
if (security < 1) {
throw new InvalidSecurityLevelException();
throw new ArgumentException("Invalid security level provided");
}
// Input validation of transfers object
if (!InputValidator.isTransfersCollectionValid(transfers)) {
throw new InvalidTransferException();
throw new ArgumentException("Invalid transfers provided");
}
// Create a new bundle
@ -494,10 +516,9 @@ public class IotaAPI extends IotaAPICore {
* @param start Starting key index.
* @param end Ending key index.
* @param threshold Min balance required.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified input is not valid.
**/
public GetBalancesAndFormatResponse getInputs(String seed, int security, int start, int end, long threshold) throws InvalidSecurityLevelException, InvalidAddressException {
public GetBalancesAndFormatResponse getInputs(String seed, int security, int start, int end, long threshold) throws ArgumentException, ArgumentException {
// validate the seed
if ((!InputValidator.isValidSeed(seed))) {
@ -505,7 +526,7 @@ public class IotaAPI extends IotaAPICore {
}
if (security < 1) {
throw new InvalidSecurityLevelException();
throw new ArgumentException("Invalid security level provided");
}
// If start value bigger than end, return error
@ -552,12 +573,12 @@ public class IotaAPI extends IotaAPICore {
* @param stopWatch the stopwatch.
* @param security The security level of private key / seed.
* @return Inputs object.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified security level is not valid.
**/
public GetBalancesAndFormatResponse getBalanceAndFormat(final List<String> addresses, long threshold, int start, StopWatch stopWatch, int security) throws InvalidSecurityLevelException {
public GetBalancesAndFormatResponse getBalanceAndFormat(final List<String> addresses, long threshold, int start, StopWatch stopWatch, int security) throws ArgumentException, IllegalStateException {
if (security < 1) {
throw new InvalidSecurityLevelException();
throw new ArgumentException("Invalid security level provided");
}
GetBalancesResponse getBalancesResponse = getBalances(100, addresses);
@ -601,11 +622,13 @@ public class IotaAPI extends IotaAPICore {
*
* @param transaction The transaction encoded in trytes.
* @return an array of bundle, if there are multiple arrays it means that there are conflicting bundles.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws InvalidSignatureException is thrown when an invalid signature is encountered.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public GetBundleResponse getBundle(String transaction) throws ArgumentException, InvalidBundleException, InvalidSignatureException {
public GetBundleResponse getBundle(String transaction) throws ArgumentException {
if (!InputValidator.isHash(transaction)) {
throw new ArgumentException("Invalid hash provided");
}
Bundle bundle = traverseBundle(transaction, null, new Bundle());
if (bundle == null) {
@ -657,17 +680,18 @@ public class IotaAPI extends IotaAPICore {
}
// Check for total sum, if not equal 0 return error
if (totalSum != 0) throw new InvalidBundleException("Invalid Bundle Sum");
if (totalSum != 0) throw new ArgumentException("Invalid Bundle Sum");
int[] bundleFromTrxs = new int[243];
curl.squeeze(bundleFromTrxs);
String bundleFromTxString = Converter.trytes(bundleFromTrxs);
// Check if bundle hash is the same as returned by tx object
if (!bundleFromTxString.equals(bundleHash)) throw new InvalidBundleException("Invalid Bundle Hash");
if (!bundleFromTxString.equals(bundleHash))
throw new ArgumentException("Invalid Bundle Hash");
// Last tx in the bundle should have currentIndex === lastIndex
bundle.setLength(bundle.getTransactions().size());
if (!(bundle.getTransactions().get(bundle.getLength() - 1).getCurrentIndex() == (bundle.getTransactions().get(bundle.getLength() - 1).getLastIndex())))
throw new InvalidBundleException("Invalid Bundle");
throw new ArgumentException("Invalid Bundle");
// Validate the signatures
for (Signature aSignaturesToValidate : signaturesToValidate) {
@ -675,7 +699,7 @@ public class IotaAPI extends IotaAPICore {
String address = aSignaturesToValidate.getAddress();
boolean isValidSignature = new Signing(customCurl.clone()).validateSignatures(address, signatureFragments, bundleHash);
if (!isValidSignature) throw new InvalidSignatureException();
if (!isValidSignature) throw new ArgumentException("Invalid Signatures!");
}
return GetBundleResponse.create(bundle.getTransactions(), stopWatch.getElapsedTimeMili());
@ -694,18 +718,9 @@ public class IotaAPI extends IotaAPICore {
* @param end Ending key index.
* @param inclusionStates If <code>true</code>, it gets the inclusion states of the transfers.
* @param threshold Min balance required.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws InvalidSignatureException is thrown when an invalid signature is encountered.
* @throws InvalidTrytesException is thrown when invalid trytes is provided.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws NoInclusionStatesException is thrown when it not possible to get a inclusion state.
* @throws NoNodeInfoException is thrown when its not possible to get node info.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public GetAccountDataResponse getAccountData(String seed, int security, int index, boolean checksum, int total, boolean returnAll, int start, int end, boolean inclusionStates, long threshold)
throws InvalidBundleException, ArgumentException, InvalidSignatureException,
InvalidTrytesException, InvalidSecurityLevelException, InvalidAddressException, NoInclusionStatesException, NoNodeInfoException {
public GetAccountDataResponse getAccountData(String seed, int security, int index, boolean checksum, int total, boolean returnAll, int start, int end, boolean inclusionStates, long threshold) throws ArgumentException {
if (start > end || end > (start + 1000)) {
throw new ArgumentException("Invalid inputs provided");
@ -727,11 +742,14 @@ public class IotaAPI extends IotaAPICore {
* @param depth The depth.
* @param minWeightMagnitude The minimum weight magnitude.
* @return Analyzed Transaction objects.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws InvalidSignatureException is thrown when an invalid signature is encountered.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public ReplayBundleResponse replayBundle(String transaction, int depth, int minWeightMagnitude) throws InvalidBundleException, ArgumentException, InvalidSignatureException, InvalidTrytesException {
public ReplayBundleResponse replayBundle(String transaction, int depth, int minWeightMagnitude) throws ArgumentException {
if (!InputValidator.isHash(transaction)) {
throw new ArgumentException("Invalid tail hash provided");
}
StopWatch stopWatch = new StopWatch();
List<String> bundleTrytes = new ArrayList<>();
@ -764,11 +782,9 @@ public class IotaAPI extends IotaAPICore {
*
* @param hashes The hashes.
* @return Inclusion state.
* @throws NoNodeInfoException is thrown when its not possible to get node info.
*/
public GetInclusionStateResponse getLatestInclusion(String[] hashes) throws NoNodeInfoException {
public GetInclusionStateResponse getLatestInclusion(String[] hashes) throws ArgumentException {
GetNodeInfoResponse getNodeInfoResponse = getNodeInfo();
if (getNodeInfoResponse == null) throw new NoNodeInfoException();
String[] latestMilestone = {getNodeInfoResponse.getLatestSolidSubtangleMilestone()};
@ -787,14 +803,9 @@ public class IotaAPI extends IotaAPICore {
* @param remainderAddress If defined, this remainderAddress will be used for sending the remainder value (of the inputs) to.
* @param validateInputs Whether or not to validate the balances of the provided inputs
* @return Array of valid Transaction objects.
* @throws InvalidAddressException is thrown when the specified remainderAddress is not an valid remainderAddress.
* @throws NotEnoughBalanceException is thrown when a transfer fails because their is not enough balance to perform the transfer.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws InvalidTrytesException is thrown when invalid trytes is provided.
* @throws InvalidAddressException is thrown when the specified remainderAddress is not an valid remainderAddress.
* @throws InvalidTransferException is thrown when an invalid transfer is provided.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public SendTransferResponse sendTransfer(String seed, int security, int depth, int minWeightMagnitude, final List<Transfer> transfers, List<Input> inputs, String remainderAddress, boolean validateInputs) throws NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public SendTransferResponse sendTransfer(String seed, int security, int depth, int minWeightMagnitude, final List<Transfer> transfers, List<Input> inputs, String remainderAddress, boolean validateInputs) throws ArgumentException {
StopWatch stopWatch = new StopWatch();
@ -820,7 +831,7 @@ public class IotaAPI extends IotaAPICore {
* @param bundleHash The bundle hashes.
* @param bundle List of bundles to be populated.
* @return Transaction objects.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws ArgumentException is thrown when an invalid input is provided.
*/
public Bundle traverseBundle(String trunkTx, String bundleHash, Bundle bundle) throws ArgumentException {
GetTrytesResponse gtr = getTrytes(trunkTx);
@ -872,24 +883,24 @@ public class IotaAPI extends IotaAPICore {
* @param inputAddress Array of input addresses as well as the securitySum.
* @param remainderAddress Has to be generated by the cosigners before initiating the transfer, can be null if fully spent.
* @return Bundle of transaction objects.
* @throws InvalidBundleException is thrown if an invalid bundle was found or provided.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws IllegalStateException is thrown when a transfer fails because their is not enough balance to perform the transfer.
*/
public List<Transaction> initiateTransfer(int securitySum, final String inputAddress, String remainderAddress,
final List<Transfer> transfers, boolean testMode) throws InvalidAddressException, InvalidBundleException, InvalidTransferException {
final List<Transfer> transfers, boolean testMode) throws ArgumentException {
// validate input address
if (!InputValidator.isAddress(inputAddress))
throw new InvalidAddressException();
throw new ArgumentException("Invalid addresses provided");
// validate remainder address
if (remainderAddress != null && !InputValidator.isAddress(remainderAddress)) {
throw new InvalidBundleException();
throw new ArgumentException("Invalid remainder addresses provided");
}
// Input validation of transfers object
if (!InputValidator.isTransfersCollectionValid(transfers)) {
throw new InvalidTransferException();
throw new ArgumentException("Invalid transfers provided");
}
// Create a new bundle
@ -964,7 +975,7 @@ public class IotaAPI extends IotaAPICore {
// Get inputs if we are sending tokens
if (totalValue != 0) {
GetBalancesResponse balancesResponse = getBalances(100, new String[]{inputAddress});
GetBalancesResponse balancesResponse = getBalances(100, Collections.singletonList(inputAddress));
String[] balances = balancesResponse.getBalances();
long totalBalance = 0;
@ -1028,9 +1039,8 @@ public class IotaAPI extends IotaAPICore {
* @param totalValue The total value.
* @param remainderAddress If defined, this address will be used for sending the remainder value (of the inputs) to.
* @param signatureFragments The signature fragments.
* @throws NotEnoughBalanceException is thrown when a transfer fails because their is not enough balance to perform the transfer.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when an invalid argument is provided.
* @throws IllegalStateException is thrown when a transfer fails because their is not enough balance to perform the transfer.
*/
public List<String> addRemainder(final String seed,
final int security,
@ -1039,7 +1049,7 @@ public class IotaAPI extends IotaAPICore {
final String tag,
final long totalValue,
final String remainderAddress,
final List<String> signatureFragments) throws NotEnoughBalanceException, InvalidSecurityLevelException, InvalidAddressException {
final List<String> signatureFragments) throws ArgumentException {
long totalTransferValue = totalValue;
for (int i = 0; i < inputs.size(); i++) {
@ -1083,7 +1093,7 @@ public class IotaAPI extends IotaAPICore {
totalTransferValue -= thisBalance;
}
}
throw new NotEnoughBalanceException();
throw new IllegalStateException("Not enough balance");
}
public static class Builder extends IotaAPICore.Builder<Builder> {

View File

@ -2,9 +2,9 @@ package jota;
import jota.dto.request.*;
import jota.dto.response.*;
import jota.error.InvalidApiVersionException;
import jota.error.InvalidTrytesException;
import jota.error.ArgumentException;
import jota.model.Transaction;
import jota.utils.Checksum;
import jota.utils.InputValidator;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
@ -19,6 +19,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
@ -57,20 +58,23 @@ public class IotaAPICore {
try {
final Response<T> res = call.execute();
String error = "";
if (res.errorBody() != null) {
error = res.errorBody().string();
}
if (res.code() == 400) {
if (res.errorBody().string().contains("Invalid API Version")) {
try {
throw new InvalidApiVersionException();
} catch (InvalidApiVersionException e) {
e.printStackTrace();
}
} else {
throw new IllegalAccessError("400 " + res.errorBody().string());
try {
throw new ArgumentException(error);
} catch (ArgumentException e) {
e.printStackTrace();
}
} else if (res.code() == 401) {
throw new IllegalAccessError("401 " + res.errorBody().string());
throw new IllegalAccessError("401 " + error);
} else if (res.code() == 500) {
throw new IllegalAccessError("500 " + res.errorBody().string());
throw new IllegalAccessError("500 " + error);
}
return res;
} catch (IOException e) {
@ -203,8 +207,15 @@ public class IotaAPICore {
* @param addresses A List of addresses.
* @return The transaction hashes which are returned depend on the input.
*/
public FindTransactionResponse findTransactionsByAddresses(final String... addresses) {
return findTransactions(addresses, null, null, null);
public FindTransactionResponse findTransactionsByAddresses(final String... addresses) throws ArgumentException {
List<String> addressesWithoutChecksum = new ArrayList<>();
for (String address : addresses) {
String addressO = Checksum.removeChecksum(address);
addressesWithoutChecksum.add(addressO);
}
return findTransactions(addressesWithoutChecksum.toArray(new String[addressesWithoutChecksum.size()]), null, null, null);
}
/**
@ -247,7 +258,17 @@ public class IotaAPICore {
* @param tips ThelList of tips (including milestones) you want to search for the inclusion state.
* @return The inclusion states of a set of transactions.
*/
public GetInclusionStateResponse getInclusionStates(String[] transactions, String[] tips) {
public GetInclusionStateResponse getInclusionStates(String[] transactions, String[] tips) throws ArgumentException {
if (!InputValidator.isArrayOfHashes(transactions)) {
throw new ArgumentException("Invalid hash provided");
}
if (!InputValidator.isArrayOfHashes(tips)) {
throw new ArgumentException("Invalid hash provided");
}
final Call<GetInclusionStateResponse> res = service.getInclusionStates(IotaGetInclusionStateRequest
.createGetInclusionStateRequest(transactions, tips));
return wrapCheckedException(res).body();
@ -259,12 +280,16 @@ public class IotaAPICore {
* @param hashes The of transaction hashes of which you want to get trytes from.
* @return The the raw transaction data (trytes) of a specific transaction.
*/
public GetTrytesResponse getTrytes(String... hashes) {
public GetTrytesResponse getTrytes(String... hashes) throws ArgumentException {
if (!InputValidator.isArrayOfHashes(hashes)) {
throw new ArgumentException("Invalid hash provided");
}
final Call<GetTrytesResponse> res = service.getTrytes(IotaGetTrytesRequest.createGetTrytesRequest(hashes));
return wrapCheckedException(res).body();
}
/**
* Tip selection which returns trunkTransaction and branchTransaction. The input value is the latest coordinator milestone, as provided through the getNodeInfo API call.
*
@ -283,7 +308,7 @@ public class IotaAPICore {
* @param addresses The array list of addresses you want to get the confirmed balance from.
* @return The confirmed balance which a list of addresses have at the latest confirmed milestone.
*/
public GetBalancesResponse getBalances(Integer threshold, String[] addresses) {
private GetBalancesResponse getBalances(Integer threshold, String[] addresses) {
final Call<GetBalancesResponse> res = service.getBalances(IotaGetBalancesRequest.createIotaGetBalancesRequest(threshold, addresses));
return wrapCheckedException(res).body();
}
@ -295,8 +320,15 @@ public class IotaAPICore {
* @param addresses The list of addresses you want to get the confirmed balance from.
* @return The confirmed balance which a list of addresses have at the latest confirmed milestone.
*/
public GetBalancesResponse getBalances(Integer threshold, List<String> addresses) {
return getBalances(threshold, addresses.toArray(new String[]{}));
public GetBalancesResponse getBalances(Integer threshold, List<String> addresses) throws ArgumentException {
List<String> addressesWithoutChecksum = new ArrayList<>();
for (String address : addresses) {
String addressO = Checksum.removeChecksum(address);
addressesWithoutChecksum.add(addressO);
}
return getBalances(threshold, addressesWithoutChecksum.toArray(new String[]{}));
}
/**
@ -307,9 +339,18 @@ public class IotaAPICore {
* @param minWeightMagnitude The Proof of Work intensity.
* @param trytes A List of trytes (raw transaction data) to attach to the tangle.
*/
public GetAttachToTangleResponse attachToTangle(String trunkTransaction, String branchTransaction, Integer minWeightMagnitude, String... trytes) throws InvalidTrytesException {
public GetAttachToTangleResponse attachToTangle(String trunkTransaction, String branchTransaction, Integer minWeightMagnitude, String... trytes) throws ArgumentException {
if (!InputValidator.isHash(trunkTransaction)) {
throw new ArgumentException("Invalid hash provided");
}
if (!InputValidator.isHash(branchTransaction)) {
throw new ArgumentException("Invalid hash provided");
}
if (!InputValidator.isArrayOfTrytes(trytes)) {
throw new InvalidTrytesException();
throw new ArgumentException("Invalid trytes provided");
}
if (localPoW != null) {
@ -347,7 +388,12 @@ public class IotaAPICore {
*
* @param trytes The list of raw data of transactions to be rebroadcast.
*/
public BroadcastTransactionsResponse broadcastTransactions(String... trytes) {
public BroadcastTransactionsResponse broadcastTransactions(String... trytes) throws ArgumentException {
if (!InputValidator.isArrayOfAttachedTrytes(trytes)) {
throw new ArgumentException("Invalid trytes provided");
}
final Call<BroadcastTransactionsResponse> res = service.broadcastTransactions(IotaBroadcastTransactionRequest.createBroadcastTransactionsRequest(trytes));
return wrapCheckedException(res).body();
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exceptions occurs if its not possible to broadcast and store.
*
* @author Adrian
*/
public class BroadcastAndStoreException extends BaseException {
/**
* Initializes a new instance of the BroadcastAndStoreException.
*/
public BroadcastAndStoreException() {
super("Impossible to broadcastAndStore, aborting.");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when an invalid address is provided.
*
* @author Adrian
*/
public class InvalidAddressException extends BaseException {
/**
* Initializes a new instance of the InvalidAddressException.
*/
public InvalidAddressException() {
super("Invalid Address!");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when invalid api version is provided.
*
* @author pinpong
*/
public class InvalidApiVersionException extends BaseException {
/**
* Initializes a new instance of the InvalidApiVersionException.
*/
public InvalidApiVersionException() {
super("Invalid api version");
}
}

View File

@ -1,23 +0,0 @@
package jota.error;
/**
* This exceptions occurs if an invalid bundle was found or provided.
*
* @author Adrian
*/
public class InvalidBundleException extends BaseException {
/**
* Initializes a new instance of the InvalidBundleException.
*/
public InvalidBundleException() {
super("Invalid Bundle");
}
/**
* Initializes a new instance of the InvalidBundleException.
*/
public InvalidBundleException(String msg) {
super(msg);
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when an invalid security level is provided.
*
* @author pinpong
*/
public class InvalidSecurityLevelException extends BaseException {
/**
* Initializes a new instance of the InvalidSecurityLevelException.
*/
public InvalidSecurityLevelException() {
super("Invalid security level");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when an invalid signature is encountered.
*
* @author Adrian
*/
public class InvalidSignatureException extends BaseException {
/**
* Initializes a new instance of the InvalidSignatureException.
*/
public InvalidSignatureException() {
super("Invalid Signatures!");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when an invalid transfer is provided.
*
* @author pinpong
*/
public class InvalidTransferException extends BaseException {
/**
* Initializes a new instance of the InvalidTransferException.
*/
public InvalidTransferException() {
super("Invalid Transfer!");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when invalid trytes is provided.
*
* @author Adrian
*/
public class InvalidTrytesException extends BaseException {
/**
* Initializes a new instance of the InvalidTrytesException.
*/
public InvalidTrytesException() {
super("Invalid input trytes");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when it not possible to get a inclusion state.
*
* @author Adrian
*/
public class NoInclusionStatesException extends BaseException {
/**
* Initializes a new instance of the NoInclusionStatesException.
*/
public NoInclusionStatesException() {
super("No inclusion states for the provided seed");
}
}

View File

@ -1,16 +0,0 @@
package jota.error;
/**
* This exception occurs when its not possible to get node info.
*
* @author Adrian
*/
public class NoNodeInfoException extends BaseException {
/**
* Initializes a new instance of the NoNodeInfoException.
*/
public NoNodeInfoException() {
super("Node info could not be retrieved");
}
}

View File

@ -1,21 +0,0 @@
package jota.error;
/**
* This exception occurs when a transfer fails because their is not enough balance to perform the transfer.
*
* @author Adrian
*/
public class NotEnoughBalanceException extends BaseException {
/**
* Serial version UID
*/
private static final long serialVersionUID = -3807270816402226476L;
/**
* Initializes a new instance of the NotEnoughBalanceException.
*/
public NotEnoughBalanceException() {
super("Not enough balance");
}
}

View File

@ -1,6 +1,6 @@
package jota.utils;
import jota.error.InvalidAddressException;
import jota.error.ArgumentException;
import jota.pow.ICurl;
import jota.pow.JCurl;
import jota.pow.SpongeFactory;
@ -17,9 +17,9 @@ public class Checksum {
*
* @param address The address without checksum.
* @return The address with the appended checksum.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when the specified address is not an valid address.
**/
public static String addChecksum(String address) throws InvalidAddressException {
public static String addChecksum(String address) throws ArgumentException {
InputValidator.checkAddress(address);
String addressWithChecksum = address;
addressWithChecksum += calculateChecksum(address);
@ -31,15 +31,15 @@ public class Checksum {
*
* @param address The address with checksum.
* @return The address without checksum.
* @throws InvalidAddressException is thrown when the specified address is not an address with checksum.
* @throws ArgumentException is thrown when the specified address is not an address with checksum.
**/
public static String removeChecksum(String address) throws InvalidAddressException {
public static String removeChecksum(String address) throws ArgumentException {
if (isAddressWithChecksum(address)) {
return removeChecksumFromAddress(address);
} else if (isAddressWithoutChecksum(address)) {
return address;
}
throw new InvalidAddressException();
throw new ArgumentException("Invalid addresses provided");
}
private static String removeChecksumFromAddress(String addressWithChecksum) {
@ -51,9 +51,9 @@ public class Checksum {
*
* @param addressWithChecksum The address with checksum.
* @return <code>true</code> if the specified address with checksum has a valid checksum [the specified address with checksum]; otherwise, <code>false</code>.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when the specified address is not an valid address.
**/
public static boolean isValidChecksum(String addressWithChecksum) throws InvalidAddressException {
public static boolean isValidChecksum(String addressWithChecksum) throws ArgumentException {
String addressWithoutChecksum = removeChecksum(addressWithChecksum);
String addressWithRecalculateChecksum = addressWithoutChecksum += calculateChecksum(addressWithoutChecksum);
return addressWithRecalculateChecksum.equals(addressWithChecksum);
@ -64,9 +64,9 @@ public class Checksum {
*
* @param address The address to check.
* @return <code>true</code> if the specified address is with checksum ; otherwise, <code>false</code>.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when the specified address is not an valid address.
**/
public static boolean isAddressWithChecksum(String address) throws InvalidAddressException {
public static boolean isAddressWithChecksum(String address) throws ArgumentException {
return InputValidator.checkAddress(address) && address.length() == Constants.ADDRESS_LENGTH_WITH_CHECKSUM;
}
@ -75,9 +75,9 @@ public class Checksum {
*
* @param address The address to check.
* @return <code>true</code> if the specified address is without checksum ; otherwise, <code>false</code>.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when the specified address is not an valid address.
**/
public static boolean isAddressWithoutChecksum(String address) throws InvalidAddressException {
public static boolean isAddressWithoutChecksum(String address) throws ArgumentException {
return InputValidator.checkAddress(address) && address.length() == Constants.ADDRESS_LENGTH_WITHOUT_CHECKSUM;
}

View File

@ -1,6 +1,6 @@
package jota.utils;
import jota.error.InvalidAddressException;
import jota.error.ArgumentException;
import jota.model.Transfer;
import org.apache.commons.lang3.math.NumberUtils;
@ -30,7 +30,7 @@ public class InputValidator {
* @param addresses The address list to validate.
* @return <code>true</code> if the specified addresses are valid; otherwise, <code>false</code>.
**/
public static boolean isAddressesCollectionValid(final List<String> addresses) throws InvalidAddressException {
public static boolean isAddressesCollectionValid(final List<String> addresses) throws ArgumentException {
for (final String address : addresses) {
if (!checkAddress(address)) {
return false;
@ -44,11 +44,11 @@ public class InputValidator {
*
* @param address The address to validate.
* @return <code>true</code> if the specified string is an address; otherwise, <code>false</code>.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws ArgumentException is thrown when the specified input is not valid.
**/
public static boolean checkAddress(String address) throws InvalidAddressException {
public static boolean checkAddress(String address) throws ArgumentException {
if (!isAddress(address)) {
throw new InvalidAddressException();
throw new ArgumentException("Invalid addresses provided");
}
return true;
}
@ -82,7 +82,7 @@ public class InputValidator {
* @return <code>true</code> the specified string represents an integer value; otherwise, <code>false</code>.
**/
public static boolean isValue(final String value) {
return NumberUtils.isNumber(value);
return NumberUtils.isCreatable(value);
}
/**
@ -132,11 +132,11 @@ public class InputValidator {
* @param transfers The transfers list to validate.
* @return <code>true</code> if the specified transfers are valid; otherwise, <code>false</code>.
**/
public static boolean isTransfersCollectionValid(final List<Transfer> transfers) {
public static boolean isTransfersCollectionValid(final List<Transfer> transfers) throws ArgumentException {
// Input validation of transfers object
if (transfers == null || transfers.isEmpty()) {
throw new IllegalArgumentException("No transfer provided");
throw new ArgumentException("No transfer provided");
}
for (final Transfer transfer : transfers) {
@ -186,4 +186,57 @@ public class InputValidator {
public static boolean isValidSeed(String seed) {
return isTrytes(seed, seed.length());
}
/**
* Checks if input is correct hashes.
*
* @param hashes The hashes list to validate.
* @return <code>true</code> if the specified hashes are valid; otherwise, <code>false</code>.
**/
public static boolean isHashes(List<String> hashes) {
for (String hash : hashes) {
if (!isTrytes(hash, 81)) {
return false;
}
}
return true;
}
/**
* Checks if input is correct hash.
*
* @param hash The hash to validate.
* @return <code>true</code> if the specified hash are valid; otherwise, <code>false</code>.
**/
public static boolean isHash(String hash) {
if (!isTrytes(hash, 81)) {
return false;
}
return true;
}
/**
* Checks if attached trytes if last 241 trytes are non-zero
*
* @param trytes The trytes.
* @return <code>true</code> if the specified trytes are valid; otherwise, <code>false</code>.
**/
public static boolean isArrayOfAttachedTrytes(String[] trytes) {
for (String tryteValue : trytes) {
// Check if correct 2673 trytes
if (!isTrytes(tryteValue, 2673)) {
return false;
}
String lastTrytes = tryteValue.substring(2673 - (3 * 81));
if (lastTrytes.matches("[9]+")) {
return false;
}
}
return true;
}
}

View File

@ -1,7 +1,6 @@
package jota.utils;
import jota.error.InvalidAddressException;
import jota.error.InvalidSecurityLevelException;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.model.Input;
import jota.model.Transaction;
@ -28,13 +27,12 @@ public class IotaAPIUtils {
* @param checksum The adds 9-tryte address checksum
* @param curl The curl instance.
* @return An String with address.
* @throws InvalidAddressException is thrown when the specified address is not an valid address.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified input is not valid.
*/
public static String newAddress(String seed, int security, int index, boolean checksum, ICurl curl) throws InvalidAddressException, InvalidSecurityLevelException {
public static String newAddress(String seed, int security, int index, boolean checksum, ICurl curl) throws ArgumentException {
if (security < 1) {
throw new InvalidSecurityLevelException();
throw new ArgumentException("Invalid security level provided");
}
Signing signing = new Signing(curl);
@ -53,7 +51,7 @@ public class IotaAPIUtils {
public static List<String> signInputsAndReturn(final String seed,
final List<Input> inputs,
final Bundle bundle,
final List<String> signatureFragments, ICurl curl) throws InvalidSecurityLevelException {
final List<String> signatureFragments, ICurl curl) throws ArgumentException {
bundle.finalize(curl);
bundle.addTrytes(signatureFragments);

View File

@ -1,6 +1,6 @@
package jota.utils;
import jota.error.InvalidSecurityLevelException;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.pow.ICurl;
import jota.pow.SpongeFactory;
@ -36,9 +36,9 @@ public class Multisig {
* @param security Secuirty level of private key / seed.
* @param index Key index to start search from. If the index is provided, the generation of the address is not deterministic.
* @return trytes
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified security level is not valid.
**/
public String getDigest(String seed, int security, int index) throws InvalidSecurityLevelException {
public String getDigest(String seed, int security, int index) throws ArgumentException {
int[] key = signingInstance.key(Converter.trits(seed, 243), index, security);
return Converter.trytes(signingInstance.digests(key));
}
@ -75,10 +75,10 @@ public class Multisig {
* @param seed Tryte-encoded seed. It should be noted that this seed is not transferred
* @param index Key index to start search from. If the index is provided, the generation of the address is not deterministic.
* @return trytes.
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified security level is not valid.
**/
public String getKey(String seed, int index, int security) throws InvalidSecurityLevelException {
public String getKey(String seed, int index, int security) throws ArgumentException {
return Converter.trytes(signingInstance.key(Converter.trits(seed, 81 * security), index, security));
}

View File

@ -1,6 +1,6 @@
package jota.utils;
import jota.error.InvalidSecurityLevelException;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.model.Transaction;
import jota.pow.ICurl;
@ -36,11 +36,11 @@ public class Signing {
* @param index
* @param security
* @return
* @throws InvalidSecurityLevelException is thrown when the specified security level is not valid.
* @throws ArgumentException is thrown when the specified security level is not valid.
*/
public int[] key(final int[] inSeed, final int index, int security) throws InvalidSecurityLevelException {
public int[] key(final int[] inSeed, final int index, int security) throws ArgumentException {
if (security < 1) {
throw new InvalidSecurityLevelException();
throw new ArgumentException("Invalid security level provided");
}
int[] seed = inSeed.clone();

View File

@ -1,6 +1,6 @@
package jota;
import jota.error.InvalidAddressException;
import jota.error.ArgumentException;
import jota.utils.Checksum;
import org.junit.Test;
@ -15,17 +15,17 @@ public class ChecksumTest {
private static final String TEST_ADDRESS_WITH_CHECKSUM = "LXQHWNY9CQOHPNMKFJFIJHGEPAENAOVFRDIBF99PPHDTWJDCGHLYETXT9NPUVSNKT9XDTDYNJKJCPQMZCCOZVXMTXC";
@Test
public void shouldAddChecksum() throws InvalidAddressException {
public void shouldAddChecksum() throws ArgumentException {
assertEquals(Checksum.addChecksum(TEST_ADDRESS_WITHOUT_CHECKSUM), TEST_ADDRESS_WITH_CHECKSUM);
}
@Test
public void shouldRemoveChecksum() throws InvalidAddressException {
public void shouldRemoveChecksum() throws ArgumentException {
assertEquals(Checksum.removeChecksum(TEST_ADDRESS_WITH_CHECKSUM), TEST_ADDRESS_WITHOUT_CHECKSUM);
}
@Test
public void shouldIsValidChecksum() throws InvalidAddressException {
public void shouldIsValidChecksum() throws ArgumentException {
assertEquals(Checksum.isValidChecksum(TEST_ADDRESS_WITH_CHECKSUM), true);
}
}

View File

@ -1,6 +1,6 @@
package jota;
import jota.error.InvalidAddressException;
import jota.error.ArgumentException;
import jota.model.Transfer;
import jota.utils.InputValidator;
import org.junit.Test;
@ -28,7 +28,7 @@ public class InputValidatorTest {
}
@Test
public void shouldCheckAddress() throws InvalidAddressException {
public void shouldCheckAddress() throws ArgumentException {
assertEquals(InputValidator.checkAddress(TEST_ADDRESS_WITHOUT_CHECKSUM), true);
}
@ -48,7 +48,7 @@ public class InputValidatorTest {
}
@Test
public void shouldIsTransfersCollectionCorrect() {
public void shouldIsTransfersCollectionCorrect() throws ArgumentException {
List<Transfer> transfers = new ArrayList<>();
transfers.add(new Transfer(TEST_ADDRESS_WITH_CHECKSUM, 0, TEST_MESSAGE, TEST_TAG));
transfers.add(new Transfer(TEST_ADDRESS_WITH_CHECKSUM, 0, "", ""));

View File

@ -2,7 +2,7 @@ package jota;
import com.google.gson.Gson;
import jota.dto.response.*;
import jota.error.*;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.model.Input;
import jota.model.Transaction;
@ -37,7 +37,7 @@ public class IotaAPITest {
private static final String TEST_ADDRESS_WITHOUT_CHECKSUM_SECURITY_LEVEL_3 = "ASCZZOBQDMNHLELQKWJBMRETMHBTF9V9TNKYDIFW9PDXPUHPVVGHMSWPVMNJHSJF99QFCMNTPCPGS9DT9";
private static final String TEST_HASH = "BKBALUPMEECOGEYQU9OHXTFTHV9OKEVUGHAUNNQCNETAQWIRJIKDGWSWXY9RSIMZJBPIPEIQEFEIA9999";
private static final String TEST_INVALID_TRYTES = "BYSWEAUTWXHXZ9YBZISEK9LUHWGMHXCGEVNZHRLUWQFCUSDXZHOFHWHL9MQPVJXXZLIXPXPXF9KYEREFSKCPKYIIKPZVLHUTDFQKKVVBBN9ATTLPCNPJDWDEVIYYLGPZGCWXOBDXMLJC9VO9QXTTBLAXTTBFUAROYEGQIVB9MJWJKXJMCUPTWAUGFZBTZCSJVRBGMYXTVBDDS9MYUJCPZ9YDWWQNIPUAIJXXSNLKUBSCOIJPCLEFPOXFJREXQCUVUMKSDOVQGGHRNILCO9GNCLWFM9APMNMWYASHXQAYBEXF9QRIHIBHYEJOYHRQJAOKAQ9AJJFQ9WEIWIJOTZATIBOXQLBMIJU9PCGBLVDDVFP9CFFSXTDUXMEGOOFXWRTLFGV9XXMYWEMGQEEEDBTIJ9OJOXFAPFQXCDAXOUDMLVYRMRLUDBETOLRJQAEDDLNVIRQJUBZBO9CCFDHIX9MSQCWYAXJVWHCUPTRSXJDESISQPRKZAFKFRULCGVRSBLVFOPEYLEE99JD9SEBALQINPDAZHFAB9RNBH9AZWIJOTLBZVIEJIAYGMC9AZGNFWGRSWAXTYSXVROVNKCOQQIWGPNQZKHUNODGYADPYLZZZUQRTJRTODOUKAOITNOMWNGHJBBA99QUMBHRENGBHTH9KHUAOXBVIVDVYYZMSEYSJWIOGGXZVRGN999EEGQMCOYVJQRIRROMPCQBLDYIGQO9AMORPYFSSUGACOJXGAQSPDY9YWRRPESNXXBDQ9OZOXVIOMLGTSWAMKMTDRSPGJKGBXQIVNRJRFRYEZ9VJDLHIKPSKMYC9YEGHFDS9SGVDHRIXBEMLFIINOHVPXIFAZCJKBHVMQZEVWCOSNWQRDYWVAIBLSCBGESJUIBWZECPUCAYAWMTQKRMCHONIPKJYYTEGZCJYCT9ABRWTJLRQXKMWY9GWZMHYZNWPXULNZAPVQLPMYQZCYNEPOCGOHBJUZLZDPIXVHLDMQYJUUBEDXXPXFLNRGIPWBRNQQZJSGSJTTYHIGGFAWJVXWL9THTPWOOHTNQWCNYOYZXALHAZXVMIZE9WMQUDCHDJMIBWKTYH9AC9AFOT9DPCADCV9ZWUTE9QNOMSZPTZDJLJZCJGHXUNBJFUBJWQUEZDMHXGBPTNSPZBR9TGSKVOHMOQSWPGFLSWNESFKSAZY9HHERAXALZCABFYPOVLAHMIHVDBGKUMDXC9WHHTIRYHZVWNXSVQUWCR9M9RAGMFEZZKZ9XEOQGOSLFQCHHOKLDSA9QCMDGCGMRYJZLBVIFOLBIJPROKMHOYTBTJIWUZWJMCTKCJKKTR9LCVYPVJI9AHGI9JOWMIWZAGMLDFJA9WU9QAMEFGABIBEZNNAL9OXSBFLOEHKDGHWFQSHMPLYFCNXAAZYJLMQDEYRGL9QKCEUEJ9LLVUOINVSZZQHCIKPAGMT9CAYIIMTTBCPKWTYHOJIIY9GYNPAJNUJ9BKYYXSV9JSPEXYMCFAIKTGNRSQGUNIYZCRT9FOWENSZQPD9ALUPYYAVICHVYELYFPUYDTWUSWNIYFXPX9MICCCOOZIWRNJIDALWGWRATGLJXNAYTNIZWQ9YTVDBOFZRKO9CFWRPAQQRXTPACOWCPRLYRYSJARRKSQPR9TCFXDVIXLP9XVL99ERRDSOHBFJDJQQGGGCZNDQ9NYCTQJWVZIAELCRBJJFDMCNZU9FIZRPGNURTXOCDSQGXTQHKHUECGWFUUYS9J9NYQ9U9P9UUP9YMZHWWWCIASCFLCMSKTELZWUGCDE9YOKVOVKTAYPHDF9ZCCQAYPJIJNGSHUIHHCOSSOOBUDOKE9CJZGYSSGNCQJVBEFTZFJ9SQUHOASKRRGBSHWKBCBWBTJHOGQ9WOMQFHWJVEG9NYX9KWBTCAIXNXHEBDIOFO9ALYMFGRICLCKKLG9FOBOX9PDWNQRGHBKHGKKRLWTBEQMCWQRLHAVYYZDIIPKVQTHYTWQMTOACXZOQCDTJTBAAUWXSGJF9PNQIJ9AJRUMUVCPWYVYVARKR9RKGOUHHNKNVGGPDDLGKPQNOYHNKAVVKCXWXOQPZNSLATUJT9AUWRMPPSWHSTTYDFAQDXOCYTZHOYYGAIM9CELMZ9AZPWB9MJXGHOKDNNSZVUDAGXTJJSSZCPZVPZBYNNTUQABSXQWZCHDQSLGK9UOHCFKBIBNETK999999999999999999999999999999999999999999999999999999999999999999999999999999999NOXDXXKUDWLOFJLIPQIBRBMGDYCPGDNLQOLQS99EQYKBIU9VHCJVIPFUYCQDNY9APGEVYLCENJIOBLWNB999999999XKBRHUD99C99999999NKZKEKWLDKMJCI9N9XQOLWEPAYWSH9999999999999999999999999KDDTGZLIPBNZKMLTOLOXQVNGLASESDQVPTXALEKRMIOHQLUHD9ELQDBQETS9QFGTYOYWLNTSKKMVJAUXSIROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999IROUICDOXKSYZTDPEDKOQENTJOWJONDEWROCEJIEWFWLUAACVSJFTMCHHXJBJRKAAPUDXXVXFWP9X9999";
private static final String TEST_TRYTES = "9RYSLXACOTYQZAQIAMCULCVKMBIPMKINPFJCZFIZOOZMTCTKIXQHQTUTVGZMVHGKLRZGWOT9UGYQFNCGNRJWDETRKWUFIAFA9M9ZPZKVJWKOJENHFWMFBDVOLEVCGQTKCTOPNGRYQURVQPFJAZFUKCXAOORIYCVDKDINDXRFAFRSFVRXCTPETGIJULBYGXUHQMBGHAKGJLMNZUQE9EVOGTFVJ9EVSDNUYPGQLZBAJNWG9XXXDHETVT9XBBCQZEWJXFLVHEXHEQARCOSRKQQVEQKK9APNBRBJHHUWRGAWUIMLY9AFCULX9ITRJBYU9BNQPZBJKJDNHDAKIGDMNUOFCWAEDSBDRUTORPZQCHCSQRVIERZNGPYBPEOQXGFAKANGXPE9MA9ZZCLKDQANOKIAV9QDDUZILVMEIHXDSHDISEJMLQGVEUJWMCKCMIQTRRGJKJFSVMZWYNQJCFCPOEGOTJULGPFTM9GQGEONOXSYXYPQZHVFYHKYREHQMYWHYUTZE999HRWIQTOENSRFPB9NXDVFSUA9NLAKOELYAAHTFDDAYBHPKNAXXTJIPYOKXTEMYUIOKXORYUFEIIAZCFGCCINBPTXFNTGPKFOQNGEODMSCVOZKRJYLECZB9VDZJCLPMTY9UPLTLH9GVDBALFNBLQXI9ADJJXCSPQJXHNNZUOJCMFJKZZ9ZTJRQMNLDSTZYTFNXQPZKMQJLZBHF9URFHNX9MQVMTIHEMROFCCPDLUOTRCAURYL9IJ9IGTRFVIJXSFLYBJOQOASBNVRFQGVIGKA9UJUDHWUSBFFKDHDVRGLOZQYADXGS9IOGCPCVCFPNUDFTUKXCOEEUMNDZCZGUXIECIYCKL9XCPEIQMYV9VCP9JJMSREJFQB9IVXUAXWCURUADEPBIVIGERXIMFZAGQPRC9KSYYLHBZVZGQJVTZVBGMRBWYJCYRHMJWPIKJYAYTALAAZROZYCMQKWBSFUGHFSOGGTCQDHWJU9VJGCAHJLHSORFKVJKV9RSZHLJZTDJJGOXTRLKNJORWYPW9UKRZROJONZQWJNUEPBZZJYBJJNCAQOEYTHFWVUBACCFTREABOZKQEKSMDAFECVGMGELNZUFZJHWHNXLBOSHLNBPGSQDVLZLBUXWINABWYBDMZNIYNVPYLRKUULTMNNKZUFNQOQKROJSXWYTBRDSJQKTOUXLMXVCVIXEYPZWBSMEXMBGUIVACRTGKDEIYZKP9KQCQXPWRXNLGQOATRHCXJFQINXFYQIDTPUJVXKUYVRYHWDHWSNLWUFPNNJZVNMRFWPZBJCRRSHMHUG9NKKH9SOXTUJUAXBF9MHYWHJ9ZTJRUQFKRLHMNVPWX9XFXLMVJAGASMWMIFYUZFAUCEIOOYMEYWOIZTNEWFVZKOQFECWEPSMOYFSJJKEJQMPSXGE9WTYRQJVMHUQZFD9MJUFFCNSGAZCTXYPIJFNSXAUCYPGZMNWMQWSWCKAQYKXJTWINSGPPZG9HLDLEAWUWEVCTVRCBDFOXKUROXH9HXXAXVPEJFRSLOGRVGYZASTEBAQNXJJROCYRTDPYFUIQJVDHAKEG9YACV9HCPJUEUKOYFNWDXCCJBIFQKYOXGRDHVTHEQUMHO999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999DNVEZXD99A99999999A99999999BULMKQXROXEBHPBYGKQINYJTHPTL9OGKUFBFAVRHPZSNXBUDMNRJFYIIGWOFVCXSVFQRZMPGCZMZUNKCDDRWDLKTKCZXZFMIZ9CZBWNOJGSXHBKEXCFQPBNFAE9QAVRX9SWGEZQRSYAYNW9TPWVWCJXAUPQHYZ9999NBDPASDXMXDCHLMZJIBHAZREUBOTZZAYGKCWTBSBKKETULAPABDTY9AMPBSXO9KJOLCWJMJSZFKU999999999999999999999999999999999999999999999999999999999999CWJQRPBIJGTWQTCMDUVOCBUAMH";
private static final String TEST_TRYTES = "CCWCXCGDEAXCGDEAPCEAHDTCGDHDRAADTCGDGDPCVCTC9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999WITPXKWONPNUPBESJTXQTZTFXFSTDUWVGYHW9VRDULWGBKDVAAJLOSAEPUSCMSOIYLKMIZLPEKAOYAXMWFLDKQJI99999999999999999999UUC9999999999999999FUCK9YOUIVBUGXD99999999999B99999999IDPWGXASJFLLGCDGPQVXYGSNUESCZQCEKVREGLZX9FCYQVUWESEKWSMHZTGMJLGBOLKU9GILFITSJLZBWEHH9RSRNBPSKKUZBBJDSYHYWYHLJUOAFCKMXGTRFTZHKKWSVKGRHHJECSILLLZXKYJAYAQYEOINSZ9999OCYREQNINOB9XMLJOXMDFJDTXYO9PANNXQSW9HPFAAHEPTSPHTNEBOFFNRPKSUQNTKSACROOJPXF99999UUC9999999999999999FUCK9YOUPNMHCEJIE999999999L99999999IGMVBPROUATGVGQTHYIYFVQETRW";
private static final String TEST_MESSAGE = "JUSTANOTHERJOTATEST";
private static final String TEST_TAG = "JOTASPAM9999999999999999999";
private static final int MIN_WEIGHT_MAGNITUDE = 14;
@ -113,7 +113,7 @@ public class IotaAPITest {
}
@Test
public void shouldGetInputs() throws InvalidSecurityLevelException, InvalidAddressException {
public void shouldGetInputs() throws ArgumentException, ArgumentException {
GetBalancesAndFormatResponse res = iotaAPI.getInputs(TEST_SEED1, 2, 0, 0, 0);
System.out.println(res);
assertThat(res, IsNull.notNullValue());
@ -122,7 +122,7 @@ public class IotaAPITest {
}
@Test
public void shouldCreateANewAddressWithChecksum() throws InvalidSecurityLevelException, InvalidAddressException {
public void shouldCreateANewAddressWithChecksum() throws ArgumentException, ArgumentException {
final GetNewAddressResponse res1 = iotaAPI.getNewAddress(TEST_SEED1, 1, 0, true, 5, false);
assertThat(res1.getAddresses().get(0), Is.is(TEST_ADDRESS_WITH_CHECKSUM_SECURITY_LEVEL_1));
@ -134,7 +134,7 @@ public class IotaAPITest {
}
@Test
public void shouldCreateANewAddressWithoutChecksum() throws InvalidSecurityLevelException, InvalidAddressException {
public void shouldCreateANewAddressWithoutChecksum() throws ArgumentException, ArgumentException {
final GetNewAddressResponse res1 = iotaAPI.getNewAddress(TEST_SEED1, 1, 0, false, 5, false);
assertThat(res1.getAddresses().get(0), Is.is(TEST_ADDRESS_WITHOUT_CHECKSUM_SECURITY_LEVEL_1));
@ -146,13 +146,13 @@ public class IotaAPITest {
}
@Test
public void shouldCreate100Addresses() throws InvalidSecurityLevelException, InvalidAddressException {
public void shouldCreate100Addresses() throws ArgumentException {
GetNewAddressResponse res = iotaAPI.getNewAddress(TEST_SEED1, 2, 0, false, 100, false);
assertEquals(res.getAddresses().size(), 100);
}
@Test
public void shouldPrepareTransfer() throws InvalidSecurityLevelException, NotEnoughBalanceException, InvalidAddressException, InvalidTransferException {
public void shouldPrepareTransfer() throws ArgumentException {
List<Input> inputlist = new ArrayList<>();
List<Transfer> transfers = new ArrayList<>();
@ -173,39 +173,39 @@ public class IotaAPITest {
}
@Test
public void shouldGetLastInclusionState() throws NoNodeInfoException {
public void shouldGetLastInclusionState() throws ArgumentException {
GetInclusionStateResponse res = iotaAPI.getLatestInclusion(new String[]{TEST_HASH});
assertThat(res.getStates(), IsNull.notNullValue());
}
@Test
public void shouldFindTransactionObjects() {
List<Transaction> ftr = iotaAPI.findTransactionObjects(TEST_ADDRESSES);
public void shouldFindTransactionObjects() throws ArgumentException {
List<Transaction> ftr = iotaAPI.findTransactionObjectsByAddresses(TEST_ADDRESSES);
System.out.println(ftr);
assertThat(ftr, IsNull.notNullValue());
}
@Test
public void shouldGetAccountData() throws NoInclusionStatesException, InvalidTrytesException, NoNodeInfoException, ArgumentException, InvalidBundleException, InvalidSecurityLevelException, InvalidAddressException, InvalidSignatureException {
public void shouldGetAccountData() throws ArgumentException {
GetAccountDataResponse gad = iotaAPI.getAccountData(TEST_SEED1, 2, 0, true, 0, true, 0, 0, true, 0);
assertThat(gad, IsNull.notNullValue());
}
@Test(expected = IllegalAccessError.class)
public void shouldNotGetBundle() throws InvalidBundleException, ArgumentException, InvalidSignatureException {
@Test(expected = ArgumentException.class)
public void shouldNotGetBundle() throws ArgumentException {
GetBundleResponse gbr = iotaAPI.getBundle("SADASD");
assertThat(gbr, IsNull.notNullValue());
}
@Test
public void shouldGetBundle() throws InvalidBundleException, ArgumentException, InvalidSignatureException {
public void shouldGetBundle() throws ArgumentException {
GetBundleResponse gbr = iotaAPI.getBundle(TEST_HASH);
System.out.println(gbr);
assertThat(gbr, IsNull.notNullValue());
}
@Test
public void shouldGetTransfers() throws InvalidBundleException, ArgumentException, InvalidSignatureException, NoInclusionStatesException, NoNodeInfoException, InvalidSecurityLevelException, InvalidAddressException {
public void shouldGetTransfers() throws ArgumentException {
GetTransferResponse gtr = iotaAPI.getTransfers(TEST_SEED1, 2, 0, 0, false);
assertThat(gtr.getTransfers(), IsNull.notNullValue());
System.out.println(gtr);
@ -219,32 +219,36 @@ public class IotaAPITest {
@Ignore
@Test
public void shouldReplayBundle() throws InvalidTrytesException, InvalidBundleException, InvalidSignatureException, ArgumentException {
public void shouldReplayBundle() throws ArgumentException {
ReplayBundleResponse rbr = iotaAPI.replayBundle(TEST_HASH, DEPTH, MIN_WEIGHT_MAGNITUDE);
assertThat(rbr, IsNull.notNullValue());
}
@Ignore
@Test(expected = InvalidTrytesException.class)
public void shouldNotSendTrytes() throws InvalidTrytesException {
@Test(expected = ArgumentException.class)
public void shouldNotSendTrytes() throws ArgumentException {
iotaAPI.sendTrytes(new String[]{TEST_INVALID_TRYTES}, DEPTH, MIN_WEIGHT_MAGNITUDE);
}
@Test()
public void shouldGetTrytes() throws InvalidTrytesException {
public void shouldGetTrytes() throws ArgumentException {
System.out.println(iotaAPI.getTrytes(TEST_HASH));
}
@Test()
public void shouldBroadcastAndStore() throws ArgumentException {
System.out.println(iotaAPI.broadcastAndStore(TEST_TRYTES));
}
@Ignore
@Test
public void shouldSendTrytes() throws InvalidTrytesException {
public void shouldSendTrytes() throws ArgumentException {
iotaAPI.sendTrytes(new String[]{TEST_TRYTES}, DEPTH, MIN_WEIGHT_MAGNITUDE);
}
@Ignore
@Test(expected = IllegalStateException.class)
public void shouldNotSendTransfer() throws ArgumentException, InvalidSignatureException, InvalidBundleException, NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public void shouldNotSendTransfer() throws ArgumentException {
List<Transfer> transfers = new ArrayList<>();
transfers.add(new Transfer(TEST_ADDRESS_WITHOUT_CHECKSUM_SECURITY_LEVEL_2, 2, TEST_MESSAGE, TEST_TAG));
SendTransferResponse str = iotaAPI.sendTransfer(TEST_SEED1, 2, DEPTH, MIN_WEIGHT_MAGNITUDE, transfers, null, null, false);
@ -254,7 +258,7 @@ public class IotaAPITest {
@Ignore
@Test
public void shouldSendTransferWithoutInputs() throws ArgumentException, InvalidSignatureException, InvalidBundleException, NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public void shouldSendTransferWithoutInputs() throws ArgumentException {
List<Transfer> transfers = new ArrayList<>();
transfers.add(new Transfer(TEST_ADDRESS_WITHOUT_CHECKSUM_SECURITY_LEVEL_2, 1, TEST_MESSAGE, TEST_TAG));
SendTransferResponse str = iotaAPI.sendTransfer(TEST_SEED1, 2, DEPTH, MIN_WEIGHT_MAGNITUDE, transfers, null, null, false);
@ -264,7 +268,7 @@ public class IotaAPITest {
@Ignore
@Test
public void shouldSendTransferWithInputs() throws ArgumentException, InvalidSignatureException, InvalidBundleException, NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public void shouldSendTransferWithInputs() throws ArgumentException {
List<Input> inputlist = new ArrayList<>();
List<Transfer> transfers = new ArrayList<>();

View File

@ -2,10 +2,13 @@ package jota;
import com.google.gson.Gson;
import jota.dto.response.*;
import jota.error.ArgumentException;
import org.hamcrest.core.IsNull;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
import static org.junit.Assert.assertThat;
/**
@ -70,7 +73,7 @@ public class IotaCoreApiTest {
}
@Test
public void shouldFindTransactionsByAddresses() {
public void shouldFindTransactionsByAddresses() throws ArgumentException {
FindTransactionResponse trans = proxy.findTransactionsByAddresses(TEST_ADDRESS_WITH_CHECKSUM);
assertThat(trans.getHashes(), IsNull.notNullValue());
}
@ -94,21 +97,20 @@ public class IotaCoreApiTest {
}
@Test
public void shouldGetTrytes() {
public void shouldGetTrytes() throws ArgumentException {
GetTrytesResponse res = proxy.getTrytes(TEST_HASH);
assertThat(res.getTrytes(), IsNull.notNullValue());
}
@Test(expected = IllegalAccessError.class)
public void shouldNotGetInclusionStates() {
GetInclusionStateResponse res = proxy.getInclusionStates(new String[]{"DBPECSH9YLSSTQDGERUHJBBJTKVUDBMTJLG9WPHBINGHIFOSJMDJLARTVOXXWEFQJLLBINOHCZGYFSMUEXWPPMTOFW"}, new String[]{"EJDQOQHMLJGBMFWB9WJSPRCYIGNPO9WRHDCEQXIMPVPIJ9JV9RJGVHNX9EPGXFOOKBABCVMMAAX999999"});
assertThat(res.getStates(), IsNull.notNullValue());
@Test(expected = ArgumentException.class)
public void shouldNotGetInclusionStates() throws ArgumentException {
proxy.getInclusionStates(new String[]{TEST_HASH}, new String[]{"ZIJGAJ9AADLRPWNCYNNHUHRRAC9QOUDATEDQUMTNOTABUVRPTSTFQDGZKFYUUIE9ZEBIVCCXXXLKX9999"});
}
@Test
public void shouldGetInclusionStates() {
GetInclusionStateResponse res = proxy.getInclusionStates(new String[]{TEST_ADDRESS_WITH_CHECKSUM}, new String[]{proxy.getNodeInfo().getLatestSolidSubtangleMilestone()});
public void shouldGetInclusionStates() throws ArgumentException {
GetInclusionStateResponse res = proxy.getInclusionStates(new String[]{TEST_HASH}, new String[]{proxy.getNodeInfo().getLatestSolidSubtangleMilestone()});
assertThat(res.getStates(), IsNull.notNullValue());
}
@ -127,8 +129,8 @@ public class IotaCoreApiTest {
}
@Test
public void shouldGetBalances() {
GetBalancesResponse res = proxy.getBalances(100, new String[]{TEST_ADDRESS_WITH_CHECKSUM});
public void shouldGetBalances() throws ArgumentException {
GetBalancesResponse res = proxy.getBalances(100, Collections.singletonList(TEST_ADDRESS_WITH_CHECKSUM));
assertThat(res.getBalances(), IsNull.notNullValue());
assertThat(res.getMilestone(), IsNull.notNullValue());
assertThat(res.getMilestoneIndex(), IsNull.notNullValue());

View File

@ -2,7 +2,7 @@ package jota;
import cfb.pearldiver.PearlDiverLocalPoW;
import jota.dto.response.SendTransferResponse;
import jota.error.*;
import jota.error.ArgumentException;
import jota.model.Transfer;
import org.hamcrest.core.IsNull;
import org.junit.Before;
@ -35,7 +35,7 @@ public class IotaLocalPoWTest {
@Ignore
@Test
public void shouldSendTransfer() throws ArgumentException, InvalidSignatureException, InvalidBundleException, NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public void shouldSendTransfer() throws ArgumentException {
List<Transfer> transfers = new ArrayList<>();
transfers.add(new Transfer(TEST_ADDRESS_WITHOUT_CHECKSUM_SECURITY_LEVEL_2, 0, TEST_MESSAGE, TEST_TAG));
SendTransferResponse str = iotaClient.sendTransfer(TEST_SEED1, 2, DEPTH, MIN_WEIGHT_MAGNITUDE, transfers, null, null, false);

View File

@ -1,9 +1,6 @@
package jota;
import jota.error.InvalidAddressException;
import jota.error.InvalidBundleException;
import jota.error.InvalidSecurityLevelException;
import jota.error.InvalidTransferException;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.model.Transaction;
import jota.model.Transfer;
@ -38,8 +35,7 @@ public class IotaMultisigTest {
}
@Test
public void basicMultiSigTest() throws InvalidBundleException, InvalidTransferException, InvalidAddressException, InvalidSecurityLevelException {
public void basicMultiSigTest() throws ArgumentException {
Multisig ms = new Multisig();
// First co-signer uses security level 3 and index 0 for the private key

View File

@ -1,7 +1,7 @@
package jota;
import jota.dto.response.SendTransferResponse;
import jota.error.*;
import jota.error.ArgumentException;
import jota.model.Transfer;
import org.apache.commons.lang3.StringUtils;
import org.hamcrest.core.IsNull;
@ -33,7 +33,7 @@ public class SendMessageTest {
@Ignore
@Test
public void shouldSendMessage() throws ArgumentException, InvalidSignatureException, InvalidBundleException, NotEnoughBalanceException, InvalidSecurityLevelException, InvalidTrytesException, InvalidAddressException, InvalidTransferException {
public void shouldSendMessage() throws ArgumentException {
List<Transfer> transfers = new ArrayList<>();
// for each 2187 trytes in a message one transfer is necessary

View File

@ -1,7 +1,6 @@
package jota;
import jota.error.InvalidAddressException;
import jota.error.InvalidSecurityLevelException;
import jota.error.ArgumentException;
import jota.model.Bundle;
import jota.pow.ICurl;
import jota.pow.SpongeFactory;
@ -25,13 +24,13 @@ public class SigningTest {
private static final String SIGNATURE2 = "URKFKLNXFEKDOGSQVMAOPEDIWSMTCKJZ9KEVWYALY9JAO9KHUGNDTMGQLKQJUIPWDIVMPEDSVPLFMDCIXDDT9WBBRTFQENL9AXLSBYHINXCDYBFGRNKJDYHAQVJKWCVOYXHTNBEZUNLVMJLUMZYJFAOW9PVVMJZNZZFJQEQFELVFZVFVWPJ9WQZJLPSGBYECHXSFVFQJGUCPFXC9GATTILVCAANNHOYMLOYX9QSUPCERYCOXPACZEEGLREBRZWXGUTTVTHB9GBRCIFEOBPIRXXPQKRSODEHDSZXLGIKXUQWNTQKIOPVDVSIK9WJUAEFOJBU9MBPBSVYSCLBMINTT9ZCTREZSMSVOPXSZOMCGFEZKMOCNLJ9QUTAPKBHRIAIYLCHUQHOINKSCMXWZVDGDXHNJQXJHPCCGBEWROVKEPAPBFFRCAVXZWIRKCRAWYHIHMDXFAGDJQNJJPYSQUHKFOOCEVQOGRQEIOQFKZWUQ9XVRNXKGMJOQEZHQZXQABWUQRBKXWHYUXEAEMDGXVY9WS9VJOCMGBQASSRNKAYJPTSPQEMYSJMTCLMDQJKDPBGQZZSFBDOKHBYY9UDRXNKTPWBCQTVKUGMEDUXL9TTKPATNIKVAGHACHPFSCRYNIRJBQC9OADPGWBFYYARSVNQCGMYQGCYLZH9KLMUIJPCLPQVS9BORXCJBXPDECJGKDNOUYWTKKFLXZARWKGUSMVMXKJTMRYZRERFCFGTZFZFCAOQSZGPQJUEZUJLJPU9QPMJUTZNLMSMPRGIFHUUZHMPMRBEBATEIIWPCOIMWOYOG9NYFBYOWFDKRXOTREBU99GNCPXKOWGI99LNVPRFFF9FCLFXI9HMUFU9NRLNJVTFNUSUJTAVOG9GKUYYEXIM9HTPIDTWIGLKRAQPKMQVZAPYMPSQIOJ9JZBWDMQHDSSRSHNCWSAJCSRORSEXLLQNZUKPXPGRLYMXOXWCCWWSBALFLXPHSGFLTOAFWPETBKJUMBLHMSKYLPJT9EJAZCPPNZWKPVCGKDJCRCLBBIAKVDSNWGONPLKFAYXZDI9FKPHDPKCB9UUPXLJVQTXOAZOQDRNSONXDVSLQGZYRIPGREYHRAUOSBFZDZPZHFNMWCZQGPXCZVLNCSASB9RQDFHOYMUVYLFKOEEWNREYCDMCTZIAFBFKLKRQWZCJHQZCZGWXIFTKRVMPHMVHAABHBDEV9WDEZBR9FLXLNBVNYKUOUFJQKNZVZVGZDDTFYNYFUVRLZKOLXXQYNV9MDVBLZSERXPGYKRIEZQZD9IBKFDT9AIYGWJJCXFWDUDURGJQLXVEJAVEOMZUVVTNCVBXEVQRDQIEHDUCSLCIJUTSCLFXEGMFYP9YLXELCZPMTBZWBIODZCFNJLVWTPQGLMQIHIABAYGJFFMOEDTCXGEDTNXMVXZYFGXRKVVRTIZ9ISXTDHAFPEKQZSM9XXQLOYBLTMD9MBERBIBEJDEXGMOLDZPZVVEPIRKJBDPAKFAWJPTCJSHZPDUKZEEHRFLMZCUGCOWFJBSTDGPHUIXSPPPHRQARMCFMTWKYPJNJQV9VSFZ9EWB9GVEAFUXHWRNUXQLCSBWROOITBATWUXUYGSMGAXKGEBP9ZJWXQWHBVPOSLDHTWXUOFQNO9EXSYPQF9LQLQAFNRU9MTIIRQLBBBYKUPANWRQKGESFARQIRUTGFMZVUKHZJYKTYOARTDOBIYBFRHJWEFHCYVHRHTLTWBRMUDVIVQVNELQMQRXYDNGVSICZINWIZCIWVFXLYOLYKWDNWCWFZUXHUWOPRDHMTSXOZX9CVHANU9ZXTJOGKEPYR9CHGOTIUQSWIALAOIKHQFXWY9ZWTSZADVXJNNZOLSCXVVFBRHLRBTGMSZOYNIXTAMABKGJTLGTZKRHOPPJMNYIQNVKRGXUQDWYEIEZYM9CSXO9YLSBJLDJUWOLUXDEKBGGEIDEXFLZMESDOITNYTNRLGOMHJH9HOLXJABUNLXCZYTXFPZMHRJPLXSVPDBJBBZX9TBIMZZFZOXUSFEJYHEXPFXGJCQTBBLPEEWAPHUETGXSXYYAF9PCCCOONRMQGAPJ9JO9BZQ9QSKTPFFYIFVHSLAZY9CWYSIMKDOSLRKWBHPGJGVEJEEMLCCWXKSOCMBMZZZJWYBBXE9FTAYJALGWITJRXAXWZEXMECTZEEIWZPHYX";
@Test
public void testAddressGeneration() throws InvalidAddressException, InvalidSecurityLevelException {
public void testAddressGeneration() throws ArgumentException {
assertEquals(FIRST_ADDR, IotaAPIUtils.newAddress(TEST_SEED, 2, 0, true, null));
assertEquals(SIXTH_ADDR, IotaAPIUtils.newAddress(TEST_SEED, 2, 5, true, null));
}
@Test
public void testLongSeedKeyGeneration() throws InvalidSecurityLevelException {
public void testLongSeedKeyGeneration() throws ArgumentException {
ICurl curl = SpongeFactory.create(SpongeFactory.Mode.KERL);
Signing signing = new Signing(curl);
String seed = "EV9QRJFJZVFNLYUFXWKXMCRRPNAZYQVEYB9VEPUHQNXJCWKZFVUCTQJFCUAMXAHMMIUQUJDG9UGGQBPIY";
@ -47,7 +46,7 @@ public class SigningTest {
}
@Test
public void testSigning() throws InvalidAddressException, InvalidSecurityLevelException {
public void testSigning() throws ArgumentException {
// we can sign any hash, so for convenience we will sign the first
// address of our test seed
// (but remove the checksum) with the key of our fifth address
@ -62,7 +61,7 @@ public class SigningTest {
}
@Test
public void testKeyLength() throws InvalidSecurityLevelException {
public void testKeyLength() throws ArgumentException {
Signing signing = new Signing(null);
int[] key = signing.key(Converter.trits(TEST_SEED), 5, 1);
assertEquals(Signing.KEY_LENGTH, key.length);
@ -73,11 +72,11 @@ public class SigningTest {
}
@Test
public void testVerifying() throws InvalidAddressException {
public void testVerifying() throws ArgumentException {
assertTrue(new Signing(null).validateSignatures(removeChecksum(SIXTH_ADDR), new String[]{SIGNATURE1, SIGNATURE2}, removeChecksum(FIRST_ADDR)));
}
private String removeChecksum(String address) throws InvalidAddressException {
private String removeChecksum(String address) throws ArgumentException {
assertTrue(Checksum.isValidChecksum(address));
return address.substring(0, Constants.ADDRESS_LENGTH_WITHOUT_CHECKSUM);
}