Skip to content

Commit

Permalink
fix duplicate-output test to not also do a double-spend (Chia-Network…
Browse files Browse the repository at this point in the history
  • Loading branch information
arvidn authored Jul 8, 2021
1 parent 859a107 commit 7b1fc9a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
9 changes: 4 additions & 5 deletions tests/blockchain/test_blockchain_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,16 +161,15 @@ async def test_validate_blockchain_duplicate_output(self, two_nodes):
if coin.puzzle_hash == coinbase_puzzlehash:
spend_coin = coin

spend_bundle = wallet_a.generate_signed_transaction(1000, receiver_puzzlehash, spend_coin)
spend_bundle_double = wallet_a.generate_signed_transaction(1000, receiver_puzzlehash, spend_coin)

block_spendbundle = SpendBundle.aggregate([spend_bundle, spend_bundle_double])
spend_bundle = wallet_a.generate_signed_transaction(
1000, receiver_puzzlehash, spend_coin, additional_outputs=[(receiver_puzzlehash, 1000)]
)

new_blocks = bt.get_consecutive_blocks(
1,
block_list_input=blocks,
farmer_reward_puzzle_hash=coinbase_puzzlehash,
transaction_data=block_spendbundle,
transaction_data=spend_bundle,
guarantee_transaction_block=True,
)

Expand Down
18 changes: 15 additions & 3 deletions tests/wallet_tools.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Dict, List, Optional
from typing import Dict, List, Optional, Tuple

from blspy import AugSchemeMPL, G2Element, PrivateKey

Expand Down Expand Up @@ -97,6 +97,7 @@ def generate_unsigned_transaction(
condition_dic: Dict[ConditionOpcode, List[ConditionWithArgs]],
fee: int = 0,
secret_key: Optional[PrivateKey] = None,
additional_outputs: Optional[List[Tuple[bytes32, int]]] = None,
) -> List[CoinSolution]:
spends = []

Expand All @@ -109,6 +110,11 @@ def generate_unsigned_transaction(

output = ConditionWithArgs(ConditionOpcode.CREATE_COIN, [new_puzzle_hash, int_to_bytes(amount)])
condition_dic[output.opcode].append(output)
if additional_outputs is not None:
for o in additional_outputs:
out = ConditionWithArgs(ConditionOpcode.CREATE_COIN, [o[0], int_to_bytes(o[1])])
condition_dic[out.opcode].append(out)

amount_total = sum(int_from_bytes(cvp.vars[1]) for cvp in condition_dic[ConditionOpcode.CREATE_COIN])
change = spend_value - amount_total - fee
if change > 0:
Expand Down Expand Up @@ -172,10 +178,13 @@ def generate_signed_transaction(
coin: Coin,
condition_dic: Dict[ConditionOpcode, List[ConditionWithArgs]] = None,
fee: int = 0,
additional_outputs: Optional[List[Tuple[bytes32, int]]] = None,
) -> SpendBundle:
if condition_dic is None:
condition_dic = {}
transaction = self.generate_unsigned_transaction(amount, new_puzzle_hash, [coin], condition_dic, fee)
transaction = self.generate_unsigned_transaction(
amount, new_puzzle_hash, [coin], condition_dic, fee, additional_outputs=additional_outputs
)
assert transaction is not None
return self.sign_transaction(transaction)

Expand All @@ -186,9 +195,12 @@ def generate_signed_transaction_multiple_coins(
coins: List[Coin],
condition_dic: Dict[ConditionOpcode, List[ConditionWithArgs]] = None,
fee: int = 0,
additional_outputs: Optional[List[Tuple[bytes32, int]]] = None,
) -> SpendBundle:
if condition_dic is None:
condition_dic = {}
transaction = self.generate_unsigned_transaction(amount, new_puzzle_hash, coins, condition_dic, fee)
transaction = self.generate_unsigned_transaction(
amount, new_puzzle_hash, coins, condition_dic, fee, additional_outputs=additional_outputs
)
assert transaction is not None
return self.sign_transaction(transaction)

0 comments on commit 7b1fc9a

Please sign in to comment.