From 49d6c0728019c2037dc8fad851872da526b4d7ae Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Thu, 14 Apr 2022 17:30:07 -0400 Subject: [PATCH] Implemented StateLoockupRobustAddress --- .circleci/config.yml | 5 +++ api/api_full.go | 4 +- api/mocks/mock_full.go | 15 +++++++ api/proxy_gen.go | 13 ++++++ build/openrpc/full.json.gz | Bin 27011 -> 27137 bytes build/openrpc/miner.json.gz | Bin 13540 -> 13539 bytes build/openrpc/worker.json.gz | Bin 4528 -> 4529 bytes chain/stmgr/stmgr.go | 45 ++++++++++++++++++++ documentation/en/api-v1-unstable-methods.md | 26 ++++++++++- itests/lookup_robust_address_test.go | 32 ++++++++++++++ node/impl/full/state.go | 9 ++++ 11 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 itests/lookup_robust_address_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index f863d6817..bc7737860 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -874,6 +874,11 @@ workflows: suite: itest-get_messages_in_ts target: "./itests/get_messages_in_ts_test.go" + - test: + name: test-itest-lookup_robust_address + suite: itest-lookup_robust_address + target: "./itests/lookup_robust_address_test.go" + - test: name: test-itest-mempool suite: itest-mempool diff --git a/api/api_full.go b/api/api_full.go index 6c49cd731..bcdfdad10 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -522,8 +522,10 @@ type FullNode interface { StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, 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 + // StateAccountKey returns the public key address of the given ID address for secp and bls accounts StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read + // StateLookupRobustAddress returns the public key address of the given ID address for non-account addresses (multisig, miners etc) + StateLookupRobustAddress(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read // StateChangedActors returns all the actors whose states change between the two given state CIDs // TODO: Should this take tipset keys instead? StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error) //perm:read diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 45fcd6f53..5db190ba6 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -2496,6 +2496,21 @@ func (mr *MockFullNodeMockRecorder) StateLookupID(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateLookupID", reflect.TypeOf((*MockFullNode)(nil).StateLookupID), arg0, arg1, arg2) } +// StateLookupRobustAddress mocks base method. +func (m *MockFullNode) StateLookupRobustAddress(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateLookupRobustAddress", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateLookupRobustAddress indicates an expected call of StateLookupRobustAddress. +func (mr *MockFullNodeMockRecorder) StateLookupRobustAddress(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateLookupRobustAddress", reflect.TypeOf((*MockFullNode)(nil).StateLookupRobustAddress), arg0, arg1, arg2) +} + // StateMarketBalance mocks base method. func (m *MockFullNode) StateMarketBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (api.MarketBalance, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index e0664bca9..b5bc36ade 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -364,6 +364,8 @@ type FullNodeStruct struct { StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateLookupRobustAddress func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) `perm:"read"` StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]MarketDeal, error) `perm:"read"` @@ -2528,6 +2530,17 @@ func (s *FullNodeStub) StateLookupID(p0 context.Context, p1 address.Address, p2 return *new(address.Address), ErrNotSupported } +func (s *FullNodeStruct) StateLookupRobustAddress(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + if s.Internal.StateLookupRobustAddress == nil { + return *new(address.Address), ErrNotSupported + } + return s.Internal.StateLookupRobustAddress(p0, p1, p2) +} + +func (s *FullNodeStub) StateLookupRobustAddress(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return *new(address.Address), ErrNotSupported +} + func (s *FullNodeStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) { if s.Internal.StateMarketBalance == nil { return *new(MarketBalance), ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index ce2ffcaee61e3adddff2dacdd6edda3159c66568..1eaaf6a849b1a7d0561f507f4df881f9fb5695a0 100644 GIT binary patch delta 25624 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 Xr!BtY^$Qf#`@77%(TcJ*EYyDiI8>!? delta 25459 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%0A96iI3F(O8ZGRAG)`kYDMZ6ai3; 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%0AN@r8? zELcyX!0j?s`A%0exR@@@G9;x(6`F37@Z?HMv1AGP`(0BTSk*x-Wp#!={|jlkJ(@M$ z7|_u6*Loh^gHE;28lCAe_vz+T;{Wi|_IR36ty5eIdZK`stu22DpSbEAhmVpw?xyC+ zCpFTTn{%SgT0BU4NRUWH*5N6jQhi4vu^GCNzYJN(Fu|{ZUORgzcGr2H^9Md)QCIA~ zFP{U)SndY`1&m^DMqw434Uh~Nc9Q_QAA0GlLBGWJg@a=J>tzqKzi2+{yN`@K@pyat z@?qgF#)ygbo*<2+&I}Au1rjRZ-i*G!BfUlsD9|8{h$>qF7ffD<5xZt6dqFbzFHSsb zue8Gu?K1s6D^TohL%XyLSUU);YcR^bu#qbZ>qj^Mw!=FQRp61?isfQtt`Wn#IE(Y} zdtN~E^W{uwOYZQ8-ZF)75}1y3{0#iNG`{FA?xw;tUpKf2#z+n^X!HstfmipAEfqW5 z_KSbs)zqr@L91i;$W;CISs5`-Xv(oW(Uv{xP#9|)&@7q`(YfoUV8h#EZ>t|cLC?Gd zuP+1JR0XFue9u#B6sW$WJ@`^ag6M;*p4cW@@?^LJ!`N=KE3@)&QM%vt#DrNn65FhsOu?|ROt?tkl(KiSpzuTeRc&q_v`gYHvQYzK)cO9dKEaq+PPXluQ3Ne(kV|z~{Es9_H(y+#o_dHg3| zH-k#O?z5)#cTx%?l_crba-+jw$!cvklNO?OuvHP!r3mQ88eJaV=+sU?HCB~?)Q_AU zTwftKWEbDiIdVC4X0FoX#w7QS@n?G%8Rq&asbn2n6uYImli6*{{p|YZ&d&Q diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index a531555ad7d0e4660c123cec3ab5152e8f7ca03b..7b1191138e77bb6e01dc4806d3a943bc716eab4a 100644 GIT binary patch literal 13539 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�~|C?8Sk|3f3Ja3MW?hBnuV?5_Bs? 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 literal 13540 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 delta 4345 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 diff --git a/chain/stmgr/stmgr.go b/chain/stmgr/stmgr.go index d0bdd73e9..7b10cd805 100644 --- a/chain/stmgr/stmgr.go +++ b/chain/stmgr/stmgr.go @@ -4,6 +4,8 @@ import ( "context" "sync" + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/specs-actors/v7/actors/migration/nv15" "github.com/filecoin-project/lotus/chain/rand" @@ -22,6 +24,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" + _init "github.com/filecoin-project/lotus/chain/actors/builtin/init" "github.com/filecoin-project/lotus/chain/actors/builtin/paych" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/state" @@ -318,6 +321,48 @@ func (sm *StateManager) LookupID(ctx context.Context, addr address.Address, ts * return state.LookupID(addr) } +func (sm *StateManager) LookupRobustAddress(ctx context.Context, idAddr address.Address, ts *types.TipSet) (address.Address, error) { + idAddrDecoded, err := address.IDFromAddress(idAddr) + if err != nil { + return address.Undef, xerrors.Errorf("failed to decode provided address as id addr: %w", err) + } + + cst := cbor.NewCborStore(sm.cs.StateBlockstore()) + wrapStore := adt.WrapStore(ctx, cst) + + stateTree, err := state.LoadStateTree(cst, sm.parentState(ts)) + if err != nil { + return address.Undef, xerrors.Errorf("load state tree: %w", err) + } + + initActor, err := stateTree.GetActor(_init.Address) + if err != nil { + return address.Undef, xerrors.Errorf("load init actor: %w", err) + } + + initState, err := _init.Load(wrapStore, initActor) + if err != nil { + return address.Undef, xerrors.Errorf("load init state: %w", err) + } + robustAddr := address.Undef + + err = initState.ForEachActor(func(id abi.ActorID, addr address.Address) error { + if uint64(id) == idAddrDecoded { + robustAddr = addr + // Hacky way to early return from ForEach + return xerrors.New("robust address found") + } + return nil + }) + if robustAddr == address.Undef { + if err == nil { + return address.Undef, xerrors.Errorf("Address %s not found", idAddr.String()) + } + return address.Undef, xerrors.Errorf("finding address: %w", err) + } + return robustAddr, nil +} + func (sm *StateManager) ValidateChain(ctx context.Context, ts *types.TipSet) error { tschain := []*types.TipSet{ts} for ts.Height() != 0 { diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index c72483e9d..5d4dab533 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -181,6 +181,7 @@ * [StateListMessages](#StateListMessages) * [StateListMiners](#StateListMiners) * [StateLookupID](#StateLookupID) + * [StateLookupRobustAddress](#StateLookupRobustAddress) * [StateMarketBalance](#StateMarketBalance) * [StateMarketDeals](#StateMarketDeals) * [StateMarketParticipants](#StateMarketParticipants) @@ -5037,7 +5038,7 @@ A nil TipSetKey can be provided as a param, this will cause the heaviest tipset ### StateAccountKey -StateAccountKey returns the public key address of the given ID address +StateAccountKey returns the public key address of the given ID address for secp and bls accounts Perms: read @@ -5783,6 +5784,29 @@ Response: StateLookupID retrieves the ID address of the given address +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"f01234"` + +### StateLookupRobustAddress +StateLookupRobustAddress returns the public key address of the given ID address for non-account addresses (multisig, miners etc) + + Perms: read Inputs: diff --git a/itests/lookup_robust_address_test.go b/itests/lookup_robust_address_test.go new file mode 100644 index 000000000..d2d49af8b --- /dev/null +++ b/itests/lookup_robust_address_test.go @@ -0,0 +1,32 @@ +package itests + +import ( + "context" + "testing" + "time" + + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/itests/kit" + "github.com/stretchr/testify/require" +) + +func TestStateLookupRobustAddress(t *testing.T) { + ctx := context.Background() + kit.QuietMiningLogs() + + client, miner, ens := kit.EnsembleMinimal(t, kit.MockProofs(), kit.GenesisNetworkVersion(network.Version15)) + ens.InterconnectAll().BeginMining(10 * time.Millisecond) + + addr, err := miner.ActorAddress(ctx) + require.NoError(t, err) + + // Look up the robust address + robAddr, err := client.StateLookupRobustAddress(ctx, addr, types.EmptyTSK) + require.NoError(t, err) + + // Check the id address for the given robust address and make sure it matches + idAddr, err := client.StateLookupID(ctx, robAddr, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, addr, idAddr) +} diff --git a/node/impl/full/state.go b/node/impl/full/state.go index dfd1c69d9..51cb0dfbc 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -449,6 +449,15 @@ func (m *StateModule) StateLookupID(ctx context.Context, addr address.Address, t return m.StateManager.LookupID(ctx, addr, ts) } +func (a *StateAPI) StateLookupRobustAddress(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + ts, err := a.Chain.GetTipSetFromKey(ctx, tsk) + if err != nil { + return address.Undef, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + return a.StateManager.LookupRobustAddress(ctx, addr, ts) +} + func (m *StateModule) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { ts, err := m.Chain.GetTipSetFromKey(ctx, tsk) if err != nil {