fadff7888b
* Save gateway owner for later use in erc20 bandwidth request * Pass owner in network monitor * Switch to variable length owner address * Add erc20 bridge contract in validator client * Check bandwidth credential refers to gateway * Check the owner of the gateway from the eth event * Fix wasm client * Hack to avoid unused warning on coconut path * Hacked, one-time payment * Remove print * Update arg format * Fix token check * Fix native template * Use utokens instead of full token ... when talking to eth * Fix parse event for new field * Fix socks5 template * Add estimation of gas call * Make fs backup more reliable * Fix clippy * Fix unused import * Update waiting time * Remove defaults from run, as it they should be set on init * Remove debugging prints * Replaced unwrap with error * Fix build * Make eth contract address dependent of network * Use tokio for sleep * Add approve before spending token on bandwidth * Put bandwidth claim only at the beginning of the process
105 lines
3.1 KiB
Rust
105 lines
3.1 KiB
Rust
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
use gateway_requests::registration::handshake::error::HandshakeError;
|
|
use std::io;
|
|
use thiserror::Error;
|
|
use tungstenite::Error as WsError;
|
|
#[cfg(target_arch = "wasm32")]
|
|
use wasm_bindgen::JsValue;
|
|
#[cfg(not(feature = "coconut"))]
|
|
use web3::{contract::Error as Web3ContractError, Error as Web3Error};
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum GatewayClientError {
|
|
#[error("Connection to the gateway is not established")]
|
|
ConnectionNotEstablished,
|
|
|
|
#[error("Gateway returned an error response - {0}")]
|
|
GatewayError(String),
|
|
|
|
#[error("There was a network error - {0}")]
|
|
NetworkError(#[from] WsError),
|
|
|
|
// TODO: see if `JsValue` is a reasonable type for this
|
|
#[cfg(target_arch = "wasm32")]
|
|
#[error("There was a network error")]
|
|
NetworkErrorWasm(JsValue),
|
|
|
|
#[cfg(not(feature = "coconut"))]
|
|
#[error("Keypair IO error - {0}")]
|
|
IOError(#[from] std::io::Error),
|
|
|
|
#[cfg(not(feature = "coconut"))]
|
|
#[error("Could not burn ERC20 token in Ethereum smart contract - {0}")]
|
|
BurnTokenError(#[from] Web3Error),
|
|
|
|
#[cfg(not(feature = "coconut"))]
|
|
#[error("Could not run web3 contract - {0}")]
|
|
Web3ContractError(#[from] Web3ContractError),
|
|
|
|
#[cfg(not(feature = "coconut"))]
|
|
#[error("Invalid Ethereum private key")]
|
|
InvalidEthereumPrivateKey,
|
|
|
|
#[error("Invalid URL - {0}")]
|
|
InvalidURL(String),
|
|
|
|
#[error("No shared key was provided or obtained")]
|
|
NoSharedKeyAvailable,
|
|
|
|
#[error("No bandwidth controller provided")]
|
|
NoBandwidthControllerAvailable,
|
|
|
|
#[error("Credential error - {0}")]
|
|
CredentialError(#[from] credentials::error::Error),
|
|
|
|
#[error("Connection was abruptly closed")]
|
|
ConnectionAbruptlyClosed,
|
|
|
|
#[error("Received response was malformed")]
|
|
MalformedResponse,
|
|
|
|
#[error("Credential could not be serialized")]
|
|
SerializeCredential,
|
|
|
|
#[error("Client is not authenticated")]
|
|
NotAuthenticated,
|
|
|
|
#[error("Client does not have enough bandwidth: estimated {0}, remaining: {1}")]
|
|
NotEnoughBandwidth(i64, i64),
|
|
|
|
#[error("Received an unexpected response")]
|
|
UnexpectedResponse,
|
|
|
|
#[error("Connection is in an invalid state - please send a bug report")]
|
|
ConnectionInInvalidState,
|
|
|
|
#[error("Failed to finish registration handshake - {0}")]
|
|
RegistrationFailure(HandshakeError),
|
|
|
|
#[error("Authentication failure")]
|
|
AuthenticationFailure,
|
|
|
|
#[error("Timed out")]
|
|
Timeout,
|
|
}
|
|
|
|
impl GatewayClientError {
|
|
pub fn is_closed_connection(&self) -> bool {
|
|
match self {
|
|
GatewayClientError::NetworkError(ws_err) => match ws_err {
|
|
WsError::AlreadyClosed | WsError::ConnectionClosed => true,
|
|
WsError::Io(io_err) => matches!(
|
|
io_err.kind(),
|
|
io::ErrorKind::ConnectionReset
|
|
| io::ErrorKind::ConnectionAborted
|
|
| io::ErrorKind::BrokenPipe
|
|
),
|
|
_ => false,
|
|
},
|
|
_ => false,
|
|
}
|
|
}
|
|
}
|