示例#1
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses='tCa7rDMXs1KeqaqmcFoXxXMmwT9eq9r7oK|t7RKTBNZsTbjwAoXYfsSsTSwimxzDKh5Fu',
        payment_amounts='5|3',
        proposal_hashes='e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
def test_deterministic_superblock_selection(go_list_superblocks):
    from aywad import AywaDaemon
    aywad = AywaDaemon.from_aywa_conf(config.aywa_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_aywad(aywad, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '542f4433e438bdd64697b8381fda1a7a9b7a111c3a4e32fad524d1821d820394')
    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
示例#3
0
def test_deterministic_superblock_selection(go_list_superblocks):
    from dynamicd import DynamicDaemon
    dynamicd = DynamicDaemon.from_dynamic_conf(config.dynamic_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_dynamicd(
            dynamicd, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '22a5f429c5ffb2b79b1b30c3ac30751284e3efa4e710bc7fd35fbe7456b1e485')
def test_serialisable_fields():
    s1 = [
        'event_block_height', 'payment_addresses', 'payment_amounts',
        'proposal_hashes'
    ]
    s2 = Superblock.serialisable_fields()

    s1.sort()
    s2.sort()

    assert s2 == s1
示例#5
0
def test_deterministic_superblock_selection(go_list_superblocks):
    from dashd import DashDaemon
    dashd = DashDaemon.from_dash_conf(config.dash_conf)
    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_dashd(dashd, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '5c7c28ddec8c1ad54b49f6f1e79369e7ccaf76f5ddc30e502569d674e458ccf3')

    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
def test_deterministic_superblock_selection(go_list_superblocks):
    from bitenxd import DashDaemon
    bitenxd = DashDaemon.from_bitenx_conf(config.bitenx_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_bitenxd(bitenxd, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic('22a5f429c5ffb2b79b1b30c3ac30751284e3efa4e710bc7fd35fbe7456b1e485')

    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
def test_deterministic_superblock_selection(go_list_superblocks):
    from soyuzd import SoyuzDaemon
    soyuzd = SoyuzDaemon.from_soyuz_conf(config.soyuz_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_soyuzd(soyuzd, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic('22a5f429c5ffb2b79b1b30c3ac30751284e3efa4e710bc7fd35fbe7456b1e485')

    assert sb.object_hash == 'a10bab2993a11f206d8094024b254d36bf0c9a34ee34ce60f11bc75e44d70c93'
示例#8
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses='TXDSaTXerg68SCyLkWw2ERsqoTMWRBZiZQ|TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY',
        payment_amounts='5|3',
        proposal_hashes='e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
示例#9
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses='mtHjXMx6dvTwgcvkDvsuWftiyNPi26RqDq|mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6',
        payment_amounts='5|3',
        proposal_hashes='e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
示例#10
0
def test_serialisable_fields():
    pytest.skip('Superblock not currently supported')
    s1 = [
        'event_block_height', 'payment_addresses', 'payment_amounts',
        'proposal_hashes'
    ]
    s2 = Superblock.serialisable_fields()

    s1.sort()
    s2.sort()

    assert s2 == s1
示例#11
0
def test_deterministic_superblock_selection(go_list_superblocks):
    from virclesd import VirclesDaemon
    virclesd = VirclesDaemon.from_vircles_conf(config.vircles_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_virclesd(
            virclesd, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '3fe3938349a350469670348adf9ebd2e8023b7ebe65ecbb87837cfa74ca8bbfa')
    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
示例#12
0
def test_superblock_size_limit(go_list_proposals):
    import exiliumlib
    import misc
    from exiliumd import ExiliumDaemon
    exiliumd = ExiliumDaemon.from_exilium_conf(config.exilium_conf)
    for item in go_list_proposals:
        (go, subobj) = GovernanceObject.import_gobject_from_exiliumd(
            exiliumd, item)

    max_budget = 60
    prop_list = Proposal.approved_and_ranked(
        proposal_quorum=1, next_superblock_max_budget=max_budget)

    # mock maxgovobjdatasize by setting equal to the size of a trigger
    # (serialized) if only the first proposal had been included... anything
    # larger should break the limit
    single_proposal_sb = Superblock(
        event_block_height=72000,
        payment_addresses=prop_list[0].payment_address,
        payment_amounts="{0:.8f}".format(prop_list[0].payment_amount),
        proposal_hashes=prop_list[0].object_hash,
    )
    maxgovobjdatasize = len(single_proposal_sb.serialise())

    # now try and create a Superblock with the entire proposal list
    sb = exiliumlib.create_superblock(prop_list, 72000, max_budget, misc.now(),
                                      maxgovobjdatasize)

    # two proposals in the list, but...
    assert len(prop_list) == 2

    # only one should have been included in the SB, because the 2nd one is over the size limit
    assert sb.event_block_height == 72000
    assert sb.payment_addresses == 'yYe8KwyaUu5YswSYmB3q3ryx8XTUu9y7Ui'
    assert sb.payment_amounts == '25.75000000'
    assert sb.proposal_hashes == 'dfd7d63979c0b62456b63d5fc5306dbec451180adee85876cbf5b28c69d1a86c'

    assert sb.hex_hash(
    ) == '6b8cababf797644f1d62003e4cc68c1c40a8c1873c8a68ed0fc88772ea77cc44'
示例#13
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses=
        'ThMRLUwtH6fVkU5p2SeEhg2FBt5viWQcJc|Td3K6Z1xxAXYh5s3V4EwyWmrDiFxWucvMH',
        payment_amounts='5|3',
        proposal_hashes=
        'e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
示例#14
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses=
        'qfvtZk8GYfeM37gwZiHPZgVJGnwREsXkoT|qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo',
        payment_amounts='50000|30000',
        proposal_hashes=
        'e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        payment_addresses=
        'yYe8KwyaUu5YswSYmB3q3ryx8XTUu9y7Ui|yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV',
        payment_amounts='5|3',
        proposal_hashes=
        'e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
示例#16
0
def test_deterministic_superblock_selection(go_list_superblocks):
    from paccoind import PaccoinDaemon
    paccoind = PaccoinDaemon.from_paccoin_conf(config.paccoin_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_paccoind(
            paccoind, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '14d34a90db210c7158ee9d80852f15bf37234b8d298ff95c78b86f1c787489f5')

    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
示例#17
0
def test_deterministic_superblock_selection(go_list_superblocks):
    from terracoind import TerracoinDaemon
    terracoind = TerracoinDaemon.from_terracoin_conf(config.terracoin_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_terracoind(
            terracoind, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        'd663b0e76cc87882ff4a6d17d7d302b9145c263eb970e0e5c6b3acd42b570347')

    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
示例#18
0
def superblock():
    from models import Superblock
    # NOTE: no governance_object_id is set
    sbobj = Superblock(
        event_block_height=62500,
        #payment_addresses='mtHjXMx6dvTwgcvkDvsuWftiyNPi26RqDq|mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6',
	# Keep the same till proposal hashes are updated
	payment_addresses='yYe8KwyaUu5YswSYmB3q3ryx8XTUu9y7Ui|yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV',
        payment_amounts='5|3',
        proposal_hashes='e8a0057914a2e1964ae8a945c4723491caae2077a90a00a2aabee22b40081a87|d1ce73527d7cd6f2218f8ca893990bc7d5c6b9334791ce7973bfa22f155f826e',
    )

    return sbobj
示例#19
0
def test_deterministic_superblock_selection(go_list_superblocks):
    pytest.skip('Superblock not currently supported')
    from syscoind import SyscoinDaemon
    syscoind = SyscoinDaemon.from_syscoin_conf(config.syscoin_conf)

    for item in go_list_superblocks:
        (go, subobj) = GovernanceObject.import_gobject_from_syscoind(
            syscoind, item)

    # highest hash wins if same -- so just order by hash
    sb = Superblock.find_highest_deterministic(
        '22a5f429c5ffb2b79b1b30c3ac30751284e3efa4e710bc7fd35fbe7456b1e485')

    assert sb.object_hash == 'bc2834f357da7504138566727c838e6ada74d079e63b6104701f4f8eb05dae36'
示例#20
0
def create_superblock(proposals, event_block_height, budget_max, sb_epoch_time):
    from models import Superblock, GovernanceObject, Proposal
    from constants import SUPERBLOCK_FUDGE_WINDOW

    # don't create an empty superblock
    if (len(proposals) == 0):
        printdbg("No proposals, cannot create an empty superblock.")
        return None

    budget_allocated = Decimal(0)
    fudge = SUPERBLOCK_FUDGE_WINDOW  # fudge-factor to allow for slighly incorrect estimates

    payments = []
    for proposal in proposals:
        fmt_string = "name: %s, rank: %4d, hash: %s, amount: %s <= %s"

        # skip proposals that are too expensive...
        if (budget_allocated + proposal.payment_amount) > budget_max:
            printdbg(
                fmt_string % (
                    proposal.name,
                    proposal.rank,
                    proposal.object_hash,
                    proposal.payment_amount,
                    "skipped (blows the budget)",
                )
            )
            continue

        # skip proposals if the SB isn't within the Proposal time window...
        window_start = proposal.start_epoch - fudge
        window_end = proposal.end_epoch + fudge

        printdbg("\twindow_start: %s" % epoch2str(window_start))
        printdbg("\twindow_end: %s" % epoch2str(window_end))
        printdbg("\tsb_epoch_time: %s" % epoch2str(sb_epoch_time))

        if (sb_epoch_time < window_start or sb_epoch_time > window_end):
            printdbg(
                fmt_string % (
                    proposal.name,
                    proposal.rank,
                    proposal.object_hash,
                    proposal.payment_amount,
                    "skipped (SB time is outside of Proposal window)",
                )
            )
            continue

        printdbg(
            fmt_string % (
                proposal.name,
                proposal.rank,
                proposal.object_hash,
                proposal.payment_amount,
                "adding",
            )
        )

        # else add proposal and keep track of total budget allocation
        budget_allocated += proposal.payment_amount

        payment = {'address': proposal.payment_address,
                   'amount': "{0:.8f}".format(proposal.payment_amount),
                   'proposal': "{}".format(proposal.object_hash)}
        payments.append(payment)

    # don't create an empty superblock
    if not payments:
        printdbg("No proposals made the cut!")
        return None

    # 'payments' now contains all the proposals for inclusion in the
    # Superblock, but needs to be sorted by proposal hash descending
    payments.sort(key=lambda k: k['proposal'], reverse=True)

    sb = Superblock(
        event_block_height=event_block_height,
        payment_addresses='|'.join([pd['address'] for pd in payments]),
        payment_amounts='|'.join([pd['amount'] for pd in payments]),
        proposal_hashes='|'.join([pd['proposal'] for pd in payments]),
    )
    printdbg("generated superblock: %s" % sb.__dict__)

    return sb
示例#21
0
def test_superblock_is_valid(superblock):
    from suncoind import SunCoinDaemon
    suncoind = SunCoinDaemon.from_suncoin_conf(config.suncoin_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'yYe8KwyaUu5YswSYmB3q3ryx8XTUu9y7Ui|yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'yTC62huR4YQEPn9AJHjnQxxreHSbgAoatV'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
示例#22
0
def setup():
    # clear tables first...
    Vote.delete().execute()
    Proposal.delete().execute()
    Superblock.delete().execute()
    GovernanceObject.delete().execute()
示例#23
0
def attempt_superblock_creation(Xchanged):
    import Xchangelib

    if not Xchanged.is_masternode():
        print("We are not a Masternode... can't submit superblocks!")
        return

    # query votes for this specific ebh... if we have voted for this specific
    # ebh, then it's voted on. since we track votes this is all done using joins
    # against the votes table
    #
    # has this masternode voted on *any* superblocks at the given event_block_height?
    # have we voted FUNDING=YES for a superblock for this specific event_block_height?

    event_block_height = Xchanged.next_superblock_height()

    if Superblock.is_voted_funding(event_block_height):
        # printdbg("ALREADY VOTED! 'til next time!")

        # vote down any new SBs because we've already chosen a winner
        for sb in Superblock.at_height(event_block_height):
            if not sb.voted_on(signal=VoteSignals.funding):
                sb.vote(Xchanged, VoteSignals.funding, VoteOutcomes.no)

        # now return, we're done
        return

    if not Xchanged.is_govobj_maturity_phase():
        printdbg("Not in maturity phase yet -- will not attempt Superblock")
        return

    proposals = Proposal.approved_and_ranked(
        proposal_quorum=Xchanged.governance_quorum(),
        next_superblock_max_budget=Xchanged.next_superblock_max_budget())
    budget_max = Xchanged.get_superblock_budget_allocation(event_block_height)
    sb_epoch_time = Xchanged.block_height_to_epoch(event_block_height)

    sb = Xchangelib.create_superblock(proposals, event_block_height,
                                      budget_max, sb_epoch_time)
    if not sb:
        printdbg("No superblock created, sorry. Returning.")
        return

    # find the deterministic SB w/highest object_hash in the DB
    dbrec = Superblock.find_highest_deterministic(sb.hex_hash())
    if dbrec:
        dbrec.vote(Xchanged, VoteSignals.funding, VoteOutcomes.yes)

        # any other blocks which match the sb_hash are duplicates, delete them
        for sb in Superblock.select().where(
                Superblock.sb_hash == sb.hex_hash()):
            if not sb.voted_on(signal=VoteSignals.funding):
                sb.vote(Xchanged, VoteSignals.delete, VoteOutcomes.yes)

        printdbg(
            "VOTED FUNDING FOR SB! We're done here 'til next superblock cycle."
        )
        return
    else:
        printdbg("The correct superblock wasn't found on the network...")

    # if we are the elected masternode...
    if (Xchanged.we_are_the_winner()):
        printdbg("we are the winner! Submit SB to network")
        sb.submit(Xchanged)
示例#24
0
def test_superblock_is_valid(superblock):
    from terracoind import TerracoinDaemon
    terracoind = TerracoinDaemon.from_terracoin_conf(config.terracoin_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid(terracoind) is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid(terracoind) is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid(terracoind) is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid(terracoind) is True

    # mess with payment addresses
    superblock.payment_addresses = 'mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid(terracoind) is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid(terracoind) is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid(terracoind) is False

    superblock.payment_addresses = 'mtHjXMx6dvTwgcvkDvsuWftiyNPi26RqDq|mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid(terracoind) is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'mocfCW5mUWLdcqphNxbcsVKjzqTgdKckW6'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid(terracoind) is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid(terracoind) is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid(terracoind) is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid(terracoind) is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid(terracoind) is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid(terracoind) is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid(terracoind) is True
示例#25
0
def test_superblock_is_valid(superblock):
    from nextd import NextcoinDaemon
    nextd = NextcoinDaemon.from_next_conf(config.next_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8'
    assert superblock.is_valid() is True

    superblock.payment_amounts = ' 7|8'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8 '
    assert superblock.is_valid() is False

    superblock.payment_amounts = ' 7|8 '
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # leading spaces in payment addresses
    superblock.payment_addresses = ' TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # trailing spaces in payment addresses
    superblock.payment_addresses = 'TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # leading & trailing spaces in payment addresses
    superblock.payment_addresses = ' TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'TSTfeMeWwQiCDwMSTWRaj9wwVGNjZFfvFk|TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'TEjMnhB5mAPrpg7R4CUCSGQNnJqPeAFBTH'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
def test_superblock_is_valid(superblock):
    from historiad import HistoriaDaemon
    historiad = HistoriaDaemon.from_historia_conf(config.historia_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8'
    assert superblock.is_valid() is True

    superblock.payment_amounts = ' 7|8'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8 '
    assert superblock.is_valid() is False

    superblock.payment_amounts = ' 7|8 '
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # leading spaces in payment addresses
    superblock.payment_addresses = ' TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # trailing spaces in payment addresses
    superblock.payment_addresses = 'TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # leading & trailing spaces in payment addresses
    superblock.payment_addresses = ' TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'TwBnvi9FfwBSuq5ck9LEG7i8ZfdEK55L3L|TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'TwThXv2jrUuk4HG2YD2bxg1RUFzi4Fn4XQ'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
示例#27
0
def test_superblock_is_valid(superblock):
    from gobyted import GoByteDaemon
    gobyted = GoByteDaemon.from_gobyte_conf(config.gobyte_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'nJUUwdV8JvDXjoMLhmqi9mQCgiA86xPL4h|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'nJUUwdV8JvDXjoMLhmqi9mQCgiA86xPL4h'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'nJUUwdV8JvDXjoMLhmqi9mQCgiA86xPL4h'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'nBYbLHE1TTNPABrZFdfG4ARZHNXDhaZTb1|nJUUwdV8JvDXjoMLhmqi9mQCgiA86xPL4h'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'nJUUwdV8JvDXjoMLhmqi9mQCgiA86xPL4h'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
示例#28
0
def test_superblock_is_valid(superblock):
    from paccoind import PaccoinDaemon
    paccoind = PaccoinDaemon.from_paccoin_conf(config.paccoin_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'qfvtZk8GYfeM37gwZiHPZgVJGnwREsXkoT|qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'qaSQZnZyVz5CEwpFVJkAdByf6tKfu9ejTo'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
示例#29
0
def test_superblock_is_valid(superblock):
    from bitgreend import BitgreenDaemon
    bitgreend = BitgreenDaemon.from_bitgreen_conf(config.bitgreen_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8'
    assert superblock.is_valid() is True

    superblock.payment_amounts = ' 7|8'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8 '
    assert superblock.is_valid() is False

    superblock.payment_amounts = ' 7|8 '
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # leading spaces in payment addresses
    superblock.payment_addresses = ' gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # trailing spaces in payment addresses
    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7 '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # leading & trailing spaces in payment addresses
    superblock.payment_addresses = ' gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7 '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7|gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'gXcKEE2cr7gXxaupoSU7J2iwjGvGDUtKi7'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True
示例#30
0
def test_superblock_is_valid(superblock):
    from polisd import PolisDaemon
    polisd = PolisDaemon.from_polis_conf(config.polis_conf)

    orig = Superblock(**superblock.get_dict())  # make a copy

    # original as-is should be valid
    assert orig.is_valid() is True

    # mess with payment amounts
    superblock.payment_amounts = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7,|yzx'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8'
    assert superblock.is_valid() is True

    superblock.payment_amounts = ' 7|8'
    assert superblock.is_valid() is False

    superblock.payment_amounts = '7|8 '
    assert superblock.is_valid() is False

    superblock.payment_amounts = ' 7|8 '
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with payment addresses
    superblock.payment_addresses = 'TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY|1234 Anywhere ST, Chicago, USA'
    assert superblock.is_valid() is False

    # leading spaces in payment addresses
    superblock.payment_addresses = ' TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # trailing spaces in payment addresses
    superblock.payment_addresses = 'TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # leading & trailing spaces in payment addresses
    superblock.payment_addresses = ' TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY '
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is False

    # single payment addr/amt is ok
    superblock.payment_addresses = 'TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY'
    superblock.payment_amounts = '5.00'
    assert superblock.is_valid() is True

    # ensure number of payment addresses matches number of payments
    superblock.payment_addresses = 'TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY'
    superblock.payment_amounts = '37.00|23.24'
    assert superblock.is_valid() is False

    superblock.payment_addresses = 'TXDSaTXerg68SCyLkWw2ERsqoTMWRBZiZQ|TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY'
    superblock.payment_amounts = '37.00'
    assert superblock.is_valid() is False

    # ensure amounts greater than zero
    superblock.payment_addresses = 'TDWz9KfMo55wzj2brbgaXxnDz28nAbdPcY'
    superblock.payment_amounts = '-37.00'
    assert superblock.is_valid() is False

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True

    # mess with proposal hashes
    superblock.proposal_hashes = '7|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '7,|yyzx'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0|1'
    assert superblock.is_valid() is False

    superblock.proposal_hashes = '0000000000000000000000000000000000000000000000000000000000000000|1111111111111111111111111111111111111111111111111111111111111111'
    assert superblock.is_valid() is True

    # reset
    superblock = Superblock(**orig.get_dict())
    assert superblock.is_valid() is True