working on correct block reward
This commit is contained in:
parent
78fa12d2b9
commit
47d12417b3
@ -28,6 +28,12 @@ const PerCapitaCollateralProportion = 5
|
|||||||
const CollateralPrecision = 100
|
const CollateralPrecision = 100
|
||||||
|
|
||||||
const TotalFilecoin = 2000000000
|
const TotalFilecoin = 2000000000
|
||||||
|
const MiningRewardTotal = 1400000000
|
||||||
const FilecoinPrecision = 1000000000000000000
|
const FilecoinPrecision = 1000000000000000000
|
||||||
|
|
||||||
|
// six years
|
||||||
|
const HalvingPeriodBlocks = 6 * 365 * 24 * 60 * 2
|
||||||
|
|
||||||
|
const AdjustmentPeriod = 7 * 24 * 60 * 2
|
||||||
|
|
||||||
// TODO: Move other important consts here
|
// TODO: Move other important consts here
|
||||||
|
@ -44,7 +44,7 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w *wallet.Wal
|
|||||||
}
|
}
|
||||||
|
|
||||||
// apply miner reward
|
// apply miner reward
|
||||||
if err := vmi.TransferFunds(actors.NetworkAddress, owner, vm.MiningRewardForBlock(parents)); err != nil {
|
if err := vmi.TransferFunds(actors.NetworkAddress, owner, vm.MiningRewardForBlock(height)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) err
|
|||||||
return xerrors.Errorf("getting miner owner for block miner failed: %w", err)
|
return xerrors.Errorf("getting miner owner for block miner failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := vmi.TransferFunds(actors.NetworkAddress, owner, vm.MiningRewardForBlock(baseTs)); err != nil {
|
if err := vmi.TransferFunds(actors.NetworkAddress, owner, vm.MiningRewardForBlock(h.Height)); err != nil {
|
||||||
return xerrors.Errorf("fund transfer failed: %w", err)
|
return xerrors.Errorf("fund transfer failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,10 @@ package vm
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-lotus/build"
|
||||||
"github.com/filecoin-project/go-lotus/chain/actors"
|
"github.com/filecoin-project/go-lotus/chain/actors"
|
||||||
"github.com/filecoin-project/go-lotus/chain/actors/aerrors"
|
"github.com/filecoin-project/go-lotus/chain/actors/aerrors"
|
||||||
"github.com/filecoin-project/go-lotus/chain/address"
|
"github.com/filecoin-project/go-lotus/chain/address"
|
||||||
@ -631,6 +634,18 @@ func DepositFunds(act *types.Actor, amt types.BigInt) {
|
|||||||
act.Balance = types.BigAdd(act.Balance, amt)
|
act.Balance = types.BigAdd(act.Balance, amt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func MiningRewardForBlock(base *types.TipSet) types.BigInt {
|
func MiningRewardForBlock(height uint64) types.BigInt {
|
||||||
return types.NewInt(10000)
|
|
||||||
|
//decay := e^(ln(0.5) / (HalvingPeriodBlocks / AdjustmentPeriod)
|
||||||
|
decay := 0.9977869135615522
|
||||||
|
|
||||||
|
totalMiningReward := types.FromFil(build.MiningRewardTotal)
|
||||||
|
|
||||||
|
dval := big.NewFloat(math.Pow(decay, float64(uint64(height/build.AdjustmentPeriod))))
|
||||||
|
|
||||||
|
iv := big.NewFloat(0).Mul(big.NewFloat(0).SetInt(totalMiningReward.Int), big.NewFloat(1-decay))
|
||||||
|
|
||||||
|
reward, _ := iv.Mul(iv, dval).Int(nil)
|
||||||
|
|
||||||
|
return types.BigInt{reward}
|
||||||
}
|
}
|
||||||
|
22
chain/vm/vm_test.go
Normal file
22
chain/vm/vm_test.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package vm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-lotus/build"
|
||||||
|
"github.com/filecoin-project/go-lotus/chain/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestBlockReward(t *testing.T) {
|
||||||
|
sum := types.NewInt(0)
|
||||||
|
for i := 0; i < 500000000; i += 60 {
|
||||||
|
sum = types.BigAdd(sum, MiningRewardForBlock(uint64(i)))
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = types.BigMul(sum, types.NewInt(60))
|
||||||
|
|
||||||
|
fmt.Println(sum)
|
||||||
|
|
||||||
|
fmt.Println(types.BigDiv(sum, types.NewInt(build.FilecoinPrecision)))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user