Commit 09f609fb authored by mdj33's avatar mdj33 Committed by vipwzw

modify nodegroup and node

parent dd78db9e
...@@ -251,36 +251,30 @@ func CreateRawNodeManageCmd() *cobra.Command { ...@@ -251,36 +251,30 @@ func CreateRawNodeManageCmd() *cobra.Command {
} }
func addNodeManageFlags(cmd *cobra.Command) { func addNodeManageFlags(cmd *cobra.Command) {
cmd.Flags().StringP("operation", "o", "", "operation:join,quit,vote") cmd.Flags().Uint32P("operation", "o", 0, "operation:1:join,2:vote,3:quit")
cmd.MarkFlagRequired("operation") cmd.MarkFlagRequired("operation")
cmd.Flags().StringP("addr", "a", "", "operating target addr") cmd.Flags().StringP("addr", "a", "", "operating target addr")
cmd.MarkFlagRequired("addrs")
cmd.Flags().StringP("value", "v", "", "vote value: yes,no") cmd.Flags().StringP("id", "i", "", "operating target id")
cmd.Flags().Float64P("coins_frozen", "c", 0, "join to frozen coins amount, not less config")
cmd.Flags().Uint32P("value", "v", 1, "vote value: 1:yes,2:no")
cmd.Flags().Float64P("coins_frozen", "c", 0, "frozen coins amount, should not less nodegroup's")
} }
func createNodeTx(cmd *cobra.Command, args []string) { func createNodeTx(cmd *cobra.Command, args []string) {
op, _ := cmd.Flags().GetString("operation") op, _ := cmd.Flags().GetUint32("operation")
opAddr, _ := cmd.Flags().GetString("addr") opAddr, _ := cmd.Flags().GetString("addr")
val, _ := cmd.Flags().GetString("value") id, _ := cmd.Flags().GetString("id")
val, _ := cmd.Flags().GetUint32("value")
coins, _ := cmd.Flags().GetFloat64("coins_frozen") coins, _ := cmd.Flags().GetFloat64("coins_frozen")
if op != "vote" && op != "quit" && op != "join" {
fmt.Println("operation should be one of join,quit,vote")
return
}
if opAddr == "" { if opAddr == "" {
fmt.Println("addr parameter should not be null") fmt.Println("addr parameter should not be null")
return return
} }
if op == "vote" && (val != "yes" && val != "no") {
fmt.Println("vote operation value parameter require yes or no value")
return
}
payload := &pt.ParaNodeAddrConfig{Op: op, Value: val, Addr: opAddr, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4} payload := &pt.ParaNodeAddrConfig{Op: op, Id: id, Value: val, Addr: opAddr, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pt.ParaX), Execer: types.ExecName(pt.ParaX),
ActionName: "NodeConfig", ActionName: "NodeConfig",
...@@ -305,11 +299,12 @@ func CreateNodeGroupApplyCmd() *cobra.Command { ...@@ -305,11 +299,12 @@ func CreateNodeGroupApplyCmd() *cobra.Command {
} }
func addNodeGroupApplyCmdFlags(cmd *cobra.Command) { func addNodeGroupApplyCmdFlags(cmd *cobra.Command) {
cmd.Flags().Uint32P("operation", "o", 0, "operation:1:apply,2:approve,3:quit") cmd.Flags().Uint32P("operation", "o", 0, "operation:1:apply,2:approve,3:quit,4:modify")
cmd.MarkFlagRequired("operation") cmd.MarkFlagRequired("operation")
cmd.Flags().StringP("id", "i", "", "apply id for nodegroup ")
cmd.Flags().StringP("addrs", "a", "", "addrs apply for super node,split by ',' ") cmd.Flags().StringP("addrs", "a", "", "addrs apply for super node,split by ',' ")
cmd.MarkFlagRequired("addrs")
cmd.Flags().Float64P("coins_frozen", "c", 0, "coins amount to frozen, not less config") cmd.Flags().Float64P("coins_frozen", "c", 0, "coins amount to frozen, not less config")
...@@ -318,6 +313,7 @@ func addNodeGroupApplyCmdFlags(cmd *cobra.Command) { ...@@ -318,6 +313,7 @@ func addNodeGroupApplyCmdFlags(cmd *cobra.Command) {
func nodeGroupApply(cmd *cobra.Command, args []string) { func nodeGroupApply(cmd *cobra.Command, args []string) {
op, _ := cmd.Flags().GetUint32("operation") op, _ := cmd.Flags().GetUint32("operation")
addrs, _ := cmd.Flags().GetString("addrs") addrs, _ := cmd.Flags().GetString("addrs")
id, _ := cmd.Flags().GetString("id")
coins, _ := cmd.Flags().GetFloat64("coins_frozen") coins, _ := cmd.Flags().GetFloat64("coins_frozen")
if op == 0 || op > 3 { if op == 0 || op > 3 {
...@@ -329,7 +325,7 @@ func nodeGroupApply(cmd *cobra.Command, args []string) { ...@@ -329,7 +325,7 @@ func nodeGroupApply(cmd *cobra.Command, args []string) {
return return
} }
payload := &pt.ParaNodeGroupConfig{Op: op, Addrs: addrs, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4} payload := &pt.ParaNodeGroupConfig{Op: op, Id: id, Addrs: addrs, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pt.ParaX), Execer: types.ExecName(pt.ParaX),
ActionName: "NodeGroupConfig", ActionName: "NodeGroupConfig",
...@@ -499,7 +495,7 @@ func nodeInfo(cmd *cobra.Command, args []string) { ...@@ -499,7 +495,7 @@ func nodeInfo(cmd *cobra.Command, args []string) {
Title: title, Title: title,
Addr: addr, Addr: addr,
} }
var res pt.ParaNodeAddrStatus var res pt.ParaNodeIdStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeStatus", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "paracross.GetNodeStatus", params, &res)
ctx.Run() ctx.Run()
} }
......
...@@ -418,7 +418,12 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error ...@@ -418,7 +418,12 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
return receipt, nil return receipt, nil
} }
if enableParacrossTransfer && commit.Status.Height > 0 && len(commit.Status.CrossTxHashs) > 0 { haveCrossTxs := len(commit.Status.CrossTxHashs) > 0
if types.IsDappFork(a.height, pt.ParaX, pt.ForkCommitTx) && commit.Status.CrossTxHashs[0] == nil {
haveCrossTxs = false
}
if enableParacrossTransfer && commit.Status.Height > 0 && haveCrossTxs {
clog.Debug("paracross.Commit commitDone", "do cross", "") clog.Debug("paracross.Commit commitDone", "do cross", "")
crossTxReceipt, err := a.execCrossTxs(commit) crossTxReceipt, err := a.execCrossTxs(commit)
if err != nil { if err != nil {
......
...@@ -64,11 +64,11 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx * ...@@ -64,11 +64,11 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.ApplyAddr, g.Prev.Status), Value: types.Encode(g.Prev)}) Key: calcLocalNodeTitleStatus(g.Current.Title, g.Prev.Status, g.Prev.Id), Value: types.Encode(g.Prev)})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.ApplyAddr, g.Current.Status), Value: nil}) Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.Status, g.Current.Id), Value: nil})
} else if log.Ty == pt.TyLogParaNodeVoteDone { } else if log.Ty == pt.TyLogParaNodeVoteDone {
var g pt.ReceiptParaNodeVoteDone var g pt.ReceiptParaNodeVoteDone
err := types.Decode(log.Log, &g) err := types.Decode(log.Log, &g)
...@@ -86,8 +86,7 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx * ...@@ -86,8 +86,7 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
for _, log := range receiptData.Logs { for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaNodeGroupApply || log.Ty == pt.TyLogParaNodeGroupApprove || if log.Ty == pt.TyLogParaNodeGroupConfig {
log.Ty == pt.TyLogParaNodeGroupQuit {
var g pt.ReceiptParaNodeGroupConfig var g pt.ReceiptParaNodeGroupConfig
err := types.Decode(log.Log, &g) err := types.Decode(log.Log, &g)
if err != nil { if err != nil {
...@@ -95,11 +94,11 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig ...@@ -95,11 +94,11 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title), Value: types.Encode(g.Prev)}) Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title, g.Current.Id), Value: types.Encode(g.Prev)})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title), Value: nil}) Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title, g.Current.Id), Value: nil})
} }
} }
return &set, nil return &set, nil
......
...@@ -67,11 +67,11 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ ...@@ -67,11 +67,11 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.ApplyAddr, g.Prev.Status), Value: nil}) Key: calcLocalNodeTitleStatus(g.Current.Title, g.Prev.Status, g.Current.Id), Value: nil})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.ApplyAddr, g.Current.Status), Key: calcLocalNodeTitleStatus(g.Current.Title, g.Current.Status, g.Current.Id),
Value: types.Encode(g.Current)}) Value: types.Encode(g.Current)})
} else if log.Ty == pt.TyLogParaNodeVoteDone { } else if log.Ty == pt.TyLogParaNodeVoteDone {
var g pt.ReceiptParaNodeVoteDone var g pt.ReceiptParaNodeVoteDone
...@@ -90,8 +90,7 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ ...@@ -90,8 +90,7 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ
func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
for _, log := range receiptData.Logs { for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaNodeGroupApply || log.Ty == pt.TyLogParaNodeGroupApprove || if log.Ty == pt.TyLogParaNodeGroupConfig {
log.Ty == pt.TyLogParaNodeGroupQuit || log.Ty == pt.TyLogParaNodeGroupModify {
var g pt.ReceiptParaNodeGroupConfig var g pt.ReceiptParaNodeGroupConfig
err := types.Decode(log.Log, &g) err := types.Decode(log.Log, &g)
if err != nil { if err != nil {
...@@ -99,11 +98,11 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t ...@@ -99,11 +98,11 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title), Value: nil}) Key: calcLocalNodeGroupStatusTitle(g.Prev.Status, g.Current.Title, g.Current.Id), Value: nil})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title), Value: types.Encode(g.Current)}) Key: calcLocalNodeGroupStatusTitle(g.Current.Status, g.Current.Title, g.Current.Id), Value: types.Encode(g.Current)})
} }
} }
return &set, nil return &set, nil
......
...@@ -102,22 +102,30 @@ func calcLocalAssetKey(hash []byte) []byte { ...@@ -102,22 +102,30 @@ func calcLocalAssetKey(hash []byte) []byte {
return []byte(fmt.Sprintf(localAssetKey+"%s", hash)) return []byte(fmt.Sprintf(localAssetKey+"%s", hash))
} }
func calcLocalNodeTitleStatus(title, addr string, status int32) []byte { func calcLocalNodeTitleStatus(title string, status int32, id string) []byte {
return []byte(fmt.Sprintf(localNodeTitleStatus+"%s-%02d-%s", title, status, addr)) return []byte(fmt.Sprintf(localNodeTitleStatus+"%s-%02d-%s", title, status, id))
} }
func calcLocalNodeStatusPrefix(title string, status int32) []byte { func calcLocalNodeStatusPrefix(title string, status int32) []byte {
return []byte(fmt.Sprintf(localNodeTitleStatus+"%s-%02d", title, status)) return []byte(fmt.Sprintf(localNodeTitleStatus+"%s-%02d-", title, status))
}
func calcLocalNodeTitlePrefix(title string) []byte {
return []byte(fmt.Sprintf(localNodeTitleStatus+"%s-", title))
} }
func calcLocalNodeTitleDone(title, addr string) []byte { func calcLocalNodeTitleDone(title, addr string) []byte {
return []byte(fmt.Sprintf(localNodeTitleDone+"%s-%s", title, addr)) return []byte(fmt.Sprintf(localNodeTitleDone+"%s-%s", title, addr))
} }
func calcLocalNodeGroupStatusTitle(status int32, title string) []byte { func calcLocalNodeGroupStatusTitle(status int32, title, id string) []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d-%s", status, title)) return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d-%s-%s", status, title, id))
} }
func calcLocalNodeGroupStatusPrefix(status int32) []byte { func calcLocalNodeGroupStatusPrefix(status int32) []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d", status)) return []byte(fmt.Sprintf(localNodeGroupStatusTitle+"%02d-", status))
}
func calcLocalNodeGroupAllPrefix() []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle))
} }
...@@ -85,7 +85,11 @@ func (p *Paracross) Query_GetNodeAddrInfo(in *pt.ReqParacrossNodeInfo) (types.Me ...@@ -85,7 +85,11 @@ func (p *Paracross) Query_GetNodeAddrInfo(in *pt.ReqParacrossNodeInfo) (types.Me
if in == nil || in.Title == "" || in.Addr == "" { if in == nil || in.Title == "" || in.Addr == "" {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
stat, err := getNodeAddr(p.GetStateDB(), in.Title, in.Addr) addrStat, err := getNodeAddr(p.GetStateDB(), in.Title, in.Addr)
if err != nil {
return nil, err
}
stat, err := getNodeId(p.GetStateDB(), addrStat.ProposalId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -230,7 +234,7 @@ func listNodeStatus(db dbm.KVDB, prefix []byte) (types.Message, error) { ...@@ -230,7 +234,7 @@ func listNodeStatus(db dbm.KVDB, prefix []byte) (types.Message, error) {
var resp pt.RespParacrossNodeAddrs var resp pt.RespParacrossNodeAddrs
for _, r := range res { for _, r := range res {
var st pt.ParaNodeAddrStatus var st pt.ParaNodeIdStatus
err = types.Decode(r, &st) err = types.Decode(r, &st)
if err != nil { if err != nil {
panic(err) panic(err)
......
...@@ -34,25 +34,25 @@ func deepCopy(dst, src interface{}) error { ...@@ -34,25 +34,25 @@ func deepCopy(dst, src interface{}) error {
return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
} }
func getNodeAddr(db dbm.KV, title, addr string) (*pt.ParaNodeAddrStatus, error) { func getNodeAddr(db dbm.KV, title, addr string) (*pt.ParaNodeAddrIdStatus, error) {
key := calcParaNodeAddrKey(title, addr) key := calcParaNodeAddrKey(title, addr)
val, err := db.Get(key) val, err := db.Get(key)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var status pt.ParaNodeAddrStatus var status pt.ParaNodeAddrIdStatus
err = types.Decode(val, &status) err = types.Decode(val, &status)
return &status, err return &status, err
} }
func getNodeId(db dbm.KV, id string) (*pt.ParaNodeAddrStatus, error) { func getNodeId(db dbm.KV, id string) (*pt.ParaNodeIdStatus, error) {
val, err := getDb(db, []byte(id)) val, err := getDb(db, []byte(id))
if err != nil { if err != nil {
return nil, err return nil, err
} }
var status pt.ParaNodeAddrStatus var status pt.ParaNodeIdStatus
err = types.Decode(val, &status) err = types.Decode(val, &status)
return &status, err return &status, err
} }
...@@ -88,10 +88,10 @@ func getNodeGroupId(db dbm.KV, id string) (*pt.ParaNodeGroupStatus, error) { ...@@ -88,10 +88,10 @@ func getNodeGroupId(db dbm.KV, id string) (*pt.ParaNodeGroupStatus, error) {
return &status, err return &status, err
} }
func makeVoteDoneReceipt(config *pt.ParaNodeAddrConfig, totalCount, commitCount, most int, pass string, status int32) *types.Receipt { func makeVoteDoneReceipt(config *pt.ParaNodeIdStatus, totalCount, commitCount, most int, pass string, status int32) *types.Receipt {
log := &pt.ReceiptParaNodeVoteDone{ log := &pt.ReceiptParaNodeVoteDone{
Title: config.Title, Title: config.Title,
TargetAddr: config.Addr, TargetAddr: config.TargetAddr,
TotalNodes: int32(totalCount), TotalNodes: int32(totalCount),
TotalVote: int32(commitCount), TotalVote: int32(commitCount),
MostVote: int32(most), MostVote: int32(most),
...@@ -111,10 +111,11 @@ func makeVoteDoneReceipt(config *pt.ParaNodeAddrConfig, totalCount, commitCount, ...@@ -111,10 +111,11 @@ func makeVoteDoneReceipt(config *pt.ParaNodeAddrConfig, totalCount, commitCount,
} }
} }
func makeNodeConfigReceipt(addr string, config *pt.ParaNodeAddrConfig, prev, current *pt.ParaNodeAddrStatus) *types.Receipt { func makeNodeConfigReceipt(fromAddr string, config *pt.ParaNodeAddrConfig, prev, current *pt.ParaNodeIdStatus) *types.Receipt {
key := calcParaNodeAddrKey(config.Title, config.Addr) key := calcParaNodeAddrKey(current.Title, current.TargetAddr)
val := &pt.ParaNodeAddrIdStatus{ProposalId: current.Id}
log := &pt.ReceiptParaNodeConfig{ log := &pt.ReceiptParaNodeConfig{
Addr: addr, Addr: fromAddr,
Config: config, Config: config,
Prev: prev, Prev: prev,
Current: current, Current: current,
...@@ -123,7 +124,7 @@ func makeNodeConfigReceipt(addr string, config *pt.ParaNodeAddrConfig, prev, cur ...@@ -123,7 +124,7 @@ func makeNodeConfigReceipt(addr string, config *pt.ParaNodeAddrConfig, prev, cur
Ty: types.ExecOk, Ty: types.ExecOk,
KV: []*types.KeyValue{ KV: []*types.KeyValue{
{Key: []byte(current.Id), Value: types.Encode(current)}, {Key: []byte(current.Id), Value: types.Encode(current)},
{Key: key, Value: types.Encode(current)}, {Key: key, Value: types.Encode(val)},
}, },
Logs: []*types.ReceiptLog{ Logs: []*types.ReceiptLog{
{ {
...@@ -134,7 +135,7 @@ func makeNodeConfigReceipt(addr string, config *pt.ParaNodeAddrConfig, prev, cur ...@@ -134,7 +135,7 @@ func makeNodeConfigReceipt(addr string, config *pt.ParaNodeAddrConfig, prev, cur
} }
} }
func makeNodeGroupApplyReceipt(addr string, prev, current *pt.ParaNodeGroupStatus, logTy int32) *types.Receipt { func makeNodeGroupIdReceipt(addr string, prev, current *pt.ParaNodeGroupStatus) *types.Receipt {
log := &pt.ReceiptParaNodeGroupConfig{ log := &pt.ReceiptParaNodeGroupConfig{
Addr: addr, Addr: addr,
Prev: prev, Prev: prev,
...@@ -147,14 +148,14 @@ func makeNodeGroupApplyReceipt(addr string, prev, current *pt.ParaNodeGroupStatu ...@@ -147,14 +148,14 @@ func makeNodeGroupApplyReceipt(addr string, prev, current *pt.ParaNodeGroupStatu
}, },
Logs: []*types.ReceiptLog{ Logs: []*types.ReceiptLog{
{ {
Ty: logTy, Ty: pt.TyLogParaNodeGroupConfig,
Log: types.Encode(log), Log: types.Encode(log),
}, },
}, },
} }
} }
func makeParaNodeGroupStatusReceipt(addr string, prev, current *pt.ParaNodeGroupStatus, logTy int32) *types.Receipt { func makeParaNodeGroupStatusReceipt(title string, addr string, prev, current *pt.ParaNodeGroupStatus) *types.Receipt {
key := calcParaNodeGroupStatusKey(title) key := calcParaNodeGroupStatusKey(title)
log := &pt.ReceiptParaNodeGroupConfig{ log := &pt.ReceiptParaNodeGroupConfig{
Addr: addr, Addr: addr,
...@@ -168,7 +169,7 @@ func makeParaNodeGroupStatusReceipt(addr string, prev, current *pt.ParaNodeGroup ...@@ -168,7 +169,7 @@ func makeParaNodeGroupStatusReceipt(addr string, prev, current *pt.ParaNodeGroup
}, },
Logs: []*types.ReceiptLog{ Logs: []*types.ReceiptLog{
{ {
Ty: logTy, Ty: pt.TyLogParaNodeGroupStatusUpdate,
Log: types.Encode(log), Log: types.Encode(log),
}, },
}, },
...@@ -222,17 +223,17 @@ func (a *action) nodeJoin(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -222,17 +223,17 @@ func (a *action) nodeJoin(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
} }
stat, err := getNodeAddr(a.db, config.Title, config.Addr) addrStat, err := getNodeAddr(a.db, config.Title, config.Addr)
if err != nil { if err != nil {
if !isNotFound(err) { if !isNotFound(err) {
return nil, err return nil, err
} }
clog.Info("first time add node addr", "title", config.Title, "addr", config.Addr) clog.Info("first time add node addr", "title", config.Title, "addr", config.Addr)
stat := &pt.ParaNodeAddrStatus{ stat := &pt.ParaNodeIdStatus{
Id: calcParaNodeIdKey(config.Title, common.ToHex(a.txhash)), Id: calcParaNodeIdKey(config.Title, common.ToHex(a.txhash)),
Status: pt.ParacrossNodeJoining, Status: pt.ParacrossNodeJoining,
Title: config.Title, Title: config.Title,
ApplyAddr: config.Addr, TargetAddr: config.Addr,
FromAddr: a.fromaddr, FromAddr: a.fromaddr,
Votes: &pt.ParaNodeVoteDetail{}, Votes: &pt.ParaNodeVoteDetail{},
CoinsFrozen: config.CoinsFrozen} CoinsFrozen: config.CoinsFrozen}
...@@ -242,18 +243,19 @@ func (a *action) nodeJoin(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -242,18 +243,19 @@ func (a *action) nodeJoin(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
return receipt, nil return receipt, nil
} }
var copyStat pt.ParaNodeAddrStatus stat, err := getNodeId(a.db, addrStat.ProposalId)
var copyStat pt.ParaNodeIdStatus
err = deepCopy(&copyStat, stat) err = deepCopy(&copyStat, stat)
if err != nil { if err != nil {
clog.Error("nodeaccount.nodeJoin deep copy fail", "copy", copyStat, "stat", stat) clog.Error("nodeaccount.nodeJoin deep copy fail", "copy", copyStat, "stat", stat)
return nil, err return nil, err
} }
if stat.Status == pt.ParacrossNodeQuited { if stat.Status == pt.ParacrossNodeQuited {
stat = &pt.ParaNodeAddrStatus{ stat = &pt.ParaNodeIdStatus{
Id: calcParaNodeIdKey(config.Title, common.ToHex(a.txhash)), Id: calcParaNodeIdKey(config.Title, common.ToHex(a.txhash)),
Status: pt.ParacrossNodeJoining, Status: pt.ParacrossNodeJoining,
Title: config.Title, Title: config.Title,
ApplyAddr: config.Addr, TargetAddr: config.Addr,
FromAddr: a.fromaddr, FromAddr: a.fromaddr,
Votes: &pt.ParaNodeVoteDetail{}, Votes: &pt.ParaNodeVoteDetail{},
CoinsFrozen: config.CoinsFrozen} CoinsFrozen: config.CoinsFrozen}
...@@ -278,12 +280,7 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -278,12 +280,7 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, stat.Title) return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, stat.Title)
} }
if stat.Status == pt.ParacrossNodeQuiting || stat.Status == pt.ParacrossNodeQuited { var copyStat pt.ParaNodeIdStatus
clog.Error("nodeaccount.nodeQuit wrong status", "status", stat)
return nil, errors.Wrapf(pt.ErrParaUnSupportNodeOper, "nodeAddr %s was quit status:%d", config.Addr, stat.Status)
}
var copyStat pt.ParaNodeAddrStatus
err = deepCopy(&copyStat, stat) err = deepCopy(&copyStat, stat)
if err != nil { if err != nil {
clog.Error("nodeaccount.nodeQuit deep copy fail", "copy", copyStat, "stat", stat) clog.Error("nodeaccount.nodeQuit deep copy fail", "copy", copyStat, "stat", stat)
...@@ -294,12 +291,12 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -294,12 +291,12 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "getNodes for title:%s", config.Title) return nil, errors.Wrapf(err, "getNodes for title:%s", config.Title)
} }
if !validNode(config.Addr, nodes) { if !validNode(stat.TargetAddr, nodes) {
return nil, errors.Wrapf(pt.ErrParaNodeAddrNotExisted, "nodeAddr not existed:%s", config.Addr) return nil, errors.Wrapf(pt.ErrParaNodeAddrNotExisted, "nodeAddr not existed:%s", stat.TargetAddr)
} }
//不允许最后一个账户退出 //不允许最后一个账户退出
if len(nodes) == 1 { if len(nodes) == 1 {
return nil, errors.Wrapf(pt.ErrParaNodeGroupLastAddr, "nodeAddr last one:%s", config.Addr) return nil, errors.Wrapf(pt.ErrParaNodeGroupLastAddr, "nodeAddr last one:%s", stat.TargetAddr)
} }
stat.Status = pt.ParacrossNodeQuiting stat.Status = pt.ParacrossNodeQuiting
...@@ -328,7 +325,7 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -328,7 +325,7 @@ func (a *action) nodeQuit(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
return receipt, nil return receipt, nil
} }
return nil, pt.ErrParaUnSupportNodeOper return nil, errors.Wrapf(pt.ErrParaUnSupportNodeOper, "nodeid %s was quit status:%d", config.Id, stat.Status)
} }
...@@ -342,10 +339,10 @@ func isSuperManager(addr string) bool { ...@@ -342,10 +339,10 @@ func isSuperManager(addr string) bool {
return false return false
} }
func getMostVote(stat *pt.ParaNodeAddrStatus) (int, string) { func getMostVote(stat *pt.ParaNodeIdStatus) (int, int) {
var ok, nok int var ok, nok int
for _, v := range stat.GetVotes().Votes { for _, v := range stat.GetVotes().Votes {
if v == pt.ParaNodeVoteYes { if v == pt.ParaNodeVoteStr[pt.ParaNodeVoteYes] {
ok++ ok++
} else { } else {
nok++ nok++
...@@ -368,9 +365,7 @@ func (a *action) superManagerVoteProc(title string) error { ...@@ -368,9 +365,7 @@ func (a *action) superManagerVoteProc(title string) error {
if err != nil { if err != nil {
return err return err
} }
if status.Status != pt.ParacrossNodeGroupApprove {
return pt.ErrParaNodeGroupStatusWrong
}
confStopBlocks := conf.GInt("paraConsensusStopBlocks") confStopBlocks := conf.GInt("paraConsensusStopBlocks")
data, err := a.exec.paracrossGetHeight(title) data, err := a.exec.paracrossGetHeight(title)
if err != nil { if err != nil {
...@@ -418,7 +413,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -418,7 +413,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, stat.Title) return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, stat.Title)
} }
var copyStat pt.ParaNodeAddrStatus var copyStat pt.ParaNodeIdStatus
err = deepCopy(&copyStat, stat) err = deepCopy(&copyStat, stat)
if err != nil { if err != nil {
clog.Error("nodeaccount.nodevOTE deep copy fail", "copy", copyStat, "stat", stat) clog.Error("nodeaccount.nodevOTE deep copy fail", "copy", copyStat, "stat", stat)
...@@ -430,10 +425,10 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -430,10 +425,10 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
} }
found, index := hasVoted(stat.Votes.Addrs, a.fromaddr) found, index := hasVoted(stat.Votes.Addrs, a.fromaddr)
if found { if found {
stat.Votes.Votes[index] = config.Value stat.Votes.Votes[index] = pt.ParaNodeVoteStr[config.Value]
} else { } else {
stat.Votes.Addrs = append(stat.Votes.Addrs, a.fromaddr) stat.Votes.Addrs = append(stat.Votes.Addrs, a.fromaddr)
stat.Votes.Votes = append(stat.Votes.Votes, config.Value) stat.Votes.Votes = append(stat.Votes.Votes, pt.ParaNodeVoteStr[config.Value])
} }
most, vote := getMostVote(stat) most, vote := getMostVote(stat)
if !isCommitDone(stat, nodes, most) { if !isCommitDone(stat, nodes, most) {
...@@ -460,7 +455,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -460,7 +455,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
if vote == pt.ParaNodeVoteNo { if vote == pt.ParaNodeVoteNo {
// 对已经在group里面的node,直接投票remove,对正在申请中的adding or quiting状态保持不变,对quited的保持不变 // 对已经在group里面的node,直接投票remove,对正在申请中的adding or quiting状态保持不变,对quited的保持不变
if stat.Status == pt.ParacrossNodeJoined { if stat.Status == pt.ParacrossNodeJoined {
receiptGroup, err = unpdateNodeGroup(a.db, config.Title, config.Addr, false) receiptGroup, err = unpdateNodeGroup(a.db, config.Title, stat.TargetAddr, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -476,13 +471,13 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -476,13 +471,13 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
} }
} else { } else {
if stat.Status == pt.ParacrossNodeJoining { if stat.Status == pt.ParacrossNodeJoining {
receiptGroup, err = unpdateNodeGroup(a.db, config.Title, config.Addr, true) receiptGroup, err = unpdateNodeGroup(a.db, config.Title, stat.TargetAddr, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
stat.Status = pt.ParacrossNodeJoined stat.Status = pt.ParacrossNodeJoined
} else if stat.Status == pt.ParacrossNodeQuiting { } else if stat.Status == pt.ParacrossNodeQuiting {
receiptGroup, err = unpdateNodeGroup(a.db, config.Title, config.Addr, false) receiptGroup, err = unpdateNodeGroup(a.db, config.Title, stat.TargetAddr, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -503,7 +498,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -503,7 +498,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
receipt.KV = append(receipt.KV, receiptGroup.KV...) receipt.KV = append(receipt.KV, receiptGroup.KV...)
receipt.Logs = append(receipt.Logs, receiptGroup.Logs...) receipt.Logs = append(receipt.Logs, receiptGroup.Logs...)
} }
receiptDone := makeVoteDoneReceipt(config, len(nodes), len(stat.Votes.Addrs), most, vote, stat.Status) receiptDone := makeVoteDoneReceipt(stat, len(nodes), len(stat.Votes.Addrs), most, pt.ParaNodeVoteStr[vote], stat.Status)
receipt.KV = append(receipt.KV, receiptDone.KV...) receipt.KV = append(receipt.KV, receiptDone.KV...)
receipt.Logs = append(receipt.Logs, receiptDone.Logs...) receipt.Logs = append(receipt.Logs, receiptDone.Logs...)
return receipt, nil return receipt, nil
...@@ -553,14 +548,6 @@ func unpdateNodeGroup(db dbm.KV, title, addr string, add bool) (*types.Receipt, ...@@ -553,14 +548,6 @@ func unpdateNodeGroup(db dbm.KV, title, addr string, add bool) (*types.Receipt,
return makeParaNodeGroupReceipt(title, &copyItem, &item), nil return makeParaNodeGroupReceipt(title, &copyItem, &item), nil
} }
func (a *action) checkConfig(title string) error {
if !validTitle(title) {
return pt.ErrInvalidTitle
}
return nil
}
func getConfigAddrs(addr string) []string { func getConfigAddrs(addr string) []string {
addr = strings.Trim(addr, " ") addr = strings.Trim(addr, " ")
if addr == "" { if addr == "" {
...@@ -673,12 +660,12 @@ func (a *action) nodeGroupApply(config *pt.ParaNodeGroupConfig) (*types.Receipt, ...@@ -673,12 +660,12 @@ func (a *action) nodeGroupApply(config *pt.ParaNodeGroupConfig) (*types.Receipt,
Id: calcParaNodeGroupIdKey(config.Title, common.ToHex(a.txhash)), Id: calcParaNodeGroupIdKey(config.Title, common.ToHex(a.txhash)),
Status: pt.ParacrossNodeGroupApply, Status: pt.ParacrossNodeGroupApply,
Title: config.Title, Title: config.Title,
ApplyAddrs: strings.Join(addrs, ","), TargetAddrs: strings.Join(addrs, ","),
CoinsFrozen: config.CoinsFrozen, CoinsFrozen: config.CoinsFrozen,
MainHeight: a.exec.GetMainHeight(), MainHeight: a.exec.GetMainHeight(),
EmptyBlockInterval: config.EmptyBlockInterval, EmptyBlockInterval: config.EmptyBlockInterval,
FromAddr: a.fromaddr} FromAddr: a.fromaddr}
r := makeNodeGroupApplyReceipt(a.fromaddr, nil, stat, pt.TyLogParaNodeGroupApply) r := makeNodeGroupIdReceipt(a.fromaddr, nil, stat)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -694,7 +681,7 @@ func (a *action) nodeGroupModify(config *pt.ParaNodeGroupConfig) (*types.Receipt ...@@ -694,7 +681,7 @@ func (a *action) nodeGroupModify(config *pt.ParaNodeGroupConfig) (*types.Receipt
CoinsFrozen: config.CoinsFrozen, CoinsFrozen: config.CoinsFrozen,
MainHeight: a.exec.GetMainHeight(), MainHeight: a.exec.GetMainHeight(),
EmptyBlockInterval: config.EmptyBlockInterval} EmptyBlockInterval: config.EmptyBlockInterval}
r := makeNodeGroupApplyReceipt(a.fromaddr, nil, stat, pt.TyLogParaNodeGroupModify) r := makeNodeGroupIdReceipt(a.fromaddr, nil, stat)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -717,7 +704,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupConfig) (*types.Receipt, ...@@ -717,7 +704,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupConfig) (*types.Receipt,
return nil, pt.ErrParaNodeGroupStatusWrong return nil, pt.ErrParaNodeGroupStatusWrong
} }
applyAddrs := strings.Split(status.ApplyAddrs, ",") applyAddrs := strings.Split(status.TargetAddrs, ",")
receipt := &types.Receipt{Ty: types.ExecOk} receipt := &types.Receipt{Ty: types.ExecOk}
//main chain //main chain
...@@ -733,7 +720,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupConfig) (*types.Receipt, ...@@ -733,7 +720,7 @@ func (a *action) nodeGroupQuit(config *pt.ParaNodeGroupConfig) (*types.Receipt,
copyStat := *status copyStat := *status
status.Status = pt.ParacrossNodeGroupQuit status.Status = pt.ParacrossNodeGroupQuit
r := makeNodeGroupApplyReceipt(a.fromaddr, &copyStat, status, pt.TyLogParaNodeGroupQuit) r := makeNodeGroupIdReceipt(a.fromaddr, &copyStat, status)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -756,19 +743,19 @@ func (a *action) nodeGroupApproveModify(config *pt.ParaNodeGroupConfig, modify * ...@@ -756,19 +743,19 @@ func (a *action) nodeGroupApproveModify(config *pt.ParaNodeGroupConfig, modify *
copyModify := *modify copyModify := *modify
modify.Status = pt.ParacrossNodeGroupApprove modify.Status = pt.ParacrossNodeGroupApprove
r := makeNodeGroupApplyReceipt(a.fromaddr, &copyModify, modify, pt.TyLogParaNodeGroupApprove) r := makeNodeGroupIdReceipt(a.fromaddr, &copyModify, modify)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
copyStat := *stat
//对已经approved group和addrs不再统一修改active&frozen改动的coins,因为可能有些addr已经退出group了,没退出的,退出时候按最初设置解冻 //对已经approved group和addrs不再统一修改active&frozen改动的coins,因为可能有些addr已经退出group了,没退出的,退出时候按最初设置解冻
// 这里只修改参数,对后面再加入的节点起作用 // 这里只修改参数,对后面再加入的节点起作用
copyStat := *stat
stat.Id = modify.Id stat.Id = modify.Id
stat.CoinsFrozen = modify.CoinsFrozen stat.CoinsFrozen = modify.CoinsFrozen
stat.EmptyBlockInterval = modify.EmptyBlockInterval stat.EmptyBlockInterval = modify.EmptyBlockInterval
stat.MainHeight = a.exec.GetMainHeight() stat.MainHeight = a.exec.GetMainHeight()
r = makeParaNodeGroupStatusReceipt(a.fromaddr, &copyStat, stat, pt.TyLogParaNodeGroupStatusUpdate) r = makeParaNodeGroupStatusReceipt(config.Title, a.fromaddr, &copyStat, stat)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -797,11 +784,11 @@ func (a *action) nodeGroupApproveApply(config *pt.ParaNodeGroupConfig, apply *pt ...@@ -797,11 +784,11 @@ func (a *action) nodeGroupApproveApply(config *pt.ParaNodeGroupConfig, apply *pt
apply.Status = pt.ParacrossNodeGroupApprove apply.Status = pt.ParacrossNodeGroupApprove
apply.MainHeight = a.exec.GetMainHeight() apply.MainHeight = a.exec.GetMainHeight()
r = makeNodeGroupApplyReceipt(a.fromaddr, &copyStat, apply, pt.TyLogParaNodeGroupApprove) r = makeNodeGroupIdReceipt(a.fromaddr, &copyStat, apply)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
r = makeParaNodeGroupStatusReceipt(a.fromaddr, nil, apply, pt.TyLogParaNodeGroupStatusUpdate) r = makeParaNodeGroupStatusReceipt(config.Title, a.fromaddr, nil, apply)
receipt.KV = append(receipt.KV, r.KV...) receipt.KV = append(receipt.KV, r.KV...)
receipt.Logs = append(receipt.Logs, r.Logs...) receipt.Logs = append(receipt.Logs, r.Logs...)
...@@ -816,33 +803,33 @@ func (a *action) nodeGroupApprove(config *pt.ParaNodeGroupConfig) (*types.Receip ...@@ -816,33 +803,33 @@ func (a *action) nodeGroupApprove(config *pt.ParaNodeGroupConfig) (*types.Receip
return nil, types.ErrNotAllow return nil, types.ErrNotAllow
} }
IdStatus, err := getNodeGroupId(a.db, config.Id) id, err := getNodeGroupId(a.db, config.Id)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if config.Title != IdStatus.Title { if config.Title != id.Title {
return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, IdStatus.Title) return nil, errors.Wrapf(pt.ErrNodeNotForTheTitle, "config title:%s,id title:%s", config.Title, id.Title)
} }
if IdStatus.Status == pt.ParacrossNodeGroupModify { if id.Status == pt.ParacrossNodeGroupModify {
return a.nodeGroupApproveModify(config, IdStatus) return a.nodeGroupApproveModify(config, id)
} }
if IdStatus.Status == pt.ParacrossNodeGroupApply { if id.Status == pt.ParacrossNodeGroupApply {
return a.nodeGroupApproveApply(config, IdStatus) return a.nodeGroupApproveApply(config, id)
} }
clog.Error("nodeGroupApprove id wrong status", "status", IdStatus.Status, "id", config.Id) clog.Error("nodeGroupApprove id wrong status", "status", id.Status, "id", config.Id)
return nil, pt.ErrParaNodeGroupStatusWrong return nil, pt.ErrParaNodeGroupStatusWrong
} }
func (a *action) nodeGroupCreate(status *pt.ParaNodeGroupStatus) *types.Receipt { func (a *action) nodeGroupCreate(status *pt.ParaNodeGroupStatus) *types.Receipt {
nodes := strings.Split(status.ApplyAddrs, ",") nodes := strings.Split(status.TargetAddrs, ",")
var item types.ConfigItem var item types.ConfigItem
key := calcParaNodeGroupAddrsKey(title) key := calcParaNodeGroupAddrsKey(status.Title)
item.Key = string(key) item.Key = string(key)
emptyValue := &types.ArrayConfig{Value: make([]string, 0)} emptyValue := &types.ArrayConfig{Value: make([]string, 0)}
arr := types.ConfigItem_Arr{Arr: emptyValue} arr := types.ConfigItem_Arr{Arr: emptyValue}
...@@ -850,15 +837,15 @@ func (a *action) nodeGroupCreate(status *pt.ParaNodeGroupStatus) *types.Receipt ...@@ -850,15 +837,15 @@ func (a *action) nodeGroupCreate(status *pt.ParaNodeGroupStatus) *types.Receipt
item.GetArr().Value = append(item.GetArr().Value, nodes...) item.GetArr().Value = append(item.GetArr().Value, nodes...)
item.Addr = a.fromaddr item.Addr = a.fromaddr
receipt := makeParaNodeGroupReceipt(title, nil, &item) receipt := makeParaNodeGroupReceipt(status.Title, nil, &item)
//update addr status //update addr status
for i, addr := range nodes { for i, addr := range nodes {
stat := &pt.ParaNodeAddrStatus{ stat := &pt.ParaNodeIdStatus{
Id: status.Id + "-" + strconv.Itoa(i), Id: status.Id + "-" + strconv.Itoa(i),
Status: pt.ParacrossNodeJoined, Status: pt.ParacrossNodeJoined,
Title: status.Title, Title: status.Title,
ApplyAddr: addr, TargetAddr: addr,
Votes: &pt.ParaNodeVoteDetail{Addrs: []string{a.fromaddr}, Votes: []string{"yes"}}, Votes: &pt.ParaNodeVoteDetail{Addrs: []string{a.fromaddr}, Votes: []string{"yes"}},
CoinsFrozen: status.CoinsFrozen, CoinsFrozen: status.CoinsFrozen,
FromAddr: status.FromAddr} FromAddr: status.FromAddr}
...@@ -923,7 +910,7 @@ func (a *action) NodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, erro ...@@ -923,7 +910,7 @@ func (a *action) NodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, erro
return a.nodeQuit(config) return a.nodeQuit(config)
} else if config.Op == pt.ParaNodeVote { } else if config.Op == pt.ParaNodeVote {
if config.Id == "" { if config.Id == "" || config.Value >= pt.ParaNodeVoteEnd {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
return a.nodeVote(config) return a.nodeVote(config)
......
...@@ -108,7 +108,7 @@ func checkGroupApplyReceipt(suite *NodeManageTestSuite, receipt *types.Receipt) ...@@ -108,7 +108,7 @@ func checkGroupApplyReceipt(suite *NodeManageTestSuite, receipt *types.Receipt)
err := types.Decode(receipt.KV[0].Value, &stat) err := types.Decode(receipt.KV[0].Value, &stat)
assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed") assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed")
//suite.T().Log("titleHeight", titleHeight) //suite.T().Log("titleHeight", titleHeight)
assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupApply), receipt.Logs[0].Ty) assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupConfig), receipt.Logs[0].Ty)
assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApply), stat.Status) assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApply), stat.Status)
} }
...@@ -124,7 +124,7 @@ func checkGroupApproveReceipt(suite *NodeManageTestSuite, receipt *types.Receipt ...@@ -124,7 +124,7 @@ func checkGroupApproveReceipt(suite *NodeManageTestSuite, receipt *types.Receipt
err := types.Decode(receipt.KV[len-1].Value, &stat) err := types.Decode(receipt.KV[len-1].Value, &stat)
assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed") assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed")
//suite.T().Log("titleHeight", titleHeight) //suite.T().Log("titleHeight", titleHeight)
assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupApprove), receipt.Logs[len-1].Ty) assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupConfig), receipt.Logs[len-1].Ty)
assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApprove), stat.Status) assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApprove), stat.Status)
} }
......
...@@ -47,26 +47,30 @@ message ParacrossConsensusStatus { ...@@ -47,26 +47,30 @@ message ParacrossConsensusStatus {
string consensBlockHash = 4; string consensBlockHash = 4;
} }
message ParaNodeAddrConfig{ message ParaNodeAddrConfig {
string title = 1; string title = 1;
string op = 2; uint32 op = 2;
string id = 3; string id = 3;
string addr = 4; string addr = 4;
string value = 5; uint32 value = 5;
int64 coinsFrozen = 6; int64 coinsFrozen = 6;
} }
message ParaNodeVoteDetail{ message ParaNodeVoteDetail {
repeated string addrs = 1; repeated string addrs = 1;
repeated string votes = 2; repeated string votes = 2;
} }
message ParaNodeAddrStatus{ message ParaNodeAddrIdStatus {
string proposalId = 1;
}
message ParaNodeIdStatus {
string id = 1; string id = 1;
int32 status = 2; int32 status = 2;
string title = 3; string title = 3;
string applyAddr = 4; string targetAddr = 4;
int64 coinsFrozen = 5; int64 coinsFrozen = 5;
ParaNodeVoteDetail votes = 6; ParaNodeVoteDetail votes = 6;
string fromAddr = 7; string fromAddr = 7;
...@@ -76,8 +80,8 @@ message ParaNodeAddrStatus{ ...@@ -76,8 +80,8 @@ message ParaNodeAddrStatus{
message ReceiptParaNodeConfig { message ReceiptParaNodeConfig {
string addr = 1; string addr = 1;
ParaNodeAddrConfig config = 2; ParaNodeAddrConfig config = 2;
ParaNodeAddrStatus prev = 3; ParaNodeIdStatus prev = 3;
ParaNodeAddrStatus current = 4; ParaNodeIdStatus current = 4;
} }
...@@ -107,7 +111,7 @@ message ParaNodeGroupStatus { ...@@ -107,7 +111,7 @@ message ParaNodeGroupStatus {
string id = 1; string id = 1;
int32 status = 2; int32 status = 2;
string title = 3; string title = 3;
string applyAddrs = 4; string targetAddrs = 4;
int64 coinsFrozen = 5; int64 coinsFrozen = 5;
uint32 emptyBlockInterval = 6; uint32 emptyBlockInterval = 6;
int64 mainHeight = 7; int64 mainHeight = 7;
...@@ -130,7 +134,7 @@ message ReqParacrossNodeInfo { ...@@ -130,7 +134,7 @@ message ReqParacrossNodeInfo {
} }
message RespParacrossNodeAddrs { message RespParacrossNodeAddrs {
repeated ParaNodeAddrStatus addrs = 1; repeated ParaNodeIdStatus addrs = 1;
} }
message RespParacrossNodeGroups { message RespParacrossNodeGroups {
......
...@@ -180,13 +180,13 @@ func (c *Jrpc) GetBlock2MainInfo(req *types.ReqBlocks, result *interface{}) erro ...@@ -180,13 +180,13 @@ func (c *Jrpc) GetBlock2MainInfo(req *types.ReqBlocks, result *interface{}) erro
} }
// GetNodeStatus get super node status // GetNodeStatus get super node status
func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeAddrStatus, error) { func (c *channelClient) GetNodeStatus(ctx context.Context, req *pt.ReqParacrossNodeInfo) (*pt.ParaNodeIdStatus, error) {
r := *req r := *req
data, err := c.Query(pt.GetExecName(), "GetNodeAddrInfo", &r) data, err := c.Query(pt.GetExecName(), "GetNodeAddrInfo", &r)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if resp, ok := data.(*pt.ParaNodeAddrStatus); ok { if resp, ok := data.(*pt.ParaNodeIdStatus); ok {
return resp, nil return resp, nil
} }
return nil, types.ErrDecode return nil, types.ErrDecode
......
...@@ -40,10 +40,7 @@ const ( ...@@ -40,10 +40,7 @@ const (
TyLogParaNodeConfig = 657 TyLogParaNodeConfig = 657
TyLogParaNodeVoteDone = 658 TyLogParaNodeVoteDone = 658
TyLogParaNodeGroupAddrsUpdate = 659 TyLogParaNodeGroupAddrsUpdate = 659
TyLogParaNodeGroupApply = 660 TyLogParaNodeGroupConfig = 660
TyLogParaNodeGroupApprove = 661
TyLogParaNodeGroupQuit = 662
TyLogParaNodeGroupModify = 663
TyLogParaNodeGroupStatusUpdate = 664 TyLogParaNodeGroupStatusUpdate = 664
) )
...@@ -92,14 +89,20 @@ const ( ...@@ -92,14 +89,20 @@ const (
// node config op // node config op
const ( const (
ParaNodeJoin = "join" ParaNodeJoin = iota + 1
ParaNodeQuit = "quit" ParaNodeVote
ParaNodeVote = "vote" ParaNodeQuit
)
ParaNodeVoteYes = "yes" const (
ParaNodeVoteNo = "no" ParaNodeVoteInvalid = iota
ParaNodeVoteYes
ParaNodeVoteNo
ParaNodeVoteEnd
) )
var ParaNodeVoteStr = []string{"invalid", "yes", "no"}
const ( const (
// ParacrossNodeJoining apply for adding group // ParacrossNodeJoining apply for adding group
ParacrossNodeJoining = iota + 1 ParacrossNodeJoining = iota + 1
...@@ -183,6 +186,7 @@ func createRawCommitTx(status *ParacrossNodeStatus, name string, fee int64) (*ty ...@@ -183,6 +186,7 @@ func createRawCommitTx(status *ParacrossNodeStatus, name string, fee int64) (*ty
func CreateRawNodeConfigTx(config *ParaNodeAddrConfig) (*types.Transaction, error) { func CreateRawNodeConfigTx(config *ParaNodeAddrConfig) (*types.Transaction, error) {
config.Title = types.GetTitle() config.Title = types.GetTitle()
config.Addr = strings.Trim(config.Addr, " ") config.Addr = strings.Trim(config.Addr, " ")
config.Id = strings.Trim(config.Id, " ")
action := &ParacrossAction{ action := &ParacrossAction{
Ty: ParacrossActionNodeConfig, Ty: ParacrossActionNodeConfig,
...@@ -199,6 +203,7 @@ func CreateRawNodeConfigTx(config *ParaNodeAddrConfig) (*types.Transaction, erro ...@@ -199,6 +203,7 @@ func CreateRawNodeConfigTx(config *ParaNodeAddrConfig) (*types.Transaction, erro
func CreateRawNodeGroupApplyTx(apply *ParaNodeGroupConfig) (*types.Transaction, error) { func CreateRawNodeGroupApplyTx(apply *ParaNodeGroupConfig) (*types.Transaction, error) {
apply.Title = types.GetTitle() apply.Title = types.GetTitle()
apply.EmptyBlockInterval = 4 apply.EmptyBlockInterval = 4
apply.Id = strings.Trim(apply.Id, " ")
interval := types.Conf("config.consensus.sub.para").GInt("emptyBlockInterval") interval := types.Conf("config.consensus.sub.para").GInt("emptyBlockInterval")
if interval > 0 { if interval > 0 {
apply.EmptyBlockInterval = uint32(interval) apply.EmptyBlockInterval = uint32(interval)
......
...@@ -64,10 +64,7 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo { ...@@ -64,10 +64,7 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo {
TyLogParaNodeConfig: {Ty: reflect.TypeOf(ReceiptParaNodeConfig{}), Name: "LogParaNodeConfig"}, TyLogParaNodeConfig: {Ty: reflect.TypeOf(ReceiptParaNodeConfig{}), Name: "LogParaNodeConfig"},
TyLogParaNodeGroupAddrsUpdate: {Ty: reflect.TypeOf(types.ReceiptConfig{}), Name: "LogParaNodeGroupAddrsUpdate"}, TyLogParaNodeGroupAddrsUpdate: {Ty: reflect.TypeOf(types.ReceiptConfig{}), Name: "LogParaNodeGroupAddrsUpdate"},
TyLogParaNodeVoteDone: {Ty: reflect.TypeOf(ReceiptParaNodeVoteDone{}), Name: "LogParaNodeVoteDone"}, TyLogParaNodeVoteDone: {Ty: reflect.TypeOf(ReceiptParaNodeVoteDone{}), Name: "LogParaNodeVoteDone"},
TyLogParaNodeGroupApply: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupApply"}, TyLogParaNodeGroupConfig: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupApply"},
TyLogParaNodeGroupApprove: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupApprove"},
TyLogParaNodeGroupQuit: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupQuit"},
TyLogParaNodeGroupModify: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupModify"},
TyLogParaNodeGroupStatusUpdate: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupStatusUpdate"}, TyLogParaNodeGroupStatusUpdate: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaNodeGroupStatusUpdate"},
} }
} }
......
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