Rise In Logo





Solidity Fundamentals

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.
Rise In Logo

Rise together in web3