diff --git a/README.md b/README.md
index 24cb33c..88d7e04 100644
--- a/README.md
+++ b/README.md
@@ -9,17 +9,17 @@ If you have any ideas please submit a request (I am totally not a Java guy so...
#### Multisig
- [x] composeAddress
-- [x] updateLeafToRoot (needs testing)
+- [x] updateLeafToRoot
- [x] getDigest
#### Model.Transfer
-- [x] prepare (needs testing)
-- [x] compose (needs testing)
+- [x] prepare
+- [x] compose
- [x] close (needs testing)
-- [ ] applyTransfers
-- [ ] appliedSignatures
-- [ ] getDiff
-- [ ] sign
+- [x] applyTransfers
+- [x] appliedSignatures
+- [ ] getDiff (not used at the moment)
+- [x] sign
@@ -28,6 +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.
diff --git a/iotaflashlibjswrapper.iml b/iotaflashlibjswrapper.iml
index b793751..94d5fa5 100644
--- a/iotaflashlibjswrapper.iml
+++ b/iotaflashlibjswrapper.iml
@@ -13,5 +13,6 @@
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b9968dc..d240599 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,13 @@
iota~lib~java
v0.9.10
+
+
+ com.google.code.gson
+ gson
+ 2.8.2
+ compile
+
diff --git a/res/iota.flash.js b/res/iota.flash.js
index 0e72137..b155739 100644
--- a/res/iota.flash.js
+++ b/res/iota.flash.js
@@ -9472,7 +9472,7 @@ var is_null = function(arr) {
}
var trits_to_words = function(trits) {
- if (trits.length != 243) {
+ if (trits.length != 243) {
throw "Invalid trits length";
}
diff --git a/src/main/java/Helpers.java b/src/main/java/Helpers.java
index 45fd8fa..40f3960 100644
--- a/src/main/java/Helpers.java
+++ b/src/main/java/Helpers.java
@@ -1,6 +1,8 @@
import Model.*;
import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
public class Helpers {
public static ArrayList createTransaction(UserObject user, ArrayList transfers, boolean shouldClose) {
@@ -11,11 +13,10 @@ public class Helpers {
System.out.println("No more addresses in channel.");
}
- ArrayList newTransfers;
+ ArrayList newTransfers;
if (shouldClose) {
- newTransfers = new ArrayList<>();
- // newTransfers = IotaFlashBridge.close(user.getFlash().getSettlementAddresses(), user.getFlash().deposits);
+ newTransfers = IotaFlashBridge.close(user.getFlash().getSettlementAddresses(), user.getFlash().getDeposits());
} else {
newTransfers = IotaFlashBridge.prepare(
user.getFlash().getSettlementAddresses(),
@@ -23,6 +24,7 @@ public class Helpers {
user.getUserIndex(),
transfers
);
+
}
ArrayList bundles = IotaFlashBridge.compose(
@@ -42,6 +44,33 @@ public class Helpers {
return IotaFlashBridge.sign(user.getFlash().getRoot(), user.getSeed(), bundles);
}
+ public static ArrayList appliedSignatures(ArrayList bundles, ArrayList signatures) {
+ ArrayList clonedBundles = clone(bundles);
+ bundles.clone();
+
+ for (int i = 0; i < bundles.size(); i++) {
+ Signature sig = signatures.get(i);
+ Bundle b = bundles.get(i);
+ if (sig == null) {
+ continue;
+ }
+
+ ArrayList transactions = b.getBundles();
+ String addy = transactions.stream().filter(tx -> tx.getValue() < 0).findFirst().get().getAddress();
+ List tmp = transactions.stream()
+ .filter(tx -> tx.getAddress().equals(addy))
+ .collect(Collectors.toList());
+
+ tmp = tmp.subList(sig.getIndex(), sig.getIndex() + sig.getSignatureFragments().size());
+
+ for (int j = 0; j < tmp.size(); j++) {
+ tmp.get(j).setSignatureFragments(sig.getSignatureFragments().get(j));
+ }
+ }
+
+ return clonedBundles;
+ }
+
public static void applyTransfers(UserObject user, ArrayList bundles) {
IotaFlashBridge.applayTransfers(
user.getFlash().getRoot(),
@@ -52,4 +81,12 @@ public class Helpers {
bundles
);
}
+
+ public static ArrayList clone(ArrayList bundles) {
+ ArrayList clonedBundles = new ArrayList<>();
+ for (Bundle b : bundles) {
+ clonedBundles.add(b.clone());
+ }
+ return clonedBundles;
+ }
}
diff --git a/src/main/java/IotaFlashBridge.java b/src/main/java/IotaFlashBridge.java
index 0eddb4b..ee1143c 100644
--- a/src/main/java/IotaFlashBridge.java
+++ b/src/main/java/IotaFlashBridge.java
@@ -25,6 +25,14 @@ public class IotaFlashBridge {
engine.executeVoidScript(file);
multisig = (V8Object) engine.executeScript("iotaFlash.multisig");
transfer = (V8Object) engine.executeScript("iotaFlash.transfer");
+
+ Model.Console console = new Model.Console();
+ V8Object v8Console = new V8Object(engine);
+ engine.add("console", v8Console);
+ v8Console.registerJavaMethod(console, "log", "log", new Class>[] { String.class });
+ v8Console.registerJavaMethod(console, "err", "err", new Class>[] { String.class });
+ v8Console.release();
+ engine.executeScript("console.log('Connected JS console to V8Engine output.');");
}
/**
@@ -93,11 +101,8 @@ public class IotaFlashBridge {
V8Object ret = multisig.executeObjectFunction("updateLeafToRoot", params);
int generate = ret.getInteger("generate");
- Map multiSigMap = V8ObjectUtils.toMap((V8Object) ret.getObject("multisig"));
- // Parse result into Java Obj.
- String addr = (String) multiSigMap.get("address");
- int secSum = (Integer) multiSigMap.get("securitySum");
- MultisigAddress multisig = new MultisigAddress(addr, secSum);
+ V8Object multisigObject = (V8Object) ret.getObject("multisig");
+ MultisigAddress multisig = V8Converter.multisigAddressFromV8Object(multisigObject);
return new CreateTransactionHelperObject(generate, multisig);
}
@@ -110,7 +115,7 @@ public class IotaFlashBridge {
* @param transfers array of all transfers (value, address) pairs
* @return
*/
- public static ArrayList prepare(ArrayList settlementAddresses, ArrayList deposits, int index, ArrayList transfers) {
+ public static ArrayList prepare(ArrayList settlementAddresses, ArrayList deposits, int index, ArrayList transfers) {
// Now put all params into JS ready array.
List