types

package
v1.68.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2023 License: BSD-3-Clause Imports: 5 Imported by: 0

README

投票合约

基于区块链,公开透明的投票系统

交易功能

以下功能需要创建交易,并在链上执行

创建投票组(CreateGroup)
  • 设定投票组名称,管理员和组成员
  • 默认创建者为管理员
  • 可设定组成员的投票权重,默认都为1
  • 投票组ID在交易执行后自动生成
交易请求

//创建投票组
message CreateGroup {
    string   name                    = 1; //投票组名称
    repeated string admins           = 2; //管理员地址列表, 创建者默认为管理员
    repeated GroupMember members     = 3; //组员
    string               description = 4; //描述
}

message GroupMember {
    string addr       = 1; //用户地址
    uint32 voteWeight = 2; //投票权重, 不填时默认为1
    string nickName   = 3; //群昵称
}

交易回执

// 投票组信息
message GroupInfo {

    string   ID                      = 1; //投票组ID
    string   name                    = 2; //投票组名称
    uint32   memberNum               = 3; //组员数量
    string   creator                 = 4; //创建者
    repeated string admins           = 5; //管理员列表
    repeated GroupMember members     = 6; //成员列表
    string               description = 7; //描述信息
    uint32 voteNum = 8; //投票数量
}

创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: CreateGroup
curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"CreateGroup","payload":{"name":"group30","admins":[],"members":[{"addr":"1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5","voteWeight":0}],"description":""}}],"id":0}' http://localhost:8801
更新投票组(UpdateGroup)

指定投票组ID,并由管理员添加或删除组成员、管理员

交易请求
message UpdateGroup {
    string   groupID                = 1; //投票组ID
    repeated GroupMember addMembers = 2; //需要增加的组成员
    repeated string removeMembers   = 3; //删除组成员的地址列表
    repeated string addAdmins       = 4; //增加管理员
    repeated string removeAdmins    = 5; //删除管理员
}

message GroupMember {
    string addr       = 1; //用户地址
    uint32 voteWeight = 2; //投票权重, 不填时默认为1
    string nickName   = 3; //群昵称
}
交易回执

// 投票组信息
message GroupInfo {

    string   ID                      = 1; //投票组ID
    string   name                    = 2; //投票组名称
    uint32   memberNum               = 3; //组员数量
    string   creator                 = 4; //创建者
    repeated string admins           = 5; //管理员列表
    repeated GroupMember members     = 6; //成员列表
    string               description = 7; //描述信息
    uint32 voteNum = 8; //投票数量
}

创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: UpdateGroup
curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"UpdateGroup","payload":{"groupID":"g000000000000700000","addMembers":[{"addr":"member1","voteWeight":0},{"addr":"member2","voteWeight":0}],"removeMembers":["member3"],"addAdmins":["admin1"],"removeAdmins":["admin2"]}}],"id":0}' http://localhost:8801
创建投票(CreateVote)
  • 由管理员发起
  • 设定投票名称,投票选项,关联投票组ID
  • 关联投票组,即只有这些投票组的成员进行投票
  • 投票ID在交易执行后生成
交易请求

// 创建投票交易,请求结构
message CreateVote {
    string   name                  = 1; //投票名称
    string   groupID               = 2; //投票关联组
    repeated string voteOptions    = 3; //投票选项列表
    int64           beginTimestamp = 4; //投票开始时间戳
    int64           endTimestamp   = 5; //投票结束时间戳
    string          description    = 6; //描述信息
}

交易回执

//投票信息
message VoteInfo {

    string   ID                        = 1;  //投票ID
    string   name                      = 2;  //投票名称
    string   creator                   = 3;  //创建者
    string   groupID                   = 4;  //投票关联的投票组
    repeated VoteOption voteOptions    = 5;  //投票的选项
    int64               beginTimestamp = 6;  //投票开始时间戳
    int64               endTimestamp   = 7;  //投票结束时间戳
    repeated CommitInfo commitInfos    = 8;  //已投票的提交信息
    string              description    = 9;  //描述信息
    uint32              status         = 10; //状态,1即将开始,2正在进行,3已经结束,4已关闭
}

//投票选项
message VoteOption {
    string option = 1; //投票选项
    uint32 score  = 2; //投票得分
}
创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: CreateVote
curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"CreateVote","payload":{"name":"vote1","groupID":"g000000000000600000","voteOptions":["A","B","C"],"beginTimestamp":"1611562096","endTimestamp":"1611648496","description":""}}],"id":0}' http://localhost:8801
提交投票(CommitVote)
  • 投票组成员发起投票交易
  • 指定投票ID,投票选项
  • 投票选项使用数组下标标识,而不是选项内容
交易请求

// 创建提交投票交易,请求结构
message CommitVote {
    string voteID      = 1; //投票ID
    uint32 optionIndex = 2; //投票选项数组下标,下标对应投票内容
}

交易回执

//投票信息
message CommitInfo {
    string addr       = 1; //提交地址
    string txHash     = 2; //提交交易哈希
    uint32 voteWeight = 3; //投票权重
}
创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: CommitVote
curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"CommitVote","payload":{"voteID":"v000000000001300000","optionIndex":0}}],"id":0}' http://localhost:8801

关闭投票(CloseVote)
  • 由管理员发起,将指定投票关闭
交易请求

message CloseVote {
    string voteID = 1; // 投票ID
}

交易回执

message VoteInfo {

    string   ID                        = 1;  //投票ID
    string   name                      = 2;  //投票名称
    string   creator                   = 3;  //创建者
    string   groupID                   = 4;  //投票关联的投票组
    repeated VoteOption voteOptions    = 5;  //投票的选项
    int64               beginTimestamp = 6;  //投票开始时间戳
    int64               endTimestamp   = 7;  //投票结束时间戳
    repeated CommitInfo commitInfos    = 8;  //已投票的提交信息
    string              description    = 9;  //描述信息
    uint32              status         = 10; //状态,1即将开始,2正在进行,3已经结束,4已关闭
    string              groupName      = 11; //所属投票组名称
}
创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: CloseVote
curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"CloseVote","payload":{"voteID":"v000000000001300000"}}],"id":0}' http://localhost:8801
更新用户信息(UpdateMember)
  • 目前仅支持用户更新名称信息
交易请求

message UpdateMember {
    string name = 1; //用户名称
}

交易回执

message MemberInfo {
    string   addr            = 1; //地址
    string   name            = 2; //用户名称
    repeated string groupIDs = 3; //所属投票组的ID列表
}
创建交易示例
  • 创建交易通用json rpc接口,Chain33.CreateTransaction
  • actionName: UpdateMember
 curl -kd  '{"method":"Chain33.CreateTransaction","params":[{"execer":"vote","actionName":"UpdateMember","payload":{"name":"name1"}}],"id":0}' http://localhost:8801

查询功能

以下功能为本地查询,无需创建交易

获取组信息(GetGroups)

根据投票组ID查询组信息,支持多个同时查询

请求结构
message ReqStrings {
    repeated string items = 1; //投票组ID列表
}
响应结构
message GroupInfos {
    repeated GroupInfo groupList = 1; //投票组信息列表
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: GetGroups
curl -ksd '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"GetGroups","payload":{"items":["g000000000001700000","g000000000001800000"]}}],"id":0}' http://localhost:8801
获取投票信息(GetVotes)

根据投票ID查询投票信息,支持多个同时查询

请求结构
message ReqStrings {
    repeated string items = 1; //投票ID列表
}
响应结构
message ReplyVoteList {
    repeated VoteInfo voteList         = 1; //投票列表
    int64             currentTimestamp = 2; //当前系统时间
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: GetVotes
curl -kd  '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"GetVotes","payload":{"items":["v000000000001300000","v000000000001400000"]}}],"id":0}' http://localhost:8801
获取成员信息(GetMembers)

根据用户地址,获取用户信息,支持多个同时查询

请求结构
message ReqStrings {
    repeated string items = 1; //用户地址列表
}
响应结构

message MemberInfos {
    repeated MemberInfo memberList = 1; //投票组成员信息列表
}

message MemberInfo {
    string   addr            = 1; //地址
    string   name            = 2; //用户名称
    repeated string groupIDs = 3; //所属投票组的ID列表
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: GetMembers
curl -kd  '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"GetMembers","payload":{"items":["1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"]}}],"id":0}' http://localhost:8801
获取投票组列表(ListGroup)

全局投票组有序列表

请求结构
//列表请求结构
message ReqListItem {
    string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
    int32  count       = 2; //请求列表项数量, 0表示请求所有
    int32  direction   = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
}
响应结构
message GroupInfos {
    repeated GroupInfo groupList = 1; //投票组信息列表
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: ListGroup
curl -kd  '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"ListGroup","payload":{"startItemID":"","count":2,"direction":0}}],"id":0}' http://localhost:8801
获取投票列表(ListVote)
  • 获取全局投票列表
  • 可指定groupID,获取指定组的投票列表
  • 可指定投票状态进行分页查找, status 0表示不做状态区分
请求结构
//列表请求结构
message ReqListVote {
    string      groupID = 1; //指定所属组ID
    ReqListItem listReq = 2; //列表请求
    uint32      status  = 3; //指定投票状态, 1即将开始,2正在进行,3已经结束,4已关闭
}

message ReqListItem {
    string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
    int32  count       = 2; //请求列表项数量, 0表示请求所有
    int32  direction   = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
}
响应结构
message ReplyVoteList {
    repeated VoteInfo voteList         = 1; //投票列表
    int64             currentTimestamp = 2; //当前系统时间
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: ListVote
curl -kd  '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"ListVote","payload":{"groupID":"","listReq":{"startItemID":"","count":2,"direction":0}}}],"id":0}' http://localhost:8801
获取用户列表(ListMember)

全局用户有序列表

请求结构
//列表请求结构
message ReqListItem {
    string startItemID = 1; //列表开始的ID,如请求组列表即groupID,不包含在结果中
    int32  count       = 2; //请求列表项数量, 0表示请求所有
    int32  direction   = 3; // 0表示根据ID降序,1表示升序,目前ID和区块高度正相关
}
响应结构
message MemberInfos {
    repeated MemberInfo memberList = 1; //投票组成员信息列表
}
示例
  • 通用查询json rpc接口,Chain33.Query
  • funcName: ListMember
curl -kd  '{"method":"Chain33.Query","params":[{"execer":"vote","funcName":"ListMember","payload":{"startItemID":"","count":1,"direction":1}}],"id":0}' http://localhost:8801
错误码表

发送交易和查询等接口可能返回的错误

名称 含义
errEmptyName 名称为空
errInvalidMemberWeights 非法投票权重
errDuplicateMember 投票组成员重复
errDuplicateAdmin 投票组管理员重复
errInvalidVoteTime 非法投票时间
errInvalidVoteOption 非法投票选项
errVoteNotExist 投票不存在
errGroupNotExist 投票组不存在
errStateDBGet 状态数据获取错误
errInvalidVoteID 非法投票ID
errInvalidGroupID 非法投票组ID
errInvalidOptionIndex 非法投票索引
errAddrAlreadyVoted 已完成投票
errVoteAlreadyFinished 投票已结束
errVoteNotStarted 投票未开始
errVoteAlreadyClosed 投票已关闭
errAddrPermissionDenied 地址没有权限
其他

投票合约proto源文件

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package commands implement dapp client commands
Package commands implement dapp client commands

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL