fixed closeness calculation
This commit is contained in:
		
							parent
							
								
									57ec04eff5
								
							
						
					
					
						commit
						4a831a4a4d
					
				
					 3 changed files with 46 additions and 20 deletions
				
			
		
							
								
								
									
										21
									
								
								scripts/closeness-calculator.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								scripts/closeness-calculator.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | import sys | ||||||
|  | import os | ||||||
|  | import subprocess | ||||||
|  | import base64 | ||||||
|  | if not os.path.exists('onionr.sh'): | ||||||
|  |     os.chdir('../') | ||||||
|  | sys.path.append("src/") | ||||||
|  | from streamfill import identify_neighbors | ||||||
|  | 
 | ||||||
|  | onions = [] | ||||||
|  | p = subprocess.Popen(["scripts/generate-onions.py", '5'], | ||||||
|  |                         stdout=subprocess.PIPE, | ||||||
|  |                         stderr=subprocess.PIPE) | ||||||
|  | for line in iter(p.stdout.readline, b''): | ||||||
|  |     line = line.decode() | ||||||
|  |     onions.append(line.strip()) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | for onion in onions: | ||||||
|  |     print(onion, identify_neighbors(onion, onions, 3)) | ||||||
|  | 
 | ||||||
|  | @ -10,20 +10,31 @@ def identify_neighbors( | ||||||
|         address: OnionAddressString, |         address: OnionAddressString, | ||||||
|         peers: Iterable[OnionAddressString], |         peers: Iterable[OnionAddressString], | ||||||
|         closest_n: int) -> OnionAddressString: |         closest_n: int) -> OnionAddressString: | ||||||
|  |     """Identify node addresses that are closest | ||||||
|  |     in value to a given node address""" | ||||||
|  |     peers_to_test = list(peers) | ||||||
|  | 
 | ||||||
|  |     try: | ||||||
|  |         peers_to_test.remove(address) | ||||||
|  |     except ValueError: | ||||||
|  |         pass | ||||||
| 
 | 
 | ||||||
|     address = extract_ed25519_from_onion_address(address) |     address = extract_ed25519_from_onion_address(address) | ||||||
|     address_int = int.from_bytes(address, "big") |     address_int = int.from_bytes(address, "big") | ||||||
| 
 |  | ||||||
|     def _calc_closeness(y): |  | ||||||
|         return abs(address_int - int.from_bytes(extract_ed25519_from_onion_address(y), "big")) |  | ||||||
| 
 |  | ||||||
|     closeness_values = [] |     closeness_values = [] | ||||||
|     end_result = [] |     end_result = [] | ||||||
|     for peer in peers: | 
 | ||||||
|  |     def _calc_closeness(y): | ||||||
|  |         ret = abs( | ||||||
|  |             address_int - | ||||||
|  |             int.from_bytes(extract_ed25519_from_onion_address(y), "big")) | ||||||
|  |         return ret | ||||||
|  | 
 | ||||||
|  |     for peer in peers_to_test: | ||||||
|         closeness_values.append((peer, _calc_closeness(peer))) |         closeness_values.append((peer, _calc_closeness(peer))) | ||||||
|     closeness_values.sort() |     closeness_values.sort(key=lambda p: p[1]) | ||||||
|     for i, result in enumerate(closeness_values): |     for i, result in enumerate(closeness_values): | ||||||
|  |         end_result.append(result[0]) | ||||||
|         if i > closest_n: |         if i > closest_n: | ||||||
|             break |             break | ||||||
|         end_result.append(result[0]) |  | ||||||
|     return end_result |     return end_result | ||||||
|  |  | ||||||
|  | @ -15,13 +15,6 @@ from streamfill import identify_neighbors, extract_ed25519_from_onion_address | ||||||
| 
 | 
 | ||||||
| class TestStreamfillNeighbors(unittest.TestCase): | class TestStreamfillNeighbors(unittest.TestCase): | ||||||
|     def test_neighbor_closeness_consistent(self): |     def test_neighbor_closeness_consistent(self): | ||||||
|         onions = [] |  | ||||||
|         # p = subprocess.Popen(["scripts/generate-onions.py", '5'], |  | ||||||
|         #                      stdout=subprocess.PIPE, |  | ||||||
|         #                      stderr=subprocess.PIPE) |  | ||||||
|         # for line in iter(p.stdout.readline, b''): |  | ||||||
|         #     line = line.decode() |  | ||||||
|         #     onions.append(line.strip()) |  | ||||||
|         main = '7uifxsgidchopmdwmtip6x4ydra6cpf2ov4ghj2lzx5uydyssduh5qid.onion' |         main = '7uifxsgidchopmdwmtip6x4ydra6cpf2ov4ghj2lzx5uydyssduh5qid.onion' | ||||||
|         others = ['bxxajpimlonmbxb5jzjre3go3dvfobqyayqwpksd6zpjz4s4mknstwyd.onion', '2zofaifd6s3flwbv5wl4vtgnesbprc4f2ptljl4a47dfkvrbmw3e5iqd.onion', '6umslj7jtzu27n4jgf3byn55ztz5mkoqocx32zwjya6rbnxqjpyysyyd.onion'] |         others = ['bxxajpimlonmbxb5jzjre3go3dvfobqyayqwpksd6zpjz4s4mknstwyd.onion', '2zofaifd6s3flwbv5wl4vtgnesbprc4f2ptljl4a47dfkvrbmw3e5iqd.onion', '6umslj7jtzu27n4jgf3byn55ztz5mkoqocx32zwjya6rbnxqjpyysyyd.onion'] | ||||||
|         main_num = int.from_bytes(extract_ed25519_from_onion_address(main), 'big') |         main_num = int.from_bytes(extract_ed25519_from_onion_address(main), 'big') | ||||||
|  | @ -31,12 +24,13 @@ class TestStreamfillNeighbors(unittest.TestCase): | ||||||
|         my_result = [] |         my_result = [] | ||||||
|         for i in others: |         for i in others: | ||||||
|             my_result.append((i, abs(main_num - int.from_bytes(extract_ed25519_from_onion_address(i), 'big')))) |             my_result.append((i, abs(main_num - int.from_bytes(extract_ed25519_from_onion_address(i), 'big')))) | ||||||
|         my_result.sort() |         my_result.sort(key=lambda p: p[1]) | ||||||
|  | 
 | ||||||
|         final = [] |         final = [] | ||||||
|         for i in my_result: |         for i in my_result: | ||||||
|             final.append(i[0]) |             final.append(i[0]) | ||||||
|         self.assertTrue(len(test_data) == 3) |         self.assertListEqual(final, test_data) | ||||||
|         self.assertListEqual(test_data, final) | 
 | ||||||
| 
 | 
 | ||||||
|     def test_neighbor_closeness_random(self): |     def test_neighbor_closeness_random(self): | ||||||
|         onions = [] |         onions = [] | ||||||
|  | @ -55,12 +49,12 @@ class TestStreamfillNeighbors(unittest.TestCase): | ||||||
|         my_result = [] |         my_result = [] | ||||||
|         for i in onions: |         for i in onions: | ||||||
|             my_result.append((i, abs(main_num - int.from_bytes(extract_ed25519_from_onion_address(i), 'big')))) |             my_result.append((i, abs(main_num - int.from_bytes(extract_ed25519_from_onion_address(i), 'big')))) | ||||||
|         my_result.sort() |         my_result.sort(key=lambda p: p[1]) | ||||||
|  | 
 | ||||||
|         final = [] |         final = [] | ||||||
|         for i in my_result: |         for i in my_result: | ||||||
|             final.append(i[0]) |             final.append(i[0]) | ||||||
|         self.assertTrue(len(test_data) == 100) |         self.assertListEqual(final, test_data) | ||||||
|         self.assertListEqual(test_data, final) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| unittest.main() | unittest.main() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue