public NodeGetDataService(ApiRequester apiRequester, string endpoint, ILoggerFactory loggerFactory, string env) { _apiRequester = apiRequester; _endpoint = endpoint; this.logger = loggerFactory.CreateLogger <NodeGetDataService>(); this.isMainnet = env != NodeEnv.TestNet; try { miningKeyFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StratisNode", "cirrus", this.isMainnet ? "CirrusMain" : "CirrusTest", "federationKey.dat"); try { using (FileStream readStream = File.OpenRead(miningKeyFile)) { var privateKey = new Key(); var stream = new BitcoinStream(readStream, false); stream.ReadWrite(ref privateKey); this.MiningPubKey = Encoders.Hex.EncodeData(privateKey.PubKey.ToBytes()); } } catch (Exception ex) { this.logger.LogError(ex, $"Failed to read file {miningKeyFile}"); } } catch (Exception ex) { this.logger.LogError(ex, $"Failed to get APPDATA"); } }
public MasterNodeMainChainService(ApiRequester apiRequester, DefaultEndpointsSettings defaultEndpointSettings, ILoggerFactory loggerFactory) : base(apiRequester, defaultEndpointSettings.StratisNode, loggerFactory, defaultEndpointSettings.EnvType, defaultEndpointSettings.DataFolder) { }
public MasterNodeSideChainService(ApiRequester apiRequester, DefaultEndpointsSettings defaultEndpointSettings, ILoggerFactory loggerFactory) : base(apiRequester, defaultEndpointSettings.SidechainNode, loggerFactory, defaultEndpointSettings.EnvType, defaultEndpointSettings.DataFolder) { SidechainMinerStats = new SidechainMinerStats(); }
public NodeGetDataServiceMainchainMiner(ApiRequester apiRequester, string endpoint, ILoggerFactory loggerFactory, string env) : base(apiRequester, endpoint, loggerFactory, env) { }
/// <summary> /// Retrieve all node information and store it in IDistributedCache object /// </summary> /// <returns></returns> private async Task BuildCacheAsync() { string walletName = "clintm"; #region Stratis Node ApiResponse stratisStatus = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Node/status"); ApiResponse stratisRawmempool = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Mempool/getrawmempool"); ApiResponse stratisBestBlock = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Consensus/getbestblockhash"); ApiResponse stratisWalletHistory = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, $"/api/Wallet/history?WalletName={walletName}&AccountName=account%200"); ApiResponse stratisWalletBalances = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, $"/api/Wallet/balance?WalletName={walletName}&AccountName=account%200"); ApiResponse stratisFederationInfo = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/FederationGateway/info"); #endregion #region Sidechain Node ApiResponse sidechainStatus = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Node/status"); ApiResponse sidechainRawmempool = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Mempool/getrawmempool"); ApiResponse sidechainBestBlock = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Consensus/getbestblockhash"); ApiResponse sidechainWalletHistory = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, $"/api/Wallet/history?WalletName={walletName}&AccountName=account%200"); ApiResponse sidechainWalletBalances = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, $"/api/FederationWallet/balance"); ApiResponse sidechainFederationInfo = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/FederationGateway/info"); #endregion var stratisPeers = new List <Peer>(); var stratisFederationMembers = new List <Peer>(); var sidechainPeers = new List <Peer>(); var sidechainFederationMembers = new List <Peer>(); this.ParsePeers(stratisStatus, stratisFederationInfo, ref stratisPeers, ref stratisFederationMembers); this.ParsePeers(sidechainStatus, sidechainFederationInfo, ref sidechainPeers, ref sidechainFederationMembers); var dashboardModel = new DashboardModel(); try { dashboardModel = new DashboardModel { Status = true, IsCacheBuilt = true, MainchainWalletAddress = stratisFederationInfo.Content.multisigAddress, SidechainWalletAddress = sidechainFederationInfo.Content.multisigAddress, MiningPublicKeys = stratisFederationInfo.Content.federationMultisigPubKeys, StratisNode = new StratisNodeModel { WebAPIUrl = string.Concat(this.defaultEndpointsSettings.StratisNode, "/api"), SwaggerUrl = string.Concat(this.defaultEndpointsSettings.StratisNode, "/swagger"), SyncingStatus = stratisStatus.Content.consensusHeight > 0 ? (stratisStatus.Content.blockStoreHeight / stratisStatus.Content.consensusHeight) * 100 : 0, Peers = stratisPeers, FederationMembers = stratisFederationMembers, BlockHash = stratisBestBlock.Content, BlockHeight = stratisStatus.Content.blockStoreHeight, MempoolSize = stratisRawmempool.Content.Count, History = stratisWalletHistory.Content.history[0].transactionsHistory, ConfirmedBalance = (double)stratisWalletBalances.Content.balances[0].amountConfirmed / 100000000, UnconfirmedBalance = (double)stratisWalletBalances.Content.balances[0].amountUnconfirmed / 100000000 }, SidechainNode = new SidechainNodelModel { WebAPIUrl = string.Concat(this.defaultEndpointsSettings.SidechainNode, "/api"), SwaggerUrl = string.Concat(this.defaultEndpointsSettings.SidechainNode, "/swagger"), SyncingStatus = sidechainStatus.Content.consensusHeight > 0 ? (sidechainStatus.Content.blockStoreHeight / sidechainStatus.Content.consensusHeight) * 100 : 0, Peers = sidechainPeers, FederationMembers = sidechainFederationMembers, BlockHash = sidechainBestBlock.Content, BlockHeight = sidechainStatus.Content.blockStoreHeight, MempoolSize = sidechainRawmempool.Content.Count, History = new object[] {}, ConfirmedBalance = (double)sidechainWalletBalances.Content.balances[0].amountConfirmed / 100000000, UnconfirmedBalance = (double)sidechainWalletBalances.Content.balances[0].amountUnconfirmed / 100000000 } }; } catch (Exception e) { //ignored } if (!string.IsNullOrEmpty(this.distributedCache.GetString("DashboardData"))) { if (JToken.DeepEquals(this.distributedCache.GetString("DashboardData"), JsonConvert.SerializeObject(dashboardModel)) == false) { await this.updaterHub.Clients.All.SendAsync("CacheIsDifferent"); } } this.distributedCache.SetString("DashboardData", JsonConvert.SerializeObject(dashboardModel)); }
/// <summary> /// Retrieve all node information and store it in IDistributedCache object /// </summary> /// <returns></returns> private async Task BuildCacheAsync() { var walletName = "clintm"; #region Stratis Node var stratisStatus = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Node/status"); var stratisRawmempool = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Mempool/getrawmempool"); var stratisBestBlock = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, "/api/Consensus/getbestblockhash"); var stratisWalletHistory = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, $"/api/Wallet/history?WalletName={walletName}&AccountName=account%200"); var stratisWalletBalances = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.StratisNode, $"/api/Wallet/balance?WalletName={walletName}&AccountName=account%200"); #endregion #region Sidechain Node var sidechainStatus = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Node/status"); var sidechainRawmempool = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Mempool/getrawmempool"); var sidechainBestBlock = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, "/api/Consensus/getbestblockhash"); var sidechainWalletHistory = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, $"/api/Wallet/history?WalletName={walletName}&AccountName=account%200"); var sidechainWalletBalances = await ApiRequester.GetRequestAsync(this.defaultEndpointsSettings.SidechainNode, $"/api/FederationWallet/balance"); #endregion var dashboardModel = new DashboardModel { Status = true, IsCacheBuilt = true, MainchainWalletAddress = "31EBX8oNk6GoPufm755yuFtbBgEPmjPvdK", SidechainWalletAddress = "pTEBX8oNk6GoPufm755yuFtbBgEPmjPvdK ", MiningPublicKeys = new string[] { "02446dfcecfcbef1878d906ffd023258a129e9471dba90a1845f15063397ada335", "02446dfcecfcbef1878d906ffd023258a129e9471dba90a1845f15063397ada335", "02446dfcecfcbef1878d906ffd023258a129e9471dba90a1845f15063397ada335" }, StratisNode = new StratisNodeModel { WebAPIUrl = string.Concat(this.defaultEndpointsSettings.StratisNode, "/api"), SwaggerUrl = string.Concat(this.defaultEndpointsSettings.StratisNode, "/swagger"), SyncingStatus = stratisStatus.Content.consensusHeight > 0 ? (stratisStatus.Content.blockStoreHeight / stratisStatus.Content.consensusHeight) * 100 : 0, Peers = stratisStatus.Content.outboundPeers, BlockHash = stratisBestBlock.Content, BlockHeight = stratisStatus.Content.blockStoreHeight, MempoolSize = stratisRawmempool.Content.Count, FederationMembers = new object[] {}, History = stratisWalletHistory.Content.history[0].transactionsHistory, ConfirmedBalance = (double)stratisWalletBalances.Content.balances[0].amountConfirmed / 100000000, UnconfirmedBalance = (double)stratisWalletBalances.Content.balances[0].amountUnconfirmed / 100000000 }, SidechainNode = new SidechainNodelModel { WebAPIUrl = string.Concat(this.defaultEndpointsSettings.SidechainNode, "/api"), SwaggerUrl = string.Concat(this.defaultEndpointsSettings.SidechainNode, "/swagger"), SyncingStatus = sidechainStatus.Content.consensusHeight > 0 ? (sidechainStatus.Content.blockStoreHeight / sidechainStatus.Content.consensusHeight) * 100 : 0, Peers = sidechainStatus.Content.outboundPeers, BlockHash = sidechainBestBlock.Content, BlockHeight = sidechainStatus.Content.blockStoreHeight, MempoolSize = sidechainRawmempool.Content.Count, FederationMembers = new object[] {}, History = new object[] {}, ConfirmedBalance = (double)sidechainWalletBalances.Content.balances[0].amountConfirmed / 100000000, UnconfirmedBalance = (double)sidechainWalletBalances.Content.balances[0].amountUnconfirmed / 100000000 } }; if (!string.IsNullOrEmpty(this.distributedCache.GetString("DashboardData"))) { if (JToken.DeepEquals(this.distributedCache.GetString("DashboardData"), JsonConvert.SerializeObject(dashboardModel)) == false) { await this.updaterHub.Clients.All.SendAsync("CacheIsDifferent"); } } this.distributedCache.SetString("DashboardData", JsonConvert.SerializeObject(dashboardModel)); }