From ef48c88d6dc22b917997cd06cb3213925e1917e2 Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Mon, 19 Feb 2024 18:47:31 +0400 Subject: [PATCH 1/6] new verireg methods --- api/api_full.go | 4 + api/api_gateway.go | 2 + api/mocks/mock_full.go | 30 ++++ api/proxy_gen.go | 52 ++++++ api/v0api/full.go | 4 + api/v0api/gateway.go | 2 + api/v0api/proxy_gen.go | 52 ++++++ api/v0api/v0mocks/mock_full.go | 30 ++++ build/openrpc/full.json.gz | Bin 35035 -> 35158 bytes build/openrpc/gateway.json.gz | Bin 11922 -> 12033 bytes build/openrpc/miner.json.gz | Bin 16478 -> 16481 bytes build/openrpc/worker.json.gz | Bin 6050 -> 6050 bytes .../actors/builtin/verifreg/actor.go.template | 2 + .../actors/builtin/verifreg/state.go.template | 31 ++++ chain/actors/builtin/verifreg/v0.go | 12 ++ chain/actors/builtin/verifreg/v10.go | 12 ++ chain/actors/builtin/verifreg/v11.go | 12 ++ chain/actors/builtin/verifreg/v12.go | 12 ++ chain/actors/builtin/verifreg/v13.go | 26 +++ chain/actors/builtin/verifreg/v2.go | 12 ++ chain/actors/builtin/verifreg/v3.go | 12 ++ chain/actors/builtin/verifreg/v4.go | 12 ++ chain/actors/builtin/verifreg/v5.go | 12 ++ chain/actors/builtin/verifreg/v6.go | 12 ++ chain/actors/builtin/verifreg/v7.go | 12 ++ chain/actors/builtin/verifreg/v8.go | 12 ++ chain/actors/builtin/verifreg/v9.go | 12 ++ chain/actors/builtin/verifreg/verifreg.go | 2 + cli/filplus.go | 148 ++++++++++++++++++ documentation/en/api-v0-methods.md | 46 ++++++ documentation/en/api-v1-unstable-methods.md | 46 ++++++ documentation/en/cli-lotus.md | 28 ++++ gateway/node.go | 2 + gateway/proxy_fil.go | 20 +++ node/impl/full/state.go | 38 +++++ 35 files changed, 709 insertions(+) diff --git a/api/api_full.go b/api/api_full.go index dc219718d0b..1cfa8d05e74 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -559,10 +559,14 @@ type FullNode interface { StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read // StateGetAllocations returns the all the allocations for a given client. StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read + // StateGetAllAllocations returns the all the allocations available in verified registry actor. + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read // StateGetClaim returns the claim for a given address and claim ID. StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read // StateGetClaims returns the all the claims for a given provider. StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read + // StateGetAllClaims returns the all the claims available in verified registry actor. + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read // StateComputeDataCID computes DataCID from a set of on-chain deals StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read // StateLookupID retrieves the ID address of the given address diff --git a/api/api_gateway.go b/api/api_gateway.go index 238bf43abfe..a5eb48623be 100644 --- a/api/api_gateway.go +++ b/api/api_gateway.go @@ -69,8 +69,10 @@ type Gateway interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index d141123e025..5a5bb9c92d9 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -3188,6 +3188,36 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetAllAllocations mocks base method. +func (m *MockFullNode) StateGetAllAllocations(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllAllocations", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllAllocations indicates an expected call of StateGetAllAllocations. +func (mr *MockFullNodeMockRecorder) StateGetAllAllocations(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllAllocations), arg0, arg1) +} + +// StateGetAllClaims mocks base method. +func (m *MockFullNode) StateGetAllClaims(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllClaims", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllClaims indicates an expected call of StateGetAllClaims. +func (mr *MockFullNodeMockRecorder) StateGetAllClaims(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetAllClaims), arg0, arg1) +} + // StateGetAllocation mocks base method. func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index d89082b6294..8493b3203b5 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -485,6 +485,10 @@ type FullNodeMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` @@ -781,6 +785,10 @@ type GatewayMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `` @@ -3405,6 +3413,28 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *FullNodeStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *FullNodeStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *FullNodeStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported @@ -4967,6 +4997,28 @@ func (s *GatewayStub) StateGetActor(p0 context.Context, p1 address.Address, p2 t return nil, ErrNotSupported } +func (s *GatewayStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *GatewayStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *GatewayStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *GatewayStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *GatewayStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported diff --git a/api/v0api/full.go b/api/v0api/full.go index d92d5a95c8e..db84ddc8745 100644 --- a/api/v0api/full.go +++ b/api/v0api/full.go @@ -537,10 +537,14 @@ type FullNode interface { StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read // StateGetAllocations returns the all the allocations for a given client. StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read + // StateGetAllAllocations returns the all the allocations available in verified registry actor. + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read // StateGetClaim returns the claim for a given address and claim ID. StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read // StateGetClaims returns the all the claims for a given provider. StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read + // StateGetAllClaims returns the all the claims available in verified registry actor. + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read // StateLookupID retrieves the ID address of the given address StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read // StateAccountKey returns the public key address of the given ID address diff --git a/api/v0api/gateway.go b/api/v0api/gateway.go index 1a7f7d3ac92..d038f0d8a42 100644 --- a/api/v0api/gateway.go +++ b/api/v0api/gateway.go @@ -65,8 +65,10 @@ type Gateway interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index bd37f64298d..79f7a60ff86 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -280,6 +280,10 @@ type FullNodeMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"` @@ -478,6 +482,10 @@ type GatewayMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `` + StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `` + + StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `` + StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `` @@ -1837,6 +1845,28 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *FullNodeStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *FullNodeStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *FullNodeStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported @@ -2860,6 +2890,28 @@ func (s *GatewayStub) StateGetActor(p0 context.Context, p1 address.Address, p2 t return nil, ErrNotSupported } +func (s *GatewayStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if s.Internal.StateGetAllAllocations == nil { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported + } + return s.Internal.StateGetAllAllocations(p0, p1) +} + +func (s *GatewayStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported +} + +func (s *GatewayStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if s.Internal.StateGetAllClaims == nil { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported + } + return s.Internal.StateGetAllClaims(p0, p1) +} + +func (s *GatewayStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported +} + func (s *GatewayStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 7a722ed257c..6b70e0e49f8 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -2338,6 +2338,36 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetAllAllocations mocks base method. +func (m *MockFullNode) StateGetAllAllocations(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllAllocations", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllAllocations indicates an expected call of StateGetAllAllocations. +func (mr *MockFullNodeMockRecorder) StateGetAllAllocations(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllAllocations), arg0, arg1) +} + +// StateGetAllClaims mocks base method. +func (m *MockFullNode) StateGetAllClaims(arg0 context.Context, arg1 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetAllClaims", arg0, arg1) + ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetAllClaims indicates an expected call of StateGetAllClaims. +func (mr *MockFullNodeMockRecorder) StateGetAllClaims(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetAllClaims), arg0, arg1) +} + // StateGetAllocation mocks base method. func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) { m.ctrl.T.Helper() diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 3829a7f34b1b207b6cf943dc9b09c4c39a0a9283..0e6efa1daf24ce3712c5bfcf661346372ddd8026 100644 GIT binary patch literal 35158 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 G6$b#@|6LjY literal 35035 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 diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 6571430bcc4533d2bb8a5cb8cbf0525c1047254f..aedf7e1cede17d47fae72b9492baa1d55749c7fd 100644 GIT binary patch delta 10071 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 delta 9961 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 445340836b5036ca3ae516abb6f677bacfdbba59..75487eb3fc87a1ab03a268775d4774a93f4ca723 100644 GIT binary patch delta 15588 zcmVh!Q9OnEJvz1}Phj-9~L~p=xK^M+hmNXLsUfMQkvbij?)ztJM#78}#_VD5wK6?TB!Zviq*rJggildiI$k-hl~q)#V%}07d>DN!IxWyQ5!Fyj@;eHC0hIh-mIbZCD@V3O~tKT zj6Crh!6!%J=76sxh2!Jr+uNS!O!`vbO^UkyWG59qaPdi*aMvs4{(cIuEpGdi z;^YdAuL6LO+6k?w^pw@tL^-UKSo8e0Wqi$p;fQNFNdCb9)CIo4M$iBz)$fGlwjkro zc@bHe{hvcVO}E2;SLYlY&oab3U0WN5P9cM7CPOJX9|4gk=syz+8U`{hFw&9q2U2ls4JJTX~2li`E@aJ&;S9$ndTT%3IbBMxYq zI5>R@NS*KS+cMHdEXmQJKN|Kl@$HG!32hje70;o<-RIhW@G&9Ra|cmRPkhhfaMI5e zhn~$;TNnxeS)%aE?RZ=~G#{3aM?19>M`|dXCC-5fTOUSk^l&GRzjy%nTT}QThbLB}^K1x2Uol4l^ zH7ILtULnDMp>&}gO?z6{deM$%-h*G!wk_Gv6FnlMRdG|-3=R#xjAa|ayrQHE&tsiW zYgpCIjpAJOm}KyBuB3Ml|NN&GS+P0>KtkO&AL1x=h=H)$p#?MO4_Yu`#%TkHiPoJB zVmPcjf;59CQ$!bv!V*q{s00i?;1W>$^=`}fTkZdUh}r-5)w`8W{pJM{;?R%nAgG&c4I~_C`hoVFBc7SzRq@z~Q;UL!v`V$j_KJa;O zVhRONvh1M^CTubmHV>a&Xa5>oSBU+Jw!(}N2MGIDoB0|u3CwkD2|ZuJnh7w-HEHtu zsbkrHM27w>8%H^nI}=gk+9E1f5yn=%tlVkEnu>#&TO()1Y%(6*9WF;3Vk6`0;o^~u zm;XH&jf@c;kJ#U2XbrLT__(s~_0>I+Qtf#TcZ%pVMZ6b&P-?bM5j0FpkajfYJ6>or zFlL~oekg<>3(5vJd3SvB>*tIAygR;n|DTKF>t6sO_t>Un&G*sw(8l6) z)Ikg|3LLsdz=CYm6KCtZuN%TUo}QTV z<<@I)wSu;BDb^ux0}uerwfs|{Rx-1l1EOD zKZ+wUv|ouy(rv|*k);@j>8(mxg~B1H&EXPG5F9%Q{*ClC`+A7s-DqSu3ulEV!$Ua# zI>zJ4LzS^U|7tVOThQ`Er9AUgP{?>Zh)kfEm6R7a_d{MO{?Pk;Ok94ub;!o7T z#&cmN4tsl==T}U)4n3@rNiVN|Uxy#|GxG5~dO0JQVQAv7l5!gHd<<4?&7J|Tsgln| zGh5$hp@RM24uAw~NbtY_4sWu5LvD!w85H6{r^LYya{yg{1!DS&>oQ?0@Gt)100S}z z-WUj)z=B(oLgOb9fhje%Bj+ACo4K=f7+Uwh5)ouW#^FE$Ft_xjp0|*H&AakC5N~b> zqhJAbY+?pE$w7u}U?XN@bPr8OeEC+!)mt)mjsNLUF>vU{){!GdCSp1{W6F_X2Vf$P zU-&0FrdB1_}#yg2HL@~n)Y6EnS>@A<%zc&b280jKfv?mQB z6Mo&^1oQ60-8el7!U52KMk1gzyf}C*wgU{ATaGEbr`Wh5XTJleGklNPRv?d394L}OnUluuuHMm)k0LAVm^e0xLW=Ntpf z#A=3-wvmaT`_hGv9k6lGVq=ORTxhSs#*zl34)qlR(Pii4gZ|!s@WqL(J#Xkz6bi@& zIf8I}iddnwPZQ=gjT#mZn-0K>fVMe`awULZpev5aZ|DIy{Ez(`a>l^ir23r$HiTg_ zK0ymiu(J}hr>xHJSRD;Ba;Q8xdyX9@2&7(VgCv+zR%lU>QW9)=TeNbxQtBA;wNnT$ zFTNg=1+~|bdElIXZWw^3>B+@ALLUfcb|E7IYZd%X%q@WT5SwBPNr~9o20KyC&ueJk zA?5^HsC6SZHNGdk%`+RgTv%yGS|GxXy}8mlW9~{EOGQJzGFx|)k!s|#38i-%OGH{V z6fYq_Syrx>^iyBhggSW+aT6U=u}K`kFI()mB1ibR_&h;>*N?Qs_lR(Fu055ml4D*l zIY!BKCD(T(*T)(8O&;M~BAwnNySW1+45+d9A`Gl8*F_A$Vj&$t0y2iy78A+!wtNAg z*sMjI7WFoBf}%N`j18UJ;WpUHfwM*EslcMgH@u!M5yq*QX0_}4z8Ux+BXcF7QtAC^ zgM&kmT43RS5VZDqIErE!CJv*Kbd{|k*+A3WN`IB%ekFfNGs|+b3ltxH*L-xCk@9eg zpy`}Y;$Q>Wzb_UhCg{?0?TMH5n5qzLx_4zxshPXODTJHOYjPo~uw0n|?4$}GpMu1k zyAO+5hSOz;QM~i2@0)n18Ih`Ki{w&cyQCWi+8*J5hN13|Y-7kPqJ18son?eTMVE-| zMBt`CZG&u6!0v=@)6rLi`z(Yz?PrDeB-f~AVVi*28qw}t)TW`X2=;jhc90dQ5?-Ot zDKDM&EzjiH2m(cyxKB)fj0n??yi)rj@9&;l6yay*aE?qlmMaGB zSQ6@cVniRfRCHlu9bF*XeW~?B&`+o-LZ>+<;)O&c_BecI?-t%qc7F~X_SrHxGse&` zp|c7oBD@2?nlTlrwtc+p`!BvHS z5hl7)DZr`pU$xgLyXIuxL@|}zQh`R3{8O%mQJfu1eHCKKI(0o?f27XzAS+UbD>%t; z*m!4B{myKp(G#Gu)O(4N?&$z?^?aRz?wNS+Na1Hy5D&k3wh|q;sim%7(at7e_rEg6 zo@7PvaH_sSY)8QdMUb=n30%(JwKRE^8$2|w9t+h zI3I4iEK=+WZpEuCNa?tW1{{)(zG9JA!y>bOUcga; z6xvrHWuiCgv&T-=M;hviHC_*E4Dv#nLWIzEkVqlumRO`ptVn$}$sB@WmDj_6D#N^B zst_@>8;(){xFt3zAC*#{Nixt^Eb@9-WRw@Kb%j`q-s&`H*%yoWg#!vXqNLNhIvb>6 zyK~xCj_EEtrj^V%KbVa(BIQJdWn>={LN`Q5$7TbUMFy~mlzNa6O%+>_)Nr60RLbEL7Q!h@tsGd( zlc#r?yAcu)K z?5Cdh)2qlA$*<{YXU>US!IKpv1etDYKOsOql`-A2_Bs=#`)W-tN5-+lg)a3$a9l=D zK5Bl9b4WWLjb!Ze#?g)jJ?$NI+Rddnb3#)gC+f_(LULU4_aAhluf#B86aEP~4qT?J z#P8gCxIj&&#+w3vL8;=}F$S0JowV*>U%qL-N$QMsf0~l9<-e4-*BIAWeA(~!2Yce5 z>wf=8{PSFrq>XWQF#YeopC!U9Xu zs&#{X&n3{dDph>HT4K^4WF%GjV$)BlYpgE9kTUd!f9a+x8Oth*Fz9x*MhxlQsE?Fk zCv`@DdZRLm!Yf$wZp%ES@R>M>Gg+V}F5q^J2op1K4^8P>jXgXgx{aWNgv_rd!4u$1 zl?Te|zFcjg@TjXw(8vVUlya{`M2s>rW+aceUC$D`PSNkA{S)HKmWrE*)@Bid2D ztrUb)@48HDRVv*{or?cJr{cA1eX7F)b$Fl-51#Gt;I)?Wob(Seavej8wRVnU3`WD+ z+%af7snDIoSk>uPb-GoZZdIpS)#+Asy1zT+KFLTA57gWl(J9v=tU*zrOlVmOKYC(+ zEMS#a{;@uC&47%KYMKPe(e21M$Ur;AP{?knjE0ts2Kl^VNI=h@+7oQFH>1af@nJ&@ zr&XXAo4JXdRjV+)_=}njAfG5|e($O-aq7p3@B%Wv{`*2|t~qXR7Y{2 zJ{ykp(U0k1)s_&WORS!5%T( zcjE1fVVRie~l#6e7E

|T=VY&*_avv>uiTbq^))|>HGhGs~COmu5Hbb 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 y>HO^)It>~0RR7&1L$b;M*{%YsVaB? delta 15616 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 X;Rr65x6A(z00960xT3$gaaaKWL*JTI diff --git a/chain/actors/builtin/verifreg/actor.go.template b/chain/actors/builtin/verifreg/actor.go.template index 991c6717bd7..f4467d979bf 100644 --- a/chain/actors/builtin/verifreg/actor.go.template +++ b/chain/actors/builtin/verifreg/actor.go.template @@ -81,8 +81,10 @@ type State interface { ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error GetAllocation(clientIdAddr address.Address, allocationId AllocationId) (*Allocation, bool, error) GetAllocations(clientIdAddr address.Address) (map[AllocationId]Allocation, error) + GetAllAllocations() (map[AllocationId]Allocation, error) GetClaim(providerIdAddr address.Address, claimId ClaimId) (*Claim, bool, error) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, error) + GetAllClaims() (map[ClaimId]Claim, error) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) GetState() interface{} } diff --git a/chain/actors/builtin/verifreg/state.go.template b/chain/actors/builtin/verifreg/state.go.template index adcbc22c2e4..840fa71354d 100644 --- a/chain/actors/builtin/verifreg/state.go.template +++ b/chain/actors/builtin/verifreg/state.go.template @@ -145,6 +145,21 @@ func (s *state{{.v}}) GetAllocations(clientIdAddr address.Address) (map[Allocati {{end}} } +func (s *state{{.v}}) GetAllAllocations() (map[AllocationId]Allocation, error) { +{{if (le .v 12)}} + return nil, xerrors.Errorf("unsupported in actors v{{.v}}") +{{else}} + v{{.v}}Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v{{.v}}Map)) + for k, v := range v{{.v}}Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err +{{end}} +} + func (s *state{{.v}}) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { {{if (le .v 8)}} return nil, false, xerrors.Errorf("unsupported in actors v{{.v}}") @@ -170,6 +185,22 @@ func (s *state{{.v}}) GetClaims(providerIdAddr address.Address) (map[ClaimId]Cla {{end}} } +func (s *state{{.v}}) GetAllClaims() (map[ClaimId]Claim, error) { +{{if (le .v 12)}} + return nil, xerrors.Errorf("unsupported in actors v{{.v}}") +{{else}} + v{{.v}}Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v{{.v}}Map)) + for k, v := range v{{.v}}Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +{{end}} +} + func (s *state{{.v}}) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { {{if (le .v 8)}} return nil, xerrors.Errorf("unsupported in actors v{{.v}}") diff --git a/chain/actors/builtin/verifreg/v0.go b/chain/actors/builtin/verifreg/v0.go index 9913c42c0c6..4129e7a2dae 100644 --- a/chain/actors/builtin/verifreg/v0.go +++ b/chain/actors/builtin/verifreg/v0.go @@ -106,6 +106,12 @@ func (s *state0) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state0) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v0") + +} + func (s *state0) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v0") @@ -118,6 +124,12 @@ func (s *state0) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state0) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v0") + +} + func (s *state0) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v0") diff --git a/chain/actors/builtin/verifreg/v10.go b/chain/actors/builtin/verifreg/v10.go index 256f4d2f888..0e0556b79a5 100644 --- a/chain/actors/builtin/verifreg/v10.go +++ b/chain/actors/builtin/verifreg/v10.go @@ -114,6 +114,12 @@ func (s *state10) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state10) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v10") + +} + func (s *state10) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg10.ClaimId(claimId)) @@ -134,6 +140,12 @@ func (s *state10) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state10) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v10") + +} + func (s *state10) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v10Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v11.go b/chain/actors/builtin/verifreg/v11.go index 7b7b9e4c0a8..4ec9b33f354 100644 --- a/chain/actors/builtin/verifreg/v11.go +++ b/chain/actors/builtin/verifreg/v11.go @@ -114,6 +114,12 @@ func (s *state11) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state11) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v11") + +} + func (s *state11) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg11.ClaimId(claimId)) @@ -134,6 +140,12 @@ func (s *state11) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state11) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v11") + +} + func (s *state11) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v11Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v12.go b/chain/actors/builtin/verifreg/v12.go index 77a113fbe86..fbd3b7ca6ce 100644 --- a/chain/actors/builtin/verifreg/v12.go +++ b/chain/actors/builtin/verifreg/v12.go @@ -114,6 +114,12 @@ func (s *state12) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state12) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v12") + +} + func (s *state12) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg12.ClaimId(claimId)) @@ -134,6 +140,12 @@ func (s *state12) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state12) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v12") + +} + func (s *state12) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v12Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v13.go b/chain/actors/builtin/verifreg/v13.go index 977f2213735..0c487a2f7e0 100644 --- a/chain/actors/builtin/verifreg/v13.go +++ b/chain/actors/builtin/verifreg/v13.go @@ -114,6 +114,19 @@ func (s *state13) GetAllocations(clientIdAddr address.Address) (map[AllocationId } +func (s *state13) GetAllAllocations() (map[AllocationId]Allocation, error) { + + v13Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v13Map)) + for k, v := range v13Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err + +} + func (s *state13) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg13.ClaimId(claimId)) @@ -134,6 +147,19 @@ func (s *state13) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, } +func (s *state13) GetAllClaims() (map[ClaimId]Claim, error) { + + v13Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v13Map)) + for k, v := range v13Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err + +} + func (s *state13) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v13Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/v2.go b/chain/actors/builtin/verifreg/v2.go index 31f7f775df2..7f71639e668 100644 --- a/chain/actors/builtin/verifreg/v2.go +++ b/chain/actors/builtin/verifreg/v2.go @@ -106,6 +106,12 @@ func (s *state2) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state2) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v2") + +} + func (s *state2) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v2") @@ -118,6 +124,12 @@ func (s *state2) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state2) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v2") + +} + func (s *state2) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v2") diff --git a/chain/actors/builtin/verifreg/v3.go b/chain/actors/builtin/verifreg/v3.go index 3ea016fd5c3..3e8ea9a1f7a 100644 --- a/chain/actors/builtin/verifreg/v3.go +++ b/chain/actors/builtin/verifreg/v3.go @@ -107,6 +107,12 @@ func (s *state3) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state3) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v3") + +} + func (s *state3) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v3") @@ -119,6 +125,12 @@ func (s *state3) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state3) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v3") + +} + func (s *state3) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v3") diff --git a/chain/actors/builtin/verifreg/v4.go b/chain/actors/builtin/verifreg/v4.go index 464cc9fdc20..1dc43886422 100644 --- a/chain/actors/builtin/verifreg/v4.go +++ b/chain/actors/builtin/verifreg/v4.go @@ -107,6 +107,12 @@ func (s *state4) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state4) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v4") + +} + func (s *state4) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v4") @@ -119,6 +125,12 @@ func (s *state4) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state4) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v4") + +} + func (s *state4) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v4") diff --git a/chain/actors/builtin/verifreg/v5.go b/chain/actors/builtin/verifreg/v5.go index 17901dd23a9..a7505330c26 100644 --- a/chain/actors/builtin/verifreg/v5.go +++ b/chain/actors/builtin/verifreg/v5.go @@ -107,6 +107,12 @@ func (s *state5) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state5) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v5") + +} + func (s *state5) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v5") @@ -119,6 +125,12 @@ func (s *state5) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state5) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v5") + +} + func (s *state5) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v5") diff --git a/chain/actors/builtin/verifreg/v6.go b/chain/actors/builtin/verifreg/v6.go index 68fac64cb4d..93424152e4b 100644 --- a/chain/actors/builtin/verifreg/v6.go +++ b/chain/actors/builtin/verifreg/v6.go @@ -107,6 +107,12 @@ func (s *state6) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state6) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v6") + +} + func (s *state6) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v6") @@ -119,6 +125,12 @@ func (s *state6) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state6) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v6") + +} + func (s *state6) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v6") diff --git a/chain/actors/builtin/verifreg/v7.go b/chain/actors/builtin/verifreg/v7.go index e8f3ac73984..bd67aee5ff6 100644 --- a/chain/actors/builtin/verifreg/v7.go +++ b/chain/actors/builtin/verifreg/v7.go @@ -106,6 +106,12 @@ func (s *state7) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state7) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v7") + +} + func (s *state7) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v7") @@ -118,6 +124,12 @@ func (s *state7) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state7) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v7") + +} + func (s *state7) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v7") diff --git a/chain/actors/builtin/verifreg/v8.go b/chain/actors/builtin/verifreg/v8.go index 89393c4d9cf..1515c1c5bd3 100644 --- a/chain/actors/builtin/verifreg/v8.go +++ b/chain/actors/builtin/verifreg/v8.go @@ -106,6 +106,12 @@ func (s *state8) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state8) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v8") + +} + func (s *state8) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { return nil, false, xerrors.Errorf("unsupported in actors v8") @@ -118,6 +124,12 @@ func (s *state8) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state8) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v8") + +} + func (s *state8) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { return nil, xerrors.Errorf("unsupported in actors v8") diff --git a/chain/actors/builtin/verifreg/v9.go b/chain/actors/builtin/verifreg/v9.go index ce63c7f94b4..8df4f72cc45 100644 --- a/chain/actors/builtin/verifreg/v9.go +++ b/chain/actors/builtin/verifreg/v9.go @@ -113,6 +113,12 @@ func (s *state9) GetAllocations(clientIdAddr address.Address) (map[AllocationId] } +func (s *state9) GetAllAllocations() (map[AllocationId]Allocation, error) { + + return nil, xerrors.Errorf("unsupported in actors v9") + +} + func (s *state9) GetClaim(providerIdAddr address.Address, claimId verifreg9.ClaimId) (*Claim, bool, error) { claim, ok, err := s.FindClaim(s.store, providerIdAddr, verifreg9.ClaimId(claimId)) @@ -133,6 +139,12 @@ func (s *state9) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e } +func (s *state9) GetAllClaims() (map[ClaimId]Claim, error) { + + return nil, xerrors.Errorf("unsupported in actors v9") + +} + func (s *state9) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) { v9Map, err := s.LoadClaimsToMap(s.store, providerIdAddr) diff --git a/chain/actors/builtin/verifreg/verifreg.go b/chain/actors/builtin/verifreg/verifreg.go index 4c1e66eb59b..2d66d90282d 100644 --- a/chain/actors/builtin/verifreg/verifreg.go +++ b/chain/actors/builtin/verifreg/verifreg.go @@ -147,8 +147,10 @@ type State interface { ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error GetAllocation(clientIdAddr address.Address, allocationId AllocationId) (*Allocation, bool, error) GetAllocations(clientIdAddr address.Address) (map[AllocationId]Allocation, error) + GetAllAllocations() (map[AllocationId]Allocation, error) GetClaim(providerIdAddr address.Address, claimId ClaimId) (*Claim, bool, error) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, error) + GetAllClaims() (map[ClaimId]Claim, error) GetClaimIdsBySector(providerIdAddr address.Address) (map[abi.SectorNumber][]ClaimId, error) GetState() interface{} } diff --git a/cli/filplus.go b/cli/filplus.go index 9fbd2a489ad..0970b0d9aeb 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -43,7 +43,9 @@ var filplusCmd = &cli.Command{ filplusCheckNotaryCmd, filplusSignRemoveDataCapProposal, filplusListAllocationsCmd, + filplusListAllAllocationsCmd, filplusListClaimsCmd, + filplusListAllClaimsCmd, filplusRemoveExpiredAllocationsCmd, filplusRemoveExpiredClaimsCmd, }, @@ -799,3 +801,149 @@ var filplusSignRemoveDataCapProposal = &cli.Command{ return nil }, } + +var filplusListAllAllocationsCmd = &cli.Command{ + Name: "list-all-allocations", + Usage: "List allocations available in the verified registry actor", + ArgsUsage: "clientAddress", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "expired", + Usage: "list only expired allocations", + }, + }, + Action: func(cctx *cli.Context) error { + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + + api, closer, err := GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer closer() + ctx := ReqContext(cctx) + + store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) + + verifregActor, err := api.StateGetActor(ctx, verifreg.Address, types.EmptyTSK) + if err != nil { + return err + } + + verifregState, err := verifreg.Load(store, verifregActor) + if err != nil { + return err + } + + ts, err := api.ChainHead(ctx) + if err != nil { + return err + } + + allocationsMap, err := verifregState.GetAllAllocations() + if err != nil { + return err + } + + tw := tablewriter.New( + tablewriter.Col("ID"), + tablewriter.Col("Provider"), + tablewriter.Col("Data"), + tablewriter.Col("Size"), + tablewriter.Col("TermMin"), + tablewriter.Col("TermMax"), + tablewriter.Col("Expiration"), + ) + + for allocationId, allocation := range allocationsMap { + if ts.Height() > allocation.Expiration || !cctx.IsSet("expired") { + tw.Write(map[string]interface{}{ + "ID": allocationId, + "Provider": allocation.Provider, + "Data": allocation.Data, + "Size": allocation.Size, + "TermMin": allocation.TermMin, + "TermMax": allocation.TermMax, + "Expiration": allocation.Expiration, + }) + } + } + return tw.Flush(os.Stdout) + }, +} + +var filplusListAllClaimsCmd = &cli.Command{ + Name: "list-all-claims", + Usage: "List claims available in the verified registry actor", + ArgsUsage: "providerAddress", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "expired", + Usage: "list only expired claims", + }, + }, + Action: func(cctx *cli.Context) error { + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + + api, closer, err := GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer closer() + ctx := ReqContext(cctx) + + store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) + + verifregActor, err := api.StateGetActor(ctx, verifreg.Address, types.EmptyTSK) + if err != nil { + return err + } + + verifregState, err := verifreg.Load(store, verifregActor) + if err != nil { + return err + } + + ts, err := api.ChainHead(ctx) + if err != nil { + return err + } + + claimsMap, err := verifregState.GetAllClaims() + if err != nil { + return err + } + + tw := tablewriter.New( + tablewriter.Col("ID"), + tablewriter.Col("Provider"), + tablewriter.Col("Client"), + tablewriter.Col("Data"), + tablewriter.Col("Size"), + tablewriter.Col("TermMin"), + tablewriter.Col("TermMax"), + tablewriter.Col("TermStart"), + tablewriter.Col("Sector"), + ) + + for claimId, claim := range claimsMap { + if ts.Height() > claim.TermMax || !cctx.IsSet("expired") { + tw.Write(map[string]interface{}{ + "ID": claimId, + "Provider": claim.Provider, + "Client": claim.Client, + "Data": claim.Data, + "Size": claim.Size, + "TermMin": claim.TermMin, + "TermMax": claim.TermMax, + "TermStart": claim.TermStart, + "Sector": claim.Sector, + }) + } + } + return tw.Flush(os.Stdout) + }, +} diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index e801a239098..19c3ca48195 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -170,6 +170,8 @@ * [StateDealProviderCollateralBounds](#StateDealProviderCollateralBounds) * [StateDecodeParams](#StateDecodeParams) * [StateGetActor](#StateGetActor) + * [StateGetAllAllocations](#StateGetAllAllocations) + * [StateGetAllClaims](#StateGetAllClaims) * [StateGetAllocation](#StateGetAllocation) * [StateGetAllocationForPendingDeal](#StateGetAllocationForPendingDeal) * [StateGetAllocations](#StateGetAllocations) @@ -5313,6 +5315,50 @@ Response: } ``` +### StateGetAllAllocations +StateGetAllAllocations returns the all the allocations available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + +### StateGetAllClaims +StateGetAllClaims returns the all the claims available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + ### StateGetAllocation StateGetAllocation returns the allocation for a given address and allocation ID. diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index d5349189e60..b4af70d3579 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -230,6 +230,8 @@ * [StateDecodeParams](#StateDecodeParams) * [StateEncodeParams](#StateEncodeParams) * [StateGetActor](#StateGetActor) + * [StateGetAllAllocations](#StateGetAllAllocations) + * [StateGetAllClaims](#StateGetAllClaims) * [StateGetAllocation](#StateGetAllocation) * [StateGetAllocationForPendingDeal](#StateGetAllocationForPendingDeal) * [StateGetAllocationIdForPendingDeal](#StateGetAllocationIdForPendingDeal) @@ -6892,6 +6894,50 @@ Response: } ``` +### StateGetAllAllocations +StateGetAllAllocations returns the all the allocations available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + +### StateGetAllClaims +StateGetAllClaims returns the all the claims available in verified registry actor. + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + ### StateGetAllocation StateGetAllocation returns the allocation for a given address and allocation ID. diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index ff62980dc31..0ef668758ff 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -1189,7 +1189,9 @@ COMMANDS: check-notary-datacap check a notary's remaining bytes sign-remove-data-cap-proposal allows a notary to sign a Remove Data Cap Proposal list-allocations List allocations made by client + list-all-allocations List allocations available in the verified registry actor list-claims List claims made by provider + list-all-claims List claims available in the verified registry actor remove-expired-allocations remove expired allocations (if no allocations are specified all eligible allocations are removed) remove-expired-claims remove expired claims (if no claims are specified all eligible claims are removed) help, h Shows a list of commands or help for one command @@ -1285,6 +1287,19 @@ OPTIONS: --help, -h show help ``` +### lotus filplus list-all-allocations +``` +NAME: + lotus filplus list-all-allocations - List allocations available in the verified registry actor + +USAGE: + lotus filplus list-all-allocations [command options] clientAddress + +OPTIONS: + --expired list only expired allocations (default: false) + --help, -h show help +``` + ### lotus filplus list-claims ``` NAME: @@ -1298,6 +1313,19 @@ OPTIONS: --help, -h show help ``` +### lotus filplus list-all-claims +``` +NAME: + lotus filplus list-all-claims - List claims available in the verified registry actor + +USAGE: + lotus filplus list-all-claims [command options] providerAddress + +OPTIONS: + --expired list only expired claims (default: false) + --help, -h show help +``` + ### lotus filplus remove-expired-allocations ``` NAME: diff --git a/gateway/node.go b/gateway/node.go index f2464d27496..4beec2c360f 100644 --- a/gateway/node.go +++ b/gateway/node.go @@ -81,8 +81,10 @@ type TargetAPI interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) + StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) + StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (api.MarketBalance, error) diff --git a/gateway/proxy_fil.go b/gateway/proxy_fil.go index eb8a354edc5..297cd1ca60d 100644 --- a/gateway/proxy_fil.go +++ b/gateway/proxy_fil.go @@ -630,3 +630,23 @@ func (gw *Node) StateGetClaims(ctx context.Context, providerAddr address.Address } return gw.target.StateGetClaims(ctx, providerAddr, tsk) } + +func (gw *Node) StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { + if err := gw.limit(ctx, stateRateLimitTokens); err != nil { + return nil, err + } + if err := gw.checkTipsetKey(ctx, tsk); err != nil { + return nil, err + } + return gw.target.StateGetAllAllocations(ctx, tsk) +} + +func (gw *Node) StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { + if err := gw.limit(ctx, stateRateLimitTokens); err != nil { + return nil, err + } + if err := gw.checkTipsetKey(ctx, tsk); err != nil { + return nil, err + } + return gw.target.StateGetAllClaims(ctx, tsk) +} diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 06e4a47c3ea..676935ff537 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -866,6 +866,25 @@ func (a *StateAPI) StateGetAllocations(ctx context.Context, clientAddr address.A return allocations, nil } +func (a *StateAPI) StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) { + ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + st, err := a.StateManager.GetVerifregState(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("loading verifreg state: %w", err) + } + + allocations, err := st.GetAllAllocations() + if err != nil { + return nil, xerrors.Errorf("getting all allocations: %w", err) + } + + return allocations, nil +} + func (a *StateAPI) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifreg.ClaimId, tsk types.TipSetKey) (*verifreg.Claim, error) { idAddr, err := a.StateLookupID(ctx, providerAddr, tsk) if err != nil { @@ -917,6 +936,25 @@ func (a *StateAPI) StateGetClaims(ctx context.Context, providerAddr address.Addr return claims, nil } +func (a *StateAPI) StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) { + ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + st, err := a.StateManager.GetVerifregState(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("loading verifreg state: %w", err) + } + + claims, err := st.GetAllClaims() + if err != nil { + return nil, xerrors.Errorf("getting all claims: %w", err) + } + + return claims, nil +} + func (a *StateAPI) StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) { nv, err := a.StateNetworkVersion(ctx, tsk) if err != nil { From 2b410e28756529297cda8ff1e35868883ce1a1eb Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Mon, 19 Feb 2024 19:09:30 +0400 Subject: [PATCH 2/6] update changelog and add itest --- CHANGELOG.md | 2 + itests/verifreg_test.go | 137 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88ccfa97101..c7622290887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -106,6 +106,8 @@ For more information on how to use SupraSeal PC2 with your `lotus-worker`, as we - feat: metric: export Mpool message count ([filecoin-project/lotus#11361](https://github.com/filecoin-project/lotus/pull/11361)) - Adds the mpool count as a prometheus metric. - feat: bench: flag to output GenerateWinningPoStWithVanilla params ([filecoin-project/lotus#11460](https://github.com/filecoin-project/lotus/pull/11460)) +- feat: api: new verified registry methods to get all allocations and claims ([filecoin-project/lotus#11631](https://github.com/filecoin-project/lotus/pull/11631)) + - Add `StateGetAllAllocations` and `StateGetAllClaims` APIs ## Improvements - feat: bootstrap: add glif bootstrap node on calibration ([filecoin-project/lotus#11175](https://github.com/filecoin-project/lotus/pull/11175)) diff --git a/itests/verifreg_test.go b/itests/verifreg_test.go index ffe50c72b19..856e2182a56 100644 --- a/itests/verifreg_test.go +++ b/itests/verifreg_test.go @@ -503,3 +503,140 @@ func makeVerifier(ctx context.Context, t *testing.T, api *impl.FullNodeAPI, root require.NoError(t, err) require.Equal(t, allowance, *verifierAllowance) } + +func TestVerifiedListAllAllocations(t *testing.T) { + blockTime := 100 * time.Millisecond + + rootKey, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifier1Key, err := key.GenerateKey(types.KTSecp256k1) + require.NoError(t, err) + + verifiedClientKey, err := key.GenerateKey(types.KTBLS) + require.NoError(t, err) + + bal, err := types.ParseFIL("100fil") + require.NoError(t, err) + + node, miner, ens := kit.EnsembleMinimal(t, kit.MockProofs(), + kit.RootVerifier(rootKey, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifier1Key, abi.NewTokenAmount(bal.Int64())), + kit.Account(verifiedClientKey, abi.NewTokenAmount(bal.Int64())), + ) + + ens.InterconnectAll().BeginMining(blockTime) + + api := node.FullNode.(*impl.FullNodeAPI) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // get VRH + vrh, err := api.StateVerifiedRegistryRootKey(ctx, types.TipSetKey{}) + fmt.Println(vrh.String()) + require.NoError(t, err) + + // import the root key. + rootAddr, err := api.WalletImport(ctx, &rootKey.KeyInfo) + require.NoError(t, err) + + // import the verifiers' keys. + verifier1Addr, err := api.WalletImport(ctx, &verifier1Key.KeyInfo) + require.NoError(t, err) + + // import the verified client's key. + verifiedClientAddr, err := api.WalletImport(ctx, &verifiedClientKey.KeyInfo) + require.NoError(t, err) + + // resolve all keys + + // make the 2 verifiers + + makeVerifier(ctx, t, api, rootAddr, verifier1Addr) + + // assign datacap to a client + initialDatacap := big.NewInt(20000) + + params, err := actors.SerializeParams(&verifregst.AddVerifiedClientParams{Address: verifiedClientAddr, Allowance: initialDatacap}) + require.NoError(t, err) + + msg := &types.Message{ + From: verifier1Addr, + To: verifreg.Address, + Method: verifreg.Methods.AddVerifiedClient, + Params: params, + Value: big.Zero(), + } + + sm, err := api.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err := api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + // check datacap balance + dcap, err := api.StateVerifiedClientStatus(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, *dcap, initialDatacap) + + minerId, err := address.IDFromAddress(miner.ActorAddr) + require.NoError(t, err) + + allocationRequest1 := verifregst.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: cid.MustParse("bafkqaaa"), + Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), + TermMin: verifregst.MinimumVerifiedAllocationTerm, + TermMax: verifregst.MinimumVerifiedAllocationTerm, + Expiration: verifregst.MaximumVerifiedAllocationExpiration, + } + + allocationRequest2 := verifregst.AllocationRequest{ + Provider: abi.ActorID(minerId), + Data: cid.MustParse("bafkqaaa"), + Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), + TermMin: verifregst.MinimumVerifiedAllocationTerm, + TermMax: verifregst.MinimumVerifiedAllocationTerm, + Expiration: verifregst.MaximumVerifiedAllocationExpiration, + } + + allocationRequests := verifregst.AllocationRequests{ + Allocations: []verifregst.AllocationRequest{allocationRequest1, allocationRequest2}, + } + + receiverParams, err := actors.SerializeParams(&allocationRequests) + require.NoError(t, err) + + transferParams, err := actors.SerializeParams(&datacap2.TransferParams{ + To: builtin.VerifiedRegistryActorAddr, + Amount: big.Mul(initialDatacap, builtin.TokenPrecision), + OperatorData: receiverParams, + }) + require.NoError(t, err) + + msg = &types.Message{ + To: builtin.DatacapActorAddr, + From: verifiedClientAddr, + Method: datacap.Methods.TransferExported, + Params: transferParams, + Value: big.Zero(), + } + + sm, err = api.MpoolPushMessage(ctx, msg, nil) + require.NoError(t, err) + + res, err = api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true) + require.NoError(t, err) + require.EqualValues(t, 0, res.Receipt.ExitCode) + + // check datacap balance + dcap, err = api.StateVerifiedClientStatus(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + require.Nil(t, dcap) + + allocations, err := api.StateGetAllAllocations(ctx, types.EmptyTSK) + require.NoError(t, err) + + require.Equal(t, 2, len(allocations)) +} From bc7545d863be20cfc47f4e38b7dae8ca4cb86567 Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Tue, 20 Feb 2024 15:13:22 +0400 Subject: [PATCH 3/6] update itest and cli --- cli/filplus.go | 414 ++++++++++++++++------------------ cli/util.go | 12 + documentation/en/cli-lotus.md | 37 +-- itests/verifreg_test.go | 24 +- 4 files changed, 230 insertions(+), 257 deletions(-) diff --git a/cli/filplus.go b/cli/filplus.go index 0970b0d9aeb..f629075f94e 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -7,6 +7,7 @@ import ( "fmt" "os" "strconv" + "strings" cbor "github.com/ipfs/go-ipld-cbor" "github.com/urfave/cli/v2" @@ -43,9 +44,7 @@ var filplusCmd = &cli.Command{ filplusCheckNotaryCmd, filplusSignRemoveDataCapProposal, filplusListAllocationsCmd, - filplusListAllAllocationsCmd, filplusListClaimsCmd, - filplusListAllClaimsCmd, filplusRemoveExpiredAllocationsCmd, filplusRemoveExpiredClaimsCmd, }, @@ -235,16 +234,21 @@ var filplusListClientsCmd = &cli.Command{ var filplusListAllocationsCmd = &cli.Command{ Name: "list-allocations", - Usage: "List allocations made by client", + Usage: "List allocations available in verified registry actor or made by a client if specified", ArgsUsage: "clientAddress", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "expired", Usage: "list only expired allocations", }, + &cli.BoolFlag{ + Name: "json", + Usage: "output results in json format", + Value: false, + }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } @@ -255,14 +259,77 @@ var filplusListAllocationsCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - clientAddr, err := address.NewFromString(cctx.Args().Get(0)) - if err != nil { - return err - } + writeOut := func(tsHeight abi.ChainEpoch, allocations map[verifreg.AllocationId]verifreg.Allocation, json, expired bool) error { + // Map Keys. Corresponds to the standard tablewriter output + allocationID := "AllocationID" + client := "Client" + provider := "Miner" + pieceCid := "PieceCid" + pieceSize := "PieceSize" + tMin := "TermMin" + tMax := "TermMax" + expr := "Expiration" + + // One-to-one mapping between tablewriter keys and JSON keys + tableKeysToJsonKeys := map[string]string{ + allocationID: strings.ToLower(allocationID), + client: strings.ToLower(client), + provider: strings.ToLower(provider), + pieceCid: strings.ToLower(pieceCid), + pieceSize: strings.ToLower(pieceSize), + tMin: strings.ToLower(tMin), + tMax: strings.ToLower(tMax), + expr: strings.ToLower(expr), + } - clientIdAddr, err := api.StateLookupID(ctx, clientAddr, types.EmptyTSK) - if err != nil { - return err + var allocs []map[string]interface{} + + for key, val := range allocations { + if tsHeight > val.Expiration || !expired { + alloc := map[string]interface{}{ + allocationID: key, + client: val.Client, + provider: val.Provider, + pieceCid: val.Data, + pieceSize: val.Size, + tMin: val.TermMin, + tMax: val.TermMax, + expr: val.Expiration, + } + allocs = append(allocs, alloc) + } + } + + if json { + // get a new list of wallets with json keys instead of tablewriter keys + var jsonAllocs []map[string]interface{} + for _, alloc := range allocs { + jsonAlloc := make(map[string]interface{}) + for k, v := range alloc { + jsonAlloc[tableKeysToJsonKeys[k]] = v + } + jsonAllocs = append(jsonAllocs, jsonAlloc) + } + // then return this! + return PrintJson(jsonAllocs) + } + // Init the tablewriter's columns + tw := tablewriter.New( + tablewriter.Col(allocationID), + tablewriter.Col(client), + tablewriter.Col(provider), + tablewriter.Col(pieceCid), + tablewriter.Col(pieceSize), + tablewriter.Col(tMin), + tablewriter.Col(tMax), + tablewriter.NewLineCol(expr)) + // populate it with content + for _, alloc := range allocs { + + tw.Write(alloc) + } + // return the corresponding string + return tw.Flush(os.Stdout) } store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) @@ -282,41 +349,38 @@ var filplusListAllocationsCmd = &cli.Command{ return err } - allocationsMap, err := verifregState.GetAllocations(clientIdAddr) + if cctx.NArg() == 1 { + clientAddr, err := address.NewFromString(cctx.Args().Get(0)) + if err != nil { + return err + } + + clientIdAddr, err := api.StateLookupID(ctx, clientAddr, types.EmptyTSK) + if err != nil { + return err + } + + allocationsMap, err := verifregState.GetAllocations(clientIdAddr) + if err != nil { + return err + } + + return writeOut(ts.Height(), allocationsMap, cctx.Bool("json"), cctx.Bool("expired")) + } + + allocationsMap, err := verifregState.GetAllAllocations() if err != nil { return err } - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("Expiration"), - ) + return writeOut(ts.Height(), allocationsMap, cctx.Bool("json"), cctx.Bool("expired")) - for allocationId, allocation := range allocationsMap { - if ts.Height() > allocation.Expiration || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": allocationId, - "Provider": allocation.Provider, - "Data": allocation.Data, - "Size": allocation.Size, - "TermMin": allocation.TermMin, - "TermMax": allocation.TermMax, - "Expiration": allocation.Expiration, - }) - } - } - return tw.Flush(os.Stdout) }, } var filplusListClaimsCmd = &cli.Command{ Name: "list-claims", - Usage: "List claims made by provider", + Usage: "List claims available in verified registry actor or made by provider if specified", ArgsUsage: "providerAddress", Flags: []cli.Flag{ &cli.BoolFlag{ @@ -325,7 +389,7 @@ var filplusListClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } @@ -336,14 +400,81 @@ var filplusListClaimsCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - providerAddr, err := address.NewFromString(cctx.Args().Get(0)) - if err != nil { - return err - } + writeOut := func(tsHeight abi.ChainEpoch, claims map[verifreg.ClaimId]verifreg.Claim, json, expired bool) error { + // Map Keys. Corresponds to the standard tablewriter output + allocationID := "ClaimID" + provider := "Provider" + client := "Client" + data := "Data" + size := "Size" + tMin := "TermMin" + tMax := "TermMax" + tStart := "TermStart" + sector := "Sector" + + // One-to-one mapping between tablewriter keys and JSON keys + tableKeysToJsonKeys := map[string]string{ + allocationID: strings.ToLower(allocationID), + provider: strings.ToLower(provider), + client: strings.ToLower(client), + data: strings.ToLower(data), + size: strings.ToLower(size), + tMin: strings.ToLower(tMin), + tMax: strings.ToLower(tMax), + tStart: strings.ToLower(tStart), + sector: strings.ToLower(sector), + } - providerIdAddr, err := api.StateLookupID(ctx, providerAddr, types.EmptyTSK) - if err != nil { - return err + var allocs []map[string]interface{} + + for key, val := range claims { + if tsHeight > val.TermMax || !expired { + alloc := map[string]interface{}{ + allocationID: key, + provider: val.Provider, + client: val.Client, + data: val.Data, + size: val.Size, + tMin: val.TermMin, + tMax: val.TermMax, + tStart: val.TermStart, + sector: val.Sector, + } + allocs = append(allocs, alloc) + } + } + + if json { + // get a new list of wallets with json keys instead of tablewriter keys + var jsonAllocs []map[string]interface{} + for _, alloc := range allocs { + jsonAlloc := make(map[string]interface{}) + for k, v := range alloc { + jsonAlloc[tableKeysToJsonKeys[k]] = v + } + jsonAllocs = append(jsonAllocs, jsonAlloc) + } + // then return this! + return PrintJson(jsonAllocs) + } + // Init the tablewriter's columns + tw := tablewriter.New( + tablewriter.Col(allocationID), + tablewriter.Col(client), + tablewriter.Col(provider), + tablewriter.Col(data), + tablewriter.Col(size), + tablewriter.Col(tMin), + tablewriter.Col(tMax), + tablewriter.Col(tStart), + tablewriter.NewLineCol(sector)) + // populate it with content + for _, alloc := range allocs { + + tw.Write(alloc) + } + // return the corresponding string + return tw.Flush(os.Stdout) } store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) @@ -363,39 +494,32 @@ var filplusListClaimsCmd = &cli.Command{ return err } - claimsMap, err := verifregState.GetClaims(providerIdAddr) + if cctx.NArg() == 1 { + providerAddr, err := address.NewFromString(cctx.Args().Get(0)) + if err != nil { + return err + } + + providerIdAddr, err := api.StateLookupID(ctx, providerAddr, types.EmptyTSK) + if err != nil { + return err + } + + claimsMap, err := verifregState.GetClaims(providerIdAddr) + if err != nil { + return err + } + + return writeOut(ts.Height(), claimsMap, cctx.Bool("json"), cctx.Bool("expired")) + } + + claimsMap, err := verifregState.GetAllClaims() if err != nil { return err } - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Client"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("TermStart"), - tablewriter.Col("Sector"), - ) + return writeOut(ts.Height(), claimsMap, cctx.Bool("json"), cctx.Bool("expired")) - for claimId, claim := range claimsMap { - if ts.Height() > claim.TermMax || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": claimId, - "Provider": claim.Provider, - "Client": claim.Client, - "Data": claim.Data, - "Size": claim.Size, - "TermMin": claim.TermMin, - "TermMax": claim.TermMax, - "TermStart": claim.TermStart, - "Sector": claim.Sector, - }) - } - } - return tw.Flush(os.Stdout) }, } @@ -801,149 +925,3 @@ var filplusSignRemoveDataCapProposal = &cli.Command{ return nil }, } - -var filplusListAllAllocationsCmd = &cli.Command{ - Name: "list-all-allocations", - Usage: "List allocations available in the verified registry actor", - ArgsUsage: "clientAddress", - Flags: []cli.Flag{ - &cli.BoolFlag{ - Name: "expired", - Usage: "list only expired allocations", - }, - }, - Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - - api, closer, err := GetFullNodeAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - - store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) - - verifregActor, err := api.StateGetActor(ctx, verifreg.Address, types.EmptyTSK) - if err != nil { - return err - } - - verifregState, err := verifreg.Load(store, verifregActor) - if err != nil { - return err - } - - ts, err := api.ChainHead(ctx) - if err != nil { - return err - } - - allocationsMap, err := verifregState.GetAllAllocations() - if err != nil { - return err - } - - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("Expiration"), - ) - - for allocationId, allocation := range allocationsMap { - if ts.Height() > allocation.Expiration || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": allocationId, - "Provider": allocation.Provider, - "Data": allocation.Data, - "Size": allocation.Size, - "TermMin": allocation.TermMin, - "TermMax": allocation.TermMax, - "Expiration": allocation.Expiration, - }) - } - } - return tw.Flush(os.Stdout) - }, -} - -var filplusListAllClaimsCmd = &cli.Command{ - Name: "list-all-claims", - Usage: "List claims available in the verified registry actor", - ArgsUsage: "providerAddress", - Flags: []cli.Flag{ - &cli.BoolFlag{ - Name: "expired", - Usage: "list only expired claims", - }, - }, - Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - - api, closer, err := GetFullNodeAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - - store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) - - verifregActor, err := api.StateGetActor(ctx, verifreg.Address, types.EmptyTSK) - if err != nil { - return err - } - - verifregState, err := verifreg.Load(store, verifregActor) - if err != nil { - return err - } - - ts, err := api.ChainHead(ctx) - if err != nil { - return err - } - - claimsMap, err := verifregState.GetAllClaims() - if err != nil { - return err - } - - tw := tablewriter.New( - tablewriter.Col("ID"), - tablewriter.Col("Provider"), - tablewriter.Col("Client"), - tablewriter.Col("Data"), - tablewriter.Col("Size"), - tablewriter.Col("TermMin"), - tablewriter.Col("TermMax"), - tablewriter.Col("TermStart"), - tablewriter.Col("Sector"), - ) - - for claimId, claim := range claimsMap { - if ts.Height() > claim.TermMax || !cctx.IsSet("expired") { - tw.Write(map[string]interface{}{ - "ID": claimId, - "Provider": claim.Provider, - "Client": claim.Client, - "Data": claim.Data, - "Size": claim.Size, - "TermMin": claim.TermMin, - "TermMax": claim.TermMax, - "TermStart": claim.TermStart, - "Sector": claim.Sector, - }) - } - } - return tw.Flush(os.Stdout) - }, -} diff --git a/cli/util.go b/cli/util.go index 03de817f9b1..de161f59085 100644 --- a/cli/util.go +++ b/cli/util.go @@ -2,6 +2,8 @@ package cli import ( "context" + "encoding/json" + "fmt" "os" "github.com/fatih/color" @@ -37,3 +39,13 @@ func parseTipSet(ctx context.Context, api v0api.FullNode, vals []string) (*types return types.NewTipSet(headers) } + +func PrintJson(obj interface{}) error { + resJson, err := json.MarshalIndent(obj, "", " ") + if err != nil { + return fmt.Errorf("marshalling json: %w", err) + } + + fmt.Println(string(resJson)) + return nil +} diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 0ef668758ff..96f56642b13 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -1188,10 +1188,8 @@ COMMANDS: check-client-datacap check verified client remaining bytes check-notary-datacap check a notary's remaining bytes sign-remove-data-cap-proposal allows a notary to sign a Remove Data Cap Proposal - list-allocations List allocations made by client - list-all-allocations List allocations available in the verified registry actor - list-claims List claims made by provider - list-all-claims List claims available in the verified registry actor + list-allocations List allocations available in verified registry actor or made by a client if specified + list-claims List claims available in verified registry actor or made by provider if specified remove-expired-allocations remove expired allocations (if no allocations are specified all eligible allocations are removed) remove-expired-claims remove expired claims (if no claims are specified all eligible claims are removed) help, h Shows a list of commands or help for one command @@ -1277,33 +1275,21 @@ OPTIONS: ### lotus filplus list-allocations ``` NAME: - lotus filplus list-allocations - List allocations made by client + lotus filplus list-allocations - List allocations available in verified registry actor or made by a client if specified USAGE: lotus filplus list-allocations [command options] clientAddress OPTIONS: --expired list only expired allocations (default: false) - --help, -h show help -``` - -### lotus filplus list-all-allocations -``` -NAME: - lotus filplus list-all-allocations - List allocations available in the verified registry actor - -USAGE: - lotus filplus list-all-allocations [command options] clientAddress - -OPTIONS: - --expired list only expired allocations (default: false) + --json output results in json format (default: false) --help, -h show help ``` ### lotus filplus list-claims ``` NAME: - lotus filplus list-claims - List claims made by provider + lotus filplus list-claims - List claims available in verified registry actor or made by provider if specified USAGE: lotus filplus list-claims [command options] providerAddress @@ -1313,19 +1299,6 @@ OPTIONS: --help, -h show help ``` -### lotus filplus list-all-claims -``` -NAME: - lotus filplus list-all-claims - List claims available in the verified registry actor - -USAGE: - lotus filplus list-all-claims [command options] providerAddress - -OPTIONS: - --expired list only expired claims (default: false) - --help, -h show help -``` - ### lotus filplus remove-expired-allocations ``` NAME: diff --git a/itests/verifreg_test.go b/itests/verifreg_test.go index 856e2182a56..902ad523e23 100644 --- a/itests/verifreg_test.go +++ b/itests/verifreg_test.go @@ -585,7 +585,7 @@ func TestVerifiedListAllAllocations(t *testing.T) { allocationRequest1 := verifregst.AllocationRequest{ Provider: abi.ActorID(minerId), - Data: cid.MustParse("bafkqaaa"), + Data: cid.MustParse("baga6ea4seaaqa"), Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), TermMin: verifregst.MinimumVerifiedAllocationTerm, TermMax: verifregst.MinimumVerifiedAllocationTerm, @@ -594,7 +594,7 @@ func TestVerifiedListAllAllocations(t *testing.T) { allocationRequest2 := verifregst.AllocationRequest{ Provider: abi.ActorID(minerId), - Data: cid.MustParse("bafkqaaa"), + Data: cid.MustParse("baga6ea4seaaqc"), Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2), TermMin: verifregst.MinimumVerifiedAllocationTerm, TermMax: verifregst.MinimumVerifiedAllocationTerm, @@ -630,13 +630,23 @@ func TestVerifiedListAllAllocations(t *testing.T) { require.NoError(t, err) require.EqualValues(t, 0, res.Receipt.ExitCode) - // check datacap balance - dcap, err = api.StateVerifiedClientStatus(ctx, verifiedClientAddr, types.EmptyTSK) - require.NoError(t, err) - require.Nil(t, dcap) - allocations, err := api.StateGetAllAllocations(ctx, types.EmptyTSK) require.NoError(t, err) require.Equal(t, 2, len(allocations)) + + var pcids []string + + for _, a := range allocations { + clientIdAddr, err := api.StateLookupID(ctx, verifiedClientAddr, types.EmptyTSK) + require.NoError(t, err) + clientId, err := address.IDFromAddress(clientIdAddr) + require.NoError(t, err) + require.Equal(t, abi.ActorID(clientId), a.Client) + require.Equal(t, abi.ActorID(minerId), a.Provider) + require.Equal(t, abi.PaddedPieceSize(10000), a.Size) + pcids = append(pcids, a.Data.String()) + } + + require.ElementsMatch(t, []string{"baga6ea4seaaqa", "baga6ea4seaaqc"}, pcids) } From 20ffef1eb31ba85bbebb19238fea78affba2e1c2 Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Wed, 21 Feb 2024 13:29:41 +0400 Subject: [PATCH 4/6] update new method's support till v9 --- .../actors/builtin/verifreg/state.go.template | 4 ++-- chain/actors/builtin/verifreg/v10.go | 18 ++++++++++++++++-- chain/actors/builtin/verifreg/v11.go | 18 ++++++++++++++++-- chain/actors/builtin/verifreg/v12.go | 18 ++++++++++++++++-- chain/actors/builtin/verifreg/v9.go | 18 ++++++++++++++++-- itests/verifreg_test.go | 4 +++- 6 files changed, 69 insertions(+), 11 deletions(-) diff --git a/chain/actors/builtin/verifreg/state.go.template b/chain/actors/builtin/verifreg/state.go.template index 840fa71354d..7835b16b640 100644 --- a/chain/actors/builtin/verifreg/state.go.template +++ b/chain/actors/builtin/verifreg/state.go.template @@ -146,7 +146,7 @@ func (s *state{{.v}}) GetAllocations(clientIdAddr address.Address) (map[Allocati } func (s *state{{.v}}) GetAllAllocations() (map[AllocationId]Allocation, error) { -{{if (le .v 12)}} +{{if (le .v 8)}} return nil, xerrors.Errorf("unsupported in actors v{{.v}}") {{else}} v{{.v}}Map, err := s.State.GetAllAllocations(s.store) @@ -186,7 +186,7 @@ func (s *state{{.v}}) GetClaims(providerIdAddr address.Address) (map[ClaimId]Cla } func (s *state{{.v}}) GetAllClaims() (map[ClaimId]Claim, error) { -{{if (le .v 12)}} +{{if (le .v 8)}} return nil, xerrors.Errorf("unsupported in actors v{{.v}}") {{else}} v{{.v}}Map, err := s.State.GetAllClaims(s.store) diff --git a/chain/actors/builtin/verifreg/v10.go b/chain/actors/builtin/verifreg/v10.go index 0e0556b79a5..85f85c7f2c9 100644 --- a/chain/actors/builtin/verifreg/v10.go +++ b/chain/actors/builtin/verifreg/v10.go @@ -116,7 +116,14 @@ func (s *state10) GetAllocations(clientIdAddr address.Address) (map[AllocationId func (s *state10) GetAllAllocations() (map[AllocationId]Allocation, error) { - return nil, xerrors.Errorf("unsupported in actors v10") + v10Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v10Map)) + for k, v := range v10Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err } @@ -142,7 +149,14 @@ func (s *state10) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, func (s *state10) GetAllClaims() (map[ClaimId]Claim, error) { - return nil, xerrors.Errorf("unsupported in actors v10") + v10Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v10Map)) + for k, v := range v10Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err } diff --git a/chain/actors/builtin/verifreg/v11.go b/chain/actors/builtin/verifreg/v11.go index 4ec9b33f354..5a8e1cb0cc8 100644 --- a/chain/actors/builtin/verifreg/v11.go +++ b/chain/actors/builtin/verifreg/v11.go @@ -116,7 +116,14 @@ func (s *state11) GetAllocations(clientIdAddr address.Address) (map[AllocationId func (s *state11) GetAllAllocations() (map[AllocationId]Allocation, error) { - return nil, xerrors.Errorf("unsupported in actors v11") + v11Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v11Map)) + for k, v := range v11Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err } @@ -142,7 +149,14 @@ func (s *state11) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, func (s *state11) GetAllClaims() (map[ClaimId]Claim, error) { - return nil, xerrors.Errorf("unsupported in actors v11") + v11Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v11Map)) + for k, v := range v11Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err } diff --git a/chain/actors/builtin/verifreg/v12.go b/chain/actors/builtin/verifreg/v12.go index fbd3b7ca6ce..7c9a493f169 100644 --- a/chain/actors/builtin/verifreg/v12.go +++ b/chain/actors/builtin/verifreg/v12.go @@ -116,7 +116,14 @@ func (s *state12) GetAllocations(clientIdAddr address.Address) (map[AllocationId func (s *state12) GetAllAllocations() (map[AllocationId]Allocation, error) { - return nil, xerrors.Errorf("unsupported in actors v12") + v12Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v12Map)) + for k, v := range v12Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err } @@ -142,7 +149,14 @@ func (s *state12) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, func (s *state12) GetAllClaims() (map[ClaimId]Claim, error) { - return nil, xerrors.Errorf("unsupported in actors v12") + v12Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v12Map)) + for k, v := range v12Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err } diff --git a/chain/actors/builtin/verifreg/v9.go b/chain/actors/builtin/verifreg/v9.go index 8df4f72cc45..41422615bcc 100644 --- a/chain/actors/builtin/verifreg/v9.go +++ b/chain/actors/builtin/verifreg/v9.go @@ -115,7 +115,14 @@ func (s *state9) GetAllocations(clientIdAddr address.Address) (map[AllocationId] func (s *state9) GetAllAllocations() (map[AllocationId]Allocation, error) { - return nil, xerrors.Errorf("unsupported in actors v9") + v9Map, err := s.State.GetAllAllocations(s.store) + + retMap := make(map[AllocationId]Allocation, len(v9Map)) + for k, v := range v9Map { + retMap[AllocationId(k)] = Allocation(v) + } + + return retMap, err } @@ -141,7 +148,14 @@ func (s *state9) GetClaims(providerIdAddr address.Address) (map[ClaimId]Claim, e func (s *state9) GetAllClaims() (map[ClaimId]Claim, error) { - return nil, xerrors.Errorf("unsupported in actors v9") + v9Map, err := s.State.GetAllClaims(s.store) + + retMap := make(map[ClaimId]Claim, len(v9Map)) + for k, v := range v9Map { + retMap[ClaimId(k)] = Claim(v) + } + + return retMap, err } diff --git a/itests/verifreg_test.go b/itests/verifreg_test.go index 902ad523e23..07a31477d75 100644 --- a/itests/verifreg_test.go +++ b/itests/verifreg_test.go @@ -504,7 +504,7 @@ func makeVerifier(ctx context.Context, t *testing.T, api *impl.FullNodeAPI, root require.Equal(t, allowance, *verifierAllowance) } -func TestVerifiedListAllAllocations(t *testing.T) { +func TestVerifiedListAllAllocationsAndClaims(t *testing.T) { blockTime := 100 * time.Millisecond rootKey, err := key.GenerateKey(types.KTSecp256k1) @@ -649,4 +649,6 @@ func TestVerifiedListAllAllocations(t *testing.T) { } require.ElementsMatch(t, []string{"baga6ea4seaaqa", "baga6ea4seaaqc"}, pcids) + + // TODO: Add claims check to this test once https://github.com/filecoin-project/lotus/pull/11618 lands } From 09c1b5f6888ea453f86ecac849508a4e1f910a3e Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Thu, 22 Feb 2024 12:37:54 +0400 Subject: [PATCH 5/6] remove gateway APIs --- CHANGELOG.md | 37 +++++++++++++++++++++++++++++++--- api/api_gateway.go | 2 -- api/proxy_gen.go | 26 ------------------------ api/v0api/gateway.go | 2 -- api/v0api/proxy_gen.go | 26 ------------------------ build/openrpc/full.json.gz | Bin 35158 -> 35157 bytes build/openrpc/gateway.json.gz | Bin 12033 -> 11916 bytes build/openrpc/miner.json.gz | Bin 16481 -> 16482 bytes build/openrpc/worker.json.gz | Bin 6050 -> 6049 bytes gateway/node.go | 2 -- gateway/proxy_fil.go | 20 ------------------ 11 files changed, 34 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7622290887..3b1c8cb847d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,9 +47,42 @@ Replace the `CodeCid` field in the message trace (added in 1.23.4) with an `Invo "Subcalls": [], } ``` - This means the trace now contains an accurate "snapshot" of the actor at the time of the call, information that may not be present in the final state-tree (e.g., due to reverts). This will hopefully improve the performance and accuracy of indexing services. +### Lotus API +2 new methods have benn added to the Lotus API called `GetAllAllocations` and `GetAllClaims` which lists all the available allocations and claims available in the actor state. + +### Lotus CLI +The `filplus` commands used for listing allocations and claims have been updated. If no argument is provided to the either command, they will list out all the allocations and claims in the verified registry actor. +The output list columns have been modified to `AllocationID` and `ClaimID` instead of ID. + +```shell +lotus filplus list-allocations --help +NAME: + lotus filplus list-allocations - List allocations available in verified registry actor or made by a client if specified + +USAGE: + lotus filplus list-allocations [command options] clientAddress + +OPTIONS: + --expired list only expired allocations (default: false) + --json output results in json format (default: false) + --help, -h show help + + +lotus filplus list-claims --help +NAME: + lotus filplus list-claims - List claims available in verified registry actor or made by provider if specified + +USAGE: + lotus filplus list-claims [command options] providerAddress + +OPTIONS: + --expired list only expired claims (default: false) + --help, -h show help +``` + + # v1.25.2 / 2024-01-11 This is an optional but **highly recommended feature release** of Lotus, as it includes fixes for synchronizations issues that users have experienced. The feature release also introduces `Lotus-Provider` in its alpha testing phase, as well as the ability to call external PC2-binaries during the sealing process. @@ -106,8 +139,6 @@ For more information on how to use SupraSeal PC2 with your `lotus-worker`, as we - feat: metric: export Mpool message count ([filecoin-project/lotus#11361](https://github.com/filecoin-project/lotus/pull/11361)) - Adds the mpool count as a prometheus metric. - feat: bench: flag to output GenerateWinningPoStWithVanilla params ([filecoin-project/lotus#11460](https://github.com/filecoin-project/lotus/pull/11460)) -- feat: api: new verified registry methods to get all allocations and claims ([filecoin-project/lotus#11631](https://github.com/filecoin-project/lotus/pull/11631)) - - Add `StateGetAllAllocations` and `StateGetAllClaims` APIs ## Improvements - feat: bootstrap: add glif bootstrap node on calibration ([filecoin-project/lotus#11175](https://github.com/filecoin-project/lotus/pull/11175)) diff --git a/api/api_gateway.go b/api/api_gateway.go index a5eb48623be..238bf43abfe 100644 --- a/api/api_gateway.go +++ b/api/api_gateway.go @@ -69,10 +69,8 @@ type Gateway interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) - StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) - StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 8493b3203b5..e4db0fb93d1 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -785,10 +785,6 @@ type GatewayMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `` - StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `` - - StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `` - StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `` @@ -4997,28 +4993,6 @@ func (s *GatewayStub) StateGetActor(p0 context.Context, p1 address.Address, p2 t return nil, ErrNotSupported } -func (s *GatewayStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { - if s.Internal.StateGetAllAllocations == nil { - return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported - } - return s.Internal.StateGetAllAllocations(p0, p1) -} - -func (s *GatewayStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { - return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported -} - -func (s *GatewayStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { - if s.Internal.StateGetAllClaims == nil { - return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported - } - return s.Internal.StateGetAllClaims(p0, p1) -} - -func (s *GatewayStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { - return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported -} - func (s *GatewayStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported diff --git a/api/v0api/gateway.go b/api/v0api/gateway.go index d038f0d8a42..1a7f7d3ac92 100644 --- a/api/v0api/gateway.go +++ b/api/v0api/gateway.go @@ -65,10 +65,8 @@ type Gateway interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) - StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) - StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index 79f7a60ff86..90c25d4a774 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -482,10 +482,6 @@ type GatewayMethods struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `` - StateGetAllAllocations func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `` - - StateGetAllClaims func(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `` - StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `` StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `` @@ -2890,28 +2886,6 @@ func (s *GatewayStub) StateGetActor(p0 context.Context, p1 address.Address, p2 t return nil, ErrNotSupported } -func (s *GatewayStruct) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { - if s.Internal.StateGetAllAllocations == nil { - return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported - } - return s.Internal.StateGetAllAllocations(p0, p1) -} - -func (s *GatewayStub) StateGetAllAllocations(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { - return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported -} - -func (s *GatewayStruct) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { - if s.Internal.StateGetAllClaims == nil { - return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported - } - return s.Internal.StateGetAllClaims(p0, p1) -} - -func (s *GatewayStub) StateGetAllClaims(p0 context.Context, p1 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { - return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported -} - func (s *GatewayStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) { if s.Internal.StateGetAllocation == nil { return nil, ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 0e6efa1daf24ce3712c5bfcf661346372ddd8026..1120e15f258405ee24852391827c0392068fb38f 100644 GIT binary patch delta 33785 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

>e*xx#r_%UYWr1i+kee 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 ae`o90ub;pE4u1du0RR6UOyGCk6$b#R^1QYH diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index aedf7e1cede17d47fae72b9492baa1d55749c7fd..c69b25f1e3c06d1bb4766caf7b546dfca2695c73 100644 GIT binary patch delta 10287 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 x%p3Q=Ws%cmLX2H`yy-%OX=?nK;Y>4;+h(~ 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 Skwrp!dGR{bzH&E0M*2U$a@JV@ literal 6050 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 Zs{^S1;oz^BCjbBjGr^d%=xc!m_zw;a$nF3D diff --git a/gateway/node.go b/gateway/node.go index 4beec2c360f..f2464d27496 100644 --- a/gateway/node.go +++ b/gateway/node.go @@ -81,10 +81,8 @@ type TargetAPI interface { StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) - StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) - StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (api.MarketBalance, error) diff --git a/gateway/proxy_fil.go b/gateway/proxy_fil.go index 297cd1ca60d..eb8a354edc5 100644 --- a/gateway/proxy_fil.go +++ b/gateway/proxy_fil.go @@ -630,23 +630,3 @@ func (gw *Node) StateGetClaims(ctx context.Context, providerAddr address.Address } return gw.target.StateGetClaims(ctx, providerAddr, tsk) } - -func (gw *Node) StateGetAllAllocations(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) { - if err := gw.limit(ctx, stateRateLimitTokens); err != nil { - return nil, err - } - if err := gw.checkTipsetKey(ctx, tsk); err != nil { - return nil, err - } - return gw.target.StateGetAllAllocations(ctx, tsk) -} - -func (gw *Node) StateGetAllClaims(ctx context.Context, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) { - if err := gw.limit(ctx, stateRateLimitTokens); err != nil { - return nil, err - } - if err := gw.checkTipsetKey(ctx, tsk); err != nil { - return nil, err - } - return gw.target.StateGetAllClaims(ctx, tsk) -} From 19123889656bc998234cceaf3f560928c867ccff Mon Sep 17 00:00:00 2001 From: LexLuthr Date: Thu, 22 Feb 2024 14:23:50 +0400 Subject: [PATCH 6/6] fix cli internal var names --- cli/filplus.go | 67 +++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/cli/filplus.go b/cli/filplus.go index f629075f94e..e86fe0372c3 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -301,7 +301,7 @@ var filplusListAllocationsCmd = &cli.Command{ } if json { - // get a new list of wallets with json keys instead of tablewriter keys + // get a new list of allocations with json keys instead of tablewriter keys var jsonAllocs []map[string]interface{} for _, alloc := range allocs { jsonAlloc := make(map[string]interface{}) @@ -325,7 +325,6 @@ var filplusListAllocationsCmd = &cli.Command{ tablewriter.NewLineCol(expr)) // populate it with content for _, alloc := range allocs { - tw.Write(alloc) } // return the corresponding string @@ -402,7 +401,7 @@ var filplusListClaimsCmd = &cli.Command{ writeOut := func(tsHeight abi.ChainEpoch, claims map[verifreg.ClaimId]verifreg.Claim, json, expired bool) error { // Map Keys. Corresponds to the standard tablewriter output - allocationID := "ClaimID" + claimID := "ClaimID" provider := "Provider" client := "Client" data := "Data" @@ -414,52 +413,52 @@ var filplusListClaimsCmd = &cli.Command{ // One-to-one mapping between tablewriter keys and JSON keys tableKeysToJsonKeys := map[string]string{ - allocationID: strings.ToLower(allocationID), - provider: strings.ToLower(provider), - client: strings.ToLower(client), - data: strings.ToLower(data), - size: strings.ToLower(size), - tMin: strings.ToLower(tMin), - tMax: strings.ToLower(tMax), - tStart: strings.ToLower(tStart), - sector: strings.ToLower(sector), + claimID: strings.ToLower(claimID), + provider: strings.ToLower(provider), + client: strings.ToLower(client), + data: strings.ToLower(data), + size: strings.ToLower(size), + tMin: strings.ToLower(tMin), + tMax: strings.ToLower(tMax), + tStart: strings.ToLower(tStart), + sector: strings.ToLower(sector), } - var allocs []map[string]interface{} + var claimList []map[string]interface{} for key, val := range claims { if tsHeight > val.TermMax || !expired { - alloc := map[string]interface{}{ - allocationID: key, - provider: val.Provider, - client: val.Client, - data: val.Data, - size: val.Size, - tMin: val.TermMin, - tMax: val.TermMax, - tStart: val.TermStart, - sector: val.Sector, + claim := map[string]interface{}{ + claimID: key, + provider: val.Provider, + client: val.Client, + data: val.Data, + size: val.Size, + tMin: val.TermMin, + tMax: val.TermMax, + tStart: val.TermStart, + sector: val.Sector, } - allocs = append(allocs, alloc) + claimList = append(claimList, claim) } } if json { - // get a new list of wallets with json keys instead of tablewriter keys - var jsonAllocs []map[string]interface{} - for _, alloc := range allocs { - jsonAlloc := make(map[string]interface{}) - for k, v := range alloc { - jsonAlloc[tableKeysToJsonKeys[k]] = v + // get a new list of claims with json keys instead of tablewriter keys + var jsonClaims []map[string]interface{} + for _, claim := range claimList { + jsonClaim := make(map[string]interface{}) + for k, v := range claim { + jsonClaim[tableKeysToJsonKeys[k]] = v } - jsonAllocs = append(jsonAllocs, jsonAlloc) + jsonClaims = append(jsonClaims, jsonClaim) } // then return this! - return PrintJson(jsonAllocs) + return PrintJson(jsonClaims) } // Init the tablewriter's columns tw := tablewriter.New( - tablewriter.Col(allocationID), + tablewriter.Col(claimID), tablewriter.Col(client), tablewriter.Col(provider), tablewriter.Col(data), @@ -469,7 +468,7 @@ var filplusListClaimsCmd = &cli.Command{ tablewriter.Col(tStart), tablewriter.NewLineCol(sector)) // populate it with content - for _, alloc := range allocs { + for _, alloc := range claimList { tw.Write(alloc) }

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 delta 33818 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