# 4. Deposit DAI into Public Pool

## Description

Deposit DAI to public liquidity pool. Once you deposit your DAIs from your funds, you will receive reDAIs.

**TBD: Narratives**

## User Interface

![Public Pool Panel](broken-reference)

![Confirm Deposit](broken-reference)

## Function Description

|                 Item                |                                                                                               Description                                                                                              |
| :---------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|         **Contract Address**        |                                                                  Public pool contract (referenced by Smart Contract Overview section)                                                                  |
|          **Contract Name**          |                                                                                            SLDDAIPools1.sol                                                                                            |
|             **Function**            |                                                                                  function provide(uint256 mintAmount)                                                                                  |
|        **Function Selector**        |                                                                                               0x2e2ebe06                                                                                               |
|         **Invocation Type**         |                                                                                          Ethereum Transaction                                                                                          |
|        **Passing Parameters**       |                                                                       Amount of DAIs to deposit; actual number multiplied by 1E18                                                                      |
|           **Return Value**          |                                                                                                  None                                                                                                  |
|          **Event Emitted**          |                                                              event Provide(address indexed account, uint256 amount, uint256 writeAmount);                                                              |
|         **Event Signature**         |                                                                   0x4089141ea5e4c16575f5ebf65f1786497ea07c175846fc7745ef8d8986a4ff65                                                                   |
| **Transaction Sample(BSC testnet)** | [https://testnet.bscscan.com/tx/0xae1851d19feadb5d8f4ac8dfc24f746c1d851e06bb2a80c23685162b2784a39b](https://testnet.bscscan.com/tx/0x6714846dfc5bb35c9f9116fc2366b5a9a45dcaad986aeb26f251b9226c128a77) |

## ABI Description

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

## Examples

### Calling Examples

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

```javascript
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");

const CONTRACT_ADDRESS = "Replace with Public Pool Contract Address";
const ABI = [{
	"inputs": [{
		"internalType": "uint256",
		"name": "amount",
		"type": "uint256"
	}],
	"name": "deposit",
	"outputs": [],
	"stateMutability": "nonpayable",
	"type": "function"
}];

// Deposit 1 DAI to public pool.
const DEPOSIT_AMOUNT = 1e18;

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

contract.methods.provide(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 Deposit Transaction

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

Make a deposit transaction to Shield Protocol V1 on 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>

#### 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 Success response." %}

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

{% endtab %}
{% endtabs %}
