diff --git a/src/main/java/com/limechain/Main.java b/src/main/java/com/limechain/Main.java index dae19f372..1666bb377 100644 --- a/src/main/java/com/limechain/Main.java +++ b/src/main/java/com/limechain/Main.java @@ -2,9 +2,11 @@ import com.limechain.client.HostNode; import com.limechain.client.LightClient; +import com.limechain.config.AppBean; +import com.limechain.config.ChainService; +import com.limechain.config.CommonConfig; import com.limechain.rpc.WsRpcClient; import com.limechain.rpc.WsRpcClientImpl; -import com.limechain.rpc.server.RpcApp; import com.limechain.utils.DivLogger; import org.teavm.jso.JSBody; import org.teavm.jso.core.JSString; @@ -18,21 +20,31 @@ public class Main { private static final DivLogger log = new DivLogger(); public static void main(String[] args) { - exportWsRpc(new WsRpcClientImpl(), JSString.valueOf(WS_RPC)); + if (args.length != 1) { + throw new IllegalStateException( + "Please provide a valid chain spec string or one of the supported chain names."); + } log.log("Starting LimeChain node..."); - RpcApp rpcApp = new RpcApp(); - rpcApp.start(); + String chainString = args[0]; + initContext(chainString); HostNode client = new LightClient(); - - // Start the client - // NOTE: This starts the beans the client would need - mutates the global context client.start(); + log.log(Level.INFO, "\uD83D\uDE80Started light client!"); } + private static void initContext(String chainString) { + ChainService chainService = AppBean.getBean(ChainService.class); + chainService.init(chainString); + + CommonConfig.start(); + + exportWsRpc(new WsRpcClientImpl(), JSString.valueOf(WS_RPC)); + } + @JSBody(params = {"c", "apiName"}, script = "window[apiName] = c;") private static native void exportWsRpc(WsRpcClient c, JSString apiName); } \ No newline at end of file diff --git a/src/main/java/com/limechain/chain/Chain.java b/src/main/java/com/limechain/chain/Chain.java index 9936727cd..a6e34d53a 100644 --- a/src/main/java/com/limechain/chain/Chain.java +++ b/src/main/java/com/limechain/chain/Chain.java @@ -2,23 +2,40 @@ import lombok.Getter; +// TODO: Cleanup + /** - * Stores the Polkadot chain the Host is running on. + * Stores data for the supported chains. */ @Getter public enum Chain { - POLKADOT("polkadot"), - KUSAMA("kusama"), - LOCAL("local"), - WESTEND("westend"); + POLKADOT("polkadot", + "polkadot", + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rpc.polkadot.io"), + KUSAMA("kusama", + "ksmcc3", + "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "kusama-rpc.polkadot.io"), + WESTEND("westend", + "westend2", + "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "westend-rpc.polkadot.io"), + LOCAL("local", "local", null, null); /** * Holds the name of the chain */ private final String value; + private final String id; + private final String genesisBlockHash; + private final String rpcEndpoint; - Chain(String value) { + Chain(String value, String id, String genesisBlockHash, String rpcEndpoint) { this.value = value; + this.id = id; + this.genesisBlockHash = genesisBlockHash; + this.rpcEndpoint = rpcEndpoint; } /** @@ -29,7 +46,22 @@ public enum Chain { */ public static Chain fromString(String chain) { for (Chain type : values()) { - if (type.getValue().equals(chain)) { + if (type.value.equals(chain)) { + return type; + } + } + return null; + } + + /** + * Tries to map chain id string parameter to an enum based on its id field. + * + * @param id name of the enum id to map + * @return {@link Chain} or null if mapping is unsuccessful + */ + public static Chain fromChainId(String id) { + for (Chain type : values()) { + if (type.id.equals(id)) { return type; } } diff --git a/src/main/java/com/limechain/chain/ChainService.java b/src/main/java/com/limechain/chain/ChainService.java deleted file mode 100644 index 1e14957e0..000000000 --- a/src/main/java/com/limechain/chain/ChainService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.limechain.chain; - -import com.limechain.chain.spec.ChainSpec; -import com.limechain.config.HostConfig; -import com.limechain.exception.chain.ChainServiceInitializationException; -import lombok.Getter; -import lombok.extern.java.Log; - -import java.io.IOException; -import java.util.logging.Level; - -/** - * Service used to read/write chain spec(genesis) info to/from the DB - */ -@Getter -@Log -public class ChainService { -// /** -// * Key-value repository that stores the chain spec info -// */ -// private final KVRepository repository; - - /** - * Instance that holds the chain spec info - */ - private final ChainSpec chainSpec; - - /** - * Whether the chain setup is in local development mode - */ - private final boolean isLocalChain; - - public ChainService(HostConfig hostConfig) { - this.isLocalChain = hostConfig.getChain() == Chain.LOCAL; - - /* - WORKAROUND - The inLocalDevelopment variable and its usage below are only to aid in development. - It is expected that the local genesis file will change rather frequently while the all official - chain specifications will never change. To improve performance we are loading the chain - specifications only once, and then they are saved to the database. - Saving the local genesis file is not suitable in this early phase of development. - This might be removed in the future. - */ - // TODO: Think about extracting this initialization logic outside this constructor -// Optional cachedChainSpec = repository.find(DBConstants.GENESIS_KEY); - -// if (cachedChainSpec.isPresent() && !isLocalChain) { -// this.chainSpec = (ChainSpec) cachedChainSpec.get(); -// log.log(Level.INFO, "✅️Loaded chain spec from DB"); -// } else { - try { - this.chainSpec = ChainSpec.newFromJSON(hostConfig.getGenesisPath()); - log.log(Level.INFO, "✅️Loaded chain spec from JSON"); - -// repository.save(DBConstants.GENESIS_KEY, this.chainSpec); - log.log(Level.INFO, "Saved chain spec to database"); - } catch (IOException e) { - throw new ChainServiceInitializationException(e); - } -// } - } -} diff --git a/src/main/java/com/limechain/chain/spec/ChainSpec.java b/src/main/java/com/limechain/chain/spec/ChainSpec.java index 847ed0aac..233318c99 100644 --- a/src/main/java/com/limechain/chain/spec/ChainSpec.java +++ b/src/main/java/com/limechain/chain/spec/ChainSpec.java @@ -6,7 +6,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.IOException; import java.io.Serializable; import java.util.Map; @@ -28,9 +27,8 @@ public class ChainSpec implements Serializable { * * @param pathToChainSpecJSON path to the chain specification json file * @return class instance mapped to the json file - * @throws IOException If path is invalid */ - public static ChainSpec newFromJSON(String pathToChainSpecJSON) throws IOException { + public static ChainSpec newFromJSON(String pathToChainSpecJSON) { ObjectMapper mapper = new ObjectMapper(false); String jsonChainSpec = JsonUtil.readJsonFromFile(pathToChainSpecJSON); return mapper.mapToClass(jsonChainSpec, ChainSpec.class); diff --git a/src/main/java/com/limechain/chain/spec/ChainType.java b/src/main/java/com/limechain/chain/spec/ChainType.java index 61427882b..24e9c361a 100644 --- a/src/main/java/com/limechain/chain/spec/ChainType.java +++ b/src/main/java/com/limechain/chain/spec/ChainType.java @@ -2,6 +2,7 @@ import java.io.Serializable; +// TODO: Cleanup /** * An enum modelling all possible chain types * (as per the spec). diff --git a/src/main/java/com/limechain/client/LightClient.java b/src/main/java/com/limechain/client/LightClient.java index 7e2fffca0..f4d48367f 100644 --- a/src/main/java/com/limechain/client/LightClient.java +++ b/src/main/java/com/limechain/client/LightClient.java @@ -1,7 +1,7 @@ package com.limechain.client; +import com.limechain.config.AppBean; import com.limechain.network.Network; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.utils.DivLogger; import lombok.SneakyThrows; diff --git a/src/main/java/com/limechain/rpc/server/AppBean.java b/src/main/java/com/limechain/config/AppBean.java similarity index 74% rename from src/main/java/com/limechain/rpc/server/AppBean.java rename to src/main/java/com/limechain/config/AppBean.java index e05f00a23..39b8c8116 100644 --- a/src/main/java/com/limechain/rpc/server/AppBean.java +++ b/src/main/java/com/limechain/config/AppBean.java @@ -1,4 +1,4 @@ -package com.limechain.rpc.server; +package com.limechain.config; import lombok.extern.java.Log; @@ -16,7 +16,7 @@ public class AppBean { * Returns the Spring managed bean instance of the given class type if it exists. * Returns null otherwise. */ - public static T getBean(Class beanClass) { - return (T) CommonConfig.getBean(beanClass); + public static T getBean(Class beanClass) { + return CommonConfig.getBean(beanClass); } } diff --git a/src/main/java/com/limechain/config/ChainService.java b/src/main/java/com/limechain/config/ChainService.java new file mode 100644 index 000000000..351f2118d --- /dev/null +++ b/src/main/java/com/limechain/config/ChainService.java @@ -0,0 +1,74 @@ +package com.limechain.config; + +import com.limechain.chain.Chain; +import com.limechain.chain.spec.ChainSpec; +import com.limechain.polkaj.Hash256; +import com.limechain.utils.DivLogger; +import com.limechain.utils.json.ObjectMapper; +import lombok.Getter; + +import java.util.logging.Level; + +// TODO: Cleanup + +/** + * Configuration class used to store any Host specific information + */ +@Getter +public class ChainService { + + private static final String GENESIS_DIR_FORMAT = "genesis/%s.json"; + private static final String WSS_PROTOCOL = "wss://"; + private static final String HTTPS_PROTOCOL = "https://"; + + /** + * The chain that the light client is communicating with. + */ + private Chain chain; + /** + * The chain spec of the chain. + */ + private ChainSpec chainSpec; + + private static final DivLogger log = new DivLogger(); + + public void init(String chainString) { + log.log(Level.INFO, "Loading chain context..."); + + Chain cliChain = Chain.fromString(chainString); + try { + if (cliChain != null) { + chain = cliChain; + chainSpec = ChainSpec.newFromJSON(getGenesisPath()); + } else { + chainSpec = new ObjectMapper(false).mapToClass(chainString, ChainSpec.class); + chain = Chain.fromChainId(chainSpec.getId()); + } + } catch (Exception e) { + System.out.println("Something went wrong while loading chain data. " + e.getMessage()); + } + + log.log(Level.INFO, "✅️Loaded chain context for the " + chain.getValue() + " chain."); + } + + /** + * Gets the genesis file path based on the chain the node is configured + * + * @return genesis(chain spec) file path + */ + public String getGenesisPath() { + return String.format(GENESIS_DIR_FORMAT, chain.getId()); + } + + public String getWsRpcEndpoint() { + return WSS_PROTOCOL + chain.getRpcEndpoint(); + } + + public String getHttpsEndpoint() { + return HTTPS_PROTOCOL + chain.getRpcEndpoint(); + } + + public Hash256 getGenesisBlockHash() { + return Hash256.from(chain.getGenesisBlockHash()); + } +} diff --git a/src/main/java/com/limechain/config/CommonConfig.java b/src/main/java/com/limechain/config/CommonConfig.java new file mode 100644 index 000000000..5bc46a72b --- /dev/null +++ b/src/main/java/com/limechain/config/CommonConfig.java @@ -0,0 +1,58 @@ +package com.limechain.config; + +import com.limechain.network.Network; +import com.limechain.storage.block.SyncState; +import com.limechain.sync.warpsync.WarpSyncMachine; +import com.limechain.sync.warpsync.WarpSyncState; + +import java.util.HashMap; +import java.util.Map; + +/** + * Spring configuration class used to instantiate beans. + */ +public class CommonConfig { + + private static final Map, Object> beans = new HashMap<>(); + + public static void start() { + getBean(SystemInfo.class); + getBean(WarpSyncMachine.class); + } + + @SuppressWarnings("unchecked") + protected static T getBean(Class beanClass) { + if (beans.containsKey(beanClass)) { + return (T) beans.get(beanClass); + } else { + Object bean; + switch (beanClass.getSimpleName()) { + case "ChainService": + bean = new ChainService(); + break; + case "SyncState": + bean = new SyncState(getBean(ChainService.class)); + break; + case "SystemInfo": + bean = new SystemInfo(getBean(ChainService.class)); + break; + case "Network": + bean = new Network(getBean(ChainService.class)); + break; + case "WarpSyncState": + bean = new WarpSyncState(getBean(SyncState.class), getBean(Network.class)); + break; + case "WarpSyncMachine": + bean = new WarpSyncMachine(getBean(Network.class), + getBean(ChainService.class), + getBean(SyncState.class), + getBean(WarpSyncState.class)); + break; + default: + return null; + } + beans.put(beanClass, bean); + return (T) bean; + } + } +} diff --git a/src/main/java/com/limechain/config/HostConfig.java b/src/main/java/com/limechain/config/HostConfig.java deleted file mode 100644 index 62d3380c2..000000000 --- a/src/main/java/com/limechain/config/HostConfig.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.limechain.config; - -import com.limechain.chain.Chain; -import com.limechain.constants.RpcConstants; -import com.limechain.utils.DivLogger; -import lombok.Getter; - -import java.util.logging.Level; - -/** - * Configuration class used to store any Host specific information - */ -@Getter -public class HostConfig { - /** - * Chain the Host is running on - */ - private final Chain chain; - // private final NodeRole nodeRole; - private final String rpcNodeAddress; - - private final String polkadotGenesisPath = "genesis/polkadot.json"; - private final String kusamaGenesisPath = "genesis/ksmcc3.json"; - private final String westendGenesisPath = "genesis/westend2.json"; - private final String localGenesisPath = "genesis/westend-local.json"; - - private static final DivLogger log = new DivLogger(); - - public HostConfig() { - log.log(Level.INFO, "Loading app config..."); - this.chain = Chain.POLKADOT; -// Optional -// .ofNullable(network.isEmpty() ? WESTEND : fromString(network)) -// .orElseThrow(() -> new InvalidChainException(String.format("\"%s\" is not a valid chain.", network))); - -// this.nodeRole = NodeRole.LIGHT; - - log.log(Level.INFO, "Loading rpcNodeAddress..."); - switch (chain.getValue()) { - case "KUSAMA": - rpcNodeAddress = RpcConstants.KUSAMA_WS_RPC; - break; - case "WESTEND": - rpcNodeAddress = RpcConstants.WESTEND_WS_RPC; - break; - default: - rpcNodeAddress = RpcConstants.POLKADOT_WS_RPC; - } - - log.log(Level.INFO, "✅️Loaded app config for chain " + chain); - } - - /** - * Gets the genesis file path based on the chain the node is configured - * - * @return genesis(chain spec) file path - */ - public String getGenesisPath() { - return switch (chain) { - case POLKADOT -> polkadotGenesisPath; - case KUSAMA -> kusamaGenesisPath; - case WESTEND -> westendGenesisPath; - case LOCAL -> localGenesisPath; - }; - } - - public String getHttpsRpcEndpoint() { - return switch (chain) { - case KUSAMA -> RpcConstants.KUSAMA_HTTPS_RPC; - case WESTEND -> RpcConstants.WESTEND_HTTPS_RPC; - case POLKADOT, LOCAL -> RpcConstants.POLKADOT_HTTPS_RPC; - }; - } -} diff --git a/src/main/java/com/limechain/config/SystemInfo.java b/src/main/java/com/limechain/config/SystemInfo.java index c5dd4e81b..dde125b7e 100644 --- a/src/main/java/com/limechain/config/SystemInfo.java +++ b/src/main/java/com/limechain/config/SystemInfo.java @@ -1,27 +1,28 @@ package com.limechain.config; -import com.limechain.chain.Chain; import com.limechain.utils.DivLogger; import lombok.Getter; import java.util.logging.Level; +//TODO: Cleanup + /** * Configuration class used to hold and information used by the system rpc methods */ @Getter public class SystemInfo { // private final String role; - private final Chain chain; + private final ChainService chainService; // private final String hostIdentity; private String hostName = "Fruzhin"; private String hostVersion = "0.0.1"; private static final DivLogger log = new DivLogger(); - public SystemInfo(HostConfig hostConfig) { + public SystemInfo(ChainService chainService) { // this.role = network.getNodeRole().name(); - this.chain = hostConfig.getChain(); + this.chainService = chainService; // this.hostIdentity = network.getHost().getPeerId().toString(); logSystemInfo(); } @@ -38,7 +39,7 @@ public void logSystemInfo() { log.log(Level.INFO, lemonEmoji + "LimeChain Fruzhin"); log.log(Level.INFO, pinEmoji + "Version: " + hostVersion); - log.log(Level.INFO, clipboardEmoji + "Chain specification: " + chain.getValue()); + log.log(Level.INFO, clipboardEmoji + "Chain specification: " + chainService.getChain().getValue()); log.log(Level.INFO, labelEmoji + "Host name: " + hostName); // log.log(Level.INFO, authEmoji + "Role: " + role); // log.log(Level.INFO, "Local node identity is: " + hostIdentity); diff --git a/src/main/java/com/limechain/constants/GenesisBlockHash.java b/src/main/java/com/limechain/constants/GenesisBlockHash.java deleted file mode 100644 index 2ffbec72c..000000000 --- a/src/main/java/com/limechain/constants/GenesisBlockHash.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.limechain.constants; - -import com.limechain.polkaj.Hash256; - -public class GenesisBlockHash { - public static final Hash256 POLKADOT = - Hash256.from("91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3"); - public static final Hash256 WESTEND = - Hash256.from("e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e"); - public static final Hash256 KUSAMA = - Hash256.from("b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe"); -} diff --git a/src/main/java/com/limechain/constants/RpcConstants.java b/src/main/java/com/limechain/constants/RpcConstants.java deleted file mode 100644 index b4ddd776d..000000000 --- a/src/main/java/com/limechain/constants/RpcConstants.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.limechain.constants; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class RpcConstants { - public static final String POLKADOT_WS_RPC = "wss://rpc.polkadot.io"; - public static final String KUSAMA_WS_RPC = "wss://kusama-rpc.polkadot.io"; - public static final String WESTEND_WS_RPC = "wss://westend-rpc.polkadot.io"; - - public static final String POLKADOT_HTTPS_RPC = "https://rpc.polkadot.io"; - public static final String KUSAMA_HTTPS_RPC = "https://kusama-rpc.polkadot.io"; - public static final String WESTEND_HTTPS_RPC = "https://westend-rpc.polkadot.io"; -} \ No newline at end of file diff --git a/src/main/java/com/limechain/network/Network.java b/src/main/java/com/limechain/network/Network.java index ae7922344..15811587f 100644 --- a/src/main/java/com/limechain/network/Network.java +++ b/src/main/java/com/limechain/network/Network.java @@ -1,12 +1,12 @@ package com.limechain.network; -import com.limechain.chain.ChainService; +import com.limechain.config.AppBean; +import com.limechain.config.ChainService; import com.limechain.network.kad.KademliaService; import com.limechain.network.protocol.blockannounce.BlockAnnounceService; import com.limechain.network.protocol.grandpa.GrandpaService; import com.limechain.network.protocol.warp.WarpSyncService; import com.limechain.network.protocol.warp.dto.WarpSyncResponse; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncState; import lombok.Getter; import lombok.extern.java.Log; @@ -14,6 +14,8 @@ import java.util.Random; import java.util.logging.Level; +//TODO: Cleanup + /** * A Network class that handles all peer connections and Kademlia */ @@ -44,9 +46,9 @@ public Network(ChainService chainService) { this.initializeProtocols(chainService); } - private void initializeProtocols(ChainService chainService) { + private void initializeProtocols(ChainService config) { - String chainId = chainService.getChainSpec().getProtocolId(); + String chainId = config.getChainSpec().getProtocolId(); String warpProtocolId = ProtocolUtils.getWarpSyncProtocol(chainId); String blockAnnounceProtocolId = ProtocolUtils.getBlockAnnounceProtocol(chainId); String grandpaProtocolId = ProtocolUtils.getGrandpaProtocol(); diff --git a/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceEngine.java b/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceEngine.java index ad91d73a2..cde411d5b 100644 --- a/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceEngine.java +++ b/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceEngine.java @@ -1,5 +1,6 @@ package com.limechain.network.protocol.blockannounce; +import com.limechain.config.AppBean; import com.limechain.exception.scale.ScaleEncodingException; import com.limechain.network.protocol.blockannounce.messages.BlockAnnounceHandshakeBuilder; import com.limechain.network.protocol.blockannounce.scale.BlockAnnounceHandshakeScaleWriter; @@ -7,7 +8,6 @@ import com.limechain.network.protocol.warp.dto.BlockHeader; import com.limechain.polkaj.reader.ScaleCodecReader; import com.limechain.polkaj.writer.ScaleCodecWriter; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncState; import com.limechain.utils.StringUtils; import lombok.AccessLevel; diff --git a/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceService.java b/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceService.java index 024018261..36b4e21c4 100644 --- a/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceService.java +++ b/src/main/java/com/limechain/network/protocol/blockannounce/BlockAnnounceService.java @@ -1,10 +1,10 @@ package com.limechain.network.protocol.blockannounce; +import com.limechain.config.AppBean; import com.limechain.network.protocol.blockannounce.teavm.BlockAnnounceHandler; import com.limechain.network.protocol.warp.dto.BlockHeader; import com.limechain.rpc.ChainRpcClient; import com.limechain.rpc.dto.ChainGetHeaderResult; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncState; import com.limechain.utils.RpcUtils; import com.limechain.utils.Stopwatch; diff --git a/src/main/java/com/limechain/network/protocol/blockannounce/messages/BlockAnnounceHandshakeBuilder.java b/src/main/java/com/limechain/network/protocol/blockannounce/messages/BlockAnnounceHandshakeBuilder.java index 70978d6b4..6f509c2f4 100644 --- a/src/main/java/com/limechain/network/protocol/blockannounce/messages/BlockAnnounceHandshakeBuilder.java +++ b/src/main/java/com/limechain/network/protocol/blockannounce/messages/BlockAnnounceHandshakeBuilder.java @@ -1,8 +1,8 @@ package com.limechain.network.protocol.blockannounce.messages; +import com.limechain.config.AppBean; import com.limechain.network.protocol.blockannounce.NodeRole; import com.limechain.polkaj.Hash256; -import com.limechain.rpc.server.AppBean; import com.limechain.storage.block.SyncState; import java.math.BigInteger; diff --git a/src/main/java/com/limechain/network/protocol/grandpa/GrandpaEngine.java b/src/main/java/com/limechain/network/protocol/grandpa/GrandpaEngine.java index 94a3d3c9c..a0e7b512c 100644 --- a/src/main/java/com/limechain/network/protocol/grandpa/GrandpaEngine.java +++ b/src/main/java/com/limechain/network/protocol/grandpa/GrandpaEngine.java @@ -1,5 +1,6 @@ package com.limechain.network.protocol.grandpa; +import com.limechain.config.AppBean; import com.limechain.exception.scale.ScaleEncodingException; import com.limechain.network.ConnectionManager; import com.limechain.network.protocol.blockannounce.messages.BlockAnnounceHandshakeBuilder; @@ -12,7 +13,6 @@ import com.limechain.network.protocol.grandpa.messages.neighbour.NeighbourMessageScaleWriter; import com.limechain.polkaj.reader.ScaleCodecReader; import com.limechain.polkaj.writer.ScaleCodecWriter; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncState; import com.limechain.utils.StringUtils; import lombok.AccessLevel; @@ -106,32 +106,32 @@ public static String getNeighbourMessage() { } @JSBody(params = {"handshake", "protocolId"}, script = "window.fruzhin.libp.getConnections().forEach(async (peer) => {" + - " let stream = await ItPbStream.pbStream(await window.fruzhin.libp.dialProtocol(peer.remotePeer, protocolId));" + - " stream.write(Ed25519.h2b(handshake));" + "});") + " let stream = await ItPbStream.pbStream(await window.fruzhin.libp.dialProtocol(peer.remotePeer, protocolId));" + + " stream.write(Ed25519.h2b(handshake));" + "});") public static native void sendHandshakeToAll(String handshake, String protocolId); @JSBody(params = {"grandpaExport", "protocolId"}, script = "window.fruzhin.libp.handle(protocolId, async ({connection, stream}) => {" + - " ItPipe.pipe(stream, async function (source) {" + - " for await (const msg of source) {" + - " let subarr = msg.subarray();" + - " if(subarr.length === 1) {" + - " let handshake = grandpaExport.getHandshake();" + - " (await ItPbStream.pbStream(stream)).writeLP(Ed25519.h2b(handshake));" + - " } else if (subarr.length > 1) {" + - " if(subarr.slice(1)[0] === 2) {" + - " let niehgbourMessage = grandpaExport.getNeighbourMessage();" + - " (await ItPbStream.pbStream(stream)).writeLP(Ed25519.h2b(niehgbourMessage));" + - " }" + - " grandpaExport.handleMessage(Ed25519.b2h(subarr.slice(1)), connection.remotePeer.toString());" + - " }" + - " }" + - " });" + - "});" + - "fruzhin.libp.addEventListener('peer:connect', async (evt) => {" + - " let handshake = grandpaExport.getHandshake();" + - " (await ItPbStream.pbStream(await window.fruzhin.libp.dialProtocol(evt.detail, protocolId))).writeLP(Ed25519.h2b(handshake));" + - "});") + " ItPipe.pipe(stream, async function (source) {" + + " for await (const msg of source) {" + + " let subarr = msg.subarray();" + + " if(subarr.length === 1) {" + + " let handshake = grandpaExport.getHandshake();" + + " (await ItPbStream.pbStream(stream)).writeLP(Ed25519.h2b(handshake));" + + " } else if (subarr.length > 1) {" + + " if(subarr.slice(1)[0] === 2) {" + + " let niehgbourMessage = grandpaExport.getNeighbourMessage();" + + " (await ItPbStream.pbStream(stream)).writeLP(Ed25519.h2b(niehgbourMessage));" + + " }" + + " grandpaExport.handleMessage(Ed25519.b2h(subarr.slice(1)), connection.remotePeer.toString());" + + " }" + + " }" + + " });" + + "});" + + "fruzhin.libp.addEventListener('peer:connect', async (evt) => {" + + " let handshake = grandpaExport.getHandshake();" + + " (await ItPbStream.pbStream(await window.fruzhin.libp.dialProtocol(evt.detail, protocolId))).writeLP(Ed25519.h2b(handshake));" + + "});") public static native void registerHandler(JSObject grandpaExport, String protocolId); } diff --git a/src/main/java/com/limechain/network/protocol/grandpa/messages/neighbour/NeighbourMessageBuilder.java b/src/main/java/com/limechain/network/protocol/grandpa/messages/neighbour/NeighbourMessageBuilder.java index 772f1de0e..aa0c4f601 100644 --- a/src/main/java/com/limechain/network/protocol/grandpa/messages/neighbour/NeighbourMessageBuilder.java +++ b/src/main/java/com/limechain/network/protocol/grandpa/messages/neighbour/NeighbourMessageBuilder.java @@ -1,6 +1,6 @@ package com.limechain.network.protocol.grandpa.messages.neighbour; -import com.limechain.rpc.server.AppBean; +import com.limechain.config.AppBean; import com.limechain.storage.block.SyncState; diff --git a/src/main/java/com/limechain/rpc/RpcClient.java b/src/main/java/com/limechain/rpc/RpcClient.java index aa38d2ef2..9a74cc7a2 100644 --- a/src/main/java/com/limechain/rpc/RpcClient.java +++ b/src/main/java/com/limechain/rpc/RpcClient.java @@ -1,10 +1,10 @@ package com.limechain.rpc; -import com.limechain.config.HostConfig; +import com.limechain.config.AppBean; +import com.limechain.config.ChainService; import com.limechain.rpc.dto.RpcMethod; import com.limechain.rpc.dto.RpcRequest; import com.limechain.rpc.dto.RpcResponse; -import com.limechain.rpc.server.AppBean; import com.limechain.teavm.HttpRequest; import com.limechain.utils.json.JsonUtil; import com.limechain.utils.json.ObjectMapper; @@ -21,7 +21,7 @@ public sealed class RpcClient permits ChainRpcClient, GrandpaRpcClient { private static final String POST = "POST"; - private static final String HTTP_RPC_ENDPOINT = AppBean.getBean(HostConfig.class).getHttpsRpcEndpoint(); + private static final String HTTP_RPC_ENDPOINT = AppBean.getBean(ChainService.class).getHttpsEndpoint(); private static final AtomicInteger ID_COUNTER = new AtomicInteger(1); protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(false); diff --git a/src/main/java/com/limechain/rpc/WsRpcClientImpl.java b/src/main/java/com/limechain/rpc/WsRpcClientImpl.java index e4a1dfa90..750fbdef0 100644 --- a/src/main/java/com/limechain/rpc/WsRpcClientImpl.java +++ b/src/main/java/com/limechain/rpc/WsRpcClientImpl.java @@ -1,6 +1,7 @@ package com.limechain.rpc; -import com.limechain.constants.RpcConstants; +import com.limechain.config.AppBean; +import com.limechain.config.ChainService; import lombok.SneakyThrows; import lombok.extern.java.Log; import org.teavm.jso.browser.Window; @@ -28,8 +29,7 @@ public WsRpcClientImpl() { private void openWebsocketConnection() { log.info("Initializing RPC websocket connection..."); - //TODO change when configuring chain. - ws = new WebSocket(RpcConstants.POLKADOT_WS_RPC); + ws = new WebSocket(AppBean.getBean(ChainService.class).getWsRpcEndpoint()); initHandlers(); } diff --git a/src/main/java/com/limechain/rpc/server/CommonConfig.java b/src/main/java/com/limechain/rpc/server/CommonConfig.java deleted file mode 100644 index 172eaadce..000000000 --- a/src/main/java/com/limechain/rpc/server/CommonConfig.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.limechain.rpc.server; - -import com.limechain.chain.ChainService; -import com.limechain.config.HostConfig; -import com.limechain.config.SystemInfo; -import com.limechain.network.Network; -import com.limechain.storage.block.SyncState; -import com.limechain.sync.warpsync.WarpSyncMachine; -import com.limechain.sync.warpsync.WarpSyncState; - -import java.util.HashMap; -import java.util.Map; - -/** - * Spring configuration class used to instantiate beans. - */ -public class CommonConfig { - - private static final Map, Object> beans = new HashMap<>(); - - public static void start() { - getBean(SystemInfo.class); - getBean(HostConfig.class); - getBean(WarpSyncMachine.class); - } - - protected static Object getBean(Class beanClass) { - if (beans.containsKey(beanClass)) { - return beans.get(beanClass); - } else { - switch (beanClass.getSimpleName()) { - case "HostConfig": - HostConfig hostConfig = hostConfig(); - beans.put(beanClass, hostConfig); - return hostConfig; - case "ChainService": - ChainService chainService = chainService((HostConfig) getBean(HostConfig.class)); - beans.put(beanClass, chainService); - return chainService; - case "SyncState": - SyncState syncState = syncState(); - beans.put(beanClass, syncState); - return syncState; - case "SystemInfo": - SystemInfo systemInfo = systemInfo((HostConfig) getBean(HostConfig.class)); - beans.put(beanClass, systemInfo); - return systemInfo; - case "Network": - Network network = network((ChainService) getBean(ChainService.class)); - beans.put(beanClass, network); - return network; - case "WarpSyncState": - WarpSyncState warpSyncState = warpSyncState((Network) getBean(Network.class), - (SyncState) getBean(SyncState.class)); - beans.put(beanClass, warpSyncState); - return warpSyncState; - case "WarpSyncMachine": - WarpSyncMachine warpSyncMachine = warpSyncMachine((Network) getBean(Network.class), - (ChainService) getBean(ChainService.class), (SyncState) getBean(SyncState.class), - (WarpSyncState) getBean(WarpSyncState.class)); - beans.put(beanClass, warpSyncMachine); - return warpSyncMachine; - default: - return null; - } - } - } - - private static HostConfig hostConfig() { - return new HostConfig(); - } - - private static ChainService chainService(HostConfig hostConfig) { - return new ChainService(hostConfig); - } - - private static SyncState syncState() { - return new SyncState(); - } - - private static SystemInfo systemInfo(HostConfig hostConfig) { - return new SystemInfo(hostConfig); - } - - private static Network network(ChainService chainService) { - return new Network(chainService); - } - - private static WarpSyncState warpSyncState(Network network, SyncState syncState) { - return new WarpSyncState(syncState, network); - } - - private static WarpSyncMachine warpSyncMachine(Network network, ChainService chainService, SyncState syncState, - WarpSyncState warpSyncState) { - return new WarpSyncMachine(network, chainService, syncState, warpSyncState); - } -} diff --git a/src/main/java/com/limechain/rpc/server/RpcApp.java b/src/main/java/com/limechain/rpc/server/RpcApp.java deleted file mode 100644 index fc891150f..000000000 --- a/src/main/java/com/limechain/rpc/server/RpcApp.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.limechain.rpc.server; - - -public class RpcApp { - - public void start() { - CommonConfig.start(); - } - - -} diff --git a/src/main/java/com/limechain/storage/DBConstants.java b/src/main/java/com/limechain/storage/StorageConstants.java similarity index 83% rename from src/main/java/com/limechain/storage/DBConstants.java rename to src/main/java/com/limechain/storage/StorageConstants.java index fe1e0541c..7ff7dac0c 100644 --- a/src/main/java/com/limechain/storage/DBConstants.java +++ b/src/main/java/com/limechain/storage/StorageConstants.java @@ -3,11 +3,13 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +// TODO Cleanup + @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class DBConstants { +public class StorageConstants { /** - * Key for storing the privateKey for nabu - * */ + * Key for storing the privateKey for nabu + */ public static final String PEER_ID = "nodePeerId"; /** * Key under which the genesis chain spec is stored @@ -23,6 +25,7 @@ public class DBConstants { public static final String SET_ID = "ss::setId"; public static final String STATE_ROOT = "ss::stateRoot"; public static final String IS_PROTOCOL_SYNC = "ss::isProtocolSync"; + public static final String LAST_SYNCED_CHAIN = "ss::lastSyncedChain"; // } diff --git a/src/main/java/com/limechain/storage/block/SyncState.java b/src/main/java/com/limechain/storage/block/SyncState.java index f832bfe7c..6e95eb12d 100644 --- a/src/main/java/com/limechain/storage/block/SyncState.java +++ b/src/main/java/com/limechain/storage/block/SyncState.java @@ -2,13 +2,13 @@ import com.limechain.chain.lightsyncstate.Authority; import com.limechain.chain.lightsyncstate.LightSyncState; -import com.limechain.constants.GenesisBlockHash; +import com.limechain.config.ChainService; import com.limechain.exception.storage.HeaderNotFoundException; import com.limechain.network.protocol.grandpa.messages.commit.CommitMessage; import com.limechain.network.protocol.warp.dto.BlockHeader; import com.limechain.polkaj.Hash256; -import com.limechain.storage.DBConstants; import com.limechain.storage.LocalStorage; +import com.limechain.storage.StorageConstants; import lombok.Getter; import lombok.Setter; import lombok.extern.java.Log; @@ -30,33 +30,35 @@ public class SyncState { @Setter private BigInteger setId; - public SyncState() { - this.genesisBlockHash = GenesisBlockHash.POLKADOT; + public SyncState(ChainService chainService) { + this.genesisBlockHash = chainService.getGenesisBlockHash(); - clearStoredStateIfNeeded(); + clearStoredStateIfNeeded(chainService.getChain().getId()); loadState(); this.startingBlock = this.lastFinalizedBlockNumber; } private void loadState() { this.lastFinalizedBlockNumber = LocalStorage.find( - DBConstants.LAST_FINALIZED_BLOCK_NUMBER, BigInteger.class).orElse(BigInteger.ZERO); + StorageConstants.LAST_FINALIZED_BLOCK_NUMBER, BigInteger.class).orElse(BigInteger.ZERO); this.lastFinalizedBlockHash = new Hash256(LocalStorage.find( - DBConstants.LAST_FINALIZED_BLOCK_HASH, byte[].class).orElse(genesisBlockHash.getBytes())); - byte[] stateRootBytes = LocalStorage.find(DBConstants.STATE_ROOT, byte[].class).orElse(null); + StorageConstants.LAST_FINALIZED_BLOCK_HASH, byte[].class).orElse(genesisBlockHash.getBytes())); + byte[] stateRootBytes = LocalStorage.find(StorageConstants.STATE_ROOT, byte[].class).orElse(null); this.stateRoot = stateRootBytes != null ? new Hash256(stateRootBytes) : null; - this.authoritySet = LocalStorage.find(DBConstants.AUTHORITY_SET, Authority[].class).orElse(new Authority[0]); - this.latestRound = LocalStorage.find(DBConstants.LATEST_ROUND, BigInteger.class).orElse(BigInteger.ONE); - this.setId = LocalStorage.find(DBConstants.SET_ID, BigInteger.class).orElse(BigInteger.ZERO); + this.authoritySet = LocalStorage.find(StorageConstants.AUTHORITY_SET, Authority[].class).orElse(new Authority[0]); + this.latestRound = LocalStorage.find(StorageConstants.LATEST_ROUND, BigInteger.class).orElse(BigInteger.ONE); + this.setId = LocalStorage.find(StorageConstants.SET_ID, BigInteger.class).orElse(BigInteger.ZERO); } - public void persistState() { - LocalStorage.save(DBConstants.LAST_FINALIZED_BLOCK_NUMBER, lastFinalizedBlockNumber); - LocalStorage.save(DBConstants.LAST_FINALIZED_BLOCK_HASH, lastFinalizedBlockHash.getBytes()); - LocalStorage.save(DBConstants.AUTHORITY_SET, authoritySet); - LocalStorage.save(DBConstants.LATEST_ROUND, latestRound); - LocalStorage.save(DBConstants.SET_ID, setId); - LocalStorage.save(DBConstants.STATE_ROOT, stateRoot.getBytes()); + public void persistState(boolean isProtocolSync, String chainId) { + LocalStorage.save(StorageConstants.LAST_FINALIZED_BLOCK_NUMBER, lastFinalizedBlockNumber); + LocalStorage.save(StorageConstants.LAST_FINALIZED_BLOCK_HASH, lastFinalizedBlockHash.getBytes()); + LocalStorage.save(StorageConstants.AUTHORITY_SET, authoritySet); + LocalStorage.save(StorageConstants.LATEST_ROUND, latestRound); + LocalStorage.save(StorageConstants.SET_ID, setId); + LocalStorage.save(StorageConstants.STATE_ROOT, stateRoot.getBytes()); + LocalStorage.save(StorageConstants.IS_PROTOCOL_SYNC, isProtocolSync); + LocalStorage.save(StorageConstants.LAST_SYNCED_CHAIN, chainId); } public void finalizeHeader(BlockHeader header) { @@ -91,13 +93,12 @@ public void setLightSyncState(LightSyncState initState) { finalizeHeader(initState.getFinalizedBlockHeader()); } - public void saveIsProtocolSync(boolean isProtocolSync) { - LocalStorage.save(DBConstants.IS_PROTOCOL_SYNC, isProtocolSync); - } - - private void clearStoredStateIfNeeded() { - boolean isProtocolSync = LocalStorage.find(DBConstants.IS_PROTOCOL_SYNC, boolean.class).orElse(false); - if (!isProtocolSync) { + private void clearStoredStateIfNeeded(String currentChainId) { + boolean isProtocolSync = LocalStorage.find(StorageConstants.IS_PROTOCOL_SYNC, boolean.class) + .orElse(false); + String lastChainId = LocalStorage.find(StorageConstants.LAST_SYNCED_CHAIN, String.class) + .orElse(null); + if (!isProtocolSync || !currentChainId.equals(lastChainId)) { LocalStorage.clear(); } } diff --git a/src/main/java/com/limechain/sync/JustificationVerifier.java b/src/main/java/com/limechain/sync/JustificationVerifier.java index f5874d659..9facaf9f5 100644 --- a/src/main/java/com/limechain/sync/JustificationVerifier.java +++ b/src/main/java/com/limechain/sync/JustificationVerifier.java @@ -1,9 +1,9 @@ package com.limechain.sync; import com.limechain.chain.lightsyncstate.Authority; +import com.limechain.config.AppBean; import com.limechain.network.protocol.warp.dto.Precommit; import com.limechain.polkaj.Hash256; -import com.limechain.rpc.server.AppBean; import com.limechain.storage.block.SyncState; import com.limechain.utils.LittleEndianUtils; import com.limechain.utils.StringUtils; @@ -41,7 +41,7 @@ public static boolean verify(Precommit[] precommits, BigInteger round) { Set seenPublicKeys = new HashSet<>(); Set authorityKeys = - Arrays.stream(authorities).map(Authority::getPublicKey).map(Hash256::new).collect(Collectors.toSet()); + Arrays.stream(authorities).map(Authority::getPublicKey).map(Hash256::new).collect(Collectors.toSet()); for (Precommit precommit : precommits) { if (!authorityKeys.contains(precommit.getAuthorityPublicKey())) { @@ -60,9 +60,9 @@ public static boolean verify(Precommit[] precommits, BigInteger round) { byte[] data = getDataToVerify(precommit, authoritiesSetId, round); boolean isValid = verifySignature( - StringUtils.toHex(precommit.getAuthorityPublicKey().getBytes()), - StringUtils.toHex(precommit.getSignature().getBytes()), - StringUtils.toHex(data)); + StringUtils.toHex(precommit.getAuthorityPublicKey().getBytes()), + StringUtils.toHex(precommit.getSignature().getBytes()), + StringUtils.toHex(data)); if (!isValid) { log.log(Level.WARNING, "Failed to verify signature"); @@ -134,7 +134,7 @@ private static byte[] getDataToVerify(Precommit precommit, BigInteger authoritie } @JSBody(params = {"publicKeyHex", "signatureHex", - "messageHex"}, script = "return Ed25519.verifyAsync(signatureHex, messageHex, publicKeyHex);") + "messageHex"}, script = "return Ed25519.verifyAsync(signatureHex, messageHex, publicKeyHex);") public static native JSPromise verifyAsync(String publicKeyHex, String signatureHex, String messageHex); } diff --git a/src/main/java/com/limechain/sync/warpsync/WarpSyncMachine.java b/src/main/java/com/limechain/sync/warpsync/WarpSyncMachine.java index 7c0a32e8c..6c18db688 100644 --- a/src/main/java/com/limechain/sync/warpsync/WarpSyncMachine.java +++ b/src/main/java/com/limechain/sync/warpsync/WarpSyncMachine.java @@ -1,8 +1,8 @@ package com.limechain.sync.warpsync; -import com.limechain.chain.ChainService; import com.limechain.chain.lightsyncstate.Authority; import com.limechain.chain.lightsyncstate.LightSyncState; +import com.limechain.config.ChainService; import com.limechain.network.Network; import com.limechain.network.protocol.warp.dto.WarpSyncFragment; import com.limechain.polkaj.Hash256; @@ -72,7 +72,7 @@ public void start() { LightSyncState initState = LightSyncState.decode(this.chainService.getChainSpec().getLightSyncState()); if (this.syncState.getLastFinalizedBlockNumber() - .compareTo(initState.getFinalizedBlockHeader().getBlockNumber()) < 0) { + .compareTo(initState.getFinalizedBlockHeader().getBlockNumber()) < 0) { this.syncState.setLightSyncState(initState); } @@ -102,14 +102,15 @@ public void stop() { } private void finishWarpSync() { - this.warpState.setWarpSyncFinished(true); - this.syncState.persistState(); - syncState.saveIsProtocolSync(isProtocolSync); + warpState.setWarpSyncFinished(true); + syncState.persistState(isProtocolSync, chainService.getChain().getId()); + System.out.println("Warp sync finished."); log.log(Level.INFO, "Highest known block at #" + syncState.getLastFinalizedBlockNumber()); - this.onFinishCallbacks.forEach(Runnable::run); - this.networkService.sendBlockAnnounceHandshake(); - this.networkService.sendNeighbourMessages(); + + onFinishCallbacks.forEach(Runnable::run); + networkService.sendBlockAnnounceHandshake(); + networkService.sendNeighbourMessages(); } public void onFinish(Runnable function) { diff --git a/src/main/java/com/limechain/sync/warpsync/action/ChainInformationBuildAction.java b/src/main/java/com/limechain/sync/warpsync/action/ChainInformationBuildAction.java index 30de05c02..a5fab53a7 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/ChainInformationBuildAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/ChainInformationBuildAction.java @@ -1,6 +1,6 @@ package com.limechain.sync.warpsync.action; -import com.limechain.rpc.server.AppBean; +import com.limechain.config.AppBean; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.sync.warpsync.WarpSyncState; import lombok.AccessLevel; @@ -30,11 +30,11 @@ public void next(WarpSyncMachine sync) { @Override public void handle(WarpSyncMachine sync) { log.log(Level.INFO, "Aura Api version: " + sync.getChainInformation().getRuntimeAuraVersion() - + " Babe api version: " + sync.getChainInformation().getRuntimeBabeVersion() + - " Grandpa Api Version: " + sync.getChainInformation().getRuntimeGrandpaVersion()); + + " Babe api version: " + sync.getChainInformation().getRuntimeBabeVersion() + + " Grandpa Api Version: " + sync.getChainInformation().getRuntimeGrandpaVersion()); log.log(Level.INFO, "Runtime supports aura: " + sync.getChainInformation().runtimeHasAura()); log.log(Level.INFO, "Runtime babe api is v1: " + sync.getChainInformation().runtimeBabeApiIsV1()); log.log(Level.INFO, "Runtime grandpa supports current setId: " - + sync.getChainInformation().runtimeGrandpaSupportsCurrentSetId()); + + sync.getChainInformation().runtimeGrandpaSupportsCurrentSetId()); } } diff --git a/src/main/java/com/limechain/sync/warpsync/action/FinishedAction.java b/src/main/java/com/limechain/sync/warpsync/action/FinishedAction.java index 12092fade..1025183a8 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/FinishedAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/FinishedAction.java @@ -1,6 +1,6 @@ package com.limechain.sync.warpsync.action; -import com.limechain.rpc.server.AppBean; +import com.limechain.config.AppBean; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.sync.warpsync.WarpSyncState; import lombok.extern.java.Log; @@ -10,6 +10,7 @@ @Log public class FinishedAction implements WarpSyncAction { private final WarpSyncState warpSyncState; + public FinishedAction() { this.warpSyncState = AppBean.getBean(WarpSyncState.class); log.log(Level.INFO, "Finished with warp sync!"); diff --git a/src/main/java/com/limechain/sync/warpsync/action/RequestFragmentsAction.java b/src/main/java/com/limechain/sync/warpsync/action/RequestFragmentsAction.java index c79a18d4f..725d76b54 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/RequestFragmentsAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/RequestFragmentsAction.java @@ -1,9 +1,9 @@ package com.limechain.sync.warpsync.action; +import com.limechain.config.AppBean; import com.limechain.exception.global.MissingObjectException; import com.limechain.network.protocol.warp.dto.WarpSyncResponse; import com.limechain.polkaj.Hash256; -import com.limechain.rpc.server.AppBean; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.sync.warpsync.WarpSyncState; import lombok.extern.java.Log; @@ -37,7 +37,7 @@ public void next(WarpSyncMachine sync) { } catch (InterruptedException e) { Thread.currentThread().interrupt(); log.log(Level.SEVERE, "Retry warp sync request fragment exception: " - + e.getMessage(), e.getStackTrace()); + + e.getMessage(), e.getStackTrace()); sync.setWarpSyncAction(new RpcFallbackAction()); } } diff --git a/src/main/java/com/limechain/sync/warpsync/action/RpcFallbackAction.java b/src/main/java/com/limechain/sync/warpsync/action/RpcFallbackAction.java index df7537175..28411edf5 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/RpcFallbackAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/RpcFallbackAction.java @@ -1,11 +1,11 @@ package com.limechain.sync.warpsync.action; +import com.limechain.config.AppBean; import com.limechain.polkaj.Hash256; import com.limechain.rpc.ChainRpcClient; import com.limechain.rpc.GrandpaRpcClient; import com.limechain.rpc.dto.ChainGetHeaderResult; import com.limechain.rpc.dto.GrandpaRoundStateResult; -import com.limechain.rpc.server.AppBean; import com.limechain.storage.block.SyncState; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.utils.RpcUtils; @@ -36,9 +36,9 @@ public void next(WarpSyncMachine sync) { } log.log(Level.INFO, "Populated sync state from RPC results. Block hash is now at #" - + syncState.getLastFinalizedBlockNumber() + ": " - + syncState.getLastFinalizedBlockHash().toString() - + " with state root " + syncState.getStateRoot()); + + syncState.getLastFinalizedBlockNumber() + ": " + + syncState.getLastFinalizedBlockHash().toString() + + " with state root " + syncState.getStateRoot()); sync.setWarpSyncAction(new FinishedAction()); } diff --git a/src/main/java/com/limechain/sync/warpsync/action/RuntimeBuildAction.java b/src/main/java/com/limechain/sync/warpsync/action/RuntimeBuildAction.java index ce377a7c7..8f2ae5eb5 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/RuntimeBuildAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/RuntimeBuildAction.java @@ -1,6 +1,6 @@ package com.limechain.sync.warpsync.action; -import com.limechain.rpc.server.AppBean; +import com.limechain.config.AppBean; import com.limechain.sync.warpsync.WarpSyncMachine; import com.limechain.sync.warpsync.WarpSyncState; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/limechain/sync/warpsync/action/RuntimeDownloadAction.java b/src/main/java/com/limechain/sync/warpsync/action/RuntimeDownloadAction.java index 1082ce0b7..f3a63acf4 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/RuntimeDownloadAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/RuntimeDownloadAction.java @@ -1,6 +1,6 @@ package com.limechain.sync.warpsync.action; -import com.limechain.rpc.server.AppBean; +import com.limechain.config.AppBean; import com.limechain.storage.block.SyncState; import com.limechain.sync.warpsync.WarpSyncMachine; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/limechain/sync/warpsync/action/VerifyJustificationAction.java b/src/main/java/com/limechain/sync/warpsync/action/VerifyJustificationAction.java index 7897b4589..2717e72b8 100644 --- a/src/main/java/com/limechain/sync/warpsync/action/VerifyJustificationAction.java +++ b/src/main/java/com/limechain/sync/warpsync/action/VerifyJustificationAction.java @@ -1,8 +1,8 @@ package com.limechain.sync.warpsync.action; +import com.limechain.config.AppBean; import com.limechain.exception.sync.JustificationVerificationException; import com.limechain.network.protocol.warp.dto.WarpSyncFragment; -import com.limechain.rpc.server.AppBean; import com.limechain.storage.block.SyncState; import com.limechain.sync.JustificationVerifier; import com.limechain.sync.warpsync.WarpSyncMachine; @@ -53,7 +53,7 @@ public void handle(WarpSyncMachine sync) { } boolean verified = JustificationVerifier.verify( fragment.getJustification().getPrecommits(), - fragment.getJustification().getRound()); + fragment.getJustification().getRound()); if (!verified) { throw new JustificationVerificationException("Justification could not be verified."); } @@ -70,11 +70,11 @@ private void handleAuthorityChanges(WarpSyncFragment fragment) { try { warpSyncState.handleAuthorityChanges( fragment.getHeader().getDigest(), - fragment.getJustification().getTargetBlock()); + fragment.getJustification().getTargetBlock()); log.log(Level.INFO, "Verified justification. Block hash is now at #" + syncState.getLastFinalizedBlockNumber() + ": " - + syncState.getLastFinalizedBlockHash().toString() - + " with state root " + syncState.getStateRoot()); + + syncState.getLastFinalizedBlockHash().toString() + + " with state root " + syncState.getStateRoot()); } catch (Exception e) { this.error = e; } diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 2d2b1a761..000000000 --- a/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 903582195..15906bb4f 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -7,7 +7,7 @@ \ No newline at end of file