Глоссарий криптографии и блокчейна
Справочник ключевых терминов криптографии и блокчейна — от математических основ до ZK-proofs. Каждый термин содержит определение, примеры кода и ссылки на уроки курса.
12 categories · 71 terms
Browse by Category
Tip: Use Cmd+K (Ctrl+K) for quick term search
Математические основы
Модулярная арифметика
Modular ArithmeticСистема арифметики, где числа «оборачиваются» при достижении модуля. Операция a mod n возвращает остаток от деления a на n. Фундамент криптографии: RSA, Диффи-Хеллман, эллиптические кривые — все строятся на модулярной арифметике.
# Python: модулярная арифметика
17 % 5 # → 2
pow(3, 7, 13) # → 3^7 mod 13 = 2187 mod 13 = 3
# Модулярное обратное
pow(7, -1, 13) # → 2 (потому что 7 × 2 = 14 ≡ 1 mod 13)Конечное поле
Finite Field (Galois Field)Множество конечного числа элементов с операциями сложения и умножения, удовлетворяющее аксиомам поля. Обозначается GF(p) или F_p для простого p. Все операции в эллиптических кривых выполняются в конечном поле.
# GF(7): поле из 7 элементов {0,1,2,3,4,5,6}
# Сложение: (5 + 4) mod 7 = 2
# Умножение: (3 × 5) mod 7 = 1
# Обратный к 3: 5 (потому что 3 × 5 = 15 ≡ 1 mod 7)Группа
GroupАлгебраическая структура: множество элементов с одной операцией, удовлетворяющей замкнутости, ассоциативности, наличию нейтрального элемента и обратных. Криптография использует циклические группы, где g^k порождает все элементы.
# Циклическая группа Z*_7 = {1,2,3,4,5,6}
# Генератор g = 3:
# 3^1=3, 3^2=2, 3^3=6, 3^4=4, 3^5=5, 3^6=1
# Порядок группы: 6Простое число
Prime NumberНатуральное число > 1, делимое только на 1 и на себя. Простые числа — основа RSA (произведение двух больших простых), конечных полей (GF(p)), и генерации параметров эллиптических кривых.
# Тест простоты (пробное деление)
def is_prime(n):
if n < 2: return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0: return False
return True
# RSA использует простые ~2048 бит
# secp256k1 использует p = 2^256 - 2^32 - 977Дискретный логарифм
Discrete LogarithmЗадача нахождения x по известным g, h и p, где g^x ≡ h (mod p). Вычислительно неразрешима для больших p — это основа безопасности Диффи-Хеллмана, DSA и криптографии на эллиптических кривых (ECDLP).
# Легко: 3^5 mod 23 = 243 mod 23 = 13
# Трудно: найти x, если 3^x ≡ 13 (mod 23)
# Ответ: x = 5, но для больших чисел
# перебор невозможен (~2^128 операций)Хеш-функции
Хеш-функция
Hash FunctionФункция, преобразующая вход произвольной длины в выход фиксированной длины (дайджест). Криптографические хеш-функции обладают тремя свойствами: устойчивость к прообразу, устойчивость ко второму прообразу, устойчивость к коллизиям.
import hashlib
# SHA-256: всегда 256 бит (32 байта)
hashlib.sha256(b'Hello').hexdigest()
# → '185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969'
# Лавинный эффект: 1 бит изменения → ~50% битов меняются
hashlib.sha256(b'hello').hexdigest()
# → '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'SHA-256
Secure Hash Algorithm 256-bitКриптографическая хеш-функция из семейства SHA-2, выдающая 256-битный дайджест. Используется в Bitcoin (double SHA-256 для блоков, Merkle-деревьев), сертификатах TLS. 64 раунда с операциями сдвига, вращения и XOR.
# Bitcoin double-SHA256
import hashlib
def double_sha256(data: bytes) -> bytes:
return hashlib.sha256(
hashlib.sha256(data).digest()
).digest()
# Заголовок блока хешируется дважды
block_hash = double_sha256(block_header)Keccak / SHA-3
Keccak (SHA-3)Хеш-функция, победившая конкурс NIST SHA-3. Построена на конструкции sponge (губка) вместо Merkle-Damgård. Ethereum использует Keccak-256 (до финализации NIST) для хеширования адресов, storage-слотов и Solidity-селекторов.
# Ethereum использует Keccak-256
from Crypto.Hash import keccak
k = keccak.new(digest_bits=256)
k.update(b'transfer(address,uint256)')
k.hexdigest()[:8] # → 'a9059cbb' (selector)
# Адрес = последние 20 байт Keccak-256(pubkey)Дерево Меркла
Merkle TreeДвоичное дерево хешей, где каждый листовой узел — хеш данных, а каждый внутренний узел — хеш конкатенации дочерних. Корень (Merkle root) фиксирует всё дерево. Позволяет эффективно доказывать включение элемента за O(log n).
# Merkle Root из 4 транзакций
# Root
# / \
# H12 H34
# / \ / \
# H1 H2 H3 H4
# | | | |
# tx1 tx2 tx3 tx4
# Proof для tx3: [H4, H12]
# Verify: H(H(H(tx3) + H4) + H12) == Root?Лавинный эффект
Avalanche EffectСвойство криптографической хеш-функции: изменение одного бита входа приводит к изменению ~50% битов выхода. Критически важно для безопасности — предотвращает предсказание хеша по частичному знанию входа.
Шифрование
AES
Advanced Encryption StandardСимметричный блочный шифр с размером блока 128 бит и ключами 128/192/256 бит. Стандарт шифрования (NIST, 2001). 10/12/14 раундов подстановки-перестановки (SubBytes, ShiftRows, MixColumns, AddRoundKey).
from Crypto.Cipher import AES
import os
key = os.urandom(32) # AES-256
nonce = os.urandom(12) # для GCM
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
ciphertext, tag = cipher.encrypt_and_digest(b'Secret')
# Расшифровка
decipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
plaintext = decipher.decrypt_and_verify(ciphertext, tag)RSA
Rivest-Shamir-AdlemanАсимметричный криптоалгоритм, безопасность которого основана на сложности факторизации произведения двух больших простых чисел. Используется для шифрования и цифровых подписей. Ключи: n = p × q, e (открытый), d (закрытый).
# Упрощённый RSA (малые числа)
p, q = 61, 53
n = p * q # 3233
phi = (p-1) * (q-1) # 3120
e = 17 # открытый экспонент
d = pow(e, -1, phi) # 2753 (закрытый)
# Шифрование: c = m^e mod n
c = pow(42, e, n) # 2557
# Расшифровка: m = c^d mod n
m = pow(c, d, n) # 42 ✓Режим CBC
Cipher Block ChainingРежим работы блочного шифра, где каждый блок открытого текста XOR-ится с предыдущим блоком шифротекста перед шифрованием. Первый блок XOR-ится с вектором инициализации (IV). Обеспечивает рассеивание, но уязвим к padding oracle атакам.
Режим GCM
Galois/Counter ModeАутентифицированный режим шифрования, объединяющий CTR-шифрование с аутентификацией Galois MAC. Обеспечивает конфиденциальность и целостность. Стандартный режим для TLS 1.3 и современных протоколов.
Цифровые подписи и кривые
Эллиптическая кривая
Elliptic CurveКривая вида y² = x³ + ax + b над конечным полем. Точки на кривой образуют абелеву группу с операцией «сложения». Безопасность основана на задаче дискретного логарифма на эллиптической кривой (ECDLP). Ключи в 256 бит эквивалентны RSA-3072.
# secp256k1 (Bitcoin/Ethereum)
# y² = x³ + 7 (a=0, b=7)
# p = 2²⁵⁶ - 2³² - 977
# n = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
# G = генераторная точка
# Приватный ключ: k (случайное 256-бит число)
# Публичный ключ: P = k × G (скалярное умножение)secp256k1
secp256k1Эллиптическая кривая, используемая в Bitcoin и Ethereum. Параметры: y² = x³ + 7 над полем F_p, где p = 2²⁵⁶ − 2³² − 977. Выбрана Сатоши Накамото. Эндоморфизм GLV позволяет ускорить верификацию подписей на ~33%.
Ed25519
Ed25519Схема подписи на кривой Curve25519 (Edwards form). Используется в Solana, Monero, SSH. Преимущества: детерминированные подписи (без случайного k), быстрая верификация, устойчивость к side-channel атакам.
ECDSA
Elliptic Curve Digital Signature AlgorithmАлгоритм цифровой подписи на эллиптических кривых. Подпись (r, s): r = (k×G).x mod n, s = k⁻¹(hash + r×privKey) mod n. Используется в Bitcoin и Ethereum для авторизации транзакций.
# Подпись транзакции (упрощённо)
k = random(1, n-1) # одноразовый nonce
R = k × G # точка на кривой
r = R.x mod n # первая часть подписи
s = k⁻¹(z + r×d) mod n # z = hash(msg), d = privkey
# signature = (r, s)
# КРИТИЧНО: повторное использование k → утечка privkey!Подпись Шнорра
Schnorr SignatureПростая и элегантная схема подписи: (s, e), где s = k − e×x, e = H(R ‖ M). Линейность позволяет агрегировать подписи (MuSig2). Добавлена в Bitcoin через Taproot (BIP 340).
Bitcoin
UTXO
Unspent Transaction OutputНеизрасходованный выход транзакции — базовая единица «владения» в Bitcoin. Каждый UTXO содержит сумму и скрипт блокировки (scriptPubKey). Транзакция потребляет UTXO (inputs) и создаёт новые (outputs). Баланс адреса = сумма всех его UTXO.
# Алиса имеет UTXO на 1.5 BTC
# Платит Бобу 1.0 BTC:
# Input: UTXO_alice (1.5 BTC)
# Output1: Bob (1.0 BTC)
# Output2: Alice (0.4999 BTC) — сдача
# Fee: 0.0001 BTC (inputs - outputs)Bitcoin Script
Bitcoin ScriptСтековый язык программирования Bitcoin (не Тьюринг-полный). scriptPubKey блокирует UTXO, scriptSig — разблокирует. Отсутствие циклов — by design для предотвращения DoS. Основные типы: P2PKH, P2SH, P2WPKH (SegWit).
# P2PKH: Pay to Public Key Hash
# scriptPubKey:
# OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
# scriptSig:
# <sig> <pubKey>
# Стек выполнения:
# [sig, pubKey] → DUP → [sig, pubKey, pubKey]
# → HASH160 → [sig, pubKey, hash]
# → EQUALVERIFY → [sig, pubKey]
# → CHECKSIG → [TRUE]Proof of Work
Proof of Work (PoW)Механизм консенсуса, где майнеры перебирают nonce, чтобы хеш блока был меньше target. Затраты энергии делают атаку 51% экономически невыгодной. Bitcoin: SHA-256 double hash, среднее время блока 10 минут, корректировка каждые 2016 блоков.
# Майнинг (упрощённо)
import hashlib
target = 2 ** (256 - difficulty_bits)
nonce = 0
while True:
header = f'{prev_hash}{merkle_root}{nonce}'
h = int(hashlib.sha256(
hashlib.sha256(header.encode()).digest()
).hexdigest(), 16)
if h < target:
print(f'Block mined! nonce={nonce}')
break
nonce += 1Lightning Network
Lightning NetworkПротокол Layer 2 над Bitcoin для мгновенных микроплатежей. Использует payment channels (двусторонние каналы) и HTLC для маршрутизации через промежуточные узлы. Транзакции off-chain, settlement on-chain.
HTLC
Hash Time-Locked ContractКонтракт с двумя условиями разблокировки: предъявление прообраза хеша (hashlock) или истечение таймаута (timelock). Основа маршрутизации в Lightning Network — позволяет атомарные платежи через цепочку каналов.
Merkle Root
Merkle RootКорневой хеш дерева Меркла всех транзакций в блоке Bitcoin. Включается в заголовок блока. Позволяет SPV-нодам верифицировать транзакцию без скачивания всего блока — достаточно Merkle proof из O(log n) хешей.
Ethereum и EVM
EVM
Ethereum Virtual MachineСтековая виртуальная машина Ethereum для выполнения смарт-контрактов. 256-битные слова, ~140 opcodes. Три области памяти: stack (1024 элемента), memory (линейная, volatile), storage (key-value, persistent). Детерминированное выполнение на всех нодах.
// EVM opcodes: PUSH1 0x60 + ADD
// Stack trace:
// PUSH1 0x0a → [10]
// PUSH1 0x14 → [10, 20]
// ADD → [30]
// PUSH1 0x00 → [30, 0]
// SSTORE → [] (storage[0] = 30)Gas
GasЕдиница измерения вычислительной работы в Ethereum. Каждый opcode имеет стоимость в gas. Транзакция задаёт gasLimit и gasPrice (или maxFeePerGas/maxPriorityFeePerGas после EIP-1559). Base fee сжигается, priority fee идёт валидатору.
// Стоимость основных opcodes
// ADD: 3 gas
// MUL: 5 gas
// SSTORE: 20000 gas (новый слот)
// SLOAD: 2100 gas (cold) / 100 gas (warm)
// CALL: 2600 gas (cold) + value transfer
// EIP-1559: fee = baseFee + priorityFee
// baseFee динамически корректируетсяSolidity
SolidityОбъектно-ориентированный язык для смарт-контрактов Ethereum. Компилируется в EVM bytecode. Типизированный, с наследованием, модификаторами, событиями. Версия 0.8+ имеет встроенную защиту от overflow.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
contract SimpleStorage {
uint256 private value;
event ValueChanged(uint256 newValue);
function set(uint256 _value) external {
value = _value;
emit ValueChanged(_value);
}
function get() external view returns (uint256) {
return value;
}
}ERC-20
ERC-20 Token StandardСтандарт взаимозаменяемых токенов: transfer, approve, transferFrom, balanceOf, totalSupply, allowance. Интерфейс из 6 функций и 2 событий. Основа DeFi — все DEX, lending протоколы работают с ERC-20.
// Ключевые функции ERC-20
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
}ERC-721
ERC-721 (NFT Standard)Стандарт невзаимозаменяемых токенов (NFT). Каждый токен уникален (tokenId). Функции: ownerOf, safeTransferFrom, approve, getApproved. Metadata через tokenURI. Используется для цифрового искусства, игровых предметов, сертификатов.
Proof of Stake
Proof of Stake (PoS)Механизм консенсуса Ethereum (после The Merge, сентябрь 2022). Валидаторы стейкают 32 ETH и выбираются для предложения блоков пропорционально стейку. Экономические наказания (slashing) за нарушения вместо затрат энергии.
// Beacon Chain параметры
// Min stake: 32 ETH
// Epoch: 32 slots × 12 sec = 6.4 min
// Finality: 2 epochs (~12.8 min)
// Slashing: min 1/32 стейка за двойную подпись
// Rewards: ~4-5% APR (зависит от активных валидаторов)Account Abstraction
Account Abstraction (ERC-4337)Стандарт, позволяющий смарт-контрактам быть аккаунтами с произвольной логикой валидации. UserOperation вместо обычных транзакций. Bundler собирает операции, EntryPoint контракт исполняет. Поддерживает social recovery, газ-спонсорство, батч-транзакции.
MPT
Modified Merkle Patricia TrieСтруктура данных Ethereum для хранения состояния. Комбинация Patricia trie (prefix tree) и Merkle tree. Четыре типа узлов: leaf, extension, branch, null. State root в заголовке блока фиксирует всё состояние сети.
Solana
Proof of History
Proof of History (PoH)Механизм упорядочивания событий в Solana через последовательную цепочку SHA-256 хешей. Не механизм консенсуса, а «криптографические часы» — каждая нода может верифицировать время между событиями. Позволяет Solana достигать ~400ms время блока.
Program (Solana)
ProgramСмарт-контракт в Solana — stateless исполняемый код. В отличие от Ethereum, программа не хранит данные: все данные в отдельных аккаунтах, передаваемых в инструкцию. Программы владеют аккаунтами через program-derived addresses (PDA).
PDA
Program Derived AddressДетерминированный адрес без приватного ключа, «принадлежащий» программе. Вычисляется из seeds и program_id. Bump seed гарантирует, что адрес не лежит на кривой Ed25519. PDA позволяет программам подписывать CPI-вызовы.
// Anchor: PDA из seeds
#[account(
init,
payer = user,
space = 8 + 32 + 8,
seeds = [b"vault", user.key().as_ref()],
bump
)]
pub vault: Account<'info, Vault>,
// JS: findProgramAddress
const [pda, bump] = PublicKey.findProgramAddressSync(
[Buffer.from('vault'), user.toBuffer()],
programId
);Anchor
Anchor FrameworkФреймворк для разработки Solana-программ на Rust. Абстрагирует сериализацию/десериализацию, проверки аккаунтов, PDA-деривацию. Макросы #[program], #[derive(Accounts)], #[account]. Аналог Hardhat/Foundry для Solana.
Tower BFT
Tower BFTВариант PBFT-консенсуса в Solana, оптимизированный с помощью Proof of History. Валидаторы голосуют за слоты; каждый голос удваивает lockout (2^k слотов). Финализация через 32 последовательных подтверждения (~12.8 сек).
DeFi
AMM
Automated Market MakerДецентрализованный механизм обмена токенов через пулы ликвидности вместо книги ордеров. Цена определяется математической формулой (x·y = k для Uniswap V2). Ликвидность предоставляют LP (liquidity providers), получающие комиссии.
# Uniswap V2: x · y = k
# Pool: 1000 ETH × 2,000,000 USDC = 2B (k)
# Цена ETH = 2,000,000 / 1000 = $2000
# Покупка 10 ETH:
# Новый y = k / (x - 10) = 2B / 990 ≈ 2,020,202 USDC
# Стоимость = 2,020,202 - 2,000,000 = $20,202
# Средняя цена = $2020.2 (slippage: 1.01%)Impermanent Loss
Impermanent Loss (IL)Потери LP по сравнению с простым холдингом токенов. При изменении цены в пуле арбитражёры перебалансируют пул. IL = 2√r/(1+r) − 1, где r = новая/старая цена. При 2x цены IL ≈ 5.7%, при 5x ≈ 25.5%. «Непостоянные», пока позиция открыта.
Concentrated Liquidity
Concentrated LiquidityМеханизм Uniswap V3: LP размещают ликвидность в выбранном ценовом диапазоне [p_a, p_b] вместо (0, ∞). Капитал-эффективность в 4000x при узком диапазоне. Позиция представлена как NFT (ERC-721).
Oracle
OracleСистема доставки off-chain данных (цены, погода, рандом) в смарт-контракты. Chainlink — ведущая сеть оракулов с децентрализованными потоками данных. TWAP (Time-Weighted Average Price) — on-chain оракул Uniswap.
Flash Loan
Flash LoanБеззалоговый заём, который берётся и возвращается в одной транзакции. Если заём не возвращён — вся транзакция откатывается. Применение: арбитраж, ликвидации, рефинансирование залогов. Используются и для атак (oracle manipulation).
Ликвидация
LiquidationПринудительное закрытие undercollateralized позиции в lending протоколе. Health Factor < 1 → ликвидатор погашает часть долга и получает залог со скидкой (liquidation bonus, ~5-10%). Критически важный механизм для устойчивости DeFi.
Стейблкоин
StablecoinТокен с привязкой к стабильному активу (обычно $1 USD). Типы: фиатный (USDC, USDT — резервы в банке), крипто-обеспеченный (DAI — overcollateralized), алгоритмический (нестабильные, крах UST). Основа DeFi-экономики.
Токеномика
TokenomicsЭкономический дизайн токена: распределение (team, investors, community), вестинг, механизмы инфляции/дефляции, utility (governance, fees, staking rewards). Влияет на долгосрочную устойчивость и стоимость проекта.
Безопасность
Reentrancy
Reentrancy AttackАтака, при которой вредоносный контракт повторно вызывает функцию жертвы до обновления состояния. Причина взлома The DAO (2016, $60M). Защита: паттерн checks-effects-interactions, модификатор nonReentrant, transfer вместо call.
// Уязвимый код:
function withdraw() external {
uint bal = balances[msg.sender];
(bool ok,) = msg.sender.call{value: bal}("");
require(ok);
balances[msg.sender] = 0; // ← слишком поздно!
}
// Безопасный (checks-effects-interactions):
function withdraw() external {
uint bal = balances[msg.sender];
balances[msg.sender] = 0; // ← сначала обновляем
(bool ok,) = msg.sender.call{value: bal}("");
require(ok);
}MEV
Maximum Extractable ValueПрибыль, которую валидатор/builder может извлечь через переупорядочивание, вставку или цензурирование транзакций в блоке. Типы: арбитраж (полезный), frontrunning (вредный), sandwich attacks, ликвидации. PBS (Proposer-Builder Separation) разделяет роли.
Integer Overflow
Integer Overflow/UnderflowПереполнение целого числа: uint8(255) + 1 = 0 (overflow), uint8(0) - 1 = 255 (underflow). До Solidity 0.8 — молчаливое переполнение, использовалось для кражи токенов. С 0.8+ — автоматический revert. Unchecked{} отключает проверку для оптимизации gas.
Slashing
SlashingНаказание валидатора в PoS за нарушение протокола: двойная подпись (proposer equivocation), двойное голосование (attester equivocation), surround voting. Минимальный штраф: 1/32 стейка. Коррелированные нарушения усиливают штраф (до 100% стейка).
Аудит смарт-контрактов
Smart Contract AuditСистематический анализ кода на уязвимости: ручной review + автоматические инструменты (Slither — статический анализ, Mythril — symbolic execution). Методология: scope → automated scan → manual review → findings report → remediation.
Governance и масштабирование
DAO
Decentralized Autonomous OrganizationОрганизация, управляемая смарт-контрактами и голосованием держателей токенов. Proposal → голосование → timelock → исполнение. OpenZeppelin Governor — стандартная реализация. Примеры: Uniswap DAO, Aave DAO, MakerDAO.
Governance Token
Governance TokenERC-20 токен с функцией delegate() для участия в голосовании. Voting power = количество делегированных токенов. ERC-20Votes (OZ) — расширение с checkpoints для снимков voting power на момент создания proposal.
Timelock
TimelockКонтракт-задержка между одобрением proposal и его исполнением. Даёт участникам время на exit (продажу токенов, вывод ликвидности) перед потенциально опасным изменением. OZ TimelockController: минимальная задержка 24-48 часов.
Optimistic Rollup
Optimistic RollupРешение Layer 2: транзакции выполняются off-chain, данные публикуются on-chain. «Оптимистичный» — транзакции считаются валидными по умолчанию. Challenge period (~7 дней) для fraud proof. Примеры: Optimism (OP Stack), Arbitrum (Nitro).
ZK Rollup
ZK RollupРешение Layer 2 с криптографическими доказательствами валидности (validity proofs). Каждый batch транзакций сопровождается ZK-proof, верифицируемым on-chain. Мгновенная финальность (без challenge period). Примеры: zkSync Era, StarkNet, Scroll.
Трилемма блокчейна
Blockchain TrilemmaГипотеза (Виталик Бутерин): невозможно одновременно достичь decentralization + security + scalability. Bitcoin/Ethereum жертвуют масштабируемостью. Solana жертвует децентрализацией. Layer 2 — попытка обойти трилемму.
Bridge
Cross-chain BridgeПротокол передачи активов и данных между блокчейнами. Типы: lock-and-mint, burn-and-mint, atomic swaps. Мосты — крупнейший вектор атак в крипто ($2B+ потерь). Верификация: мультисиг, light clients, ZK proofs.
Zero-Knowledge Proofs
Zero-Knowledge Proof
Zero-Knowledge Proof (ZKP)Криптографическое доказательство, позволяющее Prover убедить Verifier в истинности утверждения, не раскрывая никакой дополнительной информации. Три свойства: completeness (честный prover убедит), soundness (нечестный не обманет), zero-knowledge (verifier ничего не узнает).
zk-SNARK
Zero-Knowledge Succinct Non-Interactive Argument of KnowledgeZK-proof с постоянным размером (~200 байт) и быстрой верификацией (~мс) независимо от сложности вычисления. Non-interactive: prover отправляет одно сообщение. Требует trusted setup (Groth16) или universal setup (PLONK).
zk-STARK
Zero-Knowledge Scalable Transparent Argument of KnowledgeZK-proof без trusted setup (transparent). Использует FRI protocol и Reed-Solomon коды. Доказательства больше (~50-100KB), но quantum-resistant и не требуют «церемонии доверия». StarkNet/StarkEx построены на STARKs.
R1CS
Rank-1 Constraint SystemСистема ограничений вида A·w ⊙ B·w = C·w, куда преобразуется арифметическая схема для ZK-proof. Каждый constraint: (линейная_комбинация) × (линейная_комбинация) = (линейная_комбинация). Circom компилирует circuit → R1CS → QAP → Groth16 proof.
Trusted Setup
Trusted Setup (Ceremony)Процедура генерации публичных параметров для zk-SNARK (Groth16). Создаёт «токсичные отходы» (tau), которые должны быть уничтожены. Powers of Tau: n участников, достаточно 1 честного. Zcash Sapling, Hermez — примеры масштабных церемоний.
Circom
CircomDSL для описания арифметических схем (circuits) для zk-SNARK. Компилирует в R1CS + witness generator (WASM/C++). Библиотека circomlib содержит готовые шаблоны: Poseidon hash, comparators, binary operations. Используется с snarkjs для генерации proof.
// circom 2.0: простой multiplier circuit
pragma circom 2.0.0;
template Multiplier() {
signal input a;
signal input b;
signal output c;
c <== a * b; // constraint: a × b = c
}
component main = Multiplier();Commitment Scheme
Commitment SchemeДвухфазный протокол: commit (фиксация значения в «конверте») и reveal (открытие). Свойства: hiding (нельзя узнать значение до reveal), binding (нельзя изменить после commit). Pedersen commitment: C = v·G + r·H.
Эвристика Фиата-Шамира
Fiat-Shamir HeuristicТрансформация интерактивного протокола в неинтерактивный: challenge от verifier заменяется хешем transcript (e = H(commitment ‖ message)). Безопасность в модели случайного оракула. Основа всех non-interactive ZK-proof систем.
Индексация и данные
Индексация блокчейна
Blockchain IndexingПроцесс извлечения, трансформации и хранения on-chain данных в базу для быстрых запросов. Прямые RPC-вызовы медленны и ограничены. Индексаторы (The Graph, Subsquid) обрабатывают блоки, декодируют события и строят queryable API.
GraphQL
GraphQLЯзык запросов для API: клиент запрашивает ровно те поля, которые нужны. Нет over-fetching/under-fetching. The Graph и Subsquid предоставляют GraphQL endpoint для запроса индексированных данных. Schema-first подход.
# Запрос ERC-20 трансферов
query {
transfers(
orderBy: blockNumber_DESC
limit: 10
where: { from_eq: "0xAlice..." }
) {
id
from
to
value
blockNumber
timestamp
}
}Subgraph
Subgraph (The Graph)Единица индексации в The Graph: manifest (subgraph.yaml) + schema (GraphQL) + mappings (AssemblyScript handlers). Graph Node обрабатывает события и заполняет хранилище. Deploy в Subgraph Studio или self-hosted ноду.
Subsquid
SubsquidМодульная платформа индексации: Subsquid Network (P2P данные) + squid processor (TypeScript ETL) + GraphQL сервер. Batch-обработка до 50000 блоков/сек. TypeORM для PostgreSQL-хранилища. Поддержка EVM, Substrate, Solana.
Event Log
Event Log (Ethereum)Записи, генерируемые инструкцией LOG0..LOG4 в EVM. Topics (indexed параметры, до 3) + data (non-indexed). Bloom filter в заголовке блока позволяет быстро фильтровать блоки по наличию события. Основа для индексации.
// Solidity event
event Transfer(
address indexed from, // topic[1]
address indexed to, // topic[2]
uint256 value // data
);
// topic[0] = keccak256("Transfer(address,address,uint256)")
// = 0xddf252ad...Term not found? Use Cmd+K to search the entire course or refer to module lessons for more detailed information. The glossary is regularly updated with new terms.