# 2. Withdraw Funds

## Description

Make a withdrawal from an account.

**TBD: Narratives**

## User Interface

![Withdraw Panel](broken-reference)

## Function Description

|                 Item                |                                                  Description                                                 |
| :---------------------------------: | :----------------------------------------------------------------------------------------------------------: |
|         **Contract Address**        |                       Trading contract (referenced by Smart Contract Overview section)                       |
|          **Contract Name**          |                                              SLDDAIContract.sol                                              |
|             **Function**            |                                       function withdraw(uint256 amount)                                      |
|        **Function Selector**        |                                                  0x2e1a7d4d                                                  |
|         **Invocation Type**         |                                             Ethereum Transaction                                             |
|        **Passing Parameters**       |                          Amount of DAIs withdrawn; actual number multiplied by 1E18                          |
|           **Return Value**          |                                                     None                                                     |
|          **Event Emitted**          |           event DDSWithdraw(address indexed sender, address indexed toAddr, uint256 motageAmount);           |
|         **Event Signature**         |                      0x9319767067544c146c859088bc69f38236cad434eb28957e8574a56d4173f89f                      |
| **Transaction Sample(BSC testnet)** | <https://testnet.bscscan.com/tx/0xb7d745f1d696281444530c798a408ad52cf221c6993bb16997f3b7f465e7c2d5#eventlog> |

## ABI Description

```
[{
	"inputs": [{
		"internalType": "uint256",
		"name": "amount",
		"type": "uint256"
	}],
	"name": "withdraw",
	"outputs": [],
	"stateMutability": "nonpayable",
	"type": "function"
}]
```

## Examples

### Calling Examples

{% tabs %}
{% tab title="JavaScript" %}

```javascript
// This example is written by using Web3.js
// More details on Web3.js could be found here - https://web3js.readthedocs.io/

var Web3 = require('web3');
const BigNumber = require('bignumber.js');

// BSC Mainnet: https://bsc-dataseed.binance.org
// BSC Testnet: https://data-seed-prebsc-1-s1.binance.org:8545
const  web3 = new Web3("https://data-seed-prebsc-1-s1.binance.org:8545");

// Need trading contract address
const CONTRACT_ADDRESS = "";
const ABI = [{
	"inputs": [{
		"internalType": "uint256",
		"name": "amount",
		"type": "uint256"
	}],
	"name": "withdraw",
	"outputs": [],
	"stateMutability": "nonpayable",
	"type": "function"
}];

// Withdraw 1 DAI.
const DEPOSIT_AMOUNT = 1e18;

var contract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS);

contract.methods.withdraw(new BigNumber(DEPOSIT_AMOUNT).toString()).send({
    from: "CALLER_ADDRESS",
}, function(error, result){
    if(!error) {
      console.log('Response:', result);
    } else {
      console.log(error);
    }
});
```

{% endtab %}

{% tab title="Python" %}

```
# This example is written by using Web3.py
# More details on Web3.py could be found here - https://web3py.readthedocs.io/


```

{% endtab %}
{% endtabs %}

### HTTP Request Example

## Send a Withdrawal Transaction

<mark style="color:green;">`POST`</mark> `(BSC Mainnet) https://bsc-dataseed.binance.org/`

\
Make a withdraw transaction to Shield Protocol V1 BSC network.\
More details on how to send a transaction via BSC RPC could be found here, <https://ethereum.org/en/developers/docs/apis/json-rpc/#eth\\_sendrawtransaction><br>

#### Request Body

| Name    | Type   | Description                                           |
| ------- | ------ | ----------------------------------------------------- |
| jsonrpc | string | "2.0"                                                 |
| method  | string | "eth\_sendRawTransaction"                             |
| params  | array  | the signed transaction data coerced into string array |
| id      | number | request sequence id, you could use timestamp as id    |

{% tabs %}
{% tab title="200 " %}

```
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0xb7d745f1d696281444530c798a408ad52cf221c6993bb16997f3b7f465e7c2d5"
}
```

{% endtab %}
{% endtabs %}
