2021-10-21 11:55:27 +00:00
|
|
|
use web3::contract::{Contract, Options};
|
|
|
|
|
|
|
|
use crate::config::Config;
|
|
|
|
use super::api::connect;
|
2021-10-21 16:51:01 +00:00
|
|
|
use super::contracts::{MANAGER, load_abi};
|
|
|
|
use super::errors::EthereumError;
|
2021-10-21 11:55:27 +00:00
|
|
|
use super::utils::parse_address;
|
|
|
|
|
|
|
|
pub async fn is_allowed_user(
|
|
|
|
config: &Config,
|
|
|
|
user_address: &str,
|
|
|
|
) -> Result<bool, EthereumError> {
|
2021-11-06 12:48:52 +00:00
|
|
|
let contract_dir = config.ethereum_contract_dir.as_ref()
|
|
|
|
.ok_or(EthereumError::ImproperlyConfigured)?;
|
2021-10-21 11:55:27 +00:00
|
|
|
let json_rpc_url = config.ethereum_json_rpc_url.as_ref()
|
|
|
|
.ok_or(EthereumError::ImproperlyConfigured)?;
|
|
|
|
let web3 = connect(json_rpc_url)?;
|
|
|
|
let ethereum_config = config.ethereum_contract.as_ref()
|
|
|
|
.ok_or(EthereumError::ImproperlyConfigured)?;
|
|
|
|
|
2021-11-05 23:41:30 +00:00
|
|
|
let manager_abi = load_abi(contract_dir, MANAGER)?;
|
2021-10-21 11:55:27 +00:00
|
|
|
let manager_address = parse_address(ðereum_config.address)?;
|
|
|
|
let manager = Contract::from_json(
|
|
|
|
web3.eth(),
|
|
|
|
manager_address,
|
|
|
|
&manager_abi,
|
|
|
|
)?;
|
|
|
|
let user_address = parse_address(user_address)?;
|
|
|
|
let result: bool = manager.query(
|
|
|
|
"isAllowedUser", (user_address,),
|
|
|
|
None, Options::default(), None,
|
|
|
|
).await?;
|
|
|
|
Ok(result)
|
|
|
|
}
|