Commit da88bf4b authored by QM's avatar QM

add supervision node modify

parent 3eb5918e
...@@ -1525,6 +1525,7 @@ func supervisionNodeCmd() *cobra.Command { ...@@ -1525,6 +1525,7 @@ func supervisionNodeCmd() *cobra.Command {
cmd.AddCommand(getSupervisionNodeGroupAddrsCmd()) cmd.AddCommand(getSupervisionNodeGroupAddrsCmd())
cmd.AddCommand(supervisionNodeListInfoCmd()) cmd.AddCommand(supervisionNodeListInfoCmd())
cmd.AddCommand(getSupervisionNodeInfoCmd()) cmd.AddCommand(getSupervisionNodeInfoCmd())
cmd.AddCommand(supervisionNodeModifyCmd())
return cmd return cmd
} }
...@@ -1774,3 +1775,41 @@ func supervisionNodeInfo(cmd *cobra.Command, args []string) { ...@@ -1774,3 +1775,41 @@ func supervisionNodeInfo(cmd *cobra.Command, args []string) {
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} }
func supervisionNodeModifyCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "modify",
Short: "supervision node modify parameters",
Run: createSupervisionNodeModifyTx,
}
addSupervisionNodeModifyFlags(cmd)
return cmd
}
func addSupervisionNodeModifyFlags(cmd *cobra.Command) {
cmd.Flags().StringP("addr", "a", "", "operating target apply id")
_ = cmd.MarkFlagRequired("addr")
cmd.Flags().StringP("pubkey", "p", "", "operating target apply id")
_ = cmd.MarkFlagRequired("pubkey")
}
func createSupervisionNodeModifyTx(cmd *cobra.Command, args []string) {
paraName, _ := cmd.Flags().GetString("paraName")
addr, _ := cmd.Flags().GetString("addr")
pubkey, _ := cmd.Flags().GetString("pubkey")
if !strings.HasPrefix(paraName, "user.p") {
_, _ = fmt.Fprintln(os.Stderr, "paraName is not right, paraName format like `user.p.guodun.`")
return
}
payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: pt.ParacrossSupervisionNodeModify, Addr: addr, BlsPubKey: pubkey}
params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "SupervisionNodeConfig",
Payload: types.MustPBToJSON(payload),
}
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.CreateTransaction", params, nil)
ctx.RunWithoutMarshal()
}
package executor package executor
import ( import (
"fmt"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
...@@ -228,18 +226,16 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec ...@@ -228,18 +226,16 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
// 不能跟授权节点一致 // 不能跟授权节点一致
if addrExist { if addrExist {
clog.Debug("supervisionNodeGroup Apply", "config.Addr", config.Addr, "err", "config.Addr existed in super group") return nil, errors.Wrapf(pt.ErrParaNodeAddrExisted, "supervisionNodeGroup Apply Addr existed:%s in super group", config.Addr)
return nil, pt.ErrParaNodeAddrExisted
} }
// 判断 node 是否已经申请 // 判断 node 是否已经申请
addrExist, err = a.checkValidSupervisionNode(config) addrExist, err = a.checkValidSupervisionNode(config)
if err != nil { if err != nil {
fmt.Println("err:", err) return nil, err
} }
if addrExist { if addrExist {
clog.Debug("supervisionNodeGroup Apply", "config.Addr", config.Addr, "err", "config.Addr existed in supervision group") return nil, errors.Wrapf(pt.ErrParaSupervisionNodeAddrExisted, "supervisionNodeGroup Apply Addr existed:%s", config.Addr)
return nil, pt.ErrParaSupervisionNodeAddrExisted
} }
// 在主链上冻结金额 // 在主链上冻结金额
...@@ -426,6 +422,23 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re ...@@ -426,6 +422,23 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
return receipt, nil return receipt, nil
} }
func (a *action) supervisionNodeModify(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) {
addrStat, err := getNodeAddr(a.db, config.Title, config.Addr)
if err != nil {
return nil, errors.Wrapf(err, "nodeAddr:%s get error", config.Addr)
}
// 只能提案发起人
if a.fromaddr != config.Addr {
return nil, errors.Wrapf(types.ErrNotAllow, "addr create by:%s,not by:%s", config.Addr, a.fromaddr)
}
preStat := *addrStat
addrStat.BlsPubKey = config.BlsPubKey
return makeParaSupervisionNodeStatusReceipt(a.fromaddr, &preStat, addrStat), nil
}
func (a *action) SupervisionNodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) { func (a *action) SupervisionNodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) {
cfg := a.api.GetConfig() cfg := a.api.GetConfig()
if !validTitle(cfg, config.Title) { if !validTitle(cfg, config.Title) {
...@@ -448,6 +461,8 @@ func (a *action) SupervisionNodeConfig(config *pt.ParaNodeAddrConfig) (*types.Re ...@@ -448,6 +461,8 @@ func (a *action) SupervisionNodeConfig(config *pt.ParaNodeAddrConfig) (*types.Re
} else if config.Op == pt.ParacrossSupervisionNodeCancel { } else if config.Op == pt.ParacrossSupervisionNodeCancel {
// 撤销未批准的申请 // 撤销未批准的申请
return a.supervisionNodeCancel(config) return a.supervisionNodeCancel(config)
} else if config.Op == pt.ParacrossSupervisionNodeModify {
return a.supervisionNodeModify(config)
} }
return nil, pt.ErrParaUnSupportNodeOper return nil, pt.ErrParaUnSupportNodeOper
......
...@@ -175,6 +175,7 @@ const ( ...@@ -175,6 +175,7 @@ const (
ParacrossSupervisionNodeApprove ParacrossSupervisionNodeApprove
ParacrossSupervisionNodeQuit ParacrossSupervisionNodeQuit
ParacrossSupervisionNodeCancel ParacrossSupervisionNodeCancel
ParacrossSupervisionNodeModify
) )
// 0 普通节点共识 1 授权节点正在共识 2 监督节点正在共识 // 0 普通节点共识 1 授权节点正在共识 2 监督节点正在共识
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment