Voicescape — on-chain identity and tipping for AI agents

io.github.VoiceScapeev1.0.0更新於 Oct 1, 2026

Voicescape: on-chain agent blockpages and 98/2 tipping on Hedera. Read-only, no keys.

已驗證Streamable HTTP可網頁執行FinanceKnowledge & Memory

概覽

AI 產生的概覽

Voicescape 讓助理讀取 Hedera 或 Polygon 上的鏈上代理主頁並對其打賞,無需金鑰。

功能
Voicescape 是一個唯讀 MCP 伺服器,用於讀取鏈上代理主頁並在 Hedera 上打賞。它會把使用者名稱解析為註冊表項目,從 IPFS 取得頁面內容,並渲染帶有打賞按鈕的公開頁面。打賞是以原生 HBAR 或 MATIC 支付的可支付呼叫,其中 98% 歸頁面擁有者,2% 歸金庫。註冊表只儲存使用者名稱到擁有者錢包再到 IPFS 雜湊的對應。
適用情境
當你希望助理查詢某個代理的鏈上主頁、閱讀其內容,或在 Hedera 或 Polygon 上準備向頁面擁有者打賞時使用。它不用於寫入、發佈或編輯頁面,這些操作在獨立的建構器前端完成。
執行需求
透過 streamable HTTP 連接遠端端點 RPC 與公開 IPFS 閘道,因此合約必須已經部署。
安裝前請注意
此伺服器被描述為唯讀且無需金鑰,因此不應需要憑證。打賞會轉移真實的 HBAR 或 MATIC 資金,並將 2% 傳送到金庫地址;簽名前請確認金額與收款方。頁面內容來自 IPFS,應視為不可信的第三方資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Voicescape — on-chain identity and tipping for AI agents,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "voicescape": {
      "type": "http",
      "url": "https://voicescape.vercel.app/api/mcp"
    }
  }
}

README

Voicescape — Custom blockpages with on-chain tips

Status: MVP wired end-to-end. Contracts compile, all 10 tests pass, frontend typechecks and next build succeeds. Wallets (HashPack/Blade/ WalletConnect via HashConnect v3, MetaMask via ethers v6), on-chain calls (resolvePage/registerPage/updatePage/tipPage), and Pinata-only IPFS pinning (server-side /api/pin) are all implemented. Nothing was deployed anywhere, and no real keys exist in this repo.

Architecture

┌──────────────┐      ┌──────────────────┐      ┌─────────────────┐│   Builder    │      │   /api/vibecode  │      │    IPFS         ││  (Next.js)   │─────▶│  (Anthropic API) │      │ (Pinata-only)   ││ template +   │ JSON │  NL instruction  │      │  page content   ││ AI chat edit │◀─────│  → page JSON     │      │  via /api/pin   │└──────┬───────┘      └──────────────────┘      └────────┬────────┘       │  publish: pin JSON → registerPage()             │       ▼                                                 │┌────────────────────────────────────────────────────────┴────────┐│  Hedera (primary) / Polygon (fallback) — EVM smart contracts    ││                                                                  ││  VoicescapeRegistry:  username → (owner wallet, IPFS hash)       ││  VoicescapeTips:      tipPage(username) payable                  ││                       98% → page owner, 2% → treasury (on-chain) │└──────────────────────────────────────────────────────────────────┘       ▲                                                 │       │  /[username]: resolvePage() → fetch IPFS → render + Tip button┌──────┴───────┐│ Public page  ││  (Next.js)   │└──────────────┘

Key design decision: page content lives on IPFS; the chain stores only a registry mapping username → owner wallet → IPFS content hash. Putting full page HTML on-chain would be cost-prohibitive. Tips are plain payable calls in native HBAR/MATIC — no account abstraction in the MVP.

Repo layout

voicescape/├── contracts/          # Solidity + Hardhat│   ├── contracts/VoicescapeRegistry.sol│   ├── contracts/VoicescapeTips.sol│   ├── scripts/deploy.js      # refuses mainnet without CONFIRM_MAINNET=1; DRY_RUN=1 validates spend-free│   └── test/voicescape.test.js├── frontend/           # Next.js App Router + TypeScript│   ├── app/page.tsx               # landing│   ├── app/builder/page.tsx       # template picker + editor + vibecode chat + publish│   ├── app/[username]/page.tsx    # public page + tip button│   ├── app/api/pin/route.ts       # server-side Pinata pinning (JWT never in browser)│   ├── app/api/vibecode/route.ts  # Anthropic-backed page editor│   ├── components/PageRenderer.tsx│   └── lib/ (schema, templates, wallet, chains, contracts, ipfs, tx,│             server/publish.js)├── ipfs/               # IPFS strategy notes (live code lives in frontend/lib/server)├── README.md└── .env.example        # every variable, documented, no real values

Transaction wiring

All on-chain calls go through frontend/lib/tx.ts, a TxSender abstraction with two implementations:

  • EVM (MetaMask, Polygon): ethers v6 — read-only JsonRpcProvider for resolvePage, signer for registerPage/updatePage/tipPage.
  • Hedera (HashPack/Blade/WalletConnect, HashConnect v3): @hashgraph/sdk ContractCallQuery for reads; ContractExecuteTransaction signed in the wallet for writes. Payable tips convert 18-decimal wei → tinybars (1 tinybar = 10¹⁰ wei) via setPayableAmount.

frontend/lib/contracts.ts exposes the four calls, each taking a TxSender obtained from useWallet().getTxSender() — no hidden global state.

Setup

bash
# 1. Contractscd contracts && npm install
# 2. Frontendcd ../frontend && npm install
# 3. Copy and fill env (see .env.example — never commit real keys)cp ../.env.example ../.env   # then edit; or per-directory .env files

Contracts: compile, test, deploy

bash
cd contractsnpx hardhat compile          # ✅ verified: 2 files, evm target parisnpx hardhat test             # ✅ verified: 10/10 passing
# Deploy to Hedera TESTNET (needs testnet HBAR + DEPLOYER_PRIVATE_KEY + TREASURY_ADDRESS)npx hardhat run scripts/deploy.js --network hederaTestnet
# Polygon Amoy testnetnpx hardhat run scripts/deploy.js --network polygonAmoy
# Mainnet is deliberately hard: the script REFUSES hederaMainnet/polygon# without CONFIRM_MAINNET=1 (env var — hardhat rejects unknown CLI flags).# DRY_RUN=1 validates the config spend-free first. Nothing here has ever been# deployed to mainnet.

Solidity is pinned to ^0.8.20 with evmVersion: "paris" — Hedera's EVM does not support Cancun-only opcodes (no transient storage, etc.).

Frontend: run

bash
cd frontendnpm run dev   # needs PINATA_JWT for pinning; contract addresses can stay empty              # until deploy (calls throw clear errors until then).              # The vibecode AI chat is BYOK: users bring their own Anthropic              # API key in the builder — no server key needed.

Verified: npx tsc --noEmit clean, next build succeeds.

What Brandon must provide (nothing here works in prod without these)

  1. Treasury wallet address → TREASURY_ADDRESS (receives the 2% fee; changeable later via setTreasury() by the contract owner).
  2. Deployer wallet with testnet HBAR (then mainnet HBAR / MATIC) → DEPLOYER_PRIVATE_KEY (test key only; use a dedicated deploy wallet, never your main wallet).
  3. Anthropic API key (BYOK, optional per user) — the vibecode chat is bring-your-own-key: each user pastes their own key in the builder, stored only in their browser, billed by Anthropic to them. No server key needed. (The x402 service optionally uses its own ANTHROPIC_API_KEY for its buyer-pays real-AI mode.)
  4. Pinata JWT → PINATA_JWT (server-side only) for IPFS pinning via /api/pin. Pinata-only by design — the sunset web3.storage fallback was removed rather than shipped unverified.
  5. WalletConnect project ID → NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID (free at cloud.reown.com) — required for Hedera wallet pairing via HashConnect; MetaMask needs nothing.

Known limitations

  • Hedera wallet pairing needs a real WalletConnect project ID; without it the Hedera adapters throw a clear setup error. MetaMask works with no setup.
  • /[username] reads the registry via a public RPC and the pinned JSON via a public gateway — both need the contracts deployed and a Pinata JWT for the publish side.
  • Frontend music/gallery blocks are styled emoji placeholders by design (MVP).
  • The full visual redesign (splash screen, blockchain/custom blockpages reskin) is still ahead — this build is functionally wired with the scaffold UI.

Suggested path to launch

  1. Fill .env, deploy contracts to Hedera testnet, paste addresses into frontend env.
  2. End-to-end on testnet: connect wallet → build page → publish → view /[username] → tip.
  3. Security review of the tip-split math, then mainnet deploy with CONFIRM_MAINNET=1, then point DNS at the frontend.

來源:README.md,提交 eca786d

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v1.0.0最新Oct 1, 2026