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)
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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()
Пример #7
0
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
Пример #8
0
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!'
Пример #9
0
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)
Пример #12
0
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!'
Пример #13
0
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
Пример #14
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)
Пример #15
0
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)
Пример #16
0
    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)