# ERC-20 & PERC-20

### PERC-20 Tokens

We introduce a new type of token – PERC20 (private ERC-20). It has two main differences from regular ERC-20 standards:

* &#x20;default `balanceOf` and `allowance` functions are disabled in favor of your own implementation function. You should implement some access control logic or use `msg.sender` to check who sent that call. If `eth_call` was sent from EOA and was signed, it will recover `msg.sender` from provided signature, otherwise, it `msg.sender` will be empty address
* `Transfer` and `Approval` events are disabled, since they can leak sensitive information

You can find example of PERC-20 contract in the interaction guide: [sample-perc20-contract](https://docs.swisstronik.com/swisstronik-docs/development/guides/deployment-and-interaction-perc-20/sample-perc20-contract "mention")

### EVM Tokens[​](https://docs.evmos.org/protocol/concepts/tokens#evm-tokens) <a href="#evm-tokens" id="evm-tokens"></a>

Swisstronik is compatible with ERC-20 tokens and other non-fungible token standards (ERC-721, ERC-1155) that are natively supported by the EVM.&#x20;

The main problem with the usage of the ERC-20 and other non-modified ERC token standards is that it will disable a lot of functionality such as private transfers and data protection (balance is visible to anyone)

{% hint style="info" %}
**Only OpenZeppelin versions up to 4.9.6 are supported. OpenZeppelin version 5 and above are not supported**&#x20;
{% endhint %}
