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:
55
contracts/governance/governance_abi.json
Normal file
55
contracts/governance/governance_abi.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"contract": "governance",
|
||||
"version": "1.0.0",
|
||||
"description": "On-chain parameter governance. The deployer becomes the admin. Anyone can propose a parameter change; the admin approves or rejects it. Used to manage gas_price, messenger_entry_fee, relay_fee, etc.",
|
||||
"methods": [
|
||||
{
|
||||
"name": "init",
|
||||
"description": "Initialize the contract, setting the caller as the admin. Must be called once after deployment.",
|
||||
"args": []
|
||||
},
|
||||
{
|
||||
"name": "propose",
|
||||
"description": "Submit a proposal to change a named parameter. Anyone can propose. Logs 'proposed: <key>=<value>'.",
|
||||
"args": [
|
||||
{"name": "key", "type": "string", "description": "Parameter name (max 64 chars)"},
|
||||
{"name": "value", "type": "string", "description": "Proposed new value (max 256 chars)"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "approve",
|
||||
"description": "Admin approves the pending proposal for a key, committing it as the live value. Logs 'approved: <key>'.",
|
||||
"args": [
|
||||
{"name": "key", "type": "string", "description": "Parameter key to approve"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "reject",
|
||||
"description": "Admin rejects and removes the pending proposal for a key. Logs 'rejected: <key>'.",
|
||||
"args": [
|
||||
{"name": "key", "type": "string", "description": "Parameter key to reject"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "get",
|
||||
"description": "Read the current live value of a parameter. Logs 'value: <value>' or 'not set: <key>'.",
|
||||
"args": [
|
||||
{"name": "key", "type": "string", "description": "Parameter key"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "get_pending",
|
||||
"description": "Read the pending proposed value. Logs 'pending: <value>' or 'no pending: <key>'.",
|
||||
"args": [
|
||||
{"name": "key", "type": "string", "description": "Parameter key"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "set_admin",
|
||||
"description": "Transfer the admin role to a new address. Only the current admin may call this. Logs 'admin: <new_admin>'.",
|
||||
"args": [
|
||||
{"name": "new_admin", "type": "string", "description": "New admin address (hex pubkey)"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user