def bob_to_charlie( zeth_client: MixerClient, mk_tree: MerkleTree, input1: Tuple[int, ZethNote], bob_eth_address: str, keystore: mock.KeyStore) -> contracts.MixResult: print( f"=== Bob transfers {BOB_TO_CHARLIE_ETH}ETH to Charlie from his funds " + "on the mixer ===") bob_ask = keystore["Bob"].addr_sk.a_sk charlie_addr = keystore["Charlie"].addr_pk bob_addr = keystore["Bob"].addr_pk # Coin for Bob (change) output0 = (bob_addr, EtherValue(BOB_TO_CHARLIE_ETH)) # Coin for Charlie output1 = (charlie_addr, EtherValue(BOB_TO_CHARLIE_CHANGE_ETH)) # Send the tx tx_hash = zeth_client.joinsplit( mk_tree, OwnershipKeyPair(bob_ask, bob_addr.a_pk), bob_eth_address, None, [input1], [output0, output1], EtherValue(0), EtherValue(0), EtherValue(1, 'wei')) return wait_for_tx_update_mk_tree(zeth_client, mk_tree, tx_hash)
def charlie_withdraw( zeth_client: MixerClient, mk_tree: MerkleTree, input1: Tuple[int, ZethNote], charlie_eth_address: str, keystore: mock.KeyStore) -> contracts.MixResult: print( f" === Charlie withdraws {CHARLIE_WITHDRAW_ETH}ETH from his funds " + "on the Mixer ===") charlie_pk = keystore["Charlie"].addr_pk charlie_apk = charlie_pk.a_pk charlie_ask = keystore["Charlie"].addr_sk.a_sk charlie_ownership_key = \ OwnershipKeyPair(charlie_ask, charlie_apk) tx_hash = zeth_client.joinsplit( mk_tree, charlie_ownership_key, charlie_eth_address, None, [input1], [(charlie_pk, EtherValue(CHARLIE_WITHDRAW_CHANGE_ETH))], EtherValue(0), EtherValue(CHARLIE_WITHDRAW_ETH), EtherValue(1, 'wei')) return wait_for_tx_update_mk_tree(zeth_client, mk_tree, tx_hash)