Merge pull request #6347 from filecoin-project/feat/agg-gas-price
Introduce gas prices for aggregate verifications
This commit is contained in:
commit
dd79c2c41a
@ -160,8 +160,35 @@ var prices = map[abi.ChainEpoch]Pricelist{
|
|||||||
|
|
||||||
hashingBase: 31355,
|
hashingBase: 31355,
|
||||||
computeUnsealedSectorCidBase: 98647,
|
computeUnsealedSectorCidBase: 98647,
|
||||||
verifySealBase: 2000, // TODO gas , it VerifySeal syscall is not used
|
verifySealBase: 2000, // TODO gas, it VerifySeal syscall is not used
|
||||||
verifyAggregateSealBase: 400_000_000, // TODO (~40ms, I think)
|
|
||||||
|
verifyAggregateSealPer: map[abi.RegisteredSealProof]int64{
|
||||||
|
abi.RegisteredSealProof_StackedDrg32GiBV1_1: 449900,
|
||||||
|
abi.RegisteredSealProof_StackedDrg64GiBV1_1: 359272,
|
||||||
|
},
|
||||||
|
verifyAggregateSealSteps: map[abi.RegisteredSealProof]stepCost{
|
||||||
|
abi.RegisteredSealProof_StackedDrg32GiBV1_1: {
|
||||||
|
{4, 103994170},
|
||||||
|
{7, 112356810},
|
||||||
|
{13, 122912610},
|
||||||
|
{26, 137559930},
|
||||||
|
{52, 162039100},
|
||||||
|
{103, 210960780},
|
||||||
|
{205, 318351180},
|
||||||
|
{410, 528274980},
|
||||||
|
},
|
||||||
|
abi.RegisteredSealProof_StackedDrg64GiBV1_1: {
|
||||||
|
{4, 102581240},
|
||||||
|
{7, 110803030},
|
||||||
|
{13, 120803700},
|
||||||
|
{26, 134642130},
|
||||||
|
{52, 157357890},
|
||||||
|
{103, 203017690},
|
||||||
|
{205, 304253590},
|
||||||
|
{410, 509880640},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
verifyPostLookup: map[abi.RegisteredPoStProof]scalingCost{
|
verifyPostLookup: map[abi.RegisteredPoStProof]scalingCost{
|
||||||
abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: {
|
abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: {
|
||||||
flat: 117680921,
|
flat: 117680921,
|
||||||
|
@ -18,6 +18,28 @@ type scalingCost struct {
|
|||||||
scale int64
|
scale int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type stepCost []step
|
||||||
|
|
||||||
|
type step struct {
|
||||||
|
start int64
|
||||||
|
cost int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sc stepCost) Lookup(x int64) int64 {
|
||||||
|
i := 0
|
||||||
|
for ; i < len(sc); i++ {
|
||||||
|
if sc[i].start > x {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i-- // look at previous item
|
||||||
|
if i < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return sc[i].cost
|
||||||
|
}
|
||||||
|
|
||||||
type pricelistV0 struct {
|
type pricelistV0 struct {
|
||||||
computeGasMulti int64
|
computeGasMulti int64
|
||||||
storageGasMulti int64
|
storageGasMulti int64
|
||||||
@ -93,9 +115,12 @@ type pricelistV0 struct {
|
|||||||
computeUnsealedSectorCidBase int64
|
computeUnsealedSectorCidBase int64
|
||||||
verifySealBase int64
|
verifySealBase int64
|
||||||
verifyAggregateSealBase int64
|
verifyAggregateSealBase int64
|
||||||
verifyPostLookup map[abi.RegisteredPoStProof]scalingCost
|
verifyAggregateSealPer map[abi.RegisteredSealProof]int64
|
||||||
verifyPostDiscount bool
|
verifyAggregateSealSteps map[abi.RegisteredSealProof]stepCost
|
||||||
verifyConsensusFault int64
|
|
||||||
|
verifyPostLookup map[abi.RegisteredPoStProof]scalingCost
|
||||||
|
verifyPostDiscount bool
|
||||||
|
verifyConsensusFault int64
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ Pricelist = (*pricelistV0)(nil)
|
var _ Pricelist = (*pricelistV0)(nil)
|
||||||
@ -189,8 +214,18 @@ func (pl *pricelistV0) OnVerifySeal(info proof2.SealVerifyInfo) GasCharge {
|
|||||||
|
|
||||||
// OnVerifyAggregateSeals
|
// OnVerifyAggregateSeals
|
||||||
func (pl *pricelistV0) OnVerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) GasCharge {
|
func (pl *pricelistV0) OnVerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) GasCharge {
|
||||||
// TODO: this needs more cost tunning
|
proofType := aggregate.SealProof
|
||||||
return newGasCharge("OnVerifyAggregateSeals", pl.verifyAggregateSealBase, 0)
|
perProof, ok := pl.verifyAggregateSealPer[proofType]
|
||||||
|
if !ok {
|
||||||
|
perProof = pl.verifyAggregateSealPer[abi.RegisteredSealProof_StackedDrg32GiBV1_1]
|
||||||
|
}
|
||||||
|
|
||||||
|
step, ok := pl.verifyAggregateSealSteps[proofType]
|
||||||
|
if !ok {
|
||||||
|
step = pl.verifyAggregateSealSteps[abi.RegisteredSealProof_StackedDrg32GiBV1_1]
|
||||||
|
}
|
||||||
|
num := int64(len(aggregate.Infos))
|
||||||
|
return newGasCharge("OnVerifyAggregateSeals", perProof*num+step.Lookup(num), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnVerifyPost
|
// OnVerifyPost
|
||||||
|
32
chain/vm/gas_v0_test.go
Normal file
32
chain/vm/gas_v0_test.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package vm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestStepGasCost(t *testing.T) {
|
||||||
|
s := stepCost{
|
||||||
|
{4, 103994170},
|
||||||
|
{7, 112356810},
|
||||||
|
{13, 122912610},
|
||||||
|
{26, 137559930},
|
||||||
|
{52, 162039100},
|
||||||
|
{103, 210960780},
|
||||||
|
{205, 318351180},
|
||||||
|
{410, 528274980},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.EqualValues(t, 0, s.Lookup(0))
|
||||||
|
assert.EqualValues(t, 0, s.Lookup(3))
|
||||||
|
assert.EqualValues(t, 103994170, s.Lookup(4))
|
||||||
|
assert.EqualValues(t, 103994170, s.Lookup(6))
|
||||||
|
assert.EqualValues(t, 112356810, s.Lookup(7))
|
||||||
|
assert.EqualValues(t, 210960780, s.Lookup(103))
|
||||||
|
assert.EqualValues(t, 210960780, s.Lookup(204))
|
||||||
|
assert.EqualValues(t, 318351180, s.Lookup(205))
|
||||||
|
assert.EqualValues(t, 318351180, s.Lookup(409))
|
||||||
|
assert.EqualValues(t, 528274980, s.Lookup(410))
|
||||||
|
assert.EqualValues(t, 528274980, s.Lookup(10000000000))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user