diff --git a/src/main/java/iotaFlashWrapper/Helpers.java b/src/main/java/iotaFlashWrapper/Helpers.java index fc3ed9b..7e327de 100644 --- a/src/main/java/iotaFlashWrapper/Helpers.java +++ b/src/main/java/iotaFlashWrapper/Helpers.java @@ -119,9 +119,9 @@ public class Helpers { public static ArrayList getNewBranchDigests(UserObject user, int toGenerate) { ArrayList digests = new ArrayList<>(); for (int i = 0; i < toGenerate; i++) { - Digest digest = IotaFlashBridge.getDigest(user.getSeed(), user.getIndex(), user.getSecurity()); - System.out.println("USING index for digest: " + user.getIndex() ); - user.incrementIndex(); + Digest digest = IotaFlashBridge.getDigest(user.getSeed(), user.getSeedIndex(), user.getSecurity()); + System.out.println("USING index for digest: " + user.getSeedIndex() ); + user.incrementSeedIndex(); digests.add(digest); } return digests; @@ -179,10 +179,10 @@ public class Helpers { // Create new digest Digest digest = IotaFlashBridge.getDigest( user.getSeed(), - user.getIndex(), + user.getSeedIndex(), user.getSecurity() ); - user.incrementIndex(); + user.incrementSeedIndex(); System.out.println("Adding digest (" + digest.toString() + ") to user " + user.getUserIndex()); // Increment key index @@ -386,10 +386,12 @@ public class Helpers { * @return amount of IOTA */ public static double getBalanceOfUser(UserObject user) { - double balance = user.getFlash().getDeposits().get(user.getUserIndex()); - Map transfers = user.getFlash().getOutputs(); + FlashObject flash = user.getFlash(); + double balance = flash.getDeposits().get(user.getUserIndex()); + Map transfers = flash.getOutputs(); for (Map.Entry transfer : transfers.entrySet()) { - if (transfer.getKey().equals(user.getAddress())) { + String userSettlementAddr = flash.getSettlementAddresses().get(user.getUserIndex()); + if (transfer.getKey().equals(userSettlementAddr)) { balance += transfer.getValue(); } } diff --git a/src/main/java/iotaFlashWrapper/IotaFlashInterface.java b/src/main/java/iotaFlashWrapper/IotaFlashInterface.java deleted file mode 100644 index 64940b9..0000000 --- a/src/main/java/iotaFlashWrapper/IotaFlashInterface.java +++ /dev/null @@ -1,39 +0,0 @@ -package iotaFlashWrapper; - -import iotaFlashWrapper.Model.Bundle; -import iotaFlashWrapper.Model.Digest; -import iotaFlashWrapper.Model.Multisig; -import iotaFlashWrapper.Model.Transfer; - -import java.util.ArrayList; -import java.util.List; - -public interface IotaFlashInterface { - // Multisig - public Multisig composeAddress(ArrayList digests); - - public void updateLeafToRoot(Multisig root); - - // Transfer - public Object prepare(ArrayList settlementAddresses, ArrayList deposits, int index, ArrayList transfers); - public List compose(int balance, ArrayList deposits, ArrayList outputs, Multisig root, String remainderAddress, ArrayList history, ArrayList transfers, boolean close); - - public Digest getDigest(String seed, int index, int security); - - public Object sign(Multisig root, String seed, ArrayList bundles); - public Object appliedSignatures(ArrayList bundles, ArrayList signatures); - public Object getDiff(ArrayList root, - ArrayList remainder, - ArrayList history, - ArrayList bundles); - public Object applayTransfers(Object root, - Object deposit, - Object outputs, - Object remainderAddress, - Object transfers, - Object signedBundles); - public Object close(ArrayList settlementAddresses, ArrayList deposits); -} - - - diff --git a/src/main/java/iotaFlashWrapper/Main.java b/src/main/java/iotaFlashWrapper/Main.java index e910137..5e2ae90 100644 --- a/src/main/java/iotaFlashWrapper/Main.java +++ b/src/main/java/iotaFlashWrapper/Main.java @@ -30,17 +30,15 @@ public class Main { // Security level int SECURITY = 1; - // Number of parties taking signing part in the channel - int SIGNERS_COUNT = 2; // Flash tree depth int TREE_DEPTH = 4; - // Total channel Balance - int CHANNEL_BALANCE = 200; // Users deposits double[] DEPOSITS = new double[]{100.0, 100.0}; // Setup users. - UserObject oneFlash = new UserObject(0, oneSeed, TREE_DEPTH, SECURITY, oneSettlement, new FlashObject(SIGNERS_COUNT, CHANNEL_BALANCE, DEPOSITS)); - UserObject twoFlash = new UserObject(1, twoSeed, TREE_DEPTH, SECURITY, twoSettlement, new FlashObject(SIGNERS_COUNT, CHANNEL_BALANCE, DEPOSITS)); + UserObject oneFlash = new UserObject(0, oneSeed, 0, SECURITY); + oneFlash.setFlash(new FlashObject(DEPOSITS, TREE_DEPTH, SECURITY)); + UserObject twoFlash = new UserObject(1, twoSeed, 0, SECURITY); + twoFlash.setFlash(new FlashObject(DEPOSITS, TREE_DEPTH, SECURITY)); // USER ONE ArrayList oneDigests = Helpers.getDigestsForUser(oneFlash, TREE_DEPTH); @@ -111,8 +109,8 @@ public class Main { twoFlash.getFlash().setSettlementAddresses(settlementAddresses); // Set digest/key index - oneFlash.setIndex(oneDigests.size()); - twoFlash.setIndex(twoDigests.size()); + oneFlash.setSeedIndex(oneDigests.size()); + twoFlash.setSeedIndex(twoDigests.size()); System.out.println("Channel Setup completed!"); @@ -144,7 +142,7 @@ public class Main { ArrayList confirmedTransfers; // Try to make 10 transfers. - for (int i = 0; i < 2; i++) { + for (int i = 0; i < 6; i++) { // Create transaction helper and check if we need to add nodes CreateTransactionHelperObject helper = Helpers.getTransactionHelper(oneFlash.getFlash().getRoot()); diff --git a/src/main/java/iotaFlashWrapper/Model/FlashObject.java b/src/main/java/iotaFlashWrapper/Model/FlashObject.java index ac36c06..49d8754 100644 --- a/src/main/java/iotaFlashWrapper/Model/FlashObject.java +++ b/src/main/java/iotaFlashWrapper/Model/FlashObject.java @@ -1,30 +1,34 @@ package iotaFlashWrapper.Model; -import com.eclipsesource.v8.utils.V8ObjectUtils; - import java.util.*; public class FlashObject { - int signersCount = 2; - int balance; - List settlementAddresses; - List deposits; - Map outputs = new HashMap<>(); - List transfers = new ArrayList(); - Multisig root; - Multisig remainderAddress; + private int signersCount = 2; + private int balance; + private List settlementAddresses; + private List deposits; + private Map outputs = new HashMap<>(); + private List transfers = new ArrayList(); + private Multisig root; + private Multisig remainderAddress; + private int depth; + private int security; + public FlashObject(double[] deposits, int depth, int security) { - public FlashObject(int signersCount, int balance, double[] deposits) { - this.signersCount = signersCount; - this.balance = balance; + this.signersCount = deposits.length; + for (double dep : deposits) { + this.balance += dep; + } this.deposits = new ArrayList<>(); for (double deposit : deposits){ this.deposits.add(deposit); } + this.depth = depth; + this.security = security; } - public FlashObject(int signersCount, int balance, List settlementAddresses, List deposits, Map outputs, List transfers, Multisig root, Multisig remainderAddress) { + public FlashObject(int signersCount, int balance, List settlementAddresses, List deposits, Map outputs, List transfers, Multisig root, Multisig remainderAddress, int depth, int security) { this.signersCount = signersCount; this.balance = balance; this.settlementAddresses = settlementAddresses; @@ -33,6 +37,8 @@ public class FlashObject { this.transfers = transfers; this.root = root; this.remainderAddress = remainderAddress; + this.depth = depth; + this.security = security; } public Map toMap() { @@ -42,7 +48,8 @@ public class FlashObject { objectMap.put("root", root.toMap()); objectMap.put("remainderAddress", remainderAddress.toMap()); objectMap.put("settlementAddresses", getSettlementAddresses()); - + objectMap.put("depth", getDepth()); + objectMap.put("security", getSecurity()); // Wrap outputs inside an array. objectMap.put("outputs", getOutputs()); @@ -57,12 +64,20 @@ public class FlashObject { } + public int getBalance() { + return balance; + } + public int getSignersCount() { return signersCount; } - public int getBalance() { - return balance; + public int getDepth() { + return depth; + } + + public int getSecurity() { + return security; } public Multisig getRoot() { @@ -76,7 +91,6 @@ public class FlashObject { public Map getOutputs() { return outputs; } - public List getTransfers() { return transfers; } diff --git a/src/main/java/iotaFlashWrapper/Model/UserObject.java b/src/main/java/iotaFlashWrapper/Model/UserObject.java index f990620..8d20ee5 100644 --- a/src/main/java/iotaFlashWrapper/Model/UserObject.java +++ b/src/main/java/iotaFlashWrapper/Model/UserObject.java @@ -7,31 +7,21 @@ import java.util.Map; public class UserObject { private int userIndex; private String seed; - private int index = 0; + private int seedIndex; private int security; - private int depth; - private String address; - private ArrayList bundles = new ArrayList(); - private ArrayList partialDigests = new ArrayList(); - private ArrayList multisigDigests = new ArrayList(); + private FlashObject flash; - public UserObject(int userID, String seed, int depth, int security, String address, FlashObject flash) { + public UserObject(int userID, String seed, int seedIndex, int security) { this.userIndex = userID; this.seed = seed; - this.depth = depth; + this.seedIndex = seedIndex; this.security = security; - this.flash = flash; - this.address = address; } - public int incrementIndex() { - this.index = this.index + 1; - return index; - } - - public void add(Digest digest) { - partialDigests.add(digest); + public int incrementSeedIndex() { + this.seedIndex = this.seedIndex + 1; + return seedIndex; } @Override @@ -39,21 +29,9 @@ public class UserObject { String out = ""; out += "userIndex: " + userIndex + "\n"; out += "seed: " + seed + "\n"; - out += "index: " + index + "\n"; + out += "seedIndex: " + seedIndex + "\n"; out += "security: " + getSecurity() + "\n"; - out += "depth: " + depth + "\n"; out += "bundles: " + "\n"; - for (Bundle b: bundles) { - out += "\t" + b.toString() + "\n"; - } - out += "partialDigests: " + "\n"; - for (Digest d: partialDigests) { - out += "\t" + d.toString() + "\n"; - } - out += "multisigDigests: " + "\n"; - for (Multisig m: multisigDigests) { - out += "\t" + m.toString() + "\n"; - } out += "Flash: " + "\n"; out += flash.toString(); @@ -64,27 +42,8 @@ public class UserObject { Map objectMap = new HashMap<>(); objectMap.put("userIndex", getUserIndex()); objectMap.put("seed", getSeed()); - objectMap.put("index", getIndex()); + objectMap.put("seedIndex", getSeedIndex()); objectMap.put("security", getSecurity()); - objectMap.put("depth", depth); - - ArrayList bundleMaps = new ArrayList<>(); - for (Bundle b: bundles) { - bundleMaps.add(b.toMap()); - } - objectMap.put("bundles", bundleMaps); - - ArrayList partialDigestMaps = new ArrayList<>(); - for (Bundle b: bundles) { - partialDigestMaps.add(b.toMap()); - } - objectMap.put("partialDigests", partialDigestMaps); - - ArrayList multisigDigestsMaps = new ArrayList<>(); - for (Bundle b: bundles) { - partialDigestMaps.add(b.toMap()); - } - objectMap.put("multisigDigests", multisigDigestsMaps); objectMap.put("flash", flash.toMap()); return objectMap; } @@ -94,24 +53,12 @@ public class UserObject { * Getters and Setters */ - public void setMultisigDigests(ArrayList multisigDigests) { - this.multisigDigests = multisigDigests; - } - public void setFlash(FlashObject flash) { this.flash = flash; } - public void setIndex(int index) { - this.index = index; - } - - public void setBundles(ArrayList bundles) { - this.bundles = bundles; - } - - public ArrayList getMultisigDigests() { - return multisigDigests; + public void setSeedIndex(int index) { + this.seedIndex = index; } public int getSecurity() { @@ -122,32 +69,17 @@ public class UserObject { return seed; } - public int getIndex() { - return index; + public int getSeedIndex() { + return seedIndex; } public int getUserIndex() { return userIndex; } - public ArrayList getBundles() { - return bundles; - } - - public ArrayList getPartialDigests() { - return partialDigests; - } - public FlashObject getFlash() { return flash; } - public int getDepth() { - return depth; - } - - public String getAddress() { - return address; - } } diff --git a/src/main/java/iotaFlashWrapper/V8Converter.java b/src/main/java/iotaFlashWrapper/V8Converter.java index dfe808d..1be5e66 100644 --- a/src/main/java/iotaFlashWrapper/V8Converter.java +++ b/src/main/java/iotaFlashWrapper/V8Converter.java @@ -67,8 +67,9 @@ public class V8Converter { } ArrayList transfers = bundleListFromArrayList((ArrayList) inputMap.get("transfers")); Map outputs = (Map) inputMap.get("outputs"); - - return new FlashObject(singersCount, balance, settlementAddresses, deposits, outputs, transfers, root, remainderAddress); + Integer depth = (Integer) inputMap.get("depth"); + Integer security = (Integer) inputMap.get("security"); + return new FlashObject(singersCount, balance, settlementAddresses, deposits, outputs, transfers, root, remainderAddress, depth ,security); } public static V8Array bundleListToV8Array(V8 engine, List bundles) {