> For the complete documentation index, see [llms.txt](https://docs.adena.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.adena.app/integrations/transactions/sign-and-send-a-transaction.md).

# Sign & Send a Transaction

A web application may create an unsigned transaction and request Adena to **sign and send the transaction** with the connected account via the `doContract` method. Upon receiving the request, Adena will prompt the user to approve the transaction.&#x20;

If the user approves the transaction, Adena will use the user's private key to sign the transaction to create a signed transaction and broadcast it immediately.

#### Code

```javascript
adena.DoContract({
    tx: {
        messages: [
            {
                type: "string",
                value: object
            },
            // you may add additional messages within the brackets
            ...
        ],
        memo?: string
    }, 
    isNotification?: boolean // default: true
)
```

#### **Params**

<table><thead><tr><th width="188">Key</th><th width="197.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>message.type</code></td><td><code>string</code></td><td><p><code>"/bank.MsgSend"</code> for transfers</p><p><code>"/vm.m_call"</code> for contract calls<br><code>"/vm.m_addpkg"</code> for adding packages<br><code>"/vm.m_run"</code> for simulating transactions</p></td></tr><tr><td><code>message.value</code></td><td><code>object</code></td><td>Values (must match the type's format)</td></tr><tr><td><code>memo</code></td><td><code>string</code></td><td>Transaction memo (tag)</td></tr><tr><td><code>tx</code></td><td><code>[Transaction Model]</code></td><td>Transaction info</td></tr><tr><td><code>isNotification</code></td><td><code>boolean</code></td><td>Notification (default: true)</td></tr></tbody></table>

#### Response

<table><thead><tr><th width="212">Key</th><th width="168.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>code</code></td><td><code>number</code></td><td>Account number</td></tr><tr><td><code>status</code></td><td><code>string</code></td><td>Returns <code>success</code> or <code>failure</code></td></tr><tr><td><code>type</code></td><td><code>string</code></td><td>Response type</td></tr><tr><td><code>message</code></td><td><code>string</code></td><td>Descriptive message of the result</td></tr><tr><td><code>data</code></td><td><code>object</code></td><td><strong>Transaction Result Model</strong></td></tr></tbody></table>

#### Transaction Model

<table><thead><tr><th width="212">Key</th><th width="168.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>messages[].type</code></td><td><code>string</code></td><td>"/bank.MsgSend" for transfers<br>"/vm.m_call" for contract calls<br>"/vm.m_addpkg" for adding packages<br>"/vm.m_run" for executing a gno script</td></tr><tr><td><code>messages[].value</code></td><td><code>object</code></td><td>Values (must match the type's format)</td></tr><tr><td><code>memo</code></td><td><code>String</code></td><td>Transaction memo (tag)</td></tr></tbody></table>

#### Transaction Result Model

<table><thead><tr><th width="212">Key</th><th width="168.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>hash</code></td><td><code>string</code></td><td>Transaction hash</td></tr><tr><td><code>height</code></td><td><code>string</code></td><td>Block height</td></tr><tr><td><code>checkTx</code></td><td><code>object</code></td><td>Only returns on successful transactions</td></tr><tr><td><code>deliverTx</code></td><td><code>object</code></td><td>Only returns on successful transactions</td></tr></tbody></table>

### `/bank.MsgSend`

#### Sample Request

<pre class="language-javascript"><code class="lang-javascript"><strong>await adena.DoContract(
</strong>  {
    messages: [{
        type: "/bank.MsgSend",
        value: {
            from_address: "g1ffzxha57dh0qgv9ma5v393ur0zexfvp6lsjpae", // your Adena address
            to_address: "g122n67es9vzs0rmharsggfr4sdkd45aysnuzf7m", // recipient's address
            amount: "5000000ugnot" // sending amount. 1GNOT = 1000000ugnot
        }
    }],
    memo: "12313"
  }
)
</code></pre>

#### Sample Response

```json
{
    "code": 0,
    "status": "success",
    "type": "TRANSACTION_SENT",
    "message": "The transaction has been successfully sent.",
    "data": {
        "height": "4027",
        "hash": "SWHSwked0XUWk7R7UmW+iD4PgVugok/Pb7fW0Yf86qE=",
        "deliverTx": {},
        "checkTx": {}
    }
}
```

### `/vm.m_call`

#### Sample Request

```javascript
await adena.DoContract(
  {
    messages: [{
      type: "/vm.m_call",
      value: {
        caller: "g1ffzxha57dh0qgv9ma5v393ur0zexfvp6lsjpae", // your Adena address
        send: "",
        pkg_path: "gno.land/r/demo/foo20", // Gnoland package path
        func: "Transfer", // Function name
        args: [ // Arguments
          "g122n67es9vzs0rmharsggfr4sdkd45aysnuzf7m",
          "1"
        ]
      }
    }
  ], 
})
```

#### Sample Response

```json
{
    "code": 0,
    "status": "success",
    "type": "TRANSACTION_SENT",
    "message": "The transaction has been successfully sent.",
    "data": {
        "height": "4027",
        "hash": "SWHSwked0XUWk7R7UmW+iD4PgVugok/Pb7fW0Yf86qE=",
        "deliverTx": {},
        "checkTx": {}
    }
}
```

### `/vm.m_addpkg`

#### Sample Request

```javascript
await adena.DoContract({
  messages: [{
    type: "/vm.m_addpkg",
    value: {
      creator: "g1ffzxha57dh0qgv9ma5v393ur0zexfvp6lsjpae", // your Adena address
      deposit: "1ugnot", // amount of ugnot to deposit in the package (enter a blank or an amount above 1 ugnot)
      package: {
        name: "hello", // package name
        path: "gno.land/r/demo/hello", // package path (cannot be a duplicate from existing paths on Gnoland)
        files: [ // a list of files to deploy
          {
            name: "hello.gno", // file name
            body: "package hello\n\nfunc Hello() string {\n\treturn \"Hello() called\"\n}\n\nfunc Render() string {\n\treturn \"Render() called\"\n}", //file contents
          }
        ]
      }
    }
  }],
});
```

#### Sample Response

```json
{
    "code": 0,
    "status": "success",
    "type": "TRANSACTION_SENT",
    "message": "The transaction has been successfully sent.",
    "data": {
        "height": "4027",
        "hash": "SWHSwked0XUWk7R7UmW+iD4PgVugok/Pb7fW0Yf86qE=",
        "deliverTx": {},
        "checkTx": {}
    }
}
```

### `/vm.m_run`

#### Sample Request

```javascript
await adena.DoContract({
  messages: [{
    type: "/vm.m_run",
    value: {
      caller: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5", // your Adena address
      send: "", // amount of ugnot to send
      package: {
        name: "main", // package name
        path: "", // msg_run is empty path
        files: [
          {
            name: "main.gno", // file name
            body: "package main\n\nfunc main() {\n\tprintln(\"HELLO WORLD\")\n}", // file content (msg_run has main function)
          }
        ]
      }
    }
  }]
});
```

#### Sample Response

```json
{
    "status": "success",
    "data": {
        "document": {
            "msgs": [
                {
                    "type": "/vm.m_run",
                    "value": {
                        "caller": "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
                        "send": "",
                        "package": {
                            "name": "main",
                            "path": "gno.land/r/demo/main",
                            "files": [
                                {
                                    "name": "script.gno",
                                    "body": "package main\n\nfunc Main() {\n\tprintln(\"HELLO WORLD\")\n}"
                                }
                            ]
                        }
                    }
                }
            ],
            "fee": {
                "amount": [
                    {
                        "amount": "1",
                        "denom": "ugnot"
                    }
                ],
                "gas": "2000000"
            },
            "chain_id": "test3",
            "memo": "",
            "account_number": "3223",
            "sequence": "82"
        },
        "signature": {
            "pub_key": {
                "type": "tendermint/PubKeySecp256k1",
                "value": "A+FhNtsXHjLfSJk1lB8FbiL4mGPjc50Kt81J7EKDnJ2y"
            },
            "signature": "MYYWRnJ1OL2Q/QQFy7gzVNs2Rt0YrqWT9na1RnZv0+Qel3VCO01OsSiCqfy6O/In80lzNfPi4a/XeM+wB4JV0Q=="
        }
    },
    "code": 0,
    "message": "The transaction has been successfully sent.",
    "type": "TRANSACTION_SENT"
}
```
