1
1
extern crate alloc;
2
-
3
- use alloc:: vec:: Vec ;
4
-
5
2
use crate :: precompiles:: { get_method_id, get_slice} ;
6
- use crate :: { Runtime , RuntimeCall } ;
7
- use ed25519_dalek:: { Signature , Verifier , VerifyingKey } ;
3
+ use crate :: Runtime ;
8
4
use fp_evm:: {
9
- ExitError , ExitSucceed , LinearCostPrecompile , PrecompileFailure , PrecompileHandle ,
10
- PrecompileOutput , PrecompileResult ,
5
+ ExitError , ExitSucceed , PrecompileFailure , PrecompileHandle , PrecompileOutput , PrecompileResult ,
11
6
} ;
12
7
use sp_core:: { ByteArray , U256 } ;
13
8
use sp_std:: vec;
14
9
pub const METAGRAPH_PRECOMPILE_INDEX : u64 = 2050 ;
15
- use sp_runtime:: AccountId32 ;
16
10
pub struct MetagraphPrecompile ;
17
11
18
12
const NO_HOTKEY : & str = "no hotkey" ;
19
13
20
14
impl MetagraphPrecompile {
21
15
pub fn execute ( handle : & mut impl PrecompileHandle ) -> PrecompileResult {
22
- log:: error!( "++++++ execute metagraph" ) ;
23
16
let txdata = handle. input ( ) ;
24
17
let method_id = get_slice ( txdata, 0 , 4 ) ?;
25
18
let method_input = txdata
@@ -70,12 +63,7 @@ impl MetagraphPrecompile {
70
63
}
71
64
72
65
fn get_uid_count ( data : & [ u8 ] ) -> PrecompileResult {
73
- log:: error!( "++++++ data len is {:?}" , data. len( ) ) ;
74
-
75
66
let netuid = Self :: parse_netuid ( data) ?;
76
-
77
- log:: error!( "++++++ netuid is {:?}" , netuid) ;
78
-
79
67
let uid_count = pallet_subtensor:: SubnetworkN :: < Runtime > :: get ( netuid) ;
80
68
81
69
let uid_count_u256 = U256 :: from ( uid_count) ;
@@ -90,29 +78,26 @@ impl MetagraphPrecompile {
90
78
91
79
fn get_stake ( data : & [ u8 ] ) -> PrecompileResult {
92
80
let netuid = Self :: parse_netuid ( data) ?;
93
- let uid = Self :: parse_uid ( & data[ 32 ..] ) ?;
94
-
81
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ?) ?;
95
82
let hotkey = pallet_subtensor:: Pallet :: < Runtime > :: get_hotkey_for_net_and_uid ( netuid, uid)
96
83
. map_err ( |_| PrecompileFailure :: Error {
97
84
exit_status : ExitError :: InvalidRange ,
98
85
} ) ?;
99
86
100
87
let stake = pallet_subtensor:: TotalHotkeyStake :: < Runtime > :: get ( & hotkey) ;
101
-
102
88
let result_u256 = U256 :: from ( stake) ;
103
89
let mut result = [ 0_u8 ; 32 ] ;
104
90
U256 :: to_big_endian ( & result_u256, & mut result) ;
105
91
106
92
Ok ( PrecompileOutput {
107
93
exit_status : ExitSucceed :: Returned ,
108
- output : [ ] . into ( ) ,
94
+ output : result . into ( ) ,
109
95
} )
110
96
}
111
97
112
98
fn get_rank ( data : & [ u8 ] ) -> PrecompileResult {
113
99
let netuid = Self :: parse_netuid ( data) ?;
114
- let uid = Self :: parse_uid ( & data[ 32 ..] ) ?;
115
-
100
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ?) ?;
116
101
let rank = pallet_subtensor:: Pallet :: < Runtime > :: get_rank_for_uid ( netuid, uid) ;
117
102
118
103
let result_u256 = U256 :: from ( rank) ;
@@ -127,7 +112,7 @@ impl MetagraphPrecompile {
127
112
128
113
fn get_trust ( data : & [ u8 ] ) -> PrecompileResult {
129
114
let netuid = Self :: parse_netuid ( data) ?;
130
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
115
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
131
116
132
117
let trust = pallet_subtensor:: Pallet :: < Runtime > :: get_trust_for_uid ( netuid, uid) ;
133
118
@@ -143,7 +128,7 @@ impl MetagraphPrecompile {
143
128
144
129
fn get_consensus ( data : & [ u8 ] ) -> PrecompileResult {
145
130
let netuid = Self :: parse_netuid ( data) ?;
146
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
131
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
147
132
148
133
let consensus = pallet_subtensor:: Pallet :: < Runtime > :: get_consensus_for_uid ( netuid, uid) ;
149
134
@@ -159,7 +144,7 @@ impl MetagraphPrecompile {
159
144
160
145
fn get_incentive ( data : & [ u8 ] ) -> PrecompileResult {
161
146
let netuid = Self :: parse_netuid ( data) ?;
162
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
147
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
163
148
164
149
let incentive = pallet_subtensor:: Pallet :: < Runtime > :: get_incentive_for_uid ( netuid, uid) ;
165
150
@@ -175,7 +160,7 @@ impl MetagraphPrecompile {
175
160
176
161
fn get_dividends ( data : & [ u8 ] ) -> PrecompileResult {
177
162
let netuid = Self :: parse_netuid ( data) ?;
178
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
163
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
179
164
180
165
let dividends = pallet_subtensor:: Pallet :: < Runtime > :: get_dividends_for_uid ( netuid, uid) ;
181
166
@@ -191,7 +176,7 @@ impl MetagraphPrecompile {
191
176
192
177
fn get_emission ( data : & [ u8 ] ) -> PrecompileResult {
193
178
let netuid = Self :: parse_netuid ( data) ?;
194
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
179
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
195
180
196
181
let emission = pallet_subtensor:: Pallet :: < Runtime > :: get_emission_for_uid ( netuid, uid) ;
197
182
@@ -207,7 +192,7 @@ impl MetagraphPrecompile {
207
192
208
193
fn get_vtrust ( data : & [ u8 ] ) -> PrecompileResult {
209
194
let netuid = Self :: parse_netuid ( data) ?;
210
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
195
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
211
196
212
197
let vtrust = pallet_subtensor:: Pallet :: < Runtime > :: get_validator_trust_for_uid ( netuid, uid) ;
213
198
@@ -223,7 +208,7 @@ impl MetagraphPrecompile {
223
208
224
209
fn get_validator_status ( data : & [ u8 ] ) -> PrecompileResult {
225
210
let netuid = Self :: parse_netuid ( data) ?;
226
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
211
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
227
212
228
213
let validator_permit =
229
214
pallet_subtensor:: Pallet :: < Runtime > :: get_validator_permit_for_uid ( netuid, uid) ;
@@ -238,13 +223,13 @@ impl MetagraphPrecompile {
238
223
239
224
Ok ( PrecompileOutput {
240
225
exit_status : ExitSucceed :: Returned ,
241
- output : [ ] . into ( ) ,
226
+ output : result . into ( ) ,
242
227
} )
243
228
}
244
229
245
230
fn get_last_update ( data : & [ u8 ] ) -> PrecompileResult {
246
231
let netuid = Self :: parse_netuid ( data) ?;
247
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
232
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
248
233
249
234
let last_update = pallet_subtensor:: Pallet :: < Runtime > :: get_last_update_for_uid ( netuid, uid) ;
250
235
@@ -260,7 +245,7 @@ impl MetagraphPrecompile {
260
245
261
246
fn get_is_active ( data : & [ u8 ] ) -> PrecompileResult {
262
247
let netuid = Self :: parse_netuid ( data) ?;
263
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
248
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
264
249
265
250
let active = pallet_subtensor:: Pallet :: < Runtime > :: get_active_for_uid ( netuid, uid) ;
266
251
@@ -276,7 +261,7 @@ impl MetagraphPrecompile {
276
261
277
262
fn get_axon ( data : & [ u8 ] ) -> PrecompileResult {
278
263
let netuid = Self :: parse_netuid ( data) ?;
279
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
264
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
280
265
281
266
let hotkey = pallet_subtensor:: Pallet :: < Runtime > :: get_hotkey_for_net_and_uid ( netuid, uid)
282
267
. map_err ( |_| PrecompileFailure :: Error {
@@ -319,7 +304,7 @@ impl MetagraphPrecompile {
319
304
320
305
fn get_hotkey ( data : & [ u8 ] ) -> PrecompileResult {
321
306
let netuid = Self :: parse_netuid ( data) ?;
322
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
307
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
323
308
324
309
let hotkey = pallet_subtensor:: Pallet :: < Runtime > :: get_hotkey_for_net_and_uid ( netuid, uid)
325
310
. map_err ( |_| PrecompileFailure :: Error {
@@ -334,7 +319,7 @@ impl MetagraphPrecompile {
334
319
335
320
fn get_coldkey ( data : & [ u8 ] ) -> PrecompileResult {
336
321
let netuid = Self :: parse_netuid ( data) ?;
337
- let uid = Self :: parse_uid ( & data[ 32 .. ] ) ?;
322
+ let uid = Self :: parse_uid ( get_slice ( data, 32 , 64 ) ? ) ?;
338
323
339
324
let hotkey = pallet_subtensor:: Pallet :: < Runtime > :: get_hotkey_for_net_and_uid ( netuid, uid)
340
325
. map_err ( |_| PrecompileFailure :: Error {
0 commit comments