Accounts with state (#954)
* Account type with state * fixed test according to @rob-solana
This commit is contained in:
committed by
GitHub
parent
db35f220f7
commit
c23fa289c3
@@ -3,6 +3,7 @@
|
||||
//! messages to the network directly. The binary encoding of its messages are
|
||||
//! unstable and may change in future releases.
|
||||
|
||||
use bank::Account;
|
||||
use bincode::{deserialize, serialize};
|
||||
use hash::Hash;
|
||||
use request::{Request, Response};
|
||||
@@ -27,7 +28,7 @@ pub struct ThinClient {
|
||||
transactions_socket: UdpSocket,
|
||||
last_id: Option<Hash>,
|
||||
transaction_count: u64,
|
||||
balances: HashMap<Pubkey, i64>,
|
||||
balances: HashMap<Pubkey, Account>,
|
||||
signature_status: bool,
|
||||
finality: Option<usize>,
|
||||
}
|
||||
@@ -65,9 +66,15 @@ impl ThinClient {
|
||||
|
||||
pub fn process_response(&mut self, resp: &Response) {
|
||||
match *resp {
|
||||
Response::Balance { key, val } => {
|
||||
trace!("Response balance {:?} {:?}", key, val);
|
||||
self.balances.insert(key, val);
|
||||
Response::Account {
|
||||
key,
|
||||
account: Some(ref account),
|
||||
} => {
|
||||
trace!("Response account {:?} {:?}", key, account);
|
||||
self.balances.insert(key, account.clone());
|
||||
}
|
||||
Response::Account { key, account: None } => {
|
||||
debug!("Response account {}: None ", key);
|
||||
}
|
||||
Response::LastId { id } => {
|
||||
trace!("Response last_id {:?}", id);
|
||||
@@ -129,8 +136,8 @@ impl ThinClient {
|
||||
/// by the network, this method will hang indefinitely.
|
||||
pub fn get_balance(&mut self, pubkey: &Pubkey) -> io::Result<i64> {
|
||||
trace!("get_balance");
|
||||
let req = Request::GetBalance { key: *pubkey };
|
||||
let data = serialize(&req).expect("serialize GetBalance in pub fn get_balance");
|
||||
let req = Request::GetAccount { key: *pubkey };
|
||||
let data = serialize(&req).expect("serialize GetAccount in pub fn get_balance");
|
||||
self.requests_socket
|
||||
.send_to(&data, &self.requests_addr)
|
||||
.expect("buffer error in pub fn get_balance");
|
||||
@@ -138,14 +145,14 @@ impl ThinClient {
|
||||
while !done {
|
||||
let resp = self.recv_response()?;
|
||||
trace!("recv_response {:?}", resp);
|
||||
if let Response::Balance { key, .. } = &resp {
|
||||
if let Response::Account { key, .. } = &resp {
|
||||
done = key == pubkey;
|
||||
}
|
||||
self.process_response(&resp);
|
||||
}
|
||||
self.balances
|
||||
.get(pubkey)
|
||||
.cloned()
|
||||
.map(|a| a.tokens)
|
||||
.ok_or_else(|| io::Error::new(io::ErrorKind::Other, "nokey"))
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user