From 72d99f09938ad44be2d77b5ddf1d59f038e8d49b Mon Sep 17 00:00:00 2001 From: AZ Date: Wed, 28 Dec 2016 14:26:30 +0100 Subject: [PATCH] added getBundle, traverseBundle, bundleFromAddresses - pls test & verify --- src/main/java/jota/utils/IotaAPIUtils.java | 59 +++++++++++++++++++--- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/src/main/java/jota/utils/IotaAPIUtils.java b/src/main/java/jota/utils/IotaAPIUtils.java index 3116681..91d1a31 100644 --- a/src/main/java/jota/utils/IotaAPIUtils.java +++ b/src/main/java/jota/utils/IotaAPIUtils.java @@ -1,9 +1,6 @@ package jota.utils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,8 +40,58 @@ public class IotaAPIUtils { return address; } - public static List signInputsAndReturn(final String seed, - final List inputs, + public static List addRemainder(final String seed, + final List inputs, + final Bundle bundle, + final String tag, + final long totalValue, + final String remainderAddress, + final List signatureFragments) { + for (int i = 0; i < inputs.size(); i++) { + long thisBalance = inputs.get(i).getBalance(); + long totalTransferValue = totalValue; + long toSubtract = 0 - thisBalance; + long timestamp = (new Date()).getTime(); + + // Add input as bundle entry + bundle.addEntry(2, inputs.get(i).getAddress(), toSubtract, tag, timestamp); + // If there is a remainder value + // Add extra output to send remaining funds to + + if (thisBalance >= totalTransferValue) { + long remainder = thisBalance - totalTransferValue; + + // If user has provided remainder address + // Use it to send remaining funds to + if (remainder > 0 && remainderAddress != null) { + // Remainder bundle entry + bundle.addEntry(1, remainderAddress, remainder, tag, timestamp); + // Final function for signing inputs + return signInputsAndReturn(seed, inputs, bundle, signatureFragments); + } else if (remainder > 0) { + // Generate a new Address by calling getNewAddress + String address = newAddress(seed, 0, false); + // Remainder bundle entry + bundle.addEntry(1, address, remainder, tag, timestamp); + // Final function for signing inputs + return signInputsAndReturn(seed, inputs, bundle, signatureFragments); + } else { + // If there is no remainder, do not add transaction to bundle + // simply sign and return + return signInputsAndReturn(seed, inputs, bundle, signatureFragments); + } + + // If multiple inputs provided, subtract the totalTransferValue by + // the inputs balance + } else { + totalTransferValue -= thisBalance; + } + + } + } + + public static List signInputsAndReturn(final String seed, + final List inputs, final Bundle bundle, final List signatureFragments) { bundle.finalize();