Merge remote-tracking branch 'origin/testnet/3' into feat/new-workers
This commit is contained in:
		
						commit
						201d0a4b19
					
				| @ -126,7 +126,8 @@ type FullNode interface { | ||||
| 	StateMinerSectorSize(context.Context, address.Address, types.TipSetKey) (abi.SectorSize, error) | ||||
| 	StateMinerFaults(context.Context, address.Address, types.TipSetKey) ([]abi.SectorNumber, error) | ||||
| 	StatePledgeCollateral(context.Context, types.TipSetKey) (types.BigInt, error) | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*MsgWait, error) | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*MsgLookup, error) | ||||
| 	StateSearchMsg(context.Context, cid.Cid) (*MsgLookup, error) | ||||
| 	StateListMiners(context.Context, types.TipSetKey) ([]address.Address, error) | ||||
| 	StateListActors(context.Context, types.TipSetKey) ([]address.Address, error) | ||||
| 	StateMarketBalance(context.Context, address.Address, types.TipSetKey) (MarketBalance, error) | ||||
| @ -188,7 +189,7 @@ type DealInfo struct { | ||||
| 	Duration      uint64 | ||||
| } | ||||
| 
 | ||||
| type MsgWait struct { | ||||
| type MsgLookup struct { | ||||
| 	Receipt types.MessageReceipt | ||||
| 	TipSet  *types.TipSet | ||||
| } | ||||
|  | ||||
| @ -123,7 +123,8 @@ type FullNodeStruct struct { | ||||
| 		StateGetActor           func(context.Context, address.Address, types.TipSetKey) (*types.Actor, error)                                `perm:"read"` | ||||
| 		StateReadState          func(context.Context, *types.Actor, types.TipSetKey) (*api.ActorState, error)                                `perm:"read"` | ||||
| 		StatePledgeCollateral   func(context.Context, types.TipSetKey) (types.BigInt, error)                                                 `perm:"read"` | ||||
| 		StateWaitMsg            func(context.Context, cid.Cid) (*api.MsgWait, error)                                                         `perm:"read"` | ||||
| 		StateWaitMsg            func(context.Context, cid.Cid) (*api.MsgLookup, error)                                                       `perm:"read"` | ||||
| 		StateSearchMsg          func(context.Context, cid.Cid) (*api.MsgLookup, error)                                                       `perm:"read"` | ||||
| 		StateListMiners         func(context.Context, types.TipSetKey) ([]address.Address, error)                                            `perm:"read"` | ||||
| 		StateListActors         func(context.Context, types.TipSetKey) ([]address.Address, error)                                            `perm:"read"` | ||||
| 		StateMarketBalance      func(context.Context, address.Address, types.TipSetKey) (api.MarketBalance, error)                           `perm:"read"` | ||||
| @ -520,9 +521,14 @@ func (c *FullNodeStruct) StatePledgeCollateral(ctx context.Context, tsk types.Ti | ||||
| 	return c.Internal.StatePledgeCollateral(ctx, tsk) | ||||
| } | ||||
| 
 | ||||
| func (c *FullNodeStruct) StateWaitMsg(ctx context.Context, msgc cid.Cid) (*api.MsgWait, error) { | ||||
| func (c *FullNodeStruct) StateWaitMsg(ctx context.Context, msgc cid.Cid) (*api.MsgLookup, error) { | ||||
| 	return c.Internal.StateWaitMsg(ctx, msgc) | ||||
| } | ||||
| 
 | ||||
| func (c *FullNodeStruct) StateSearchMsg(ctx context.Context, msgc cid.Cid) (*api.MsgLookup, error) { | ||||
| 	return c.Internal.StateSearchMsg(ctx, msgc) | ||||
| } | ||||
| 
 | ||||
| func (c *FullNodeStruct) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) { | ||||
| 	return c.Internal.StateListMiners(ctx, tsk) | ||||
| } | ||||
|  | ||||
| @ -584,6 +584,37 @@ func (sm *StateManager) WaitForMessage(ctx context.Context, mcid cid.Cid) (*type | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (sm *StateManager) SearchForMessage(ctx context.Context, mcid cid.Cid) (*types.TipSet, *types.MessageReceipt, error) { | ||||
| 	msg, err := sm.cs.GetCMessage(mcid) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, fmt.Errorf("failed to load message: %w", err) | ||||
| 	} | ||||
| 
 | ||||
| 	head := sm.cs.GetHeaviestTipSet() | ||||
| 
 | ||||
| 	r, err := sm.tipsetExecutedMessage(head, mcid, msg.VMMessage()) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if r != nil { | ||||
| 		return head, r, nil | ||||
| 	} | ||||
| 
 | ||||
| 	fts, r, err := sm.searchBackForMsg(ctx, head, msg) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		log.Warnf("failed to look back through chain for message %s", mcid) | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if fts == nil { | ||||
| 		return nil, nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return fts, r, nil | ||||
| } | ||||
| 
 | ||||
| func (sm *StateManager) searchBackForMsg(ctx context.Context, from *types.TipSet, m store.ChainMsg) (*types.TipSet, *types.MessageReceipt, error) { | ||||
| 
 | ||||
| 	cur := from | ||||
|  | ||||
| @ -46,6 +46,11 @@ func (a *Applier) ApplyMessage(eCtx *vtypes.ExecutionContext, state vstate.VMWra | ||||
| 		return vtypes.MessageReceipt{}, err | ||||
| 	} | ||||
| 
 | ||||
| 	rval := ret.Return | ||||
| 	if rval == nil { | ||||
| 		rval = []byte{} | ||||
| 	} | ||||
| 
 | ||||
| 	st.stateRoot, err = lotusVM.Flush(ctx) | ||||
| 	if err != nil { | ||||
| 		return vtypes.MessageReceipt{}, err | ||||
| @ -53,7 +58,7 @@ func (a *Applier) ApplyMessage(eCtx *vtypes.ExecutionContext, state vstate.VMWra | ||||
| 
 | ||||
| 	mr := vtypes.MessageReceipt{ | ||||
| 		ExitCode:    exitcode.ExitCode(ret.ExitCode), | ||||
| 		ReturnValue: ret.Return, | ||||
| 		ReturnValue: rval, | ||||
| 		GasUsed:     big.NewInt(ret.GasUsed), | ||||
| 	} | ||||
| 
 | ||||
| @ -88,9 +93,13 @@ func (a *Applier) ApplyTipSetMessages(state vstate.VMWrapper, blocks []vtypes.Bl | ||||
| 		if msg.From == builtin.SystemActorAddr { | ||||
| 			return nil // ignore reward and cron calls
 | ||||
| 		} | ||||
| 		rval := ret.Return | ||||
| 		if rval == nil { | ||||
| 			rval = []byte{} // chain validation tests expect empty arrays to not be nil...
 | ||||
| 		} | ||||
| 		receipts = append(receipts, vtypes.MessageReceipt{ | ||||
| 			ExitCode:    exitcode.ExitCode(ret.ExitCode), | ||||
| 			ReturnValue: ret.Return, | ||||
| 			ReturnValue: rval, | ||||
| 
 | ||||
| 			GasUsed: big.NewInt(ret.GasUsed), | ||||
| 		}) | ||||
|  | ||||
| @ -127,7 +127,6 @@ func (*invoker) transform(instance Invokee) (nativeCode, error) { | ||||
| 		o0 := t.Out(0) | ||||
| 		if !o0.Implements(reflect.TypeOf((*cbg.CBORMarshaler)(nil)).Elem()) { | ||||
| 			return nil, newErr("output needs to implement cgb.CBORMarshaler") | ||||
| 
 | ||||
| 		} | ||||
| 	} | ||||
| 	code := make(nativeCode, len(exports)) | ||||
|  | ||||
							
								
								
									
										40
									
								
								cli/state.go
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								cli/state.go
									
									
									
									
									
								
							| @ -58,6 +58,7 @@ var stateCmd = &cli.Command{ | ||||
| 		stateCallCmd, | ||||
| 		stateGetDealSetCmd, | ||||
| 		stateWaitMsgCmd, | ||||
| 		stateSearchMsgCmd, | ||||
| 		stateMinerInfo, | ||||
| 	}, | ||||
| } | ||||
| @ -855,6 +856,45 @@ var stateWaitMsgCmd = &cli.Command{ | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| var stateSearchMsgCmd = &cli.Command{ | ||||
| 	Name:      "search-msg", | ||||
| 	Usage:     "Search to see whether a message has appeared on chain", | ||||
| 	ArgsUsage: "[messageCid]", | ||||
| 	Action: func(cctx *cli.Context) error { | ||||
| 		if !cctx.Args().Present() { | ||||
| 			return fmt.Errorf("must specify message cid to search for") | ||||
| 		} | ||||
| 
 | ||||
| 		api, closer, err := GetFullNodeAPI(cctx) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		defer closer() | ||||
| 
 | ||||
| 		ctx := ReqContext(cctx) | ||||
| 
 | ||||
| 		msg, err := cid.Decode(cctx.Args().First()) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		mw, err := api.StateSearchMsg(ctx, msg) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		if mw != nil { | ||||
| 			fmt.Printf("message was executed in tipset: %s", mw.TipSet.Cids()) | ||||
| 			fmt.Printf("\nExit Code: %d", mw.Receipt.ExitCode) | ||||
| 			fmt.Printf("\nGas Used: %d", mw.Receipt.GasUsed) | ||||
| 			fmt.Printf("\nReturn: %x", mw.Receipt.Return) | ||||
| 		} else { | ||||
| 			fmt.Print("message was not found on chain") | ||||
| 		} | ||||
| 		return nil | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| var stateCallCmd = &cli.Command{ | ||||
| 	Name:      "call", | ||||
| 	Usage:     "Invoke a method on an actor locally", | ||||
|  | ||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -13,7 +13,7 @@ require ( | ||||
| 	github.com/davidlazar/go-crypto v0.0.0-20190912175916-7055855a373f // indirect | ||||
| 	github.com/docker/go-units v0.4.0 | ||||
| 	github.com/elastic/go-sysinfo v1.3.0 | ||||
| 	github.com/filecoin-project/chain-validation v0.0.6-0.20200324001434-7c1ecd76e3eb | ||||
| 	github.com/filecoin-project/chain-validation v0.0.6-0.20200324185232-f581621b7fbf | ||||
| 	github.com/filecoin-project/filecoin-ffi v0.0.0-20200304181354-4446ff8a1bb9 | ||||
| 	github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be | ||||
| 	github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200131012142-05d80eeccc5e | ||||
|  | ||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @ -103,8 +103,8 @@ github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7 | ||||
| github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= | ||||
| github.com/fatih/color v1.8.0 h1:5bzFgL+oy7JITMTxUPJ00n7VxmYd/PdMp5mHFX40/RY= | ||||
| github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8= | ||||
| github.com/filecoin-project/chain-validation v0.0.6-0.20200324001434-7c1ecd76e3eb h1:tynvU1AYRXYAzRrMX6VZGYgUg3+/lweulbAyeZqET/I= | ||||
| github.com/filecoin-project/chain-validation v0.0.6-0.20200324001434-7c1ecd76e3eb/go.mod h1:YTLxUr6gOZpkUaXzLe7OZ4s1dpfJGp2FY/J2/K5DJqc= | ||||
| github.com/filecoin-project/chain-validation v0.0.6-0.20200324185232-f581621b7fbf h1:GiCNQc9LuIrH2buA2T07FiM2WEMgUllJ/ET28cOQY7E= | ||||
| github.com/filecoin-project/chain-validation v0.0.6-0.20200324185232-f581621b7fbf/go.mod h1:YTLxUr6gOZpkUaXzLe7OZ4s1dpfJGp2FY/J2/K5DJqc= | ||||
| github.com/filecoin-project/go-address v0.0.0-20200107215422-da8eea2842b5/go.mod h1:SAOwJoakQ8EPjwNIsiakIQKsoKdkcbx8U3IapgCg9R0= | ||||
| github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be h1:TooKBwR/g8jG0hZ3lqe9S5sy2vTUcLOZLlz3M5wGn2E= | ||||
| github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be/go.mod h1:SAOwJoakQ8EPjwNIsiakIQKsoKdkcbx8U3IapgCg9R0= | ||||
|  | ||||
| @ -281,7 +281,7 @@ func (a *StateAPI) MinerCreateBlock(ctx context.Context, addr address.Address, p | ||||
| 	return &out, nil | ||||
| } | ||||
| 
 | ||||
| func (a *StateAPI) StateWaitMsg(ctx context.Context, msg cid.Cid) (*api.MsgWait, error) { | ||||
| func (a *StateAPI) StateWaitMsg(ctx context.Context, msg cid.Cid) (*api.MsgLookup, error) { | ||||
| 	// TODO: consider using event system for this, expose confidence
 | ||||
| 
 | ||||
| 	ts, recpt, err := a.StateManager.WaitForMessage(ctx, msg) | ||||
| @ -289,12 +289,28 @@ func (a *StateAPI) StateWaitMsg(ctx context.Context, msg cid.Cid) (*api.MsgWait, | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return &api.MsgWait{ | ||||
| 	return &api.MsgLookup{ | ||||
| 		Receipt: *recpt, | ||||
| 		TipSet:  ts, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func (a *StateAPI) StateSearchMsg(ctx context.Context, msg cid.Cid) (*api.MsgLookup, error) { | ||||
| 	ts, recpt, err := a.StateManager.SearchForMessage(ctx, msg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if ts != nil { | ||||
| 		return &api.MsgLookup{ | ||||
| 			Receipt: *recpt, | ||||
| 			TipSet:  ts, | ||||
| 		}, nil | ||||
| 	} else { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (a *StateAPI) StateGetReceipt(ctx context.Context, msg cid.Cid, tsk types.TipSetKey) (*types.MessageReceipt, error) { | ||||
| 	ts, err := a.Chain.GetTipSetFromKey(tsk) | ||||
| 	if err != nil { | ||||
|  | ||||
| @ -53,7 +53,7 @@ type storageMinerApi interface { | ||||
| 	StateMinerSectors(context.Context, address.Address, types.TipSetKey) ([]*api.ChainSectorInfo, error) | ||||
| 	StateMinerProvingSet(context.Context, address.Address, types.TipSetKey) ([]*api.ChainSectorInfo, error) | ||||
| 	StateMinerSectorSize(context.Context, address.Address, types.TipSetKey) (abi.SectorSize, error) | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*api.MsgWait, error) // TODO: removeme eventually
 | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*api.MsgLookup, error) // TODO: removeme eventually
 | ||||
| 	StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) | ||||
| 	StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) | ||||
| 	StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) | ||||
|  | ||||
| @ -42,7 +42,7 @@ type sealingApi interface { // TODO: trim down | ||||
| 	StateMinerSectors(context.Context, address.Address, types.TipSetKey) ([]*api.ChainSectorInfo, error) | ||||
| 	StateMinerProvingSet(context.Context, address.Address, types.TipSetKey) ([]*api.ChainSectorInfo, error) | ||||
| 	StateMinerSectorSize(context.Context, address.Address, types.TipSetKey) (abi.SectorSize, error) | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*api.MsgWait, error) // TODO: removeme eventually
 | ||||
| 	StateWaitMsg(context.Context, cid.Cid) (*api.MsgLookup, error) // TODO: removeme eventually
 | ||||
| 	StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) | ||||
| 	StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) | ||||
| 	StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user