register operator
This commit is contained in:
parent
198f43f472
commit
d1e5244a18
@ -42,3 +42,6 @@ pub const ID_ALPHABET: [char; 62] = [
|
|||||||
'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
|
'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
|
||||||
'V', 'W', 'X', 'Y', 'Z',
|
'V', 'W', 'X', 'Y', 'Z',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
pub const MIN_ESCROW: u64 = 5000;
|
||||||
|
pub const TOKEN_DECIMAL: u64 = 1_000_000_000;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::constants::ACCOUNT;
|
use crate::constants::{ACCOUNT, MIN_ESCROW, TOKEN_DECIMAL};
|
||||||
use crate::db::prelude::*;
|
use crate::db::prelude::*;
|
||||||
|
|
||||||
use super::Error;
|
use super::Error;
|
||||||
@ -49,6 +49,33 @@ impl Account {
|
|||||||
.await?;
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn save(self, db: &Surreal<Client>) -> Result<Option<Self>, Error> {
|
||||||
|
let account: Option<Self> = db.upsert(self.id.clone()).content(self).await?;
|
||||||
|
Ok(account)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn operator_reg(
|
||||||
|
db: &Surreal<Client>,
|
||||||
|
wallet: &str,
|
||||||
|
email: &str,
|
||||||
|
escrow: u64,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
if escrow < MIN_ESCROW {
|
||||||
|
return Err(Error::MinimalEscrow);
|
||||||
|
}
|
||||||
|
let mut op_account = Self::get(db, wallet).await?;
|
||||||
|
let escrow = escrow.saturating_mul(TOKEN_DECIMAL);
|
||||||
|
let op_total_balance = op_account.balance.saturating_add(op_account.escrow);
|
||||||
|
if op_total_balance < escrow {
|
||||||
|
return Err(Error::InsufficientFunds);
|
||||||
|
}
|
||||||
|
op_account.email = email.to_string();
|
||||||
|
op_account.balance = op_total_balance.saturating_sub(escrow);
|
||||||
|
op_account.escrow = escrow;
|
||||||
|
op_account.save(db).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Account {
|
impl Account {
|
||||||
|
@ -2,7 +2,9 @@ pub mod app;
|
|||||||
pub mod general;
|
pub mod general;
|
||||||
pub mod vm;
|
pub mod vm;
|
||||||
|
|
||||||
use crate::constants::{APP_NODE, DELETED_APP, DELETED_VM, NEW_APP_REQ, NEW_VM_REQ, UPDATE_VM_REQ};
|
use crate::constants::{
|
||||||
|
APP_NODE, DELETED_APP, DELETED_VM, MIN_ESCROW, NEW_APP_REQ, NEW_VM_REQ, UPDATE_VM_REQ,
|
||||||
|
};
|
||||||
use crate::old_brain;
|
use crate::old_brain;
|
||||||
use prelude::*;
|
use prelude::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@ -30,6 +32,8 @@ pub enum Error {
|
|||||||
AppDaemonConnection(#[from] tokio::sync::mpsc::error::SendError<AppDaemonMsg>),
|
AppDaemonConnection(#[from] tokio::sync::mpsc::error::SendError<AppDaemonMsg>),
|
||||||
#[error("AppDaemon Error {0}")]
|
#[error("AppDaemon Error {0}")]
|
||||||
NewAppDaemonResp(String),
|
NewAppDaemonResp(String),
|
||||||
|
#[error("Minimum escrow amount is {MIN_ESCROW}")]
|
||||||
|
MinimalEscrow,
|
||||||
#[error("Insufficient funds, deposit more tokens")]
|
#[error("Insufficient funds, deposit more tokens")]
|
||||||
InsufficientFunds,
|
InsufficientFunds,
|
||||||
}
|
}
|
||||||
|
@ -107,15 +107,22 @@ impl BrainGeneralCli for GeneralCliServer {
|
|||||||
|
|
||||||
async fn register_operator(
|
async fn register_operator(
|
||||||
&self,
|
&self,
|
||||||
_req: Request<RegOperatorReq>,
|
req: Request<RegOperatorReq>,
|
||||||
) -> Result<Response<Empty>, Status> {
|
) -> Result<Response<Empty>, Status> {
|
||||||
todo!();
|
let req = check_sig_from_req(req)?;
|
||||||
// let req = check_sig_from_req(req)?;
|
log::info!("Regitering new operator: {req:?}");
|
||||||
// info!("Regitering new operator: {req:?}");
|
match db::Account::operator_reg(&self.db, &req.pubkey, &req.email, req.escrow).await {
|
||||||
// match self.data.register_operator(req) {
|
Ok(()) => Ok(Response::new(Empty {})),
|
||||||
// Ok(()) => Ok(Response::new(Empty {})),
|
Err(e) if matches!(e, db::Error::InsufficientFunds | db::Error::MinimalEscrow) => {
|
||||||
// Err(e) => Err(Status::failed_precondition(e.to_string())),
|
Err(Status::failed_precondition(e.to_string()))
|
||||||
// }
|
}
|
||||||
|
Err(e) => {
|
||||||
|
log::info!("Failed to register operator: {e:?}");
|
||||||
|
Err(Status::unknown(
|
||||||
|
"Unknown error. Please try again or contact the DeTEE devs team.",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn kick_contract(&self, _req: Request<KickReq>) -> Result<Response<KickResp>, Status> {
|
async fn kick_contract(&self, _req: Request<KickReq>) -> Result<Response<KickResp>, Status> {
|
||||||
|
Loading…
Reference in New Issue
Block a user