Browse Source

Update Master

master
yuriy0803 5 years ago
parent
commit
ccb56e8710
  1. 2
      api.json
  2. 2
      main.go
  3. 2
      payouts/payer.go
  4. 41
      payouts/unlocker.go
  5. 1
      proxy/config.go
  6. 2
      proxy/handlers.go
  7. 19
      proxy/miner.go

2
api.json

@ -3,6 +3,7 @@
"coin": "etc", "coin": "etc",
"name": "main", "name": "main",
"pplns": 9000, "pplns": 9000,
"network": "classic",
"proxy": { "proxy": {
"enabled": true, "enabled": true,
@ -16,6 +17,7 @@
"hashrateExpiration": "3h", "hashrateExpiration": "3h",
"healthCheck": true, "healthCheck": true,
"debug": true,
"maxFails": 100, "maxFails": 100,
"stratum": { "stratum": {

2
main.go

@ -33,7 +33,7 @@ func startApi() {
} }
func startBlockUnlocker() { func startBlockUnlocker() {
u := payouts.NewBlockUnlocker(&cfg.BlockUnlocker, backend) u := payouts.NewBlockUnlocker(&cfg.BlockUnlocker, backend, &cfg.Network)
u.Start() u.Start()
} }

2
payouts/payer.go

@ -7,8 +7,8 @@ import (
"os" "os"
"os/exec" "os/exec"
"strconv" "strconv"
"time"
"sync" "sync"
"time"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"

41
payouts/unlocker.go

@ -3,8 +3,8 @@ package payouts
import ( import (
"fmt" "fmt"
"log" "log"
"os"
"math/big" "math/big"
"os"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -27,14 +27,12 @@ type UnlockerConfig struct {
Interval string `json:"interval"` Interval string `json:"interval"`
Daemon string `json:"daemon"` Daemon string `json:"daemon"`
Timeout string `json:"timeout"` Timeout string `json:"timeout"`
Ecip1017FBlock int64 `json:"ecip1017FBlock"`
Ecip1017EraRounds *big.Int `json:"ecip1017EraRounds"`
} }
const minDepth = 16 const minDepth = 16
// const ecip1017FBlock = 0 // mordor
// var ecip1017EraRounds = big.NewInt(2000000) // mordor
const ecip1017FBlock = 5000000 // mainnet
var ecip1017EraRounds = big.NewInt(5000000) // mainnet
var disinflationRateQuotient = big.NewInt(4) // Disinflation rate quotient for ECIP1017 var disinflationRateQuotient = big.NewInt(4) // Disinflation rate quotient for ECIP1017
var disinflationRateDivisor = big.NewInt(5) // Disinflation rate divisor for ECIP1017 var disinflationRateDivisor = big.NewInt(5) // Disinflation rate divisor for ECIP1017
var big32 = big.NewInt(32) var big32 = big.NewInt(32)
@ -50,7 +48,16 @@ type BlockUnlocker struct {
lastFail error lastFail error
} }
func NewBlockUnlocker(cfg *UnlockerConfig, backend *storage.RedisClient) *BlockUnlocker { func NewBlockUnlocker(cfg *UnlockerConfig, backend *storage.RedisClient, network *string) *BlockUnlocker {
if *network == "classic" {
cfg.Ecip1017FBlock = 5000000
cfg.Ecip1017EraRounds = big.NewInt(5000000)
} else if *network == "mordor" {
cfg.Ecip1017FBlock = 0
cfg.Ecip1017EraRounds = big.NewInt(2000000)
} else {
log.Fatalln("Invalid network set", network)
}
if len(cfg.PoolFeeAddress) != 0 && !util.IsValidHexAddress(cfg.PoolFeeAddress) { if len(cfg.PoolFeeAddress) != 0 && !util.IsValidHexAddress(cfg.PoolFeeAddress) {
log.Fatalln("Invalid poolFeeAddress", cfg.PoolFeeAddress) log.Fatalln("Invalid poolFeeAddress", cfg.PoolFeeAddress)
@ -170,7 +177,7 @@ func (u *BlockUnlocker) unlockCandidates(candidates []*storage.BlockData) (*Unlo
orphan = false orphan = false
result.uncles++ result.uncles++
err := handleUncle(height, uncle, candidate) err := handleUncle(height, uncle, candidate, u.config)
if err != nil { if err != nil {
u.halt = true u.halt = true
u.lastFail = err u.lastFail = err
@ -220,7 +227,8 @@ func (u *BlockUnlocker) handleBlock(block *rpc.GetBlockReply, candidate *storage
return err return err
} }
candidate.Height = correctHeight candidate.Height = correctHeight
reward := getConstReward(candidate.Height) era := GetBlockEra(big.NewInt(candidate.Height), u.config.Ecip1017EraRounds)
reward := getConstReward(era)
// Add reward for including uncles // Add reward for including uncles
uncleReward := getRewardForUncle(reward) uncleReward := getRewardForUncle(reward)
@ -244,12 +252,13 @@ func (u *BlockUnlocker) handleBlock(block *rpc.GetBlockReply, candidate *storage
return nil return nil
} }
func handleUncle(height int64, uncle *rpc.GetBlockReply, candidate *storage.BlockData) error { func handleUncle(height int64, uncle *rpc.GetBlockReply, candidate *storage.BlockData, cfg *UnlockerConfig) error {
uncleHeight, err := strconv.ParseInt(strings.Replace(uncle.Number, "0x", "", -1), 16, 64) uncleHeight, err := strconv.ParseInt(strings.Replace(uncle.Number, "0x", "", -1), 16, 64)
if err != nil { if err != nil {
return err return err
} }
reward := getUncleReward(new(big.Int).SetInt64(uncleHeight), new(big.Int).SetInt64(height), getConstReward(height)) era := GetBlockEra(big.NewInt(height), cfg.Ecip1017EraRounds)
reward := getUncleReward(new(big.Int).SetInt64(uncleHeight), new(big.Int).SetInt64(height), era, getConstReward(era))
candidate.Height = height candidate.Height = height
candidate.UncleHeight = uncleHeight candidate.UncleHeight = uncleHeight
candidate.Orphan = false candidate.Orphan = false
@ -560,15 +569,9 @@ func GetBlockEra(blockNum, eraLength *big.Int) *big.Int {
return new(big.Int).Sub(d, dremainder) return new(big.Int).Sub(d, dremainder)
} }
func getConstReward(height int64) *big.Int { func getConstReward(era *big.Int) *big.Int {
var blockReward = homesteadReward var blockReward = homesteadReward
var bigHeight = new(big.Int).SetInt64(height)
// Ensure value 'era' is configured.
era := GetBlockEra(bigHeight, ecip1017EraRounds)
wr := GetBlockWinnerRewardByEra(era, blockReward) wr := GetBlockWinnerRewardByEra(era, blockReward)
// wurs := GetBlockWinnerRewardForUnclesByEra(era, uncles, blockReward) // wurs "winner uncle rewards"
// wr.Add(wr, wurs)
return wr return wr
} }
@ -576,9 +579,7 @@ func getRewardForUncle(blockReward *big.Int) *big.Int {
return new(big.Int).Div(blockReward, big32) //return new(big.Int).Div(reward, new(big.Int).SetInt64(32)) return new(big.Int).Div(blockReward, big32) //return new(big.Int).Div(reward, new(big.Int).SetInt64(32))
} }
func getUncleReward(uHeight *big.Int, height *big.Int, reward *big.Int) *big.Int { func getUncleReward(uHeight *big.Int, height *big.Int, era *big.Int, reward *big.Int) *big.Int {
// Ensure value 'era' is configured.
era := GetBlockEra(height, ecip1017EraRounds)
// Era 1 (index 0): // Era 1 (index 0):
// An extra reward to the winning miner for including uncles as part of the block, in the form of an extra 1/32 (0.15625ETC) per uncle included, up to a maximum of two (2) uncles. // An extra reward to the winning miner for including uncles as part of the block, in the form of an extra 1/32 (0.15625ETC) per uncle included, up to a maximum of two (2) uncles.
if era.Cmp(big.NewInt(0)) == 0 { if era.Cmp(big.NewInt(0)) == 0 {

1
proxy/config.go

@ -16,6 +16,7 @@ type Config struct {
Threads int `json:"threads"` Threads int `json:"threads"`
Network string `json:"network"`
Coin string `json:"coin"` Coin string `json:"coin"`
Pplns int64 `json:"pplns"` Pplns int64 `json:"pplns"`
Redis storage.Config `json:"redis"` Redis storage.Config `json:"redis"`

2
proxy/handlers.go

@ -1,10 +1,10 @@
package proxy package proxy
import ( import (
"errors"
"log" "log"
"regexp" "regexp"
"strings" "strings"
"errors"
"github.com/yuriy0803/open-etc-pool-friends/rpc" "github.com/yuriy0803/open-etc-pool-friends/rpc"
"github.com/yuriy0803/open-etc-pool-friends/util" "github.com/yuriy0803/open-etc-pool-friends/util"

19
proxy/miner.go

@ -6,14 +6,27 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/yuriy0803/go-etchash"
) )
var hasher = ethash.New() var ecip1099FBlockClassic uint64 = 11700000 // classic mainnet
var ecip1099FBlockMordor uint64 = 2520000 // mordor
func (s *ProxyServer) processShare(login, id, ip string, t *BlockTemplate, params []string) (bool, bool) { var hasher *etchash.Etchash = nil
func (s *ProxyServer) processShare(login, id, ip string, t *BlockTemplate, params []string) (bool, bool) {
if hasher == nil {
if s.config.Network == "classic" {
hasher = etchash.New(&ecip1099FBlockClassic)
} else if s.config.Network == "mordor" {
hasher = etchash.New(&ecip1099FBlockMordor)
} else {
// unknown network
log.Printf("Unknown network configuration %s", s.config.Network)
return false, false
}
}
nonceHex := params[0] nonceHex := params[0]
hashNoNonce := params[1] hashNoNonce := params[1]
mixDigest := params[2] mixDigest := params[2]

Loading…
Cancel
Save