From f572d831e00373ab2c5e13f58060d85a8750f31c Mon Sep 17 00:00:00 2001 From: gosticks Date: Mon, 22 Jan 2018 16:12:57 +0100 Subject: [PATCH] Fixed not storing outputs and transactions missing. --- .../iotaFlashWrapper/IotaFlashBridge.java | 23 +++--- .../java/iotaFlashWrapper/Model/Bundle.java | 26 +++---- .../iotaFlashWrapper/Model/FlashObject.java | 71 ++++++------------- .../iotaFlashWrapper/Model/GeneratedSeed.java | 33 +++++++++ .../java/iotaFlashWrapper/V8Converter.java | 40 ++++++++--- 5 files changed, 106 insertions(+), 87 deletions(-) diff --git a/src/main/java/iotaFlashWrapper/IotaFlashBridge.java b/src/main/java/iotaFlashWrapper/IotaFlashBridge.java index 1d3db05..3404206 100644 --- a/src/main/java/iotaFlashWrapper/IotaFlashBridge.java +++ b/src/main/java/iotaFlashWrapper/IotaFlashBridge.java @@ -57,17 +57,12 @@ public class IotaFlashBridge { V8Array params = V8ObjectUtils.toV8Array(engine, paramsList); V8Object retV8 = multisig.executeObjectFunction("composeAddress", params); - - // Parse return values from JS into Java world. - Map resultMap = V8ObjectUtils.toMap(retV8); - // Parse result into Java Obj. - String addr = (String) resultMap.get("address"); - int secSum = (Integer) resultMap.get("securitySum"); - Multisig ret = new Multisig(addr, secSum); + // Create multisig. + Multisig multisig = V8Converter.multisigAddressFromV8Object(retV8); params.release(); retV8.release(); - return ret; + return multisig; } /** @@ -121,7 +116,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(List settlementAddresses, List deposits, int index, List transfers) { // Now put all params into JS ready array. List params = new ArrayList<>(); @@ -142,7 +137,7 @@ public class IotaFlashBridge { * @param deposits * @return */ - public static ArrayList close(ArrayList settlementAddresses, ArrayList deposits) { + public static ArrayList close(List settlementAddresses, List deposits) { V8Array saJS = V8ObjectUtils.toV8Array(engine, settlementAddresses); // Deposits V8Array depositsJS = V8ObjectUtils.toV8Array(engine, deposits); @@ -170,18 +165,18 @@ public class IotaFlashBridge { */ public static ArrayList compose(int balance, List deposits, - ArrayList outputs, + Map outputs, Multisig root, Multisig remainderAddress, - ArrayList history, - ArrayList transfers, + List history, + List transfers, boolean close) { // Create params. // Now put all params into JS ready array. List params = new ArrayList(); params.add(balance); params.add(V8ObjectUtils.toV8Array(engine, deposits)); - params.add(V8Converter.bundleListToV8Array(engine, outputs)); + params.add(V8ObjectUtils.toV8Object(engine, outputs)); params.add(V8Converter.multisigToV8Object(engine, root)); params.add(V8Converter.multisigToV8Object(engine, remainderAddress)); params.add(V8Converter.bundleListToV8Array(engine, history)); diff --git a/src/main/java/iotaFlashWrapper/Model/Bundle.java b/src/main/java/iotaFlashWrapper/Model/Bundle.java index e504ff5..f76bd14 100644 --- a/src/main/java/iotaFlashWrapper/Model/Bundle.java +++ b/src/main/java/iotaFlashWrapper/Model/Bundle.java @@ -1,33 +1,29 @@ package iotaFlashWrapper.Model; +import iotaFlashWrapper.Helpers; +import iotaFlashWrapper.V8Converter; +import jota.model.Transaction; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Bundle extends jota.model.Bundle { - private List wrappedTransactions = new ArrayList<>(); public Bundle(List transactions) { - super((ArrayList) (ArrayList) transactions, transactions.size()); + super(transactions, transactions.size()); } public Bundle() { super(); } - public List getWrappedTransactions() { - return wrappedTransactions; - } - - public void setWrappedTransactions(List wrappedTransactions) { - this.wrappedTransactions = wrappedTransactions; - } @Override public String toString() { String out = ""; - for (Transaction t: getWrappedTransactions()) { + for (Transaction t: getTransactions()) { out += t.toString(); out += "\n"; } @@ -38,7 +34,7 @@ public class Bundle extends jota.model.Bundle { String[] bundleTrytes = new String[getTransactions().size()]; List transactions = getTransactions(); for (int i = 0; i < bundleTrytes.length; i++) { - bundleTrytes[i] = transactions.get(i).toTrytes(); + bundleTrytes[(bundleTrytes.length - 1) - i] = transactions.get(i).toTrytes(); } return bundleTrytes; @@ -53,16 +49,16 @@ public class Bundle extends jota.model.Bundle { public List toArrayList() { List bundleList = new ArrayList(); - for (Transaction b: getWrappedTransactions()) { - bundleList.add(b.toMap()); + for (Transaction tx: getTransactions()) { + bundleList.add(V8Converter.transactionToMap(tx)); } return bundleList; } public Bundle clone() { ArrayList clonedTransactions = new ArrayList<>(); - for (Transaction t: getWrappedTransactions()) { - clonedTransactions.add(t.clone()); + for (Transaction tx: getTransactions()) { + clonedTransactions.add(Helpers.cloneTransaction(tx)); } return new Bundle(clonedTransactions); } diff --git a/src/main/java/iotaFlashWrapper/Model/FlashObject.java b/src/main/java/iotaFlashWrapper/Model/FlashObject.java index db4de34..ac36c06 100644 --- a/src/main/java/iotaFlashWrapper/Model/FlashObject.java +++ b/src/main/java/iotaFlashWrapper/Model/FlashObject.java @@ -1,27 +1,30 @@ package iotaFlashWrapper.Model; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import com.eclipsesource.v8.utils.V8ObjectUtils; + +import java.util.*; public class FlashObject { int signersCount = 2; int balance; - ArrayList settlementAddresses; - ArrayList deposits; - ArrayList outputs = new ArrayList(); - ArrayList transfers = new ArrayList(); + List settlementAddresses; + List deposits; + Map outputs = new HashMap<>(); + List transfers = new ArrayList(); Multisig root; Multisig remainderAddress; - public FlashObject(int signersCount, int balance, ArrayList deposits) { + public FlashObject(int signersCount, int balance, double[] deposits) { this.signersCount = signersCount; this.balance = balance; - this.deposits = deposits; + this.deposits = new ArrayList<>(); + for (double deposit : deposits){ + this.deposits.add(deposit); + } } - public FlashObject(int signersCount, int balance, ArrayList settlementAddresses, ArrayList deposits, ArrayList outputs, ArrayList transfers, Multisig root, Multisig remainderAddress) { + public FlashObject(int signersCount, int balance, List settlementAddresses, List deposits, Map outputs, List transfers, Multisig root, Multisig remainderAddress) { this.signersCount = signersCount; this.balance = balance; this.settlementAddresses = settlementAddresses; @@ -32,35 +35,6 @@ public class FlashObject { this.remainderAddress = remainderAddress; } - @Override - public String toString() { - String out = ""; - out += "signersCount: " + signersCount + "\n"; - out += "balance: " + balance + "\n"; - out += "settlementAddresses: " + "\n"; - for (String b: settlementAddresses) { - out += "\t" + b + "\n"; - } - out += "deposits: " + "\n"; - for (double b: deposits) { - out += "\t" + b + "\n"; - } - - out += "outputs: " + "\n"; - for (Bundle b: outputs) { - out += "\t" + b.toString() + "\n"; - } - - out += "transfers: " + "\n"; - for (Bundle b: transfers) { - out += "\t" + b.toString() + "\n"; - } - out += "remainderAddress: " + remainderAddress.toString() + "\n"; - out += "root: " + root.toString() + "\n"; - - return out; - } - public Map toMap() { Map objectMap = new HashMap<>(); objectMap.put("signersCount", signersCount); @@ -69,17 +43,14 @@ public class FlashObject { 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); + // Wrap outputs inside an array. + objectMap.put("outputs", getOutputs()); objectMap.put("deposits", getDeposits()); ArrayList transfersMap = new ArrayList<>(); - for (Bundle b: transfers) { - outputMap.add(b.toMap()); + for (Bundle b: getTransfers()) { + transfersMap.add(b.toArrayList()); } objectMap.put("transfers", transfersMap); return objectMap; @@ -98,15 +69,15 @@ public class FlashObject { return root; } - public ArrayList getDeposits() { + public List getDeposits() { return deposits; } - public ArrayList getOutputs() { + public Map getOutputs() { return outputs; } - public ArrayList getTransfers() { + public List getTransfers() { return transfers; } @@ -126,7 +97,7 @@ public class FlashObject { this.settlementAddresses = settlementAddresses; } - public ArrayList getSettlementAddresses() { + public List getSettlementAddresses() { return settlementAddresses; } } diff --git a/src/main/java/iotaFlashWrapper/Model/GeneratedSeed.java b/src/main/java/iotaFlashWrapper/Model/GeneratedSeed.java index b0ade0b..0641c96 100644 --- a/src/main/java/iotaFlashWrapper/Model/GeneratedSeed.java +++ b/src/main/java/iotaFlashWrapper/Model/GeneratedSeed.java @@ -1,4 +1,37 @@ package iotaFlashWrapper.Model; public class GeneratedSeed { + private String address; + private String seed; + private long amount; + + public GeneratedSeed(String address, String seed, long amount) { + this.address = address; + this.seed = seed; + this.amount = amount; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getSeed() { + return seed; + } + + public void setSeed(String seed) { + this.seed = seed; + } + + public long getAmount() { + return amount; + } + + public void setAmount(long amount) { + this.amount = amount; + } } diff --git a/src/main/java/iotaFlashWrapper/V8Converter.java b/src/main/java/iotaFlashWrapper/V8Converter.java index 4562537..dfe808d 100644 --- a/src/main/java/iotaFlashWrapper/V8Converter.java +++ b/src/main/java/iotaFlashWrapper/V8Converter.java @@ -5,6 +5,7 @@ import com.eclipsesource.v8.V8Array; import com.eclipsesource.v8.V8Object; import com.eclipsesource.v8.utils.V8ObjectUtils; import iotaFlashWrapper.Model.*; +import jota.model.Transaction; import java.util.ArrayList; import java.util.HashMap; @@ -41,7 +42,8 @@ public class V8Converter { } public static V8Object flashObjectToV8Object(V8 engine, FlashObject flash) { - return V8ObjectUtils.toV8Object(engine, flash.toMap()); + Map flashMap = flash.toMap(); + return V8ObjectUtils.toV8Object(engine, flashMap); } public static FlashObject flashObjectFromV8Object(V8Object input) { @@ -64,18 +66,18 @@ public class V8Converter { } } ArrayList transfers = bundleListFromArrayList((ArrayList) inputMap.get("transfers")); - ArrayList outputs = bundleListFromArrayList((ArrayList) inputMap.get("outputs")); + Map outputs = (Map) inputMap.get("outputs"); return new FlashObject(singersCount, balance, settlementAddresses, deposits, outputs, transfers, root, remainderAddress); } - public static V8Array bundleListToV8Array(V8 engine, ArrayList bundles) { + public static V8Array bundleListToV8Array(V8 engine, List bundles) { List bundleTmp = new ArrayList(); for (Bundle b: bundles) { List transactions = new ArrayList(); for (jota.model.Transaction tx: b.getTransactions()) { - transactions.add(((Transaction) tx).toMap()); + transactions.add(transactionToMap((Transaction) tx)); } bundleTmp.add(transactions); } @@ -142,7 +144,7 @@ public class V8Converter { continue; } else { for (Object transactionMap: (ArrayList) bundle) { - b.getWrappedTransactions().add(transactionFromObject(transactionMap)); + b.getTransactions().add(transactionFromObject(transactionMap)); } } bundles.add(b); @@ -246,7 +248,7 @@ public class V8Converter { return null; } - public static V8Array transferListToV8Array(V8 engine, ArrayList transfers) { + public static V8Array transferListToV8Array(V8 engine, List transfers) { List transferObj = new ArrayList(); for (Transfer t: transfers) { transferObj.add(t.toMap()); @@ -256,12 +258,34 @@ public class V8Converter { public static V8Array transactionListToV8Array(V8 engine, ArrayList transactions) { List transfersObj = new ArrayList(); - for (Transaction t: transactions) { - transfersObj.add(t.toMap()); + for (Transaction tx: transactions) { + transfersObj.add(transactionToMap(tx)); } return V8ObjectUtils.toV8Array(engine, transfersObj); } + public static Map transactionToMap(jota.model.Transaction transaction) { + Map map = new HashMap(); + if (transaction.getHash() != null && !transaction.getHash().equals("")) { + map.put("hash", transaction.getHash()); + } + map.put("signatureMessageFragment", transaction.getSignatureFragments()); + map.put("address", transaction.getAddress()); + map.put("value", transaction.getValue()); + map.put("obsoleteTag", transaction.getObsoleteTag()); + map.put("currentIndex", transaction.getCurrentIndex()); + map.put("timestamp", transaction.getTimestamp()); + map.put("lastIndex", transaction.getLastIndex()); + map.put("bundle", transaction.getBundle()); + map.put("trunkTransaction", transaction.getTrunkTransaction()); + map.put("branchTransaction", transaction.getBranchTransaction()); + map.put("nonce", transaction.getNonce()); + map.put("attachmentTimestamp", String.valueOf(transaction.getAttachmentTimestamp())); + map.put("tag", transaction.getTag()); + map.put("attachmentTimestampLowerBound", String.valueOf(transaction.getAttachmentTimestampLowerBound())); + map.put("attachmentTimestampUpperBound", String.valueOf(transaction.getAttachmentTimestampUpperBound())); + return map; + } public static Transaction transactionFromObject(Object input) { Map bundleData = (Map) input;