Skip to content

Commit 6ed6cb2

Browse files
committed
started to implement a test flash channel transaction
1 parent 4554957 commit 6ed6cb2

10 files changed

+466
-48
lines changed

iotaflashlibjswrapper.iml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
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" />
1516
</component>
1617
</module>

pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,24 @@
88
<artifactId>iota.flash.lib.js.wrapper</artifactId>
99
<version>1.0-SNAPSHOT</version>
1010

11+
<repositories>
12+
<repository>
13+
<id>jitpack.io</id>
14+
<url>https://jitpack.io</url>
15+
</repository>
16+
</repositories>
17+
1118
<dependencies>
1219
<dependency>
1320
<groupId>com.eclipsesource.j2v8</groupId>
1421
<artifactId>j2v8_macosx_x86_64</artifactId>
1522
<version>4.6.0</version>
1623
</dependency>
24+
<dependency>
25+
<groupId>com.github.iotaledger</groupId>
26+
<artifactId>iota~lib~java</artifactId>
27+
<version>v0.9.10</version>
28+
</dependency>
1729
</dependencies>
1830

1931
<!-- https://maven.apache.org/settings.html#Properties -->

src/main/java/Bundle.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,25 @@
44
import java.util.Map;
55

66
class Bundle {
7-
private ArrayList<Bundle> bundles;
7+
private ArrayList<Transaction> bundles;
88

9-
public Bundle(ArrayList<Bundle> bundles) {
9+
public Bundle(ArrayList<Transaction> bundles) {
1010
this.bundles = bundles;
1111
}
1212

1313
public Map<String, Object> toMap() {
1414
Map<String, Object> map = new HashMap<String, Object>();
1515
List<Object> bundleList = new ArrayList<Object>();
16-
for (Bundle b: bundles) {
16+
for (Transaction b: bundles) {
1717
bundleList.add(b.toMap());
1818
}
1919
map.put("bundles", bundleList);
2020
return map;
2121
}
22+
23+
public ArrayList<Transaction> getBundles() {
24+
return bundles;
25+
}
2226
}
2327

2428

src/main/java/Digest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ public Map<String, Object> toMap() {
3535
map.put("security", getSecurity());
3636
return map;
3737
}
38+
3839
}

src/main/java/Helpers.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.stream.Collectors;
6+
7+
public class Helpers {
8+
public static ArrayList<Bundle> createTransaction(UserObject user, ArrayList<Transfer> transfers, boolean shouldClose) {
9+
CreateTransactionHelperObject toUse = IotaFlashBridge.updateLeafToRoot(user.getFlash().root);
10+
11+
if (toUse.getGenerate() != 0) {
12+
// TODO: tell the server to gen new address.
13+
System.out.println("No more addresses in channel.");
14+
}
15+
16+
ArrayList<Transfer> newTransfers;
17+
18+
if (shouldClose) {
19+
// newTransfers = IotaFlashBridge.close(user.getFlash().getSettlementAddresses(), user.getFlash().deposits);
20+
} else {
21+
List<Object> test = IotaFlashBridge.prepare(
22+
user.getFlash().settlementAddresses,
23+
user.getFlash().deposits,
24+
user.getUserIndex(),
25+
transfers
26+
);
27+
}
28+
29+
return null;
30+
}
31+
}

src/main/java/IotaFlashBridge.java

Lines changed: 70 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,29 @@
1212
import java.util.List;
1313
import java.util.Map;
1414

15-
public class IotaFlashBridge implements IotaFlashInterface {
16-
private String iotaLibPath;
17-
private V8 engine;
18-
private V8Object transfer;
19-
private V8Object multisig;
15+
public class IotaFlashBridge {
16+
private static String iotaLibPath = "res/iota.flash.js";
17+
private static V8 engine;
18+
private static V8Object transfer;
19+
private static V8Object multisig;
2020

21-
/**
22-
*
23-
* @param path
24-
* @throws IOException
25-
*/
26-
IotaFlashBridge(String path) throws IOException {
27-
this.iotaLibPath = path;
28-
29-
String file = readFile(path, Charset.defaultCharset());
21+
public static void boot() throws IOException {
22+
String file = readFile(iotaLibPath, Charset.defaultCharset());
3023

31-
this.engine = V8.createV8Runtime();
24+
engine = V8.createV8Runtime();
3225
// Eval lib into current v8 context.
3326
engine.executeVoidScript(file);
3427
multisig = (V8Object) engine.executeScript("iotaFlash.multisig");
3528
transfer = (V8Object) engine.executeScript("iotaFlash.transfer");
36-
3729
}
3830

3931
/**
4032
*
4133
* @param digests
4234
* @return
4335
*/
44-
public MultisigAddress composeAddress(ArrayList<Digest> digests) {
36+
public static MultisigAddress composeAddress(ArrayList<Digest> digests) {
4537
// Create js object for digest
46-
// TODO: find more clean way to do thi s.
4738
List<Object> list = new ArrayList<Object>();
4839
for (Digest digest: digests) {
4940
list.add(digest.toMap());
@@ -73,7 +64,7 @@ public MultisigAddress composeAddress(ArrayList<Digest> digests) {
7364
* @param security
7465
* @return
7566
*/
76-
public Digest getDigest(String seed, int index, int security) {
67+
public static Digest getDigest(String seed, int index, int security) {
7768
if (seed.length() < 81) {
7869
System.out.println("Seed is too short");
7970
return null;
@@ -94,14 +85,21 @@ public Digest getDigest(String seed, int index, int security) {
9485
*
9586
* @param root
9687
*/
97-
public void updateLeafToRoot(MultisigAddress root) {
88+
public static CreateTransactionHelperObject updateLeafToRoot(MultisigAddress root) {
9889
Map<String, Object> map = root.toMap();
9990
// Create param list
10091
List<Object> paramsObj = new ArrayList<Object>();
10192
paramsObj.add(map);
10293
V8Array params = V8ObjectUtils.toV8Array(engine, paramsObj);
10394

104-
multisig.executeFunction("updateLeafToRoot", params);
95+
V8Object ret = multisig.executeObjectFunction("updateLeafToRoot", params);
96+
int generate = ret.getInteger("generate");
97+
Map<String, ? super Object> multiSigMap = V8ObjectUtils.toMap((V8Object) ret.getObject("multisig"));
98+
// Parse result into Java Obj.
99+
String addr = (String) multiSigMap.get("address");
100+
int secSum = (Integer) multiSigMap.get("securitySum");
101+
MultisigAddress multisig = new MultisigAddress(addr, secSum);
102+
return new CreateTransactionHelperObject(generate, multisig);
105103
}
106104

107105

@@ -113,7 +111,7 @@ public void updateLeafToRoot(MultisigAddress root) {
113111
* @param transfers array of all transfers (value, address) pairs
114112
* @return
115113
*/
116-
public Object prepare(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits, int index, ArrayList<Transfer> transfers) {
114+
public static List<Object> prepare(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits, int index, ArrayList<Transfer> transfers) {
117115
V8Array settlementAddressesJS = V8ObjectUtils.toV8Array(engine, settlementAddresses);
118116
V8Array depositJS = V8ObjectUtils.toV8Array(engine, deposits);
119117
List<Object> transferObj = new ArrayList<Object>();
@@ -133,6 +131,11 @@ public Object prepare(ArrayList<String> settlementAddresses, ArrayList<Integer>
133131
V8Array ret = transfer.executeArrayFunction("prepare", V8ObjectUtils.toV8Array(engine, params));
134132
List<Object> transfersReturnJS = V8ObjectUtils.toList(ret);
135133

134+
for (Object b: transfersReturnJS) {
135+
Map<String, Object> test = V8ObjectUtils.toMap((V8Object) b);
136+
137+
}
138+
136139
// Call js.
137140
return transfersReturnJS;
138141
}
@@ -142,14 +145,14 @@ public Object prepare(ArrayList<String> settlementAddresses, ArrayList<Integer>
142145
* @param balance
143146
* @param deposits
144147
* @param outputs
145-
* @param multisig
148+
* @param root
146149
* @param remainderAddress
147150
* @param history
148151
* @param transfers
149152
* @param close
150153
* @return
151154
*/
152-
public List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<Transfer> outputs, Object multisig, String remainderAddress, ArrayList<Bundle> history, ArrayList<Transfer> transfers, boolean close) {
155+
public static List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<Transfer> outputs, MultisigAddress root, String remainderAddress, ArrayList<Bundle> history, ArrayList<Transfer> transfers, boolean close) {
153156
V8Array depositsJS = V8ObjectUtils.toV8Array(engine, deposits);
154157
// Outputs
155158
List<Object> outputsObj = new ArrayList<Object>();
@@ -158,26 +161,60 @@ public List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<
158161
}
159162
V8Array outputsJS = V8ObjectUtils.toV8Array(engine, outputsObj);
160163

164+
165+
161166
List<Object> transfersObj = new ArrayList<Object>();
162167
for (Transfer t: transfers) {
163168
transfersObj.add(t.toMap());
164169
}
165170
V8Array transfersJS = V8ObjectUtils.toV8Array(engine, transfersObj);
166171

167-
List<Object> trs = V8ObjectUtils.toList(transfersJS);
172+
// Create params.
173+
// Now put all params into JS ready array.
174+
List<Object> params = new ArrayList<Object>();
175+
params.add(balance);
176+
params.add(depositsJS);
177+
params.add(outputsJS);
178+
179+
180+
// Call js function.
181+
V8Array ret = transfer.executeArrayFunction("compose", V8ObjectUtils.toV8Array(engine, params));
182+
List<Object> transfersReturnJS = V8ObjectUtils.toList(ret);
183+
184+
// Parse return as array of bundles
185+
168186

169-
return trs;
187+
return transfersReturnJS;
170188
}
171189

172190
/**
173191
*
174-
* @param multisig
192+
* @param root
175193
* @param seed
176194
* @param bundles
177195
* @return
178196
*/
179-
public Object sign(Object multisig, String seed, ArrayList<Object> bundles) {
180-
return null;
197+
public static Object sign(MultisigAddress root, String seed, ArrayList<Bundle> bundles) {
198+
Map<String, Object> multisig = root.toMap();
199+
V8Object rootJS = V8ObjectUtils.toV8Object(engine, multisig);
200+
201+
List<Object> bundleTmp = new ArrayList<Object>();
202+
for (Bundle b: bundles) {
203+
bundleTmp.add(b.toMap());
204+
}
205+
V8Array bundlesJS = V8ObjectUtils.toV8Array(engine, bundleTmp);
206+
207+
// Create params.
208+
// Now put all params into JS ready array.
209+
List<Object> params = new ArrayList<Object>();
210+
params.add(rootJS);
211+
params.add(seed);
212+
params.add(bundles);
213+
214+
V8Object signatures = transfer.executeObjectFunction("sign", V8ObjectUtils.toV8Array(engine, params));
215+
216+
// TODO: add singature object.
217+
return signatures;
181218
}
182219

183220
/**
@@ -186,7 +223,7 @@ public Object sign(Object multisig, String seed, ArrayList<Object> bundles) {
186223
* @param signatures
187224
* @return
188225
*/
189-
public Object appliedSignatures(ArrayList<Object> bundles, ArrayList<Object> signatures) {
226+
public static Object appliedSignatures(ArrayList<Object> bundles, ArrayList<Object> signatures) {
190227
return null;
191228
}
192229

@@ -198,7 +235,7 @@ public Object appliedSignatures(ArrayList<Object> bundles, ArrayList<Object> sig
198235
* @param bundles
199236
* @return
200237
*/
201-
public Object getDiff(ArrayList<Object> root, ArrayList<Object> remainder, ArrayList<Object> history, ArrayList<Object> bundles) {
238+
public static Object getDiff(ArrayList<Object> root, ArrayList<Object> remainder, ArrayList<Object> history, ArrayList<Object> bundles) {
202239
return null;
203240
}
204241

@@ -212,7 +249,7 @@ public Object getDiff(ArrayList<Object> root, ArrayList<Object> remainder, Array
212249
* @param signedBundles
213250
* @return
214251
*/
215-
public Object applayTransfers(Object root, Object deposit, Object outputs, Object remainderAddress, Object transfers, Object signedBundles) {
252+
public static Object applayTransfers(Object root, Object deposit, Object outputs, Object remainderAddress, Object transfers, Object signedBundles) {
216253
return null;
217254
}
218255

@@ -222,7 +259,7 @@ public Object applayTransfers(Object root, Object deposit, Object outputs, Objec
222259
* @param deposits
223260
* @return
224261
*/
225-
public Object close(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits) {
262+
public static Object close(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits) {
226263
V8Array saJS = V8ObjectUtils.toV8Array(engine, settlementAddresses);
227264
// Deposits
228265
V8Array depositsJS = V8ObjectUtils.toV8Array(engine, deposits);

src/main/java/IotaFlashInterface.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public interface IotaFlashInterface {
99

1010
// Transfer
1111
public Object prepare(ArrayList<String> settlementAddresses, ArrayList<Integer> deposits, int index, ArrayList<Transfer> transfers);
12-
public List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<Transfer> outputs, Object multisig, String remainderAddress, ArrayList<Bundle> history, ArrayList<Transfer> transfers, boolean close);
12+
public List<Object> compose(int balance, ArrayList<Integer> deposits, ArrayList<Transfer> outputs, MultisigAddress root, String remainderAddress, ArrayList<Bundle> history, ArrayList<Transfer> transfers, boolean close);
1313

1414
public Digest getDigest(String seed, int index, int security);
1515

16-
public Object sign(Object multisig, String seed, ArrayList<Object> bundles);
16+
public Object sign(MultisigAddress root, String seed, ArrayList<Bundle> bundles);
1717
public Object appliedSignatures(ArrayList<Object> bundles, ArrayList<Object> signatures);
1818
public Object getDiff(ArrayList<Object> root,
1919
ArrayList<Object> remainder,

0 commit comments

Comments
 (0)