@@ -4,9 +4,8 @@ use futures::{stream::FuturesUnordered, StreamExt};
4
4
use libp2p:: gossipsub:: Event ;
5
5
use sharp_p2p_common:: {
6
6
hash,
7
- job:: Job ,
7
+ job:: { Job , JobData } ,
8
8
network:: Network ,
9
- node_account:: NodeAccount ,
10
9
process:: Process ,
11
10
topic:: { gossipsub_ident_topic, Topic } ,
12
11
} ;
@@ -15,7 +14,7 @@ use sharp_p2p_compiler::{
15
14
errors:: CompilerControllerError ,
16
15
traits:: CompilerController ,
17
16
} ;
18
- use sharp_p2p_peer:: { registry:: RegistryHandler , swarm:: SwarmRunner } ;
17
+ use sharp_p2p_peer:: { node_account :: NodeAccount , registry:: RegistryHandler , swarm:: SwarmRunner } ;
19
18
use starknet:: providers:: { jsonrpc:: HttpTransport , JsonRpcClient , Url } ;
20
19
use std:: hash:: { DefaultHasher , Hash , Hasher } ;
21
20
use tokio:: {
@@ -60,13 +59,15 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
60
59
let mut message_stream = swarm_runner. run ( new_job_topic, send_topic_rx) ;
61
60
let mut event_stream = registry_handler. subscribe_events ( vec ! [ "0x0" . to_string( ) ] ) ;
62
61
63
- let compiler = CairoCompiler :: new ( node_account . get_signing_key ( ) , registry_address ) ;
62
+ let compiler = CairoCompiler :: new ( ) ;
64
63
65
64
let mut compiler_scheduler =
66
- FuturesUnordered :: < Process < ' _ , Result < Job , CompilerControllerError > > > :: new ( ) ;
65
+ FuturesUnordered :: < Process < ' _ , Result < Vec < u8 > , CompilerControllerError > > > :: new ( ) ;
67
66
68
67
// Read cairo program path from stdin
69
68
let mut stdin = BufReader :: new ( stdin ( ) ) . lines ( ) ;
69
+ // TODO: Accept dynamic tip
70
+ let tip = 10 ;
70
71
71
72
loop {
72
73
tokio:: select! {
@@ -104,7 +105,17 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
104
105
Some ( Ok ( event_vec) ) = event_stream. next( ) => {
105
106
debug!( "{:?}" , event_vec) ;
106
107
} ,
107
- Some ( Ok ( job) ) = compiler_scheduler. next( ) => {
108
+ Some ( Ok ( cairo_pie_compressed) ) = compiler_scheduler. next( ) => {
109
+ let job_data = JobData :: new( tip, cairo_pie_compressed, registry_address) ;
110
+ let expected_reward = job_data. reward;
111
+ let staked_amount = node_account. balance( registry_address) . await ?;
112
+ // TODO: handle error better way
113
+ if staked_amount < expected_reward{
114
+ return Err ( "Staked amount is less than expected reward" . into( ) ) ;
115
+ }
116
+ let job = Job :: try_from_job_data( job_data, node_account. get_signing_key( ) ) ;
117
+ // info!("Job: {:?}", job.job_data.reward);
118
+ // info!("Job: {:?}", job.job_data.num_of_steps);
108
119
let serialized_job = serde_json:: to_string( & job) . unwrap( ) ;
109
120
send_topic_tx. send( serialized_job. into( ) ) . await ?;
110
121
info!( "Sent a new job: {}" , hash!( & job) ) ;
0 commit comments