67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from typing import List, Tuple
|
|
from chiabip158 import PyBIP158
|
|
|
|
from chia.types.blockchain_format.coin import Coin
|
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
from chia.types.full_block import FullBlock
|
|
from chia.types.header_block import HeaderBlock
|
|
from chia.types.name_puzzle_condition import NPC
|
|
from chia.util.condition_tools import created_outputs_for_conditions_dict
|
|
|
|
|
|
def get_block_header(block: FullBlock, tx_addition_coins: List[Coin], removals_names: List[bytes32]) -> HeaderBlock:
|
|
# Create filter
|
|
byte_array_tx: List[bytes32] = []
|
|
addition_coins = tx_addition_coins + list(block.get_included_reward_coins())
|
|
if block.is_transaction_block():
|
|
for coin in addition_coins:
|
|
byte_array_tx.append(bytearray(coin.puzzle_hash))
|
|
for name in removals_names:
|
|
byte_array_tx.append(bytearray(name))
|
|
|
|
bip158: PyBIP158 = PyBIP158(byte_array_tx)
|
|
encoded_filter: bytes = bytes(bip158.GetEncoded())
|
|
|
|
return HeaderBlock(
|
|
block.finished_sub_slots,
|
|
block.reward_chain_block,
|
|
block.challenge_chain_sp_proof,
|
|
block.challenge_chain_ip_proof,
|
|
block.reward_chain_sp_proof,
|
|
block.reward_chain_ip_proof,
|
|
block.infused_challenge_chain_ip_proof,
|
|
block.foliage,
|
|
block.foliage_transaction_block,
|
|
encoded_filter,
|
|
block.transactions_info,
|
|
)
|
|
|
|
|
|
def additions_for_npc(npc_list: List[NPC]) -> List[Coin]:
|
|
additions: List[Coin] = []
|
|
|
|
for npc in npc_list:
|
|
for coin in created_outputs_for_conditions_dict(npc.condition_dict, npc.coin_name):
|
|
additions.append(coin)
|
|
|
|
return additions
|
|
|
|
|
|
def tx_removals_and_additions(npc_list: List[NPC]) -> Tuple[List[bytes32], List[Coin]]:
|
|
"""
|
|
Doesn't return farmer and pool reward.
|
|
"""
|
|
|
|
removals: List[bytes32] = []
|
|
additions: List[Coin] = []
|
|
|
|
# build removals list
|
|
if npc_list is None:
|
|
return [], []
|
|
for npc in npc_list:
|
|
removals.append(npc.coin_name)
|
|
|
|
additions.extend(additions_for_npc(npc_list))
|
|
|
|
return removals, additions
|