Ejemplo n.º 1
0
        public override GetWelfareRewardAmountSampleOutput GetWelfareRewardAmountSample(
            GetWelfareRewardAmountSampleInput input)
        {
            const long sampleAmount        = 10000;
            var        welfareHash         = State.WelfareHash.Value;
            var        output              = new GetWelfareRewardAmountSampleOutput();
            var        welfareScheme       = State.ProfitContract.GetScheme.Call(welfareHash);
            var        releasedInformation = State.ProfitContract.GetDistributedProfitsInfo.Call(
                new SchemePeriod
            {
                SchemeId = welfareHash,
                Period   = welfareScheme.CurrentPeriod.Sub(1)
            });
            var totalShares = releasedInformation.TotalShares;

            if (totalShares == 0)
            {
                return(new GetWelfareRewardAmountSampleOutput());
            }

            var totalAmount = releasedInformation.ProfitsAmount;

            foreach (var lockTime in input.Value)
            {
                var shares = GetVotesWeight(sampleAmount, lockTime);
                output.Value.Add(totalAmount[Context.Variables.NativeSymbol].Mul(shares).Div(totalShares));
            }

            return(output);
        }
        public override GetWelfareRewardAmountSampleOutput GetWelfareRewardAmountSample(
            GetWelfareRewardAmountSampleInput input)
        {
            const long sampleAmount        = 10000;
            var        welfareHash         = State.WelfareHash.Value;
            var        output              = new GetWelfareRewardAmountSampleOutput();
            var        welfareScheme       = State.ProfitContract.GetScheme.Call(welfareHash);
            var        releasedInformation = State.ProfitContract.GetDistributedProfitsInfo.Call(
                new SchemePeriod
            {
                SchemeId = welfareHash,
                Period   = welfareScheme.CurrentPeriod.Sub(1)
            });
            var totalShares = releasedInformation.TotalShares;

            if (totalShares == 0)
            {
                return(new GetWelfareRewardAmountSampleOutput());
            }

            var totalAmount = releasedInformation.AmountsMap;

            foreach (var lockTime in input.Value)
            {
                var shares = GetVotesWeight(sampleAmount, lockTime);
                // In case of arithmetic overflow
                var decimalAmount      = (decimal)totalAmount[Context.Variables.NativeSymbol];
                var decimalShares      = (decimal)shares;
                var decimalTotalShares = (decimal)totalShares;
                var amount             = decimalAmount * decimalShares / decimalTotalShares;
                output.Value.Add((long)amount);
            }

            return(output);
        }