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

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

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

期末项目在实现投票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:

已邀请
等3人回答

回答 1

Moshaw

提问者

发布于 2019-06-14 12:03:53

这是打印的数据..

和开发者交流更多问题细节吧,去 写回答
相关文章
智能合约和 DApp
2017年11月份和2018年5月份的技术雷达,都将Ethereum for decentralised applications. 放到了 Technique 象限的 ASSESS 环里,鼓励在数字货币和银行等金融领域之外多尝试构建崭新的DApp。那我们就来聊聊什么是去中心化应用。
lambeta
2018/10/11
1.5K0
智能合约和 DApp
TP框架前台引用if标签判断时候传参的问题
在TP框架中,传参的时候一般是{$cateres.xxx},if标签里这样写:<if condition="$cateres['id'] eq 0"> 类似这样写就可以了。判断语句要夹在 ""里面! Tags: None Archives QR Code
简单、
2018/07/18
6330
开发基于以太坊智能合约的DApp
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。
笔阁
2018/09/04
1.2K0
智能合约DAPP开发,DAPP智能合约系统开发实现技术原理及代码部署
读者对象:本章节主要描述使用Golang进行ChainMaker合约编写的方法,主要面向于使用Golang进行ChainMaker的合约开发的开发者。
VX_I357O98O7I8
2022/11/24
4080
博客制作遇到的问题
hexo server #启动本地服务器,用于预览主题。Hexo 会监视文件变动并自动更新,除修改站点配置文件外,无须重启服务器,直接刷新网页即可生效。
故里[TRUE]
2023/04/12
7.1K0
博客制作遇到的问题
如何编写一个投票功能的智能合约
前面一篇文章带你用一个简单的模拟银行的合约讲解了solidity的基本语法特性。你大概已经对如何编写智能合约有了基本的认识。但是要编写产品级别的智能合约,只有这些基础是远远不够的。
用户7634691
2023/02/24
5620
如何编写一个投票功能的智能合约
智能合约DAPP系统,智能合约DAPP系统开发功能,智能合约DAPP流动性质押挖矿分红系统开发应用案例及源码
shim.CMStubInterface 定义了和链交互的方法,我们通过在合约中调用该接口的方法和链交互。方法列表如下:
VX_I357O98O7I8
2022/12/15
2570
EOS智能合约与DApp开发入门
EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化 应用(Decentralized Application)而设计,其代码开源。
笔阁
2018/09/04
1.2K0
EOS智能合约与DApp开发入门
高通lk屏幕向kernel传参
在Bootable\bootloader\lk\dev\gcdb\display\gcdb_display_param.c上gcdb_display_cmdline_arg函数里:
233333
2019/10/24
8650
【CSS】515- 如何通过CSS向JS传参的
CSS中有很多媒体查询的用法,例如设备尺寸判别,是否支持鼠标行为,是否是黑暗模式,是否是省电模式等。
pingan8787
2020/02/27
2.6K0
python中的传参后的修改问题
python中传递的参数不是值而是引用就是传递了一个地址,当传递的这个类型不可改的时候(python中只有列表和字典可以改,其他的元组,变量,字符串等都不可改)在进行运算的时候指向的位置就会变化就是+= -= = /= x=x+x x=x-x x=xx x=x/x等计算出的结果变化之后使得x指向的值变化
知识浅谈
2020/03/24
8780
python中的传参后的修改问题
值传参、指针传参、引用传参区别
在C中,我们只了解到有两种传参方式,一种是值传递,另外一种是传递指针,一般情况下我们选择使用指针传递参数。在C++中,又新增了一种传参方式,那就是引用(type &),引用传参给我们带来了更好的体验。那三者的具体区别在哪里呢?
我与梦想有个约会
2023/10/20
8120
DAO智能合约系统Dapp开发技术搭建
DAPP被称为分散式应用程序,DAPP是基于区块链技术的应用程序。DApp在不同计算机的P2P网络上运行,而不是在一台计算机上运行。DApps自P2P网络开始以来就已经存在。它实际上是一种软件程序,旨在以不受任何单个实体控制的方式在Internet上运行。分散式应用程序上的所有数据都存储在分布式分类帐中。
用户5539481
2022/07/22
5260
DAO智能合约系统Dapp开发技术搭建
关于solidity智能合约dapp程序开发流程
NFT 是我们用以代表独特物品所有权的代币。 NFT 让我们把诸如艺术品、收藏品、甚至房地产等物品代币化。 他们一次只有一个正式主人,并且受到以太坊区块链的保护 - 没有人可以修改所有权记录或者根据现有的 NFT 复制粘贴一份新的。
开发v_syn520110
2022/11/09
4380
带你做一个基于智能合约的项目
以太坊(英语:Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。
海哥@开发
2022/04/06
1.4K0
带你做一个基于智能合约的项目
dapp开发的分布式智能合约系统是什么
DAPP是一个去中心化的运用/分布式运用,是从底层区块链渠道生态衍生出来的各种分布式运用,是区块链世界的基础服务提供商。将运用饮水程序分布在不同节点上,并经过一致机制和区块链渠道完结任务的运用本身是去中心化的,不依赖于将VG放在任何一个中心化服务器上的计划,使得用户的买卖更加安全。
vx-longbatuiguang1
2022/06/13
3390
dapp开发的分布式智能合约系统是什么
以太坊智能合约开发DApp应用示例
智能合约开发是以太坊的核心,学习过程主要是搭建以太坊开发环境和solidity语言的编程。本文不用任何以太坊Dapp框架,直接在ganache下开发智能合约。
笔阁
2018/09/04
9440
以太坊智能合约开发DApp应用示例
BSC智能合约DAPP系统开发方案
我们先把合约代码smartContract_example01.sol 压缩为一行.新建一个ssh session, 切换到geth用户环境su - geth, 然后输入:cat smartContract_example01.sol | tr '\n' ' '. 切换到以太坊控制台,把合约代码保存为一个变量:
开发v_syn520110
2022/10/27
3880
[教程] 使用 Embark 开发投票 DApp
前面我们基于Embark Demo[1] 介绍了 Embark 框架,今天使用 Embark 来实实在在开发一个 DApp:从零开发开发一个投票DApp。
Tiny熊
2020/03/26
8080
点击加载更多

相似问题

给模板消息传参?

0245

Feign处理url传参的post请求?

1213

关于react父子组件传值遇到的问题?

0181

jna调用void *fun 参数应该如何传参?

077

Python以太坊智能合约开发指南最后一个函数报错IndexError?

0177
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
到家集团 | 技术VP擅长5个领域
擅长5个领域
擅长3个领域
腾讯云TDP | KOL擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文