DChain single-node blockchain + React Native messenger client. Core: - PBFT consensus with multi-sig validator admission + equivocation slashing - BadgerDB + schema migration scaffold (CurrentSchemaVersion=0) - libp2p gossipsub (tx/v1, blocks/v1, relay/v1, version/v1) - Native Go contracts (username_registry) alongside WASM (wazero) - WebSocket gateway with topic-based fanout + Ed25519-nonce auth - Relay mailbox with NaCl envelope encryption (X25519 + Ed25519) - Prometheus /metrics, per-IP rate limit, body-size cap Deployment: - Single-node compose (deploy/single/) with Caddy TLS + optional Prometheus - 3-node dev compose (docker-compose.yml) with mocked internet topology - 3-validator prod compose (deploy/prod/) for federation - Auto-update from Gitea via /api/update-check + systemd timer - Build-time version injection (ldflags → node --version) - UI / Swagger toggle flags (DCHAIN_DISABLE_UI, DCHAIN_DISABLE_SWAGGER) Client (client-app/): - Expo / React Native / NativeWind - E2E NaCl encryption, typing indicator, contact requests - Auto-discovery of canonical contracts, chain_id aware, WS reconnect on node switch Documentation: - README.md, CHANGELOG.md, CONTEXT.md - deploy/single/README.md with 6 operator scenarios - deploy/UPDATE_STRATEGY.md with 4-layer forward-compat design - docs/contracts/*.md per contract
5.4 KiB
5.4 KiB
Chain API
Эндпоинты для чтения блокчейна: блоки, транзакции, балансы, идентичности, валидаторы.
Статистика сети
GET /api/netstats
Агрегированная статистика сети.
curl http://localhost:8081/api/netstats
{
"total_blocks": 1024,
"total_txs": 4821,
"validator_count": 3,
"relay_count": 1,
"total_supply_ut": 10000000000
}
Блоки
GET /api/blocks?limit=N
Последние N блоков (по умолчанию 20).
curl "http://localhost:8081/api/blocks?limit=10"
[
{
"index": 1024,
"hash": "a1b2c3...",
"prev_hash": "...",
"timestamp": 1710000000,
"validator": "03abcd...",
"tx_count": 3,
"total_fees_ut": 15000
},
...
]
GET /api/block/{index}
Детали блока по высоте.
curl http://localhost:8081/api/block/1024
{
"index": 1024,
"hash": "a1b2c3...",
"prev_hash": "...",
"timestamp": 1710000000,
"validator": "03abcd...",
"transactions": [
{
"id": "tx-abc123",
"type": "TRANSFER",
"from": "03...",
"to": "04...",
"amount_ut": 1000000,
"fee_ut": 1000
}
]
}
Транзакции
GET /api/txs/recent?limit=N
Последние транзакции (по умолчанию 20).
curl "http://localhost:8081/api/txs/recent?limit=5"
GET /api/tx/{txid}
Транзакция по ID.
curl http://localhost:8081/api/tx/tx-abc123def456
{
"id": "tx-abc123",
"block_index": 1024,
"type": "CALL_CONTRACT",
"from": "03abcd...",
"timestamp": 1710000000,
"payload": { ... },
"signature": "..."
}
POST /api/tx
Отправить подписанную транзакцию.
curl -X POST http://localhost:8081/api/tx \
-H "Content-Type: application/json" \
-d '{"type":"TRANSFER","from":"03...","payload":{...},"signature":"..."}'
{"id": "tx-abc123", "status": "accepted"}
Chain API v2
Расширенный API для работы с транзакциями.
GET /v2/chain/transactions/{tx_id}
curl http://localhost:8081/v2/chain/transactions/tx-abc123
{
"id": "tx-abc123",
"block_index": 1024,
"payload": { ... },
"payload_hex": "...",
"signature_hex": "..."
}
GET /v2/chain/accounts/{account_id}/transactions
Транзакции для аккаунта с пагинацией.
Query параметры:
| Параметр | По умолчанию | Описание |
|---|---|---|
limit |
100 | Максимум (max 1000) |
after_block |
— | Только блоки после N |
before_block |
— | Только блоки до N |
order |
desc |
asc или desc |
curl "http://localhost:8081/v2/chain/accounts/03abcd.../transactions?limit=20&order=desc"
POST /v2/chain/transactions/draft
Создать черновик транзакции для подписания.
curl -X POST http://localhost:8081/v2/chain/transactions/draft \
-H "Content-Type: application/json" \
-d '{"from":"03...","to":"04...","amount_ut":1000000}'
{
"tx": { ... },
"sign_bytes_hex": "...",
"sign_bytes_base64": "..."
}
POST /v2/chain/transactions
Отправить подписанную транзакцию (расширенный формат).
curl -X POST http://localhost:8081/v2/chain/transactions \
-H "Content-Type: application/json" \
-d '{"tx":{...},"signature":"..."}'
Адреса
GET /api/address/{addr}?limit=N&offset=N
Информация об адресе (DC-адрес или hex pubkey).
curl "http://localhost:8081/api/address/DCabc123?limit=20&offset=0"
{
"address": "DCabc123...",
"pub_key": "03abcd...",
"balance_ut": 9500000,
"tx_count": 12,
"transactions": [...],
"has_more": false
}
Идентичности и валидаторы
GET /api/identity/{pubkey|addr}
Информация об идентичности.
curl http://localhost:8081/api/identity/03abcd...
{
"pub_key": "03abcd...",
"address": "DCabc123...",
"nick": "alice",
"x25519_pub": "...",
"registered_at": 100,
"stake_ut": 1000000000
}
GET /api/validators
Список активных валидаторов.
curl http://localhost:8081/api/validators
[
{"pub_key": "03...", "stake_ut": 1000000000},
{"pub_key": "04...", "stake_ut": 1000000000}
]
GET /api/node/{pubkey|addr}?window=N
Информация об узле (статистика, репутация).
curl http://localhost:8081/api/node/03abcd...
GET /api/relays
Зарегистрированные relay-провайдеры.
curl http://localhost:8081/api/relays
[
{
"pub_key": "03...",
"relay_pub": "...",
"fee_ut": 100,
"endpoint": ""
}
]
Live Events
GET /api/events
Server-Sent Events поток новых блоков и транзакций.
curl -N http://localhost:8081/api/events
data: {"type":"block","index":1025,"hash":"...","tx_count":2}
data: {"type":"tx","id":"tx-abc","block":1025,"from":"03..."}