예제 #1
0
    public void Hide()
    {
        if (m_Ready == false)
        {
            return;
        }
        m_Ready = false;

        SoundUtil.PlaySE(SEID.SE_MENU_RET);

        if (AndroidBackKeyManager.HasInstance)
        {
            //バックキーが押された時のアクションを解除
            AndroidBackKeyManager.Instance.StackPop(gameObject);
        }

        if (hideAction != null)
        {
            hideAction(scoreInfo);
        }

        gameObject.transform.DOScaleY(WindowHideScale, AnimationTime).OnComplete(() =>
        {
            RewardList.Clear();
            UnityUtil.SetObjectEnabledOnce(gameObject, false);
            m_Show = false;
        });
    }
예제 #2
0
        /// <summary>
        /// 根据时间创建RewardList表,第一次写入的时候判断是否同一天,然后删除三个月前的数据表
        /// </summary>
        /// <param name="reward"></param>
        public void Insert(RewardList reward)
        {
            string        network       = Framework.GlobalParameters.IsTestnet ? "miningpooltest" : "miningpool";
            string        tableName     = "RewardList" + System.DateTime.Now.ToString("yyyyMMdd");
            StringBuilder SQL_STATEMENT = new StringBuilder();

            //创建表
            SQL_STATEMENT.Append($"CREATE TABLE IF NOT EXISTS `{tableName}`(");
            SQL_STATEMENT.Append("`Id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'Id',");
            SQL_STATEMENT.Append("`BlockHash` VARCHAR(64) NOT NULL COMMENT '区块Hash',");
            SQL_STATEMENT.Append("`MinerAddress` VARCHAR(64) NOT NULL COMMENT '钱包地址',");
            SQL_STATEMENT.Append("`Hashes` BIGINT NOT NULL DEFAULT '0' COMMENT 'Hash个数',");
            SQL_STATEMENT.Append("`OriginalReward` BIGINT NOT NULL DEFAULT '0' COMMENT '原始奖励',");
            SQL_STATEMENT.Append("`ActualReward` BIGINT NOT NULL DEFAULT '0' COMMENT '实际奖励',");
            SQL_STATEMENT.Append("`Paid` INT NOT NULL DEFAULT '0' COMMENT '是否支付 0:未支付,1已支付',");
            SQL_STATEMENT.Append("`GenerateTime` BIGINT NOT NULL DEFAULT '0' COMMENT '生成时间时间戳',");
            SQL_STATEMENT.Append("`PaidTime` BIGINT NOT NULL DEFAULT '0' COMMENT '支付时间时间戳',");
            SQL_STATEMENT.Append("`TransactionHash` VARCHAR(64) NOT NULL COMMENT '交易Hash',");
            SQL_STATEMENT.Append("`Commission` BIGINT NOT NULL DEFAULT '0' COMMENT '提成奖励',");
            SQL_STATEMENT.Append("`IsCommissionProcessed` INT NOT NULL DEFAULT '0' COMMENT '提成是否发放',");
            SQL_STATEMENT.Append("`CommissionProcessedTime` BIGINT COMMENT '提成发放时间'");
            SQL_STATEMENT.Append(")ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT = '奖励信息表';");
            //插入数据
            SQL_STATEMENT.Append($"INSERT INTO {tableName} ");
            SQL_STATEMENT.Append("(BlockHash, MinerAddress, Hashes, OriginalReward, ActualReward, Paid, GenerateTime, PaidTime, TransactionHash, IsCommissionProcessed, CommissionProcessedTime) ");
            SQL_STATEMENT.Append($"VALUES ('{reward.BlockHash}', '{reward.MinerAddress}', {reward.Hashes}, {reward.OriginalReward}, {reward.ActualReward}, {reward.Paid}, {reward.GenerateTime}, {reward.PaidTime}, '{reward.TransactionHash}', {reward.IsCommissionProcessed}, {reward.CommissionProcessedTime});");

            using (MySqlConnection conn = new MySqlConnection(CacheConnectionString))
                using (MySqlCommand cmd = new MySqlCommand(SQL_STATEMENT.ToString(), conn))
                {
                    cmd.Connection.Open();
                    cmd.CommandTimeout = 1200;
                    cmd.ExecuteNonQuery();
                }
        }
예제 #3
0
    public void Initialize()
    {
        if (SaveManager.Instance.IsLoadedData)
        {
            InitializeByInGameSaveData();
        }
        else
        {
            InitializeByDefault();
        }

        currentBonusCoin = GetBonusCoin();
        rewardList       = new RewardList();

        InGameManager.instance.gameState.OnPrepare  += IncreaseCoinByPrepare;
        InGameManager.instance.gameState.OnComplete += IncreaseExpByBattleWin;
        InGameManager.instance.gameState.OnComplete += IncreaseRewardsByBattleWin;
    }
예제 #4
0
        public List <RewardList> GetCustomUnPaidReward(int count)
        {
            string SQL_STATEMENT =
                "PREPARE s1 FROM 'SELECT Id, BlockHash, MinerAddress, Hashes, OriginalReward, ActualReward, Paid, GenerateTime, PaidTime, TransactionHash, IsCommissionProcessed, CommissionProcessedTime " +
                "FROM RewardList " +
                "WHERE Paid = 0 AND BlockHash IN(SELECT Hash FROM Blocks WHERE Confirmed = 1 AND IsDiscarded = 0) ORDER BY Id LIMIT ?';" +
                "SET @Count = 3;" +
                "EXECUTE s1 USING @Count;";

            List <RewardList> result = null;

            using (MySqlConnection conn = new MySqlConnection(CacheConnectionString))
                using (MySqlCommand cmd = new MySqlCommand(SQL_STATEMENT, conn))
                {
                    cmd.Connection.Open();
                    cmd.CommandTimeout = 1200;
                    using (MySqlDataReader dr = cmd.ExecuteReader())
                    {
                        result = new List <RewardList>();

                        while (dr.Read())
                        {
                            RewardList reward = new RewardList();
                            reward.Id                      = GetDataValue <long>(dr, "Id");
                            reward.BlockHash               = GetDataValue <string>(dr, "BlockHash");
                            reward.MinerAddress            = GetDataValue <string>(dr, "MinerAddress");
                            reward.Hashes                  = GetDataValue <long>(dr, "Hashes");
                            reward.OriginalReward          = GetDataValue <long>(dr, "OriginalReward");
                            reward.ActualReward            = GetDataValue <long>(dr, "ActualReward");
                            reward.Paid                    = GetDataValue <int>(dr, "Paid");
                            reward.GenerateTime            = GetDataValue <long>(dr, "GenerateTime");
                            reward.PaidTime                = GetDataValue <long>(dr, "PaidTime");
                            reward.TransactionHash         = GetDataValue <string>(dr, "TransactionHash");
                            reward.IsCommissionProcessed   = GetDataValue <int>(dr, "IsCommissionProcessed");
                            reward.CommissionProcessedTime = GetDataValue <long?>(dr, "CommissionProcessedTime");

                            result.Add(reward);
                        }
                    }
                }

            return(result);
        }
예제 #5
0
        //public List<Blocks> GetAllBlocks()
        //{
        //    BlocksDac dac = new BlocksDac();
        //    return dac.SelectAll();
        //}

        //public Blocks GetBlockById(long id)
        //{
        //    BlocksDac dac = new BlocksDac();
        //    return dac.SelectById(id);
        //}

        //public Blocks GetBlockByHash(string hash)
        //{
        //    BlocksDac dac = new BlocksDac();
        //    return dac.SelectByHash(hash);
        //}

        //public Blocks SaveBlock(Blocks entity)
        //{
        //    BlocksDac dac = new BlocksDac();
        //    Blocks block = new Blocks();
        //    List<RewardList> list = new List<RewardList>();
        //    //组织Block数据
        //    DateTime now = Time.GetLocalDateTime(entity.Timstamp);
        //    block.Confirmed = 0;
        //    block.Generator = entity.Generator;
        //    block.Hash = entity.Hash;
        //    block.Height = entity.Height;
        //    block.Nonce = entity.Nonce;
        //    block.Timstamp = entity.Timstamp;
        //    block.TotalHash = entity.TotalHash;
        //    block.TotalReward = entity.TotalReward;
        //    //组织RewradList数据
        //    ConfigurationTool tool = new ConfigurationTool();
        //    AwardSetting setting = tool.GetAppSettings<AwardSetting>("AwardSetting");
        //    double extractProportion = setting.ExtractProportion;
        //    double serviceFeeProportion = setting.ServiceFeeProportion;
        //    dac.Insert(block, list, now);
        //    return block;
        //}

        public Blocks SaveBlockAndRewardLists(Blocks entity, List <RewardList> rewardLists)
        {
            BlocksDac         dac   = new BlocksDac();
            Blocks            block = new Blocks();
            List <RewardList> list  = new List <RewardList>();
            //组织Block数据
            long     epoTime = Time.EpochTime;
            DateTime now     = Time.GetLocalDateTime(epoTime);

            block.Confirmed    = 0;
            block.Generator    = entity.Generator;
            block.Hash         = entity.Hash;
            block.Height       = entity.Height;
            block.Nonce        = entity.Nonce;
            block.Timstamp     = epoTime;
            block.TotalHash    = entity.TotalHash;
            block.TotalReward  = entity.TotalReward;
            block.IsRewardSend = 0;
            //组织RewradList数据
            foreach (var item in rewardLists)
            {
                RewardList reward = new RewardList();
                reward.BlockHash               = item.BlockHash;
                reward.GenerateTime            = item.GenerateTime;
                reward.Hashes                  = item.Hashes;
                reward.MinerAddress            = item.MinerAddress;
                reward.OriginalReward          = item.OriginalReward;
                reward.ActualReward            = item.ActualReward;
                reward.Paid                    = 0;
                reward.PaidTime                = Time.EpochStartTime.Millisecond;
                reward.IsCommissionProcessed   = 0;
                reward.CommissionProcessedTime = 0;
                //此处transaction为"",需要奖励真正发放后才会更新奖励的交易Hash
                reward.TransactionHash           = "";
                reward.RewardType                = item.RewardType;
                reward.DepositTotalAmount        = item.DepositTotalAmount;
                reward.AddressDepositTotalAmount = item.AddressDepositTotalAmount;
                reward.DepositTransactionHash    = item.DepositTransactionHash;
                list.Add(reward);
            }
            dac.Insert(block, list, now);
            return(block);
        }
예제 #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);
        }
예제 #7
0
        public List <RewardList> GetUnPaidRewardBlock()
        {
            const string SQL_STATEMENT =
                "SELECT Id, BlockHash, MinerAddress, Hashes, OriginalReward, ActualReward, Paid, GenerateTime, PaidTime, TransactionHash, IsCommissionProcessed, CommissionProcessedTime " +
                "FROM RewardList " +
                "WHERE Paid = 0 AND BlockHash = (SELECT BlockHash FROM RewardList WHERE Paid = 0 LIMIT 1) ORDER BY Id;";

            List <RewardList> result = null;

            using (MySqlConnection conn = new MySqlConnection(CacheConnectionString))
                using (MySqlCommand cmd = new MySqlCommand(SQL_STATEMENT, conn))
                {
                    cmd.Connection.Open();
                    cmd.CommandTimeout = 1200;
                    using (MySqlDataReader dr = cmd.ExecuteReader())
                    {
                        result = new List <RewardList>();

                        while (dr.Read())
                        {
                            RewardList reward = new RewardList();
                            reward.Id                      = GetDataValue <long>(dr, "Id");
                            reward.BlockHash               = GetDataValue <string>(dr, "BlockHash");
                            reward.MinerAddress            = GetDataValue <string>(dr, "MinerAddress");
                            reward.Hashes                  = GetDataValue <long>(dr, "Hashes");
                            reward.OriginalReward          = GetDataValue <long>(dr, "OriginalReward");
                            reward.ActualReward            = GetDataValue <long>(dr, "ActualReward");
                            reward.Paid                    = GetDataValue <int>(dr, "Paid");
                            reward.GenerateTime            = GetDataValue <long>(dr, "GenerateTime");
                            reward.PaidTime                = GetDataValue <long>(dr, "PaidTime");
                            reward.TransactionHash         = GetDataValue <string>(dr, "TransactionHash");
                            reward.IsCommissionProcessed   = GetDataValue <int>(dr, "IsCommissionProcessed");
                            reward.CommissionProcessedTime = GetDataValue <long?>(dr, "CommissionProcessedTime");

                            result.Add(reward);
                        }
                    }
                }

            return(result);
        }
예제 #8
0
        public override Empty AddRewardList(RewardList input)
        {
            AssertSenderIsAdmin();
            foreach (var map in input.RewardMap)
            {
                State.RewardMap[map.Key] = map.Value;
            }

            if (State.RewardCodeList.Value == null)
            {
                State.RewardCodeList.Value = new StringList {
                    Value = { input.RewardMap.Keys }
                };
            }
            else
            {
                State.RewardCodeList.Value.Value.AddRange(input.RewardMap.Keys);
            }

            return(new Empty());
        }
예제 #9
0
        /// <summary>
        /// 固定地址的发奖励,测试发消息队列专用
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="blockHashes"></param>
        /// <param name="addresses"></param>
        /// <returns></returns>
        public List <RewardList> GetAllUnPaidRewardByAddresses(string tableName, string blockHashes, string addresses)
        {
            string SQL_STATEMENT =
                $"SELECT Id, BlockHash, MinerAddress, Hashes, OriginalReward, ActualReward, Paid, GenerateTime, PaidTime, TransactionHash, IsCommissionProcessed, CommissionProcessedTime FROM {tableName} WHERE Paid = 0 AND BlockHash IN ({blockHashes}) AND MinerAddress IN ({addresses});";

            List <RewardList> result = null;

            using (MySqlConnection conn = new MySqlConnection(CacheConnectionString))
                using (MySqlCommand cmd = new MySqlCommand(SQL_STATEMENT, conn))
                {
                    cmd.Connection.Open();
                    cmd.CommandTimeout = 1200;
                    using (MySqlDataReader dr = cmd.ExecuteReader())
                    {
                        result = new List <RewardList>();

                        while (dr.Read())
                        {
                            RewardList reward = new RewardList();
                            reward.Id                      = GetDataValue <long>(dr, "Id");
                            reward.BlockHash               = GetDataValue <string>(dr, "BlockHash");
                            reward.MinerAddress            = GetDataValue <string>(dr, "MinerAddress");
                            reward.Hashes                  = GetDataValue <long>(dr, "Hashes");
                            reward.OriginalReward          = GetDataValue <long>(dr, "OriginalReward");
                            reward.ActualReward            = GetDataValue <long>(dr, "ActualReward");
                            reward.Paid                    = GetDataValue <int>(dr, "Paid");
                            reward.GenerateTime            = GetDataValue <long>(dr, "GenerateTime");
                            reward.PaidTime                = GetDataValue <long>(dr, "PaidTime");
                            reward.TransactionHash         = GetDataValue <string>(dr, "TransactionHash");
                            reward.IsCommissionProcessed   = GetDataValue <int>(dr, "IsCommissionProcessed");
                            reward.CommissionProcessedTime = GetDataValue <long?>(dr, "CommissionProcessedTime");

                            result.Add(reward);
                        }
                    }
                }

            return(result);
        }
예제 #10
0
        public RewardList SelectByHash(string hash)
        {
            const string SQL_STATEMENT =
                "SELECT Id, BlockHash, MinerAddress, Hashes, OriginalReward, ActualReward, Paid, GenerateTime, PaidTime, TransactionHash, IsCommissionProcessed, CommissionProcessedTime " +
                "FROM RewardList WHERE BlockHash=@Hash LIMIT 1;";

            RewardList reward = null;

            using (MySqlConnection conn = new MySqlConnection(CacheConnectionString))
                using (MySqlCommand cmd = new MySqlCommand(SQL_STATEMENT, conn))
                {
                    cmd.Parameters.AddWithValue("@Hash", hash);
                    cmd.Connection.Open();
                    cmd.CommandTimeout = 1200;
                    using (MySqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            reward                         = new RewardList();
                            reward.Id                      = GetDataValue <long>(dr, "Id");
                            reward.BlockHash               = GetDataValue <string>(dr, "BlockHash");
                            reward.MinerAddress            = GetDataValue <string>(dr, "MinerAddress");
                            reward.Hashes                  = GetDataValue <long>(dr, "Hashes");
                            reward.OriginalReward          = GetDataValue <long>(dr, "OriginalReward");
                            reward.ActualReward            = GetDataValue <long>(dr, "ActualReward");
                            reward.Paid                    = GetDataValue <int>(dr, "Paid");
                            reward.GenerateTime            = GetDataValue <long>(dr, "GenerateTime");
                            reward.PaidTime                = GetDataValue <long>(dr, "PaidTime");
                            reward.TransactionHash         = GetDataValue <string>(dr, "TransactionHash");
                            reward.IsCommissionProcessed   = GetDataValue <int>(dr, "IsCommissionProcessed");
                            reward.CommissionProcessedTime = GetDataValue <long?>(dr, "CommissionProcessedTime");
                        }
                    }
                }

            return(reward);
        }
예제 #11
0
        private void ShowNextReward(CUIEvent firstIfNull)
        {
            if ((firstIfNull != null) || ((this._rewardShowList == null) && (this._rewardQueueIndex <= -1)))
            {
                if (this._rewardShowList == null)
                {
                    this._rewardQueueIndex++;
                    if (this._rewardQueueIndex >= this._rewardListQueue.Count)
                    {
                        Singleton <CUIEventManager> .GetInstance().RemoveUIEventListener(enUIEventID.Common_NewHeroOrSkinFormClose, new CUIEventManager.OnUIEventHandler(this.ShowNextReward));

                        Singleton <CUIEventManager> .GetInstance().RemoveUIEventListener(enUIEventID.Mall_Get_AWARD_CLOSE_FORM, new CUIEventManager.OnUIEventHandler(this.ShowNextReward));

                        this._rewardListQueue.Clear();
                        this._rewardQueueIndex = -1;
                        this._rewardShowIndex  = -1;
                        return;
                    }
                    this._rewardShowList   = this._rewardListQueue[this._rewardQueueIndex];
                    this._rewardShowIndex  = -1;
                    this._rewardHasSpecial = false;
                }
                while ((((++this._rewardShowIndex < this._rewardShowList.usabList.Count) && (this._rewardShowList.usabList[this._rewardShowIndex].MapRewardType != COM_REWARDS_TYPE.COM_REWARDS_TYPE_HERO)) && (this._rewardShowList.usabList[this._rewardShowIndex].MapRewardType != COM_REWARDS_TYPE.COM_REWARDS_TYPE_SKIN)) && ((this._rewardShowList.usabList[this._rewardShowIndex].MapRewardType != COM_REWARDS_TYPE.COM_REWARDS_TYPE_ITEM) || ((this._rewardShowList.usabList[this._rewardShowIndex].ExtraFromType != 1) && (this._rewardShowList.usabList[this._rewardShowIndex].ExtraFromType != 2))))
                {
                }
                if (this._rewardShowIndex < this._rewardShowList.usabList.Count)
                {
                    CUseable useable = this._rewardShowList.usabList[this._rewardShowIndex];
                    if (useable.MapRewardType == COM_REWARDS_TYPE.COM_REWARDS_TYPE_ITEM)
                    {
                        if (useable.ExtraFromType == 1)
                        {
                            CUICommonSystem.ShowNewHeroOrSkin((uint)useable.ExtraFromData, 0, enUIEventID.None, true, COM_REWARDS_TYPE.COM_REWARDS_TYPE_HERO, true, null, enFormPriority.Priority1, (uint)useable.m_stackCount, 0);
                        }
                        else if (useable.ExtraFromType == 2)
                        {
                            int extraFromData = useable.ExtraFromData;
                            CUICommonSystem.ShowNewHeroOrSkin(0, (uint)extraFromData, enUIEventID.None, true, COM_REWARDS_TYPE.COM_REWARDS_TYPE_SKIN, true, null, enFormPriority.Priority1, (uint)useable.m_stackCount, 0);
                        }
                    }
                    else if (useable is CHeroSkin)
                    {
                        CHeroSkin skin = useable as CHeroSkin;
                        CUICommonSystem.ShowNewHeroOrSkin(skin.m_heroId, skin.m_skinId, enUIEventID.None, true, COM_REWARDS_TYPE.COM_REWARDS_TYPE_SKIN, true, null, enFormPriority.Priority1, 0, 0);
                    }
                    else
                    {
                        CUICommonSystem.ShowNewHeroOrSkin(useable.m_baseID, 0, enUIEventID.None, true, COM_REWARDS_TYPE.COM_REWARDS_TYPE_HERO, true, null, enFormPriority.Priority1, 0, 0);
                    }
                    this._rewardHasSpecial = true;
                }
                else if ((this._rewardShowList.usabList.Count > 1) || !this._rewardHasSpecial)
                {
                    bool flag = (this._rewardShowList.flags & 2) > 0;
                    Singleton <CUIManager> .GetInstance().OpenAwardTip(LinqS.ToArray <CUseable>(this._rewardShowList.usabList), Singleton <CTextManager> .GetInstance().GetText(!flag ? "gotAward" : "gotExtraAward"), true, enUIEventID.None, false, false, "Form_Award");

                    this._rewardShowList = null;
                }
                else
                {
                    this._rewardShowList = null;
                    this.ShowNextReward(new CUIEvent());
                }
            }
        }
예제 #12
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());
            }
        }
예제 #13
0
    private void updateRewardList()
    {
        if (scoreInfo == null)
        {
            return;
        }

        RewardList.Clear();
        achieveList.Clear();

        List <PacketStructUserScoreReward> viewList = new List <PacketStructUserScoreReward>();
        List <PacketStructUserScoreReward> getList  = new List <PacketStructUserScoreReward>();

        if (scoreInfo.reward_list != null)
        {
            for (int i = 0; i < scoreInfo.reward_list.Length; i++)
            {
                if (scoreInfo.reward_list[i] == null)
                {
                    continue;
                }
                if (scoreInfo.reward_list[i].type - 1 != TabIndex)
                {
                    continue;
                }

                bool bAchieve = false;
                switch (scoreInfo.reward_list[i].type)
                {
                case 1:
                {
                    if (scoreInfo.hi_score >= scoreInfo.reward_list[i].score)
                    {
                        bAchieve = true;
                    }
                }
                break;

                case 2:
                {
                    if (scoreInfo.total_score >= scoreInfo.reward_list[i].score)
                    {
                        bAchieve = true;
                    }
                }
                break;
                }

                if (bAchieve)
                {
                    achieveList.Add(scoreInfo.reward_list[i]);
                }
                else
                {
                    viewList.Add(scoreInfo.reward_list[i]);
                }
            }
        }
        if (scoreInfo.get_list != null)
        {
            for (int i = 0; i < scoreInfo.get_list.Length; i++)
            {
                if (scoreInfo.get_list[i] == null)
                {
                    continue;
                }
                if (scoreInfo.get_list[i].type - 1 != TabIndex)
                {
                    continue;
                }
                getList.Add(scoreInfo.get_list[i]);
            }
        }

        IsActiveGetAll = false;

        if (achieveList.Count != 0)
        {
            achieveList.Sort((a, b) => a.score - b.score);
            for (int i = 0; i < achieveList.Count; i++)
            {
                ScoreRewardContext scoreReward = new ScoreRewardContext();
                scoreReward.setData(achieveList[i], ScoreRewardContext.REWARD_ACHIIEVE);
                RewardList.Add(scoreReward);
            }

            IsActiveGetAll = true;
        }
        if (viewList.Count != 0)
        {
            viewList.Sort((a, b) => a.score - b.score);
            for (int i = 0; i < viewList.Count; i++)
            {
                ScoreRewardContext scoreReward = new ScoreRewardContext();
                scoreReward.setData(viewList[i], ScoreRewardContext.REWARD_SHOW);
                RewardList.Add(scoreReward);
            }
        }
        if (getList.Count != 0)
        {
            getList.Sort((a, b) => a.score - b.score);
            for (int i = 0; i < getList.Count; i++)
            {
                ScoreRewardContext scoreReward = new ScoreRewardContext();
                scoreReward.setData(getList[i], ScoreRewardContext.REWARD_GET);
                RewardList.Add(scoreReward);
            }
        }
        scrollContent.Initialize(this);
    }