赞
踩
Table 合约:该合约负责维护候选人的信息。每个候选人都有一个唯一的标识符sign_key,以及与之相关联的其他属性,包括活动名称activity_name、参与者participant、公钥publicKey、签名数据sign_data。通过添加候选人和查询候选人信息等功能,Table合约提供了对候选人信息的管理和检索。
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Table { struct Candidate { string activity_name; string participant; string publicKey; string sign_data; string sign_key; } mapping(string => Candidate) public candidates; function addCandidate(string memory activity_name, string memory participant, string memory publicKey, string memory sign_data, string memory sign_key) public { candidates[sign_key] = Candidate(activity_name, participant, publicKey, sign_data, sign_key); } function getCandidateInfo(string memory sign_key) public view returns (string memory, string memory, string memory, string memory, string memory) { Candidate memory candidate = candidates[sign_key]; return (candidate.activity_name, candidate.participant, candidate.publicKey, candidate.sign_data, candidate.sign_key); } }
Vote 合约:该合约则负责实现投票功能。它引用了Table合约来管理候选人信息。通过调用Table合约中的函数来添加候选人,Vote合约提供了将候选人加入到投票系统中的功能。另外,它还提供了查询候选人信息的功能。
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "./Table.sol"; contract Vote { Table public electionTable; event CandidateAdded(string activity_name, string participant, string publicKey, string sign_data, string sign_key); constructor() public { electionTable = new Table(); } function addCandidate(string memory activity_name, string memory participant, string memory publicKey, string memory sign_data, string memory sign_key) public { electionTable.addCandidate(activity_name, participant, publicKey, sign_data, sign_key); emit CandidateAdded(activity_name, participant, publicKey, sign_data, sign_key); } function getCandidateInfo(string memory sign_key) public view returns (string memory, string memory, string memory, string memory, string memory) { return electionTable.getCandidateInfo(sign_key); } }
再编译和部署完智能合约后,可以得到合约的地址
点击右上角导出Java项目后,即可导出一个自命名的Java项目
项目结构如图:
这是一个gradle构建的SpringBoot项目
TestController.java测试合约的add和get方法是否调用成功
package org.example.demo2.controller; import org.example.demo2.model.bo.VoteAddCandidateInputBO; import org.example.demo2.model.bo.VoteGetCandidateInfoInputBO; import org.example.demo2.service.VoteService; import org.fisco.bcos.sdk.v3.transaction.model.dto.CallResponse; import org.fisco.bcos.sdk.v3.transaction.model.dto.TransactionResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private VoteService voteService; @PostMapping("/addCandidate") public TransactionResponse set(@RequestBody VoteAddCandidateInputBO vai) throws Exception { TransactionResponse result = voteService.addCandidate(vai); return result; } @GetMapping("/getCandidateInfo") public CallResponse get(@RequestBody VoteGetCandidateInfoInputBO vgi) throws Exception { CallResponse response = voteService.getCandidateInfo(vgi); return response; } }
项目启动成功如图所示:
下图为add方法:
下图为get方法:
调用方法成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。