---
# System prepended metadata

title: Autonomy Pod Overall Design
tags: [Autonomy, jim-draft]

---

# Autonomy Pod Overall Design

###### tags: `jim-draft` `Autonomy`

Autonomy Pod is a full functional bitcoin wallet environment that a user could interact with it via various of clients (Autonomy App, CLI tools).

A user could either host by himself or request an environment from Bitmark with a small fee.

## Components

An Autonomy Pod is consist of three componets. They are

1. Pod Controller
2. Bitcoind Controller
3. Bitcoind

We will introduce these components below.

### Pod Controller (opensourced)

Pod controller is the key component of the Autonomy pod. It enables the client to control his wallet.

The main functionality of it are:

1. Manage an identity
2. Control its authenticate key
3. Provide API endpoint via messaging protocol
4. Manage notifications
5. Manage multisig wallet via bitcoind
6. Manage bitcoind lifecycle via bitcoind controller (optional)

The design of pod controller is here: [Pod Controller Design Documentation](/wl6tlZleSjmeCsONl0_VNw).

### Bitcoind

Bitcoind connects to the bitcoin blockchain. We use it to maintain multisig wallet, watching blockchain transaction and broadcast transactions. 

### Bitcoind Controller (opensourced)

For some use cases, a user would like to minimize the usage of system resources. For example, running the Autonomy Pod over an AWS EC2 T3 instance without buring down all its burst credits.

In this case, the controller enables users to determine whether to suspend the bitcoind services if it is not actively in-used. And also wake it up when you need to make some requests.

There are two platforms it will support:
1. Kubernetes Cluster
2. Standalone Unix-like OS

The main functionality of it is to start, stop, restart and check the status of **bitcoind**.

For implementation detail, please follow this [Bitcoind Controller Design Documentation](/xYkzh9agRVuH2yOntMThdg).


## Environments 

Autonomy Pod could be run in these two environments:

- Kubenetes
- Local

### Kubernetes 

![](https://hackmd.io/_uploads/r1kGWQyoO.png)

There will be three pods for each user running in Kubernetes Cloud. The pod controller determines when to start / stop the bitcoind and controls it via API from **bitcoind controller**. The bitcoind controller will then start / stop according to the order from pod controller. 


### Local

![](https://hackmd.io/_uploads/Hkg3OQksO.png)

The minimum requirement for running Autonomy Pod locally is to set up a bitcoind and a pod controller. The pod controller will communicate with bitcoind directly. The bitcoind controller is an option for users who also want to optimize the bitcoind running hours.

#### References

- [Run the Autonomy Pod in local environment](/FOHv0Bz-TxuNqjkYS5dbZw)
