Разработка системы на модульном стеке (execution + DA + settlement)
Монолитный блокчейн делает всё сам: исполняет транзакции, обеспечивает доступность данных, финализирует состояние. Модульный подход разбивает эти функции между специализированными слоями. Результат — экосистема, где можно выбирать компоненты как модули: Celestia для DA, Ethereum для settlement, OP Stack или Arbitrum Orbit для execution. Это не теория — так построены десятки mainnet L2 и L3. Мы предлагаем разработку таких решений под ключ. Свяжитесь с нами для консультации — оценим ваш проект и поможем выбрать оптимальный стек.
Типичный запрос: «хотим свой appchain с низкими комиссиями и кастомной логикой, но с безопасностью Ethereum». Это правильно сформулированная задача, и модульный стек — правильный ответ. Наша команда имеет опыт в блокчейн-разработке и запущенных mainnet-проектах.
Почему модульный стек дешевле монолитного?
Главный аргумент — экономия на layer DA. Использование Celestia вместо Ethereum для публикации batch-данных снижает стоимость на 90–95%. Для high-volume rollup это экономит тысячи долларов в месяц. Celestia дешевле Ethereum в 20 раз при сопоставимой безопасности для большинства сценариев. Согласно официальной документации Celestia, Data Availability Sampling позволяет лёгким нодам проверять доступность данных без полной загрузки блоков.
Какие слои входят в модульный стек?
Execution Layer
Исполняет транзакции, поддерживает состояние. Это ваш chain — со своими правилами, gas token, precompiles.
OP Stack (Optimism, Base, Zora) — самый зрелый фреймворк для Optimistic Rollup-based L2/L3. EVM-эквивалентность. op-geth + op-node + op-batcher + op-proposer.
Arbitrum Orbit — Arbitrum-based L2/L3. Поддерживает Stylus (WASM смарт-контракты на Rust/C++). Более гибкая кастомизация gas и permission models.
Polygon CDK — ZK-based chain development kit. zkEVM под капотом. Более сложен в эксплуатации, но ZK finality вместо fraud window.
Sovereign rollup через Rollkit — execution layer с любым execution environment, settlement в любой цепи (или без settlement). Максимальная гибкость, минимальная зрелость.
Data Availability Layer
Блоки должны быть доступны для скачивания — иначе fraud proofs и state reconstruction невозможны. DA layer хранит данные транзакций (calldata или blobs).
Ethereum L1 (EIP-4844 blobs) — максимальная security, наивысшая стоимость. После EIP-4844: ~3–6 blobs per block, каждый blob ~128KB, стоимость blob gas отдельна от execution gas. Blobs удаляются через ~18 дней, но commitment (KZG) остаётся навсегда.
Celestia — специализированный DA layer. Data availability sampling (DAS): light nodes проверяют доступность через random sampling, не скачивая весь блок. Стоимость на порядки ниже Ethereum blobs при сопоставимых security guarantees для большинства use cases.
EigenDA — DA layer поверх Ethereum через EigenLayer restaking. Экономическая безопасность от рестейкнутого ETH. Значительно выше throughput чем Ethereum L1 при более высоких security гарантиях (на сегодня).
Avail — DA layer с data availability sampling, forkless upgrades. Хорошая альтернатива Celestia.
Settlement Layer
Финализация: определяет, что является каноническим состоянием rollup. Обрабатывает withdrawals, resolves disputes.
Для большинства проектов — Ethereum mainnet через L1 bridge contract. Альтернатива для L3 — использовать L2 как settlement layer (например, Arbitrum One как settlement для Orbit chain).
Как интегрировать Celestia DA в OP Stack?
Покажу конкретную конфигурацию, которую используют в production. Пошаговая инструкция:
- Разверните Celestia light node и получите auth token.
- Зарезервируйте уникальный namespace (29 байт).
- Реализуйте AltDA provider, реализующий интерфейсы GetInput и SetInput.
- Настройте op-batcher на использование Celestia как DA layer.
- Деплойте на Ethereum L1 контракты OptimismPortal и L2OutputOracle.
AltDA provider для Celestia
// Реализация AltDA provider для Celestia
type CelestiaAltDA struct {
da *CelestiaDA
}
func (c *CelestiaAltDA) GetInput(ctx context.Context, commitment []byte) ([]byte, error) {
height, err := decodeCommitment(commitment)
if err != nil {
return nil, err
}
return c.da.Retrieve(ctx, height)
}
func (c *CelestiaAltDA) SetInput(ctx context.Context, data []byte) ([]byte, error) {
height, err := c.da.Submit(ctx, data)
if err != nil {
return nil, err
}
return encodeCommitment(height), nil
}
Конфигурация op-batcher для Celestia
[da]
type = "celestia"
rpc = "http://celestia-light-node:26658"
auth_token = "${CELESTIA_AUTH_TOKEN}"
namespace = "0x0000000000000000000000000000000000yournamespace"
L1 Settlement контракты
На Ethereum деплоятся два контракта. OptimismPortal — входная/выходная точка для cross-domain сообщений и withdrawals. L2OutputOracle — хранит state roots предложенные proposer'ом.
contract L2OutputOracle {
struct OutputProposal {
bytes32 outputRoot;
uint128 timestamp;
uint128 l2BlockNumber;
}
OutputProposal[] public l2Outputs;
address public proposer;
uint256 public constant FINALIZATION_PERIOD = 7 days;
function proposeL2Output(
bytes32 _outputRoot,
uint256 _l2BlockNumber,
bytes32 _l1BlockHash,
uint256 _l1BlockNumber
) external payable {
require(msg.sender == proposer, "Not proposer");
require(blockhash(_l1BlockNumber) == _l1BlockHash, "Bad L1 block");
l2Outputs.push(OutputProposal({
outputRoot: _outputRoot,
timestamp: uint128(block.timestamp),
l2BlockNumber: uint128(_l2BlockNumber)
}));
}
}
Как кастомизировать execution layer?
Custom precompiles
Precompiles — предкомпилированные контракты по фиксированным адресам с нативной реализацией. Например, добавить BLS12-381 операции или кастомный хэш-алгоритм:
var CustomPrecompiles = map[common.Address]vm.PrecompiledContract{
common.HexToAddress("0x0000000000000000000000000000000000000100"): &blsG1Add{},
common.HexToAddress("0x0000000000000000000000000000000000000101"): &customHashFunction{},
}
type blsG1Add struct{}
func (c *blsG1Add) RequiredGas(input []byte) uint64 { return 500 }
func (c *blsG1Add) Run(input []byte) ([]byte, error) {
if len(input) != 128 {
return nil, errors.New("invalid input length")
}
p1 := new(bls12381.G1Affine)
p2 := new(bls12381.G1Affine)
p1.Unmarshal(input[:64])
p2.Unmarshal(input[64:])
result := new(bls12381.G1Affine).Add(p1, p2)
return result.Marshal(), nil
}
Gas token кастомизация
OP Stack поддерживает Custom Gas Token — native gas token, отличный от ETH. Это позволяет использовать ваш ERC-20 токен как gas. Ограничение: custom gas token должен быть задеплоен на L1, иметь стандартный ERC-20 интерфейс и не иметь transfer fees (rebasing/fee-on-transfer токены не поддерживаются).
Fee структура и sequencer revenue
User Transaction Fee = (base_fee + priority_fee) * gas_used + L1 data fee
Sequencer Revenue = collected fees - DA costs - L1 costs
При использовании Celestia вместо Ethereum для DA, L1 data fee снижается на 90–95% для большинства транзакций.
Что входит в работу
- Анализ требований и выбор стека (OP Stack, Celestia, Ethereum) с обоснованием.
- Разработка и деплой core контрактов (bridge, L2OutputOracle, OptimismPortal).
- Интеграция кастомного DA provider для Celestia.
- Настройка execution layer (кастомные precompiles, gas token).
- Развёртывание тестнета, написание тестов и стресс-тестирование.
- Аудит смарт-контрактов (bridge, fault proof) и исправление уязвимостей.
- Помощь в запуске mainnet, мониторинг и поддержка после запуска.
- Документация по архитектуре, деплою и эксплуатации.
Сравнение DA слоёв
Детальное сравнение
| Параметр | Ethereum L1 (blobs) | Celestia | EigenDA |
|---|---|---|---|
| Security | Максимальная | Высокая (DAS) | Экономическая (restaking) |
| Стоимость | Высокая | Низкая | Средняя |
| Throughput | ~0.5 MB/s | ~1 MB/s | ~10 MB/s |
| Время финализации | ~15 мин | ~30 сек | ~10 сек |
| Зрелость | Production | Production | Beta |
Декомпозиция по срокам
| Фаза | Содержание | Срок |
|---|---|---|
| Design | Выбор стека, namespace, токеномика, bridge design | 2–3 нед |
| Core setup | op-stack deployment, L1 contracts, genesis | 3–4 нед |
| DA integration | Celestia/EigenDA connector, batcher config | 2–3 нед |
| Testnet | Публичный тестнет, bridge testing, stress test | 3–4 нед |
| Security | Аудит bridge контрактов, fault proof testing | 4–6 нед |
| Mainnet | Деплой, sequencer ops, monitoring | 2–3 нед |
Критический путь — аудит bridge контрактов. Bridge — это где живут реальные деньги пользователей, и именно здесь большинство L2 находило критические уязвимости. Экономить на аудите bridge нельзя.
Итого: 16–23 недели от старта до mainnet. Команда: 2–3 backend инженера с опытом Go, 1 Solidity разработчик, DevOps/инфраструктурный инженер.
Готовы обсудить ваш проект и предложить оптимальное решение. Получите консультацию — свяжитесь с нами.







