Esempio n. 1
0
    def test_payout_multichain(self, **kwargs):
        bd = self.test_block_data.copy()
        bd.update(dict(chain_2_solve_index="1", chain_2_shares="18"))
        bd.update(**kwargs)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            bd)
        self.app.redis.rpush("chain_1_slice_17",
                             *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        self.app.redis.rpush("chain_2_slice_1", *["testing:1"] * 32)

        credit_block(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f"
        )
        pool_payout = currencies[self.app.config['pool_payout_currency']]

        db.session.rollback()
        db.session.expunge_all()
        payouts = m.Credit.query.all()
        self.assertEqual(len(payouts), 3)
        block = m.Block.query.first()
        self.assertEqual(len(block.chain_payouts), 2)
        self.assertEqual(block.chain_payouts[0].amount, block.total_value / 2)
        self.assertEqual(block.chain_payouts[1].amount, block.total_value / 2)
        self.assertEqual(payouts[1].address, pool_payout.pool_payout_addr)
        for p in payouts:
            print p.id, p.currency, p.block.currency, p.type
            assert p.block == block
            if p.block.currency == p.currency:
                assert p.type == 0
            else:
                assert p.type == 1

        assert m.Credit.query.filter_by(
            source=1).one().amount == Decimal("0.250")
Esempio n. 2
0
    def test_payout(self, **kwargs):
        bd = self.test_block_data.copy()
        bd.update(**kwargs)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            bd)

        self.app.redis.rpush("chain_1_slice_17",
                             *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f"
        )

        db.session.rollback()
        db.session.expunge_all()
        payouts = m.Credit.query.all()
        self.assertEqual(len(payouts), 2)
        block = m.Block.query.first()
        self.assertEqual(block.currency, self.test_block_data['currency'])
        self.assertEqual(block.total_value, Decimal("50"))
        self.assertEqual(block.height, 247)
        self.assertEqual(len(block.chain_payouts), 1)
        self.assertEqual(block.chain_payouts[0].amount, block.total_value)
        for p in payouts:
            print p.id, p.currency, p.block.currency, p.type
            assert p.block == block
            if p.block.currency == p.currency:
                assert p.type == 0
            else:
                assert p.type == 1

        assert m.Credit.query.filter_by(
            source=1).one().amount == Decimal("0.50")
    def test_payout(self, **kwargs):
        bd = self.test_block_data.copy()
        bd.update(**kwargs)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            bd)

        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()
        payouts = m.Credit.query.all()
        self.assertEqual(len(payouts), 2)
        block = m.Block.query.first()
        self.assertEqual(block.currency, self.test_block_data['currency'])
        self.assertEqual(block.total_value, Decimal("50"))
        self.assertEqual(block.height, 247)
        self.assertEqual(len(block.chain_payouts), 1)
        self.assertEqual(block.chain_payouts[0].amount, block.total_value)
        for p in payouts:
            print p.id, p.currency, p.block.currency, p.type
            assert p.block == block
            if p.block.currency == p.currency:
                assert p.type == 0
            else:
                assert p.type == 1

        assert m.Credit.query.filter_by(source=1).one().amount == Decimal("0.50")
Esempio n. 4
0
    def test_slice_compression(self):
        shares = self.random_shares()

        def setup():
            self.app.redis.hmset(
                "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
                self.test_block_data)
            self.app.redis.rpush("chain_1_slice",
                                 "DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1")
            self.app.redis.set("chain_1_slice_index", 17)
            self.app.redis.rpush("chain_1_slice_17", *shares)

        setup()
        credit_block(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f"
        )
        payouts = [(p.address, p.amount, p.currency, p.user)
                   for p in m.Credit.query.order_by(m.Credit.user)]

        # reset everything, and try it compressed
        self.app.redis.flushdb()
        self.tearDown()
        self.setup_db()

        setup()
        compress_slices()
        assert self.app.redis.type("chain_1_slice_17") == "hash"
        credit_block(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f"
        )
        payouts_compress = [(p.address, p.amount, p.currency, p.user)
                            for p in m.Credit.query.order_by(m.Credit.user)]
        self.assertEqual(payouts_compress, payouts)
    def test_payout_multichain(self, **kwargs):
        bd = self.test_block_data.copy()
        bd.update(dict(chain_2_solve_index="1", chain_2_shares="18"))
        bd.update(**kwargs)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            bd)
        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        self.app.redis.rpush("chain_2_slice_1", *["testing:1"] * 32)

        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")
        pool_payout = currencies[self.app.config['pool_payout_currency']]

        db.session.rollback()
        db.session.expunge_all()
        payouts = m.Credit.query.all()
        self.assertEqual(len(payouts), 3)
        block = m.Block.query.first()
        self.assertEqual(len(block.chain_payouts), 2)
        self.assertEqual(block.chain_payouts[0].amount, block.total_value / 2)
        self.assertEqual(block.chain_payouts[1].amount, block.total_value / 2)
        self.assertEqual(payouts[1].address, pool_payout.pool_payout_addr)
        for p in payouts:
            print p.id, p.currency, p.block.currency, p.type
            assert p.block == block
            if p.block.currency == p.currency:
                assert p.type == 0
            else:
                assert p.type == 1

        assert m.Credit.query.filter_by(source=1).one().amount == Decimal("0.250")
    def test_slice_compression(self):
        shares = self.random_shares()

        def setup():
            self.app.redis.hmset(
                "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
                self.test_block_data)
            self.app.redis.rpush("chain_1_slice", "DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1")
            self.app.redis.set("chain_1_slice_index", 17)
            self.app.redis.rpush("chain_1_slice_17", *shares)

        setup()
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")
        payouts = [(p.address, p.amount, p.currency, p.user) for p in
                   m.Credit.query.order_by(m.Credit.user)]

        # reset everything, and try it compressed
        self.app.redis.flushdb()
        self.tearDown()
        self.setup_db()

        setup()
        compress_slices()
        assert self.app.redis.type("chain_1_slice_17") == "hash"
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")
        payouts_compress = [(p.address, p.amount, p.currency, p.user) for p in
                            m.Credit.query.order_by(m.Credit.user)]
        self.assertEqual(payouts_compress, payouts)
Esempio n. 7
0
    def test_payout_unexchangeable(self):
        """ Payout an unexchangeable currency """
        bd = self.test_block_data.copy()
        bd.update(dict(currency="TCO"))
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            bd)

        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        self.app.redis.rpush("chain_1_slice_17", *["DLePZigvzzvSyoWztctVVsPtDuhzBfqEgd:1"] * 30)
        user_set = m.UserSettings(user="******")
        addr = m.PayoutAddress(user='******',
                               address='LbfSCZE1p9A3Yj2JK1n57kxyD2H1ZSXtNG',
                               currency='TCO')
        db.session.add(user_set)
        db.session.add(addr)
        db.session.commit()

        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()
        payouts = m.Credit.query.all()
        for p in payouts:
            print((p.id, p.user, p.address, p.block, p.currency, p.block.currency, p.source))
        pool_payouts = m.Credit.query.filter_by(address=currencies['TCO'].pool_payout_addr).all()
        m.Credit.query.filter_by(address='LbfSCZE1p9A3Yj2JK1n57kxyD2H1ZSXtNG').one()
        self.assertEqual(len(payouts), 3)
        self.assertEqual(len(pool_payouts), 2)
    def test_payout_donation(self):
        s = m.UserSettings(user="******",
                           pdonation_perc=Decimal("0.05"))
        db.session.add(s)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            self.test_block_data.copy())

        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()

        assert m.Credit.query.filter_by(user="******").count() == 1
        donation = m.Credit.query.filter_by(source=2).one()
        assert donation.amount < 3
Esempio n. 9
0
    def test_payout_donation(self):
        """ Make sure users setting donation percentages work properly """
        s = m.UserSettings(user="******",
                           pdonation_perc=Decimal("0.05"))
        db.session.add(s)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            self.test_block_data.copy())

        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()

        assert m.Credit.query.filter_by(user="******").count() == 1
        donation = m.Credit.query.filter_by(source=2).one()
        assert donation.amount < 3
    def test_payout_special_split(self):
        s = m.UserSettings(user="******",
                           spayout_perc=Decimal("0.05"),
                           spayout_addr="DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD",
                           spayout_curr="DOGE")
        db.session.add(s)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            self.test_block_data.copy())

        self.app.redis.rpush("chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()

        assert m.Credit.query.filter_by(user="******").count() == 2
        split = m.Credit.query.filter_by(address="DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD").one()
        assert split.amount < 3
Esempio n. 11
0
    def test_payout_special_split(self):
        """ Make sure that special payout splits work as expected """
        s = m.UserSettings(user="******",
                           spayout_perc=Decimal("0.05"),
                           spayout_addr="DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD",
                           spayout_curr="DOGE")
        db.session.add(s)
        self.app.redis.hmset(
            "unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f",
            self.test_block_data.copy())

        self.app.redis.rpush(
            "chain_1_slice_17", *["DJCgMCyjBKxok3eEGed5SGhbWaGj5QTcxF:1"] * 30)
        credit_block("unproc_block_01c5da46e845868a7ead5eb97d07c4299b6370e65fd4313416772e181c0c756f")

        db.session.rollback()
        db.session.expunge_all()

        assert m.Credit.query.filter_by(
            user="******").count() == 2
        split = m.Credit.query.filter_by(
            address="DAbhwsnEq5TjtBP5j76TinhUqqLTktDAnD").one()
        assert split.amount < 3