# FCT\_Ext\_TokensValidator

Smart contract that adds the ability to compare values within FCT execution

The values ins and value out supports decimals, making it easy to support various ERC20 tokens.

The comparison is done with normalized values, meaning that 2 USCD (2,000,000 at the blockchain level) will be bigger than 1 Kiro (1,000,000,000,000,000,000 at the blockchain level), because USDC's decimal is 6, comparing to 18 in case of KIRO.&#x20;

## Main Functions

### greaterThan

```solidity
function greaterThan(
        uint256 amount1,
        uint256 decimals1,
        uint256 amount2,
        uint256 decimals2,
        uint256 decimalsOut
 )
```

Reverts when <mark style="color:orange;">amount1/(10^decimals) <= amount2/(10^decimals)</mark>\
Returns <mark style="color:green;">amount1 - amount2</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### greaterThanEqual

```solidity
function greaterEqual(
        uint256 amount1,
        uint256 decimals1,
        uint256 amount2,
        uint256 decimals2,
        uint256 decimalsOut
 )
```

Reverts when <mark style="color:orange;">amount1/(10^decimals) < amount2/(10^decimals)</mark>\
Returns <mark style="color:green;">amount1 - amount2</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### lessThan

```solidity
function lessThan(
        uint256 amount1,
        uint256 decimals1,
        uint256 amount2,
        uint256 decimals2,
        uint256 decimalsOut
 )
```

Reverts when <mark style="color:orange;">amount1/(10^decimals) >= amount2/(10^decimals)</mark>\
Returns <mark style="color:green;">amount2 - amount1</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### lessEqual

```solidity
function lessEqual(
        uint256 amount1,
        uint256 decimals1,
        uint256 amount2,
        uint256 decimals2,
        uint256 decimalsOut
)
```

Reverts when <mark style="color:orange;">amount1/(10^decimals) > amount2/(10^decimals)</mark>\
Returns <mark style="color:green;">amount2 - amount1</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### between

```solidity
function between(
        uint256 minAmount,
        uint256 minDecimals,
        uint256 maxAmount,
        uint256 maxDecimals,
        uint256 amountIn,
        uint256 decimalsIn,
        uint256 decimalsOut
    )
```

Reverts when <mark style="color:orange;">amountIn/(10^decimals) <= minAmount/(10^decimals)</mark> or <mark style="color:orange;">amountIn/(10^decimals) > =maxAmount/(10^decimals)</mark>\
Returns <mark style="color:green;">amountMax - amountMin</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### betweenEqual

```solidity
function betweenEqual(
        uint256 minAmount,
        uint256 minDecimals,
        uint256 maxAmount,
        uint256 maxDecimals,
        uint256 amountIn,
        uint256 decimalsIn,
        uint256 decimalsOut
    )
```

Reverts when <mark style="color:orange;">amountIn/(10^decimals) < minAmount/(10^decimals)</mark> or <mark style="color:orange;">amountIn/(10^decimals) >  maxAmount/(10^decimals)</mark>\
Returns <mark style="color:green;">amountMax - amountMin</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise

### equal

```solidity
function equal(
        uint256 amount1,
        uint256 decimals1,
        uint256 amount2,
        uint256 decimals2,
        uint256 decimalsOut
    )
```

Reverts when <mark style="color:orange;">amount1/(10^decimals) != amount2/(10^decimals)</mark>\
Returns <mark style="color:green;">amount1</mark> normalized to <mark style="color:green;">decimalsOut</mark> otherwise
