Update request_airdrop utility function to pass along airdrop tx signature
This commit is contained in:
committed by
Greg Fitzgerald
parent
77d820c842
commit
513a934ff6
@ -1,15 +1,18 @@
|
|||||||
use bincode::serialize;
|
use bincode::{deserialize, serialize};
|
||||||
use drone::DroneRequest;
|
use drone::DroneRequest;
|
||||||
use signature::Pubkey;
|
use signature::{Pubkey, Signature};
|
||||||
use std::error;
|
use std::error;
|
||||||
use std::io::Write;
|
use std::io::prelude::*;
|
||||||
|
use std::io::{Error, ErrorKind, Write};
|
||||||
|
use std::mem::size_of;
|
||||||
use std::net::{SocketAddr, TcpStream};
|
use std::net::{SocketAddr, TcpStream};
|
||||||
|
|
||||||
pub fn request_airdrop(
|
pub fn request_airdrop(
|
||||||
drone_addr: &SocketAddr,
|
drone_addr: &SocketAddr,
|
||||||
id: &Pubkey,
|
id: &Pubkey,
|
||||||
tokens: u64,
|
tokens: u64,
|
||||||
) -> Result<(), Box<error::Error>> {
|
) -> Result<Signature, Box<error::Error>> {
|
||||||
|
// TODO: make this async tokio client
|
||||||
let mut stream = TcpStream::connect(drone_addr)?;
|
let mut stream = TcpStream::connect(drone_addr)?;
|
||||||
let req = DroneRequest::GetAirdrop {
|
let req = DroneRequest::GetAirdrop {
|
||||||
airdrop_request_amount: tokens,
|
airdrop_request_amount: tokens,
|
||||||
@ -17,6 +20,16 @@ pub fn request_airdrop(
|
|||||||
};
|
};
|
||||||
let tx = serialize(&req).expect("serialize drone request");
|
let tx = serialize(&req).expect("serialize drone request");
|
||||||
stream.write_all(&tx).unwrap();
|
stream.write_all(&tx).unwrap();
|
||||||
|
let mut buffer = [0; size_of::<Signature>()];
|
||||||
|
stream
|
||||||
|
.read_exact(&mut buffer)
|
||||||
|
.or_else(|_| Err(Error::new(ErrorKind::Other, "Airdrop failed")))?;
|
||||||
|
let signature: Signature = deserialize(&buffer).or_else(|err| {
|
||||||
|
Err(Error::new(
|
||||||
|
ErrorKind::Other,
|
||||||
|
format!("deserialize signature in request_airdrop: {:?}", err),
|
||||||
|
))
|
||||||
|
})?;
|
||||||
// TODO: add timeout to this function, in case of unresponsive drone
|
// TODO: add timeout to this function, in case of unresponsive drone
|
||||||
Ok(())
|
Ok(signature)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user