def trigger_upgrade(pepper, initiator_vk): if upg_lock.get() is True: if check_window_expired(): # previously triggered update has expired reset before proceeding assert 'Stale upgrade state cleaning up' reset_contract() else: assert 'Cannot run parallel upgrades' else: # for now only master's trigger upgrade if initiator_vk in election_house.current_value_for_policy( 'masternodes'): upg_lock.set(True) upg_pepper.set(pepper) S['today'] = S['init_time'] = now S['window'] = datetime.MINUTES * 3 mn_vote.set(0) dl_vote.set(0) #assert election_house.current_value_for_policy('masternodes') mnum = len(election_house.current_value_for_policy('masternodes')) dnum = len(election_house.current_value_for_policy('delegates')) tot_mn.set(mnum) tot_dl.set(dnum)
def vote_no_confidence(address): # Determine if caller can vote assert address in election_house.current_value_for_policy(controller.get()), \ 'Cannot vote against a non-committee member' v = no_confidence_state['last_voted', ctx.signer] assert v is None or now - v > datetime.DAYS * 1, 'Voting again too soon.' # Deduct small vote fee vote_cost = STAMP_COST / election_house.current_value_for_policy( 'stamp_cost') currency.transfer_from(vote_cost, 'blackhole', ctx.signer) # Update last voted variable no_confidence_state['last_voted', ctx.signer] = now # Update vote dict nc = no_confidence_votes.get() if nc.get(address) is None: nc[address] = 1 else: nc[address] += 1 no_confidence_votes.set(nc)
def vote(vk: str, obj: int): # Start a new election if S['election_start'] is None: total_nodes = len(election_house.current_value_for_policy(S['master_contract'])) + \ len(election_house.current_value_for_policy(S['delegate_contract'])) S['vote_count'] = 1 S['min_votes_required'] = (total_nodes * 2 // 3) + 1 # Set start to now S['election_start'] = now S.clear('has_voted') reset_current_votes() tally_vote(vk, obj) else: tally_vote(vk, obj) if election_is_over(): update_value() # Reset everything S['election_start'] = None
def is_valid_voter(address: str): if address in election_house.current_value_for_policy('masternodes'): return True elif address in election_house.current_value_for_policy('delegates'): return True return False
def validate_vote(vk: str, obj: int): assert vk in election_house.current_value_for_policy(S['master_contract']) or \ vk in election_house.current_value_for_policy(S['delegate_contract']), 'Not allowed to vote!' assert type(obj) == int, 'Pass an int!' assert obj > 0, 'No negatives!' assert S['value'] / 2 <= obj <= S['value'] * 2, 'Out of range!' assert S['votes', vk] is None, 'Already voted!'
def vote(vk): if upg_lock.get() is True: if check_window_expired() is True: assert 'Voting window has expired' return if vk in election_house.current_value_for_policy('masternodes'): mn_vote.set(mn_vote.get() + 1) if vk in election_house.current_value_for_policy('delegates'): dl_vote.set(dl_vote.get() + 1) check_vote_state()
def start_vote(cilantro_branch_name: str, contracting_branch_name: str, pepper: str): upgrade_state['locked'] = True upgrade_state['pepper'] = pepper upgrade_state['cilantro_branch_name'] = cilantro_branch_name upgrade_state['contracting_branch_name'] = contracting_branch_name upgrade_state['votes'] = 0 upgrade_state['voters'] = len(election_house.current_value_for_policy('masternodes')) + \ len(election_house.current_value_for_policy('delegates')) upgrade_state['started'] = now
def validate_vote(vk, obj): assert vk in election_house.current_value_for_policy(S['master_contract']) or \ vk in election_house.current_value_for_policy(S['delegate_contract']), 'Not allowed to vote!' assert type(obj) == list, 'Pass a list!' assert len(obj) == 4, 'Must have 4 elements!' s = 0 for o in obj: assert int(o) >= 0, 'No non-negative numbers!' s += o assert s == 100, 'Elements must add to 100!' assert S['has_voted', vk] is None, 'VK has already voted!'
def vote_candidate(address: str): assert candidate_state['registered', address], 'Candidate not registered.' # Determine if caller can vote v = candidate_state['last_voted', ctx.caller] assert v is None or now - v > datetime.DAYS * 1, 'Voting again too soon.' # Deduct small vote fee vote_cost = STAMP_COST / election_house.current_value_for_policy( 'stamp_cost') currency.transfer_from(vote_cost, 'blackhole', ctx.caller) # Update last voted variable candidate_state['last_voted', ctx.caller] = now votes = candidate_state['votes', address] if votes is None: candidate_state['votes', address] = 1 else: candidate_state['votes', address] += 1 if top_candidate.get() is not None: if candidate_state['votes', address] > candidate_state['votes', top_candidate.get()]: top_candidate.set(address)
def relinquish(): assert ctx.signer in election_house.current_value_for_policy( controller.get()) r = to_be_relinquished.get() r.append(ctx.signer) to_be_relinquished.set(r)
def relinquish(): assert ctx.caller in election_house.current_value_for_policy(controller.get()) r = to_be_relinquished.get() assert r is None, 'Someone is already trying to relinquish!' to_be_relinquished.set(ctx.caller)
def assert_vote_is_valid(vk, obj): current_rate = S['rate'] assert type(obj) == int, 'Vote is not an int' assert current_rate / 2 <= obj <= current_rate * 2, 'Proposed rate is not within proper boundaries.' masternode_policy = election_house.current_value_for_policy( policy='masternodes') assert vk in masternode_policy['masternodes'], 'VK is not a masternode!' assert S['votes', vk] is None, 'VK already voted!'
def unregister(): mns = election_house.current_value_for_policy(controller.get()) assert candidate_state['registered', ctx.caller], 'Not registered.' assert ctx.caller not in mns, "Can't unstake if in governance." currency.transfer(member_cost.get(), ctx.caller) candidate_state['registered', ctx.caller] = False candidate_state['votes', ctx.caller] = 0
def vote_candidate(address): assert candidate_state['registered', address] # Determine if caller can vote v = candidate_state['last_voted', ctx.signer] assert v is None or now - v > datetime.DAYS * 1, 'Voting again too soon.' # Deduct small vote fee vote_cost = STAMP_COST / election_house.current_value_for_policy( 'stamp_cost') currency.transfer_from(vote_cost, 'blackhole', ctx.signer) # Update last voted variable candidate_state['last_voted', ctx.signer] = now # Update vote dict cv = candidate_votes.get() cv[address] += 1 candidate_votes.set(cv)
def unregister(): mns = election_house.current_value_for_policy(controller.get()) assert candidate_state['registered', ctx.signer], 'Not registered.' assert ctx.caller not in mns, "Can't unstake if in governance." currency.transfer(MASTER_COST, ctx.caller)
def relinquish(): assert ctx.signer in election_house.current_value_for_policy(controller.get()) r = to_be_relinquished.get() if r is None: r.set(ctx.signer)