trudy_to_dan = trudy.send_transaction( deposit1_utxo, coin['deposit_block'], dan.token_contract.account.address ) authority.submit_block() trudy_to_dan_block = authority.get_block_number() trudy.stop_watching_exits(deposit1_utxo) # Dan attempts to exit his coin coin = dan.get_plasma_coin(deposit1_utxo) dan.start_exit(deposit1_utxo, coin['deposit_block'], trudy_to_dan_block) authority.submit_block() dan.watch_exits(deposit1_utxo) dan.watch_challenges(deposit1_utxo) # Dan is challenged by Trudy trudy.challenge_before(deposit1_utxo, 0, coin['deposit_block']) # Wait for dan to automatically respond to the challenge time.sleep(2) # Dan successfully finalizes his exit w3 = dan.root_chain.w3 increaseTime(w3, 8 * 24 * 3600) authority.finalize_exits() dan.withdraw(deposit1_utxo) danTokensEnd = dan.token_contract.balance_of() print('dan has {} tokens'.format(danTokensEnd)) assert ( danTokensEnd == danTokensStart + 1