Use MessagePrototype for check API
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
3d8f641310
commit
8d75da1629
@ -253,7 +253,7 @@ type FullNode interface {
|
|||||||
MpoolBatchPushMessage(context.Context, []*types.Message, *MessageSendSpec) ([]*types.SignedMessage, error) //perm:sign
|
MpoolBatchPushMessage(context.Context, []*types.Message, *MessageSendSpec) ([]*types.SignedMessage, error) //perm:sign
|
||||||
|
|
||||||
// MpoolCheckMessages performs logical checks on a batch of messages
|
// MpoolCheckMessages performs logical checks on a batch of messages
|
||||||
MpoolCheckMessages(context.Context, []*types.Message) ([][]MessageCheckStatus, error) //perm:read
|
MpoolCheckMessages(context.Context, []*MessagePrototype) ([][]MessageCheckStatus, error) //perm:read
|
||||||
// MpoolCheckPendingMessages performs logical checks for all pending messages from a given address
|
// MpoolCheckPendingMessages performs logical checks for all pending messages from a given address
|
||||||
MpoolCheckPendingMessages(context.Context, address.Address) ([][]MessageCheckStatus, error) //perm:read
|
MpoolCheckPendingMessages(context.Context, address.Address) ([][]MessageCheckStatus, error) //perm:read
|
||||||
// MpoolCheckReplaceMessages performs logical checks on pending messages with replacement
|
// MpoolCheckReplaceMessages performs logical checks on pending messages with replacement
|
||||||
|
@ -1069,7 +1069,7 @@ func (mr *MockFullNodeMockRecorder) MpoolBatchPushUntrusted(arg0, arg1 interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MpoolCheckMessages mocks base method
|
// MpoolCheckMessages mocks base method
|
||||||
func (m *MockFullNode) MpoolCheckMessages(arg0 context.Context, arg1 []*types.Message) ([][]api.MessageCheckStatus, error) {
|
func (m *MockFullNode) MpoolCheckMessages(arg0 context.Context, arg1 []*api.MessagePrototype) ([][]api.MessageCheckStatus, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "MpoolCheckMessages", arg0, arg1)
|
ret := m.ctrl.Call(m, "MpoolCheckMessages", arg0, arg1)
|
||||||
ret0, _ := ret[0].([][]api.MessageCheckStatus)
|
ret0, _ := ret[0].([][]api.MessageCheckStatus)
|
||||||
|
@ -235,7 +235,7 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolCheckMessages func(p0 context.Context, p1 []*types.Message) ([][]MessageCheckStatus, error) `perm:"read"`
|
MpoolCheckMessages func(p0 context.Context, p1 []*MessagePrototype) ([][]MessageCheckStatus, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolCheckPendingMessages func(p0 context.Context, p1 address.Address) ([][]MessageCheckStatus, error) `perm:"read"`
|
MpoolCheckPendingMessages func(p0 context.Context, p1 address.Address) ([][]MessageCheckStatus, error) `perm:"read"`
|
||||||
|
|
||||||
@ -1515,11 +1515,11 @@ func (s *FullNodeStub) MpoolBatchPushUntrusted(p0 context.Context, p1 []*types.S
|
|||||||
return *new([]cid.Cid), xerrors.New("method not supported")
|
return *new([]cid.Cid), xerrors.New("method not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) MpoolCheckMessages(p0 context.Context, p1 []*types.Message) ([][]MessageCheckStatus, error) {
|
func (s *FullNodeStruct) MpoolCheckMessages(p0 context.Context, p1 []*MessagePrototype) ([][]MessageCheckStatus, error) {
|
||||||
return s.Internal.MpoolCheckMessages(p0, p1)
|
return s.Internal.MpoolCheckMessages(p0, p1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *FullNodeStub) MpoolCheckMessages(p0 context.Context, p1 []*types.Message) ([][]MessageCheckStatus, error) {
|
func (s *FullNodeStub) MpoolCheckMessages(p0 context.Context, p1 []*MessagePrototype) ([][]MessageCheckStatus, error) {
|
||||||
return *new([][]MessageCheckStatus), xerrors.New("method not supported")
|
return *new([][]MessageCheckStatus), xerrors.New("method not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
@ -19,8 +19,14 @@ import (
|
|||||||
var baseFeeUpperBoundFactor = types.NewInt(10)
|
var baseFeeUpperBoundFactor = types.NewInt(10)
|
||||||
|
|
||||||
// CheckMessages performs a set of logic checks for a list of messages, prior to submitting it to the mpool
|
// CheckMessages performs a set of logic checks for a list of messages, prior to submitting it to the mpool
|
||||||
func (mp *MessagePool) CheckMessages(msgs []*types.Message) ([][]api.MessageCheckStatus, error) {
|
func (mp *MessagePool) CheckMessages(protos []*api.MessagePrototype) ([][]api.MessageCheckStatus, error) {
|
||||||
return mp.checkMessages(msgs, false)
|
flex := make([]bool, len(protos))
|
||||||
|
msgs := make([]*types.Message, len(protos))
|
||||||
|
for i, p := range protos {
|
||||||
|
flex[i] = !p.ValidNonce
|
||||||
|
msgs[i] = &p.Message
|
||||||
|
}
|
||||||
|
return mp.checkMessages(msgs, false, flex)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckPendingMessages performs a set of logical sets for all messages pending from a given actor
|
// CheckPendingMessages performs a set of logical sets for all messages pending from a given actor
|
||||||
@ -43,7 +49,7 @@ func (mp *MessagePool) CheckPendingMessages(from address.Address) ([][]api.Messa
|
|||||||
return msgs[i].Nonce < msgs[j].Nonce
|
return msgs[i].Nonce < msgs[j].Nonce
|
||||||
})
|
})
|
||||||
|
|
||||||
return mp.checkMessages(msgs, true)
|
return mp.checkMessages(msgs, true, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckReplaceMessages performs a set of logical checks for related messages while performing a
|
// CheckReplaceMessages performs a set of logical checks for related messages while performing a
|
||||||
@ -88,10 +94,12 @@ func (mp *MessagePool) CheckReplaceMessages(replace []*types.Message) ([][]api.M
|
|||||||
start = end
|
start = end
|
||||||
}
|
}
|
||||||
|
|
||||||
return mp.checkMessages(msgs, true)
|
return mp.checkMessages(msgs, true, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mp *MessagePool) checkMessages(msgs []*types.Message, interned bool) (result [][]api.MessageCheckStatus, err error) {
|
// flexibleNonces should be either nil or of len(msgs), it signifies that message at given index
|
||||||
|
// has non-determied nonce at this point
|
||||||
|
func (mp *MessagePool) checkMessages(msgs []*types.Message, interned bool, flexibleNonces []bool) (result [][]api.MessageCheckStatus, err error) {
|
||||||
mp.curTsLk.Lock()
|
mp.curTsLk.Lock()
|
||||||
curTs := mp.curTs
|
curTs := mp.curTs
|
||||||
mp.curTsLk.Unlock()
|
mp.curTsLk.Unlock()
|
||||||
@ -381,7 +389,7 @@ func (mp *MessagePool) checkMessages(msgs []*types.Message, interned bool) (resu
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if st.nextNonce != m.Nonce {
|
if (flexibleNonces == nil || !flexibleNonces[i]) && st.nextNonce != m.Nonce {
|
||||||
check.OK = false
|
check.OK = false
|
||||||
check.Err = fmt.Sprintf("message nonce doesn't match next nonce (%d)", st.nextNonce)
|
check.Err = fmt.Sprintf("message nonce doesn't match next nonce (%d)", st.nextNonce)
|
||||||
} else {
|
} else {
|
||||||
|
@ -161,7 +161,7 @@ var msigCreateCmd = &cli.Command{
|
|||||||
msgCid := sm.Cid()
|
msgCid := sm.Cid()
|
||||||
|
|
||||||
// wait for it to get mined into a block
|
// wait for it to get mined into a block
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -451,7 +451,7 @@ var msigProposeCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("send proposal in message: ", msgCid)
|
fmt.Println("send proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -600,7 +600,7 @@ var msigApproveCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent approval in message: ", msgCid)
|
fmt.Println("sent approval in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -680,7 +680,7 @@ var msigRemoveProposeCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent remove proposal in message: ", msgCid)
|
fmt.Println("sent remove proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -767,7 +767,7 @@ var msigAddProposeCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Fprintln(cctx.App.Writer, "sent add proposal in message: ", msgCid)
|
fmt.Fprintln(cctx.App.Writer, "sent add proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -858,7 +858,7 @@ var msigAddApproveCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent add approval in message: ", msgCid)
|
fmt.Println("sent add approval in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -944,7 +944,7 @@ var msigAddCancelCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent add cancellation in message: ", msgCid)
|
fmt.Println("sent add cancellation in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1025,7 +1025,7 @@ var msigSwapProposeCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent swap proposal in message: ", msgCid)
|
fmt.Println("sent swap proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1116,7 +1116,7 @@ var msigSwapApproveCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent swap approval in message: ", msgCid)
|
fmt.Println("sent swap approval in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1202,7 +1202,7 @@ var msigSwapCancelCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent swap cancellation in message: ", msgCid)
|
fmt.Println("sent swap cancellation in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1298,7 +1298,7 @@ var msigLockProposeCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent lock proposal in message: ", msgCid)
|
fmt.Println("sent lock proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1404,7 +1404,7 @@ var msigLockApproveCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent lock approval in message: ", msgCid)
|
fmt.Println("sent lock approval in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1505,7 +1505,7 @@ var msigLockCancelCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent lock cancellation in message: ", msgCid)
|
fmt.Println("sent lock cancellation in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1651,7 +1651,7 @@ var msigProposeThresholdCmd = &cli.Command{
|
|||||||
|
|
||||||
fmt.Println("sent change threshold proposal in message: ", msgCid)
|
fmt.Println("sent change threshold proposal in message: ", msgCid)
|
||||||
|
|
||||||
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")))
|
wait, err := api.StateWaitMsg(ctx, msgCid, uint64(cctx.Int("confidence")), build.Finality, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -114,17 +114,8 @@ type CheckInfo struct {
|
|||||||
var ErrCheckFailed = fmt.Errorf("check has failed")
|
var ErrCheckFailed = fmt.Errorf("check has failed")
|
||||||
|
|
||||||
func (s *ServicesImpl) RunChecksForPrototype(ctx context.Context, prototype *api.MessagePrototype) ([][]api.MessageCheckStatus, error) {
|
func (s *ServicesImpl) RunChecksForPrototype(ctx context.Context, prototype *api.MessagePrototype) ([][]api.MessageCheckStatus, error) {
|
||||||
if !prototype.ValidNonce {
|
|
||||||
nonce, err := s.api.MpoolGetNonce(ctx, prototype.Message.From)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("mpool get nonce: %w", err)
|
|
||||||
}
|
|
||||||
prototype.Message.Nonce = nonce
|
|
||||||
prototype.ValidNonce = true
|
|
||||||
}
|
|
||||||
|
|
||||||
var outChecks [][]api.MessageCheckStatus
|
var outChecks [][]api.MessageCheckStatus
|
||||||
checks, err := s.api.MpoolCheckMessages(ctx, []*types.Message{&prototype.Message})
|
checks, err := s.api.MpoolCheckMessages(ctx, []*api.MessagePrototype{prototype})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("message check: %w", err)
|
return nil, xerrors.Errorf("message check: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,8 @@ COMMANDS:
|
|||||||
status Check node status
|
status Check node status
|
||||||
|
|
||||||
GLOBAL OPTIONS:
|
GLOBAL OPTIONS:
|
||||||
|
--interactive setting to false will disable interactive functionality of commands (default: false)
|
||||||
|
--force-send if true, will ignore pre-send checks (default: false)
|
||||||
--help, -h show help (default: false)
|
--help, -h show help (default: false)
|
||||||
--version, -v print the version (default: false)
|
--version, -v print the version (default: false)
|
||||||
```
|
```
|
||||||
@ -138,7 +140,7 @@ OPTIONS:
|
|||||||
--method value specify method to invoke (default: 0)
|
--method value specify method to invoke (default: 0)
|
||||||
--params-json value specify invocation parameters in json
|
--params-json value specify invocation parameters in json
|
||||||
--params-hex value specify invocation parameters in hex
|
--params-hex value specify invocation parameters in hex
|
||||||
--force must be specified for the action to take effect if maybe SysErrInsufficientFunds etc (default: false)
|
--force Deprecated: use global 'force-send' (default: false)
|
||||||
--help, -h show help (default: false)
|
--help, -h show help (default: false)
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -1301,6 +1303,7 @@ COMMANDS:
|
|||||||
find find a message in the mempool
|
find find a message in the mempool
|
||||||
config get or set current mpool configuration
|
config get or set current mpool configuration
|
||||||
gas-perf Check gas performance of messages in mempool
|
gas-perf Check gas performance of messages in mempool
|
||||||
|
manage
|
||||||
help, h Shows a list of commands or help for one command
|
help, h Shows a list of commands or help for one command
|
||||||
|
|
||||||
OPTIONS:
|
OPTIONS:
|
||||||
@ -1414,6 +1417,9 @@ OPTIONS:
|
|||||||
--help, -h show help (default: false)
|
--help, -h show help (default: false)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
# nage
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
## lotus state
|
## lotus state
|
||||||
```
|
```
|
||||||
|
@ -225,8 +225,8 @@ func (a *MpoolAPI) MpoolBatchPushMessage(ctx context.Context, msgs []*types.Mess
|
|||||||
return smsgs, nil
|
return smsgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *MpoolAPI) MpoolCheckMessages(ctx context.Context, msgs []*types.Message) ([][]api.MessageCheckStatus, error) {
|
func (a *MpoolAPI) MpoolCheckMessages(ctx context.Context, protos []*api.MessagePrototype) ([][]api.MessageCheckStatus, error) {
|
||||||
return a.Mpool.CheckMessages(msgs)
|
return a.Mpool.CheckMessages(protos)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *MpoolAPI) MpoolCheckPendingMessages(ctx context.Context, from address.Address) ([][]api.MessageCheckStatus, error) {
|
func (a *MpoolAPI) MpoolCheckPendingMessages(ctx context.Context, from address.Address) ([][]api.MessageCheckStatus, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user