11use jsonrpc_client_http:: { HttpHandle , HttpTransport } ;
22use serde:: { Deserialize , Serialize } ;
33use serde_json:: Value ;
4- use std :: { thread , time } ;
4+
55
66use crate :: models:: * ;
77use crate :: parse:: { read_puzzle, read_task} ;
88use crate :: puzzle:: solve_puzzle;
99use crate :: solve:: solve_small_while;
10-
10+ use chrono:: prelude:: * ;
11+ use std:: collections:: HashMap ;
12+ use std:: { thread, time} ;
1113#[ derive( Debug , Serialize , Deserialize ) ]
1214pub struct BlockChainInfo {
13- block : usize ,
14- block_subs : usize ,
15- block_ts : f64 ,
16- total_subs : usize ,
15+ pub block : usize ,
16+ pub block_subs : usize ,
17+ pub block_ts : f64 ,
18+ pub total_subs : usize ,
1719}
1820
1921#[ derive( Debug , Serialize , Deserialize ) ]
2022pub struct MiningInfo {
21- block : usize ,
23+ pub block : usize ,
2224 //excluded: Vec<usize>,
23- puzzle : String ,
24- task : String ,
25+ pub puzzle : String ,
26+ pub task : String ,
2527}
2628
2729#[ derive( Debug , Serialize , Deserialize ) ]
2830pub struct BlockInfo {
29- block : usize ,
30- puzzle : String ,
31- task : String ,
31+ pub block : usize ,
32+ pub block_ts : f64 ,
33+ pub puzzle : String ,
34+ pub task : String ,
35+ pub balances : HashMap < usize , usize > ,
36+ }
37+
38+ impl BlockInfo {
39+ pub fn time ( & self ) -> DateTime < Local > {
40+ Local . timestamp ( self . block_ts as i64 , 0 )
41+ }
3242}
3343
3444jsonrpc_client ! ( pub struct LambdaClient {
@@ -40,6 +50,7 @@ jsonrpc_client!(pub struct LambdaClient {
4050
4151pub struct Client {
4252 api : LambdaClient < HttpHandle > ,
53+ last_block : usize ,
4354}
4455
4556impl Default for Client {
@@ -53,7 +64,10 @@ impl Client {
5364 let transport = HttpTransport :: new ( ) . standalone ( ) . unwrap ( ) ;
5465 let transport_handle = transport. handle ( "http://localhost:8332" ) . unwrap ( ) ;
5566 let client = LambdaClient :: new ( transport_handle) ;
56- Client { api : client }
67+ Client {
68+ api : client,
69+ last_block : 0 ,
70+ }
5771 }
5872
5973 pub fn latest_block ( & mut self ) -> Option < usize > {
@@ -66,8 +80,23 @@ impl Client {
6680 }
6781 }
6882
83+ pub fn get_block_info ( & mut self , bucket : usize ) -> Option < BlockInfo > {
84+ match self . api . getblockinfo ( bucket) . call ( ) {
85+ Ok ( m) => Some ( m) ,
86+ Err ( e) => {
87+ eprintln ! ( "{}" , e) ;
88+ None
89+ }
90+ }
91+ }
92+
6993 pub fn submit_latest ( & mut self ) {
7094 if let Some ( block) = self . latest_block ( ) {
95+ if block == self . last_block {
96+ return ;
97+ }
98+ eprintln ! ( "Start {}" , block) ;
99+ self . last_block = block;
71100 if self . generate_solution ( block) {
72101 match self
73102 . api
@@ -96,7 +125,7 @@ impl Client {
96125
97126 let puzzle = read_puzzle ( & blockinfo. puzzle ) ;
98127 let task = read_task ( & blockinfo. task ) ;
99- let task_answer = solve_small_while ( task, std:: time:: Duration :: from_secs ( 180 ) ) ;
128+ let task_answer = solve_small_while ( task, std:: time:: Duration :: from_secs ( 300 ) ) ;
100129 let puzzle_answer = solve_puzzle ( puzzle) ;
101130
102131 self . dump_task_answer ( block, task_answer) ;
@@ -135,7 +164,7 @@ impl Client {
135164 pub fn execute ( & mut self ) {
136165 loop {
137166 self . submit_latest ( ) ;
138- thread:: sleep ( time:: Duration :: from_secs ( 60 ) ) ;
167+ thread:: sleep ( time:: Duration :: from_secs ( 10 ) ) ;
139168 }
140169 }
141170}
0 commit comments