Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.torusresearch.fetchnodedetails;


import org.torusresearch.fetchnodedetails.types.EthereumNetwork;
import org.torusresearch.fetchnodedetails.types.NodeDetails;
import org.torusresearch.fetchnodedetails.types.NodeInfo;
import org.torusresearch.fetchnodedetails.types.TorusNetwork;
import org.torusresearch.fetchnodedetails.types.TorusNodePub;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.Hash;
Expand All @@ -13,81 +13,40 @@

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.concurrent.CompletableFuture;

public class FetchNodeDetails {

public static String PROXY_ADDRESS_MAINNET = "0xf20336e16B5182637f09821c27BDe29b0AFcfe80";
public static String PROXY_ADDRESS_ROPSTEN = "0x6258c9d6c12ed3edda59a1a6527e469517744aa7";
public static String PROXY_ADDRESS_POLYGON = "0x9f072ba19b3370e512aa1b4bfcdaf97283168005";

public static NodeDetails NODE_DETAILS_MAINNET = new NodeDetails(
"19",
"0xf20336e16B5182637f09821c27BDe29b0AFcfe80",
new String[]{
"https://torus-19.torusnode.com/jrpc",
"https://torus-node.ens.domains/jrpc",
"https://torus-node.matic.network/jrpc",
"https://torus.zilliqa.network/jrpc",
"https://torus-mainnet.cosmos.network/jrpc",
"https://torus2.etherscan.com/jrpc",
"https://torus-node-v2.skalelabs.com/jrpc",
"https://torus-node.binancex.dev/jrpc",
"https://torusnode.ont.io/jrpc"
},
new BigInteger[]{new BigInteger("1"), new BigInteger("2"), new BigInteger("3"), new BigInteger("4"), new BigInteger("5"), new BigInteger("6"), new BigInteger("7"), new BigInteger("8"), new BigInteger("9"),},
new TorusNodePub[]{
new TorusNodePub(
"bbe83c64177c3775550e6ba6ac2bc059f6847d644c9e4894e42c60d7974d8c2b",
"82b49a7caf70def38cdad2740af45c1e4f969650105c5019a29bb18b21a9acb5"
),
new TorusNodePub(
"c208cac4ef9a47d386097a9c915b28e9cb89213abee8d26a17198ee261201b0d",
"c7db2fe4631109f40833de9dc78d07e35706549ee48fa557b33e4e75e1047873"
), new TorusNodePub
(
"ca1766bb426d4ca5582818a0c5439d560ea64f5baa060793ab29dd3d0ceacfe",
"d46c1d08c40e1306e1bca328c2287b8268166b11a1ba4b8442ea2ad0c5e32152"
), new TorusNodePub
(
"c3934dd2f6f4b3d2e1e398cc501e143c1e1a381b52feb6d1525af34d16253768",
"71f5141a5035799099f5ea3e241e66946bc55dc857ac3bd7d6fcdb8dcd3eeeef"
), new TorusNodePub
(
"22e66f1929631d00bf026227581597f085fd94fd952fc0dca9f0833398b5c064",
"6088b3912e10a1e9d50355a609c10db7d188f16a2e2fd7357e51bf4f6a74f0a1"
), new TorusNodePub
(
"9dc9fa410f3ce9eb70df70cdea00a49f2c4cc7a31c08c0dab5f863ed35ff5139",
"627a291cb87a75c61da3f65d6818e1e05e360217179817ed27e8c73bca7ec122"
), new TorusNodePub
(
"118b9fc07e97b096d899b9f6658463ce6a8caa64038e37fc969df4e6023dd8c6",
"baf9fa4e51770f4796ea165dd03a769b8606681a38954a0a92c4cbffd6609ce9"
), new TorusNodePub
(
"8a6d8b925da15a273dec3d8f8395ec35cd6878f274b2b180e4e106999db64043",
"96f67f870c157743da0b1eb84d89bf30500d74dc84c11f501ee1cb013acc8c46"
), new TorusNodePub
(
"39cecb62e863729f572f7dfc46c24867981bf04bb405fed0df39e33984bfade5",
"61c2364434012e68a2be2e9952805037e52629d7762fafc8e10e9fb5bad8f790"
)
},
false);
public static String PROXY_ADDRESS_TESTNET = "0x6258c9d6c12ed3edda59a1a6527e469517744aa7";
public static String PROXY_ADDRESS_CYAN = "0x9f072ba19b3370e512aa1b4bfcdaf97283168005";
public static String PROXY_ADDRESS_AQUA = "0x29Dea82a0509153b91040ee13cDBba0f03efb625";


public static HashMap<TorusNetwork, String> NETWORK_MAP = new HashMap<TorusNetwork, String>() {
{
put(TorusNetwork.MAINNET, "mainnet");
put(TorusNetwork.TESTNET, "ropsten");
put(TorusNetwork.CYAN, "polygon-mainnet");
put(TorusNetwork.AQUA, "polygon-mainnet");
}
};

public static NodeDetails NODE_DETAILS_MAINNET = new NodeDetails("19", "0xf20336e16B5182637f09821c27BDe29b0AFcfe80", new String[]{"https://torus-19.torusnode.com/jrpc", "https://torus-node.ens.domains/jrpc", "https://torus-node.matic.network/jrpc", "https://torus.zilliqa.network/jrpc", "https://torus-mainnet.cosmos.network/jrpc", "https://torus2.etherscan.com/jrpc", "https://torus-node-v2.skalelabs.com/jrpc", "https://torus-node.binancex.dev/jrpc", "https://torusnode.ont.io/jrpc"}, new BigInteger[]{new BigInteger("1"), new BigInteger("2"), new BigInteger("3"), new BigInteger("4"), new BigInteger("5"), new BigInteger("6"), new BigInteger("7"), new BigInteger("8"), new BigInteger("9"),}, new TorusNodePub[]{new TorusNodePub("bbe83c64177c3775550e6ba6ac2bc059f6847d644c9e4894e42c60d7974d8c2b", "82b49a7caf70def38cdad2740af45c1e4f969650105c5019a29bb18b21a9acb5"), new TorusNodePub("c208cac4ef9a47d386097a9c915b28e9cb89213abee8d26a17198ee261201b0d", "c7db2fe4631109f40833de9dc78d07e35706549ee48fa557b33e4e75e1047873"), new TorusNodePub("ca1766bb426d4ca5582818a0c5439d560ea64f5baa060793ab29dd3d0ceacfe", "d46c1d08c40e1306e1bca328c2287b8268166b11a1ba4b8442ea2ad0c5e32152"), new TorusNodePub("c3934dd2f6f4b3d2e1e398cc501e143c1e1a381b52feb6d1525af34d16253768", "71f5141a5035799099f5ea3e241e66946bc55dc857ac3bd7d6fcdb8dcd3eeeef"), new TorusNodePub("22e66f1929631d00bf026227581597f085fd94fd952fc0dca9f0833398b5c064", "6088b3912e10a1e9d50355a609c10db7d188f16a2e2fd7357e51bf4f6a74f0a1"), new TorusNodePub("9dc9fa410f3ce9eb70df70cdea00a49f2c4cc7a31c08c0dab5f863ed35ff5139", "627a291cb87a75c61da3f65d6818e1e05e360217179817ed27e8c73bca7ec122"), new TorusNodePub("118b9fc07e97b096d899b9f6658463ce6a8caa64038e37fc969df4e6023dd8c6", "baf9fa4e51770f4796ea165dd03a769b8606681a38954a0a92c4cbffd6609ce9"), new TorusNodePub("8a6d8b925da15a273dec3d8f8395ec35cd6878f274b2b180e4e106999db64043", "96f67f870c157743da0b1eb84d89bf30500d74dc84c11f501ee1cb013acc8c46"), new TorusNodePub("39cecb62e863729f572f7dfc46c24867981bf04bb405fed0df39e33984bfade5", "61c2364434012e68a2be2e9952805037e52629d7762fafc8e10e9fb5bad8f790")}, false);

private final String proxyAddress;
private final NodeDetails nodeDetails = new NodeDetails();
private final String providerUrl;
private TorusLookup torusLookup;

public FetchNodeDetails() {
this(EthereumNetwork.MAINNET, "0xf20336e16B5182637f09821c27BDe29b0AFcfe80");
this(TorusNetwork.MAINNET, "0xf20336e16B5182637f09821c27BDe29b0AFcfe80");
}

public FetchNodeDetails(EthereumNetwork network, String proxyAddress) {
public FetchNodeDetails(TorusNetwork network, String proxyAddress) {
this.proxyAddress = proxyAddress;
this.providerUrl = "https://" + network.toString() + ".infura.io/v3/" + "b8cdb0e4cff24599a286bf8e87ff1c96";
this.providerUrl = "https://" + NETWORK_MAP.get(network) + ".infura.io/v3/" + "b8cdb0e4cff24599a286bf8e87ff1c96";
this.setupWeb3();
}

Expand All @@ -99,7 +58,7 @@ public FetchNodeDetails(String providerUrl, String proxyAddress) {

public CompletableFuture<NodeDetails> getNodeDetails(String verifier, String verifierId) {
// For mainnet & ropsten, verifierId combination doesn't change the network details
if (this.nodeDetails.getUpdated() && (this.proxyAddress.equals(PROXY_ADDRESS_MAINNET) || this.proxyAddress.equals(PROXY_ADDRESS_ROPSTEN)))
if (this.nodeDetails.getUpdated() && (this.proxyAddress.equals(PROXY_ADDRESS_MAINNET) || this.proxyAddress.equals(PROXY_ADDRESS_TESTNET)))
return CompletableFuture.supplyAsync(() -> this.nodeDetails);
byte[] hashedVerifierId = Hash.sha3(verifierId.getBytes(StandardCharsets.UTF_8));
CompletableFuture<NodeDetails> cf = new CompletableFuture<>();
Expand All @@ -117,9 +76,7 @@ public CompletableFuture<NodeDetails> getNodeDetails(String verifier, String ver
TorusNodePub[] updatedNodePub = new TorusNodePub[nodeEndPoints.component3().size()];

for (int i = 0; i < nodeEndPoints.component3().size(); i++) {
NodeInfo endPointElement = new NodeInfo(String.valueOf(nodeEndPoints.component2().get(i)),
new BigInteger(String.valueOf(nodeEndPoints.component3().get(i)), 10).toString(16).replace("0x", ""),
new BigInteger(String.valueOf(nodeEndPoints.component4().get(i)), 10).toString(16).replace("0x", ""));
NodeInfo endPointElement = new NodeInfo(String.valueOf(nodeEndPoints.component2().get(i)), new BigInteger(String.valueOf(nodeEndPoints.component3().get(i)), 10).toString(16).replace("0x", ""), new BigInteger(String.valueOf(nodeEndPoints.component4().get(i)), 10).toString(16).replace("0x", ""));

String endpoint = "https://" + endPointElement.getDeclaredIp().split(":")[0] + "/jrpc";
updatedEndpoints[i] = endpoint;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package org.torusresearch.fetchnodedetails.types;

public enum EthereumNetwork {
public enum TorusNetwork {
MAINNET("mainnet"),
ROPSTEN("ropsten"),
POLYGON("polygon-mainnet");
TESTNET("testnet"),
CYAN("cyan"),
AQUA("aqua");


private final String val;

EthereumNetwork(String s) {
TorusNetwork(String s) {
this.val = s;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.torusresearch.fetchnodedetails.FetchNodeDetails;
import org.torusresearch.fetchnodedetails.types.EthereumNetwork;
import org.torusresearch.fetchnodedetails.types.TorusNetwork;
import org.torusresearch.fetchnodedetails.types.NodeDetails;
import org.torusresearch.fetchnodedetailstest.config.Config;

Expand All @@ -23,20 +23,28 @@ public void shouldGetNodeDetailsMainnet() throws ExecutionException, Interrupted
assertEquals(Config.MAINNET, nodeDetails);
}

@DisplayName("Gets the Node details for Ropsten")
@DisplayName("Gets the Node details for Testnet")
@Test
public void shouldGetNodeDetailsRopsten() throws ExecutionException, InterruptedException, UnsupportedEncodingException {
fetchNodeDetails = new FetchNodeDetails(EthereumNetwork.ROPSTEN, FetchNodeDetails.PROXY_ADDRESS_ROPSTEN);
fetchNodeDetails = new FetchNodeDetails(TorusNetwork.TESTNET, FetchNodeDetails.PROXY_ADDRESS_TESTNET);
NodeDetails nodeDetails = this.fetchNodeDetails.getNodeDetails("google", "hello@tor.us").get();
assertEquals(Config.ROPSTEN, nodeDetails);
assertEquals(Config.TESTNET, nodeDetails);
}

@DisplayName("Gets the Node details for Polygon")
@DisplayName("Gets the Node details for Cyan")
@Test
public void shouldGetNodeDetailsPolygon() throws ExecutionException, InterruptedException, UnsupportedEncodingException {
fetchNodeDetails = new FetchNodeDetails(EthereumNetwork.POLYGON, FetchNodeDetails.PROXY_ADDRESS_POLYGON);
public void shouldGetNodeDetailsCyan() throws ExecutionException, InterruptedException, UnsupportedEncodingException {
fetchNodeDetails = new FetchNodeDetails(TorusNetwork.CYAN, FetchNodeDetails.PROXY_ADDRESS_CYAN);
NodeDetails nodeDetails = this.fetchNodeDetails.getNodeDetails("google", "hello@tor.us").get();
assertEquals(Config.POLYGON, nodeDetails);
assertEquals(Config.CYAN, nodeDetails);
}

@DisplayName("Gets the Node details for Aqua")
@Test
public void shouldGetNodeDetailsAqua() throws ExecutionException, InterruptedException, UnsupportedEncodingException {
fetchNodeDetails = new FetchNodeDetails(TorusNetwork.AQUA, FetchNodeDetails.PROXY_ADDRESS_AQUA);
NodeDetails nodeDetails = this.fetchNodeDetails.getNodeDetails("glipandroid", "hello@tor.us").get();
assertEquals(Config.AQUA, nodeDetails);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,18 @@

public class Config {
public static NodeDetails MAINNET;
public static NodeDetails ROPSTEN;
public static NodeDetails POLYGON;
public static NodeDetails TESTNET;
public static NodeDetails CYAN;

public static NodeDetails AQUA;

static {
try {
String basePath = "src/test/java/org/torusresearch/fetchnodedetailstest/config/";
MAINNET = getNodeDetailsFromFile(basePath + "mainnet.json");
ROPSTEN = getNodeDetailsFromFile(basePath + "ropsten.json");
POLYGON = getNodeDetailsFromFile(basePath + "polygon.json");
TESTNET = getNodeDetailsFromFile(basePath + "testnet.json");
CYAN = getNodeDetailsFromFile(basePath + "cyan.json");
AQUA = getNodeDetailsFromFile(basePath + "aqua.json");
} catch (Exception ex) {
ex.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"currentEpoch": "1",
"nodeListAddress": "0x29Dea82a0509153b91040ee13cDBba0f03efb625",
"torusNodeEndpoints": [
"https://node-1.cluster-2.aqua.web3auth.io/jrpc",
"https://node-2.cluster-2.aqua.web3auth.io/jrpc",
"https://node-3.cluster-2.aqua.web3auth.io/jrpc",
"https://node-4.cluster-2.aqua.web3auth.io/jrpc",
"https://node-5.cluster-2.aqua.web3auth.io/jrpc"
],
"torusNodePub": [
{
"X": "7d376a4a7ce6bba7a8a49001aaa2de3f24e0f56ee73a77c6678ec00363616f25",
"Y": "d5752873e522f98b4ded27690aadfda57ff5dc2fd0c3055b9d83663441667010"
},
{
"X": "e1b5debe1d9b42eb9917a5fe84fa5f48cae7a770b1f49f0546fbe26b1efaff3",
"Y": "8947458cbfd8b40c7bc6160c7c746c2dca65c7d6ffdccd5579203b92a020b4ad"
},
{
"X": "98c3582b138b375b643984094882c17ca7ee090787c0a7065d229672845aa25e",
"Y": "2c3923bd015faac2cf3d91ab4cf8c6cdd4eb9f99e407a35703edf17e8c35d"
},
{
"X": "e7ef4c1ea43bd385ab8bfb02a5aedcd33bed35b95980c0729e9a35edd02a8597",
"Y": "d540aa7d1c9cafd2216e089b8c795a9034368960729103c9a2c875d76b81fc6d"
},
{
"X": "bb7d3500ead64d0bccd97f24b5c848ff6cbe867c0c03ca9f2922626ac5d1e49d",
"Y": "865ea03db0501bc9ffa83600202de437c7c10aa511c58ba54683b4d5f56ae314"
}
],
"torusIndexes": [1, 2, 3, 4, 5],
"updated": true
}