# Execute a contract call

> This function is only available for EVM-based chains.

#### Request Endpoint: [reference](https://docs.venly.io/reference/executetransaction_1)

HTTP

```http
POST /api/transactions/execute
```

| Parameter        | Param Type | Value      | Description                                                                                                                 | Example Value                                 |
| ---------------- | ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| `Signing-Method` | Header     | `id:value` | <p><code>id</code>: This is the ID of the signing method<br><code>value</code>: This is the value of the signing method</p> | `756ae7a7-3713-43ee-9936-0dff50306488:123456` |

| Parameter                | Param Type | Description                                                             | Data Type | Mandatory |
| ------------------------ | ---------- | ----------------------------------------------------------------------- | --------- | --------- |
| `secretType`             | Body       | On which blockchain the contract exists                                 | String    | ✅         |
| `pincode` (*Deprecated*) | Body       | The pincode of the wallet                                               | String    | ❌         |
| `functionName`           | Body       | The contract function that you want to call                             | String    | ✅         |
| `inputs`                 | Body       | TArray of inputs needed to call the function                            | Array     | ✅         |
| inputs.`type`            | Body       | Type of the input parameter (ex. uint256)                               | String    | ✅         |
| inputs.`value`           | Body       | Value of the input parameter. This needs to be passed as a string value | Object    | ✅         |
| `chainSpecificFields`    | Body       | Field that contains chain-specific values, see below for examples.      | Object    | ✅         |
| `type`                   | Body       | This will be **CONTRACT\_EXECUTION**                                    | String    | ✅         |
| `walletId`               | Body       | `Id` of the wallet that will initiate the tx                            | String    | ✅         |
| `to`                     | Body       | Destination Address (contract address)                                  | String    | ✅         |
| `value`                  | Body       | The amount you want to transfer to                                      | Integer   | ✅         |
| `transactionRequest`     | Body       | The transactionRequest object                                           | Object    | ✅         |

### Supported types

`address, bool, bytes, bytes1, bytes2, bytes3, bytes4, bytes5, bytes6, bytes7, bytes8, bytes9, bytes10, bytes11, bytes12, bytes13, bytes14, bytes15, bytes16, bytes17, bytes18, bytes19, bytes20, bytes21, bytes22, bytes23, bytes24, bytes25, bytes26, bytes27, bytes28, bytes29, bytes30, bytes31, bytes32, int8, int16, int24, int32, int40, int48, int56, int64, int72, int80, int88, int96, int104, int112, int120, int128, int136, int144, int152, int160, int168, int176, int184, int192, int200, int208, int216, int224, int232, int240, int248, int256, string, uint8, uint16, uint24, uint32, uint40, uint48, uint56, uint64, uint72, uint80, uint88, uint96, uint104, uint112, uint120, uint128, uint136, uint144, uint152, uint160, uint168, uint176, uint184, uint192, uint200, uint208, uint216, uint224, uint232, uint240, uint248, uint256, tuple`

For arrays, please provide the type from above followed by square braces ( ex: uint256\[] ). The values for an array must be surrounded with square brackets and delimited with "," (ex. \[1,2,3]). Byte values must be hex-encoded.

> ### 📘
>
> 🧙 The signatures endpoint supports the EIP-712 standard, Ethereum typed structured data hashing and signing. This EIP aims to improve the usability of off-chain message signing for use on-chain.

## Examples

### 1. Execute ERC20 transfer

This example will execute an ERC20 transfer using the direct execution of the smart contract function "transfer". The inputs for this function are: destination (address) and amount (uint265)

HTTP

```http
POST https://api-wallet.venly.io/api/transactions/execute
```

#### Request Body:

JSON

```json
{
	"transactionRequest": {

		"type": "CONTRACT_EXECUTION",
		"walletId": "adc4c08a-b8fa-4e4c-z5a2-92c87b80f174",
		"to": "0xdc71b72db51e227e65a45004ab2798d31e8934c9",
		"alias": null,
		"secretType": "ETHEREUM",
		"functionName": "transfer",
		"value": 0,
		"inputs": [{
			"type": "address",
			"value": "0x80cbb6c4342948e5be81987dce8251dbedd69138"
		}, {
			"type": "uint256",
			"value": 73680000
		}],
		"chainSpecificFields": {
			"gasLimit": "300000"
		}
	}
}
```

#### Response Body:

JSON

```json
{
  "transactionHash" : "0x621f692e386a8bc0c53d36aa793864893106e10f54f63fa9c063e24ad975d907"
}
```

### 2. Tuple support

HTTP

```http
POST https://api-wallet.venly.io/api/transactions/execute
```

#### Request Body:

JSON

```json
{
    "transactionRequest": {
        "type": "CONTRACT_EXECUTION",
        "secretType": "MATIC",
        "walletId": "355351bd-41ae-41fa-8f36-12675f056759",
        "to": "0xb48d8c9e8783465a548f562cb83e8b84d0525a96",
        "functionName": "setValue",
        "inputs": [
            {
                "type": "tuple",
                "value": [
                    {
                        "type": "address",
                        "value": "0xb48d8c9e8783465a548f562cb83e8b84d0525a96"
                    },
                    {
                        "type": "uint256",
                        "value": "100"
                    }
                ]
            }
        ],
        "outputs": []
    }
}
```
