Aleo is a blockchain platform built around privacy-preserving smart contracts. Unlike traditional blockchains where transaction data is publicly visible, Aleo uses zero-knowledge proofs (zk-SNARKs) to let users prove the correctness of a transaction — such as a token transfer or a contract execution — without revealing the underlying inputs.

Every Aleo transaction is accompanied by one of these proofs. Because generating a proof is a complex operation, Aleo is designed to allow delegation: a user can authorize a transaction and hand off the heavy proof-generation work to a third-party prover, without giving that prover access to their private key.

This delegation is what shapes the signing interface described below. Signing an Aleo transaction is not just a matter of producing a signature over a message — the signer must also compute certain values (such as input identifiers and a transition view key) that are needed by the prover to construct a valid proof.

## Signing Interface

Two signing methods are supported: **account signatures** and **delegated signing**. Both accept a JSON request body and return a JSON response.

For full cryptographic detail, refer to the Aleo signature specification.

* * *

### Input format

Both signing methods share the same top-level input structure:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `inputs` | array | Yes | One or more inputs to sign (see below) |
| `functionId` | string | Delegated only | Field element identifying the function being called |
| `isRoot` | boolean | Delegated only | Whether this is a root-level call |
| `checksum` | string | Delegated only(*) | Integrity checksum of the function. Omitted for older programs. |

(*) Present only for programs that include a checksum.

#### Input types

Each entry in `inputs` has a `type` field and a `data` array of field elements (as decimal strings).

| Type | Used in | Description |
| --- | --- | --- |
| `account` | Account sig | Arbitrary message fields for account-level signing |
| `public` | Delegated | Publicly visible function input |
| `private` | Delegated | Encrypted function input |
| `record` | Delegated | A record commitment being consumed |
| `externalRecord` | Delegated | A record from an external program |
| `dynamicRecord` | Delegated | A dynamically referenced record |

* * *

### Examples

#### Account signature request

JSON

```json
{
  "inputs": [
    {
      "type": "account",
      "data": [
        "6716502009016430053183507170699594817265084671791777241413633239014382669047",
        "1099471864310681484047468615352474858081227942590554598086745066318936376057"
      ]
    }
  ]
}
```

#### Delegated signing request

JSON

```json
{
  "functionId": "7997765759116436245054600309458180601753471573319679234621276897246672782660",
  "isRoot": true,
  "checksum": "1503530553220993152536984095177360228202084361422343390783285383306871595686",
  "inputs": [
    {
      "type": "record",
      "data": [
        "3620054965614225011843835598412969685728959723873203421423497665637723824061",
        "4723421622337407625451130429846704556698341853293634966801114008038334673712"
      ]
    },
    {
      "type": "private",
      "data": [
        "2854583002587711767714127780974314920905498857787333885876654043294119228416",
        "166688728"
      ]
    },
    {
      "type": "private",
      "data": [
        "1237940039285380281610076208"
      ]
    }
  ]
}
```

* * *

### Output format

All field element values are returned as decimal strings.

| Field | Type | Present in | Description |
| --- | --- | --- | --- |
| `signature` | string | Both | Bech32m-encoded Schnorr signature (`sign1…`) |
| `tvk` | string | Delegated only | Transition view key (field element) |
| `tcm` | string | Delegated only | Transition commitment (field element) |
| `gammas` | array of strings | Delegated only | One gamma value per `record`-type input, in order |

#### Account signature response

JSON

```json
{
  "signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf"
}
```

#### Delegated signing response

JSON

```json
{
  "signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf",
  "tvk": "6839744283125714768219049408772295603189719087890464618622056790088127041542",
  "tcm": "36661113237169170635146585844811003819221318715282919854177900780199067452",
  "gammas": [
    "4875506682083978504504607329729976086652196269888800393640799801065716748965"
  ]
}
```
