From 00a14de0948ce078437338f2356c04159efd1087 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Wed, 30 Sep 2020 16:36:16 +0200 Subject: [PATCH] feat: gateway - StateLookupID --- api/api_gateway.go | 3 ++- api/apistruct/struct.go | 12 ++++++++---- chain/stmgr/stmgr.go | 1 + cmd/lotus-gateway/api.go | 26 ++++++++++++++++++-------- node/impl/full/multisig.go | 9 +++++---- node/impl/full/state.go | 6 +----- node/modules/statemanager.go | 4 ++++ 7 files changed, 39 insertions(+), 22 deletions(-) diff --git a/api/api_gateway.go b/api/api_gateway.go index 6a220e9ea..398a7518f 100644 --- a/api/api_gateway.go +++ b/api/api_gateway.go @@ -9,9 +9,10 @@ import ( ) type GatewayAPI interface { - StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) ChainHead(ctx context.Context) (*types.TipSet, error) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) + StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) + StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) } diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index c71b6b560..268fc4460 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -1383,10 +1383,6 @@ func (w *WorkerStruct) Closing(ctx context.Context) (<-chan struct{}, error) { return w.Internal.Closing(ctx) } -func (g GatewayStruct) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) { - return g.Internal.StateGetActor(ctx, actor, ts) -} - func (g GatewayStruct) ChainHead(ctx context.Context) (*types.TipSet, error) { return g.Internal.ChainHead(ctx) } @@ -1403,6 +1399,14 @@ func (g GatewayStruct) StateAccountKey(ctx context.Context, addr address.Address return g.Internal.StateAccountKey(ctx, addr, tsk) } +func (g GatewayStruct) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) { + return g.Internal.StateGetActor(ctx, actor, ts) +} + +func (g GatewayStruct) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + panic("implement me") +} + var _ api.Common = &CommonStruct{} var _ api.FullNode = &FullNodeStruct{} var _ api.StorageMiner = &StorageMinerStruct{} diff --git a/chain/stmgr/stmgr.go b/chain/stmgr/stmgr.go index 476de1927..d3129ea20 100644 --- a/chain/stmgr/stmgr.go +++ b/chain/stmgr/stmgr.go @@ -42,6 +42,7 @@ var log = logging.Logger("statemgr") type StateManagerAPI interface { LoadActorTsk(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.Actor, error) + LookupID(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) ResolveToKeyAddress(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) } diff --git a/cmd/lotus-gateway/api.go b/cmd/lotus-gateway/api.go index 22b30544e..642ed4d86 100644 --- a/cmd/lotus-gateway/api.go +++ b/cmd/lotus-gateway/api.go @@ -68,14 +68,6 @@ func (a *GatewayAPI) MpoolPush(ctx context.Context, sm *types.SignedMessage) (ci return a.api.MpoolPushUntrusted(ctx, sm) } -func (a *GatewayAPI) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) { - if err := a.checkTipset(ctx, ts); err != nil { - return nil, fmt.Errorf("bad tipset: %w", err) - } - - return a.api.StateGetActor(ctx, actor, ts) -} - func (a *GatewayAPI) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { if err := a.checkTipset(ctx, tsk); err != nil { return address.Undef, fmt.Errorf("bad tipset: %w", err) @@ -83,3 +75,21 @@ func (a *GatewayAPI) StateAccountKey(ctx context.Context, addr address.Address, return a.api.StateAccountKey(ctx, addr, tsk) } + +func (a *GatewayAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) { + if err := a.checkTipset(ctx, tsk); err != nil { + return nil, fmt.Errorf("bad tipset: %w", err) + } + + return a.api.StateGetActor(ctx, actor, tsk) +} + +func (a *GatewayAPI) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + if err := a.checkTipset(ctx, tsk); err != nil { + return address.Undef, fmt.Errorf("bad tipset: %w", err) + } + + return a.api.StateLookupID(ctx, addr, tsk) +} + +var _ api.GatewayAPI = &GatewayAPI{} diff --git a/node/impl/full/multisig.go b/node/impl/full/multisig.go index 715689edc..489658412 100644 --- a/node/impl/full/multisig.go +++ b/node/impl/full/multisig.go @@ -3,6 +3,8 @@ package full import ( "context" + "github.com/filecoin-project/lotus/chain/stmgr" + "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-address" @@ -23,9 +25,8 @@ import ( type MsigAPI struct { fx.In - WalletAPI WalletAPI - StateAPI StateAPI - MpoolAPI MpoolAPI + StateManagerAPI stmgr.StateManagerAPI + MpoolAPI MpoolAPI } func (a *MsigAPI) messageBuilder(ctx context.Context, from address.Address) (multisig.MessageBuilder, error) { @@ -152,7 +153,7 @@ func (a *MsigAPI) msigApproveOrCancel(ctx context.Context, operation api.MsigPro } if proposer.Protocol() != address.ID { - proposerID, err := a.StateAPI.StateLookupID(ctx, proposer, types.EmptyTSK) + proposerID, err := a.StateManagerAPI.LookupID(ctx, proposer, nil) if err != nil { return cid.Undef, err } diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 56dfc0a14..37af5a9a4 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -382,12 +382,8 @@ func (a *StateAPI) StateLookupID(ctx context.Context, addr address.Address, tsk if err != nil { return address.Undef, xerrors.Errorf("loading tipset %s: %w", tsk, err) } - state, err := a.stateForTs(ctx, ts) - if err != nil { - return address.Undef, err - } - return state.LookupID(addr) + return a.StateManager.LookupID(ctx, addr, ts) } func (a *StateAPI) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { diff --git a/node/modules/statemanager.go b/node/modules/statemanager.go index b673f7268..0ed054d45 100644 --- a/node/modules/statemanager.go +++ b/node/modules/statemanager.go @@ -22,6 +22,10 @@ func (s *RPCStateManager) LoadActorTsk(ctx context.Context, addr address.Address return s.gapi.StateGetActor(ctx, addr, tsk) } +func (s *RPCStateManager) LookupID(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + return s.gapi.StateLookupID(ctx, addr, ts.Key()) +} + func (s *RPCStateManager) ResolveToKeyAddress(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { return s.gapi.StateAccountKey(ctx, addr, ts.Key()) }