# 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 %}


---

# Agent Instructions: 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:

```
GET https://docs.intentable.io/no-code-intents-builder.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
