def test_get_unused_ots_index2(self): old_value = config.dev.max_ots_tracking_index config.dev.max_ots_tracking_index = 128 try: random_xmss = get_random_xmss(xmss_height=8) addr_state = AddressState.get_default(random_xmss.address) self.assertEqual(addr_state.get_unused_ots_index(), 0) addr_state.set_ots_key(0) self.assertEqual(addr_state.get_unused_ots_index(), 1) addr_state.set_ots_key(2) self.assertEqual(addr_state.get_unused_ots_index(), 1) addr_state.set_ots_key(1) self.assertEqual(addr_state.get_unused_ots_index(), 3) for i in range( 3, min(2**addr_state.height, config.dev.max_ots_tracking_index)): addr_state.set_ots_key(i) self.assertEqual(addr_state.get_unused_ots_index(), i + 1) self.assertEqual(addr_state.get_unused_ots_index(), config.dev.max_ots_tracking_index) for i in range(config.dev.max_ots_tracking_index, 2**addr_state.height): addr_state.set_ots_key(i) self.assertIsNone(addr_state.get_unused_ots_index()) finally: config.dev.max_ots_tracking_index = old_value
def test_get_default_coinbase(self): # Make sure that Coinbase AddressState gets all the coins supply by default coinbase_addr_state = AddressState.get_default( config.dev.coinbase_address) self.assertEqual( coinbase_addr_state.balance, int(config.dev.max_coin_supply * config.dev.shor_per_quanta))
def test_relaySlaveTxnBySlave(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddressWithSlaves(xrdwallet_pb2.AddNewAddressWithSlavesReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) slaves = walletd.get_slave_list(qaddress) addr_state.add_slave_pks_access_type(bytes(hstr2bin(slaves[0][0].pk)), 0) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) alice_xmss = get_alice_xmss(4) slave_pks = [alice_xmss.pk] access_types = [0] resp = service.RelaySlaveTxnBySlave( xrdwallet_pb2.RelaySlaveTxnBySlaveReq(slave_pks=slave_pks, access_types=access_types, fee=100000000, master_address=qaddress), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_relaySlaveTxn(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) walletd._public_stub.IsSlave = Mock( return_value=xrd_pb2.IsSlaveResp(result=True)) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(next_unused_ots_index=0, unused_ots_index_found=True)) alice_xmss = get_alice_xmss(4) slave_pks = [alice_xmss.pk] access_types = [0] walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) resp = service.RelaySlaveTxn(xrdwallet_pb2.RelaySlaveTxnReq(slave_pks=slave_pks, access_types=access_types, fee=100000000, master_address=None, signer_address=qaddress, ots_index=0), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_relayTokenTxnBySlave(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddressWithSlaves(xrdwallet_pb2.AddNewAddressWithSlavesReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) slaves = walletd.get_slave_list(qaddress) addr_state.add_slave_pks_access_type(bytes(hstr2bin(slaves[0][0].pk)), 0) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) alice_xmss = get_alice_xmss(4) bob_xmss = get_bob_xmss(4) qaddresses = [alice_xmss.qaddress, bob_xmss.qaddress] amounts = [1000000000, 1000000000] resp = service.RelayTokenTxnBySlave( xrdwallet_pb2.RelayTokenTxnBySlaveReq(symbol=b'xrd', name=b'Quantum Resistant Ledger', owner=alice_xmss.qaddress, decimals=5, addresses=qaddresses, amounts=amounts, fee=100000000, master_address=qaddress), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_relayMessageTxn(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(next_unused_ots_index=0, unused_ots_index_found=True)) resp = service.RelayMessageTxn(xrdwallet_pb2.RelayMessageTxnReq(message=b'Hello xrd!', fee=100000000, master_address=None, signer_address=qaddress, ots_index=0), context=None) self.assertEqual(0, resp.code) self.assertIsNotNone(resp.tx)
def test_get_unused_ots_index(self): random_xmss = get_random_xmss(xmss_height=4) addr_state = AddressState.get_default(random_xmss.address) self.assertEqual(addr_state.get_unused_ots_index(), 0) addr_state.set_ots_key(0) self.assertEqual(addr_state.get_unused_ots_index(), 1) addr_state.set_ots_key(2) self.assertEqual(addr_state.get_unused_ots_index(), 1) addr_state.set_ots_key(1) self.assertEqual(addr_state.get_unused_ots_index(), 3) for i in range( 3, min(2**addr_state.height, config.dev.max_ots_tracking_index)): addr_state.set_ots_key(i) self.assertIsNone(addr_state.get_unused_ots_index())
def test_ots_key_validation(self): random_xmss = get_random_xmss(xmss_height=4) addr = AddressState.get_default(random_xmss.address) ots_indexes = list(range(0, 2**random_xmss.height)) shuffle(ots_indexes) for i in ots_indexes: if i < config.dev.max_ots_tracking_index: self.assertFalse(addr.ots_key_reuse(i)) else: result = addr.ots_key_reuse(i) if i > addr.ots_counter: self.assertFalse(result) else: self.assertTrue(result) addr.set_ots_key(i) self.assertTrue(addr.ots_key_reuse(i))
def test_relayTokenTxn(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) walletd._public_stub.IsSlave = Mock( return_value=xrd_pb2.IsSlaveResp(result=True)) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(next_unused_ots_index=0, unused_ots_index_found=True)) alice_xmss = get_alice_xmss(4) bob_xmss = get_bob_xmss(4) qaddresses = [alice_xmss.qaddress, bob_xmss.qaddress] amounts = [1000000000, 1000000000] walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) resp = service.RelayTokenTxn(xrdwallet_pb2.RelayTokenTxnReq(symbol=b'xrd', name=b'Quantum Resistant Ledger', owner=alice_xmss.qaddress, decimals=5, addresses=qaddresses, amounts=amounts, fee=100000000, master_address=None, signer_address=qaddress, ots_index=0), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def setUp(self): self.addr_state = AddressState.get_default(alice.address)