# invokeMulti

Invoke Multi functions the same as Invoke, but accepts inputs to execute multiple invokes in the same transaction.

## **Input Arguments**

| Parameter                                                                                                                  | Description                                                                                                                                        |
| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fee?: string`                                                                                                             | If a fee is specified then the wallet SHOULD NOT override it, if a fee is not specified the wallet SHOULD allow the user to attach an optional fee |
| `network: string`                                                                                                          | Network alias to submit this request to.                                                                                                           |
| `assetIntentOverrides?:` [![i](http://localhost:8080/assets/images/info.svg)](#assetintentoverrides)`AssetIntentOverrides` | Used to specify the exact UTXO's to use for attached assets. If this is provided fee and attachedAssets will be ignored                            |
| `invokeArgs?:` [![i](http://localhost:8080/assets/images/info.svg)](#invokearguments)`InvokeArguments[]`                   | Array of contract invoke inputs                                                                                                                    |
| `broadcastOverride?: boolean`                                                                                              | If this flag is set to True, the wallet provider will return the signed transaction rather than broadcasting to a node.                            |
| `txHashAttributes?:` [![i](http://localhost:8080/assets/images/info.svg)](#txhashattribute)`TxHashAttribute[]`             | Optional list of tx attribute hash values to be added                                                                                              |

### InvokeArguments

| Parameter                                                                           | Description                                                                                                      |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `scriptHash: string`                                                                | The script hash of the contract that you wish to invoke                                                          |
| `operation: string`                                                                 | The operation on the smart contract that you wish to call. This can be fetched from the contract ABI             |
| `args:` [![i](http://localhost:8080/assets/images/info.svg)](#argument)`Argument[]` | A list of arguments necessary to perform on the operation you wish to call                                       |
| `attachedAssets?: AttachedAssets[]`                                                 | Describes the assets to attach with the smart contract, e.g. attaching assets to mint tokens during a token sale |
| `triggerContractVerification: bolean?`                                              | Adds the instruction to invoke the contract verifican trigger                                                    |

### Argument

| Parameter                                                                                                   | Description                                               |
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `type: 'String' \| 'Boolean' \| 'Hash160' \| 'Hash256' \| 'Integer' \| 'ByteArray' \| 'Array' \| 'Address'` | The type of the argument with you are using               |
| `value: any`                                                                                                | String representation of the argument which you are using |

### TxHashAttribute

| Parameter                                                                                                                                                                              | Description                                               |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `type: 'String' \| 'Boolean' \| 'Hash160' \| 'Hash256' \| 'Integer' \| 'ByteArray' \| 'Array' \| 'Address'`                                                                            | The type of the argument with you are using               |
| `value: any`                                                                                                                                                                           | String representation of the argument which you are using |
| `txAttrUsage: 'Hash1' \| 'Hash2' \| 'Hash3' \| 'Hash4' \| 'Hash5' \| 'Hash6' \| 'Hash7' \| 'Hash8' \| 'Hash9' \| 'Hash10' \| 'Hash11' \| 'Hash12' \| 'Hash13' \| 'Hash14' \| 'Hash15'` | Attribute usage value                                     |

### AssetIntentOverrides

<table><thead><tr><th width="332">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs:</code> <a href="#assetinput"><img src="http://localhost:8080/assets/images/info.svg" alt="i"></a><code>AssetInput[]</code></td><td>A list of UTXO inputs to use for this transaction</td></tr><tr><td><code>outputs:</code> <a href="#assetoutput"><img src="http://localhost:8080/assets/images/info.svg" alt="i"></a><code>AssetOutput[]</code></td><td>A list of UTXO outputs to use for this transaction</td></tr></tbody></table>

### AssetInput

<table><thead><tr><th width="255">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>Transaction id to be used as input</td></tr><tr><td><code>index: number</code></td><td>Index of the UTXO, can be found from transaction details</td></tr></tbody></table>

### AssetOutput

<table><thead><tr><th width="259">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>asset: string</code></td><td>Asset of the UTXO</td></tr><tr><td><code>address: string</code></td><td>Address to receive the UTXO</td></tr><tr><td><code>value: string</code></td><td>String representation of double or integer value to be used as output</td></tr></tbody></table>

## **Success Response**

In the case where the "broadcastOverride" input argument is not set, or set to false.

<table><thead><tr><th width="265">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>The transaction ID of the invocation</td></tr><tr><td><code>nodeURL: string</code></td><td>The node which the transaction was broadcast to. Returned if transaction is broadcast by wallet provider</td></tr></tbody></table>

In the case where the "broadcastOverride" input argument is set to True.

<table><thead><tr><th width="266">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>txid: string</code></td><td>The transaction ID of the invocation</td></tr><tr><td><code>signedTx: string</code></td><td>The serialized signed transaction. Only returned if the broadcastOverride input argument was set to True</td></tr></tbody></table>

## **Error Response**

<table><thead><tr><th width="270">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>type: string</code></td><td>The type of error which has occured</td></tr><tr><td><code>description: string</code></td><td>A description of the error which has occured</td></tr><tr><td><code>data: string</code></td><td>Any raw data associated with the error</td></tr></tbody></table>

## Example

### Request

```js
neoline.invokeMulti({
    invokeArgs: [
        {
            scriptHash: "808f0823a811cdb7d80af3509e900cc2f594ceb1",
            operation: "transfer",
            args: [
            {
                    "type": "Address",
                    "value": "AWSEU4BXpjGVdw9ajnFBXh8Rg8cgw9f3Zo"
                },
                {
                    "type": "Address",
                    "value": "AY69kajrRx1Qk29AeLxvkXHYf2h3pQw9yK"
                },
                {
                    "type": "Integer",
                    "value": "100000000"
                }

            ],
            attachedAssets: {
                NEO: '1',
                GAS: '0.0001'
            },
        },
        {
            scriptHash: "808f0823a811cdb7d80af3509e900cc2f594ceb1",
            operation: "transfer",
            args: [
            {
                    "type": "Address",
                    "value": "AWSEU4BXpjGVdw9ajnFBXh8Rg8cgw9f3Zo"
                },
                {
                    "type": "Address",
                    "value": "AY69kajrRx1Qk29AeLxvkXHYf2h3pQw9yK"
                },
                {
                    "type": "Integer",
                    "value": "300000000"
                }
            ],
            attachedAssets: {
                NEO: '2',
                GAS: '0.01'
            },
        }
    ],
    fee: '0.01',
    network: 'TestNet',
    broadcastOverride: false,
    txHashAttributes: [
        {
            type: 'Boolean',
            value: true,
            txAttrUsage: 'Hash1'
        }
    ]
})
.then(({txid, nodeURL}: InvokeOutput) => {
  console.log('Invoke transaction success!');
  console.log('Transaction ID: ' + txid);
  console.log('RPC node URL: ' + nodeURL);
})
.catch((error) => {
  const {type, description, data} = error;
  switch(type) {
    case NO_PROVIDER:
        console.log('No provider available.');
        break;
    case RPC_ERROR:
        console.log('There was an error when broadcasting this transaction to the network.');
        break;
    case CANCELED:
        console.log('The user has canceled this transaction.');
        break;
    default:
        // Not an expected error object.  Just write the error to the console.
        console.error(error);
        break;
  }
});
```

### Response

```js
{
    txid: "8979389ac095c37c43fa6922ae3f1180e33082394b43108b82cb0ca37d900541",
    nodeURL: "https://testnet.api.neoline.io"
};
```
