Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在制作投票Dapp的时候遇到无法向智能合约传参的问题,也没有报错??

在制作投票Dapp的时候遇到无法向智能合约传参的问题,也没有报错??

提问于 2019-06-14 04:05:34
回答 1关注 0查看 289

期末项目在实现投票Dapp的添加候选人功能的时候,无论怎么样数据都传不进去智能合约里面

Array数组里面为0一直传递失败,上方报错为光影效果JS尝试过删除没用
Array数组里面为0一直传递失败,上方报错为光影效果JS尝试过删除没用

投票的HTML

代码语言:html
AI代码解释
复制
 <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方法

代码语言:js
AI代码解释
复制
//初始化添加页面
  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方法

代码语言:js
AI代码解释
复制
//投票界面初始化
  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');
      });

    })
  },

智能合约

代码语言:js
AI代码解释
复制
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;  
    }
}
代码语言:js
AI代码解释
复制
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文件,但是部署的时候显示未定义

代码语言:js
AI代码解释
复制
var Collection = artifacts.require("./Election.sol");
    module.exports = function(deployer) {
    deployer.deploy(Election);
};

Error:

回答 1

Dust

发布于 2018-04-08 07:28:02

请说明具体问题

和开发者交流更多问题细节吧,去 写回答
相关文章
为什么面试聊的还可以,却没有结果呢?
有些问题呢,HR是不会和你明说的,比如招聘一个董事长秘书,你:29岁,毕业6年,6年经验,有男友,未婚,简历很完美,符合岗位要求,薪资公司也能接受。另一位求职者:毕业2年,2年经验,未婚,无男友,勉强达到要求,需要适应时间并且培养。薪资比你低很多。
Rookie
2021/02/03
8670
copykat为什么没有infercnv直观呢
其实 copykat 仅仅是算法判别的时候不如人意,但是可视化的时候仍然是肉眼可以明显区分二倍体正常细胞和非整倍体的癌症细胞,所以我们想看看具体做什么改进,可以绕过这个bug,首选项我们把全部的上皮细胞按照病人进行了拆分,得到如下所示 的每个病人独立的文件夹以及每个文件夹下面的expFile.txt !
生信技能树jimmy
2021/12/04
2.3K0
copykat为什么没有infercnv直观呢
Java 日期类型比较没有返回正确的结果
最近在数据库处理的时候发现日期对比的时候没有返回正确的结果。 但是保存的时间实际上是相同的。 代码如下: if (!mlsPhoto.getDateUpdate().equals(photo.getDateUpdate())) { } 因为这里使用了 equals 方法。 问题解决 经过 Debug 后,这 2 个日期的纳秒数是不同的,查看下对象如下。 我们会发现其中一个对象有纳秒,一个对象没有。 但是 fastTime 是相同的。 如果使用 equals 那么这个方法比较的是毫秒,所以是不相等的。
HoneyMoose
2021/12/21
4.1K0
java executeupdate,为什么executeUpdate(sql)返回-1呢
public void setUserName(String userName) {
全栈程序员站长
2022/11/01
6890
java executeupdate,为什么executeUpdate(sql)返回-1呢
为什么网站排名高,而没有任何流量呢?
在做SEO的过程中,相信每一个SEO人员都会有这样的经历,那就是我们每天都在为思考网站排名相关问题,而绞尽脑汁。
蝙蝠侠IT
2021/06/08
5340
为什么网站排名高,而没有任何流量呢?
文章是原创的,为什么网站没有收录呢?
刚进入seo领域就知道原创文章对于网站的收录、展现量、权重等的影响,所以保证网站内容的原创度是seoer的基本功,但往往你的内容是原创的,但网站迟迟没有收录,让很多seoer感到迷茫,其实问题不一定只出现在文章上,你还应做以下分析:
蝙蝠侠IT
2021/05/19
7010
文章是原创的,为什么网站没有收录呢?
mybatis返回结果处理
当查询的记录条数是多条的时候,必须使用集合接收。如果使用单个实体类接收会出现异常。如果返回的是一条记录可以用集合接收
一个风轻云淡
2023/10/15
4170
mybatis返回结果处理
mybatis返回结果类型(resulttype返回list)
这样设置返回类型为resultClass=”java.util.HashMap”,查询时执行queryForList
全栈程序员站长
2022/08/01
6K0
SpringBoot统一返回结果
在后台开发时,控制台得到的数据格式会有不同,这时我们需要设置统一返回结果,方便我们分析数据以及对数据进行管理。
算法与编程之美
2022/05/23
1.1K0
SpringBoot统一返回结果
为什么 insert 配置 "SELECT LAST_INSERT_ID()" 返回个0呢?
我大抵是卷上瘾了,横竖都睡不着,坐起来身来打开Mac和外接显示器,这Bug没有由来,默然看着打印异常的屏幕,一个是我的,另外一个也是我的。
小傅哥
2022/07/18
1.1K0
mybatis返回对象_存储过程不能返回结果
在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType=”java.util.Map”) ,如果是多条数据则返回一个List<Map<String, Object>>结果集。
全栈程序员站长
2022/11/09
2.1K0
mybatis返回对象_存储过程不能返回结果
CPS推广:为什么我的佣金还没有到账呢
CPS推广奖励的佣金,目前无法直接后台提现,需要在次月月结之后,由财务系统统一打款到银行,即推广者后台所填写的银行账号,一般上月佣金,次月月末到账,具体时间以银行到账为准。
腾讯云-推广奖励
2019/11/28
11.2K0
CPS推广:为什么我的佣金还没有到账呢
为什么百分百还原文献结果反而不对呢
最近把这个数据集作为任务安排给最新学徒们,他们反馈给我的结果让我丈二和尚摸不着头脑,居然是百分百还原文献结果,如下所示的差异基因列表:
生信技能树
2021/02/03
8450
为什么百分百还原文献结果反而不对呢
返回结果的 HTTP 状态码
返回结果的 HTTP 状态码.png 返回结果的 HTTP 状态码 状态码的职责 当客户端向服务器端发送请求时,描述返回的请求结果 状态码的大致分类 1XX 信息性状态码 · 接收的请求正在处理 2XX 成功状态码 · 请求正常处理完毕 3XX 重定向状态码 · 需要进行附加操作以完成请求 4XX 客户端错误状态码 · 服务器无法处理请求 5XX 服务器错误状态码 · 服务器处理请求出错 2XX 成功 200 OK 表示从客户端发来的请求在服务器端被正常处理了 204 No Content 该状态码代表服
李才哥
2021/02/21
2.8K0
返回结果的 HTTP 状态码
为什么所谓的黑客都没有操作界面?都是代码呢?
现在的黑客已经都被玩坏了,大家对黑客的印象几乎就停留在电影中的黑客在对着黑黑的命令行敲击键盘的声音,而且无论提出什么样子的要求黑客总能很快的搞定,但是在现实中真正的黑客几乎很少有人见到,而且即使真的有黑客在边上也未必真的能够识别出来,所以现在大家看到的黑客都是电影中模拟出来的影视效果,真的极少有人看见过,可能只是在黑客大赛上能够看见。
程序员互动联盟
2019/07/04
2.1K0
为什么所谓的黑客都没有操作界面?都是代码呢?
SpringBoot Jackson 框架返回结果处理
1. 常用框架 ---- 框架 阿里 fastjson 谷歌 gson JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 2. Jackson 处理相关结果 ---- 1. 指定字段不返回 @JsonIgnpre @JsonIgnore private String pwd; 比如:密码等字段,是不在页面展示的。 2. 指定日期格式 @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss", locale=
山海散人
2021/03/03
8760
项目统一返回结果设计
统一返回格式如下 { "code": 200, "message": "成功", "data": [ { "id": 2, "name": "欧阳老师", "intro": "高级讲师" } ], "ok": true } 创建统一返回结果类 package com.ssm.ggkt.result; import lombok.Data; import lombok.NoArgsConstructor; /** * @auth
shaoshaossm
2022/12/27
7730
js如何返回异步函数结果
假设您有这样一个问题:您正在进行一个异步调用,并且需要从原始函数返回该调用的结果。
IT工作者
2022/01/01
7K0
REST API返回结果对象设计
基于REST API的项目返回的数据结构题都是统一的,这样方便接口对接和使用。因此,对结果对象的设计会有一定的要求:
程序新视界
2021/12/07
1.3K0
为什么不重构呢?
重构是提高质量的重要工具。许多开发方法都依赖于重构,尤其是对于敏捷方法,在更多计划驱动的组织中也是如此。但事实上,是否以重构来处理设计中的某些问题呢?是否存在重构的障碍呢?
半吊子全栈工匠
2021/12/21
3310
为什么不重构呢?

相似问题

如图。如何提交表单?

078

如何防止按钮提交表单?

2394

ACF重复器图片前端提交表单的问题?

035

网页刷新 如何阻止自动提交表单?

089

使用jQuery提交“输入”表单?

2359
相关问答用户
到家集团 | 技术VP擅长5个领域
新浪微博 | 高级总监擅长4个领域
擅长5个领域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档