diff --git a/api.json b/api.json index a859eea..87b8544 100644 --- a/api.json +++ b/api.json @@ -2,7 +2,7 @@ "threads": 4, "coin": "ETC", "name": "main", - "pplns": 0, + "pplns": 9000, "network": "classic", "algo": "etchash", "coin-name": "ETC", @@ -108,6 +108,7 @@ }, "unlocker": { "enabled": true, + "miningtype": "pplns", "poolFee": 1.0, "poolFeeAddress": "", "depth": 120, diff --git a/payouts/unlocker.go b/payouts/unlocker.go index abdefd3..5805a8e 100644 --- a/payouts/unlocker.go +++ b/payouts/unlocker.go @@ -1,6 +1,7 @@ package payouts import ( + "errors" "fmt" "log" "math/big" @@ -18,6 +19,7 @@ import ( type UnlockerConfig struct { Enabled bool `json:"enabled"` + MiningType string `json:"miningtype"` PoolFee float64 `json:"poolFee"` PoolFeeAddress string `json:"poolFeeAddress"` Depth int64 `json:"depth"` @@ -642,25 +644,67 @@ func (u *BlockUnlocker) calculateRewards(block *storage.BlockData) (*big.Rat, *b totalShares += val } - rewards, percents := calculateRewardsForShares(shares, totalShares, minersProfit) + if u.config.MiningType == "solo" { + rewards, percents := calculateRewardsForFinder(block.Finder, totalShares, minersProfit) + if block.ExtraReward != nil { + extraReward := new(big.Rat).SetInt(block.ExtraReward) + poolProfit.Add(poolProfit, extraReward) + revenue.Add(revenue, extraReward) + } + + var donation = new(big.Rat) + poolProfit, donation = chargeFee(poolProfit, donationFee) + login := strings.ToLower(donationAccount) + rewards[login] += weiToShannonInt64(donation) + + if len(u.config.PoolFeeAddress) != 0 { + address := strings.ToLower(u.config.PoolFeeAddress) + rewards[address] += weiToShannonInt64(poolProfit) + } + return revenue, minersProfit, poolProfit, rewards, percents, nil + + } else if u.config.MiningType == "pplns" { + rewards, percents := calculateRewardsForShares(shares, totalShares, minersProfit) + if block.ExtraReward != nil { + extraReward := new(big.Rat).SetInt(block.ExtraReward) + poolProfit.Add(poolProfit, extraReward) + revenue.Add(revenue, extraReward) + } + + var donation = new(big.Rat) + poolProfit, donation = chargeFee(poolProfit, donationFee) + login := strings.ToLower(donationAccount) + rewards[login] += weiToShannonInt64(donation) + + if len(u.config.PoolFeeAddress) != 0 { + address := strings.ToLower(u.config.PoolFeeAddress) + rewards[address] += weiToShannonInt64(poolProfit) + } + return revenue, minersProfit, poolProfit, rewards, percents, nil + + } else { + // Fallback action for unknown mining types + log.Printf("Unknown mining type: %s", u.config.MiningType) - if block.ExtraReward != nil { - extraReward := new(big.Rat).SetInt(block.ExtraReward) - poolProfit.Add(poolProfit, extraReward) - revenue.Add(revenue, extraReward) + // You can add a return here as needed + return nil, nil, nil, nil, nil, errors.New("Unknown mining type: " + u.config.MiningType) } +} - var donation = new(big.Rat) - poolProfit, donation = chargeFee(poolProfit, donationFee) - login := strings.ToLower(donationAccount) - rewards[login] += weiToShannonInt64(donation) +func calculateRewardsForFinder(finder string, total int64, reward *big.Rat) (map[string]int64, map[string]*big.Rat) { + rewards := make(map[string]int64) + percents := make(map[string]*big.Rat) - if len(u.config.PoolFeeAddress) != 0 { - address := strings.ToLower(u.config.PoolFeeAddress) - rewards[address] += weiToShannonInt64(poolProfit) + login := finder + fmt.Print(total) + if total == 0 { + total = 1 } + percents[login] = big.NewRat(total, total) + workerReward := new(big.Rat).Mul(reward, percents[login]) + rewards[login] += weiToShannonInt64(workerReward) - return revenue, minersProfit, poolProfit, rewards, percents, nil + return rewards, percents } func calculateRewardsForShares(shares map[string]int64, total int64, reward *big.Rat) (map[string]int64, map[string]*big.Rat) { diff --git a/storage/redis.go b/storage/redis.go index 88e6b5b..8fc2705 100644 --- a/storage/redis.go +++ b/storage/redis.go @@ -85,7 +85,6 @@ type RewardData struct { } type BlockData struct { - Login string `json:"login"` Worker string `json:"worker"` ShareDiffCalc int64 `json:"shareDiff"` Height int64 `json:"height"` @@ -97,6 +96,7 @@ type BlockData struct { UncleHeight int64 `json:"uncleHeight"` Orphan bool `json:"orphan"` Hash string `json:"hash"` + Finder string `json:"finder"` Nonce string `json:"-"` PowHash string `json:"-"` MixDigest string `json:"-"` @@ -141,7 +141,7 @@ func (b *BlockData) RoundKey() string { } func (b *BlockData) key() string { - return join(b.UncleHeight, b.Orphan, b.Nonce, b.serializeHash(), b.Timestamp, b.Difficulty, b.TotalShares, b.Reward, b.Login, b.ShareDiffCalc, b.Worker, b.PersonalShares) + return join(b.UncleHeight, b.Orphan, b.Nonce, b.serializeHash(), b.Timestamp, b.Difficulty, b.TotalShares, b.Reward, b.Finder, b.ShareDiffCalc, b.Worker, b.PersonalShares) } type Miner struct { @@ -1562,7 +1562,7 @@ func convertCandidateResults(raw *redis.ZSliceCmd) []*BlockData { block.Timestamp, _ = strconv.ParseInt(fields[3], 10, 64) block.Difficulty, _ = strconv.ParseInt(fields[4], 10, 64) block.TotalShares, _ = strconv.ParseInt(fields[5], 10, 64) - block.Login = fields[6] + block.Finder = fields[6] block.ShareDiffCalc, _ = strconv.ParseInt(fields[7], 10, 64) block.PersonalShares, _ = strconv.ParseInt(fields[9], 10, 64) block.Worker = fields[8] @@ -1616,7 +1616,7 @@ func convertBlockResults(rows ...*redis.ZSliceCmd) []*BlockData { block.TotalShares, _ = strconv.ParseInt(fields[6], 10, 64) block.RewardString = fields[7] block.ImmatureReward = fields[7] - block.Login = fields[8] + block.Finder = fields[8] block.ShareDiffCalc, _ = strconv.ParseInt(fields[9], 10, 64) block.PersonalShares, _ = strconv.ParseInt(fields[11], 10, 64) block.Worker = fields[10] diff --git a/www/app/templates/blocks.hbs b/www/app/templates/blocks.hbs index 69e47d7..a87193d 100644 --- a/www/app/templates/blocks.hbs +++ b/www/app/templates/blocks.hbs @@ -11,19 +11,22 @@
{{high-charts mode=stockChart chartOptions=chartOptions content=chartData}} {{#if model.luck}} - {{partial "luck"}} + {{partial "luck"}} {{/if}} {{outlet}} -
+ \ No newline at end of file diff --git a/www/app/templates/blocks/block.hbs b/www/app/templates/blocks/block.hbs index c336d28..cdb6e83 100644 --- a/www/app/templates/blocks/block.hbs +++ b/www/app/templates/blocks/block.hbs @@ -1,30 +1,32 @@ {{#if block.uncle}} - {{format-number block.height}} + {{format-number + block.height}} {{else}} - {{format-number block.height}} + {{format-number + block.height}} {{/if}} {{#if block.uncle}} - {{#link-to 'account' block.login class='hash'}}{{block.login}}{{/link-to}} - {{else if block.orphan}} - Orphan - {{else}} - {{#link-to 'account' block.login class='hash'}}{{block.login}}{{/link-to}} - {{/if}} + {{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}} + {{else if block.orphan}} + Orphan + {{else}} + {{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}} + {{/if}} {{format-date-locale block.timestamp}} {{#if block.isLucky}} - {{format-number block.variance style='percent'}} + {{format-number block.variance style='percent'}} {{else}} - {{#if block.isHard}} - {{format-number block.variance style='percent'}} - {{else}} - {{format-number block.variance style='percent'}} - {{/if}} + {{#if block.isHard}} + {{format-number block.variance style='percent'}} + {{else}} + {{format-number block.variance style='percent'}} + {{/if}} {{/if}} @@ -43,4 +45,4 @@ {{format-hashrate block.shareDiff}} {{block.worker}} - + \ No newline at end of file diff --git a/www/app/templates/blocks/immature.hbs b/www/app/templates/blocks/immature.hbs index 9fd1ec2..434e5bf 100644 --- a/www/app/templates/blocks/immature.hbs +++ b/www/app/templates/blocks/immature.hbs @@ -1,26 +1,26 @@ {{#if model.immature}}

Immature Blocks

- - - - - - - - - - - - - - - {{#each model.immature as |block|}} +
HeightLoginTime FoundVarianceRewardTypeShares/DiffWorker ID
+ + + + + + + + + + + + + + {{#each model.immature as |block|}} {{partial "blocks/block"}} - {{/each}} - -
HeightLoginTime FoundVarianceRewardTypeShares/DiffWorker ID
+ {{/each}} + +
{{else}}

No immature blocks yet

-{{/if}} +{{/if}} \ No newline at end of file diff --git a/www/app/templates/blocks/index.hbs b/www/app/templates/blocks/index.hbs index ff770f3..8a10cb6 100644 --- a/www/app/templates/blocks/index.hbs +++ b/www/app/templates/blocks/index.hbs @@ -1,26 +1,26 @@ {{#if model.matured}}

Matured Blocks

- - - - - - - - - - - - - - - {{#each model.matured as |block|}} +
HeightLoginTime FoundPool LuckRewardTypeShares/DiffWorker ID
+ + + + + + + + + + + + + + {{#each model.matured as |block|}} {{partial "blocks/block"}} - {{/each}} - -
HeightLoginTime FoundPool LuckRewardTypeShares/DiffWorker ID
+ {{/each}} + +
{{else}}

No matured blocks yet

-{{/if}} +{{/if}} \ No newline at end of file diff --git a/www/app/templates/blocks/pending.hbs b/www/app/templates/blocks/pending.hbs index 59b4c2e..6382ff3 100644 --- a/www/app/templates/blocks/pending.hbs +++ b/www/app/templates/blocks/pending.hbs @@ -14,9 +14,10 @@ {{#each model.candidates as |block|}} - {{format-number block.height}} - {{#link-to 'account' block.login class='hash'}}{{block.login}}{{/link-to}} - {{format-date-locale block.timestamp}} + {{format-number + block.height}} + {{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}} + {{format-date-locale block.timestamp}} {{#if block.isLucky}} {{format-number block.variance style='percent'}} @@ -32,4 +33,4 @@ {{else}}

No new blocks yet

-{{/if}} +{{/if}} \ No newline at end of file