A Voting DAPP on PARASTATE TestNet

vanshika gupta
4 min readApr 27, 2021

Step 1: Setting up Metamask

Install MetaMask extension using Google Chrome browser. (!Important)
Step 2: Adding a Custom RPC Endpoint
Go to the Networks, then Custom RPC to connect to the ParaState TestNet.
The example below shows the configuration

Click now on the Save button and your configuration should be done!

Step 3: Open the BUIDL IDE tool in any browser. http://buidl.secondstate.io/

Please Make sure about Providers settings , else it will be “UnReachable”
Choose any Test Contract Address and then ‘Set as Default’ After that Please Follow Step 4 and Copy the Choosen address and get your STATE Token.

Step 4: Add some test STATE token in your wallet using the official ParaState test net faucet http://faucet.parastate.io.

Note: These token are only for testing purpose, they have no value on MainNet or any Exchange.

Use your ParaState Address

ALL SET :)
Now, Start Coding
Step 4.1 :
You can Choose Compile version(Not Necessary).
It provides the text and image URL to be voted on and keeps a record of votes. The vote() the method is called by voters to vote thumb up or down.

pragma solidity ^0.4.26;contract Vote {string public greeting;string public photoUrl;mapping (address => int) votes;uint ups;uint downs;constructor(string _greeting, string _photoUrl) public {greeting = _greeting;photoUrl = _photoUrl;}function vote (int _choice) public {require (votes[msg.sender] == 0);require (_choice == 1 || _choice == -1);votes[msg.sender] = _choice;if (_choice == 1) ups++;if (_choice == -1) downs++;}function getVotes () view public returns (uint, uint) {return (ups, downs);}function getVote (address _addr) view public returns (int) {return votes[_addr];}}
Don’t modify the right side block. Please Add you Complied address and ABI Info and Byte Code into these Lines.

Then Next, copy and paste the following HTML code into the HTML editor.

<div class=”container”>
<br/>
<div class=”jumbotron”>
<p class=”lead” id=”greeting”></p>
<div id=”imageDiv” style=”display:none”>
<img id=”image” src=”” class=”img-fluid img-thumbnail”/>
</div>
<hr/>
<p id=”votes” style=”display:none”>
<span id=”ups”></span> voted 👍 |
<span id=”downs”></span> voted 👎
</p>
<form id=”form” class=”form-inline” style=”display:none”>
<button id=”voteUp” type=”button” onclick=”return vote(1);” class=”btn btn-secondary mb-2">👍</button>
<button id=”voteDown” type=”button” onclick=”return vote(-1);” class=”btn btn-secondary mb-2">👎</button>
</form>
<div id=”formSubmitted” style=”display:none”>Please wait 2 seconds …</div>
<div id=”myVoteUp” style=”display:none”>You have already voted 👍</div>
<div id=”myVoteDown” style=”display:none”>You have already voted 👎</div>
</div>
</div>

Then, Copy and paste the following JavaScript code into the JS editor.

var instance = null;
window.addEventListener(‘web3Ready’, function() {
var contract = web3.ss.contract(abi);
instance = contract.at(cAddr);
reload();
});
function reload() {
instance.greeting(function (e, r) {
$(“#greeting”).html(r);
});
instance.photoUrl(function (e, r) {
if (!e && r) {
$(“#imageDiv”).css(“display”, “block”);
$(“#image”).attr(“src”, r);
}
});
instance.getVotes(function (e, r) {
if (!e && (r[0] > 0 || r[1] > 0)) {
$(“#votes”).css(“display”, “block”);
$(“#ups”).text(r[0]);
$(“#downs”).text(r[1]);
}
});
$(“#form”).css(“display”, “none”);
$(“#formSubmitted”).css(“display”, “none”);
web3.ss.getAccounts(function (e, address) {
if (!e) {
instance.getVote(address, function (ee, r) {
if (r == 1) {
$(“#myVoteUp”).css(“display”, “block”);
} else if (r == -1) {
$(“#myVoteDown”).css(“display”, “block”);
} else {
$(“#form”).css(“display”, “block”);
}
});
}
});
}
function vote (choice) {
web3.ss.getAccounts(function (e, address) {
if (!e) {
$(“#form”).css(“display”, “none”);
$(“#formSubmitted”).css(“display”, “block”);
instance.vote(choice, function (ee, result) {
if (ee) {
window.alert(“Failed for “ + address);
}
});
setTimeout(function () {
reload ();
}, 2 * 1000);
}
});
return false;
}

Click on Run to see the dapp in action! You can now vote thumb up or down inside BUIDL.

Just click on the Publish button and give the dapp a name. Once published, you can share the published URL with the public to vote

Finish. Congratulation You Build your First DAPP.

--

--