def test_budget_impact_on_rewards(wallet: Wallet, genesis: Genesis): def get_reward_per_block(): last_confirmed_block = wallet.get_witness( DEFAULT_WITNESS)['last_confirmed_block_num'] sp_balance_before_block_confirm = wallet.get_account_sp_balance( DEFAULT_WITNESS) circulating_capital_before = wallet.get_circulating_capital() new_confirmed_block = last_confirmed_block while new_confirmed_block == last_confirmed_block: new_confirmed_block = wallet.get_witness( DEFAULT_WITNESS)['last_confirmed_block_num'] witness_reward = wallet.get_account_sp_balance( DEFAULT_WITNESS) - sp_balance_before_block_confirm full_content_reward = wallet.get_circulating_capital( ) - circulating_capital_before activity_content_reward = full_content_reward * 95 / 100 assert witness_reward == full_content_reward - activity_content_reward, 'witness reward per block != expected' return full_content_reward def calculate_rewards_from_genesis(): blocks_per_month = 864000 days_in_month = 30 days_in_2_years = 730 rewards_supply = Amount(genesis['rewards_supply']) rewards_per_block = rewards_supply * days_in_month / days_in_2_years / blocks_per_month return rewards_per_block ''' content reward before balancer decrease it ''' expected_content_reward_on_start = calculate_rewards_from_genesis() content_reward_on_start = get_reward_per_block() assert expected_content_reward_on_start == content_reward_on_start, 'content reward on start != expected' ''' wait for balancer decrease content reward ''' wallet.get_block(25, wait_for_block=True, time_to_wait=60) content_reward_after_balancer_decrease = get_reward_per_block() assert content_reward_after_balancer_decrease < content_reward_on_start, 'content reward not decreased by balancer' ''' open budget with large amount and short lifetime to instantly increase reward pool which enforce balancer to increase content reward ''' wallet.create_budget(DEFAULT_WITNESS, Amount("10000.000000000 SCR"), fmt_time_from_now(), fmt_time_from_now(30)) content_reward_after_budget_open = get_reward_per_block() assert content_reward_after_budget_open > content_reward_after_balancer_decrease, \ 'content reward not increased after budget open'
def test_create_budget(wallet: Wallet): owner = DEFAULT_WITNESS response = wallet.create_budget(owner, Amount("10.000000000 SCR"), fmt_time_from_now(10), fmt_time_from_now(40)) validate_response(response, wallet.create_budget.__name__) budget = wallet.get_budgets(owner)[0] print(budget) per_block_for_10_blocks_budget = Amount('1.000000000 SCR') per_block_for_9_blocks_budget = Amount('1.034482758 SCR') assert owner in wallet.list_buddget_owners() assert Amount(budget['per_block']) in (per_block_for_10_blocks_budget, per_block_for_9_blocks_budget) assert budget['owner'] == owner
def broadcast_transaction_synchronous(self, ops, keys=[]): ref_block_num, ref_block_prefix = self.get_ref_block_params() tx = SignedTransaction(ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=fmt_time_from_now(60), operations=ops) tx.sign(keys, self.chain_id) response = self.rpc.send( self.json_rpc_body('call', 'network_broadcast_api', "broadcast_transaction_synchronous", [tx.json()])) try: return response['result'] except KeyError: return response
def test_deadline_close_budget(wallet_3hf: Wallet, budget, start, deadline, node, balance): acc_balance_before = wallet_3hf.get_account_scr_balance(budget['owner']) update_budget_time(wallet_3hf, budget, start=start, deadline=deadline + start) budget.update({"balance": balance}) response = wallet_3hf.create_budget(**budget) update_budget_balance(wallet_3hf, budget) per_blocks_cnt = get_per_blocks_count(start, deadline) per_block, reminder = calc_per_block(per_blocks_cnt, Amount(balance)) assert per_block == Amount(budget['per_block']) last_block = response['block_num'] blocks_wait = last_block + per_blocks_cnt wallet_3hf.get_block(blocks_wait + 1, wait_for_block=True) budgets = wallet_3hf.get_user_budgets(budget['owner']) assert 0 == len(budgets), "All budgets should be closed. %s" % fmt_time_from_now() virt_ops = {'budget_closing', 'budget_outgo'} if reminder.amount: virt_ops.add('budget_owner_income') check_virt_ops(wallet_3hf, blocks_wait - 1, blocks_wait + 1, virt_ops) acc_balance_after = wallet_3hf.get_account_scr_balance(budget['owner']) assert acc_balance_before - Amount(balance) + reminder == acc_balance_after
def _set_timestamp(self): self['initial_timestamp'] = fmt_time_from_now(1)