| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  | use bincode::serialize;
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  | use log::*;
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  | use reqwest;
 | 
					
						
							|  |  |  | use reqwest::header::CONTENT_TYPE;
 | 
					
						
							|  |  |  | use serde_json::{json, Value};
 | 
					
						
							| 
									
										
										
										
											2019-03-12 18:27:52 -06:00
										 |  |  | use solana::fullnode::new_fullnode_for_tests;
 | 
					
						
							| 
									
										
										
										
											2019-03-16 22:37:20 -07:00
										 |  |  | use solana_client::rpc_client::get_rpc_request_str;
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  | use solana_sdk::hash::Hash;
 | 
					
						
							| 
									
										
										
										
											2019-03-30 21:37:33 -06:00
										 |  |  | use solana_sdk::pubkey::Pubkey;
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  | use solana_sdk::system_transaction::SystemTransaction;
 | 
					
						
							|  |  |  | use std::fs::remove_dir_all;
 | 
					
						
							|  |  |  | use std::thread::sleep;
 | 
					
						
							|  |  |  | use std::time::Duration;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | fn test_rpc_send_tx() {
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  |     solana_logger::setup();
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 18:27:52 -06:00
										 |  |  |     let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
 | 
					
						
							| 
									
										
										
										
											2019-03-30 21:37:33 -06:00
										 |  |  |     let bob_pubkey = Pubkey::new_rand();
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  |     let client = reqwest::Client::new();
 | 
					
						
							|  |  |  |     let request = json!({
 | 
					
						
							|  |  |  |        "jsonrpc": "2.0",
 | 
					
						
							|  |  |  |        "id": 1,
 | 
					
						
							| 
									
										
										
										
											2019-03-02 10:25:16 -08:00
										 |  |  |        "method": "getRecentBlockhash",
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  |        "params": json!([])
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  |     let rpc_addr = leader_data.rpc;
 | 
					
						
							|  |  |  |     let rpc_string = get_rpc_request_str(rpc_addr, false);
 | 
					
						
							|  |  |  |     let mut response = client
 | 
					
						
							|  |  |  |         .post(&rpc_string)
 | 
					
						
							|  |  |  |         .header(CONTENT_TYPE, "application/json")
 | 
					
						
							|  |  |  |         .body(request.to_string())
 | 
					
						
							|  |  |  |         .send()
 | 
					
						
							|  |  |  |         .unwrap();
 | 
					
						
							|  |  |  |     let json: Value = serde_json::from_str(&response.text().unwrap()).unwrap();
 | 
					
						
							| 
									
										
										
										
											2019-03-02 10:25:16 -08:00
										 |  |  |     let blockhash_vec = bs58::decode(json["result"].as_str().unwrap())
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  |         .into_vec()
 | 
					
						
							|  |  |  |         .unwrap();
 | 
					
						
							| 
									
										
										
										
											2019-03-02 10:25:16 -08:00
										 |  |  |     let blockhash = Hash::new(&blockhash_vec);
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-02 10:25:16 -08:00
										 |  |  |     info!("blockhash: {:?}", blockhash);
 | 
					
						
							| 
									
										
										
										
											2019-03-09 19:28:43 -08:00
										 |  |  |     let tx = SystemTransaction::new_move(&alice, &bob_pubkey, 20, blockhash, 0);
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  |     let serial_tx = serialize(&tx).unwrap();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let client = reqwest::Client::new();
 | 
					
						
							|  |  |  |     let request = json!({
 | 
					
						
							|  |  |  |        "jsonrpc": "2.0",
 | 
					
						
							|  |  |  |        "id": 1,
 | 
					
						
							|  |  |  |        "method": "sendTransaction",
 | 
					
						
							|  |  |  |        "params": json!([serial_tx])
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  |     let rpc_addr = leader_data.rpc;
 | 
					
						
							|  |  |  |     let rpc_string = get_rpc_request_str(rpc_addr, false);
 | 
					
						
							|  |  |  |     let mut response = client
 | 
					
						
							|  |  |  |         .post(&rpc_string)
 | 
					
						
							|  |  |  |         .header(CONTENT_TYPE, "application/json")
 | 
					
						
							|  |  |  |         .body(request.to_string())
 | 
					
						
							|  |  |  |         .send()
 | 
					
						
							|  |  |  |         .unwrap();
 | 
					
						
							|  |  |  |     let json: Value = serde_json::from_str(&response.text().unwrap()).unwrap();
 | 
					
						
							|  |  |  |     let signature = &json["result"];
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let mut confirmed_tx = false;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let client = reqwest::Client::new();
 | 
					
						
							|  |  |  |     let request = json!({
 | 
					
						
							|  |  |  |        "jsonrpc": "2.0",
 | 
					
						
							|  |  |  |        "id": 1,
 | 
					
						
							|  |  |  |        "method": "confirmTransaction",
 | 
					
						
							|  |  |  |        "params": [signature],
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-27 09:58:03 -08:00
										 |  |  |     for _ in 0..solana_sdk::timing::DEFAULT_TICKS_PER_SLOT {
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  |         let mut response = client
 | 
					
						
							|  |  |  |             .post(&rpc_string)
 | 
					
						
							|  |  |  |             .header(CONTENT_TYPE, "application/json")
 | 
					
						
							|  |  |  |             .body(request.to_string())
 | 
					
						
							|  |  |  |             .send()
 | 
					
						
							|  |  |  |             .unwrap();
 | 
					
						
							|  |  |  |         let response_json_text = response.text().unwrap();
 | 
					
						
							|  |  |  |         let json: Value = serde_json::from_str(&response_json_text).unwrap();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if true == json["result"] {
 | 
					
						
							|  |  |  |             confirmed_tx = true;
 | 
					
						
							|  |  |  |             break;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-29 17:03:32 -08:00
										 |  |  |         sleep(Duration::from_millis(500));
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert_eq!(confirmed_tx, true);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-03 16:44:06 -08:00
										 |  |  |     server.close().unwrap();
 | 
					
						
							| 
									
										
										
										
											2019-01-21 10:48:40 -08:00
										 |  |  |     remove_dir_all(ledger_path).unwrap();
 | 
					
						
							|  |  |  | }
 |