# 7.2 Non-custodial Key Management

As part of our goal of financial inclusion and enablement of abundance through blockchain technology, there has typically been a technology gap which has excluded those who are not technically proficient or well versed enough in the use and management of private keys. As a result, we created a hybrid non-custodial key management solution to enable users to access their accounts and wallets with only a username and password, while still allowing for traditional account recovery via a forgot or reset password flow.

***

### **Accounts**

The account creating process is simple, the user either locally generates a wallet or connects their own Celo-compatible browser extension wallet such as Metamask or Portis. The user then chooses a third-party to play the role of Guardian in the event of account recovery.

Network accounts consists of a 2 of 3 multi-signature wallet

**Network Cosigner**

* Responsible for confirming *relayed* transactions
* Operated by the network

**Client Wallet**

* Can be self-custodied or keys stored via an encrypted keystore.
* Operated and only accessible by the owner of the wallet.
* Used to add new transactions to the multisig to be cosigned by the network operator.

**Guardian Wallet**

* Operated by third party custodial service
* Responsible for recovery if a member loses control or access of their client wallet
* Incentivized by network to offer guardian service to custody partial keys on behalf of the user

### **Transactions**

Signing transactions are also simple, the user signs a transaction with their client wallet keys and asks the Network Cosigner to the *cosign* and confirm the transaction.

### **Recovery**

\*\* \*\*If a user loses access to their client wallet, they will generate or connect a new wallet.

After it’s generated, the user sends a request to their Guardian to call the **`replaceOwner`** function in order to swap the old client wallet address with a newly generated client wallet. Afterwards, the guardian asks the Cosigner to confirm the **`replaceOwner`** transaction.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://resource-network.gitbook.io/resource-technical/07-technology/7.2-non-custodial-key-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
