@@ -10,6 +10,8 @@ pub mod graphql;
10
10
use std:: collections:: HashMap ;
11
11
use std:: sync:: Arc ;
12
12
13
+ use dusk_bytes:: DeserializableSlice ;
14
+ use dusk_core:: signatures:: bls:: PublicKey as BlsPublicKey ;
13
15
use dusk_core:: transfer:: data:: { BlobData , BlobSidecar } ;
14
16
use dusk_core:: transfer:: Transaction as ProtocolTransaction ;
15
17
use dusk_vm:: execute;
@@ -62,6 +64,7 @@ impl HandleRequest for RuskNode {
62
64
( "network" , _, "peers" ) => true ,
63
65
( "network" , _, "peers_location" ) => true ,
64
66
( "node" , _, "info" ) => true ,
67
+ ( "account" , Some ( _) , "status" ) => true ,
65
68
( "blocks" , _, "gas-price" ) => true ,
66
69
( "blobs" , Some ( _) , "commitment" ) => true ,
67
70
( "blobs" , Some ( _) , "hash" ) => true ,
@@ -93,6 +96,7 @@ impl HandleRequest for RuskNode {
93
96
94
97
( "network" , _, "peers_location" ) => self . peers_location ( ) . await ,
95
98
( "node" , _, "info" ) => self . get_info ( ) . await ,
99
+ ( "account" , Some ( pk) , "status" ) => self . get_account ( pk) . await ,
96
100
( "blocks" , _, "gas-price" ) => {
97
101
let max_transactions = request
98
102
. data
@@ -333,6 +337,26 @@ impl RuskNode {
333
337
} ;
334
338
Ok ( response)
335
339
}
340
+
341
+ async fn get_account ( & self , pk : & str ) -> anyhow:: Result < ResponseData > {
342
+ let pk = bs58:: decode ( pk)
343
+ . into_vec ( )
344
+ . map_err ( |_| anyhow:: anyhow!( "Invalid bs58 account" ) ) ?;
345
+ let pk = BlsPublicKey :: from_slice ( & pk)
346
+ . map_err ( |_| anyhow:: anyhow!( "Invalid bls account" ) ) ?;
347
+
348
+ let vm = self . inner ( ) . vm_handler ( ) ;
349
+
350
+ let account = vm
351
+ . read ( )
352
+ . await
353
+ . account ( & pk)
354
+ . map_err ( |e| anyhow:: anyhow!( "Cannot query the state {e:?}" ) ) ?;
355
+ Ok ( ResponseData :: new ( json ! ( {
356
+ "balance" : account. balance,
357
+ "nonce" : account. nonce,
358
+ } ) ) )
359
+ }
336
360
}
337
361
338
362
async fn load_tip < DB : database:: DB > (
0 commit comments