> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therootnetwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recovery

## Calls

### asRecovered

Send a call through a recovered account.

The dispatch origin for this call must be *Signed* and registered to be able to make calls on behalf of the recovered account.

Parameters:

* `account`: The recovered account you want to make a call on-behalf-of.

* `call`: The call you want to make with the recovered account.

**Namespace**

```
api.tx.recovery.asRecovered
```

**Type**

```
function asRecovered(
  account: SeedPrimitivesSignatureAccountId20,
  call: Call
)
```

### cancelRecovered

Cancel the ability to use `as_recovered` for `account`.

The dispatch origin for this call must be *Signed* and registered to be able to make calls on behalf of the recovered account.

Parameters:

* `account`: The recovered account you are able to call on-behalf-of.

**Namespace**

```
api.tx.recovery.cancelRecovered
```

**Type**

```
function cancelRecovered(
  account: SeedPrimitivesSignatureAccountId20
)
```

### claimRecovery

Allow a successful rescuer to claim their recovered account.

The dispatch origin for this call must be *Signed* and must be a "rescuer" who has successfully completed the account recovery process: collected `threshold` or more vouches, waited `delay_period` blocks since initiation.

Parameters:

* `account`: The lost account that you want to claim has been successfully recovered by you.

**Namespace**

```
api.tx.recovery.claimRecovery
```

**Type**

```
function claimRecovery(
  account: SeedPrimitivesSignatureAccountId20
)
```

### closeRecovery

As the controller of a recoverable account, close an active recovery process for your account.

Payment: By calling this function, the recoverable account will receive the recovery deposit `RecoveryDeposit` placed by the rescuer.

The dispatch origin for this call must be *Signed* and must be a recoverable account with an active recovery process for it.

Parameters:

* `rescuer`: The account trying to rescue this recoverable account.

**Namespace**

```
api.tx.recovery.closeRecovery
```

**Type**

```
function closeRecovery(
  rescuer: SeedPrimitivesSignatureAccountId20
)
```

### createRecovery

Create a recovery configuration for your account. This makes your account recoverable.

Payment: `ConfigDepositBase` + `FriendDepositFactor` \* #\_of\_friends balance will be reserved for storing the recovery configuration. This deposit is returned in full when the user calls `remove_recovery`.

The dispatch origin for this call must be *Signed*.

Parameters:

* `friends`: A list of friends you trust to vouch for recovery attempts. Should be ordered and contain no duplicate values.

* `threshold`: The number of friends that must vouch for a recovery attempt before the account can be recovered. Should be less than or equal to the length of the list of friends.

* `delay_period`: The number of blocks after a recovery attempt is initialized that needs to pass before the account can be recovered.

**Namespace**

```
api.tx.recovery.createRecovery
```

**Type**

```
function createRecovery(
  friends: Vec<SeedPrimitivesSignatureAccountId20>,
  threshold: u16,
  delay_period: u32
)
```

### initiateRecovery

Initiate the process for recovering a recoverable account.

Payment: `RecoveryDeposit` balance will be reserved for initiating the recovery process. This deposit will always be repatriated to the account trying to be recovered. See `close_recovery`.

The dispatch origin for this call must be *Signed*.

Parameters:

* `account`: The lost account that you want to recover. This account needs to be recoverable (i.e. have a recovery configuration).

**Namespace**

```
api.tx.recovery.initiateRecovery
```

**Type**

```
function initiateRecovery(
  account: SeedPrimitivesSignatureAccountId20
)
```

### removeRecovery

Remove the recovery process for your account. Recovered accounts are still accessible.

<Info>
  **Note**: The user must make sure to call `close_recovery` on all active recovery attempts before calling this function else it will fail.
</Info>

Payment: By calling this function the recoverable account will unreserve their recovery configuration deposit. (`ConfigDepositBase` + `FriendDepositFactor` \* #\_of\_friends)

The dispatch origin for this call must be *Signed* and must be a recoverable account (i.e. has a recovery configuration).

**Namespace**

```
api.tx.recovery.removeRecovery
```

**Type**

```
function removeRecovery(

)
```

### setRecovered

Allow ROOT to bypass the recovery process and set an a rescuer account for a lost account directly.

The dispatch origin for this call must be *ROOT*.

Parameters:

* `lost`: The "lost account" to be recovered.

* `rescuer`: The "rescuer account" which can call as the lost account.

**Namespace**

```
api.tx.recovery.setRecovered
```

**Type**

```
function setRecovered(
  lost: SeedPrimitivesSignatureAccountId20,
  rescuer: SeedPrimitivesSignatureAccountId20
)
```

### vouchRecovery

Allow a "friend" of a recoverable account to vouch for an active recovery process for that account.

The dispatch origin for this call must be *Signed* and must be a "friend" for the recoverable account.

Parameters:

* `lost`: The lost account that you want to recover.

* `rescuer`: The account trying to rescue the lost account that you want to vouch for.

The combination of these two parameters must point to an active recovery process.

**Namespace**

```
api.tx.recovery.vouchRecovery
```

**Type**

```
function vouchRecovery(
  lost: SeedPrimitivesSignatureAccountId20,
  rescuer: SeedPrimitivesSignatureAccountId20
)
```

## Storage

### activeRecoveries

Active recovery attempts.

First account is the account to be recovered, and the second account is the user trying to recover the account.

**Namespace**

```
api.query.recovery.activeRecoveries
```

**Type**

```
function activeRecoveries(
  SeedPrimitivesSignatureAccountId20,
  SeedPrimitivesSignatureAccountId20
): Option<PalletRecoveryActiveRecovery>
```

### proxy

The list of allowed proxy accounts.

Map from the user who can access it to the recovered account.

**Namespace**

```
api.query.recovery.proxy
```

**Type**

```
function proxy(
  SeedPrimitivesSignatureAccountId20
): Option<SeedPrimitivesSignatureAccountId20>
```

### recoverable

The set of recoverable accounts and their recovery configuration.

**Namespace**

```
api.query.recovery.recoverable
```

**Type**

```
function recoverable(
  SeedPrimitivesSignatureAccountId20
): Option<PalletRecoveryRecoveryConfig>
```

## Events

### AccountRecovered

Lost account has been successfully recovered by the rescuer account.

**Namespace**

```
api.events.recovery.AccountRecovered
```

**Type**

```
type AccountRecovered = {
  lost_account: SeedPrimitivesSignatureAccountId20,
  rescuer_account: SeedPrimitivesSignatureAccountId20
}
```

### RecoveryClosed

A recovery process for lost account by rescuer account has been closed.

**Namespace**

```
api.events.recovery.RecoveryClosed
```

**Type**

```
type RecoveryClosed = {
  lost_account: SeedPrimitivesSignatureAccountId20,
  rescuer_account: SeedPrimitivesSignatureAccountId20
}
```

### RecoveryCreated

A recovery process has been set up for an account.

**Namespace**

```
api.events.recovery.RecoveryCreated
```

**Type**

```
type RecoveryCreated = {
  account: SeedPrimitivesSignatureAccountId20
}
```

### RecoveryInitiated

A recovery process has been initiated for lost account by rescuer account.

**Namespace**

```
api.events.recovery.RecoveryInitiated
```

**Type**

```
type RecoveryInitiated = {
  lost_account: SeedPrimitivesSignatureAccountId20,
  rescuer_account: SeedPrimitivesSignatureAccountId20
}
```

### RecoveryRemoved

A recovery process has been removed for an account.

**Namespace**

```
api.events.recovery.RecoveryRemoved
```

**Type**

```
type RecoveryRemoved = {
  lost_account: SeedPrimitivesSignatureAccountId20
}
```

### RecoveryVouched

A recovery process for a lost account by rescuer account has been vouched for by the sender.

**Namespace**

```
api.events.recovery.RecoveryVouched
```

**Type**

```
type RecoveryVouched = {
  lost_account: SeedPrimitivesSignatureAccountId20,
  rescuer_account: SeedPrimitivesSignatureAccountId20,
  sender: SeedPrimitivesSignatureAccountId20
}
```

## Errors

### AlreadyProxy

This account is already set up for recovery

**Namespace**

```
api.errors.recovery.AlreadyProxy
```

### AlreadyRecoverable

This account is already set up for recovery

**Namespace**

```
api.errors.recovery.AlreadyRecoverable
```

### AlreadyStarted

A recovery process has already started for this account

**Namespace**

```
api.errors.recovery.AlreadyStarted
```

### AlreadyVouched

This user has already vouched for this recovery

**Namespace**

```
api.errors.recovery.AlreadyVouched
```

### BadState

Some internal state is broken.

**Namespace**

```
api.errors.recovery.BadState
```

### DelayPeriod

The friend must wait until the delay period to vouch for this recovery

**Namespace**

```
api.errors.recovery.DelayPeriod
```

### MaxFriends

Friends list must be less than max friends

**Namespace**

```
api.errors.recovery.MaxFriends
```

### NotAllowed

User is not allowed to make a call on behalf of this account

**Namespace**

```
api.errors.recovery.NotAllowed
```

### NotEnoughFriends

Friends list must be greater than zero and threshold

**Namespace**

```
api.errors.recovery.NotEnoughFriends
```

### NotFriend

This account is not a friend who can vouch

**Namespace**

```
api.errors.recovery.NotFriend
```

### NotRecoverable

This account is not set up for recovery

**Namespace**

```
api.errors.recovery.NotRecoverable
```

### NotSorted

Friends list must be sorted and free of duplicates

**Namespace**

```
api.errors.recovery.NotSorted
```

### NotStarted

A recovery process has not started for this rescuer

**Namespace**

```
api.errors.recovery.NotStarted
```

### StillActive

There are still active recovery attempts that need to be closed

**Namespace**

```
api.errors.recovery.StillActive
```

### Threshold

The threshold for recovering this account has not been met

**Namespace**

```
api.errors.recovery.Threshold
```

### ZeroThreshold

Threshold must be greater than zero

**Namespace**

```
api.errors.recovery.ZeroThreshold
```

## Constants

### configDepositBase

The base amount of currency needed to reserve for creating a recovery configuration.

This is held for an additional storage item whose value size is `2 + sizeof(BlockNumber, Balance)` bytes.

**Namespace**

```
api.consts.recovery.configDepositBase
```

**Type**

```
type configDepositBase = u128
```

### friendDepositFactor

The amount of currency needed per additional user when creating a recovery configuration.

This is held for adding `sizeof(AccountId)` bytes more into a pre-existing storage value.

**Namespace**

```
api.consts.recovery.friendDepositFactor
```

**Type**

```
type friendDepositFactor = u128
```

### maxFriends

The maximum amount of friends allowed in a recovery configuration.

<Info>
  **NOTE**: The threshold programmed in this Pallet uses u16, so it does not make sense to have a limit here greater than u16::MAX. But also, that is a lot more than you should probably set this value to anyway.
</Info>

**Namespace**

```
api.consts.recovery.maxFriends
```

**Type**

```
type maxFriends = u32
```

### recoveryDeposit

The base amount of currency needed to reserve for starting a recovery.

This is primarily held for deterring malicious recovery attempts, and should have a value large enough that a bad actor would choose not to place this deposit. It also acts to fund additional storage item whose value size is `sizeof(BlockNumber, Balance + T * AccountId)` bytes. Where T is a configurable threshold.

**Namespace**

```
api.consts.recovery.recoveryDeposit
```

**Type**

```
type recoveryDeposit = u128
```
