@@ -4,9 +4,8 @@ use futures::{stream::FuturesUnordered, StreamExt};
44use libp2p:: gossipsub:: Event ;
55use sharp_p2p_common:: {
66 hash,
7- job:: Job ,
7+ job:: { Job , JobData } ,
88 network:: Network ,
9- node_account:: NodeAccount ,
109 process:: Process ,
1110 topic:: { gossipsub_ident_topic, Topic } ,
1211} ;
@@ -15,7 +14,7 @@ use sharp_p2p_compiler::{
1514 errors:: CompilerControllerError ,
1615 traits:: CompilerController ,
1716} ;
18- use sharp_p2p_peer:: { registry:: RegistryHandler , swarm:: SwarmRunner } ;
17+ use sharp_p2p_peer:: { node_account :: NodeAccount , registry:: RegistryHandler , swarm:: SwarmRunner } ;
1918use starknet:: providers:: { jsonrpc:: HttpTransport , JsonRpcClient , Url } ;
2019use std:: hash:: { DefaultHasher , Hash , Hasher } ;
2120use tokio:: {
@@ -60,13 +59,15 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
6059 let mut message_stream = swarm_runner. run ( new_job_topic, send_topic_rx) ;
6160 let mut event_stream = registry_handler. subscribe_events ( vec ! [ "0x0" . to_string( ) ] ) ;
6261
63- let compiler = CairoCompiler :: new ( node_account . get_signing_key ( ) , registry_address ) ;
62+ let compiler = CairoCompiler :: new ( ) ;
6463
6564 let mut compiler_scheduler =
66- FuturesUnordered :: < Process < ' _ , Result < Job , CompilerControllerError > > > :: new ( ) ;
65+ FuturesUnordered :: < Process < ' _ , Result < Vec < u8 > , CompilerControllerError > > > :: new ( ) ;
6766
6867 // Read cairo program path from stdin
6968 let mut stdin = BufReader :: new ( stdin ( ) ) . lines ( ) ;
69+ // TODO: Accept dynamic tip
70+ let tip = 10 ;
7071
7172 loop {
7273 tokio:: select! {
@@ -104,7 +105,17 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
104105 Some ( Ok ( event_vec) ) = event_stream. next( ) => {
105106 debug!( "{:?}" , event_vec) ;
106107 } ,
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);
108119 let serialized_job = serde_json:: to_string( & job) . unwrap( ) ;
109120 send_topic_tx. send( serialized_job. into( ) ) . await ?;
110121 info!( "Sent a new job: {}" , hash!( & job) ) ;
0 commit comments