Initial vmc CLI
This commit is contained in:
248
docs/AKASH_INTEGRATION.md
Normal file
248
docs/AKASH_INTEGRATION.md
Normal file
@@ -0,0 +1,248 @@
|
||||
# Akash Network Integration
|
||||
|
||||
## Overview
|
||||
|
||||
VaultMesh Cloud CLI integration with [Akash Network](https://akash.network) - a decentralized compute marketplace built on Cosmos blockchain.
|
||||
|
||||
## Why Akash?
|
||||
|
||||
| Feature | Akash | Traditional Cloud |
|
||||
|---------|-------|-------------------|
|
||||
| **Cost** | 60-85% cheaper | Baseline |
|
||||
| **Model** | Reverse auction marketplace | Fixed pricing |
|
||||
| **Billing** | AKT tokens per-block | Fiat monthly/hourly |
|
||||
| **Lock-in** | None - switch providers anytime | Vendor lock-in |
|
||||
| **Censorship** | Resistant (blockchain) | Subject to provider |
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ vmc CLI │
|
||||
├─────────────────────┬───────────────────────────────────┤
|
||||
│ vmc servers ... │ vmc akash ... │
|
||||
│ (Hetzner) │ (Akash Network) │
|
||||
├─────────────────────┼───────────────────────────────────┤
|
||||
│ src/lib/hcloud.ts │ src/lib/akash/client.ts │
|
||||
│ │ src/lib/akash/wallet.ts │
|
||||
│ │ src/lib/akash/sdl.ts │
|
||||
├─────────────────────┴───────────────────────────────────┤
|
||||
│ Receipt System (src/lib/receipt.ts) │
|
||||
│ Lock System (src/lib/lock.ts) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Akash Concepts
|
||||
|
||||
### SDL (Stack Definition Language)
|
||||
|
||||
YAML-based deployment specification (like docker-compose):
|
||||
|
||||
```yaml
|
||||
version: "2.0"
|
||||
|
||||
services:
|
||||
web:
|
||||
image: nginx:latest
|
||||
expose:
|
||||
- port: 80
|
||||
as: 80
|
||||
to:
|
||||
- global: true
|
||||
|
||||
profiles:
|
||||
compute:
|
||||
web:
|
||||
resources:
|
||||
cpu:
|
||||
units: 1
|
||||
memory:
|
||||
size: 512Mi
|
||||
storage:
|
||||
- size: 10Gi
|
||||
|
||||
placement:
|
||||
akash:
|
||||
pricing:
|
||||
web: 50uakt # micro-AKT per block (~6 sec)
|
||||
|
||||
deployment:
|
||||
web:
|
||||
akash:
|
||||
profile: web
|
||||
count: 1
|
||||
```
|
||||
|
||||
### Deployment Flow
|
||||
|
||||
```
|
||||
1. CREATE DEPLOYMENT
|
||||
└─> SDL manifest → Blockchain transaction
|
||||
└─> Returns: DSEQ (deployment sequence number)
|
||||
|
||||
2. RECEIVE BIDS
|
||||
└─> Providers bid on your deployment
|
||||
└─> ~15 minutes window
|
||||
|
||||
3. ACCEPT BID → CREATE LEASE
|
||||
└─> Select provider
|
||||
└─> Escrow AKT for payment
|
||||
|
||||
4. SEND MANIFEST
|
||||
└─> Upload deployment spec to provider
|
||||
└─> Provider starts containers
|
||||
|
||||
5. MONITOR / UPDATE / CLOSE
|
||||
└─> Check status, update resources, or terminate
|
||||
```
|
||||
|
||||
### Key Identifiers
|
||||
|
||||
| ID | Description |
|
||||
|----|-------------|
|
||||
| `DSEQ` | Deployment sequence number |
|
||||
| `GSEQ` | Group sequence (usually 1) |
|
||||
| `OSEQ` | Order sequence (usually 1) |
|
||||
| `owner` | Wallet address (akash1...) |
|
||||
| `provider` | Provider address (akash1...) |
|
||||
|
||||
## CLI Commands
|
||||
|
||||
### Read-Only (Phase 1)
|
||||
|
||||
```bash
|
||||
# List all deployments for configured wallet
|
||||
vmc akash list
|
||||
|
||||
# Get deployment details
|
||||
vmc akash status <dseq>
|
||||
|
||||
# List bids for a deployment
|
||||
vmc akash bids <dseq>
|
||||
|
||||
# Check wallet balance
|
||||
vmc akash balance
|
||||
```
|
||||
|
||||
### Mutations (Phase 2)
|
||||
|
||||
```bash
|
||||
# Deploy from SDL file
|
||||
vmc akash deploy --sdl app.yaml --yes --reason "deploy web app"
|
||||
|
||||
# Close deployment (refunds remaining escrow)
|
||||
vmc akash close <dseq> --yes --reason "scaling down"
|
||||
|
||||
# Update deployment resources
|
||||
vmc akash update <dseq> --sdl app.yaml --yes --reason "increase memory"
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
# Required for queries
|
||||
AKASH_WALLET_ADDRESS=akash1... # Your wallet address
|
||||
|
||||
# Required for mutations
|
||||
AKASH_MNEMONIC="word1 word2 ... word12" # 12-word seed phrase
|
||||
|
||||
# Optional
|
||||
AKASH_NETWORK=testnet # testnet or mainnet
|
||||
AKASH_REST_ENDPOINT=https://api.akashnet.net
|
||||
```
|
||||
|
||||
### Testnet vs Mainnet
|
||||
|
||||
| Network | Endpoint | Tokens |
|
||||
|---------|----------|--------|
|
||||
| Testnet | `https://api.sandbox.akash.network` | Free test AKT |
|
||||
| Mainnet | `https://api.akashnet.net` | Real AKT |
|
||||
|
||||
Get testnet tokens: [Akash Faucet](https://faucet.sandbox.akash.network)
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
src/lib/akash/
|
||||
├── types.ts # TypeScript interfaces
|
||||
├── client.ts # REST API client
|
||||
├── wallet.ts # Mnemonic/signing (Phase 2)
|
||||
└── sdl.ts # SDL parsing (Phase 2)
|
||||
|
||||
src/commands/akash/
|
||||
├── list.ts # List deployments
|
||||
├── status.ts # Deployment details
|
||||
├── bids.ts # List bids
|
||||
├── balance.ts # Wallet balance
|
||||
├── deploy.ts # Create deployment (Phase 2)
|
||||
└── close.ts # Close deployment (Phase 2)
|
||||
|
||||
templates/akash/
|
||||
├── web.yaml # Basic web service
|
||||
├── gpu.yaml # GPU workload
|
||||
└── postgres.yaml # Database with storage
|
||||
```
|
||||
|
||||
## Receipt Structure
|
||||
|
||||
Akash mutations produce VaultMesh-grade receipts:
|
||||
|
||||
```json
|
||||
{
|
||||
"timestamp": "2025-12-26T18:30:00.000Z",
|
||||
"platform": "akash",
|
||||
"network": "testnet",
|
||||
"action": "deploy",
|
||||
"target": {
|
||||
"dseq": "12345",
|
||||
"owner": "akash1abc...",
|
||||
"provider": "akash1xyz..."
|
||||
},
|
||||
"request": {
|
||||
"sdl_hash": "sha256:abc123...",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"memory": "512Mi",
|
||||
"storage": "10Gi"
|
||||
},
|
||||
"max_price": "50uakt"
|
||||
},
|
||||
"response": {
|
||||
"tx_hash": "ABCD1234...",
|
||||
"lease_price": {
|
||||
"amount": "45",
|
||||
"denom": "uakt"
|
||||
},
|
||||
"status": "active"
|
||||
},
|
||||
"reason": "deploy web app",
|
||||
"sha256": "..."
|
||||
}
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
```json
|
||||
{
|
||||
"@akashnetwork/akash-api": "latest",
|
||||
"@cosmjs/stargate": "^0.32.0",
|
||||
"@cosmjs/proto-signing": "^0.32.0"
|
||||
}
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
- [Akash Network Docs](https://akash.network/docs/)
|
||||
- [SDL Reference](https://docs.akash.network/readme/stack-definition-language)
|
||||
- [Awesome Akash (326+ examples)](https://github.com/akash-network/awesome-akash)
|
||||
- [Akash Console (Web UI)](https://console.akash.network)
|
||||
- [API Endpoints](https://akash.network/docs/akash-nodes/api-endpoints/)
|
||||
|
||||
## Implementation Status
|
||||
|
||||
- [ ] Phase 1: Read-only commands (list, status, bids, balance)
|
||||
- [ ] Phase 2: Wallet signing + mutations (deploy, close, update)
|
||||
- [ ] Phase 3: SDL templates and validation
|
||||
- [ ] Phase 4: Multi-cloud abstraction layer
|
||||
31
docs/research/2025-12-26-hetzner-baseline-2025-12-26.md
Normal file
31
docs/research/2025-12-26-hetzner-baseline-2025-12-26.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Hetzner Baseline 2025-12-26
|
||||
|
||||
Date: 2025-12-26
|
||||
|
||||
## Context
|
||||
|
||||
- Purpose:
|
||||
- Scope:
|
||||
- Risks:
|
||||
|
||||
## Evidence
|
||||
|
||||
<!-- snapshots go here -->
|
||||
|
||||
## Findings
|
||||
|
||||
-
|
||||
|
||||
## Next actions
|
||||
|
||||
-
|
||||
|
||||
|
||||
- Source: `outputs/hetzner/servers-20251226-1814.json`
|
||||
- Generated: 2025-12-26T18:14:12.297Z
|
||||
- SHA256: `6da41678f221f56bb57bbe160b971599b75fcfd41675cf1311cc199b6c641347`
|
||||
|
||||
| Server | IP | Status | Type | Location | Created |
|
||||
|---|---|---|---|---|---|
|
||||
| vm-op-gb-a | 46.224.119.129 | running | ccx23 | Nuremberg | 2025-12-26 15:20 |
|
||||
| vm-de-op-b | 46.224.179.24 | running | ccx23 | Nuremberg | 2025-12-26 15:38 |
|
||||
Reference in New Issue
Block a user