Ethereum Javascript Webpack Smart Contract

Ich versuche, den Wert aus dem HTML-Dropdown an den Smart Contract zu senden, der Wert wird aus der js-Funktion extrahiert, aber ich kann ihn nicht zur SetVote-Funktion hinzufügen, die Ausführung bricht dort ab.

Html:
 <div class="dropdown">
            <button class="btn btn-vote btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
              Dropdown button
            </button>
            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
              <a class="dropdown-item" href="#">value1</a>
              <a class="dropdown-item" href="#">value2</a>
              <a class="dropdown-item" href="#">value3</a>
            </div>
          </div>


JavaScript:

 App = {   web3Provider: null,   contracts: {},


  init: function() {

    console.log("inside init");


    return App.initWeb3();   },

  initWeb3: function() {

    console.log("inside initWeb3");

    // Is there an injected web3 instance? if (typeof web3 !== 'undefined') {   App.web3Provider = web3.currentProvider; } else {   // If no injected web3 instance is detected, fall back to Ganache   App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545'); } web3 = new Web3(App.web3Provider);  

    return App.initContract();   },

  initContract: function() {

    console.log("inside initContract");

    $.getJSON('voting.json', function(data) {
      // Get the necessary contract artifact file and instantiate it with truffle-contract
      var votingArtifact = data;
      App.contracts.voting = TruffleContract(votingArtifact);

      // Set the provider for our contract
      App.contracts.voting.setProvider(App.web3Provider);

      // Use our contract to retrieve and mark the adopted pets
     // return App.markAdopted();
    });

    return App.bindEvents();   },

bindEvents: function() {

  $(document).on('click', '.btn-res', App.GetVote); 

 //$(document).on('click', '.btn-vote', App.SetVote);

 $(".dropdown-menu a").click(function(){var vote = $(this).text(); });
   console.log("voted value",vote);
   App.SetVote(vote);

         },


SetVote: function(account) {

  var votingInstance;  
  //var vote="voteValue"

  App.contracts.voting.deployed().then(function(instance) {

    votingInstance = instance;

    return votingInstance.setVote(vote);   }).then(function() {

    // modal for successfully voting
    // open index page

  }).catch(function(e) {
    console.log("error in voting");   });

},

GetVote: function() {

   web3.eth.getAccounts(function(error, accounts) {
    if (error) {
      console.log(error);
    }

    var account = accounts[0];

    var self = this;

    var data;
    voting.deployed().then(function(instance) {
      data = instance;
      return data.getVote.call();
    }).then(function(value) {

      console.log(value);

      //table of winners
     //list of voters



    }).catch(function(e) {
      console.log(e);
      self.setStatus("Error getting balance; see log.");
    }); }); } }; $(function() {   $(window).load(function() {
    App.init();   }); });

Antworten (1)

So wie ich es sehe, wird das SetVote-Param-Konto nicht an die Vertragsmethode setVote gesendet. Bitte korrigieren Sie Ihre Variablen und prüfen Sie, ob Ihre Vertragsmethode aufgerufen wird.