Remove map from Proposal struct

This commit is contained in:
gamarin 2018-02-27 16:04:44 +01:00
parent 02435bb1f8
commit 38975ac695
2 changed files with 21 additions and 11 deletions

View File

@ -40,7 +40,6 @@ type Proposal struct {
VotingStartBlock int64 // Height of the block where MinDeposit was reached. -1 if MinDeposit is not reached
InitTotalVotingPower int64 // Total voting power when proposal enters voting period (default 0)
InitProcedureNumber int16 // Procedure number of the active procedure when proposal enters voting period (default -1)
Votes map[string]int64 // Votes for each option (Yes, No, NoWithVeto, Abstain)
}
```
@ -61,6 +60,7 @@ type ValidatorGovInfo struct {
`ProcedureNumber`. First ever procedure is found at index '1'. Index '0' is reserved for parameter `ActiveProcedureNumber` which returns the number of the current procedure.
* `Proposals`: A mapping `map[int64]Proposal` of proposals indexed by their
`proposalID`
* `Votes`: A mapping `map[[]byte]int64` of votes indexed by `<proposalID>:<option>` as `[]byte`. Given a `proposalID` and an `option`, returns votes for that option.
* `Deposits`: A mapping `map[[]byte]int64` of deposits indexed by
`<proposalID>:<depositorPubKey>` as `[]byte`. Given a `proposalID` and a
`PubKey`, returns deposit (`nil` if `PubKey` has not deposited on the
@ -110,8 +110,9 @@ And the pseudocode for the `ProposalProcessingQueue`:
proposalID = ProposalProcessingQueue.Peek()
proposal = load(Proposals, proposalID)
initProcedure = load(Procedures, proposal.InitProcedureNumber)
yesVotes = load(Votes, <proposalID>:<'Yes'>)
if (proposal.Votes['Yes']/proposal.InitTotalVotingPower >= 2/3)
if (yesVotes/proposal.InitTotalVotingPower >= 2/3)
// proposal was urgent and accepted under the special condition
// no punishment

View File

@ -264,8 +264,11 @@ And the associated pseudocode.
// Vote started
initProcedure = load(Procedures, proposal.InitProcedureNumber)
yesVotes = load(Votes, <txGovClaimDeposi.ProposalIDt>:<'Yes'>)
noVotes = load(Votes, <txGovClaimDeposit.ProposalID>:<'No'>)
noWithVetoVotes = load(Votes, <txGovClaimDeposit.ProposalID>:<'NoWithVeto'>)
if (proposal.Votes['Yes']/proposal.InitTotalVotingPower >= 2/3) OR ((CurrentBlock > proposal.VotingStartBlock + initProcedure.VotingPeriod) AND (proposal.Votes['NoWithVeto']/(proposal.Votes['Yes']+proposal.Votes['No']+proposal.Votes['NoWithVeto']) < 1/3) AND (proposal.Votes['Yes']/(proposal.Votes['Yes']+proposal.Votes['No']+proposal.Votes['NoWithVeto']) > 1/2)) then
if (yesVotes/proposal.InitTotalVotingPower >= 2/3) OR ((CurrentBlock > proposal.VotingStartBlock + initProcedure.VotingPeriod) AND (noWithVetoVotes/(yesVotes+noVotes+noWithVetoVotes)) < 1/3) AND (yesVotes/(yesVotes+noVotes+noWithVetoVotes)) > 1/2)) then
// Proposal was accepted either because
// pecial condition was met OR
@ -293,10 +296,10 @@ vote on the proposal.
* If sender is not a validator and validator has not voted, initialize or
increase minus of validator by sender's `voting power`
* If sender is not a validator and validator has voted, decrease
`proposal.Votes['validatorOption']` by sender's `voting power`
* If sender is not a validator, increase `[proposal.Votes['txGovVote.Option']`
`Votes['validatorOption']` by sender's `voting power`
* If sender is not a validator, increase `Votes['txGovVote.Option']`
by sender's `voting power`
* If sender is a validator, increase `proposal.Votes['txGovVote.Option']` by
* If sender is a validator, increase `Votes['txGovVote.Option']` by
validator's `InitialVotingPower - minus` (`minus` can be equal to 0)
Votes need to be tied to a validator in order to compute validator's voting
@ -348,11 +351,13 @@ handled:
throw
else
yesVotes = load(Votes, <txGovVote.ProposalID>:<'Yes'>)
if (proposal.VotingStartBlock < 0) OR
(CurrentBlock > proposal.VotingStartBlock + initProcedure.VotingPeriod) OR
(proposal.VotingStartBlock < lastBondingBlock(sender, txGovVote.ValidatorPubKey) OR
(proposal.VotingStartBlock < lastUnbondingBlock(sender, txGovVote.ValidatorPubKey) OR
(proposal.Votes['Yes']/proposal.InitTotalVotingPower >= 2/3) then
(yesVotes/proposal.InitTotalVotingPower >= 2/3) then
// Throws if
// Vote has not started OR if
@ -397,14 +402,18 @@ handled:
// Validator has already voted
// Reduce votes of option chosen by validator by sender's bonded Amount
proposal.Votes['validatorOption'] -= sender.bondedAmountTo(txGovVote.ValidatorPubKey)
validatorVotes = load(Votes, <txGovVote.ProposalID>:<'validatorOption'>)
store(Votes, <txGovVote.ProposalID>:<'validatorOption'>, validatorVotes - sender.bondedAmountTo(txGovVote.ValidatorPubKey))
// increase votes of option chosen by sender by bonded Amount
proposal.Votes['txGovVote.Option'] += sender.bondedAmountTo(txGovVote.ValidatorPubKey)
optionVotes = load(Votes, <txGovVote.ProposalID>:<txGovVote.Option>)
store(Votes,<txGovVote.ProposalID>:<txGovVote.Option>, optionVotes + sender.bondedAmountTo(txGovVote.ValidatorPubKey))
else
// sender is the Governance PubKey of the validator whose main PubKey is txGovVote.ValidatorPubKey
// i.e. sender == validator
proposal.Votes['txGovVote.Option'] += (validatorGovInfo.InitVotingPower - validatorGovInfo.Minus)
optionVotes = load(Votes, <txGovVote.ProposalID>:<txGovVote.Option>)
store(Votes,<txGovVote.ProposalID>:<txGovVote.Option>, optionVotes + (validatorGovInfo.InitVotingPower - validatorGovInfo.Minus))
```