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
{
"inputs": [
{
"type": "account",
"data": [
"6716502009016430053183507170699594817265084671791777241413633239014382669047",
"1099471864310681484047468615352474858081227942590554598086745066318936376057"
]
}
]
}Delegated signing request
{
"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
{
"signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf"
}Delegated signing response
{
"signature": "sign1g03t2q98yh7kets29s05en3ljp90umlhf5kwzhecsaalcxpffvqmnafyspdnmu42qjgj905f964yxl2ph7mz70dqy503xxyjj4rwxqur22qjwn4zc0pzv87twjygsz9m7ekljmuw4jpzf68rwuq99r0tp735vs6220q7tp60nr7llkwstcvu49wdhydx5x2s3sftjskzawhqvh8arjf",
"tvk": "6839744283125714768219049408772295603189719087890464618622056790088127041542",
"tcm": "36661113237169170635146585844811003819221318715282919854177900780199067452",
"gammas": [
"4875506682083978504504607329729976086652196269888800393640799801065716748965"
]
}The gammas array contains one entry per recordtype input, in the same order they appear in inputs. In the example above there is one record input, so gammas has one element.
Updated about 4 hours ago
