@@ -7,37 +7,67 @@ use std::sync::{Arc, Mutex, RwLock};
77use std:: thread;
88use std:: time:: Duration ;
99
10- use grin_core:: genesis:: genesis_floo;
10+ use grin_core:: genesis:: { genesis_floo, genesis_main } ;
1111use grin_core:: global:: { set_mining_mode, ChainTypes } ;
1212use grin_p2p:: types:: { Capabilities , P2PConfig , PeerAddr } ;
1313use grin_p2p:: Peer ;
1414use log:: * ;
1515use std:: collections:: { HashMap , VecDeque } ;
16+ use std:: fs:: File ;
17+ use std:: io:: { Error , Write } ;
1618
1719mod adapter;
1820use crate :: adapter:: FakeAdapter ;
1921use crossbeam_queue:: SegQueue ;
2022use crossbeam_utils:: sync:: ShardedLock ;
23+ use structopt:: StructOpt ;
2124
2225type Storage = HashMap < PeerAddr , Option < Vec < PeerAddr > > > ;
2326
27+ #[ derive( StructOpt , Debug ) ]
28+ #[ structopt( name = "basic" ) ]
29+ struct Args {
30+ #[ structopt( short, long) ]
31+ floonet : bool ,
32+ }
33+
2434const NTHREADS : u8 = 100 ;
2535
36+ // mainnet nodes
37+ // 5.9.152.75 mainnet.seed.grin-tech.org / mainnet.seed.grin.lesceller.com
38+ // 139.162.168.18 mainnet.seed.grin.icu
39+ // 94.130.229.193 mainnet.seed.713.mw
40+ // 159.69.37.136 mainnet.seed.grin.prokapi.com
41+ // 109.74.202.16 grinseed.yeastplume.org
42+
2643fn main ( ) {
2744 env_logger:: init ( ) ;
2845 info ! ( "Hello, world!" ) ;
29- set_mining_mode ( ChainTypes :: Floonet ) ;
46+
47+ let args = Args :: from_args ( ) ;
48+
3049 let mut cfg = P2PConfig :: default ( ) ;
3150 cfg. host = "0.0.0.0" . parse ( ) . unwrap ( ) ;
3251 cfg. port = 13415 ;
3352
34- let handshake = Arc :: new ( Handshake :: new ( genesis_floo ( ) . hash ( ) , cfg. clone ( ) ) ) ;
53+ let mut peer_addr: PeerAddr ;
54+ let mut handshake: Arc < Handshake > ;
55+
56+ if args. floonet {
57+ set_mining_mode ( ChainTypes :: Floonet ) ;
58+ peer_addr = PeerAddr ( SocketAddr :: new ( "35.157.247.209" . parse ( ) . unwrap ( ) , 13414 ) ) ; // zion
59+ handshake = Arc :: new ( Handshake :: new ( genesis_floo ( ) . hash ( ) , cfg. clone ( ) ) ) ;
60+ } else {
61+ set_mining_mode ( ChainTypes :: Mainnet ) ;
62+ //let peer_addr = PeerAddr(SocketAddr::new("109.74.202.16".parse().unwrap(), 3414)); // mainnet
63+ peer_addr = PeerAddr ( SocketAddr :: new ( "127.0.0.1" . parse ( ) . unwrap ( ) , 3414 ) ) ; // mainnet
64+ handshake = Arc :: new ( Handshake :: new ( genesis_main ( ) . hash ( ) , cfg. clone ( ) ) ) ;
65+ }
3566
3667 let queue = Arc :: new ( SegQueue :: new ( ) ) ;
3768 let hm: HashMap < PeerAddr , Option < Vec < PeerAddr > > > = HashMap :: new ( ) ;
3869 let storage = Arc :: new ( ShardedLock :: new ( hm) ) ;
39- //let peer_addr = PeerAddr(SocketAddr::new("127.0.0.1".parse().unwrap(), 13414));
40- let peer_addr = PeerAddr ( SocketAddr :: new ( "35.157.247.209" . parse ( ) . unwrap ( ) , 13414 ) ) ;
70+
4171 let local_addr = PeerAddr ( SocketAddr :: new ( cfg. host , cfg. port ) ) ;
4272
4373 let mut count = 1 ;
@@ -92,6 +122,7 @@ fn main() {
92122 storage. read( ) . unwrap( ) . len( ) ,
93123 public
94124 ) ;
125+ store ( & * storage. read ( ) . unwrap ( ) ) . unwrap ( ) ;
95126}
96127
97128fn worker (
@@ -164,3 +195,22 @@ fn connect(
164195
165196 adapter. get_peers ( ) . map_err ( |e| format ! ( "{:?}" , e) )
166197}
198+
199+ fn store ( hm : & Storage ) -> Result < ( ) , Error > {
200+ let mut f = File :: create ( "./result.csv" ) ?;
201+ for ( k, v) in hm {
202+ write ! ( f, "{},[" , k) ?;
203+ if v. is_some ( ) {
204+ let peers = v
205+ . as_ref ( )
206+ . unwrap ( )
207+ . into_iter ( )
208+ . map ( |addr| addr. as_key ( ) )
209+ . collect :: < Vec < String > > ( )
210+ . join ( "," ) ;
211+ write ! ( f, "{}" , peers) ?;
212+ }
213+ write ! ( f, "]\n " ) ?;
214+ }
215+ Ok ( ( ) )
216+ }
0 commit comments