From 9191ac181cf606645fd82b1bb0d58bac2382bef1 Mon Sep 17 00:00:00 2001 From: gosticks Date: Mon, 15 Jan 2018 17:51:50 +0100 Subject: [PATCH] fixed transactions not updating flash channel state --- README.md | 4 +- iotaflashlibjswrapper.iml | 2 +- pom.xml | 7 +- res/iota.flash.helper.js | 13 +++ res/iota.flash.js | 1 + .../flashwifi/flashwrapper}/Helpers.java | 24 +++-- .../flashwrapper}/IotaFlashBridge.java | 28 +++++- .../flashwrapper}/IotaFlashInterface.java | 12 ++- .../flashwifi/flashwrapper}/Main.java | 53 +++++------ .../flashwifi/flashwrapper}/Model/Bundle.java | 5 +- .../flashwrapper}/Model/Console.java | 2 +- .../Model/CreateTransactionHelperObject.java | 2 +- .../flashwifi/flashwrapper}/Model/Digest.java | 2 +- .../flashwrapper}/Model/FlashObject.java | 40 +++++++- .../flashwrapper}/Model/MultisigAddress.java | 2 +- .../flashwrapper}/Model/Signature.java | 6 +- .../flashwrapper}/Model/Transaction.java | 2 +- .../flashwrapper}/Model/Transfer.java | 2 +- .../flashwrapper}/Model/UserObject.java | 40 +++++++- .../flashwifi/flashwrapper}/V8Converter.java | 94 +++++++++++++------ 20 files changed, 240 insertions(+), 101 deletions(-) create mode 100644 res/iota.flash.helper.js rename src/main/java/{ => com/flashwifi/flashwrapper}/Helpers.java (84%) rename src/main/java/{ => com/flashwifi/flashwrapper}/IotaFlashBridge.java (89%) rename src/main/java/{ => com/flashwifi/flashwrapper}/IotaFlashInterface.java (84%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Main.java (91%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Bundle.java (93%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Console.java (84%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/CreateTransactionHelperObject.java (90%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Digest.java (95%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/FlashObject.java (61%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/MultisigAddress.java (98%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Signature.java (89%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Transaction.java (99%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/Transfer.java (98%) rename src/main/java/{ => com/flashwifi/flashwrapper}/Model/UserObject.java (67%) rename src/main/java/{ => com/flashwifi/flashwrapper}/V8Converter.java (73%) diff --git a/README.md b/README.md index 88d7e04..7cacdfa 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ If you have any ideas please submit a request (I am totally not a Java guy so... - [x] updateLeafToRoot - [x] getDigest -#### Model.Transfer +#### com.flashwifi.flashwrapper.Model.Transfer - [x] prepare - [x] compose - [x] close (needs testing) @@ -28,7 +28,7 @@ If you have any ideas please submit a request (I am totally not a Java guy so... 1. Clone repo 2. Update maven ressources 3. That's it. -4. You can run a test transaction by running the main func in the Main Class. +4. You can run a test transaction by running the main func in the com.flashwifi.flashwrapper.Main Class. diff --git a/iotaflashlibjswrapper.iml b/iotaflashlibjswrapper.iml index 94d5fa5..f96270c 100644 --- a/iotaflashlibjswrapper.iml +++ b/iotaflashlibjswrapper.iml @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d240599..eb3f783 100644 --- a/pom.xml +++ b/pom.xml @@ -21,11 +21,13 @@ j2v8_macosx_x86_64 4.6.0 + com.github.iotaledger iota~lib~java - v0.9.10 + 0.9.10 + com.google.code.gson @@ -37,13 +39,10 @@ - 1.8 1.8 - UTF-8 UTF-8 - \ No newline at end of file diff --git a/res/iota.flash.helper.js b/res/iota.flash.helper.js new file mode 100644 index 0000000..f8e7f41 --- /dev/null +++ b/res/iota.flash.helper.js @@ -0,0 +1,13 @@ +var Helper = { + applyTransfers: function(flash, bundles) { + iotaFlash.transfer.applyTransfers( + flash.root, + flash.deposits, + flash.outputs, + flash.remainderAddress, + flash.transfers, + bundles + ) + return flash + } +} diff --git a/res/iota.flash.js b/res/iota.flash.js index b155739..e29a861 100644 --- a/res/iota.flash.js +++ b/res/iota.flash.js @@ -10297,6 +10297,7 @@ function close(settlement, deposits) { * @param {array} transfers */ function applyTransfers(root, deposit, outputs, remainder, history, transfers) { + if (transfers.filter(transfer => transfer.filter(tx => tx.value < 0) .filter(tx => !IOTACrypto.utils.validateSignatures(transfer, tx.address)) diff --git a/src/main/java/Helpers.java b/src/main/java/com/flashwifi/flashwrapper/Helpers.java similarity index 84% rename from src/main/java/Helpers.java rename to src/main/java/com/flashwifi/flashwrapper/Helpers.java index 40f3960..25dfab5 100644 --- a/src/main/java/Helpers.java +++ b/src/main/java/com/flashwifi/flashwrapper/Helpers.java @@ -1,4 +1,7 @@ -import Model.*; +package com.flashwifi.flashwrapper; + +import com.flashwifi.flashwrapper.Model.*; + import java.util.ArrayList; import java.util.List; @@ -7,7 +10,6 @@ import java.util.stream.Collectors; public class Helpers { public static ArrayList createTransaction(UserObject user, ArrayList transfers, boolean shouldClose) { CreateTransactionHelperObject toUse = IotaFlashBridge.updateLeafToRoot(user.getFlash().getRoot()); - if (toUse.getGenerate() != 0) { // TODO: tell the server to gen new address. System.out.println("No more addresses in channel."); @@ -72,14 +74,16 @@ public class Helpers { } public static void applyTransfers(UserObject user, ArrayList bundles) { - IotaFlashBridge.applayTransfers( - user.getFlash().getRoot(), - user.getFlash().getDeposits(), - user.getFlash().getOutputs(), - user.getFlash().getRemainderAddress(), - user.getFlash().getTransfers(), - bundles - ); + FlashObject flash = IotaFlashBridge.applyTransfersToUser(user, bundles); + user.setFlash(flash); + // com.flashwifi.flashwrapper.IotaFlashBridge.applyTransfers( +// user.getFlash().getRoot(), +// user.getFlash().getDeposits(), +// user.getFlash().getOutputs(), +// user.getFlash().getRemainderAddress(), +// user.getFlash().getTransfers(), +// bundles +// ); } public static ArrayList clone(ArrayList bundles) { diff --git a/src/main/java/IotaFlashBridge.java b/src/main/java/com/flashwifi/flashwrapper/IotaFlashBridge.java similarity index 89% rename from src/main/java/IotaFlashBridge.java rename to src/main/java/com/flashwifi/flashwrapper/IotaFlashBridge.java index ee1143c..df757bf 100644 --- a/src/main/java/IotaFlashBridge.java +++ b/src/main/java/com/flashwifi/flashwrapper/IotaFlashBridge.java @@ -1,4 +1,6 @@ -import Model.*; +package com.flashwifi.flashwrapper; + +import com.flashwifi.flashwrapper.Model.*; import com.eclipsesource.v8.*; import com.eclipsesource.v8.utils.V8ObjectUtils; @@ -13,9 +15,11 @@ import java.util.Map; public class IotaFlashBridge { private static String iotaLibPath = "res/iota.flash.js"; + private static String iotaHelperLibPath = "res/iota.flash.helper.js"; private static V8 engine; private static V8Object transfer; private static V8Object multisig; + private static V8Object helper; public static void boot() throws IOException { String file = readFile(iotaLibPath, Charset.defaultCharset()); @@ -23,10 +27,12 @@ public class IotaFlashBridge { engine = V8.createV8Runtime(); // Eval lib into current v8 context. engine.executeVoidScript(file); + engine.executeVoidScript(readFile(iotaHelperLibPath, Charset.defaultCharset())); multisig = (V8Object) engine.executeScript("iotaFlash.multisig"); transfer = (V8Object) engine.executeScript("iotaFlash.transfer"); + helper = (V8Object) engine.executeScript("Helper"); - Model.Console console = new Model.Console(); + com.flashwifi.flashwrapper.Model.Console console = new com.flashwifi.flashwrapper.Model.Console(); V8Object v8Console = new V8Object(engine); engine.add("console", v8Console); v8Console.registerJavaMethod(console, "log", "log", new Class[] { String.class }); @@ -61,6 +67,8 @@ public class IotaFlashBridge { int secSum = (Integer) resultMap.get("securitySum"); MultisigAddress ret = new MultisigAddress(addr, secSum); + params.release(); + retV8.release(); return ret; } @@ -250,7 +258,7 @@ public class IotaFlashBridge { * @param signedBundles * @return */ - public static void applayTransfers(MultisigAddress root, + public static void applyTransfers(MultisigAddress root, ArrayList deposits, ArrayList outputs, MultisigAddress remainderAddress, @@ -268,6 +276,20 @@ public class IotaFlashBridge { transfer.executeFunction("applyTransfers", V8ObjectUtils.toV8Array(engine, params)); } + public static FlashObject applyTransfersToUser(UserObject user, ArrayList signedBundles) { + List params = new ArrayList<>(); + params.add(V8Converter.flashObjectToV8Object(engine, user.getFlash())); + params.add(V8Converter.bundleListToV8Array(engine, signedBundles)); + V8Array paramV8 = V8ObjectUtils.toV8Array(engine, params); + V8Object ret = helper.executeObjectFunction("applyTransfers", paramV8); + Map obj = V8ObjectUtils.toMap(ret); + + paramV8.release(); + FlashObject flash = V8Converter.flashObjectFromV8Object(ret); + ret.release(); + return flash; + } + /// Utils /** diff --git a/src/main/java/IotaFlashInterface.java b/src/main/java/com/flashwifi/flashwrapper/IotaFlashInterface.java similarity index 84% rename from src/main/java/IotaFlashInterface.java rename to src/main/java/com/flashwifi/flashwrapper/IotaFlashInterface.java index f23ccd7..778dda4 100644 --- a/src/main/java/IotaFlashInterface.java +++ b/src/main/java/com/flashwifi/flashwrapper/IotaFlashInterface.java @@ -1,7 +1,9 @@ -import Model.Bundle; -import Model.Digest; -import Model.MultisigAddress; -import Model.Transfer; +package com.flashwifi.flashwrapper; + +import com.flashwifi.flashwrapper.Model.Bundle; +import com.flashwifi.flashwrapper.Model.Digest; +import com.flashwifi.flashwrapper.Model.MultisigAddress; +import com.flashwifi.flashwrapper.Model.Transfer; import java.util.ArrayList; import java.util.List; @@ -12,7 +14,7 @@ public interface IotaFlashInterface { public void updateLeafToRoot(MultisigAddress root); - // Model.Transfer + // com.flashwifi.flashwrapper.Model.Transfer public Object prepare(ArrayList settlementAddresses, ArrayList deposits, int index, ArrayList transfers); public List compose(int balance, ArrayList deposits, ArrayList outputs, MultisigAddress root, String remainderAddress, ArrayList history, ArrayList transfers, boolean close); diff --git a/src/main/java/Main.java b/src/main/java/com/flashwifi/flashwrapper/Main.java similarity index 91% rename from src/main/java/Main.java rename to src/main/java/com/flashwifi/flashwrapper/Main.java index 03ea3d1..287fe95 100644 --- a/src/main/java/Main.java +++ b/src/main/java/com/flashwifi/flashwrapper/Main.java @@ -1,5 +1,6 @@ +package com.flashwifi.flashwrapper; -import Model.*; +import com.flashwifi.flashwrapper.Model.*; import java.io.IOException; import java.util.ArrayList; @@ -96,38 +97,17 @@ public class Main { System.out.println("Channel Setup!"); - ArrayList transfers = new ArrayList<>(); - transfers.add(new Transfer(twoSettlement, 200)); + transfers.add(new Transfer(twoSettlement, 1)); + transfers.add(new Transfer(twoSettlement, 400)); System.out.println(oneFlash); System.out.println("Creating a transaction: 200 to " + twoSettlement); ArrayList bundles = Helpers.createTransaction(oneFlash, transfers, false); - System.out.println("[SUCCESS] createTransaction completed"); - - // Sign the bundles. - // Get signatures for the bundles - ArrayList oneSignatures = Helpers.signTransaction(oneFlash, bundles); - - // Generate USER TWO'S Singatures - ArrayList twoSignatures = Helpers.signTransaction(twoFlash, bundles); - - System.out.println("[SUCCESS] Created signatures for users."); - - // Sign bundle with your USER ONE'S signatures - ArrayList signedBundles = IotaFlashBridge.appliedSignatures(bundles, oneSignatures); - - System.out.println("[SUCCESS] Parial applied Signature for User one on transfer bundle"); - - - // ADD USER TWOS'S signatures to the partially signed bundles - signedBundles = IotaFlashBridge.appliedSignatures(signedBundles, twoSignatures); - - System.out.println("[SUCCESS] Signed bundle bu second user. Bundle ready."); - - + ArrayList partialSignedBundles = signTransfer(bundles, oneFlash); + ArrayList signedBundles = signTransfer(partialSignedBundles, twoFlash); ///////////////////////////////// /// APPLY SIGNED BUNDLES @@ -154,7 +134,7 @@ public class Main { /* // Supplying the CORRECT varibles to create a closing bundle - bundles = Helpers.createTransaction( + bundles = com.flashwifi.flashwrapper.Helpers.createTransaction( oneFlash, oneFlash.getFlash().getSettlementAddresses(), true @@ -164,10 +144,10 @@ public class Main { /// SIGN BUNDLES // Get signatures for the bundles - oneSignatures = Helpers.signTransaction(oneFlash, bundles) + oneSignatures = com.flashwifi.flashwrapper.Helpers.signTransaction(oneFlash, bundles) // Generate USER TWO'S Singatures - twoSignatures = Helpers.signTransaction(twoFlash, bundles) + twoSignatures = com.flashwifi.flashwrapper.Helpers.signTransaction(twoFlash, bundles) // Sign bundle with your USER ONE'S signatures signedBundles = transfer.appliedSignatures(bundles, oneSignatures) @@ -179,12 +159,12 @@ public class Main { /// APPLY SIGNED BUNDLES // Apply transfers to User ONE - oneFlash = Helpers.applyTransfers(oneFlash, signedBundles) + oneFlash = com.flashwifi.flashwrapper.Helpers.applyTransfers(oneFlash, signedBundles) // Save latest channel bundles oneFlash.bundles = signedBundles // Apply transfers to User TWO - twoFlash = Helpers.applyTransfers(twoFlash, signedBundles) + twoFlash = com.flashwifi.flashwrapper.Helpers.applyTransfers(twoFlash, signedBundles) // Save latest channel bundles twoFlash.bundles = signedBundles @@ -192,6 +172,17 @@ public class Main { console.log("Final Bundle to be attached: ")*/ } + private static ArrayList signTransfer(ArrayList bundles, UserObject user) { + System.out.println("[SUCCESS] Created signatures for users."); + ArrayList oneSignatures = Helpers.signTransaction(user, bundles); + + System.out.println("[SUCCESS] Parial applied Signature for User one on transfer bundle"); + // Sign bundle with your USER ONE'S signatures + ArrayList signedBundles = IotaFlashBridge.appliedSignatures(bundles, oneSignatures); + + return signedBundles; + } + private static void setupUser(UserObject user, int TREE_DEPTH) { // Create digests for the start of the channel for (int i = 0; i < TREE_DEPTH + 1; i++) { diff --git a/src/main/java/Model/Bundle.java b/src/main/java/com/flashwifi/flashwrapper/Model/Bundle.java similarity index 93% rename from src/main/java/Model/Bundle.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Bundle.java index 61645ba..a39c299 100644 --- a/src/main/java/Model/Bundle.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Bundle.java @@ -1,7 +1,4 @@ -package Model; - -import com.eclipsesource.v8.V8; -import com.eclipsesource.v8.V8Array; +package com.flashwifi.flashwrapper.Model; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/Model/Console.java b/src/main/java/com/flashwifi/flashwrapper/Model/Console.java similarity index 84% rename from src/main/java/Model/Console.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Console.java index 73af927..fcd8afc 100644 --- a/src/main/java/Model/Console.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Console.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; public class Console { diff --git a/src/main/java/Model/CreateTransactionHelperObject.java b/src/main/java/com/flashwifi/flashwrapper/Model/CreateTransactionHelperObject.java similarity index 90% rename from src/main/java/Model/CreateTransactionHelperObject.java rename to src/main/java/com/flashwifi/flashwrapper/Model/CreateTransactionHelperObject.java index 2b018d7..a2f60ce 100644 --- a/src/main/java/Model/CreateTransactionHelperObject.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/CreateTransactionHelperObject.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; public class CreateTransactionHelperObject { private int generate = 0; diff --git a/src/main/java/Model/Digest.java b/src/main/java/com/flashwifi/flashwrapper/Model/Digest.java similarity index 95% rename from src/main/java/Model/Digest.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Digest.java index 2f25079..0f40973 100644 --- a/src/main/java/Model/Digest.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Digest.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/Model/FlashObject.java b/src/main/java/com/flashwifi/flashwrapper/Model/FlashObject.java similarity index 61% rename from src/main/java/Model/FlashObject.java rename to src/main/java/com/flashwifi/flashwrapper/Model/FlashObject.java index b8e30c3..b43a377 100644 --- a/src/main/java/Model/FlashObject.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/FlashObject.java @@ -1,6 +1,8 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class FlashObject { int signersCount = 2; @@ -19,6 +21,17 @@ public class FlashObject { this.deposits = deposits; } + public FlashObject(int signersCount, int balance, ArrayList settlementAddresses, ArrayList deposits, ArrayList outputs, ArrayList transfers, MultisigAddress root, MultisigAddress remainderAddress) { + this.signersCount = signersCount; + this.balance = balance; + this.settlementAddresses = settlementAddresses; + this.deposits = deposits; + this.outputs = outputs; + this.transfers = transfers; + this.root = root; + this.remainderAddress = remainderAddress; + } + @Override public String toString() { String out = ""; @@ -48,6 +61,31 @@ public class FlashObject { return out; } + public Map toMap() { + Map objectMap = new HashMap<>(); + objectMap.put("signersCount", signersCount); + objectMap.put("balance", getBalance()); + objectMap.put("root", root.toMap()); + objectMap.put("remainderAddress", remainderAddress.toMap()); + objectMap.put("settlementAddresses", getSettlementAddresses()); + + ArrayList outputMap = new ArrayList<>(); + for (Bundle b: outputs) { + outputMap.add(b.toMap()); + } + objectMap.put("outputs", outputMap); + + objectMap.put("deposits", getDeposits()); + + ArrayList transfersMap = new ArrayList<>(); + for (Bundle b: transfers) { + outputMap.add(b.toMap()); + } + objectMap.put("transfers", transfersMap); + return objectMap; + + } + public int getSignersCount() { return signersCount; } diff --git a/src/main/java/Model/MultisigAddress.java b/src/main/java/com/flashwifi/flashwrapper/Model/MultisigAddress.java similarity index 98% rename from src/main/java/Model/MultisigAddress.java rename to src/main/java/com/flashwifi/flashwrapper/Model/MultisigAddress.java index a9d7062..4196b1c 100644 --- a/src/main/java/Model/MultisigAddress.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/MultisigAddress.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import com.eclipsesource.v8.V8; import com.eclipsesource.v8.V8Object; diff --git a/src/main/java/Model/Signature.java b/src/main/java/com/flashwifi/flashwrapper/Model/Signature.java similarity index 89% rename from src/main/java/Model/Signature.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Signature.java index a8a2b9d..2abdac8 100644 --- a/src/main/java/Model/Signature.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Signature.java @@ -1,10 +1,10 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import java.util.ArrayList; import java.util.List; /** - * This class represents an Model.Signature. + * This class represents an com.flashwifi.flashwrapper.Model.Signature. * * @author Adrian **/ @@ -15,7 +15,7 @@ public class Signature { private List signatureFragments; /** - * Initializes a new instance of the Model.Signature class. + * Initializes a new instance of the com.flashwifi.flashwrapper.Model.Signature class. */ public Signature() { this.signatureFragments = new ArrayList<>(); diff --git a/src/main/java/Model/Transaction.java b/src/main/java/com/flashwifi/flashwrapper/Model/Transaction.java similarity index 99% rename from src/main/java/Model/Transaction.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Transaction.java index a6a0e6a..2965bad 100644 --- a/src/main/java/Model/Transaction.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Transaction.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/Model/Transfer.java b/src/main/java/com/flashwifi/flashwrapper/Model/Transfer.java similarity index 98% rename from src/main/java/Model/Transfer.java rename to src/main/java/com/flashwifi/flashwrapper/Model/Transfer.java index ed0f388..c08331a 100644 --- a/src/main/java/Model/Transfer.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/Transfer.java @@ -1,4 +1,4 @@ -package Model; +package com.flashwifi.flashwrapper.Model; import com.google.gson.Gson; diff --git a/src/main/java/Model/UserObject.java b/src/main/java/com/flashwifi/flashwrapper/Model/UserObject.java similarity index 67% rename from src/main/java/Model/UserObject.java rename to src/main/java/com/flashwifi/flashwrapper/Model/UserObject.java index e5f6f3d..5856af0 100644 --- a/src/main/java/Model/UserObject.java +++ b/src/main/java/com/flashwifi/flashwrapper/Model/UserObject.java @@ -1,7 +1,8 @@ -package Model; +package com.flashwifi.flashwrapper.Model; -import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class UserObject { private int userIndex = 1; @@ -55,17 +56,48 @@ public class UserObject { return out; } + public Map toMap() { + Map objectMap = new HashMap<>(); + objectMap.put("userIndex", getUserIndex()); + objectMap.put("seed", getSeed()); + objectMap.put("index", getIndex()); + 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; + } + /** * * 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; } diff --git a/src/main/java/V8Converter.java b/src/main/java/com/flashwifi/flashwrapper/V8Converter.java similarity index 73% rename from src/main/java/V8Converter.java rename to src/main/java/com/flashwifi/flashwrapper/V8Converter.java index 672374e..f81a466 100644 --- a/src/main/java/V8Converter.java +++ b/src/main/java/com/flashwifi/flashwrapper/V8Converter.java @@ -1,13 +1,11 @@ -import Model.*; +package com.flashwifi.flashwrapper; + +import com.flashwifi.flashwrapper.Model.*; import com.eclipsesource.v8.V8; import com.eclipsesource.v8.V8Array; import com.eclipsesource.v8.V8Object; -import com.eclipsesource.v8.V8ResultUndefined; import com.eclipsesource.v8.utils.V8ObjectUtils; -import com.sun.org.apache.xpath.internal.operations.Mult; -import sun.rmi.server.InactiveGroupException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -42,6 +40,25 @@ public class V8Converter { return V8ObjectUtils.toV8Object(engine, sigMapg); } + public static V8Object flashObjectToV8Object(V8 engine, FlashObject flash) { + return V8ObjectUtils.toV8Object(engine, flash.toMap()); + } + + public static FlashObject flashObjectFromV8Object(V8Object input) { + Map inputMap = V8ObjectUtils.toMap(input); + + Integer singersCount = (Integer) inputMap.get("signersCount"); + Integer balance = (Integer) inputMap.get("balance"); + ArrayList settlementAddresses = (ArrayList) inputMap.get("settlementAddresses"); + MultisigAddress root = multisigAddressFromPropertyMap((Map) inputMap.get("root")); + MultisigAddress remainderAddress = multisigAddressFromPropertyMap((Map) inputMap.get("remainderAddress")); + ArrayList deposits = (ArrayList) inputMap.get("deposits"); + ArrayList transfers = bundleListFromArrayList((ArrayList) inputMap.get("transfers")); + ArrayList outputs = bundleListFromArrayList((ArrayList) inputMap.get("outputs")); + + return new FlashObject(singersCount, balance, settlementAddresses, deposits, outputs, transfers, root, remainderAddress); + } + public static V8Array bundleListToV8Array(V8 engine, ArrayList bundles) { List bundleTmp = new ArrayList(); @@ -55,6 +72,25 @@ public class V8Converter { return V8ObjectUtils.toV8Array(engine, bundleTmp); } + public static Bundle bundleFromArrayList(ArrayList bundleObject) { + ArrayList tr = new ArrayList<>(); + for (Object transaction: bundleObject) { + tr.add(transactionFromObject(transaction)); + } + return new Bundle(tr); + } + + public static ArrayList bundleListFromArrayList(ArrayList input) { + ArrayList ret = new ArrayList<>(); + + for (Object o: input) { + ret.add(bundleFromArrayList((ArrayList) o)); + } + + + return ret; + } + public static MultisigAddress multisigAddressFromV8Object(V8Object input) { Map multiSigMap = V8ObjectUtils.toMap(input); return multisigAddressFromPropertyMap(multiSigMap); @@ -129,31 +165,35 @@ public class V8Converter { return transfers; } + public static Transfer transferFromMap(Map values) { + String obsoleteTag = (String) values.get("obsoleteTag"); + String address = (String) values.get("address"); + Long value = parseLongFromObject(values.get("value")); + if (values.get("timestamp") instanceof String) { + String timestamp = (String) values.get("timestamp"); + String hash = (String) values.get("hash"); + Boolean persistance = (Boolean) values.get("persistance"); + String message = (String) values.get("message"); + String tag = (String) values.get("tag"); + return new Transfer( + timestamp, + address, + hash, + persistance, + value, + message, + tag + ); + } else { + System.out.println("[WARN] Could not find key for full transfer creating slim transfer object"); + return new Transfer(address, value); + } + } + public static Transfer transferFromObject(Object input) { if (input instanceof Map) { Map values = (Map) input; - String obsoleteTag = (String) values.get("obsoleteTag"); - String address = (String) values.get("address"); - Long value = parseLongFromObject(values.get("value")); - if (values.get("timestamp") instanceof String) { - String timestamp = (String) values.get("timestamp"); - String hash = (String) values.get("hash"); - Boolean persistance = (Boolean) values.get("persistance"); - String message = (String) values.get("message"); - String tag = (String) values.get("tag"); - return new Transfer( - timestamp, - address, - hash, - persistance, - value, - message, - tag - ); - } else { - System.out.println("[WARN] Could not find key for full transfer creating slim transfer object"); - return new Transfer(address, value); - } + return transferFromMap(values); } return null; }