# No-Code Intents Builder

## Overview

### Building Blocks

### Inputs and Outputs

### Cloning

### Grouping

### Simulation

## Assets

Build-in plugins that implement asset based actions and information

### Ether

Native coin actions such as transferring and converting to/from a [wrapped](https://coinmarketcap.com/academy/article/what-is-wrapped-ethereum-weth) token

Native coin balance of any address

{% hint style="info" %}
Transferring and converting native coins available on account assets\
Transferring and converting directly from wallet is available on blockchains that support [EIP-3074](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3074.md)
{% endhint %}

### Token

[ERC20](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) standard interfaces for actions (transfer, approve, etc.) and information (balance of, allowance, etc.)

### NFT

[ERC721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/) and [ERC1155](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155/) standards interfaces for actions (transfer from, approve, etc.) and information (balance of, owner of, etc.)

## Tools

Build-in plugins for extension contracts that extends the functionality of the system&#x20;

### Math

Math extension allows to execute math operations such as addition, subtraction, etc.\
\
Math extension is decimal-aware, making it perfectly for doing math operations on token value.\
For example, 3 USDC (6 decimals) + 5 DAI (18 decimals) will automatically convert the highest decimal and result in number 8 with 18 decimals in this case.\
\
Math extension supports converting the results to a desired decimals.

{% hint style="warning" %}
When using the extension output as a token,  we must define the output decimal to match tokens decimals.    &#x20;
{% endhint %}

### Validator

Validator extension allows to compare various type of values.\
\
When using tokens amount as values, validation extension automatically matches the decimals.\
For example, 3 USDC (6 decimals) will considered higher than 2 DAI (18 decimals), although the value on the blockchain level is lower (6,000,000 vs 2,000,000,000,000,000,000)   &#x20;

{% hint style="info" %}
Validator supports: token amounts, numbers, addresses and hashes.
{% endhint %}

### Secure Storage

Secure storage extension allows to store and retrieve values on-chain.\
Supported values type are numbers, addresses, strings or hashes\
\
There are two types of storage: Account level and Intent level.

Account level storage keeps data associated with the account that can be updated by the account on any intent or direct transaction.&#x20;

{% hint style="info" %}
Account level storage is recommended for use cases where different intents are needed to perform a single task
{% endhint %}

Intent level storage keeps data associated with a single intent. Data can be updated only within the specific intent.&#x20;

{% hint style="info" %}
Intent level storage is recommended for use cases where there is a need to keep information about intent execution values or in combination with the recurrency feature
{% endhint %}

### Batch

### Solver (*Advanced*  :space\_invader:)

Solver box is replaced with any set of calls by the solver at execution.\
It opens up a lot of possibilities such as reverse flash loans, p2p swaps, etc.

{% hint style="warning" %}
Intents with solver box inside are gas free, so make sure to send the transaction fee directly to the solver by using the "[solver address](#global)" global.
{% endhint %}

{% hint style="warning" %}
Always put validators after the solver box, to make sure you're getting the desired outcome
{% endhint %}

## Protocols

### Aave

### Compound

### Curve

### Uniswap

## Bridges

### cBridge

## Oracles

### Chainlink

## System

### Global

Global variables holds blockchain values that are connected to the running native transaction.&#x20;

{% hint style="info" %}
Available values: block timestamp, block number, gas price, miner address, solver address and intent hash
{% endhint %}

### Variables

Set of values that can be set by the solver at the execution of the intent

{% hint style="info" %}
Supports up to 16 variables per intent
{% endhint %}

### Functions

Low level function that runs as part of intent execution without the need to call external contracts

#### Compute and Compute hash

Low level math operators such as +, -, \*, /, etc.

#### Validate and Validate numbers

Low level comparison operators such as >, <, =, etc.

{% hint style="success" %}
Functions gas consumption is minimal compared to calling external contract that provides the same functionality
{% endhint %}

### Flow Control

Every intent starts with a "start" box that is connected to the first call to activate.\
\
Every intent call can succeed or fail.\
If calls "success" or "failed" are connected to another call, this later will be activated accordingly.\
\
If "success" is **not connected**, intent will stop execution on call success.\
If "failed" is **not connected**, intent won't be executed if call fail.

{% hint style="info" %}
To override the default behavior "End" and "Revert" endpoints can be used.
{% endhint %}

## Custom Plugins (*Advanced*  :space\_invader:)

Contract's interface can be imported to the system and used as any other built-in plugin.\
\
When entering contract address, the system will try to retrieve all available functions from the public block explorer.

{% hint style="info" %}
If you're working on a private contract,  you can use a custom ABI.
{% endhint %}
