diff --git a/pallets/subtensor/src/subnets/serving.rs b/pallets/subtensor/src/subnets/serving.rs index c8c89bc01..bee81bfae 100644 --- a/pallets/subtensor/src/subnets/serving.rs +++ b/pallets/subtensor/src/subnets/serving.rs @@ -172,7 +172,7 @@ impl Pallet { // Check the ip signature validity. ensure!(Self::is_valid_ip_type(ip_type), Error::::InvalidIpType); ensure!( - Self::is_valid_ip_address(ip_type, ip), + Self::is_valid_ip_address(ip_type, ip, false), Error::::InvalidIpAddress ); @@ -276,17 +276,11 @@ impl Pallet { } // @todo (Parallax 2-1-2021) : Implement exclusion of private IP ranges - pub fn is_valid_ip_address(ip_type: u8, addr: u128) -> bool { - if !Self::is_valid_ip_type(ip_type) { - return false; - } - if addr == 0 { + pub fn is_valid_ip_address(ip_type: u8, addr: u128, allow_zero: bool) -> bool { + if !allow_zero && addr == 0 { return false; } if ip_type == 4 { - if addr == 0 { - return false; - } if addr >= u32::MAX as u128 { return false; } @@ -295,9 +289,6 @@ impl Pallet { } // Localhost } if ip_type == 6 { - if addr == 0x0 { - return false; - } if addr == u128::MAX { return false; } @@ -346,7 +337,8 @@ impl Pallet { // Check the ip signature validity. ensure!(Self::is_valid_ip_type(ip_type), Error::::InvalidIpType); ensure!( - Self::is_valid_ip_address(ip_type, ip), + // allow axon to be served with a zero ip address for testing purposes + Self::is_valid_ip_address(ip_type, ip, true), Error::::InvalidIpAddress ); diff --git a/pallets/subtensor/src/tests/serving.rs b/pallets/subtensor/src/tests/serving.rs index 251dde207..6711862a6 100644 --- a/pallets/subtensor/src/tests/serving.rs +++ b/pallets/subtensor/src/tests/serving.rs @@ -555,7 +555,14 @@ fn test_serving_is_valid_ip_address_ipv4() { new_test_ext(1).execute_with(|| { assert!(SubtensorModule::is_valid_ip_address( 4, - test::ipv4(8, 8, 8, 8) + test::ipv4(8, 8, 8, 8), + false + )); + + assert!(SubtensorModule::is_valid_ip_address( + 4, + test::ipv4(0, 0, 0, 0), + true )); }); } @@ -565,11 +572,18 @@ fn test_serving_is_valid_ip_address_ipv6() { new_test_ext(1).execute_with(|| { assert!(SubtensorModule::is_valid_ip_address( 6, - test::ipv6(1, 2, 3, 4, 5, 6, 7, 8) + test::ipv6(1, 2, 3, 4, 5, 6, 7, 8), + false + )); + assert!(SubtensorModule::is_valid_ip_address( + 6, + test::ipv6(1, 2, 3, 4, 5, 6, 7, 8), + false )); assert!(SubtensorModule::is_valid_ip_address( 6, - test::ipv6(1, 2, 3, 4, 5, 6, 7, 8) + test::ipv6(0, 0, 0, 0, 0, 0, 0, 0), + true )); }); } @@ -579,19 +593,38 @@ fn test_serving_is_invalid_ipv4_address() { new_test_ext(1).execute_with(|| { assert!(!SubtensorModule::is_valid_ip_address( 4, - test::ipv4(0, 0, 0, 0) + test::ipv4(0, 0, 0, 0), + false + )); + assert!(!SubtensorModule::is_valid_ip_address( + 4, + test::ipv4(255, 255, 255, 255), + false )); assert!(!SubtensorModule::is_valid_ip_address( 4, - test::ipv4(255, 255, 255, 255) + test::ipv4(127, 0, 0, 1), + false )); assert!(!SubtensorModule::is_valid_ip_address( 4, - test::ipv4(127, 0, 0, 1) + test::ipv6(0xffff, 2, 3, 4, 5, 6, 7, 8), + false )); assert!(!SubtensorModule::is_valid_ip_address( 4, - test::ipv6(0xffff, 2, 3, 4, 5, 6, 7, 8) + test::ipv4(255, 255, 255, 255), + true + )); + assert!(!SubtensorModule::is_valid_ip_address( + 4, + test::ipv4(127, 0, 0, 1), + true + )); + assert!(!SubtensorModule::is_valid_ip_address( + 4, + test::ipv6(0xffff, 2, 3, 4, 5, 6, 7, 8), + true )); }); } @@ -601,13 +634,22 @@ fn test_serving_is_invalid_ipv6_address() { new_test_ext(1).execute_with(|| { assert!(!SubtensorModule::is_valid_ip_address( 6, - test::ipv6(0, 0, 0, 0, 0, 0, 0, 0) + test::ipv6(0, 0, 0, 0, 0, 0, 0, 0), + false )); assert!(!SubtensorModule::is_valid_ip_address( 4, test::ipv6( 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff - ) + ), + false + )); + assert!(!SubtensorModule::is_valid_ip_address( + 4, + test::ipv6( + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff + ), + true )); }); }