def check_is_key_image_spent(self): daemon = Daemon() print('Testing is_key_image_spent') res = self.wallet[0].incoming_transfers(transfer_type = 'all') transfers = res.transfers ki = [x.key_image for x in transfers] expected = [1 if x.spent else 0 for x in transfers] res = daemon.is_key_image_spent(ki) assert res.spent_status == expected res = self.wallet[0].incoming_transfers(transfer_type = 'available') transfers = res.transfers ki = [x.key_image for x in transfers] expected = [0 for x in transfers] res = daemon.is_key_image_spent(ki) assert res.spent_status == expected res = self.wallet[0].incoming_transfers(transfer_type = 'unavailable') transfers = res.transfers ki = [x.key_image for x in transfers] expected = [1 for x in transfers] res = daemon.is_key_image_spent(ki) assert res.spent_status == expected ki = [ki[-1]] * 5 expected = [1] * len(ki) res = daemon.is_key_image_spent(ki) assert res.spent_status == expected ki = ['2'*64, '1'*64] expected = [0, 0] res = daemon.is_key_image_spent(ki) assert res.spent_status == expected
def sweep_single(self): daemon = Daemon() print("Sending single output") daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 1) self.wallet[0].refresh() res = self.wallet[0].incoming_transfers(transfer_type = 'available') for t in res.transfers: assert not t.spent assert len(res.transfers) > 8 # we mined a lot index = 8 assert not res.transfers[index].spent assert res.transfers[index].amount > 0 ki = res.transfers[index].key_image amount = res.transfers[index].amount daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 10) # ensure unlocked self.wallet[0].refresh() res = self.wallet[0].get_balance() balance = res.balance res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 0 res = self.wallet[0].sweep_single('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', key_image = ki) assert len(res.tx_hash) == 64 tx_hash = res.tx_hash res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 2 daemon.generateblocks('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', 1) res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 1 self.wallet[0].refresh() res = self.wallet[0].get_balance() new_balance = res.balance res = daemon.get_transactions([tx_hash], decode_as_json = True) assert len(res.txs) == 1 tx = res.txs[0] assert tx.tx_hash == tx_hash assert not tx.in_pool assert len(tx.as_json) > 0 try: j = json.loads(tx.as_json) except: j = None assert j assert new_balance == balance - amount assert len(j['vin']) == 1 assert j['vin'][0]['key']['k_image'] == ki self.wallet[0].refresh() res = self.wallet[0].incoming_transfers(transfer_type = 'available') assert len([t for t in res.transfers if t.key_image == ki]) == 0 res = self.wallet[0].incoming_transfers(transfer_type = 'unavailable') assert len([t for t in res.transfers if t.key_image == ki]) == 1
def sweep_single(self): daemon = Daemon() print("Sending single output") daemon.generateblocks( 'Sumoo1aLd1yKkerxdjbXggMf3mdy5m9tZeWpYU913LSmZuUdMjJnoa67vp2WB7sV2ZHCBZbh2MekDK2emfWCxZZ997WpRfimvjq', 1) self.wallet[0].refresh() res = self.wallet[0].incoming_transfers(transfer_type='available') for t in res.transfers: assert not t.spent assert len(res.transfers) > 8 # we mined a lot index = 8 assert not res.transfers[index].spent assert res.transfers[index].amount > 0 ki = res.transfers[index].key_image amount = res.transfers[index].amount daemon.generateblocks( 'Sumoo1aLd1yKkerxdjbXggMf3mdy5m9tZeWpYU913LSmZuUdMjJnoa67vp2WB7sV2ZHCBZbh2MekDK2emfWCxZZ997WpRfimvjq', 10) # ensure unlocked self.wallet[0].refresh() res = self.wallet[0].get_balance() balance = res.balance res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 0 res = self.wallet[0].sweep_single( 'Sumoo1aLd1yKkerxdjbXggMf3mdy5m9tZeWpYU913LSmZuUdMjJnoa67vp2WB7sV2ZHCBZbh2MekDK2emfWCxZZ997WpRfimvjq', key_image=ki) assert len(res.tx_hash) == 64 tx_hash = res.tx_hash res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 2 daemon.generateblocks( 'Sumoo1aLd1yKkerxdjbXggMf3mdy5m9tZeWpYU913LSmZuUdMjJnoa67vp2WB7sV2ZHCBZbh2MekDK2emfWCxZZ997WpRfimvjq', 1) res = daemon.is_key_image_spent([ki]) assert len(res.spent_status) == 1 assert res.spent_status[0] == 1 self.wallet[0].refresh() res = self.wallet[0].get_balance() new_balance = res.balance res = daemon.get_transactions([tx_hash], decode_as_json=True) assert len(res.txs) == 1 tx = res.txs[0] assert tx.tx_hash == tx_hash assert not tx.in_pool assert len(tx.as_json) > 0 try: j = json.loads(tx.as_json) except: j = None assert j assert new_balance == balance - amount assert len(j['vin']) == 1 assert j['vin'][0]['key']['k_image'] == ki self.wallet[0].refresh() res = self.wallet[0].incoming_transfers(transfer_type='available') assert len([t for t in res.transfers if t.key_image == ki]) == 0 res = self.wallet[0].incoming_transfers(transfer_type='unavailable') assert len([t for t in res.transfers if t.key_image == ki]) == 1