mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-26 09:42:22 +00:00
*: use internal variables for simple big.NewInt() values
Avoid additional allocations.
This commit is contained in:
parent
3eed9d06f8
commit
418ba1dbc3
5 changed files with 31 additions and 15 deletions
|
@ -90,6 +90,12 @@ const (
|
||||||
var (
|
var (
|
||||||
// prefixCommittee is a key used to store committee.
|
// prefixCommittee is a key used to store committee.
|
||||||
prefixCommittee = []byte{14}
|
prefixCommittee = []byte{14}
|
||||||
|
|
||||||
|
bigCommitteeRewardRatio = big.NewInt(committeeRewardRatio)
|
||||||
|
bigVoterRewardRatio = big.NewInt(voterRewardRatio)
|
||||||
|
bigVoterRewardFactor = big.NewInt(voterRewardFactor)
|
||||||
|
bigEffectiveVoterTurnout = big.NewInt(effectiveVoterTurnout)
|
||||||
|
big100 = big.NewInt(100)
|
||||||
)
|
)
|
||||||
|
|
||||||
// makeValidatorKey creates a key from account script hash.
|
// makeValidatorKey creates a key from account script hash.
|
||||||
|
@ -316,24 +322,26 @@ func (n *NEO) PostPersist(ic *interop.Context) error {
|
||||||
pubs := n.GetCommitteeMembers()
|
pubs := n.GetCommitteeMembers()
|
||||||
committeeSize := len(ic.Chain.GetConfig().StandbyCommittee)
|
committeeSize := len(ic.Chain.GetConfig().StandbyCommittee)
|
||||||
index := int(ic.Block.Index) % committeeSize
|
index := int(ic.Block.Index) % committeeSize
|
||||||
committeeReward := new(big.Int).Mul(gas, big.NewInt(committeeRewardRatio))
|
committeeReward := new(big.Int).Mul(gas, bigCommitteeRewardRatio)
|
||||||
n.GAS.mint(ic, pubs[index].GetScriptHash(), committeeReward.Div(committeeReward, big.NewInt(100)), false)
|
n.GAS.mint(ic, pubs[index].GetScriptHash(), committeeReward.Div(committeeReward, big100), false)
|
||||||
|
|
||||||
if ShouldUpdateCommittee(ic.Block.Index, ic.Chain) {
|
if ShouldUpdateCommittee(ic.Block.Index, ic.Chain) {
|
||||||
var voterReward = big.NewInt(voterRewardRatio)
|
var voterReward = new(big.Int).Set(bigVoterRewardRatio)
|
||||||
voterReward.Mul(voterReward, gas)
|
voterReward.Mul(voterReward, gas)
|
||||||
voterReward.Mul(voterReward, big.NewInt(voterRewardFactor*int64(committeeSize)))
|
voterReward.Mul(voterReward, big.NewInt(voterRewardFactor*int64(committeeSize)))
|
||||||
var validatorsCount = ic.Chain.GetConfig().ValidatorsCount
|
var validatorsCount = ic.Chain.GetConfig().ValidatorsCount
|
||||||
voterReward.Div(voterReward, big.NewInt(int64(committeeSize+validatorsCount)))
|
voterReward.Div(voterReward, big.NewInt(int64(committeeSize+validatorsCount)))
|
||||||
voterReward.Div(voterReward, big.NewInt(100))
|
voterReward.Div(voterReward, big100)
|
||||||
|
|
||||||
var cs = n.committee.Load().(keysWithVotes)
|
var cs = n.committee.Load().(keysWithVotes)
|
||||||
var key = make([]byte, 38)
|
var key = make([]byte, 38)
|
||||||
for i := range cs {
|
for i := range cs {
|
||||||
if cs[i].Votes.Sign() > 0 {
|
if cs[i].Votes.Sign() > 0 {
|
||||||
tmp := big.NewInt(1)
|
var tmp = new(big.Int)
|
||||||
if i < validatorsCount {
|
if i < validatorsCount {
|
||||||
tmp = big.NewInt(2)
|
tmp.Set(intTwo)
|
||||||
|
} else {
|
||||||
|
tmp.Set(intOne)
|
||||||
}
|
}
|
||||||
tmp.Mul(tmp, voterReward)
|
tmp.Mul(tmp, voterReward)
|
||||||
tmp.Div(tmp, cs[i].Votes)
|
tmp.Div(tmp, cs[i].Votes)
|
||||||
|
@ -633,7 +641,7 @@ func (n *NEO) calculateBonus(d dao.DAO, vote *keys.PublicKey, value *big.Int, st
|
||||||
var reward = n.getGASPerVote(d, key, start, end)
|
var reward = n.getGASPerVote(d, key, start, end)
|
||||||
var tmp = new(big.Int).Sub(&reward[1], &reward[0])
|
var tmp = new(big.Int).Sub(&reward[1], &reward[0])
|
||||||
tmp.Mul(tmp, value)
|
tmp.Mul(tmp, value)
|
||||||
tmp.Div(tmp, big.NewInt(voterRewardFactor))
|
tmp.Div(tmp, bigVoterRewardFactor)
|
||||||
tmp.Add(tmp, r)
|
tmp.Add(tmp, r)
|
||||||
return tmp, nil
|
return tmp, nil
|
||||||
}
|
}
|
||||||
|
@ -982,7 +990,7 @@ func (n *NEO) computeCommitteeMembers(bc blockchainer.Blockchainer, d dao.DAO) (
|
||||||
}
|
}
|
||||||
votersCount := bigint.FromBytes(si)
|
votersCount := bigint.FromBytes(si)
|
||||||
// votersCount / totalSupply must be >= 0.2
|
// votersCount / totalSupply must be >= 0.2
|
||||||
votersCount.Mul(votersCount, big.NewInt(effectiveVoterTurnout))
|
votersCount.Mul(votersCount, bigEffectiveVoterTurnout)
|
||||||
_, totalSupply := n.getTotalSupply(d)
|
_, totalSupply := n.getTotalSupply(d)
|
||||||
voterTurnout := votersCount.Div(votersCount, totalSupply)
|
voterTurnout := votersCount.Div(votersCount, totalSupply)
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var intOne = big.NewInt(1)
|
var intOne = big.NewInt(1)
|
||||||
|
var intTwo = big.NewInt(2)
|
||||||
|
|
||||||
func getConvertibleFromDAO(id int32, d dao.DAO, key []byte, conv stackitem.Convertible) error {
|
func getConvertibleFromDAO(id int32, d dao.DAO, key []byte, conv stackitem.Convertible) error {
|
||||||
si := d.GetStorageItem(id, key)
|
si := d.GetStorageItem(id, key)
|
||||||
|
|
|
@ -29,6 +29,9 @@ const SignatureLen = 64
|
||||||
// PublicKeys is a list of public keys.
|
// PublicKeys is a list of public keys.
|
||||||
type PublicKeys []*PublicKey
|
type PublicKeys []*PublicKey
|
||||||
|
|
||||||
|
var big0 = big.NewInt(0)
|
||||||
|
var big3 = big.NewInt(3)
|
||||||
|
|
||||||
func (keys PublicKeys) Len() int { return len(keys) }
|
func (keys PublicKeys) Len() int { return len(keys) }
|
||||||
func (keys PublicKeys) Swap(i, j int) { keys[i], keys[j] = keys[j], keys[i] }
|
func (keys PublicKeys) Swap(i, j int) { keys[i], keys[j] = keys[j], keys[i] }
|
||||||
func (keys PublicKeys) Less(i, j int) bool {
|
func (keys PublicKeys) Less(i, j int) bool {
|
||||||
|
@ -189,12 +192,12 @@ func decodeCompressedY(x *big.Int, ylsb uint, curve elliptic.Curve) (*big.Int, e
|
||||||
var a *big.Int
|
var a *big.Int
|
||||||
switch curve.(type) {
|
switch curve.(type) {
|
||||||
case *btcec.KoblitzCurve:
|
case *btcec.KoblitzCurve:
|
||||||
a = big.NewInt(0)
|
a = big0
|
||||||
default:
|
default:
|
||||||
a = big.NewInt(3)
|
a = big3
|
||||||
}
|
}
|
||||||
cp := curve.Params()
|
cp := curve.Params()
|
||||||
xCubed := new(big.Int).Exp(x, big.NewInt(3), cp.P)
|
xCubed := new(big.Int).Exp(x, big3, cp.P)
|
||||||
aX := new(big.Int).Mul(x, a)
|
aX := new(big.Int).Mul(x, a)
|
||||||
aX.Mod(aX, cp.P)
|
aX.Mod(aX, cp.P)
|
||||||
ySquared := new(big.Int).Sub(xCubed, aX)
|
ySquared := new(big.Int).Sub(xCubed, aX)
|
||||||
|
|
|
@ -15,6 +15,8 @@ const (
|
||||||
wordSizeBytes = bits.UintSize / 8
|
wordSizeBytes = bits.UintSize / 8
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var bigOne = big.NewInt(1)
|
||||||
|
|
||||||
// FromBytesUnsigned converts data in little-endian format to an unsigned integer.
|
// FromBytesUnsigned converts data in little-endian format to an unsigned integer.
|
||||||
func FromBytesUnsigned(data []byte) *big.Int {
|
func FromBytesUnsigned(data []byte) *big.Int {
|
||||||
bs := slice.CopyReverse(data)
|
bs := slice.CopyReverse(data)
|
||||||
|
@ -70,7 +72,7 @@ func FromBytes(data []byte) *big.Int {
|
||||||
n.SetBits(ws)
|
n.SetBits(ws)
|
||||||
n.Neg(n)
|
n.Neg(n)
|
||||||
|
|
||||||
return n.Sub(n, big.NewInt(1))
|
return n.Sub(n, bigOne)
|
||||||
}
|
}
|
||||||
|
|
||||||
return n.SetBits(ws)
|
return n.SetBits(ws)
|
||||||
|
@ -114,7 +116,7 @@ func ToPreallocatedBytes(n *big.Int, data []byte) []byte {
|
||||||
if sign == 1 {
|
if sign == 1 {
|
||||||
ws = n.Bits()
|
ws = n.Bits()
|
||||||
} else {
|
} else {
|
||||||
n1 := new(big.Int).Add(n, big.NewInt(1))
|
n1 := new(big.Int).Add(n, bigOne)
|
||||||
if n1.Sign() == 0 { // n == -1
|
if n1.Sign() == 0 { // n == -1
|
||||||
return append(data, 0xFF)
|
return append(data, 0xFF)
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,8 @@ type VM struct {
|
||||||
invTree *InvocationTree
|
invTree *InvocationTree
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var bigOne = big.NewInt(1)
|
||||||
|
|
||||||
// New returns a new VM object ready to load AVM bytecode scripts.
|
// New returns a new VM object ready to load AVM bytecode scripts.
|
||||||
func New() *VM {
|
func New() *VM {
|
||||||
return NewWithTrigger(trigger.Application)
|
return NewWithTrigger(trigger.Application)
|
||||||
|
@ -889,12 +891,12 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro
|
||||||
|
|
||||||
case opcode.INC:
|
case opcode.INC:
|
||||||
x := v.estack.Pop().BigInt()
|
x := v.estack.Pop().BigInt()
|
||||||
a := new(big.Int).Add(x, big.NewInt(1))
|
a := new(big.Int).Add(x, bigOne)
|
||||||
v.estack.PushItem(stackitem.NewBigInteger(a))
|
v.estack.PushItem(stackitem.NewBigInteger(a))
|
||||||
|
|
||||||
case opcode.DEC:
|
case opcode.DEC:
|
||||||
x := v.estack.Pop().BigInt()
|
x := v.estack.Pop().BigInt()
|
||||||
a := new(big.Int).Sub(x, big.NewInt(1))
|
a := new(big.Int).Sub(x, bigOne)
|
||||||
v.estack.PushItem(stackitem.NewBigInteger(a))
|
v.estack.PushItem(stackitem.NewBigInteger(a))
|
||||||
|
|
||||||
case opcode.ADD:
|
case opcode.ADD:
|
||||||
|
|
Loading…
Reference in a new issue