Commit fdef66ed authored by jiangpeng's avatar jiangpeng

dapp/vote:add nick name for group member

parent 3fcb74f9
......@@ -27,31 +27,52 @@ func createGroupFlags(cmd *cobra.Command) {
cmd.Flags().StringArrayP("admins", "a", nil, "group admin address array, default set creator as admin")
cmd.Flags().StringArrayP("members", "m", nil, "group member address array")
cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array")
cmd.Flags().StringArrayP("nicks", "c", nil, "group member nick name array")
markRequired(cmd, "name")
}
func formatAddMembers(addrs, nickNames []string, voteWeights []uint) []*vty.GroupMember {
if len(voteWeights) == 0 {
voteWeights = make([]uint, len(addrs))
}
if len(voteWeights) != len(voteWeights) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
return nil
}
if len(nickNames) == 0 {
nickNames = make([]string, len(addrs))
}
if len(nickNames) != len(addrs) {
fmt.Fprintf(os.Stderr, "member nick name array, add member addr array should have same length")
return nil
}
members := make([]*vty.GroupMember, 0)
for i, addr := range addrs {
members = append(members, &vty.GroupMember{Addr: addr, VoteWeight: uint32(voteWeights[i]), NickName: nickNames[i]})
}
return members
}
func createGroup(cmd *cobra.Command, args []string) {
name, _ := cmd.Flags().GetString("name")
admins, _ := cmd.Flags().GetStringArray("admins")
memberAddrs, _ := cmd.Flags().GetStringArray("members")
weights, _ := cmd.Flags().GetUintSlice("weights")
nicks, _ := cmd.Flags().GetStringArray("nicks")
if name == "" {
fmt.Fprintf(os.Stderr, "ErrNilGroupName")
return
}
if len(weights) == 0 {
weights = make([]uint, len(memberAddrs))
}
if len(weights) != len(memberAddrs) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
return
}
members := make([]*vty.GroupMember, 0)
for i, addr := range memberAddrs {
members = append(members, &vty.GroupMember{Addr: addr, VoteWeight: uint32(weights[i])})
members := formatAddMembers(memberAddrs, nicks, weights)
if members == nil {
return
}
params := &vty.CreateGroup{
......@@ -78,6 +99,7 @@ func updateGroupFlags(cmd *cobra.Command) {
cmd.Flags().StringP("groupID", "g", "", "group id")
cmd.Flags().StringArrayP("addMembers", "m", nil, "group member address array for adding")
cmd.Flags().UintSliceP("weights", "w", nil, "member vote weight array for adding")
cmd.Flags().StringArrayP("nicks", "c", nil, "group member nick name array")
cmd.Flags().StringArrayP("removeMembers", "v", nil, "group member address array for removing")
cmd.Flags().StringArrayP("addAdmins", "a", nil, "group admin address array for adding")
cmd.Flags().StringArrayP("removeAdmins", "r", nil, "group admin address array for removing")
......@@ -89,6 +111,7 @@ func updateGroup(cmd *cobra.Command, args []string) {
groupID, _ := cmd.Flags().GetString("groupID")
addAddrs, _ := cmd.Flags().GetStringArray("addMembers")
weights, _ := cmd.Flags().GetUintSlice("weights")
nicks, _ := cmd.Flags().GetStringArray("nicks")
removeAddrs, _ := cmd.Flags().GetStringArray("removeMembers")
addAdmins, _ := cmd.Flags().GetStringArray("addAdmins")
removeAdmins, _ := cmd.Flags().GetStringArray("removeAdmins")
......@@ -97,19 +120,11 @@ func updateGroup(cmd *cobra.Command, args []string) {
fmt.Fprintf(os.Stderr, "ErrNilGroupID")
return
}
if len(weights) == 0 {
weights = make([]uint, len(addAddrs))
}
if len(weights) != len(addAddrs) {
fmt.Fprintf(os.Stderr, "member address array length should equal with vote weight array length")
addMembers := formatAddMembers(addAddrs, nicks, weights)
if addMembers == nil {
return
}
addMembers := make([]*vty.GroupMember, 0)
for i, addr := range addAddrs {
addMembers = append(addMembers, &vty.GroupMember{Addr: addr, VoteWeight: uint32(weights[i])})
}
params := &vty.UpdateGroup{
GroupID: groupID,
RemoveMembers: removeAddrs,
......
......@@ -108,7 +108,7 @@ func (a *action) updateGroup(update *vty.UpdateGroup) (*types.Receipt, error) {
group.Members = append(group.Members, member)
}
}
group.MemberNum = uint32(len(group.Members))
adminMap := make(map[string]int)
for index, addr := range group.Admins {
adminMap[addr] = index
......
......@@ -55,16 +55,15 @@ func (v *vote) ExecLocal_UpdateGroup(update *vty.UpdateGroup, tx *types.Transact
return nil, err
}
dbSet.KV = kvs
kvs, err = v.addGroupMember(groupInfo.GetID(), update.AddMembers)
kvs, err = v.removeGroupMember(groupInfo.GetID(), update.RemoveMembers)
if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "addMemberErr", err)
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "removeMemberErr", err)
return nil, err
}
dbSet.KV = append(dbSet.KV, kvs...)
kvs, err = v.removeGroupMember(groupInfo.GetID(), update.RemoveMembers)
kvs, err = v.addGroupMember(groupInfo.GetID(), update.AddMembers)
if err != nil {
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "removeMemberErr", err)
elog.Error("execLocal UpdateGroup", "txHash", hex.EncodeToString(tx.Hash()), "addMemberErr", err)
return nil, err
}
dbSet.KV = append(dbSet.KV, kvs...)
......
......@@ -18,6 +18,7 @@ message VoteAction {
message GroupMember {
string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
}
//创建投票组
......
......@@ -27,6 +27,7 @@ message CreateGroup {
message GroupMember {
string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
}
```
......@@ -68,6 +69,12 @@ message UpdateGroup {
repeated string addAdmins = 4; //增加管理员
repeated string removeAdmins = 5; //删除管理员
}
message GroupMember {
string addr = 1; //用户地址
uint32 voteWeight = 2; //投票权重, 不填时默认为1
string nickName = 3; //群昵称
}
```
##### 交易回执
```proto
......@@ -376,14 +383,17 @@ curl -kd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"List
```
#### 获取投票列表(ListVote)
获取全局投票列表, 指定groupID时,则获取指定组的投票列表
- 获取全局投票列表
- 可指定groupID,获取指定组的投票列表
- 可指定投票状态进行分页查找, status 0表示不做状态区分
##### 请求结构
```proto
//列表请求结构
message ReqListVote {
string groupID = 1; //指定所属组ID
ReqListItem listReq = 2; //列表请求
uint32 status = 3; //指定投票状态
uint32 status = 3; //指定投票状态, 1即将开始,2正在进行,3已经结束,4已关闭
}
message ReqListItem {
......
This diff is collapsed.
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