feat: ec: Integrate Fast Finality for Filecoin (#12119)

Integrate F3 into Lotus

Signed-off-by: Jakub Sztandera <oss@kubuxu.com>
Co-authored-by: Jennifer Wang <jiayingw703@gmail.com>
Co-authored-by: Masih H. Derkani <m@derkani.org>
Co-authored-by: Steven Allen <steven@stebalien.com>
This commit is contained in:
Jakub Sztandera 2024-06-28 19:10:58 +02:00 committed by Aarsh Shah
parent f4a0b35393
commit ac87fce514
27 changed files with 1630 additions and 462 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-f3/certs"
"github.com/filecoin-project/go-jsonrpc"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
@ -859,6 +860,18 @@ type FullNode interface {
// Note: this API is only available via websocket connections.
// This is an EXPERIMENTAL API and may be subject to change.
SubscribeActorEventsRaw(ctx context.Context, filter *types.ActorEventFilter) (<-chan *types.ActorEvent, error) //perm:read
// F3Participate should be called by a miner node to participate in signing F3 consensus.
// The address should be of type ID
// The returned channel will never be closed by the F3
// If it is closed without the context being cancelled, the caller should retry.
// The values returned on the channel will inform the caller about participation
// Empty strings will be sent if participation succeeded, non-empty strings explain possible errors.
F3Participate(ctx context.Context, minerID address.Address) (<-chan string, error) //perm:admin
// F3GetCertificate returns a finality certificate at given instance number
F3GetCertificate(ctx context.Context, instance uint64) (*certs.FinalityCertificate, error) //perm:read
// F3GetLatestCertificate returns the latest finality certificate
F3GetLatestCertificate(ctx context.Context) (*certs.FinalityCertificate, error) //perm:read
}
// reverse interface to the client, called after EthSubscribe

View File

@ -25,6 +25,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-f3/certs"
"github.com/filecoin-project/go-jsonrpc/auth"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
@ -399,6 +400,7 @@ func init() {
FromHeight: epochPtr(1010),
ToHeight: epochPtr(1020),
})
addExample(&certs.FinalityCertificate{})
}
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {

View File

@ -21,6 +21,7 @@ import (
address "github.com/filecoin-project/go-address"
bitfield "github.com/filecoin-project/go-bitfield"
certs "github.com/filecoin-project/go-f3/certs"
jsonrpc "github.com/filecoin-project/go-jsonrpc"
auth "github.com/filecoin-project/go-jsonrpc/auth"
abi "github.com/filecoin-project/go-state-types/abi"
@ -1152,6 +1153,51 @@ func (mr *MockFullNodeMockRecorder) EthUnsubscribe(arg0, arg1 interface{}) *gomo
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthUnsubscribe", reflect.TypeOf((*MockFullNode)(nil).EthUnsubscribe), arg0, arg1)
}
// F3GetCertificate mocks base method.
func (m *MockFullNode) F3GetCertificate(arg0 context.Context, arg1 uint64) (*certs.FinalityCertificate, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "F3GetCertificate", arg0, arg1)
ret0, _ := ret[0].(*certs.FinalityCertificate)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// F3GetCertificate indicates an expected call of F3GetCertificate.
func (mr *MockFullNodeMockRecorder) F3GetCertificate(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "F3GetCertificate", reflect.TypeOf((*MockFullNode)(nil).F3GetCertificate), arg0, arg1)
}
// F3GetLatestCertificate mocks base method.
func (m *MockFullNode) F3GetLatestCertificate(arg0 context.Context) (*certs.FinalityCertificate, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "F3GetLatestCertificate", arg0)
ret0, _ := ret[0].(*certs.FinalityCertificate)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// F3GetLatestCertificate indicates an expected call of F3GetLatestCertificate.
func (mr *MockFullNodeMockRecorder) F3GetLatestCertificate(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "F3GetLatestCertificate", reflect.TypeOf((*MockFullNode)(nil).F3GetLatestCertificate), arg0)
}
// F3Participate mocks base method.
func (m *MockFullNode) F3Participate(arg0 context.Context, arg1 address.Address) (<-chan string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "F3Participate", arg0, arg1)
ret0, _ := ret[0].(<-chan string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// F3Participate indicates an expected call of F3Participate.
func (mr *MockFullNodeMockRecorder) F3Participate(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "F3Participate", reflect.TypeOf((*MockFullNode)(nil).F3Participate), arg0, arg1)
}
// FilecoinAddressToEthAddress mocks base method.
func (m *MockFullNode) FilecoinAddressToEthAddress(arg0 context.Context, arg1 address.Address) (ethtypes.EthAddress, error) {
m.ctrl.T.Helper()

View File

@ -18,6 +18,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-f3/certs"
"github.com/filecoin-project/go-jsonrpc"
"github.com/filecoin-project/go-jsonrpc/auth"
"github.com/filecoin-project/go-state-types/abi"
@ -249,6 +250,12 @@ type FullNodeMethods struct {
EthUnsubscribe func(p0 context.Context, p1 ethtypes.EthSubscriptionID) (bool, error) `perm:"read"`
F3GetCertificate func(p0 context.Context, p1 uint64) (*certs.FinalityCertificate, error) `perm:"read"`
F3GetLatestCertificate func(p0 context.Context) (*certs.FinalityCertificate, error) `perm:"read"`
F3Participate func(p0 context.Context, p1 address.Address) (<-chan string, error) `perm:"admin"`
FilecoinAddressToEthAddress func(p0 context.Context, p1 address.Address) (ethtypes.EthAddress, error) `perm:"read"`
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
@ -2063,6 +2070,39 @@ func (s *FullNodeStub) EthUnsubscribe(p0 context.Context, p1 ethtypes.EthSubscri
return false, ErrNotSupported
}
func (s *FullNodeStruct) F3GetCertificate(p0 context.Context, p1 uint64) (*certs.FinalityCertificate, error) {
if s.Internal.F3GetCertificate == nil {
return nil, ErrNotSupported
}
return s.Internal.F3GetCertificate(p0, p1)
}
func (s *FullNodeStub) F3GetCertificate(p0 context.Context, p1 uint64) (*certs.FinalityCertificate, error) {
return nil, ErrNotSupported
}
func (s *FullNodeStruct) F3GetLatestCertificate(p0 context.Context) (*certs.FinalityCertificate, error) {
if s.Internal.F3GetLatestCertificate == nil {
return nil, ErrNotSupported
}
return s.Internal.F3GetLatestCertificate(p0)
}
func (s *FullNodeStub) F3GetLatestCertificate(p0 context.Context) (*certs.FinalityCertificate, error) {
return nil, ErrNotSupported
}
func (s *FullNodeStruct) F3Participate(p0 context.Context, p1 address.Address) (<-chan string, error) {
if s.Internal.F3Participate == nil {
return nil, ErrNotSupported
}
return s.Internal.F3Participate(p0, p1)
}
func (s *FullNodeStub) F3Participate(p0 context.Context, p1 address.Address) (<-chan string, error) {
return nil, ErrNotSupported
}
func (s *FullNodeStruct) FilecoinAddressToEthAddress(p0 context.Context, p1 address.Address) (ethtypes.EthAddress, error) {
if s.Internal.FilecoinAddressToEthAddress == nil {
return *new(ethtypes.EthAddress), ErrNotSupported

File diff suppressed because it is too large Load Diff

View File

@ -242,7 +242,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3771"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3811"
}
},
{
@ -473,7 +473,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3782"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3822"
}
},
{
@ -572,7 +572,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3793"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3833"
}
},
{
@ -604,7 +604,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3804"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3844"
}
},
{
@ -710,7 +710,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3815"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3855"
}
},
{
@ -803,7 +803,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3826"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3866"
}
},
{
@ -887,7 +887,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3837"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3877"
}
},
{
@ -987,7 +987,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3848"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3888"
}
},
{
@ -1043,7 +1043,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3859"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3899"
}
},
{
@ -1116,7 +1116,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3870"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3910"
}
},
{
@ -1189,7 +1189,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3881"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3921"
}
},
{
@ -1236,7 +1236,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3892"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3932"
}
},
{
@ -1268,7 +1268,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3903"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3943"
}
},
{
@ -1305,7 +1305,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3925"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3965"
}
},
{
@ -1352,7 +1352,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3936"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3976"
}
},
{
@ -1392,7 +1392,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3947"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3987"
}
},
{
@ -1439,7 +1439,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3958"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3998"
}
},
{
@ -1494,7 +1494,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3969"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4009"
}
},
{
@ -1523,7 +1523,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3980"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4020"
}
},
{
@ -1660,7 +1660,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L3991"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4031"
}
},
{
@ -1689,7 +1689,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4002"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4042"
}
},
{
@ -1743,7 +1743,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4013"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4053"
}
},
{
@ -1834,7 +1834,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4024"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4064"
}
},
{
@ -1862,7 +1862,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4035"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4075"
}
},
{
@ -1952,7 +1952,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4046"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4086"
}
},
{
@ -2208,7 +2208,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4057"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4097"
}
},
{
@ -2453,7 +2453,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4068"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4108"
}
},
{
@ -2509,7 +2509,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4079"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4119"
}
},
{
@ -2556,7 +2556,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4090"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4130"
}
},
{
@ -2654,7 +2654,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4101"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4141"
}
},
{
@ -2720,7 +2720,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4112"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4152"
}
},
{
@ -2786,7 +2786,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4123"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4163"
}
},
{
@ -2895,7 +2895,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4134"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4174"
}
},
{
@ -2953,7 +2953,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4145"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4185"
}
},
{
@ -3075,7 +3075,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4156"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4196"
}
},
{
@ -3267,7 +3267,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4167"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4207"
}
},
{
@ -3476,7 +3476,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4178"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4218"
}
},
{
@ -3567,7 +3567,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4189"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4229"
}
},
{
@ -3625,7 +3625,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4200"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4240"
}
},
{
@ -3883,7 +3883,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4211"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4251"
}
},
{
@ -4158,7 +4158,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4222"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4262"
}
},
{
@ -4186,7 +4186,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4233"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4273"
}
},
{
@ -4224,7 +4224,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4244"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4284"
}
},
{
@ -4332,7 +4332,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4255"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4295"
}
},
{
@ -4370,7 +4370,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4266"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4306"
}
},
{
@ -4399,7 +4399,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4277"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4317"
}
},
{
@ -4462,7 +4462,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4288"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4328"
}
},
{
@ -4525,7 +4525,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4299"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4339"
}
},
{
@ -4570,7 +4570,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4310"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4350"
}
},
{
@ -4692,7 +4692,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4321"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4361"
}
},
{
@ -4847,7 +4847,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4332"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4372"
}
},
{
@ -4969,7 +4969,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4343"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4383"
}
},
{
@ -5023,7 +5023,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4354"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4394"
}
},
{
@ -5077,7 +5077,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4365"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4405"
}
},
{
@ -5132,7 +5132,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4376"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4416"
}
},
{
@ -5234,7 +5234,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4387"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4427"
}
},
{
@ -5457,7 +5457,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4398"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4438"
}
},
{
@ -5640,7 +5640,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4409"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4449"
}
},
{
@ -5834,7 +5834,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4420"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4460"
}
},
{
@ -5880,7 +5880,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4431"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4471"
}
},
{
@ -6030,7 +6030,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4442"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4482"
}
},
{
@ -6167,7 +6167,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4453"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4493"
}
},
{
@ -6235,7 +6235,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4464"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4504"
}
},
{
@ -6352,7 +6352,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4475"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4515"
}
},
{
@ -6443,7 +6443,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4486"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4526"
}
},
{
@ -6529,7 +6529,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4497"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4537"
}
},
{
@ -6556,7 +6556,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4508"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4548"
}
},
{
@ -6583,7 +6583,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4519"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4559"
}
},
{
@ -6651,7 +6651,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4530"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4570"
}
},
{
@ -7157,7 +7157,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4541"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4581"
}
},
{
@ -7254,7 +7254,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4552"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4592"
}
},
{
@ -7354,7 +7354,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4563"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4603"
}
},
{
@ -7454,7 +7454,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4574"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4614"
}
},
{
@ -7579,7 +7579,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4585"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4625"
}
},
{
@ -7688,7 +7688,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4596"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4636"
}
},
{
@ -7791,7 +7791,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4607"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4647"
}
},
{
@ -7921,7 +7921,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4618"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4658"
}
},
{
@ -8028,7 +8028,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4629"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4669"
}
},
{
@ -8089,7 +8089,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4640"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4680"
}
},
{
@ -8157,7 +8157,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4651"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4691"
}
},
{
@ -8238,7 +8238,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4662"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4702"
}
},
{
@ -8402,7 +8402,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4673"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4713"
}
},
{
@ -8495,7 +8495,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4684"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4724"
}
},
{
@ -8696,7 +8696,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4695"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4735"
}
},
{
@ -8807,7 +8807,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4706"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4746"
}
},
{
@ -8938,7 +8938,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4717"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4757"
}
},
{
@ -9024,7 +9024,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4728"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4768"
}
},
{
@ -9051,7 +9051,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4739"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4779"
}
},
{
@ -9104,7 +9104,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4750"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4790"
}
},
{
@ -9192,7 +9192,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4761"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4801"
}
},
{
@ -9643,7 +9643,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4772"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4812"
}
},
{
@ -9810,7 +9810,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4783"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4823"
}
},
{
@ -9983,7 +9983,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4794"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4834"
}
},
{
@ -10051,7 +10051,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4805"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4845"
}
},
{
@ -10119,7 +10119,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4816"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4856"
}
},
{
@ -10280,7 +10280,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4827"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4867"
}
},
{
@ -10325,7 +10325,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4849"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4889"
}
},
{
@ -10370,7 +10370,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4860"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4900"
}
},
{
@ -10397,7 +10397,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4871"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L4911"
}
}
]

View File

@ -30,7 +30,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5157"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5197"
}
},
{
@ -109,7 +109,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5168"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5208"
}
},
{
@ -155,7 +155,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5179"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5219"
}
},
{
@ -203,7 +203,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5190"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5230"
}
},
{
@ -251,7 +251,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5201"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5241"
}
},
{
@ -354,7 +354,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5212"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5252"
}
},
{
@ -428,7 +428,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5223"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5263"
}
},
{
@ -591,7 +591,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5234"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5274"
}
},
{
@ -742,7 +742,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5245"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5285"
}
},
{
@ -781,7 +781,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5256"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5296"
}
},
{
@ -913,7 +913,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5267"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5307"
}
},
{
@ -945,7 +945,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5278"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5318"
}
},
{
@ -986,7 +986,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5289"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5329"
}
},
{
@ -1054,7 +1054,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5300"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5340"
}
},
{
@ -1185,7 +1185,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5311"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5351"
}
},
{
@ -1316,7 +1316,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5322"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5362"
}
},
{
@ -1416,7 +1416,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5333"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5373"
}
},
{
@ -1516,7 +1516,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5344"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5384"
}
},
{
@ -1616,7 +1616,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5355"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5395"
}
},
{
@ -1716,7 +1716,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5366"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5406"
}
},
{
@ -1816,7 +1816,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5377"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5417"
}
},
{
@ -1916,7 +1916,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5388"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5428"
}
},
{
@ -2040,7 +2040,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5399"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5439"
}
},
{
@ -2164,7 +2164,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5410"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5450"
}
},
{
@ -2279,7 +2279,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5421"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5461"
}
},
{
@ -2379,7 +2379,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5432"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5472"
}
},
{
@ -2512,7 +2512,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5443"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5483"
}
},
{
@ -2636,7 +2636,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5454"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5494"
}
},
{
@ -2760,7 +2760,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5465"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5505"
}
},
{
@ -2884,7 +2884,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5476"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5516"
}
},
{
@ -3017,7 +3017,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5487"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5527"
}
},
{
@ -3117,7 +3117,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5498"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5538"
}
},
{
@ -3157,7 +3157,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5509"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5549"
}
},
{
@ -3229,7 +3229,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5520"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5560"
}
},
{
@ -3279,7 +3279,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5531"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5571"
}
},
{
@ -3323,7 +3323,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5542"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5582"
}
},
{
@ -3364,7 +3364,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5553"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5593"
}
},
{
@ -3608,7 +3608,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5564"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5604"
}
},
{
@ -3682,7 +3682,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5575"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5615"
}
},
{
@ -3732,7 +3732,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5586"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5626"
}
},
{
@ -3761,7 +3761,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5597"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5637"
}
},
{
@ -3790,7 +3790,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5608"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5648"
}
},
{
@ -3846,7 +3846,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5619"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5659"
}
},
{
@ -3869,7 +3869,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5630"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5670"
}
},
{
@ -3929,7 +3929,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5641"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5681"
}
},
{
@ -3968,7 +3968,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5652"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5692"
}
},
{
@ -4008,7 +4008,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5663"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5703"
}
},
{
@ -4081,7 +4081,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5674"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5714"
}
},
{
@ -4145,7 +4145,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5685"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5725"
}
},
{
@ -4208,7 +4208,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5696"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5736"
}
},
{
@ -4258,7 +4258,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5707"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5747"
}
},
{
@ -4817,7 +4817,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5718"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5758"
}
},
{
@ -4858,7 +4858,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5729"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5769"
}
},
{
@ -4899,7 +4899,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5740"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5780"
}
},
{
@ -4940,7 +4940,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5751"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5791"
}
},
{
@ -4981,7 +4981,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5762"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5802"
}
},
{
@ -5022,7 +5022,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5773"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5813"
}
},
{
@ -5053,7 +5053,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5784"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5824"
}
},
{
@ -5103,7 +5103,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5795"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5835"
}
},
{
@ -5144,7 +5144,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5806"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5846"
}
},
{
@ -5183,7 +5183,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5817"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5857"
}
},
{
@ -5247,7 +5247,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5828"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5868"
}
},
{
@ -5305,7 +5305,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5839"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5879"
}
},
{
@ -5752,7 +5752,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5850"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5890"
}
},
{
@ -5788,7 +5788,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5861"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5901"
}
},
{
@ -5931,7 +5931,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5872"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5912"
}
},
{
@ -5987,7 +5987,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5883"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5923"
}
},
{
@ -6026,7 +6026,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5894"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5934"
}
},
{
@ -6203,7 +6203,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5905"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5945"
}
},
{
@ -6255,7 +6255,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5916"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5956"
}
},
{
@ -6447,7 +6447,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5927"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5967"
}
},
{
@ -6547,7 +6547,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5938"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5978"
}
},
{
@ -6601,7 +6601,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5949"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5989"
}
},
{
@ -6640,7 +6640,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5960"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6000"
}
},
{
@ -6725,7 +6725,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5971"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6011"
}
},
{
@ -6919,7 +6919,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5982"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6022"
}
},
{
@ -7017,7 +7017,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L5993"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6033"
}
},
{
@ -7149,7 +7149,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6004"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6044"
}
},
{
@ -7203,7 +7203,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6015"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6055"
}
},
{
@ -7237,7 +7237,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6026"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6066"
}
},
{
@ -7324,7 +7324,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6037"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6077"
}
},
{
@ -7378,7 +7378,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6048"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6088"
}
},
{
@ -7478,7 +7478,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6059"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6099"
}
},
{
@ -7555,7 +7555,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6070"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6110"
}
},
{
@ -7646,7 +7646,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6081"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6121"
}
},
{
@ -7685,7 +7685,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6092"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6132"
}
},
{
@ -7801,7 +7801,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6103"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6143"
}
},
{
@ -9901,7 +9901,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6114"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6154"
}
}
]

View File

@ -161,7 +161,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6202"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6242"
}
},
{
@ -252,7 +252,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6213"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6253"
}
},
{
@ -420,7 +420,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6224"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6264"
}
},
{
@ -447,7 +447,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6235"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6275"
}
},
{
@ -597,7 +597,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6246"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6286"
}
},
{
@ -700,7 +700,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6257"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6297"
}
},
{
@ -803,7 +803,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6268"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6308"
}
},
{
@ -925,7 +925,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6279"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6319"
}
},
{
@ -1135,7 +1135,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6290"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6330"
}
},
{
@ -1306,7 +1306,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6301"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6341"
}
},
{
@ -3350,7 +3350,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6312"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6352"
}
},
{
@ -3470,7 +3470,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6323"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6363"
}
},
{
@ -3531,7 +3531,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6334"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6374"
}
},
{
@ -3569,7 +3569,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6345"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6385"
}
},
{
@ -3729,7 +3729,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6356"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6396"
}
},
{
@ -3913,7 +3913,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6367"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6407"
}
},
{
@ -4054,7 +4054,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6378"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6418"
}
},
{
@ -4107,7 +4107,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6389"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6429"
}
},
{
@ -4250,7 +4250,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6400"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6440"
}
},
{
@ -4474,7 +4474,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6411"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6451"
}
},
{
@ -4601,7 +4601,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6422"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6462"
}
},
{
@ -4768,7 +4768,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6433"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6473"
}
},
{
@ -4895,7 +4895,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6444"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6484"
}
},
{
@ -4933,7 +4933,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6455"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6495"
}
},
{
@ -4972,7 +4972,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6466"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6506"
}
},
{
@ -4995,7 +4995,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6477"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6517"
}
},
{
@ -5034,7 +5034,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6488"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6528"
}
},
{
@ -5057,7 +5057,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6499"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6539"
}
},
{
@ -5096,7 +5096,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6510"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6550"
}
},
{
@ -5130,7 +5130,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6521"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6561"
}
},
{
@ -5184,7 +5184,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6532"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6572"
}
},
{
@ -5223,7 +5223,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6543"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6583"
}
},
{
@ -5262,7 +5262,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6554"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6594"
}
},
{
@ -5297,7 +5297,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6565"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6605"
}
},
{
@ -5477,7 +5477,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6576"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6616"
}
},
{
@ -5506,7 +5506,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6587"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6627"
}
},
{
@ -5529,7 +5529,7 @@
"deprecated": false,
"externalDocs": {
"description": "Github remote link",
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6598"
"url": "https://github.com/filecoin-project/lotus/blob/master/api/proxy_gen.go#L6638"
}
}
]

View File

@ -190,3 +190,6 @@ const BootstrapPeerThreshold = 1
const Eip155ChainId = 31415926
var WhitelistedBlock = cid.Undef
const F3Enabled = true
const F3BootstrapEpoch abi.ChainEpoch = 100

View File

@ -106,3 +106,6 @@ const BootstrapPeerThreshold = 2
const Eip155ChainId = 3141592
var WhitelistedBlock = cid.Undef
const F3Enabled = true
const F3BootstrapEpoch abi.ChainEpoch = 200

View File

@ -135,7 +135,6 @@ func init() {
}
BuildType = BuildCalibnet
}
const BlockDelaySecs = uint64(builtin2.EpochDurationSeconds)
@ -152,3 +151,6 @@ const BootstrapPeerThreshold = 4
const Eip155ChainId = 314159
var WhitelistedBlock = cid.Undef
const F3Enabled = false
const F3BootstrapEpoch abi.ChainEpoch = -1

View File

@ -145,3 +145,6 @@ const BootstrapPeerThreshold = 2
const Eip155ChainId = 3141592
var WhitelistedBlock = cid.Undef
const F3Enabled = true
const F3BootstrapEpoch abi.ChainEpoch = 1000

View File

@ -168,3 +168,6 @@ const Eip155ChainId = 314
// WhitelistedBlock skips checks on message validity in this block to sidestep the zero-bls signature
var WhitelistedBlock = MustParseCid("bafy2bzaceapyg2uyzk7vueh3xccxkuwbz3nxewjyguoxvhx77malc2lzn2ybi")
const F3Enabled = false
const F3BootstrapEpoch abi.ChainEpoch = -1

View File

@ -133,9 +133,11 @@ var (
Devnet = true
ZeroAddress = MustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a")
WhitelistedBlock = cid.Undef
BootstrappersFile = ""
GenesisFile = ""
WhitelistedBlock = cid.Undef
BootstrappersFile = ""
GenesisFile = ""
F3Enabled = false
F3BootstrapEpoch abi.ChainEpoch = -1
)
const Finality = policy.ChainFinality

213
chain/lf3/ec.go Normal file
View File

@ -0,0 +1,213 @@
package lf3
import (
"context"
"sort"
"time"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-f3"
"github.com/filecoin-project/go-f3/gpbft"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
"github.com/filecoin-project/lotus/chain/actors/builtin/power"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
)
type ecWrapper struct {
ChainStore *store.ChainStore
StateManager *stmgr.StateManager
Manifest f3.Manifest
}
type f3TipSet types.TipSet
func (ts *f3TipSet) cast() *types.TipSet {
return (*types.TipSet)(ts)
}
func (ts *f3TipSet) Key() gpbft.TipSetKey {
return ts.cast().Key().Bytes()
}
func (ts *f3TipSet) Beacon() []byte {
entries := ts.cast().Blocks()[0].BeaconEntries
if len(entries) == 0 {
// Set beacon to a non-nil slice to force the message builder to generate a
// ticket. Otherwise, messages that require ticket, i.e. CONVERGE will fail
// validation due to the absence of ticket. This is a convoluted way of doing it.
// TODO: Rework the F3 message builder APIs to include ticket when needed instead
// of relying on the nil check of beacon.
return []byte{}
}
return entries[len(entries)-1].Data
}
func (ts *f3TipSet) Epoch() int64 {
return int64(ts.cast().Height())
}
func (ts *f3TipSet) Timestamp() time.Time {
return time.Unix(int64(ts.cast().Blocks()[0].Timestamp), 0)
}
func wrapTS(ts *types.TipSet) f3.TipSet {
if ts == nil {
return nil
}
return (*f3TipSet)(ts)
}
// GetTipsetByEpoch should return a tipset before the one requested if the requested
// tipset does not exist due to null epochs
func (ec *ecWrapper) GetTipsetByEpoch(ctx context.Context, epoch int64) (f3.TipSet, error) {
ts, err := ec.ChainStore.GetTipsetByHeight(ctx, abi.ChainEpoch(epoch), nil, true)
if err != nil {
return nil, xerrors.Errorf("getting tipset by height: %w", err)
}
return wrapTS(ts), nil
}
func (ec *ecWrapper) GetTipset(ctx context.Context, tsk gpbft.TipSetKey) (f3.TipSet, error) {
tskLotus, err := types.TipSetKeyFromBytes(tsk)
if err != nil {
return nil, xerrors.Errorf("decoding tsk: %w", err)
}
ts, err := ec.ChainStore.GetTipSetFromKey(ctx, tskLotus)
if err != nil {
return nil, xerrors.Errorf("getting tipset by key: %w", err)
}
return wrapTS(ts), nil
}
func (ec *ecWrapper) GetHead(_ context.Context) (f3.TipSet, error) {
return wrapTS(ec.ChainStore.GetHeaviestTipSet()), nil
}
func (ec *ecWrapper) GetParent(ctx context.Context, tsF3 f3.TipSet) (f3.TipSet, error) {
var ts *types.TipSet
if tsW, ok := tsF3.(*f3TipSet); ok {
ts = tsW.cast()
} else {
// There are only two implementations of F3.TipSet: f3TipSet, and one in fake EC
// backend.
//
// TODO: Revisit the type check here and remove as needed once testing
// is over and fake EC backend goes away.
tskLotus, err := types.TipSetKeyFromBytes(tsF3.Key())
if err != nil {
return nil, xerrors.Errorf("decoding tsk: %w", err)
}
ts, err = ec.ChainStore.GetTipSetFromKey(ctx, tskLotus)
if err != nil {
return nil, xerrors.Errorf("getting tipset by key for get parent: %w", err)
}
}
parentTs, err := ec.ChainStore.GetTipSetFromKey(ctx, ts.Parents())
if err != nil {
return nil, xerrors.Errorf("getting parent tipset: %w", err)
}
return wrapTS(parentTs), nil
}
func (ec *ecWrapper) GetPowerTable(ctx context.Context, tskF3 gpbft.TipSetKey) (gpbft.PowerEntries, error) {
tskLotus, err := types.TipSetKeyFromBytes(tskF3)
if err != nil {
return nil, xerrors.Errorf("decoding tsk: %w", err)
}
ts, err := ec.ChainStore.GetTipSetFromKey(ctx, tskLotus)
if err != nil {
return nil, xerrors.Errorf("getting tipset by key for get parent: %w", err)
}
state, err := ec.StateManager.ParentState(ts)
if err != nil {
return nil, xerrors.Errorf("loading the state tree: %w", err)
}
powerAct, err := state.GetActor(power.Address)
if err != nil {
return nil, xerrors.Errorf("getting the power actor: %w", err)
}
powerState, err := power.Load(ec.ChainStore.ActorStore(ctx), powerAct)
if err != nil {
return nil, xerrors.Errorf("loading power actor state: %w", err)
}
var powerEntries gpbft.PowerEntries
err = powerState.ForEachClaim(func(minerAddr address.Address, claim power.Claim) error {
if claim.QualityAdjPower.Sign() <= 0 {
return nil
}
// TODO: optimize
ok, err := powerState.MinerNominalPowerMeetsConsensusMinimum(minerAddr)
if err != nil {
return xerrors.Errorf("checking consensus minimums: %w", err)
}
if !ok {
return nil
}
id, err := address.IDFromAddress(minerAddr)
if err != nil {
return xerrors.Errorf("transforming address to ID: %w", err)
}
pe := gpbft.PowerEntry{
ID: gpbft.ActorID(id),
Power: claim.QualityAdjPower.Int,
}
act, err := state.GetActor(minerAddr)
if err != nil {
return xerrors.Errorf("(get sset) failed to load miner actor: %w", err)
}
mstate, err := miner.Load(ec.ChainStore.ActorStore(ctx), act)
if err != nil {
return xerrors.Errorf("(get sset) failed to load miner actor state: %w", err)
}
info, err := mstate.Info()
if err != nil {
return xerrors.Errorf("failed to load actor info: %w", err)
}
// check fee debt
if debt, err := mstate.FeeDebt(); err != nil {
return err
} else if !debt.IsZero() {
// fee debt don't add the miner to power table
return nil
}
// check consensus faults
if ts.Height() <= info.ConsensusFaultElapsed {
return nil
}
waddr, err := vm.ResolveToDeterministicAddr(state, ec.ChainStore.ActorStore(ctx), info.Worker)
if err != nil {
return xerrors.Errorf("resolve miner worker address: %w", err)
}
if waddr.Protocol() != address.BLS {
return xerrors.Errorf("wrong type of worker address")
}
pe.PubKey = gpbft.PubKey(waddr.Payload())
powerEntries = append(powerEntries, pe)
return nil
})
if err != nil {
return nil, xerrors.Errorf("collecting the power table: %w", err)
}
sort.Sort(powerEntries)
return powerEntries, nil
}

158
chain/lf3/f3.go Normal file
View File

@ -0,0 +1,158 @@
package lf3
import (
"context"
"errors"
"time"
"github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace"
logging "github.com/ipfs/go-log/v2"
pubsub "github.com/libp2p/go-libp2p-pubsub"
"github.com/libp2p/go-libp2p/core/host"
"go.uber.org/fx"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-f3"
"github.com/filecoin-project/go-f3/blssig"
"github.com/filecoin-project/go-f3/certs"
"github.com/filecoin-project/go-f3/gpbft"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/node/modules/dtypes"
"github.com/filecoin-project/lotus/node/modules/helpers"
)
type F3 struct {
inner *f3.F3
signer gpbft.Signer
}
type F3Params struct {
fx.In
NetworkName dtypes.NetworkName
PubSub *pubsub.PubSub
Host host.Host
ChainStore *store.ChainStore
StateManager *stmgr.StateManager
Datastore dtypes.MetadataDS
Wallet api.Wallet
}
var log = logging.Logger("f3")
func New(mctx helpers.MetricsCtx, lc fx.Lifecycle, params F3Params) (*F3, error) {
manifest := f3.LocalnetManifest()
manifest.NetworkName = gpbft.NetworkName(params.NetworkName)
manifest.ECDelay = 2 * time.Duration(build.BlockDelaySecs) * time.Second
manifest.ECPeriod = manifest.ECDelay
manifest.BootstrapEpoch = int64(build.F3BootstrapEpoch)
manifest.ECFinality = int64(build.Finality)
ds := namespace.Wrap(params.Datastore, datastore.NewKey("/f3"))
ec := &ecWrapper{
ChainStore: params.ChainStore,
StateManager: params.StateManager,
Manifest: manifest,
}
verif := blssig.VerifierWithKeyOnG1()
module, err := f3.New(mctx, manifest, ds,
params.Host, params.PubSub, verif, ec, log, nil)
if err != nil {
return nil, xerrors.Errorf("creating F3: %w", err)
}
fff := &F3{
inner: module,
signer: &signer{params.Wallet},
}
lCtx, cancel := context.WithCancel(mctx)
lc.Append(fx.StartStopHook(
func() {
go func() {
err := fff.inner.Run(lCtx)
if err != nil {
log.Errorf("running f3: %+v", err)
}
}()
}, cancel))
return fff, nil
}
// Participate runs the participation loop for givine minerID
// It is blocking
func (fff *F3) Participate(ctx context.Context, minerIDAddress uint64, errCh chan<- string) {
defer close(errCh)
for ctx.Err() == nil {
// create channel for some buffer so we don't get dropped under high load
msgCh := make(chan *gpbft.MessageBuilder, 4)
// SubscribeForMessagesToSign will close the channel if it fills up
// so using the closer is not necessary, we can just drop it on the floor
_ = fff.inner.SubscribeForMessagesToSign(msgCh)
participateOnce := func(mb *gpbft.MessageBuilder) error {
signatureBuilder, err := mb.PrepareSigningInputs(gpbft.ActorID(minerIDAddress))
if errors.Is(err, gpbft.ErrNoPower) {
// we don't have any power in F3, continue
log.Debug("no power to participate in F3: %+v", err)
return nil
}
if err != nil {
log.Errorf("preparing signing inputs: %+v", err)
return err
}
// if worker keys were stored not in the node, the signatureBuilder can be send there
// the sign can be called where the keys are stored and then
// {signatureBuilder, payloadSig, vrfSig} can be sent back to lotus for broadcast
payloadSig, vrfSig, err := signatureBuilder.Sign(fff.signer)
if err != nil {
log.Errorf("signing message: %+v", err)
return err
}
log.Infof("miner with id %d is sending message in F3", minerIDAddress)
fff.inner.Broadcast(ctx, signatureBuilder, payloadSig, vrfSig)
return nil
}
inner:
for ctx.Err() == nil {
select {
case mb, ok := <-msgCh:
if !ok {
// the broadcast bus kicked us out
log.Warnf("lost message bus subscription, retrying")
break inner
}
err := participateOnce(mb)
if err != nil {
errCh <- err.Error()
} else {
errCh <- ""
}
case <-ctx.Done():
return
}
}
}
}
func (fff *F3) GetCert(ctx context.Context, instance uint64) (*certs.FinalityCertificate, error) {
return fff.inner.GetCert(ctx, instance)
}
func (fff *F3) GetLatestCert(ctx context.Context) (*certs.FinalityCertificate, error) {
return fff.inner.GetLatestCert(ctx)
}

38
chain/lf3/signer.go Normal file
View File

@ -0,0 +1,38 @@
package lf3
import (
"context"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-f3/gpbft"
"github.com/filecoin-project/lotus/api"
)
type signer struct {
wallet api.Wallet
}
// Sign signs a message with the private key corresponding to a public key.
// The the key must be known by the wallet and be of BLS type.
func (s *signer) Sign(sender gpbft.PubKey, msg []byte) ([]byte, error) {
addr, err := address.NewBLSAddress(sender)
if err != nil {
return nil, xerrors.Errorf("converting pubkey to address: %w", err)
}
sig, err := s.wallet.WalletSign(context.TODO(), addr, msg, api.MsgMeta{Type: api.MTUnknown})
if err != nil {
return nil, xerrors.Errorf("error while signing: %w", err)
}
return sig.Data, nil
}
// MarshalPayloadForSigning marshals the given payload into the bytes that should be signed.
// This should usually call `Payload.MarshalForSigning(NetworkName)` except when testing as
// that method is slow (computes a merkle tree that's necessary for testing).
// Implementations must be safe for concurrent use.
func (s *signer) MarshalPayloadForSigning(nn gpbft.NetworkName, p *gpbft.Payload) []byte {
return p.MarshalForSigning(nn)
}

View File

@ -80,6 +80,10 @@
* [EthTraceTransaction](#EthTraceTransaction)
* [EthUninstallFilter](#EthUninstallFilter)
* [EthUnsubscribe](#EthUnsubscribe)
* [F3](#F3)
* [F3GetCertificate](#F3GetCertificate)
* [F3GetLatestCertificate](#F3GetLatestCertificate)
* [F3Participate](#F3Participate)
* [Filecoin](#Filecoin)
* [FilecoinAddressToEthAddress](#FilecoinAddressToEthAddress)
* [Gas](#Gas)
@ -2162,6 +2166,150 @@ Inputs:
Response: `true`
## F3
### F3GetCertificate
F3GetCertificate returns a finality certificate at given instance number
Perms: read
Inputs:
```json
[
42
]
```
Response:
```json
{
"GPBFTInstance": 0,
"ECChain": null,
"SupplementalData": {
"Commitments": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"PowerTable": null
},
"Signers": [
0
],
"Signature": null,
"PowerTableDelta": null
}
```
### F3GetLatestCertificate
F3GetLatestCertificate returns the latest finality certificate
Perms: read
Inputs: `null`
Response:
```json
{
"GPBFTInstance": 0,
"ECChain": null,
"SupplementalData": {
"Commitments": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"PowerTable": null
},
"Signers": [
0
],
"Signature": null,
"PowerTableDelta": null
}
```
### F3Participate
F3Participate should be called by a miner node to participate in signing F3 consensus.
The address should be of type ID
The returned channel will never be closed by the F3
If it is closed without the context being cancelled, the caller should retry.
The values returned on the channel will inform the caller about participation
Empty strings will be sent if participation succeeded, non-empty strings explain possible errors.
Perms: admin
Inputs:
```json
[
"f01234"
]
```
Response: `"string value"`
## Filecoin

13
go.mod
View File

@ -12,7 +12,7 @@ replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi // pro
require (
contrib.go.opencensus.io/exporter/prometheus v0.4.2
github.com/BurntSushi/toml v1.3.0
github.com/BurntSushi/toml v1.3.2
github.com/DataDog/zstd v1.4.5
github.com/GeertJohan/go.rice v1.0.3
github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee
@ -26,7 +26,7 @@ require (
github.com/dgraph-io/badger/v2 v2.2007.4
github.com/docker/go-units v0.5.0
github.com/drand/drand v1.5.11
github.com/drand/kyber v1.3.0
github.com/drand/kyber v1.3.1
github.com/dustin/go-humanize v1.0.1
github.com/elastic/go-elasticsearch/v7 v7.14.0
github.com/elastic/go-sysinfo v1.7.0
@ -41,6 +41,7 @@ require (
github.com/filecoin-project/go-commp-utils v0.1.3
github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837
github.com/filecoin-project/go-crypto v0.0.1
github.com/filecoin-project/go-f3 v0.0.2
github.com/filecoin-project/go-fil-commcid v0.1.0
github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0
github.com/filecoin-project/go-jsonrpc v0.3.2
@ -98,11 +99,12 @@ require (
github.com/ipld/go-ipld-prime v0.21.0
github.com/ipni/go-libipni v0.0.8
github.com/jackc/pgerrcode v0.0.0-20240316143900-6e2875d9b438
github.com/jpillora/backoff v1.0.0
github.com/kelseyhightower/envconfig v1.4.0
github.com/klauspost/compress v1.17.8
github.com/koalacxr/quantile v0.0.1
github.com/libp2p/go-buffer-pool v0.1.0
github.com/libp2p/go-libp2p v0.34.1
github.com/libp2p/go-libp2p v0.35.0
github.com/libp2p/go-libp2p-kad-dht v0.25.2
github.com/libp2p/go-libp2p-pubsub v0.11.0
github.com/libp2p/go-libp2p-record v0.2.0
@ -163,6 +165,7 @@ require (
require (
github.com/GeertJohan/go.incremental v1.0.0 // indirect
github.com/Jorropo/jsync v1.0.1 // indirect
github.com/Kubuxu/go-broadcast v0.0.0-20240621161059-1a8c90734cd6 // indirect
github.com/PuerkitoBio/purell v1.1.1 // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
@ -174,7 +177,7 @@ require (
github.com/cespare/xxhash v1.1.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cilium/ebpf v0.9.1 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/daaku/go.zipexe v1.0.2 // indirect
@ -311,7 +314,7 @@ require (
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect
github.com/zondax/hid v0.9.2 // indirect
github.com/zondax/ledger-go v0.14.3 // indirect
go.opentelemetry.io/otel/metric v1.26.0 // indirect

25
go.sum
View File

@ -44,8 +44,8 @@ github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOv
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M=
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.3.0 h1:Ws8e5YmnrGEHzZEzg0YvK/7COGYtTC5PbaH9oSSbgfA=
github.com/BurntSushi/toml v1.3.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
@ -58,6 +58,8 @@ github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee h1:8doiS7ib3zi6/K1
github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee/go.mod h1:W0GbEAA4uFNYOGG2cJpmFJ04E6SD1NLELPYZB57/7AY=
github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU=
github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ=
github.com/Kubuxu/go-broadcast v0.0.0-20240621161059-1a8c90734cd6 h1:yh2/1fz3ajTaeKskSWxtSBNScdRZfQ/A5nyd9+64T6M=
github.com/Kubuxu/go-broadcast v0.0.0-20240621161059-1a8c90734cd6/go.mod h1:5LOj/fF3Oc/cvJqzDiyfx4XwtBPRWUYEz+V+b13sH5U=
github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y=
github.com/Kubuxu/imtui v0.0.0-20210401140320-41663d68d0fa h1:1PPxEyGdIGVkX/kqMvLJ95a1dGS1Sz7tpNEgehEYYt0=
github.com/Kubuxu/imtui v0.0.0-20210401140320-41663d68d0fa/go.mod h1:WUmMvh9wMtqj1Xhf1hf3kp9RvL+y6odtdYxpyZjb90U=
@ -171,8 +173,8 @@ github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 h1:ZFUue+PNxmHlu7pYv+IYMtqlaO/0VwaGEqKepZf9JpA=
github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@ -212,8 +214,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/drand/drand v1.5.11 h1:7sskUTCsX2lgFiWdGvPh3/P0ZDQKi1lCtI7RQKK010k=
github.com/drand/drand v1.5.11/go.mod h1:TvJjCJ/s4Usn4pKRpDC0N1QaCwSt3YC8fRqhZdpOUU0=
github.com/drand/kyber v1.3.0 h1:TVd7+xoRgKQ4Ck1viNLPFy6IWhuZM36Bq6zDXD8Asls=
github.com/drand/kyber v1.3.0/go.mod h1:f+mNHjiGT++CuueBrpeMhFNdKZAsy0tu03bKq9D5LPA=
github.com/drand/kyber v1.3.1 h1:E0p6M3II+loMVwTlAp5zu4+GGZFNiRfq02qZxzw2T+Y=
github.com/drand/kyber v1.3.1/go.mod h1:f+mNHjiGT++CuueBrpeMhFNdKZAsy0tu03bKq9D5LPA=
github.com/drand/kyber-bls12381 v0.3.1 h1:KWb8l/zYTP5yrvKTgvhOrk2eNPscbMiUOIeWBnmUxGo=
github.com/drand/kyber-bls12381 v0.3.1/go.mod h1:H4y9bLPu7KZA/1efDg+jtJ7emKx+ro3PU7/jWUVt140=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@ -268,6 +270,8 @@ github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082
github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ=
github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o=
github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ=
github.com/filecoin-project/go-f3 v0.0.2 h1:bzw/GndxntJnUYA+WCaXwHE2qwGRwrFVo9umz3unTUs=
github.com/filecoin-project/go-f3 v0.0.2/go.mod h1:Wry0mNa8z767TBHb7N0cVb+9j00KsHbD2pzsC3li4R8=
github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ=
github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88OqLYEo6roi+GiIeOh8=
github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ=
@ -749,6 +753,7 @@ github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST
github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
@ -820,8 +825,8 @@ github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFG
github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro=
github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM=
github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8=
github.com/libp2p/go-libp2p v0.34.1 h1:fxn9vyLo7vJcXQRNvdRbyPjbzuQgi2UiqC8hEbn8a18=
github.com/libp2p/go-libp2p v0.34.1/go.mod h1:snyJQix4ET6Tj+LeI0VPjjxTtdWpeOhYt5lEY0KirkQ=
github.com/libp2p/go-libp2p v0.35.0 h1:1xS1Bkr9X7GtdvV6ntLnDV9xB1kNjHK1lZ0eaO6gnhc=
github.com/libp2p/go-libp2p v0.35.0/go.mod h1:snyJQix4ET6Tj+LeI0VPjjxTtdWpeOhYt5lEY0KirkQ=
github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8=
@ -1347,8 +1352,8 @@ github.com/xorcare/golden v0.6.0/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/
github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 h1:oWgZJmC1DorFZDpfMfWg7xk29yEOZiXmo/wZl+utTI8=
github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw=
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk=
github.com/yugabyte/pgx/v5 v5.5.3-yb-2 h1:SDk2waZb2o6dSLYqk+vq0Ur2jnIv+X2A+P+QPR1UThU=
github.com/yugabyte/pgx/v5 v5.5.3-yb-2/go.mod h1:2SxizGfDY7UDCRTtbI/xd98C/oGN7S/3YoGF8l9gx/c=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=

View File

@ -114,6 +114,7 @@ const (
HandleDealsKey
HandleRetrievalKey
RunSectorServiceKey
F3Participation
// daemon
ExtractApiKey

View File

@ -17,6 +17,7 @@ import (
"github.com/filecoin-project/lotus/chain/exchange"
"github.com/filecoin-project/lotus/chain/gen/slashfilter"
"github.com/filecoin-project/lotus/chain/index"
"github.com/filecoin-project/lotus/chain/lf3"
"github.com/filecoin-project/lotus/chain/market"
"github.com/filecoin-project/lotus/chain/messagepool"
"github.com/filecoin-project/lotus/chain/messagesigner"
@ -149,6 +150,8 @@ var ChainNode = Options(
Override(HandleIncomingMessagesKey, modules.HandleIncomingMessages),
Override(HandleIncomingBlocksKey, modules.HandleIncomingBlocks),
),
If(build.F3Enabled, Override(new(*lf3.F3), lf3.New)),
)
func ConfigFullNode(c interface{}) Option {

View File

@ -141,6 +141,7 @@ func ConfigStorageMiner(c interface{}) Option {
Override(new(config.HarmonyDB), cfg.HarmonyDB),
Override(new(harmonydb.ITestID), harmonydb.ITestID("")),
Override(new(*ctladdr.AddressSelector), modules.AddressSelector(&cfg.Addresses)),
If(build.F3Enabled, Override(F3Participation, modules.F3Participation)),
)
}

View File

@ -34,6 +34,7 @@ type FullNodeAPI struct {
full.SyncAPI
full.EthAPI
full.ActorEventsAPI
full.F3API
DS dtypes.MetadataDS
NetworkName dtypes.NetworkName

57
node/impl/full/f3.go Normal file
View File

@ -0,0 +1,57 @@
package full
import (
"context"
"errors"
"go.uber.org/fx"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-f3/certs"
"github.com/filecoin-project/lotus/chain/lf3"
)
type F3API struct {
fx.In
F3 *lf3.F3 `optional:"true"`
}
var ErrF3Disabled = errors.New("f3 is disabled")
func (f3api *F3API) F3Participate(ctx context.Context, miner address.Address) (<-chan string, error) {
if f3api.F3 == nil {
log.Infof("F3Participate called for %v, F3 is disabled", miner)
return nil, ErrF3Disabled
}
// Make channel with some buffer to avoid blocking under higher load.
errCh := make(chan string, 4)
log.Infof("starting F3 participation for %v", miner)
actorID, err := address.IDFromAddress(miner)
if err != nil {
return nil, xerrors.Errorf("miner address in F3Participate not of ID type: %w", err)
}
// Participate takes control of closing the channel
go f3api.F3.Participate(ctx, actorID, errCh)
return errCh, nil
}
func (f3api *F3API) F3GetCertificate(ctx context.Context, instance uint64) (*certs.FinalityCertificate, error) {
if f3api.F3 == nil {
return nil, ErrF3Disabled
}
return f3api.F3.GetCert(ctx, instance)
}
func (f3api *F3API) F3GetLatestCertificate(ctx context.Context) (*certs.FinalityCertificate, error) {
if f3api.F3 == nil {
return nil, ErrF3Disabled
}
return f3api.F3.GetLatestCert(ctx)
}

View File

@ -16,6 +16,8 @@ import (
"go.uber.org/fx"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-f3/gpbft"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/metrics"
"github.com/filecoin-project/lotus/node/config"
@ -378,6 +380,11 @@ func GossipSub(in GossipIn) (service *pubsub.PubSub, err error) {
build.MessagesTopic(in.Nn),
build.IndexerIngestTopic(in.Nn),
}
if build.F3Enabled {
allowTopics = append(allowTopics, gpbft.NetworkName(in.Nn).PubSubTopic())
}
allowTopics = append(allowTopics, drandTopics...)
options = append(options,
pubsub.WithSubscriptionFilter(

View File

@ -10,6 +10,7 @@ import (
"github.com/google/uuid"
"github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace"
"github.com/jpillora/backoff"
"go.uber.org/fx"
"go.uber.org/multierr"
"golang.org/x/xerrors"
@ -32,6 +33,7 @@ import (
"github.com/filecoin-project/lotus/journal"
lotusminer "github.com/filecoin-project/lotus/miner"
"github.com/filecoin-project/lotus/node/config"
"github.com/filecoin-project/lotus/node/impl/full"
"github.com/filecoin-project/lotus/node/modules/dtypes"
"github.com/filecoin-project/lotus/node/modules/helpers"
"github.com/filecoin-project/lotus/node/repo"
@ -351,6 +353,60 @@ func SectorStorage(mctx helpers.MetricsCtx, lc fx.Lifecycle, lstor *paths.Local,
return sst, nil
}
func F3Participation(mctx helpers.MetricsCtx, lc fx.Lifecycle, api v1api.FullNode, minerAddress dtypes.MinerAddress) error {
ctx := helpers.LifecycleCtx(mctx, lc)
b := &backoff.Backoff{
Min: 1 * time.Second,
Max: 1 * time.Minute,
Factor: 1.5,
Jitter: false,
}
go func() {
timer := time.NewTimer(0)
defer timer.Stop()
if !timer.Stop() {
<-timer.C
}
// Backoff while obeying the context.
backoffWithContext := func() {
timer.Reset(b.Duration())
select {
case <-ctx.Done():
log.Errorf("Context is done while retrying F3 participation: %+v", ctx.Err())
case <-timer.C:
}
}
for ctx.Err() == nil {
switch ch, err := api.F3Participate(ctx, address.Address(minerAddress)); {
case errors.Is(err, context.Canceled):
log.Errorf("Context cancelled while attampting F3 participation: %+v", err)
return
case errors.Is(err, full.ErrF3Disabled):
log.Errorf("Cannot participate in F3 as it is disabled: %+v", err)
return
case err != nil:
log.Errorf("while starting to participate in F3: %+v", err)
// use exponential backoff to avoid hotloop
backoffWithContext()
default:
for err := range ch {
// we have communication with F3 in lotus, reset the backoff
b.Reset()
if err != "" {
log.Warnf("participating in F3 encountered an error: %v", err)
}
}
log.Warn("F3Participate exited, retrying")
backoffWithContext()
}
}
}()
return nil
}
func StorageAuth(ctx helpers.MetricsCtx, ca v0api.Common) (sealer.StorageAuth, error) {
token, err := ca.AuthNew(ctx, []auth.Permission{"admin"})
if err != nil {