# Deploy smart contracts

{% hint style="info" %}
This entry assumes that you have already [configured your Metamask](/tooling/metamask/connect-to-the-network.md) to connect to Acala EVM+.
{% endhint %}

To deploy a smart contract using [EVM playgrounds](https://evm.acala.network/), you need to compile your smart contract in your preferred development framework so that you have the ABI bundle available to upload.

## Upload the ABI bundle

Open the [Upload tab](https://evm.acala.network/#/upload) in the EVM playgrounds. Here you can upload an ABI bundle of the smart contract that you want to deploy. This will allow you to use it to deploy the smart contract:

![EVM playgrounds => Upload](/files/RZHTa78tCMk6fpBEj9QE)

Assign the `Name` of your smart contract. You will be able to identify the smart contract in the `Deploy` tab with it, once it gets uploaded.

To upload the ABI bundle itself, you can either drag and drop it into the upload section, or click on the section and select the file.

![EVM playgrounds => Upload => Add file](/files/zU23N2swe2p2wfhviPVp)

Once you have selected the correct ABI bundle, the methods of the smart contract should be displayed. You can verify that the correct methods are listed and press `Upload` to upload the ABI bundle.

## Deploy the smart contract

Smart contracts can be deployed under the [Deploy tab](https://evm.acala.network/#/deploy) of the EVM playgrounds.

The ABI bundles that you uploaded in the `Upload` tab can be seen here:

![EVM playgrounds => Deploy](/files/wKwoGJRyYDtfqKB6uGK0)

The methods available for an ABI bundle can be seen by expanding the `ABI` menu. This can be helpful if you have multiple bundles uploaded and you want to be sure that you will be interacting with the right one.

![EVM playgrounds => Deploy => Expand ABI section ](/files/55cL6n4ZZlI38Ud66IWP)

When you have verified that you are interacting with the ABI bundle that has the correct methods available, you can click `Deploy`, which should open a deployment interface:

![EVM Playgrounds => Deploy => Deploy selected ABI bundle](/files/PCVcJrldQum69Xg8bCDK)

The interface consists of the following components:

* Button to connect to your EVM wallet (this is why connecting MetaMask to the EVM+ is a prerequisite for this entry)
* Smart contract name, that can be changed, so you can deploy the same ABI bundle multiple times and easily differentiate between them
* ABI bundle identifications
* Fields to input the smart contract constructor parameters
* Value field to determine wether to send some of the native currency with the deploy transaction
* Fields to override the [`gas parameters`](/network/gas-parameters.md)
* `Deploy` button to deploy the smart contract once you are satisfied with the deployment parameters

### 1. Connect your EVM wallet

Pressing the <img src="/files/mpcWfAWhyri19g06lEU5" alt="" data-size="line"> button will prompt your EVM wallet to connect to the site. You can select the account that you want to use with the EVM playgrounds and connect it.

![](/files/GYFlrwjFOdvLs4W1fnyy)<img src="/files/ab7GbUxQA8Xeiukbmi3S" alt="" data-size="original">

The selected account should be displayed at the top of the page now:

![Displayed deployment account](/files/VsatL74MjSUU9fLz9b1Z)

### 2. Update the required deployment parameters

Depending on the requirements, you can modify the deployment parameters of your smart contract. It is required to fill out the constructor parameters, but modifying other values is optional.

![Filled out deployment values](/files/llrblPjdiM6HPiQmhwnz)

Once the values are filled out and double checked, the smart contract is ready to be deployed.

{% hint style="warning" %}
The `validUntil` field value has to be higher than the current block number, or the deployment transaction will fail, due to the validator treating it as outdated. You can verify the current block number in a [block explorer](/tooling/chain-explorer.md).
{% endhint %}

### 3. Deploy the smart contract

Once the parameters of deployment are ready, you can deploy the smart contract by pressing the `Deploy` button. This should prompt your EVM wallet to confirm your deployment transaction:

![Confirming the deployment transaction](/files/PitYQq8BvJHl0OG6BAKu)

The deployed smart contract can now be seen in the `Execute` tab, which is [further explained](/tooling/evm-playground/interacting-with-smart-contracts.md) in the next entry.


---

# 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://evmdocs.acala.network/tooling/evm-playground/deploy-smart-contracts.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.
