Aleo
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
{
"inputs": [
{
"type": "account",
"data": [
"6716502009016430053183507170699594817265084671791777241413633239014382669047",
"1099471864310681484047468615352474858081227942590554598086745066318936376057"
]
}
]
}
Delegated signing request
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
{
"signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf"
}
Delegated signing response
JSON
{
"signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf",
"tvk": "6839744283125714768219049408772295603189719087890464618622056790088127041542",
"tcm": "36661113237169170635146585844811003819221318715282919854177900780199067452",
"gammas": [
"4875506682083978504504607329729976086652196269888800393640799801065716748965"
]
}