Rise In Logo



Learn everything about Solidity

Before moving forward with the function implementation, let's check the logic of calculating the current state of the contract.

You have three different choices:

  • Approve
  • Reject
  • Pass

For a proposal to succeed, the number of approve votes should be higher than the sum of reject and half the pass votes (you can think like pass vote has the half the impact). So, our formula is:approve = reject + pass / 2

You may have odd number of pass votes which cannot be divided by two. In these cases, you add 1 to the number of pass votes and then divide.

After knowing the logic of the function, the implementation is pretty straight forward:

function calculateCurrentState() private view returns(bool) {
    Proposal storage proposal = proposal_history[counter];

    uint256 approve = proposal.approve;
    uint256 reject = proposal.reject;
    uint256 pass = proposal.pass;
        
    if (proposal.pass %2 == 1) {
        pass += 1;
    }

    pass = pass / 2;

    if (approve > reject + pass) {
        return true;
    } else {
        return false;
    }
}

If you check the function definition, you see that you have used private and view.

  • You used private because this function is just a helper function for our previous vote function and it is only being used in the contract.
  • You used view because the function only views data from the blockchain and does not alter it.

Comments

You need to enroll in the course to be able to comment!

Stay in the know

Never miss updates on new programs and opportunities.

Rise In Logo

Rise together in web3!

Disclaimer: The information /programs / events provided on https://patika.dev and https://risein.com are strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice and do not make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://patika.dev and https://risein.com disclaim any responsibility for financial decisions made by users based on information provided here.