Концепции Aleo | Программы
Published: 2022-09-13 22:45:59

Программа - это фундаментальная структура данных для представления логики приложения и его состояния.

Aleo представляет новый язык программирования под названием Aleo instructions, который позволяет разработчикам писать конфиденциальные веб-приложения. Aleo instructions - это статически типизированный язык программирования для написания безопасных программ, сохраняющих конфиденциальность, на Aleo. Используя доказательства нулевого разглашения, Aleo instructions обеспечивают вычислительную безопасность для реальных приложений.

## Логика программ
Aleo instructions предлагает разработчикам простую в использовании среду для написания программ. Благодаря разработке языка ассемблера с привычным для разработчиков синтаксисом и композитным функциям, Aleo instructions хорошо подходят для интеграции с существующими фреймворками для разработчиков, чтобы повысить уровень конфиденциальности и целостности веб-приложений.

```javascript
program token.aleo;

record token:
    // The token owner.
    owner as address.private;
    // The Aleo balance (in gates).
    gates as u64.private;
    // The token balance.
    amount as u64.private;

// The `mint` function initializes a new record with the
// specified number of tokens in `r1` for the receiver in `r0`.
function mint:
    input r0 as address.private;
    input r1 as u64.private;
    cast r0 0u64 r1 into r2 as token.record;
    output r2 as token.record;

// The `transfer` function sends the specified number of tokens
// to the receiver from the provided token record.
function transfer:
    // Input the sender's record.
    input r0 as token.record;
    // Input the token receiver.
    input r1 as address.private;
    // Input the token amount.
    input r2 as u64.private;

    // Checks the given token record has sufficient balance.
    // This `sub` operation is safe, and the proof will fail
    // if an underflow occurs. The output register `r3` holds
    // the change amount to be returned to the sender.
    sub r0.amount r2 into r3;

    // Produces a token record for the specified receiver.
    cast r1 0u64 r2 into r4 as token.record;

    // Produces a token record with the change amount for the sender.
    cast r0.owner r0.gates r3 into r5 as token.record;

    // Output the receiver's record.
    output r4 as token.record;
    // Output the sender's change record.
    output r5 as token.record;
```

## Данные программы

**Идентификатор программы**
Каждая программа имеет уникальный идентификатор программы, который хранится в манифесте программы `program.json`. Этот идентификатор программы используется для указания программы, которая была запущена при потреблении или производстве записей.

**Ввод данных программы**
Для запуска программы пользовательские вводные данные предоставляются в форме программного ввода. Этот ввод, предоставляемый пользователем, является полностью приватным и не раскрывается в публичной сети, если только пользователь не намерен сделать его публичным.

**Состояние программы**
Каждая программа выполняется с учетом состояния программы, предоставленного пользователем на Aleo. Для того чтобы произвести действительный переход состояния на Aleo, пользователь выполняет ряд программ, закодированных в записях, которые составляют [транзакцию](https://developer.aleo.org/concepts/transactions/).

**Вывод программы**
После того, как программа оценена, производится вывод программы, а также доказательство с нулевым разглашением, подтверждающее достоверность вывода.