> For the complete documentation index, see [llms.txt](https://docs.kiln.fi/v1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kiln.fi/v1/kiln-products/defi/how-to-integrate/administration.md).

# Administration

## Change the end user fee

`FEE_MANAGER` should be used to perform these actions.

#### Set the deposit fee

The deposit fee is taken at the time of deposit. You can set it by calling the `setDepositFee(uint256 newDepositFee),` where `newDepositFee` is a fixed amount of tokens deducted from each deposit.&#x20;

#### Set the rewards fee

The rewards fee is computed as percentage of the rewards generated by the Vault as a whole. It can be set by calling`setRewardFee(uint256 newRewardFee),` where `newRewardFee`is denominated in basis points.

## Unpauses one of your vaults

`UNPAUSER_ROLE` should be used to perform these actions.

The function to call on every paused vault is:

```solidity
function unpauseDeposit() external onlyRole(UNPAUSER_ROLE);
```

No arguments, no value. The vault reverts if it's already unpaused (that's an OK signal — it just means someone already did it).

#### Unpauser is a Safe{Wallet} (multisig)

1. Sign in to Safe Wallet (`app.safe.global`) using the Safe address from the table in §6.
2. Switch to the matching network (Ethereum / Arbitrum / Base / BNB Chain / Optimism / Polygon).
3. **New transaction →Transaction builder**
4. Recipient = vault address.
5. ABI: paste the vault ABI, or let safe autofill or use the raw selector. `unpauseDeposit()` selector = `0x5157ced5`
6. Collect signatures up to the threshold (`N/M` shown in §6) and execute.

#### Unpauser is an EOA (single private key/ Ledger device)

The integrator can use any tooling they're comfortable with — Etherscan "Write Contract", MetaMask, Frame, Foundry. Foundry one-liner:

```shellscript
cast send <VAULT_ADDRESS> "unpauseDeposit()" \
  --rpc-url <RPC_URL> --private-key <KEY> or connect ledger device
```

## Change commission recipients

`ADMIN` should be used to perform these actions.

Your wallet address must have the `FEE_MANAGER` role granted, as you are the default admin you can grant this role to any address that work for you.

#### Set fee recipients - manual

Here is a step by step video on how to perform this using etherescan:&#x20;

1. Check if your wallet address have the `FEE_MANAGER` role using `hasRole (0x91d14854)` with the `bytes32("FEE_MANAGER")` .
2. If the returned value is false, you need to `grantRole (0x2f2ff15d)`  the `FEE_MANAGER`  role to your preferred address.
3. Check the current `feeRecipients (0x0adfdcb9)`  tuple to confirm your current configuration.
   1. eg. `[[0x4179b87f8faE24ED5A4bCe952b794426D68f4406,50000000,50000000]`\
      `[0x991c468AbcE2b4DD627a6210C145373EbABdd186,50000000,50000000]]` = 50/50 split between theses 2 addreses.
4. Then call `setFeeRecipients (0x71c99619)`  with the new configuration, eg. changing one address.

{% embed url="<https://www.youtube.com/watch?v=NNtHh9PwCpA>" %}

#### Set fee recipients - script&#x20;

To set the recipients of the deposit and rewards fees, you can call the  `setFeeRecipients(FeeRecipient[] memory recipients)` function where `recipients` is an array of the following structure:

```
struct FeeRecipient {
        address recipient;
        uint256 depositFeeSplit;
        uint256 rewardFeeSplit;
}
```

where:

* `recipient` is the address of the fee recipient&#x20;
* `depositFeeSplit` is the share of the recipient on the deposit fee (in basis points)
* `rewardFeeSplit` is the share of the recipient on the performance fee (in basis points)

The sum of all `depositFeeSplit` values and the sum of all `rewardFeeSplit` values in the struct must both equal `100 * 10^(decimal places of the token)`.

We recommend you call first call `feeRecipients (0x0adfdcb9)`, and get your current setup, and then just change the address you want to receive funds on.&#x20;

eg. `[[0x4179b87f8faE24ED5A4bCe952b794426D68f4406,50000000,50000000],[0x991c468AbcE2b4DD627a6210C145373EbABdd186,50000000,50000000]]`

Kiln treasury address is : `0x7D793370dB270CB239Ec05c20F16346f7F69871F` .

You can find the vault [ABI in the smart contract interaction page](/v1/kiln-products/defi/how-to-integrate/smart-contract-interactions.md).

### Switch your vault's sanctions oracle

`OPERATOR_ROLE` is needed for this.

{% hint style="info" %}

#### If you don't have the BlockList addresses and the matching operator reach out to your Kiln point of contact to get a list of your blocklists and operators.

{% endhint %}

Your vaults don't screen depositors directly — they go through a BlockList contract your team controls, which in turn points at a sanctions oracle: vault → your BlockList → sanctions oracle. This procedure re-points that BlockList at Kiln's new oracle. It moves no funds, changes nothing for end users, and is fully reversible with the same call.

The actively maintained oracle address is the same on every network: `0xBadB015c4cE8AA4b5FfE790bb64BaAEe4ec5d1c3`

#### Update the BlockList underlying sanctions list

The function to call on every BlockList you operate is:

```
function setUnderlyingSanctionsList(address newUnderlyingSanctionsList) external onlyRole(OPERATOR_ROLE);
```

One argument (the new oracle address), no value. The BlockList addresses you operate and the matching operator. If you operate more than one BlockList, repeat the call for each. Below are instructions to execute this transaction with a safe &#x20;

#### Operator is a Safe{Wallet} (multisig)

1. Navigate to the Operator Safe Wallet (app.safe.global).
2. Switch to the matching network (Ethereum / Arbitrum / Base / BNB Chain / Optimism / Polygon).
3. New transaction → Transaction builder.
4. Recipient = BlockList address.
5. Safe should autofill the ABI and allow you to select `setUnderlyingSanctionsList(address)` \
   If not use the raw calldata, the full field is identical for every integrator and network: `0x0add1f7d000000000000000000000000badb015c4ce8aa4b5ffe790bb64baaee4ec5d1c3`
6. newUnderlyingSanctionsList = `0xBadB015c4cE8AA4b5FfE790bb64BaAEe4ec5d1c3`.
7. If you operate several BlockLists on the same chain, add one transaction per BlockList to the same batch.
8. Collect signatures up to the threshold and execute.

#### Operator is an EOA (single private key / Ledger device)

The integrator can use any tooling they're comfortable with, Etherscan "Write Contract", a wallet, Foundry. Foundry one-liner:

```
cast send <BLOCKLIST_ADDRESS>
"setUnderlyingSanctionsList(address)" 0xBadB015c4cE8AA4b5FfE790bb64BaAEe4ec5d1c3
--rpc-url <RPC_URL> --private-key <PK> # or --ledger if using Ledger 
```

Send one transaction per BlockList you operate.

#### Check it worked

Read underlyingSanctionsList (selector <kbd>0x6486b781</kbd>) on your BlockList.

```
cast call <BLOCKLIST_ADDRESS> "underlyingSanctionsList()(address)" --rpc-url <RPC_URL>
```

\
&#x20;It should return `0xBadB015c4cE8AA4b5FfE790bb64BaAEe4ec5d1c3`


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.kiln.fi/v1/kiln-products/defi/how-to-integrate/administration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
