From 962e37e8939bc59a759c3fe9539c46cb6c59465f Mon Sep 17 00:00:00 2001 From: simlecode Date: Sun, 24 Apr 2022 13:48:07 +0800 Subject: [PATCH] add StateGetNetworkParams api --- api/api_full.go | 3 ++ api/mocks/mock_full.go | 15 +++++++ api/proxy_gen.go | 13 ++++++ api/types.go | 33 +++++++++++++++ api/v0api/full.go | 3 ++ api/v0api/proxy_gen.go | 13 ++++++ api/v0api/v0mocks/mock_full.go | 15 +++++++ build/openrpc/full.json.gz | Bin 27138 -> 27588 bytes build/openrpc/miner.json.gz | Bin 13713 -> 13713 bytes build/openrpc/worker.json.gz | Bin 4614 -> 4614 bytes build/params_2k.go | 16 +++++-- build/params_butterfly.go | 19 ++++++--- build/params_calibnet.go | 17 +++++--- build/params_interop.go | 21 ++++++---- build/params_mainnet.go | 8 ++++ build/params_nerpanet.go | 38 ++++++++++------- build/params_testground.go | 6 +++ documentation/en/api-v0-methods.md | 44 ++++++++++++++++++++ documentation/en/api-v1-unstable-methods.md | 44 ++++++++++++++++++++ node/impl/full/state.go | 37 ++++++++++++++++ 20 files changed, 306 insertions(+), 39 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index bcdfdad1009..2a113dbaff6 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -592,6 +592,9 @@ type FullNode interface { // StateGetRandomnessFromBeacon is used to sample the beacon for randomness. StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read + // StateGetNetworkParams return current network params + StateGetNetworkParams(ctx context.Context) (*NetworkParams, error) //perm:read + // MethodGroup: Msig // The Msig methods are used to interact with multisig wallets on the // filecoin network diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 5db190ba62f..f8ab754ed7a 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -2406,6 +2406,21 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetNetworkParams mocks base method. +func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetNetworkParams", arg0) + ret0, _ := ret[0].(*api.NetworkParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetNetworkParams indicates an expected call of StateGetNetworkParams. +func (mr *MockFullNodeMockRecorder) StateGetNetworkParams(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetNetworkParams", reflect.TypeOf((*MockFullNode)(nil).StateGetNetworkParams), arg0) +} + // StateGetRandomnessFromBeacon mocks base method. func (m *MockFullNode) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 types.TipSetKey) (abi.Randomness, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 300e6755528..7542ac36726 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -352,6 +352,8 @@ type FullNodeStruct struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetNetworkParams func(p0 context.Context) (*NetworkParams, error) `perm:"read"` + StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` @@ -2470,6 +2472,17 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) { + if s.Internal.StateGetNetworkParams == nil { + return nil, ErrNotSupported + } + return s.Internal.StateGetNetworkParams(p0) +} + +func (s *FullNodeStub) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) { + return nil, ErrNotSupported +} + func (s *FullNodeStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { if s.Internal.StateGetRandomnessFromBeacon == nil { return *new(abi.Randomness), ErrNotSupported diff --git a/api/types.go b/api/types.go index 9125744ba3d..d0b7c7cb930 100644 --- a/api/types.go +++ b/api/types.go @@ -11,6 +11,7 @@ import ( "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/ipfs/go-cid" "github.com/ipfs/go-graphsync" @@ -284,3 +285,35 @@ type ExportRef struct { FromLocalCAR string // if specified, get data from a local CARv2 file. DealID retrievalmarket.DealID } + +type NetworkParams struct { + NetworkName dtypes.NetworkName + BlockDelaySecs uint64 + ConsensusMinerMinPower abi.StoragePower + SupportedProofTypes []abi.RegisteredSealProof + PreCommitChallengeDelay abi.ChainEpoch + ForkUpgradeParams ForkUpgradeParams +} + +type ForkUpgradeParams struct { + UpgradeSmokeHeight abi.ChainEpoch + UpgradeBreezeHeight abi.ChainEpoch + UpgradeIgnitionHeight abi.ChainEpoch + UpgradeLiftoffHeight abi.ChainEpoch + UpgradeAssemblyHeight abi.ChainEpoch + UpgradeRefuelHeight abi.ChainEpoch + UpgradeTapeHeight abi.ChainEpoch + UpgradeKumquatHeight abi.ChainEpoch + UpgradePriceListOopsHeight abi.ChainEpoch + BreezeGasTampingDuration abi.ChainEpoch + UpgradeCalicoHeight abi.ChainEpoch + UpgradePersianHeight abi.ChainEpoch + UpgradeOrangeHeight abi.ChainEpoch + UpgradeClausHeight abi.ChainEpoch + UpgradeTrustHeight abi.ChainEpoch + UpgradeNorwegianHeight abi.ChainEpoch + UpgradeTurboHeight abi.ChainEpoch + UpgradeHyperdriveHeight abi.ChainEpoch + UpgradeChocolateHeight abi.ChainEpoch + UpgradeOhSnapHeight abi.ChainEpoch +} diff --git a/api/v0api/full.go b/api/v0api/full.go index b37e89155c5..c1aa69a7764 100644 --- a/api/v0api/full.go +++ b/api/v0api/full.go @@ -604,6 +604,9 @@ type FullNode interface { // StateGetRandomnessFromBeacon is used to sample the beacon for randomness. StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read + // StateGetNetworkParams return current network params + StateGetNetworkParams(ctx context.Context) (*api.NetworkParams, error) //perm:read + // MethodGroup: Msig // The Msig methods are used to interact with multisig wallets on the // filecoin network diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index 49ebad42892..6ac74904f4d 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -267,6 +267,8 @@ type FullNodeStruct struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"` + StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` @@ -1746,6 +1748,17 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) { + if s.Internal.StateGetNetworkParams == nil { + return nil, ErrNotSupported + } + return s.Internal.StateGetNetworkParams(p0) +} + +func (s *FullNodeStub) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) { + return nil, ErrNotSupported +} + func (s *FullNodeStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { if s.Internal.StateGetRandomnessFromBeacon == nil { return *new(abi.Randomness), ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 6cb80d8942b..7301b8aecdc 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -2275,6 +2275,21 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetNetworkParams mocks base method. +func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetNetworkParams", arg0) + ret0, _ := ret[0].(*api.NetworkParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetNetworkParams indicates an expected call of StateGetNetworkParams. +func (mr *MockFullNodeMockRecorder) StateGetNetworkParams(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetNetworkParams", reflect.TypeOf((*MockFullNode)(nil).StateGetNetworkParams), arg0) +} + // StateGetRandomnessFromBeacon mocks base method. func (m *MockFullNode) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 types.TipSetKey) (abi.Randomness, error) { m.ctrl.T.Helper() diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index c27a0fc28a15c9624d615fee00035e4e95dfb909..92731a5f6c7916b672ed8af83b0118ad5784a7c6 100644 GIT binary patch delta 26627 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index f1372a6602ac767fbd6d475f507517321c317932..cbbeec7d1e462377c3359e18e508d684a9c23200 100644 GIT binary patch delta 3497 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 Xs?uh2zxn?F00960NBv9izz+ccSLzKY delta 3496 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 WNSn?5=Kli#0RR6L%_V!l4*>wPSKG1x diff --git a/build/params_2k.go b/build/params_2k.go index aa1beed36a0..60006cede6d 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -53,11 +53,19 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2048) +var MinVerifiedDealSize = abi.NewStoragePower(256) +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1, abi.RegisteredSealProof_StackedDrg8MiBV1) - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) - policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) - policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) getUpgradeHeight := func(ev string, def abi.ChainEpoch) abi.ChainEpoch { hs, found := os.LookupEnv(ev) diff --git a/build/params_butterfly.go b/build/params_butterfly.go index 804bdde93ac..d74e17305e1 100644 --- a/build/params_butterfly.go +++ b/build/params_butterfly.go @@ -44,13 +44,20 @@ const UpgradeChocolateHeight = -17 const UpgradeOhSnapHeight = 240 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2 << 30) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2 << 30)) - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg512MiBV1, - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) SetAddressNetwork(address.Testnet) diff --git a/build/params_calibnet.go b/build/params_calibnet.go index a8f5b472049..5ff8bd85392 100644 --- a/build/params_calibnet.go +++ b/build/params_calibnet.go @@ -57,12 +57,19 @@ const UpgradeChocolateHeight = 312746 // 2022-02-10T19:23:00Z const UpgradeOhSnapHeight = 682006 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(32 << 30) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { - policy.SetConsensusMinerMinPower(abi.NewStoragePower(32 << 30)) - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) SetAddressNetwork(address.Testnet) diff --git a/build/params_interop.go b/build/params_interop.go index a483e7188d5..ad051570c9d 100644 --- a/build/params_interop.go +++ b/build/params_interop.go @@ -53,15 +53,20 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, + abi.RegisteredSealProof_StackedDrg512MiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2048) +var MinVerifiedDealSize = abi.NewStoragePower(256) +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg2KiBV1, - abi.RegisteredSealProof_StackedDrg8MiBV1, - abi.RegisteredSealProof_StackedDrg512MiBV1, - ) - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) - policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) - policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) getUpgradeHeight := func(ev string, def abi.ChainEpoch) abi.ChainEpoch { hs, found := os.LookupEnv(ev) diff --git a/build/params_mainnet.go b/build/params_mainnet.go index 0a9f6e77552..72e25f2fb49 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -70,6 +70,14 @@ const UpgradeChocolateHeight = 1231620 // 2022-03-01T15:00:00Z var UpgradeOhSnapHeight = abi.ChainEpoch(1594680) +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(10 << 40) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { if os.Getenv("LOTUS_USE_TEST_ADDRESSES") != "1" { SetAddressNetwork(address.Mainnet) diff --git a/build/params_nerpanet.go b/build/params_nerpanet.go index 0e2913adcab..4621a727192 100644 --- a/build/params_nerpanet.go +++ b/build/params_nerpanet.go @@ -50,23 +50,29 @@ const UpgradeHyperdriveHeight = 379178 const UpgradeChocolateHeight = 999999999 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} + +// Minimum block production power is set to 4 TiB +// Rationale is to discourage small-scale miners from trying to take over the network +// One needs to invest in ~2.3x the compute to break consensus, making it not worth it +// +// DOWNSIDE: the fake-seals need to be kept alive/protected, otherwise network will seize +// +var ConsensusMinerMinPower = abi.NewStoragePower(4 << 40) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) + +// Lower the most time-consuming parts of PoRep +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - // Minimum block production power is set to 4 TiB - // Rationale is to discourage small-scale miners from trying to take over the network - // One needs to invest in ~2.3x the compute to break consensus, making it not worth it - // - // DOWNSIDE: the fake-seals need to be kept alive/protected, otherwise network will seize - // - policy.SetConsensusMinerMinPower(abi.NewStoragePower(4 << 40)) - - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg512MiBV1, - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) - - // Lower the most time-consuming parts of PoRep - policy.SetPreCommitChallengeDelay(10) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) // TODO - make this a variable //miner.WPoStChallengeLookback = abi.ChainEpoch(2) diff --git a/build/params_testground.go b/build/params_testground.go index 41c46d41edf..46e90f49472 100644 --- a/build/params_testground.go +++ b/build/params_testground.go @@ -33,6 +33,12 @@ var ( MinimumBaseFee = int64(100) BlockDelaySecs = uint64(builtin2.EpochDurationSeconds) PropagationDelaySecs = uint64(6) + SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, + } + ConsensusMinerMinPower = abi.NewStoragePower(10 << 40) + PreCommitChallengeDelay = abi.ChainEpoch(150) AllowableClockDriftSecs = uint64(1) diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 6973a665100..6f3e5c8eee9 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -165,6 +165,7 @@ * [StateDealProviderCollateralBounds](#StateDealProviderCollateralBounds) * [StateDecodeParams](#StateDecodeParams) * [StateGetActor](#StateGetActor) + * [StateGetNetworkParams](#StateGetNetworkParams) * [StateGetRandomnessFromBeacon](#StateGetRandomnessFromBeacon) * [StateGetRandomnessFromTickets](#StateGetRandomnessFromTickets) * [StateGetReceipt](#StateGetReceipt) @@ -5185,6 +5186,49 @@ Response: } ``` +### StateGetNetworkParams +StateGetNetworkParams return current network params + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "NetworkName": "lotus", + "BlockDelaySecs": 42, + "ConsensusMinerMinPower": "0", + "SupportedProofTypes": [ + 8 + ], + "PreCommitChallengeDelay": 10101, + "ForkUpgradeParams": { + "UpgradeSmokeHeight": 10101, + "UpgradeBreezeHeight": 10101, + "UpgradeIgnitionHeight": 10101, + "UpgradeLiftoffHeight": 10101, + "UpgradeAssemblyHeight": 10101, + "UpgradeRefuelHeight": 10101, + "UpgradeTapeHeight": 10101, + "UpgradeKumquatHeight": 10101, + "UpgradePriceListOopsHeight": 10101, + "BreezeGasTampingDuration": 10101, + "UpgradeCalicoHeight": 10101, + "UpgradePersianHeight": 10101, + "UpgradeOrangeHeight": 10101, + "UpgradeClausHeight": 10101, + "UpgradeTrustHeight": 10101, + "UpgradeNorwegianHeight": 10101, + "UpgradeTurboHeight": 10101, + "UpgradeHyperdriveHeight": 10101, + "UpgradeChocolateHeight": 10101, + "UpgradeOhSnapHeight": 10101 + } +} +``` + ### StateGetRandomnessFromBeacon StateGetRandomnessFromBeacon is used to sample the beacon for randomness. diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index 5d4dab5339c..b08c8734811 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -175,6 +175,7 @@ * [StateDecodeParams](#StateDecodeParams) * [StateEncodeParams](#StateEncodeParams) * [StateGetActor](#StateGetActor) + * [StateGetNetworkParams](#StateGetNetworkParams) * [StateGetRandomnessFromBeacon](#StateGetRandomnessFromBeacon) * [StateGetRandomnessFromTickets](#StateGetRandomnessFromTickets) * [StateListActors](#StateListActors) @@ -5642,6 +5643,49 @@ Response: } ``` +### StateGetNetworkParams +StateGetNetworkParams return current network params + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "NetworkName": "lotus", + "BlockDelaySecs": 42, + "ConsensusMinerMinPower": "0", + "SupportedProofTypes": [ + 8 + ], + "PreCommitChallengeDelay": 10101, + "ForkUpgradeParams": { + "UpgradeSmokeHeight": 10101, + "UpgradeBreezeHeight": 10101, + "UpgradeIgnitionHeight": 10101, + "UpgradeLiftoffHeight": 10101, + "UpgradeAssemblyHeight": 10101, + "UpgradeRefuelHeight": 10101, + "UpgradeTapeHeight": 10101, + "UpgradeKumquatHeight": 10101, + "UpgradePriceListOopsHeight": 10101, + "BreezeGasTampingDuration": 10101, + "UpgradeCalicoHeight": 10101, + "UpgradePersianHeight": 10101, + "UpgradeOrangeHeight": 10101, + "UpgradeClausHeight": 10101, + "UpgradeTrustHeight": 10101, + "UpgradeNorwegianHeight": 10101, + "UpgradeTurboHeight": 10101, + "UpgradeHyperdriveHeight": 10101, + "UpgradeChocolateHeight": 10101, + "UpgradeOhSnapHeight": 10101 + } +} +``` + ### StateGetRandomnessFromBeacon StateGetRandomnessFromBeacon is used to sample the beacon for randomness. diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 51cb0dfbc3b..648b3e76e11 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -19,6 +19,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper" "github.com/filecoin-project/lotus/api" @@ -1438,3 +1439,39 @@ func (a *StateAPI) StateGetRandomnessFromBeacon(ctx context.Context, personaliza return a.StateManager.GetRandomnessFromBeacon(ctx, personalization, randEpoch, entropy, tsk) } + +func (a *StateAPI) StateGetNetworkParams(ctx context.Context) (*api.NetworkParams, error) { + networkName, err := a.StateNetworkName(ctx) + if err != nil { + return nil, err + } + + return &api.NetworkParams{ + NetworkName: networkName, + BlockDelaySecs: build.BlockDelaySecs, + ConsensusMinerMinPower: build.ConsensusMinerMinPower, + SupportedProofTypes: build.SupportedProofTypes, + PreCommitChallengeDelay: build.PreCommitChallengeDelay, + ForkUpgradeParams: api.ForkUpgradeParams{ + UpgradeSmokeHeight: build.UpgradeSmokeHeight, + UpgradeBreezeHeight: build.UpgradeBreezeHeight, + UpgradeIgnitionHeight: build.UpgradeIgnitionHeight, + UpgradeLiftoffHeight: build.UpgradeLiftoffHeight, + UpgradeAssemblyHeight: build.UpgradeAssemblyHeight, + UpgradeRefuelHeight: build.UpgradeRefuelHeight, + UpgradeTapeHeight: build.UpgradeTapeHeight, + UpgradeKumquatHeight: build.UpgradeKumquatHeight, + BreezeGasTampingDuration: build.BreezeGasTampingDuration, + UpgradeCalicoHeight: build.UpgradeCalicoHeight, + UpgradePersianHeight: build.UpgradePersianHeight, + UpgradeOrangeHeight: build.UpgradeOrangeHeight, + UpgradeClausHeight: build.UpgradeClausHeight, + UpgradeTrustHeight: build.UpgradeTrustHeight, + UpgradeNorwegianHeight: build.UpgradeNorwegianHeight, + UpgradeTurboHeight: build.UpgradeTurboHeight, + UpgradeHyperdriveHeight: build.UpgradeHyperdriveHeight, + UpgradeChocolateHeight: build.UpgradeChocolateHeight, + UpgradeOhSnapHeight: build.UpgradeOhSnapHeight, + }, + }, nil +}