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_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")
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)
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
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
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