code: async def create_account(self, **params):
  		
  		logging.debug("\n\n[+] -- Create account debugging. ")
  		model = {
  		"unique": ["email", "public_key"],
  		"required": ("public_key",),
  		"default": {"count":len(settings.AVAILABLE_COIN_ID), 
  					"level":2, 
  					"news_count":0, 
  					"email":None},
  		"optional": ("phone",)}
  
  		message = json.loads(params.get("message", "{}"))
  	
  		data = {**message.get("message"), "public_key":message["public_key"]}
  
  		# check if all required
  		required = all([True if i in data.keys() else False for i in model["required"]])
  
  		if not required:
  			return {"error": 400,
  					"reason":"Missed required fields"}
  
  		# Unique constraint
  		get_account = await self.collection.find_one({"public_key":data.get("public_key")})
  
  		# Try get account with current public key
  		if get_account:
  			return {"error": 400,
  					"reason": "Unique violation error"}
  
  		# Reload data.
  		row = {i:data[i] for i in data 
  				if i in model["required"] or i in model["optional"]}
  		row.update({i:model["default"][i] for i in model["default"]})
  		if data.get("email"):
  			row["email"] = data.get("email")
  		row.update({"id":await self.autoincrement()})
  		await self.collection.insert_one(row)
  		account = await self.collection.find_one({"public_key":row["public_key"]})
  
  		# Create wallets
  		for coinid in coin_ids:
  			database = client[coinid]
  			wallet_collection = database[settings.WALLET]
  			wallet = await wallet_collection.insert_one({
  					"account_id": account["id"],
  					"wallet": self.account.validator[coinid](account["public_key"]) 
  				})
  		return account
docs: Describes, validates data.