register operator
This commit is contained in:
		
							parent
							
								
									5c74962ac6
								
							
						
					
					
						commit
						4295b3ae1d
					
				| @ -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,10 @@ 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")] | ||||||
|  |     InsufficientFunds, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub mod prelude { | pub mod prelude { | ||||||
|  | |||||||
| @ -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