chore: initial commit for v0.0.1
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
This commit is contained in:
314
docs/api/chain.md
Normal file
314
docs/api/chain.md
Normal file
@@ -0,0 +1,314 @@
|
||||
# Chain API
|
||||
|
||||
Эндпоинты для чтения блокчейна: блоки, транзакции, балансы, идентичности, валидаторы.
|
||||
|
||||
## Статистика сети
|
||||
|
||||
### `GET /api/netstats`
|
||||
|
||||
Агрегированная статистика сети.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/netstats
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"total_blocks": 1024,
|
||||
"total_txs": 4821,
|
||||
"validator_count": 3,
|
||||
"relay_count": 1,
|
||||
"total_supply_ut": 10000000000
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Блоки
|
||||
|
||||
### `GET /api/blocks?limit=N`
|
||||
|
||||
Последние `N` блоков (по умолчанию 20).
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8081/api/blocks?limit=10"
|
||||
```
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"index": 1024,
|
||||
"hash": "a1b2c3...",
|
||||
"prev_hash": "...",
|
||||
"timestamp": 1710000000,
|
||||
"validator": "03abcd...",
|
||||
"tx_count": 3,
|
||||
"total_fees_ut": 15000
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/block/{index}`
|
||||
|
||||
Детали блока по высоте.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/block/1024
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"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).
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8081/api/txs/recent?limit=5"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/tx/{txid}`
|
||||
|
||||
Транзакция по ID.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/tx/tx-abc123def456
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "tx-abc123",
|
||||
"block_index": 1024,
|
||||
"type": "CALL_CONTRACT",
|
||||
"from": "03abcd...",
|
||||
"timestamp": 1710000000,
|
||||
"payload": { ... },
|
||||
"signature": "..."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `POST /api/tx`
|
||||
|
||||
Отправить подписанную транзакцию.
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8081/api/tx \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"TRANSFER","from":"03...","payload":{...},"signature":"..."}'
|
||||
```
|
||||
|
||||
```json
|
||||
{"id": "tx-abc123", "status": "accepted"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Chain API v2
|
||||
|
||||
Расширенный API для работы с транзакциями.
|
||||
|
||||
### `GET /v2/chain/transactions/{tx_id}`
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/v2/chain/transactions/tx-abc123
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"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` |
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8081/v2/chain/accounts/03abcd.../transactions?limit=20&order=desc"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `POST /v2/chain/transactions/draft`
|
||||
|
||||
Создать черновик транзакции для подписания.
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8081/v2/chain/transactions/draft \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"from":"03...","to":"04...","amount_ut":1000000}'
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"tx": { ... },
|
||||
"sign_bytes_hex": "...",
|
||||
"sign_bytes_base64": "..."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `POST /v2/chain/transactions`
|
||||
|
||||
Отправить подписанную транзакцию (расширенный формат).
|
||||
|
||||
```bash
|
||||
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).
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8081/api/address/DCabc123?limit=20&offset=0"
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"address": "DCabc123...",
|
||||
"pub_key": "03abcd...",
|
||||
"balance_ut": 9500000,
|
||||
"tx_count": 12,
|
||||
"transactions": [...],
|
||||
"has_more": false
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Идентичности и валидаторы
|
||||
|
||||
### `GET /api/identity/{pubkey|addr}`
|
||||
|
||||
Информация об идентичности.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/identity/03abcd...
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"pub_key": "03abcd...",
|
||||
"address": "DCabc123...",
|
||||
"nick": "alice",
|
||||
"x25519_pub": "...",
|
||||
"registered_at": 100,
|
||||
"stake_ut": 1000000000
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/validators`
|
||||
|
||||
Список активных валидаторов.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/validators
|
||||
```
|
||||
|
||||
```json
|
||||
[
|
||||
{"pub_key": "03...", "stake_ut": 1000000000},
|
||||
{"pub_key": "04...", "stake_ut": 1000000000}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/node/{pubkey|addr}?window=N`
|
||||
|
||||
Информация об узле (статистика, репутация).
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/node/03abcd...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/relays`
|
||||
|
||||
Зарегистрированные relay-провайдеры.
|
||||
|
||||
```bash
|
||||
curl http://localhost:8081/api/relays
|
||||
```
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"pub_key": "03...",
|
||||
"relay_pub": "...",
|
||||
"fee_ut": 100,
|
||||
"endpoint": ""
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Live Events
|
||||
|
||||
### `GET /api/events`
|
||||
|
||||
Server-Sent Events поток новых блоков и транзакций.
|
||||
|
||||
```bash
|
||||
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..."}
|
||||
```
|
||||
Reference in New Issue
Block a user