static void Init(PoolArgs args) { GlobalParameters.IsTestnet = args.IsTestNet; PoolCenterConfig config = ConfigurationTool.GetAppSettings <PoolCenterConfig>("OmniCoin.PoolCenter.conf.json", "PoolCenterSetting"); if (config == null) { throw new Exception("read config from OmniCoin.PoolCenter.conf.json failed!!!"); } if (string.IsNullOrWhiteSpace(config.RabbitMqConnectString)) { throw new Exception("RabbitMqConnectString from OmniCoin.PoolCenter.conf.json can't be null or empty!!!"); } RabbitMQ.RabbitMqSetting.CONNECTIONSTRING = config.RabbitMqConnectString; Pool.Redis.Setting.Init(config.RedisTestnetConnections, config.RedisMainnetConnections); MiningPool.Data.DataAccessComponent.MainnetConnectionString = config.MySqlMainnetConnectString; MiningPool.Data.DataAccessComponent.TestnetConnectionString = config.MySqlTestnetConnectString; ConfigCenter.ConfigPoolCenter = config; Setting.Init(config.NodeRpcMainnet, config.NodeRpcTestnet); //KafkaMQ.KafkaInfo.MqName = Setting.CENTERKAFKAGROUPNAME; NodeApi.Current = new NodeApi(Setting.API_URL); //MQApi.Init(); RabbitMQApi.Init(); }
static void Init() { //从配置文件中读取 var config = ConfigurationTool.GetAppSettings <PoolConfig>("OmniCoin.Pool.conf.json", "PoolConfig"); if (config == null) { throw new Exception("read config from OmniCoin.Pool.conf.json failed!!!"); } if (string.IsNullOrWhiteSpace(config.RabbitMqConnectString)) { throw new Exception("RabbitMqConnectString from OmniCoin.Pool.conf.json can't be null or empty!!!"); } RabbitMQ.RabbitMqSetting.CONNECTIONSTRING = config.RabbitMqConnectString; Redis.Setting.Init(config.RedisTestnetConnections, config.RedisMainnetConnections); MiningPool.Data.DataAccessComponent.MainnetConnectionString = config.MySqlMainnetConnectString; MiningPool.Data.DataAccessComponent.TestnetConnectionString = config.MySqlTestnetConnectString; Setting.Init(config.PoolMainPort, config.PoolTestPort); ConfigCenter.ConfigPool = config; RabbitMQApi.Current = new RabbitMQApi(); }
public CommonResponse Test() { ServerSetting setting = ConfigurationTool.GetAppSettings <ServerSetting>("OmniCoin.MiningPool.API.conf.json", "ServerSetting"); if (setting.IsTestNet) { return(OK("Test")); } else { return(OK("Main")); } }
public void Start() { if (isStart) { return; } isStart = true; var setting = ConfigurationTool.GetAppSettings <ServerSetting>("OmniCoin.MiningPool.API.conf.json", "ServerSetting"); isTestnet = setting.IsTestNet; MinerAmount = setting.MinerAmount; updateServerTimer = new Timer(); updateServerTimer.Elapsed += UpdateServerTimer_Elapsed; updateServerTimer.Interval = 1000; updateServerTimer.Start(); }
public static void Main(string[] args) { ServerSetting setting = ConfigurationTool.GetAppSettings <ServerSetting>("OmniCoin.MiningPool.API.conf.json", "ServerSetting"); if (setting == null) { throw new System.Exception("ServerSetting read from OmniCoin.MiningPool.API.conf.json failed !!!"); } //OmniCoin.RabbitMQ.RabbitMqSetting.CONNECTIONSTRING = config.RabbitMqConnectString; Pool.Redis.Setting.Init(setting.RedisTestnetConnections, setting.RedisMainnetConnections); MiningPool.Data.DataAccessComponent.MainnetConnectionString = setting.MySqlMainnetConnectString; MiningPool.Data.DataAccessComponent.TestnetConnectionString = setting.MySqlTestnetConnectString; GlobalParameters.IsTestnet = setting.IsTestNet; CreateWebHostBuilder(args).Build().Run(); }
public RewardList InsertRewardList(RewardList entity) { RewardListDac dac = new RewardListDac(); //if (dac.IsExisted(entity.BlockHash)) //{ // throw new Exception("block hash has existed"); //} //调接口获取奖励 //AuthenticationHeaderValue authHeaderValue = null; //RpcClient client = new RpcClient(new Uri(MiningPoolSetting.API_URI), authHeaderValue, null, null, "application/json"); //RpcRequest request = RpcRequest.WithParameterList("GetBlockReward", new List<object> { entity.BlockHash }, 1); //RpcResponse response = await client.SendRequestAsync(request); //if (response.HasError) //{ // throw new ApiCustomException(response.Error.Code, response.Error.Message); //} //long totalReward = response.GetResult<long>(); RewardList reward = new RewardList(); AwardSetting setting = ConfigurationTool.GetAppSettings <AwardSetting>("OmniCoin.MiningPool.Business.conf.json", "AwardSetting"); //double extractProportion = setting.ExtractProportion; //double serviceFeeProportion = setting.ServiceFeeProportion; reward.BlockHash = entity.BlockHash; reward.GenerateTime = entity.GenerateTime; reward.Hashes = entity.Hashes; reward.MinerAddress = entity.MinerAddress; reward.OriginalReward = entity.OriginalReward; //reward.ActualReward = Convert.ToInt64(entity.OriginalReward * extractProportion); reward.ActualReward = Convert.ToInt64(entity.OriginalReward); reward.Paid = 0; reward.PaidTime = Framework.Time.EpochStartTime.Millisecond; reward.IsCommissionProcessed = 0; reward.CommissionProcessedTime = 0; //此市transaction为“”,需要同步后才能写数据进去 reward.TransactionHash = entity.TransactionHash; dac.Insert(reward); return(reward); }
static MiningPoolSetting() { AwardSetting setting = ConfigurationTool.GetAppSettings <AwardSetting>("OmniCoin.MiningPool.Business.conf.json", "AwardSetting"); if (setting != null) { PoolType = setting.PoolType; } else { PoolType = null; } if (setting == null) { throw new Exception("config read from OmniCoin.MiningPool.Business.conf.json failed !!!"); } API_URI_MAIN = setting.NodeRpcMainnet; API_URI_TEST = setting.NodeRpcTestnet; POS_URL_MAIN = setting.PosCheckServiceUrlMainNet; POS_URL_TEST = setting.PosCheckServiceUrlTestNet; }
public static void SaveRewards(string startMsgId, long nonce, int height) { try { var block = RedisManager.Current.GetDataInRedis <BlockMsg>(startMsgId); if (block == null || block.Header.Height == 0) { return; } var miners = GetAllMiners(); var rewardAddresses = miners.Select(x => x.Address); Blocks blocks = new Blocks(); blocks.Generator = block.Header.GeneratorId; blocks.Hash = block.Header.GetHash(); blocks.Height = block.Header.Height; blocks.Nonce = nonce; var baseReward = POC.GetNewBlockReward(block.Header.Height); var totalReward = block.Transactions[0].Outputs[0].Amount; if (totalReward < baseReward) { totalReward = baseReward; } var totalRewardAllMiner = totalReward * 0.4; var totalRewardSuperNode = totalReward * 0.2; var totalRewardDepositInterest = totalReward * 0.4;//存币利息,需要派分到当前存币大于1的地址 var rewards = new List <RewardList>(); //矿工部分 long totalEffort = 0; foreach (var address in rewardAddresses) { var key = "Pool:MinerMaxNonce:" + address; var maxNonce = RedisManager.Current.GetDataInRedis <string>(key); if (string.IsNullOrEmpty(maxNonce)) { continue; } var effort = int.Parse(maxNonce); RewardList rewardList = new RewardList(); rewardList.BlockHash = blocks.Hash; rewardList.GenerateTime = blocks.Timstamp; rewardList.MinerAddress = address; rewardList.Hashes = effort; rewardList.TransactionHash = ""; rewardList.RewardType = 0; rewards.Add(rewardList); totalEffort += effort; } rewards.ForEach(x => { x.OriginalReward = (long)Math.Floor(totalRewardAllMiner * ((double)x.Hashes / (double)totalEffort)); x.ActualReward = x.OriginalReward; }); blocks.TotalHash = totalEffort; blocks.TotalReward = totalReward; //SuperNode部分 AwardSetting setting = ConfigurationTool.GetAppSettings <AwardSetting>("OmniCoin.MiningPool.Business.conf.json", "AwardSetting"); var superNodeReward = (long)totalRewardSuperNode; rewards.Add(new RewardList { OriginalReward = superNodeReward, ActualReward = superNodeReward, BlockHash = blocks.Hash, GenerateTime = blocks.Timstamp, MinerAddress = setting.SuperNodeAddress, Hashes = 0, TransactionHash = "", RewardType = 1 }); //DepositInterest部分 var currentDepositLists = new RewardListComponent().GetAllNotExpiredDeposit(); if (currentDepositLists != null && currentDepositLists.Any()) { var totalDepositAmount = currentDepositLists.Sum(x => x.Amount); currentDepositLists.ForEach(x => { //利息 = 当前数量 / 总数量 * (Coinbase * 40 % 奖励) var interest = (long)Math.Floor(totalRewardDepositInterest * ((double)x.Amount / (double)totalDepositAmount)); rewards.Add(new RewardList { OriginalReward = interest, ActualReward = interest, BlockHash = blocks.Hash, GenerateTime = blocks.Timstamp, MinerAddress = x.Address, Hashes = 0, TransactionHash = "", AddressDepositTotalAmount = x.Amount, DepositTotalAmount = totalDepositAmount, RewardType = 2, DepositTransactionHash = x.TransactionHash }); }); } var blockComponent = new BlocksComponent(); blockComponent.SaveBlockAndRewardLists(blocks, rewards); } catch (Exception ex) { LogHelper.Error(ex.ToString()); } }