mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
service/sol: change the return type to SolResult in internal functions
This commit is contained in:
@@ -86,7 +86,7 @@ impl SolClient {
|
||||
self: Arc<Self>,
|
||||
keypair: Keypair,
|
||||
mint: Option<Pubkey>,
|
||||
) -> Result<()> {
|
||||
) -> SolResult<()> {
|
||||
debug!(target: "SOL BRIDGE", "handle_subscribe_request()");
|
||||
|
||||
// Derive token pubkey if mint was provided.
|
||||
@@ -157,7 +157,7 @@ impl SolClient {
|
||||
JsonResult::Err(e) => {
|
||||
debug!(target: "SOLANA RPC", "<-- {}", serde_json::to_string(&e)?);
|
||||
// TODO: Try removing pubkey from subscriptions here?
|
||||
return Err(Error::JsonRpcError(e.error.message.to_string()));
|
||||
return Err(SolFailed::RpcError(e.error.message.to_string()));
|
||||
}
|
||||
JsonResult::Notif(n) => {
|
||||
// Account updated
|
||||
@@ -168,7 +168,8 @@ impl SolClient {
|
||||
cur_balance = params["data"]["parsed"]["info"]["tokenAmount"]["amount"]
|
||||
.as_str()
|
||||
.unwrap()
|
||||
.parse()?;
|
||||
.parse()
|
||||
.map_err(|e| SolFailed::from(Error::from(e)))?;
|
||||
} else {
|
||||
cur_balance = params["lamports"].as_u64().unwrap();
|
||||
}
|
||||
@@ -196,8 +197,8 @@ impl SolClient {
|
||||
|
||||
if cur_balance < prev_balance {
|
||||
error!("New balance is less than previous balance");
|
||||
return Err(Error::ServicesError(
|
||||
"New balance is less than previous balance",
|
||||
return Err(SolFailed::Notification(
|
||||
"New balance is less than previous balance".into(),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -223,12 +224,12 @@ impl SolClient {
|
||||
amount: u64,
|
||||
decimals: u64,
|
||||
keypair: &Keypair,
|
||||
) -> Result<Signature> {
|
||||
) -> SolResult<Signature> {
|
||||
debug!(target: "SOL BRIDGE", "Sending {} {:?} tokens to main wallet",
|
||||
amount / u64::pow(10, decimals as u32), mint);
|
||||
|
||||
if !account_is_initialized_mint(rpc, mint) {
|
||||
return Err(Error::ServicesError("Given mint is not valid"));
|
||||
return Err(SolFailed::MintIsNotValid(mint.to_string()));
|
||||
}
|
||||
|
||||
// The token account from our main wallet
|
||||
@@ -244,7 +245,11 @@ impl SolClient {
|
||||
// It's valid token data, and we consider account initialized.
|
||||
Ok(_) => {}
|
||||
// Some other unexpected data.
|
||||
Err(_) => return Err(Error::ServicesError("Invalid data on derived account")),
|
||||
Err(_) => {
|
||||
return Err(SolFailed::SolClientError(
|
||||
"Invalid data on derived account".into(),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(_) => {
|
||||
@@ -269,8 +274,7 @@ impl SolClient {
|
||||
&[],
|
||||
amount,
|
||||
decimals as u8,
|
||||
)
|
||||
.unwrap();
|
||||
)?;
|
||||
|
||||
instructions.push(transfer_ix);
|
||||
|
||||
@@ -288,7 +292,7 @@ impl SolClient {
|
||||
rpc: &RpcClient,
|
||||
amount: u64,
|
||||
keypair: &Keypair,
|
||||
) -> Result<Signature> {
|
||||
) -> SolResult<Signature> {
|
||||
debug!(target: "SOL BRIDGE", "Sending {} SOL to main wallet", lamports_to_sol(amount));
|
||||
|
||||
let ix = system_instruction::transfer(&keypair.pubkey(), &self.keypair.pubkey(), amount);
|
||||
@@ -387,16 +391,16 @@ pub fn sign_and_send_transaction(
|
||||
rpc: &RpcClient,
|
||||
mut tx: Transaction,
|
||||
signers: Vec<&Keypair>,
|
||||
) -> Result<Signature> {
|
||||
) -> SolResult<Signature> {
|
||||
let bhq = BlockhashQuery::default();
|
||||
match bhq.get_blockhash_and_fee_calculator(rpc, rpc.commitment()) {
|
||||
Err(_) => return Err(Error::ServicesError("Couldn't connect to RPC")),
|
||||
Err(_) => return Err(SolFailed::RpcError("Couldn't connect to RPC".into())),
|
||||
Ok(v) => tx.sign(&signers, v.0),
|
||||
}
|
||||
|
||||
match rpc.send_and_confirm_transaction(&tx) {
|
||||
Ok(s) => Ok(s),
|
||||
Err(_) => Err(Error::ServicesError("Failed to send transaction")),
|
||||
Err(_) => Err(SolFailed::RpcError("Failed to send transaction".into())),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -446,7 +450,12 @@ pub enum SolFailed {
|
||||
BadSolAddress(String),
|
||||
DecodeAndEncodeError(String),
|
||||
WebSocketError(String),
|
||||
RpcError(String),
|
||||
SolClientError(String),
|
||||
Notification(String),
|
||||
ProgramError(String),
|
||||
MintIsNotValid(String),
|
||||
JsonError(String),
|
||||
ParseError(String),
|
||||
SolError(String),
|
||||
}
|
||||
@@ -468,12 +477,27 @@ impl std::fmt::Display for SolFailed {
|
||||
SolFailed::WebSocketError(i) => {
|
||||
write!(f, "WebSocket Error: {}", i)
|
||||
}
|
||||
SolFailed::RpcError(i) => {
|
||||
write!(f, "Rpc Error: {}", i)
|
||||
}
|
||||
SolFailed::ParseError(i) => {
|
||||
write!(f, "Parse Error: {}", i)
|
||||
}
|
||||
SolFailed::SolClientError(i) => {
|
||||
write!(f, "Solana Client Error: {}", i)
|
||||
}
|
||||
SolFailed::Notification(i) => {
|
||||
write!(f, "Received Notification Error: {}", i)
|
||||
}
|
||||
SolFailed::ProgramError(i) => {
|
||||
write!(f, "ProgramError Error: {}", i)
|
||||
}
|
||||
SolFailed::MintIsNotValid(i) => {
|
||||
write!(f, "Given mint is not valid: {}", i)
|
||||
}
|
||||
SolFailed::JsonError(i) => {
|
||||
write!(f, "JsonError: {}", i)
|
||||
}
|
||||
SolFailed::SolError(i) => {
|
||||
write!(f, "SolFailed: {}", i)
|
||||
}
|
||||
@@ -501,7 +525,7 @@ impl From<solana_client::client_error::ClientError> for SolFailed {
|
||||
|
||||
impl From<solana_sdk::program_error::ProgramError> for SolFailed {
|
||||
fn from(err: solana_sdk::program_error::ProgramError) -> SolFailed {
|
||||
SolFailed::SolError(err.to_string())
|
||||
SolFailed::ProgramError(err.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -510,5 +534,10 @@ impl From<crate::error::Error> for SolFailed {
|
||||
SolFailed::SolError(err.to_string())
|
||||
}
|
||||
}
|
||||
impl From<serde_json::Error> for SolFailed {
|
||||
fn from(err: serde_json::Error) -> SolFailed {
|
||||
SolFailed::JsonError(err.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
pub type SolResult<T> = std::result::Result<T, SolFailed>;
|
||||
|
||||
Reference in New Issue
Block a user