@@ -15,6 +15,8 @@ pub const METAGRAPH_PRECOMPILE_INDEX: u64 = 2050;
15
15
use sp_runtime:: AccountId32 ;
16
16
pub struct MetagraphPrecompile ;
17
17
18
+ const NO_HOTKEY : & str = "no hotkey" ;
19
+
18
20
impl MetagraphPrecompile {
19
21
pub fn execute ( handle : & mut impl PrecompileHandle ) -> PrecompileResult {
20
22
log:: error!( "++++++ execute metagraph" ) ;
@@ -274,18 +276,40 @@ impl MetagraphPrecompile {
274
276
275
277
let hotkey = pallet_subtensor:: Pallet :: < Runtime > :: get_hotkey_for_net_and_uid ( netuid, uid)
276
278
. map_err ( |_| PrecompileFailure :: Error {
277
- exit_status : ExitError :: InvalidRange ,
279
+ exit_status : ExitError :: Other ( sp_version :: Cow :: Borrowed ( NO_HOTKEY ) ) ,
278
280
} ) ?;
279
281
280
282
let axon = pallet_subtensor:: Pallet :: < Runtime > :: get_axon_info ( netuid, & hotkey) ;
281
283
282
- // let result_u256 = U256::from(rank);
283
- // let mut result = [0_u8; 32];
284
- // U256::to_big_endian(&result_u256, &mut result);
284
+ let mut block_result = [ 0_u8 ; 32 ] ;
285
+ U256 :: to_big_endian ( & U256 :: from ( axon. block ) , & mut block_result) ;
286
+
287
+ let mut version_result = [ 0_u8 ; 32 ] ;
288
+ U256 :: to_big_endian ( & U256 :: from ( axon. version ) , & mut version_result) ;
289
+
290
+ let mut ip_result = [ 0_u8 ; 32 ] ;
291
+ U256 :: to_big_endian ( & U256 :: from ( axon. ip ) , & mut ip_result) ;
292
+
293
+ let mut port_result = [ 0_u8 ; 32 ] ;
294
+ U256 :: to_big_endian ( & U256 :: from ( axon. port ) , & mut port_result) ;
295
+
296
+ let mut ip_type_result = [ 0_u8 ; 32 ] ;
297
+ U256 :: to_big_endian ( & U256 :: from ( axon. ip_type ) , & mut ip_type_result) ;
298
+
299
+ let mut protocol_result = [ 0_u8 ; 32 ] ;
300
+ U256 :: to_big_endian ( & U256 :: from ( axon. protocol ) , & mut protocol_result) ;
301
+
302
+ let mut result = [ 0_u8 ; 192 ] ;
303
+ result[ ..32 ] . copy_from_slice ( & block_result) ;
304
+ result[ 32 ..64 ] . copy_from_slice ( & version_result) ;
305
+ result[ 64 ..96 ] . copy_from_slice ( & ip_result) ;
306
+ result[ 96 ..128 ] . copy_from_slice ( & port_result) ;
307
+ result[ 128 ..160 ] . copy_from_slice ( & ip_type_result) ;
308
+ result[ 160 ..] . copy_from_slice ( & protocol_result) ;
285
309
286
310
Ok ( PrecompileOutput {
287
311
exit_status : ExitSucceed :: Returned ,
288
- output : axon . decode ( ) . into ( ) ,
312
+ output : result . into ( ) ,
289
313
} )
290
314
}
291
315
0 commit comments