Files
dchain/docs/development/README.md
vsecoder 546d2c503f chore(release): clean up repo for v0.0.1 release
Excluded from release bundle:
- CONTEXT.md, CHANGELOG.md (agent/project working notes)
- client-app/ (React Native messenger — tracked separately)
- contracts/hello_go/ (unused standalone example)

Kept contracts/counter/ and contracts/name_registry/ as vm-test fixtures
(referenced by vm/vm_test.go; NOT production contracts).

Docs refactor:
- docs/README.md — new top-level index with cross-references
- docs/quickstart.md — rewrite around single-node as primary path
- docs/node/README.md — full rewrite, all CLI flags, schema table
- docs/api/README.md — add /api/well-known-version, /api/update-check
- docs/contracts/README.md — split native (Go) vs WASM (user-deployable)
- docs/update-system.md — new, full 5-layer update system design
- README.md — link into docs/, drop CHANGELOG/client-app references

Build-time version system (inherited from earlier commits this branch):
- node --version / client --version with ldflags-injected metadata
- /api/well-known-version with {build, protocol_version, features[]}
- Peer-version gossip on dchain/version/v1
- /api/update-check against Gitea release API
- deploy/single/update.sh with semver guard + 15-min systemd jitter
2026-04-17 14:37:00 +03:00

105 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Разработка контрактов
DChain поддерживает два способа написания WASM-контрактов.
## Выбор подхода
| | TinyGo SDK | Бинарный WASM |
|-|-----------|--------------|
| **Язык** | Go | Go (кодогенератор) |
| **Инструменты** | TinyGo 0.30+ | Стандартный Go |
| **Сложность** | Низкая | Высокая |
| **Размер .wasm** | ~30100 KB | 5002000 байт |
| **Отладка** | Стандартная | Сложная |
| **Рекомендуется** | Новые контракты | Минимальные/системные |
## TinyGo SDK (рекомендуется)
Пишите контракты как обычный Go-код:
```go
package main
import dc "go-blockchain/contracts/sdk"
//export increment
func increment() {
v := dc.GetU64("counter")
dc.PutU64("counter", v+1)
dc.Log("incremented")
}
func main() {}
```
Подробное руководство: [TinyGo SDK](tinygo.md)
## Бинарный WASM
Генераторы в `contracts/*/gen/main.go` создают минимальные WASM-модули вручную через LEB128-кодирование. Размер получается ~500 байт, но написание сложное.
Подробнее: [Бинарный WASM](binary-wasm.md)
## Документация по разделам
| Документ | Содержание |
|---------|-----------|
| [TinyGo SDK](tinygo.md) | Установка, SDK API, сборка, деплой, пример |
| [Host functions](host-functions.md) | Полный справочник 14 host-функций |
| [Межконтрактные вызовы](inter-contract.md) | call_contract, composability, глубина |
| [Бинарный WASM](binary-wasm.md) | LEB128, секции, кодогенератор |
| [Gas и Treasury](gas-model.md) | Gas модель, treasury, governance |
## Общая структура контракта
```
contracts/
mycontract/
main.go # TinyGo источник
mycontract_abi.json # ABI (описание методов)
mycontract.wasm # Скомпилированный бинарник
```
## ABI формат
```json
{
"contract": "mycontract",
"version": "1.0.0",
"description": "...",
"methods": [
{
"name": "method_name",
"description": "...",
"args": [
{"name": "param1", "type": "string"},
{"name": "amount", "type": "uint64"}
]
}
]
}
```
Поддерживаемые типы: `string`, `uint64`, `bytes`.
## Деплой контракта
```bash
client deploy-contract \
--key node.json \
--wasm mycontract.wasm \
--abi mycontract_abi.json \
--node http://localhost:8080
```
В Docker (single-node):
```bash
docker exec dchain /usr/local/bin/client deploy-contract \
--key /keys/node.json \
--wasm /path/to/mycontract.wasm \
--abi /path/to/mycontract_abi.json \
--node http://localhost:8080
```
Успешный деплой логирует `contract_id: <hex16>`.