November 5, 2023

Starknet – истинный ZK

Из всех L2 сетей, Старкнет самый особенный. И дело даже не в его EVM несовместимости, а в причине, из-за которой эта совместимость невозможна. Сейчас мы поговорим о языке Cairo.

Cairo это собственный язык программирования Старкнета, именно из-за него нам приходится проходить 9 кругов ада для пополнения кошелька, но именно благодаря ему Старкнет имеет преимущество над своим главным конкурентом – ZkSync.

Если говорить коротко и не вдаваться в техническую часть, то отличие Старкнета от ZkSync заключается в децентрализации первого, и централизации второго.

Starknet. Cairo позволяет создавать программы, которые могут генерировать доказательства с нулевым разглашением, используемые в технологии STARK. То есть, Zk-proof внедрен в работу блокчейна.

ZkSync. Solidity не поддерживает Zk-proof. В случае zkSync технология zero-knowledge proofs используется не на уровне смарт-контрактов, написанных на Solidity, а на уровне протокола zkSync самого по себе.

С общими положениями разобрались, теперь переходим к уровню advanced.

1. Принципы работы с данными: Фиксированное поле vs Разнообразие типов

Cairo (StarkNet)

В Cairo все данные представлены в форме чисел в ограниченном поле, что можно сравнить с игрой, где ваши передвижения ограничены размерами игрового поля. Вы не можете выйти за его пределы, и каждое действие должно соответствовать правилам поля.

func add(x : felt, y : felt) -> (result : felt):
    let (result) = x + y
    return (result)
end

Solidity (zkSync)

Solidity дает вам возможность использовать разные типы данных, подобно тому как в шахматах у вас есть разные фигурки: пешки, ладьи, кони, каждая с уникальными движениями и возможностями.

function add(uint x, uint y) public pure returns (uint) {
    return x + y;
}


2. Подход к безопасности: Встроенная анонимность vs Опциональная анонимность

Cairo (StarkNet)

Поскольку Cairo спроектирован с учетом zk-STARKs, он как бы создает "невидимый" слой безопасности для транзакций, что можно сравнить с отправкой зашифрованных писем, где получатель может проверить, что письмо подлинное, не вскрывая конверт.

@view
func transfer_proof_example{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}(sender : felt, recipient : felt, amount : felt):
    # Тело функции, которое генерирует zk-STARK доказательство
    # ...
    return ()
end

Solidity (zkSync)

В Solidity анонимность не встроена, и это как отправка обычных писем с возможностью выбора использовать конверт или нет. Если вам нужна приватность, вы должны добавить дополнительные механизмы защиты. Например саму платформу ZkSync.

contract Transfer {
    event Transfer(address indexed from, address indexed to, uint amount);
    
    function transfer(address to, uint amount) public {
        emit Transfer(msg.sender, to, amount);
    }
}

3. Масштабируемость и эффективность

Cairo (StarkNet)

Оптимизация под Cairo представляет собой процесс, направленный на уменьшение сложности вычислений, что можно сравнить с попыткой упаковать самолет максимально компактно, чтобы сократить расход топлива.

@view
func get_optimized_sum{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}(x : felt, y : felt) -> (sum : felt):
    # В Cairo необходимо работать в ограниченном поле, так что все вычисления обязаны быть совместимыми с этим полем.
    # Это значит, что большие числа обрабатываются по-особенному, чтобы они "умещались" в это поле без переполнения.
    let (sum) = x + y
    return (sum)
end

Solidity (zkSync)

Solidity требует тщательной оптимизации под Ethereum, которая может быть похожа на попытку настроить автомобиль для гонок: каждая деталь важна и может существенно увеличить расходы на бензин.

Этот контракт использует меньше газа, поскольку использует более дешевые по газу операции и паттерны оптимизации.

contract GasOptimized {
    uint public total;
    
    function sum(uint[] memory array) public {
        for(uint i = 0; i < array.length; ++i) {
            total += array[i];
        }
    }
}

Мы разобрали лишь часть отличий Starknet и ZkSync, но этого достаточно что бы ответить на вопросы о различиях проектов. Первая часть статьи из цикла Starknet подошла к концу, надеемся это было полезно!