April 19, 2023

Комиссии в zkSync

Как рассчитываются комиссии в zkSync?

В zkSync каждая транзакция имеет две составляющие комиссии: оффчейн и ончейн.

Оффчейн комиссия - это стоимость хранения состояния и генерации доказательства. Генерация фиксирована и оценивается в ~0.001 USD за перевод. Состояние - это информация обо всех аккаунтах и балансах в zkSync, а доказательство - это криптографическое свидетельство того, что транзакции действительны и согласованы с состоянием. Оффчейн комиссия зависит от использования аппаратных ресурсов и поэтому неизменна.

Ончейн комиссия - это стоимость проверки доказательства и публикации дельты состояния на Ethereum. Дельта состояния - это разница между старым состоянием и новым состоянием после применения пакета транзакций. Ончейн комиссия зависит от текущей цены на газ в сети Ethereum, которая колеблется в зависимости от загруженности сети и спроса. Ончейн комиссия в разы дешевле, чем стоимость обычных переводов ETH/ERC20 на Ethereum.

Разница между механизмом оплаты в Ethereum

Механизм оплаты в zkSync похож на Ethereum, но с некоторыми различиями. В Ethereum каждая транзакция имеет лимит газа и цену газа. Лимит газа - это максимальное количество газа, которое может потребить транзакция, а цена газа - это количество ETH, которое пользователь готов заплатить за единицу газа. Общая комиссия - это произведение лимита газа и цены газа.

В Ethereum каждый опкод (код операции) имеет свою стоимость в газе, которая отражает его сложность и потребление ресурсов. Например, сложение двух чисел стоит 3 газа, а сохранение значения стоит 20 000 газа. Чем сложнее и ресурсоемкая транзакция, тем больше газа она потребляет.

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

В отличие от Ethereum, где большинство опкодов имеют разную стоимость в газе, в zkSync большинство из них имеют похожую стоимость в газе. В общем случае, само выполнение (арифметические операции, которые не влияют на хранение) очень дешевое. Как и в Ethereum, большая часть стоимости приходится на обновление хранилища.

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

В zkSync есть дополнительный параметр, который используется для расчета стоимости транзакции - gas_per_pubdata

gas_per_pubdata в zkSync - это цена в газе за публикацию одного байта данных в Ethereum. Эти данные содержат только разницу состояния между блоками zkSync, а не все транзакции. Это позволяет сэкономить на затратах на хранение данных в Ethereum.

gas_per_pubdata определяется оператором zkSync в зависимости от текущей цены газа в сети Ethereum. Он влияет только на on-chain часть комиссии за транзакцию zkSync, которая состоит из стоимости проверки доказательства и публикации разницы состояния в Ethereum.

Бесплатные транзакции с Paymaster

Paymaster в zkSync - это умный контракт, который может оплачивать транзакции за своих пользователей, выполняя любую логику, чтобы решить, следует ли пересылать транзакцию. Например, разработчики могут позволить пользователям выполнять транзакции бесплатно или платить в токене ERC-20 вашего приложения вместо этого.

Чтобы работать с Paymaster в zkSync, вам нужно создать свой собственный контракт Paymaster и задать правила для его использования. Вы также должны проверить все требования перед выполнением любой логики. Вы можете найти подробное руководство по созданию пользовательского контракта Paymaster здесь.

Будущие оптимизации комиссий

EIP-4844 может помочь снизить комиссию за транзакции на zkSync, потому что он позволяет роллапам использовать больше данных в блоках Ethereum без увеличения стоимости. Данный подход уменьшает необходимость сжатия данных и увеличивает количество транзакций, которые могут быть обработаны за один раз.

Уменьшение gas-limit для снижения комиссии

Возможно, вы слышали лайфхак, что можно вручную уменьшить gas limit при подписи транзакции и это снизит её стоимость. Я считаю, что это штука не работает.

MM/Rabby ставит большой лимит на использование газа, и та часть, которая не будет использована, вернется вам обратно (refund). Вы можете проверить это в эксплорере zkSync в теле транзакции. Если вы вручную уменьшите газ лимит, вам просто вернется меньше. Уменьшите слишком сильно - газа может не хватить, транза не выполнится и вы просто сожжете свои ценные wei.

Но если у вас есть обоснованные доказательства, с формулами или данными из доки, можете скинуть мне в лс, исправлю статью.

Заключение

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

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

Таким образом, комиссия в zkSync зависит не только от нагрузке в самой сети, но и от цены на газ в Ethereum.

@xsNotes