# Treasury

Treasury Contract는 에어드랍 실행을 주관하는 컨트랙트입니다. 권한을 가진 Operator는 Treasury Contract를 통하여 에어드랍을 설정하고 집행할 수 있습니다.&#x20;

## Code

Github Link: (Will be updated after official launch)

## Address

* Cypress : 0x29990aaF04f3D5Ac7d8C88beab1A009C1Ab4936e

## Events, Read-Only Functions, and State-Changing Functions

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

## Events

**ChangeCreationFee**&#x20;

```solidity
event ChangeCreationFee(uint fee);
```

* 생성 수수료(KSP) 변경 시 발생되는 이벤트

**SetOperator**

```solidity
event SetOperator(address operator, bool valid);
```

* Operator 설정 시 발생되는 이벤트

**CreateDistribution**

```solidity
event CreateDistribution(address operator, address token, uint totalAmount, uint blockAmount, uint blockNumber, address[] targets, uint[] rates);
```

* 에어드랍 설정 시 발생되는 이벤트
* Parameters

**RemoveDistribution**

```solidity
event RemoveDistribution(address operator, address token);
```

* 에어드랍 해제 시 발생되는 이벤트

**Deposit**

```solidity
event Deposit(address operator, address token, uint amount);
```

* Deposit 이벤트

**RefixBlockAmount**

```solidity
event RefixBlockAmount(address operator, address token, uint blockAmount);
```

* RefixBLockAmount 이벤트

**RefixDistributionRate**

```solidity
event RefixDistributionRate(address operator, address token, address[] targets, uint[] rates);
```

* RefixDistributionRate 이벤트

{% endtab %}

{% tab title="Read-Only Functions" %}

## Read-Only Functions

**distributionCount**&#x20;

* 에어드랍 계획 개수&#x20;

**distributionEntries**

* mapping(address => mapping(uint => address))
* LP 별 distribution 주소

**distributionOperator**

* mapping (address => address)
* Distribution 별 Operator 주소

**fee**

* Distribution 생성 수수료

**owner**

* 현재 소유자
  {% endtab %}

{% tab title="State-Changing Functions" %}

## **State-Changing Functions**

**changeCreationFee**

```solidity
function changeCreationFee(uint _fee) public 
```

* Distribution 생성 수수료 변경 함수
* only Owner&#x20;

**claim**

```solidity
function claim(address target) public
```

* 유동성 풀 에어드랍 수령 함수
* Parameters
  * `target` : 유동성 풀 주소

**createKlayDistribution**

```solidity
function createKlayDistribution(uint blockAmount, uint blockNumber, address[] memory targets, uint[] memory rates) public payable
```

* KLAY Distribution 생성 함수
* only Operator

**createTokenDistribution**

```solidity
function createTokenDistribution(address token, uint amount, uint blockAmount, uint blockNumber, address[] memory targets, uint[] memory rates) public
```

* Distribution 생성 함수
* only Operator

**depositKlay**

```solidity
function depositKlay() public payable
```

* KLAY 예치 함수
* only Operator

**depositToken**

```solidity
function depositToken(address token, uint amount) public
```

* KIP7 기반 토큰 예치 함수
* only Operator

**refixBlockAmount**

```solidity
function refixBlockAmount(address token, uint blockAmount) public
```

* Block 당 지급 수량 변경 함수
* only Operator

**refixDistributionRate**

```solidity
function refixDistributionRate(address token, address[] memory targets, uint[] memory rates) public
```

* Block 당 지급율 변경 함수
* only Operator

**removeDistribution**

```solidity
function removeDistribution(address operator, address token) public
```

* Distribution 제거 함수
* Distribution.removeDistribution() 함수 호출
* only Operator

{% endtab %}
{% endtabs %}
