# bitcoin-withdrawal-handling-lld

## Bitcoin Withdrawal Handling LLD

This document assumes that the multi-signature wallet is existing

### Objective

This document is intended to outline generic design of a Bitcoin withdrawal handler, a component used for processing withdrawals to Bitcoin network.

For general information on deposit handlers, read:\
[Generic Sidechain Withdrawal HLD](https://peerplays.atlassian.net/wiki/spaces/PIX/pages/352026683/Generic+Sidechain+Withdrawal+HLD)

### Asumptions

* Peerplays SON network is able to transfer assets on Bitcoin network - FULFILLED
* Peerplays SON network have dedicated account on Bitcoin sidechain - FULFILLED (multisig addresses)
* Sidechain operating node has access to assets exchange rate list, containing exchange rates for every asset on every supported sidechain network - FULFILLED For Bitcoin, exchange rate is fixed 1 BTC = 1 PPY
* Sidechain operating node has access to user accounts mapping list, containing user addresses on supported sidechains - FULLFILLED

## Block diagram

Link to [draw.io](http://draw.io/) file

<https://drive.google.com/file/d/1qSWvcxfWVEwJV2nZA-xTApTSi5rH_1uv/view?usp=sharing>

## Description

* Withdrawal process is initiated by sending Peerplays core asser to a SON shared account
* Peerplays listener will pick up this transaction
* Peerplays sidechain handler will create **sidechain\_event\_data** data structure, with the information about transaction, and pass it to the **sidechain\_event\_data\_received**
* **sidechain\_event\_data\_received** will create a proposal for creating withdrawal descriptor object - **son\_wallet\_withdrawal\_object**
* When proposal is approved, object will be created, or if it is already created by another SON, it will be confirmed
* Scheduled SON will start processing withdrawals by creating Bitcoin transaction for sending funds from primary wallet (Bitcoin multisig address controlled by active SONs) to the a Bitcoin address which is registered as a sidechain user address for withdrawals
* Bitcoin transaction will be signed and sent to Bitcoin node
* Scheduled SON will mark son\_wallet\_withdrawal\_object as processed


---

# 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://devs.peerplays.com/supporting-and-reference-docs/sidechain-operator-node-development/generic-sidechain-docs/low-level-designs/bitcoin-withdrawal-handling-lld.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.
