Beispiel #1
0
        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();
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        public CommonResponse Test()
        {
            ServerSetting setting = ConfigurationTool.GetAppSettings <ServerSetting>("OmniCoin.MiningPool.API.conf.json", "ServerSetting");

            if (setting.IsTestNet)
            {
                return(OK("Test"));
            }
            else
            {
                return(OK("Main"));
            }
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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;
        }
Beispiel #8
0
        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());
            }
        }