# Overview

IntelliAda is an IntelliJ plugin for Cardano blockchain. Using this plugin developers can interact with Cardano directly from their IDE. In the current version of this plugin, developers can mint native tokens, transfer Ada / Native tokens from one address to another inside their IDE. This plugin doesn't provide any stake pool management related features.

In the current version, plugin provides integration with Blockfrost Cardano Api. Support for other backends like Cardano wallet, Cardano GraphQL will be added in future release.

**GitHub**: <https://github.com/bloxbean/intelliada>

**Plugin page:**  <https://plugins.jetbrains.com/plugin/17109-intelliada-cardano-integration>

**Features**&#x20;

* Account Management
  * Create new testnet/mainnet accounts
  * Import an account by providing 24w mnemonic phrase
* Transfer transaction
  * Transfer Ada or any native tokens
* Native Token Minting
* Script Management
  * Create script (sig, all, any, atLeast, after, before)
  * Use policy scripts while minting new native tokens
* Metadata support
  * Add metdata to the transaction
  * Supports raw json
  * Metadata editor to build metadata
  * Metadata templates
* View transactions
* Utxo explorer
  * View utxos of a specific address
  * Select utxos during transaction submission (Optional)
* Blockfrost integration
  * Integrates with Blockfrost Cardano Api

### **Supported IntelliJ version  (2021.1 and above)**

* IntelliJ IDEA
* PyCharm
* GoLand
* WebStorm
* PhpStorm

### Supported Operating Systems

The plugin uses [cardano-client-lib ](https://github.com/bloxbean/cardano-client-lib/)which is only supported on the following Operating systems.&#x20;

* Apple MacOS (Intel and Apple Silicon)
* Linux (x86\_64) (Ubuntu 18.04 and above or compatible ...)
* Windows 64bits (x86\_64)

For any other operating systems, please create a request [here](https://github.com/bloxbean/cardano-client-lib/issues).


# Installation

[IntelliAda](https://github.com/bloxbean/intelliada) plugin is available in JetBrain's official plugin marketplace. You can install this plugin directly from your IntelliJ IDE.

<https://plugins.jetbrains.com/plugin/17109-intelliada-cardano-integration>

### **Supported IntelliJ version  (2021.1 and above)**

* IntelliJ IDEA
* PyCharm
* GoLand
* WebStorm
* PhpStorm

### Supported Operating Systems

The plugin uses [cardano-client-lib ](https://github.com/bloxbean/cardano-client-lib/)which is only supported on the following Operating systems.&#x20;

* Apple MacOS (Intel and Apple Silicon)
* Linux (x86\_64) (Ubuntu 18.04 and above or compatible ...)
* Windows 64bits (x86\_64)

For any other operating systems, please create a request [here](https://github.com/bloxbean/cardano-client-lib/issues).

### **Installation**

1. Go to Preferences > Plugins or File > Settings > Plugins
2. Search "IntelliAda" in Marketplace tab
3. Click "Install"

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Md2iTGiWVonGTHP7QJi%2F-Md2iWlHBHfJqrWKfDK7%2Finstallation.gif?alt=media\&token=c6a4d5f2-ac0e-44ff-b597-50c2fd626b84)


# Installation - Manual

### Download Plugin Binary

Download IntelliAda plugin binary from GitHub

{% embed url="<https://github.com/bloxbean/intelliada/releases>" %}

### **Supported IntelliJ version  (2021.1 and above)**

* IntelliJ IDEA
* PyCharm
* GoLand
* WebStorm
* PhpStorm

### Installation

* Start IntelliJ IDE
* Go to Plugin window (Preferences -> Plugins or File -> Settings -> Plugins based on your Operating System)
* Select "Install Plugin from Disk..."

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McwfMRzM0AmU1l7RZmN%2F-McwkDjuVzbSvaDdJUTF%2Fmanual-install-select-zip.png?alt=media\&token=9427b016-6971-488f-b6a2-b8a118e5ca7b)

* Select the plugin zip file &#x20;
* Click "Restart IDE" to restart and install the plugin

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McwfMRzM0AmU1l7RZmN%2F-McwkmwZDD2iGVTjryUM%2Fmanual-install-installed.png?alt=media\&token=a7807657-8b5d-411b-8dc7-48af44b934c6)


# Cardano Node Configuration

Currently you can only configure [Blockfrost](https://blockfrost.io/) node inside the IDE. Blockfrost provides api endpoints for both Cardano Mainnet and Testnet. Once configured, you can use the configured node to interact with the Cardano blockchain.

**Note:** Support for other node types will be added in the future release. (e.g; Cardano wallet, Cardano GraphQL ...)

### **Pre**-**requisites**

You need to first register on Blockfrost website (<https://blockfrost.io>) to get a "Api Key" or "Project Id". Once you get the api key for mainnet or testnet, you are ready to configure a Blockfrost node in the IDE.

### Configure a new node

* Create an empty project. Type of project doesn't matter if you just want to interact with Cardano.
* Once the project is opened, you should be able to see "Cardano" tab in the right side tool window.

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McwksW-oSnzbW5vSgT9%2F-Mcwqjwc_gnIz7kcPUYr%2Fnode-cardano-tab.gif?alt=media\&token=ccebc259-260b-4745-b3ad-778b7f26d6fe)

* Enter name, select Blockfrost node type (Testnet or Mainnet)
* Enter Blockfrost "Api Key" in the "Project Id" text field.
* Click "Test Connectioin" to verify the connection.
* Then click ok to create a new node configuration.

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McwksW-oSnzbW5vSgT9%2F-McwsBi4LTCv2f_SyCj7%2Fnodeconfig-add-node.gif?alt=media\&token=180a97ca-4205-4b64-81e5-2ca3892a097b)

### Select a default node

If you have multiple nodes configured in the IDE, you need to set a node as default node. IDE connects to the default node to submit the transactions, query blockchain data or other supported operations.

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McwksW-oSnzbW5vSgT9%2F-Mcwtq69V87bYmqBUl2M%2Fnode-defaultnode-selection.gif?alt=media\&token=44cb7a91-a8b4-4d83-88c2-6e99721ac216)


# Account Management

The following account management features are currently supported

* Create a mainnet/testnet account
* Import an account from 24w mnemonic phrase
* Import an account as "read-only" (watch-only)
* List all accounts
* Fetch balance of all accounts
* Get account details ( Ada / Native token balance, recent transactions, utxos)

### Open Account Management UI

* Click on "List Accounts" icon in Cardano Tool Window.

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Mcwtwjk_tG3O48F3fI0%2F-McwzjVE8-F2tztgiMpY%2Faccmgmt-open-ui.gif?alt=media\&token=76c927aa-dfdb-44e8-80c5-005d92a14aa0)

### Create a new account

* In "Account Management" dialog, click the "New"
* Enter a name for the account
* Select testnet / mainnet
* Click "Ok"

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Mcwtwjk_tG3O48F3fI0%2F-Mcx-sESYiQHPT6-ySfA%2Faccount-mgmt-newaccount.gif?alt=media\&token=6286a619-b68a-41b3-81f5-2e4950b06c64)

### ***Important Note**:*&#x20;

Account management UI also allows you to create a Mainnet account. Account mnemonic phrase is stored in an encrypted format in the local filesystem. But for better developer experience, the encryption key is also stored in the local filesystem. So that the developer doesn't need to enter encryption password during development time.

So it's **not** recommended to import/store any Mainnet account with significant Ada holding.&#x20;

Alternatively, if you want to do a Mainnet transaction, you can enter mnemonic phrase in Transfer UI or Token Minting UI directly. The mnemonic entered in those cases are not stored and just used for that specific transaction.

### Get Testnet Ada token

To get some Testnet Ada token, please check [Cardano Testnet Faucet](https://developers.cardano.org/en/testnets/cardano/tools/faucet/).

### Fetch Balance

The account management screen shows all the created or imported accounts. You can also fetch balances of all the accounts by clicking the "Fetch Balance" button.

Based on the configured default node, balance for testnet or mainnet accounts are fetched.

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Mcwtwjk_tG3O48F3fI0%2F-Mcx10DenRHb-L1ozave%2Facct-mgmt-fetchbalance.gif?alt=media\&token=68c9deb4-2a87-4a32-8849-8d37d88ab680)

### Import an existing account

In account management ui,

* Click "Import Existing"
* Select the network (testnet/mainnet)
* Enter 24w mnemonic phrase
* Click "Ok"

**Note:** An external account can also be imported as a "read-only" account. In that case, you just need to provide the address.\ <br>

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Mcwtwjk_tG3O48F3fI0%2F-Mcx2hbk7tZMuSdsMR5D%2Facct-mgmt-importaccount.gif?alt=media\&token=da3f7ce2-ae14-429e-b224-56da90b0ce42)

### Copy Address

* Double click on the address column to copy the address
* Alternatively, select the row, right click -> Copy Address

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-Mcwtwjk_tG3O48F3fI0%2F-Mcx4Wqf-LXOt09ozvoN%2Facct-mgmt-copyaddress.gif?alt=media\&token=46e0ab19-20a9-43af-80b4-defe18c9af64)

### Account Details

* Double click on the account name to open "Account Details" UI for the address
* Account details UI shows Ada balance and native token balances.
* The bottom panel in "Account details" UI shows recent transactions for the address.
* Select a transaction hash and double-click to see the transaction and metadata details.
* Click on "Show Utxos" to see the available utxos for the address.

{% embed url="<https://youtu.be/Hl5SSMTlwP0>" %}


# Transfer Transaction

You can use "Transfer" UI to transfer Ada or any native tokens from one address to another. You don't need to manually select utxos during the transfer. The plugin automatically selects enough utxos for the transaction. But if you want to include specific utxos in the transaction, you can do so using Utxo selector UI.

### Open Transfer Transaction UI

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McxB1M2J0wjvpPnFlX0%2F-McxBz9HHP2_iV3LQ8NB%2Ftxn-openui.gif?alt=media\&token=f63ce4b7-daec-4a9e-b84b-41b26cab3735)

### Transfer Ada / Native Token&#x20;

1. Click on account chooser button (...) to select sender account. You can also provide mnemonic if sender is an external account.
2. The available balance (both Ada & other native tokens)  for the address is fetched.
3. Select Ada or an available native token
4. Select a receiver
5. Enter amount
6. (Optional) Click on "Calculate Fee" to calculate the fee. This is an optional step.
7. (Optional) You can also override the fee if you want. But leaving it blank should work.
8. Click "Send"

{% embed url="<https://youtu.be/JjtnBt8pE5A>" %}

###

### Select specific Utxos during transfer

* Select sender, token type, receiver and amount as shown in the previous section.
* Select the checkbox "Select to provide utxos for the transaction"
* Click "Add" to open Utxo selector.
* Utxo selector UI shows the utxos specific to the sender address. (Max 1000 recent utxos are shown)
* Select enough utxos to cover your transaction amount and click ok
* Click "Send" to submit the transaction

{% embed url="<https://youtu.be/gEtiN6_Pm_Y>" %}


# Policy script management

The plugin provides a dedicated UI to create and manage policy scripts. These scripts can be used while minting native tokens.

### Create a simple script with single signature

* Click on "Create Script (Single sig)" icon
* Select "Generate From". There are three options.
  * **Generate New** : To generate a new secret key, verification key and use that to generate a policy script.
  * **Address**: Use an existing address to generate a policy script
  * **Secret key**: Provide cbor hex of an existing secret key to generate policy script
* Click on "Generate Json" to view the generated policy script, policy id
* Click on "Save" to save policy keys and corresponding key pair in the script store. So that those can be used later.
* (Optional) You can also export the generated key pair and policy script as json files.

{% embed url="<https://youtu.be/Lsij4OeZb6I>" %}

###

### Create a multisig script with TimeLock

You can create a multi-sig script using individual scripts. You can also add timelock attributes like before and after to that.

* Click on "Create script (Sigs & TimeLock) to create a multi-sig script with timelock.

{% embed url="<https://youtu.be/C5Q8VUwKESM>" %}


# Mint Native Token

The plugin provides a simple UI to create native tokens. You can select a policy script and select required secret keys while creating the token.

* Click "Mint Token" icon to open Token Mint UI.

{% embed url="<https://youtu.be/oXqtlwkYXks>" %}


# Metadata Editor

While creating a transaction (Transfer and Token Minting), you can also include metadata to provide addtional information about the transaction.

The plugin provides an additional tab in both Transfer  and Token Minting UIs where you can provide metadata. You can simply provide raw json or use the metadata editor to build the metadata.

Let's create a NFT with metadata.

{% embed url="<https://youtu.be/Hsc2tdH9Sco>" %}


# Transaction Details (Other Details Tab)

You can provide additional details about a transaction in "Other Details" tab in both Transfer & Token Minting UI.

Currently, you can provide "Ttl" and "Additional Witness Accounts".

![](https://163267619-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-McXmxiZFX7KHmmQksft%2F-McxbPzow0qdR-XY-01P%2F-Mcxc7AXqqYcpNEjweiE%2Fother_details.png?alt=media\&token=3380c374-1b1d-4151-8fcc-bd4656abd616)


# Export Transaction

Both "Transfer" & "Token Mint" UI provide a button "Export Signed Tx". You can click that button to export the signed transaction to a JSON file. This JSON file is compatible with cardano-cli's signed tx json file.&#x20;

{% embed url="<https://youtu.be/cbal0Xv3YUU>" %}


