Use div-free EC power selection function
License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
6f73e8bf2f
commit
563c0e494e
@ -3,11 +3,11 @@ package types
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/sha256"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
block "github.com/ipfs/go-block-format"
|
block "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
"github.com/minio/sha256-simd"
|
||||||
"github.com/multiformats/go-multihash"
|
"github.com/multiformats/go-multihash"
|
||||||
"go.opencensus.io/trace"
|
"go.opencensus.io/trace"
|
||||||
xerrors "golang.org/x/xerrors"
|
xerrors "golang.org/x/xerrors"
|
||||||
@ -166,19 +166,24 @@ func PowerCmp(eproof ElectionProof, mpow, totpow BigInt) bool {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Need to check that
|
Need to check that
|
||||||
h(vrfout) / 2^256 < minerPower / totalPower
|
h(vrfout) / max(h) * e < minerPower / totalPower
|
||||||
|
max(h) == 2^256-1
|
||||||
|
which in terms of integer math means:
|
||||||
|
h(vrfout) * totalPower * e < minerPower * (2^256-1)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
h := sha256.Sum256(eproof)
|
h := sha256.Sum256(eproof)
|
||||||
|
|
||||||
// 2^256
|
lhs := BigFromBytes(h[:]).Int
|
||||||
rden := BigInt{big.NewInt(0).Exp(big.NewInt(2), big.NewInt(256), nil)}
|
lhs = lhs.Mul(lhs, blocksPerEpoch.Int)
|
||||||
|
lhs = lhs.Mul(lhs, totpow.Int)
|
||||||
|
|
||||||
top := BigMul(BigMul(rden, mpow), blocksPerEpoch)
|
// rhs = minerPower * 2^256 - minerPower
|
||||||
out := BigDiv(top, totpow)
|
// rhs = minerPower << 256 - minerPower
|
||||||
|
rhs := new(big.Int).Lsh(mpow.Int, 256)
|
||||||
|
rhs = rhs.Sub(rhs, mpow.Int)
|
||||||
|
|
||||||
hp := BigFromBytes(h[:])
|
return lhs.Cmp(rhs) == -1
|
||||||
return hp.LessThan(out)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Ticket) Equals(ot *Ticket) bool {
|
func (t *Ticket) Equals(ot *Ticket) bool {
|
||||||
|
1
go.mod
1
go.mod
@ -61,6 +61,7 @@ require (
|
|||||||
github.com/mattn/go-runewidth v0.0.4 // indirect
|
github.com/mattn/go-runewidth v0.0.4 // indirect
|
||||||
github.com/miekg/dns v1.1.16 // indirect
|
github.com/miekg/dns v1.1.16 // indirect
|
||||||
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
|
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
|
||||||
|
github.com/minio/sha256-simd v0.1.0
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/multiformats/go-base32 v0.0.3
|
github.com/multiformats/go-base32 v0.0.3
|
||||||
github.com/multiformats/go-multiaddr v0.0.4
|
github.com/multiformats/go-multiaddr v0.0.4
|
||||||
|
Loading…
Reference in New Issue
Block a user