Skip to content

Commit 9191ac1

Browse files
committed
fixed transactions not updating flash channel state
1 parent a874805 commit 9191ac1

20 files changed

+240
-101
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ If you have any ideas please submit a request (I am totally not a Java guy so...
1212
- [x] updateLeafToRoot
1313
- [x] getDigest
1414

15-
#### Model.Transfer
15+
#### com.flashwifi.flashwrapper.Model.Transfer
1616
- [x] prepare
1717
- [x] compose
1818
- [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...
2828
1. Clone repo
2929
2. Update maven ressources
3030
3. That's it.
31-
4. You can run a test transaction by running the main func in the Main Class.
31+
4. You can run a test transaction by running the main func in the com.flashwifi.flashwrapper.Main Class.
3232

3333

3434

iotaflashlibjswrapper.iml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<orderEntry type="inheritedJdk" />
1313
<orderEntry type="sourceFolder" forTests="false" />
1414
<orderEntry type="library" name="Maven: com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0" level="project" />
15-
<orderEntry type="library" name="Maven: com.github.iotaledger:iota~lib~java:v0.9.10" level="project" />
15+
<orderEntry type="library" name="Maven: com.github.iotaledger:iota~lib~java:0.9.10" level="project" />
1616
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.2" level="project" />
1717
</component>
1818
</module>

pom.xml

+3-4
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
<artifactId>j2v8_macosx_x86_64</artifactId>
2222
<version>4.6.0</version>
2323
</dependency>
24+
2425
<dependency>
2526
<groupId>com.github.iotaledger</groupId>
2627
<artifactId>iota~lib~java</artifactId>
27-
<version>v0.9.10</version>
28+
<version>0.9.10</version>
2829
</dependency>
30+
2931
<!-- Gson: Java to Json conversion -->
3032
<dependency>
3133
<groupId>com.google.code.gson</groupId>
@@ -37,13 +39,10 @@
3739

3840
<!-- https://maven.apache.org/settings.html#Properties -->
3941
<properties>
40-
4142
<!-- <encoding>UTF-8</encoding> -->
4243
<maven.compiler.source>1.8</maven.compiler.source>
4344
<maven.compiler.target>1.8</maven.compiler.target>
44-
4545
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4646
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
47-
4847
</properties>
4948
</project>

res/iota.flash.helper.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var Helper = {
2+
applyTransfers: function(flash, bundles) {
3+
iotaFlash.transfer.applyTransfers(
4+
flash.root,
5+
flash.deposits,
6+
flash.outputs,
7+
flash.remainderAddress,
8+
flash.transfers,
9+
bundles
10+
)
11+
return flash
12+
}
13+
}

res/iota.flash.js

+1
Original file line numberDiff line numberDiff line change
@@ -10297,6 +10297,7 @@ function close(settlement, deposits) {
1029710297
* @param {array} transfers
1029810298
*/
1029910299
function applyTransfers(root, deposit, outputs, remainder, history, transfers) {
10300+
1030010301
if (transfers.filter(transfer =>
1030110302
transfer.filter(tx => tx.value < 0)
1030210303
.filter(tx => !IOTACrypto.utils.validateSignatures(transfer, tx.address))

src/main/java/Helpers.java renamed to src/main/java/com/flashwifi/flashwrapper/Helpers.java

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import Model.*;
1+
package com.flashwifi.flashwrapper;
2+
3+
import com.flashwifi.flashwrapper.Model.*;
4+
25

36
import java.util.ArrayList;
47
import java.util.List;
@@ -7,7 +10,6 @@
710
public class Helpers {
811
public static ArrayList<Bundle> createTransaction(UserObject user, ArrayList<Transfer> transfers, boolean shouldClose) {
912
CreateTransactionHelperObject toUse = IotaFlashBridge.updateLeafToRoot(user.getFlash().getRoot());
10-
1113
if (toUse.getGenerate() != 0) {
1214
// TODO: tell the server to gen new address.
1315
System.out.println("No more addresses in channel.");
@@ -72,14 +74,16 @@ public static ArrayList<Bundle> appliedSignatures(ArrayList<Bundle> bundles, Arr
7274
}
7375

7476
public static void applyTransfers(UserObject user, ArrayList<Bundle> bundles) {
75-
IotaFlashBridge.applayTransfers(
76-
user.getFlash().getRoot(),
77-
user.getFlash().getDeposits(),
78-
user.getFlash().getOutputs(),
79-
user.getFlash().getRemainderAddress(),
80-
user.getFlash().getTransfers(),
81-
bundles
82-
);
77+
FlashObject flash = IotaFlashBridge.applyTransfersToUser(user, bundles);
78+
user.setFlash(flash);
79+
// com.flashwifi.flashwrapper.IotaFlashBridge.applyTransfers(
80+
// user.getFlash().getRoot(),
81+
// user.getFlash().getDeposits(),
82+
// user.getFlash().getOutputs(),
83+
// user.getFlash().getRemainderAddress(),
84+
// user.getFlash().getTransfers(),
85+
// bundles
86+
// );
8387
}
8488

8589
public static ArrayList<Bundle> clone(ArrayList<Bundle> bundles) {

src/main/java/IotaFlashBridge.java renamed to src/main/java/com/flashwifi/flashwrapper/IotaFlashBridge.java

+25-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import Model.*;
1+
package com.flashwifi.flashwrapper;
2+
3+
import com.flashwifi.flashwrapper.Model.*;
24
import com.eclipsesource.v8.*;
35
import com.eclipsesource.v8.utils.V8ObjectUtils;
46

@@ -13,20 +15,24 @@
1315

1416
public class IotaFlashBridge {
1517
private static String iotaLibPath = "res/iota.flash.js";
18+
private static String iotaHelperLibPath = "res/iota.flash.helper.js";
1619
private static V8 engine;
1720
private static V8Object transfer;
1821
private static V8Object multisig;
22+
private static V8Object helper;
1923

2024
public static void boot() throws IOException {
2125
String file = readFile(iotaLibPath, Charset.defaultCharset());
2226

2327
engine = V8.createV8Runtime();
2428
// Eval lib into current v8 context.
2529
engine.executeVoidScript(file);
30+
engine.executeVoidScript(readFile(iotaHelperLibPath, Charset.defaultCharset()));
2631
multisig = (V8Object) engine.executeScript("iotaFlash.multisig");
2732
transfer = (V8Object) engine.executeScript("iotaFlash.transfer");
33+
helper = (V8Object) engine.executeScript("Helper");
2834

29-
Model.Console console = new Model.Console();
35+
com.flashwifi.flashwrapper.Model.Console console = new com.flashwifi.flashwrapper.Model.Console();
3036
V8Object v8Console = new V8Object(engine);
3137
engine.add("console", v8Console);
3238
v8Console.registerJavaMethod(console, "log", "log", new Class<?>[] { String.class });
@@ -61,6 +67,8 @@ public static MultisigAddress composeAddress(ArrayList<Digest> digests) {
6167
int secSum = (Integer) resultMap.get("securitySum");
6268
MultisigAddress ret = new MultisigAddress(addr, secSum);
6369

70+
params.release();
71+
retV8.release();
6472
return ret;
6573
}
6674

@@ -250,7 +258,7 @@ public static Object getDiff(ArrayList<Object> root, ArrayList<Object> remainder
250258
* @param signedBundles
251259
* @return
252260
*/
253-
public static void applayTransfers(MultisigAddress root,
261+
public static void applyTransfers(MultisigAddress root,
254262
ArrayList<Integer> deposits,
255263
ArrayList<Bundle> outputs,
256264
MultisigAddress remainderAddress,
@@ -268,6 +276,20 @@ public static void applayTransfers(MultisigAddress root,
268276
transfer.executeFunction("applyTransfers", V8ObjectUtils.toV8Array(engine, params));
269277
}
270278

279+
public static FlashObject applyTransfersToUser(UserObject user, ArrayList<Bundle> signedBundles) {
280+
List<Object> params = new ArrayList<>();
281+
params.add(V8Converter.flashObjectToV8Object(engine, user.getFlash()));
282+
params.add(V8Converter.bundleListToV8Array(engine, signedBundles));
283+
V8Array paramV8 = V8ObjectUtils.toV8Array(engine, params);
284+
V8Object ret = helper.executeObjectFunction("applyTransfers", paramV8);
285+
Map<String, Object> obj = V8ObjectUtils.toMap(ret);
286+
287+
paramV8.release();
288+
FlashObject flash = V8Converter.flashObjectFromV8Object(ret);
289+
ret.release();
290+
return flash;
291+
}
292+
271293
/// Utils
272294

273295
/**

src/main/java/IotaFlashInterface.java renamed to src/main/java/com/flashwifi/flashwrapper/IotaFlashInterface.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import Model.Bundle;
2-
import Model.Digest;
3-
import Model.MultisigAddress;
4-
import Model.Transfer;
1+
package com.flashwifi.flashwrapper;
2+
3+
import com.flashwifi.flashwrapper.Model.Bundle;
4+
import com.flashwifi.flashwrapper.Model.Digest;
5+
import com.flashwifi.flashwrapper.Model.MultisigAddress;
6+
import com.flashwifi.flashwrapper.Model.Transfer;
57

68
import java.util.ArrayList;
79
import java.util.List;
@@ -12,7 +14,7 @@ public interface IotaFlashInterface {
1214

1315
public void updateLeafToRoot(MultisigAddress root);
1416

15-
// Model.Transfer
17+
// com.flashwifi.flashwrapper.Model.Transfer
1618
public Object prepare(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits, int index, ArrayList<Transfer> transfers);
1719
public List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<Transfer> outputs, MultisigAddress root, String remainderAddress, ArrayList<Bundle> history, ArrayList<Transfer> transfers, boolean close);
1820

src/main/java/Main.java renamed to src/main/java/com/flashwifi/flashwrapper/Main.java

+22-31
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
package com.flashwifi.flashwrapper;
12

2-
import Model.*;
3+
import com.flashwifi.flashwrapper.Model.*;
34

45
import java.io.IOException;
56
import java.util.ArrayList;
@@ -96,38 +97,17 @@ public static void main(String[] argv) throws Exception {
9697

9798
System.out.println("Channel Setup!");
9899

99-
100100
ArrayList<Transfer> transfers = new ArrayList<>();
101-
transfers.add(new Transfer(twoSettlement, 200));
101+
transfers.add(new Transfer(twoSettlement, 1));
102+
transfers.add(new Transfer(twoSettlement, 400));
102103

103104
System.out.println(oneFlash);
104105

105106
System.out.println("Creating a transaction: 200 to " + twoSettlement);
106107
ArrayList<Bundle> bundles = Helpers.createTransaction(oneFlash, transfers, false);
107108

108-
System.out.println("[SUCCESS] createTransaction completed");
109-
110-
// Sign the bundles.
111-
// Get signatures for the bundles
112-
ArrayList<Signature> oneSignatures = Helpers.signTransaction(oneFlash, bundles);
113-
114-
// Generate USER TWO'S Singatures
115-
ArrayList<Signature> twoSignatures = Helpers.signTransaction(twoFlash, bundles);
116-
117-
System.out.println("[SUCCESS] Created signatures for users.");
118-
119-
// Sign bundle with your USER ONE'S signatures
120-
ArrayList<Bundle> signedBundles = IotaFlashBridge.appliedSignatures(bundles, oneSignatures);
121-
122-
System.out.println("[SUCCESS] Parial applied Signature for User one on transfer bundle");
123-
124-
125-
// ADD USER TWOS'S signatures to the partially signed bundles
126-
signedBundles = IotaFlashBridge.appliedSignatures(signedBundles, twoSignatures);
127-
128-
System.out.println("[SUCCESS] Signed bundle bu second user. Bundle ready.");
129-
130-
109+
ArrayList<Bundle> partialSignedBundles = signTransfer(bundles, oneFlash);
110+
ArrayList<Bundle> signedBundles = signTransfer(partialSignedBundles, twoFlash);
131111
/////////////////////////////////
132112
/// APPLY SIGNED BUNDLES
133113

@@ -154,7 +134,7 @@ public static void main(String[] argv) throws Exception {
154134
/*
155135
156136
// Supplying the CORRECT varibles to create a closing bundle
157-
bundles = Helpers.createTransaction(
137+
bundles = com.flashwifi.flashwrapper.Helpers.createTransaction(
158138
oneFlash,
159139
oneFlash.getFlash().getSettlementAddresses(),
160140
true
@@ -164,10 +144,10 @@ public static void main(String[] argv) throws Exception {
164144
/// SIGN BUNDLES
165145
166146
// Get signatures for the bundles
167-
oneSignatures = Helpers.signTransaction(oneFlash, bundles)
147+
oneSignatures = com.flashwifi.flashwrapper.Helpers.signTransaction(oneFlash, bundles)
168148
169149
// Generate USER TWO'S Singatures
170-
twoSignatures = Helpers.signTransaction(twoFlash, bundles)
150+
twoSignatures = com.flashwifi.flashwrapper.Helpers.signTransaction(twoFlash, bundles)
171151
172152
// Sign bundle with your USER ONE'S signatures
173153
signedBundles = transfer.appliedSignatures(bundles, oneSignatures)
@@ -179,19 +159,30 @@ public static void main(String[] argv) throws Exception {
179159
/// APPLY SIGNED BUNDLES
180160
181161
// Apply transfers to User ONE
182-
oneFlash = Helpers.applyTransfers(oneFlash, signedBundles)
162+
oneFlash = com.flashwifi.flashwrapper.Helpers.applyTransfers(oneFlash, signedBundles)
183163
// Save latest channel bundles
184164
oneFlash.bundles = signedBundles
185165
186166
// Apply transfers to User TWO
187-
twoFlash = Helpers.applyTransfers(twoFlash, signedBundles)
167+
twoFlash = com.flashwifi.flashwrapper.Helpers.applyTransfers(twoFlash, signedBundles)
188168
// Save latest channel bundles
189169
twoFlash.bundles = signedBundles
190170
191171
console.log("Channel Closed")
192172
console.log("Final Bundle to be attached: ")*/
193173
}
194174

175+
private static ArrayList<Bundle> signTransfer(ArrayList<Bundle> bundles, UserObject user) {
176+
System.out.println("[SUCCESS] Created signatures for users.");
177+
ArrayList<Signature> oneSignatures = Helpers.signTransaction(user, bundles);
178+
179+
System.out.println("[SUCCESS] Parial applied Signature for User one on transfer bundle");
180+
// Sign bundle with your USER ONE'S signatures
181+
ArrayList<Bundle> signedBundles = IotaFlashBridge.appliedSignatures(bundles, oneSignatures);
182+
183+
return signedBundles;
184+
}
185+
195186
private static void setupUser(UserObject user, int TREE_DEPTH) {
196187
// Create digests for the start of the channel
197188
for (int i = 0; i < TREE_DEPTH + 1; i++) {

src/main/java/Model/Bundle.java renamed to src/main/java/com/flashwifi/flashwrapper/Model/Bundle.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
package Model;
2-
3-
import com.eclipsesource.v8.V8;
4-
import com.eclipsesource.v8.V8Array;
1+
package com.flashwifi.flashwrapper.Model;
52

63
import java.util.ArrayList;
74
import java.util.HashMap;

src/main/java/Model/Console.java renamed to src/main/java/com/flashwifi/flashwrapper/Model/Console.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package Model;
1+
package com.flashwifi.flashwrapper.Model;
22

33

44
public class Console {

src/main/java/Model/CreateTransactionHelperObject.java renamed to src/main/java/com/flashwifi/flashwrapper/Model/CreateTransactionHelperObject.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package Model;
1+
package com.flashwifi.flashwrapper.Model;
22

33
public class CreateTransactionHelperObject {
44
private int generate = 0;

src/main/java/Model/Digest.java renamed to src/main/java/com/flashwifi/flashwrapper/Model/Digest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package Model;
1+
package com.flashwifi.flashwrapper.Model;
22

33
import java.util.HashMap;
44
import java.util.Map;

0 commit comments

Comments
 (0)