# Security

## UUPS Proxies

In order to be able to **improve** and **secure** the protocol, the following smart-contracts use UUPS Proxy pattern to make them **upgradeable**:&#x20;

* AccessManager
* FeesManager
* KYCToken&#x20;

The UUPS proxy pattern was first documented in EIP-1822. Unlike Transparent pattern, in UUPS the upgrade logic is handled by the implementation contract itself. The UUPS implementation used by Shprd smart-contracts is the OpenZeppelin UUPSUpgradeable interface.

{% embed url="<https://eips.ethereum.org/EIPS/eip-1822>" %}
EIP-1822
{% endembed %}

{% embed url="<https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable>" %}
OpenZeppelin UUPSUpgradeable interface
{% endembed %}

## Beacon Proxy

Vault smart-contracts use Beacon proxy pattern to be able to change the logic of **all** the vaults created at once. The beacon proxy pattern was first documented in EIP-1967. The Beacon implementation used by Shprd smart-contracts is the OpenZeppelin UpgradeableBeacon interface.&#x20;

{% embed url="<https://eips.ethereum.org/EIPS/eip-1967>" %}
EIP-1967
{% endembed %}

{% embed url="<https://docs.openzeppelin.com/contracts/4.x/api/proxy#UpgradeableBeacon>" %}
OpenZeppelin UpgradeableBeacon interface
{% endembed %}
