期末项目在实现投票Dapp的添加候选人功能的时候,无论怎么样数据都传不进去智能合约里面
投票的HTML
<div class="panel-body">
<div id="main" style="width: 400px; margin-left:400px ;">
<div class="control-group">
<label class="control-label" for="inputName">投票主题</label>
<div class="controls">
<input type="text" class="form-control" id="inputName" name="name" placeholder="请输入投票主题" required>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputProposals">候选人</label>
<div class="controls">
<input type="text" class="form-control" id="inputProposals" name="proposals" placeholder="请输入候选人,以英文逗号分隔" required>
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
</label>
<a class="btn" href="javascript:history.back(-1)">返回列表</a>
<button class="btn btn-primary" onclick="App.addBallotSubmit()" class="btn">发起投票</button>
</div>
</div>
</div>
以下是创建投票的JS方法
//初始化添加页面
initAddBallot: function () {
this.initWeb3();
$.getJSON('Collection.json', function (data) {
App.contracts.Collection = TruffleContract(data);
App.contracts.Collection.setProvider(App.web3Provider);
});
},
//添加投票信息
addBallotSubmit: function () {
var ballotName = $("#inputName").val();
var proposals_arry = $("#inputProposals").val().split(",");
var byte32_arry = new Array(proposals_arry.length);
if(ballotName==""||proposals_arry==""){
alert("请完善投票信息!");
return false;
}else{
for (var i = 0; i <proposals_arry.length; i++) {
byte32_arry[i] = App.stringToBytes32(proposals_arry[i]);
}
App.contracts.Collection.deployed().then(function (instance) {
collection = instance;
web3.eth.defaultAccount = web3.eth.coinbase;
return collection.addBallot(ballotName, byte32_arry, { gas: 3000000 });
}).then(function (result) {
console.log(result);
alert("添加成功");
history.back(-1);
}).catch(function (error) {
console.log(error);
});
return false;
}
},
以下是显示投票的JS方法
//投票界面初始化
initVote: function () {
this.initWeb3();
var electionInstance;
//获得账号信息
web3.eth.getCoinbase(function (err, account) {
if (err === null) {
App.account = account;
$("#accountAddress").html("您的账号地址: " + account);
}
});
$.getJSON("Election.json", function (election) {
App.contracts.Election = TruffleContract(election);
App.contracts.Election.setProvider(App.web3Provider);
App.contracts.Election.at(App.getQueryVariable('address')).then(function (instance) {
electionInstance = instance;
return electionInstance.candidateCount();
}).then(function (candidatesCount) {
var $candidatesResults = $("#candidatesResults");
$candidatesResults.empty();
var $cadidatesSelect = $("#cadidatesSelect");
$cadidatesSelect.empty();
for (var i = 1; i <= candidatesCount; i++) {
electionInstance.candidates(i).then(function (candidate) {
var id = candidate[0];
var name = candidate[1];
var voteCount = candidate[2];
var candidateTemplate = "<tr><th>" + id + "</th><td>" + App.byte32ToString(name) + "</td><td>" + voteCount + "</td></tr>";
$candidatesResults.append(candidateTemplate);
var cadidateOption = "<option value='" + id + "'>" + App.byte32ToString(name) + "</option>";
$cadidatesSelect.append(cadidateOption);
$('#search').hide();
});
}
return electionInstance.voters(App.account);
}).then(function (hasVoted) {
if (hasVoted) {
$('form').hide();
$('#back_up').hide();
$('#search').show();
var c = $("#accountAddress").html();
$("#accountAddress").html(c + "</br>" + "(此地址已参与投票)");
}
}).catch(function (err) {
console.warn('90raw');
});
})
},
智能合约
pragma solidity ^0.4.2;
contract Election {
//标题
string public title;
//结构体
struct Candidate {
uint id;
bytes32 name;
uint voteCount;
}
//存储结构体(id,候选人)
mapping (uint => Candidate) public candidates;
//是否已经投票了
mapping (address=>bool) public voters;
//总数量
uint public candidateCount;
//构造函数
constructor (string name,bytes32[] _proposals) public {
title=name;
for(uint i = 0; i < _proposals.length; i++) {
candidateCount ++;
candidates[candidateCount] = Candidate(candidateCount, _proposals[i], 0);
}
}
//投票
function vote(uint _candidateId) public {
require(_candidateId > 0 && _candidateId <= candidateCount);
if(voters[msg.sender]==true){
}else
//记录用户已经投票了
voters[msg.sender] = true;
candidates[_candidateId].voteCount ++;
}
function info() public view returns(string _title,string voter,bytes32 winner) {
_title = title;
voter = "ironman";
winner = getWinner();
}
function getWinner() public view returns(bytes32) {
uint count=0;
bytes32 winner;
for(uint i=1;i<=candidateCount;i++){
if(candidates[i].voteCount>count){
count = candidates[i].voteCount;
winner = candidates[i].name;
}
}
if(count==0){
return 0;
}
return winner;
}
}
pragma solidity ^0.4.2;
import "./Election.sol";
contract Collection {
address[] public ballots;
address owner ;
function addBallot(string name,bytes32[] _proposals) public returns(address address_) {
owner = msg.sender;
Election election = new Election(name,_proposals);
address_ = address(election);
ballots.push(address_);
}
function getAllBallots() public view returns (address[] ballots_) {
ballots_ = ballots;
}
function delBallot(address address_) public {
if(msg.sender==owner){
for(uint i=0;i<ballots.length;i++){
if(ballots[i]==address_){
updateArrays(i);
}
}
}
}
function updateArrays(uint i) private{
if(i!=ballots.length-1){
for(i;i<ballots.length;i++){
ballots[i] = ballots[i+1];
}
}
ballots.length = ballots.length-1;
}
}
尝试解决办法用truffle重新获取Election.sol的json文件,但是部署的时候显示未定义
var Collection = artifacts.require("./Election.sol");
module.exports = function(deployer) {
deployer.deploy(Election);
};
Error:
相似问题