合约介绍
场景介绍
campaign 合约,实现场景为学生会主席竞选流程。
流程介绍
- 合约初始化时,指定具有owner权限的账户,该账户具有检票与提名候选人以及启动竞选提案的权利。
- 启动竞选提案,需要提名一位候选人,并指定提案通过票数阈值,更新提案状态为投票中,返回该次提案ID。
- 任何人都可以根据提案ID查询该提案的状态。
- 当提案状态为投票中,任何人可以调用投票功能进行投票,限投一人一票,重复投票不会生效。
- 当票数大于启动提案时设置的阈值,提案状态为待检票,owner 可启动检票。
- 检票会进行身份验证,只有owner账户可以成功调用。
- 检票通过后,提案流程结束,提案状态置为已生效,此时任何人都可以查询当前学生会主席信息。
- 当提案状态为未启动、已生效、待检票时,不可使用投票功能。
- 任何人都可根据提案ID查询该提案的候选人信息。
功能介绍
constructor
- Params:
- owner:
- type: address
- desc: owner权限设置
- owner:
- Desc: 设置owner权限账户,初始化提案状态
propose
- Params:
- candidate:
- type: string
- desc: 候选人
- target:
- type: uint256
- desc: 票数阈值
- candidate:
- Returns:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
- Desc: 启动竞选提案
queryProposal
Params:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
Returns:
- status:
- type: string
- desc: 提案状态:未启动(stoped)、投票中(voting)、待检票(passed)、已生效(completed)
- status:
Desc: 查询提案状态
vote
Params:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
Retruns:
- status:
- type: string
- desc: 投票状态:“success” or “error”,error需给出原因
- status:
Desc: 进行投票,调用该方法,视为调用者进行投票一次
queryVotes
Params:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
Returns:
- votes:
- type: uint256
- desc: 当前所获票数,当状态为未启动时,应为0
- votes:
Desc: 查询已经获取的票数
check
Params:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
Returns:
- status:
- type: string
- desc: 检票状态:“success” or “error”,error需给出原因
- status:
Desc: 启动检票
queryPresident
- Returns:
- president:
- type: string
- desc: 竞选成功的候选人
- president:
- Desc: 查询学生会主席信息
queryCandidate
- Params:
- proposalId:
- type: uint256
- desc: 提案ID
- proposalId:
- Returns:
- candidate:
- type: string
- desc: 提案候选人信息
- candidate:
- Desc: 查询提案候选人信息
合约设计
SafeMath 可提供。
|
|
合约部署
编译
solc --abi --bin ./campaign.sol -o build
部署
通过 Java SDK 在百度超级链开放网络进行部署。
SDK使用文档:Java SDK接入指南
获取SDK
|
|
部署合约
|
|
合约调用
发起提案
|
|
查询提案状态
|
|
投票
|
|
查询已经获取的票数
|
|
检票
|
|
查询学生会主席信息
|
|
查询候选人信息
|
|
创建新一轮提案
|
|