Skip to content

Commit 79e7573

Browse files
committed
feat: bash scripts
1 parent 54fc14b commit 79e7573

File tree

18 files changed

+1641
-920
lines changed

18 files changed

+1641
-920
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":3,"id":"451433de-8585-46b9-b23a-74ad6066235a","address":"hx6b54588d3a7621eb8b69b501026d1fea43eae613","crypto":{"ciphertext":"ac3d6e30a38ee7eb7f7a6e0365172980d6641778b056f22779ae8eaadb01e99f","cipherparams":{"iv":"1a20a240e1ea0996a90887d18179bbcd"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"506cf7d325761d756ec48793ab1af24c26b44074e930e43b058e7f11ef734731","n":16384,"r":8,"p":1},"mac":"82cb8bf06b2d6ef8a3bdb3ede2371420325ab72b2b2f84820d7f38422d2a7d49"},"coinType":"icx"}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":3,"id":"359f516b-88e4-4565-b581-91e022203368","address":"hx2510636000161b66745abe841730ad60e4ec8cdc","crypto":{"ciphertext":"86947d1fe3e182331e8e03b6177b87a10377039a6e6343be9f6e2b6da788b3fb","cipherparams":{"iv":"ab37469c94f8812fd6b5d349252be98d"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"f8f79d3936cf85b095672798c032090a68f080860a4af9f6a5700bd79bc93e1d","n":16384,"r":8,"p":1},"mac":"b2525d038c1ba0cad8af757ccee71ab08557be2b2964f21ed809ae03509970d3"},"coinType":"icx"}

contracts/javascore/Intent_Contracts/app/build.gradle

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
dependencies {
22
compileOnly 'foundation.icon:javaee-api:0.9.6'
3+
implementation 'foundation.icon:javaee-scorex:0.5.2'
34
implementation 'com.github.sink772:javaee-tokens:0.6.4'
4-
implementation 'org.json:json:20230227'
5-
testImplementation 'foundation.icon:javaee-unittest:0.10.0'
5+
implementation 'com.github.sink772:minimal-json:0.9.7'
6+
testImplementation 'foundation.icon:javaee-unittest:0.10.0'
67
testImplementation 'org.mockito:mockito-core:4.8.0'
78
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
89
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
@@ -11,10 +12,11 @@ dependencies {
1112
optimizedJar {
1213
mainClassName = 'network.icon.intent.Intent'
1314
archivesBaseName = "intent" + 1 + ".jar"
14-
from {
15-
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
16-
}
17-
15+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
16+
from {
17+
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it)
18+
}
19+
}
1820
}
1921

2022
deployJar {

contracts/javascore/Intent_Contracts/app/src/main/java/network/icon/intent/GeneralizedConnection.java

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public BigInteger getConnSn() {
5757
}
5858

5959
void onlyRelay() {
60+
Context.println(relayAddress.get().toString());
6061
Context.require(Context.getCaller().equals(relayAddress.get()), "OnlyRelayer");
6162
}
6263

contracts/javascore/Intent_Contracts/app/src/main/java/network/icon/intent/Intent.java

+59-56
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
import score.annotation.EventLog;
1414
import score.annotation.External;
1515
import score.annotation.Payable;
16-
import org.json.JSONObject;
16+
import com.eclipsesource.json.Json;
17+
import com.eclipsesource.json.JsonObject;
1718

1819
public class Intent extends GeneralizedConnection {
1920

@@ -68,19 +69,14 @@ public Intent(String _nid, BigInteger _protocolFee, Address _feeHandler, Address
6869
@Payable
6970
public void swap(SwapOrderData swapOrderData) {
7071
Context.require(swapOrderData.token != null, "Token can't be null");
71-
Context.require(Context.getCaller().toString().equals(swapOrderData.creator),
72+
Context.require(Context.getCaller().toString().equals(extractAddress(swapOrderData.creator)),
7273
"Creator must be sender");
74+
Context.require(Context.getValue().equals(swapOrderData.amount),
75+
"Deposit amount not equal to order amount");
7376

74-
Address token = Address.fromString(swapOrderData.token);
77+
Address token = Address.fromString(extractAddress(swapOrderData.token));
7578
Address nativAddress = nativeAddress.get();
76-
if (token.equals(nativAddress)) {
77-
Context.require(Context.getValue().equals(swapOrderData.amount),
78-
"Deposit amount not equal to order amount");
79-
} else {
80-
Context.require(Context.getValue().equals(BigInteger.valueOf(0)),
81-
"Nativ Token Must Be Zero");
82-
Context.call(token, "transfer", Context.getAddress(), swapOrderData.amount);
83-
}
79+
Context.require(token.equals(nativAddress), "Not a native token");
8480

8581
SwapOrder swapOrder = new SwapOrder(swapOrderData.id, swapOrderData.emitter,
8682
swapOrderData.srcNID,
@@ -89,15 +85,17 @@ public void swap(SwapOrderData swapOrderData) {
8985
swapOrderData.amount, swapOrderData.toToken, swapOrderData.toAmount,
9086
swapOrderData.data);
9187

88+
deposit.at(swapOrderData.creator).set(swapOrderData.token, swapOrderData.amount);
89+
9290
_swap(swapOrder);
9391
}
9492

9593
void _swap(SwapOrder swapOrder) {
9694
BigInteger id = this.depositId.getOrDefault(BigInteger.ZERO).add(BigInteger.valueOf(1));
9795
swapOrder.id = id;
9896
Context.require(swapOrder.srcNID.equals(this.networkId.get()), "NID is misconfigured");
99-
Context.require(swapOrder.emitter.equals(Context.getAddress().toString()),
100-
"Emitter specified is not this");
97+
Context.require(extractAddress(swapOrder.emitter).equals(Context.getAddress().toString()),
98+
"Emitter specified is not this"); // emitter contract or eoa?
10199
orders.set(id, swapOrder);
102100
SwapIntent(id, swapOrder.emitter, swapOrder.srcNID, swapOrder.dstNID,
103101
swapOrder.creator,
@@ -121,13 +119,15 @@ public void fill(SwapOrderData swapOrderData, String solverAddress) {
121119
Context.require(!isFilled, "Order has already been filled");
122120
finishedOrders.set(orderHash, true);
123121

124-
BigInteger fee = swapOrder.toAmount.multiply(protocolFee.get()).divide(BigInteger.valueOf(1000)); // add divide
125-
// by 10000
122+
BigInteger fee = swapOrder.toAmount.multiply(protocolFee.get()).divide(BigInteger.valueOf(10000)); // add divide
123+
// by 10000
126124
BigInteger toAmount = swapOrder.toAmount.subtract(fee);
125+
127126
_transferResult(swapOrder.destinationAddress, swapOrder.toToken, toAmount,
128127
fee);
129128

130129
OrderFill orderFill = new OrderFill(swapOrder.id, orderBytes, solverAddress);
130+
131131
if (swapOrder.srcNID.equals(swapOrder.dstNID)) {
132132
_resolveFill(networkId.get(), orderFill);
133133
return;
@@ -143,7 +143,7 @@ public void cancel(BigInteger id) {
143143
if (order == null) {
144144
Context.revert("Order already has been cancelled");
145145
}
146-
Context.require(Address.fromString(order.creator).equals(Context.getCaller()),
146+
Context.require(Address.fromString(extractAddress(order.creator)).equals(Context.getCaller()),
147147
"Only creator can cancel this order");
148148

149149
if (order.srcNID.equals(order.dstNID)) {
@@ -199,35 +199,36 @@ void _resolveFill(String srcNetwork, OrderFill _fill) {
199199
if (order == null) {
200200
Context.revert("There is no order to resolve");
201201
}
202+
Context.require(Arrays.equals(Context.hash("keccak-256", order.toBytes()),
203+
Context.hash("keccak-256",
204+
_fill.orderBytes)),
205+
"Mismatched order");
202206

203-
Context.require(Arrays.equals(Context.hash("keccak-256", order.toBytes()), Context.hash("keccak-256",
204-
_fill.orderBytes)), "Mismatched order");
205207
Context.require(order.dstNID.equals(srcNetwork), "Invalid Network");
206208

207209
orders.set(_fill.id, null);
208210
OrderClosed(_fill.id);
209211

210-
Address tokenAddress = Address.fromString(order.token);
212+
Address tokenAddress = Address.fromString(extractAddress(order.token));
211213
if (tokenAddress.equals(nativeAddress.get())) {
212-
Context.transfer(Address.fromString(_fill.solver), order.amount);
213-
214+
Context.transfer(Address.fromString(extractAddress(_fill.solver)), order.amount);
214215
} else {
215-
Context.call(tokenAddress, "transfer", Address.fromString(_fill.solver), order.amount);
216+
Context.call(tokenAddress, "transfer", Address.fromString(extractAddress(_fill.solver)), order.amount);
216217
}
217218
}
218219

219220
void _transferResult(String _toAddress, String _toToken, BigInteger amount,
220221
BigInteger fee) {
221-
Address toAddress = Address.fromString(_toAddress);
222-
Address toTokenAddress = Address.fromString(_toToken);
222+
Address toAddress = Address.fromString(extractAddress(_toAddress));
223+
Address toTokenAddress = Address.fromString(extractAddress(_toToken));
223224
if (toTokenAddress.equals(nativeAddress.get())) {
224225
Context.require(Context.getValue().equals(amount.add(fee)), "\"Deposit amount not equal to order amount\"");
225226
_nativeTransfer(toAddress, amount);
226227
_nativeTransfer(feeHandler.get(), fee);
227228
} else {
228-
Context.call(toTokenAddress, "transferFrom", Context.getAddress(), toAddress,
229+
Context.call(toTokenAddress, "transfer", toAddress,
229230
amount);
230-
Context.call(toTokenAddress, "transferFrom", Context.getAddress(),
231+
Context.call(toTokenAddress, "transfer",
231232
feeHandler.get(), fee);
232233
}
233234
}
@@ -236,48 +237,28 @@ void _nativeTransfer(Address to, BigInteger amount) {
236237
Context.transfer(to, amount);
237238
}
238239

239-
public static byte[] hexStringToByteArray(String s) {
240-
int len = s.length();
241-
byte[] data = new byte[len / 2];
242-
for (int i = 0; i < len; i += 2) {
243-
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
244-
+ Character.digit(s.charAt(i + 1), 16));
245-
}
246-
return data;
247-
}
248-
249240
@External
250241
public void tokenFallback(Address _from, BigInteger _value, byte[] _data) {
251242
Context.require(_value.compareTo(BigInteger.ZERO) > 0, "Zero transfers not allowed");
243+
252244
String unpackedData = new String(_data);
253245
Context.require(!unpackedData.equals(""), "Token Fallback: Data can't be empty");
246+
JsonObject json = Json.parse(unpackedData).asObject();
254247

255-
JSONObject jsonObject = new JSONObject(unpackedData);
256-
// string(address of depositer) -> string (deposits token address) -> amount of
248+
// string(address of depositer) -> string (deposits token address) -> amountof
257249
// token
258-
String depositor = jsonObject.get("depositor").toString();
259-
String token = jsonObject.get("token").toString();
260-
BigInteger amount = jsonObject.getBigInteger("amount");
250+
String depositor = json.get("depositor").asString();
251+
String token = json.get("token").asString();
252+
BigInteger amount = new BigInteger(json.get("amount").asString());
261253

262254
deposit.at(depositor).set(token, amount);
263-
264255
SwapOrder swapOrder = SwapOrder
265-
.fromBytes(hexStringToByteArray(jsonObject.get("swapOrderDataBytes").toString()));
266-
Context.require(amount.equals(swapOrder.getAmount()), "Token amount must be equal");
256+
.fromBytes(hexStringToByteArray(json.get("swapOrderDataBytes").asString()));
257+
258+
Context.require(amount.equals(swapOrder.amount), "Token amount must be equal");
267259
Context.require(swapOrder.getToken() != null, "Token can't be null");
268-
Context.require(Context.getCaller().toString().equals(swapOrder.getCreator()),
260+
Context.require(Context.getCaller().toString().equals(extractAddress(swapOrder.getCreator())),
269261
"Creator must be sender");
270-
271-
Address swapOrderToken = Address.fromString(swapOrder.getToken());
272-
Address nativAddress = nativeAddress.get();
273-
if (swapOrderToken.equals(nativAddress)) {
274-
Context.require(Context.getValue().equals(swapOrder.getAmount()),
275-
"Deposit amount not equal to order amount");
276-
} else {
277-
Context.require(Context.getValue().equals(BigInteger.valueOf(0)),
278-
"Nativ Token Must Be Zero");
279-
Context.call(swapOrderToken, "transfer", Context.getAddress(), swapOrder.getAmount());
280-
}
281262
_swap(swapOrder);
282263
}
283264

@@ -317,4 +298,26 @@ public static BigInteger getDepositAmount(String depositer, String token) {
317298
static void OnlyOwner() {
318299
Context.require(owner.get().equals(Context.getCaller()), "Not Owner");
319300
}
301+
302+
public static String extractAddress(String input) {
303+
if (input.contains("0x2.icon/")) {
304+
int lastSlashIndex = input.lastIndexOf('/');
305+
if (lastSlashIndex != -1 && lastSlashIndex < input.length() - 1) {
306+
return input.substring(lastSlashIndex + 1);
307+
}
308+
} else {
309+
return input;
310+
}
311+
return null;
312+
}
313+
314+
public static byte[] hexStringToByteArray(String s) {
315+
int len = s.length();
316+
byte[] data = new byte[len / 2];
317+
for (int i = 0; i < len; i += 2) {
318+
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
319+
+ Character.digit(s.charAt(i + 1), 16));
320+
}
321+
return data;
322+
}
320323
}

contracts/javascore/Intent_Contracts/app/src/main/java/network/icon/intent/structs/SwapOrder.java

+22
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,39 @@ public static void writeObject(ObjectWriter writer, SwapOrder obj) {
4747
public static SwapOrder readObject(ObjectReader reader) {
4848
SwapOrder obj = new SwapOrder();
4949
reader.beginList();
50+
Context.println("reading swap order");
5051
obj.id = reader.readBigInteger();
52+
Context.println(obj.id.toString());
5153
obj.emitter = reader.readString();
54+
Context.println(obj.emitter.toString());
55+
5256
obj.srcNID = reader.readString();
57+
Context.println(obj.srcNID.toString());
58+
5359
obj.dstNID = reader.readString();
60+
Context.println(obj.dstNID.toString());
61+
5462
obj.creator = reader.readString();
63+
Context.println(obj.creator.toString());
64+
5565
obj.destinationAddress = reader.readString();
66+
Context.println(obj.destinationAddress.toString());
67+
5668
obj.token = reader.readString();
69+
Context.println(obj.token.toString());
70+
5771
obj.amount = reader.readBigInteger();
72+
Context.println(obj.amount.toString());
73+
5874
obj.toToken = reader.readString();
75+
Context.println(obj.toToken.toString());
76+
5977
obj.toAmount = reader.readBigInteger();
78+
Context.println(obj.toAmount.toString());
79+
6080
obj.data = reader.readString();
81+
Context.println(obj.data.toString());
82+
6183
reader.end();
6284
return obj;
6385
}

0 commit comments

Comments
 (0)