nibgate について
Nibgateは、クリエイター所有サイト向けのコンテンツ発見・決済レイヤーです。人やAIエージェントが検証済み作品を見つけ、有料コンテンツを解放できます。コンテンツは自サイトに置いたまま、ハブがメタデータと評価シグナルを索引化し、リポジトリにはプライベート共有を解決するMCPサーバーも含まれます。
主な機能
- 01検証済みサイトとコンテンツメタデータ
- 02発見ハブと公開アクティビティ台帳
- 03x402とUSDCによる有料コンテンツ制御
- 04アクセスルールと解放用のクリエイターSDK
- 05暗号化されたクイック共有リンク
- 06評価とレピュテーションシグナル
活用シーン
- 01自サイトで無料または有料コンテンツを公開
- 02検証済みのクリエイター作品を発見
- 03有料記事や共有コンテンツへのアクセス制御
- 04決済、解放、評価のアクティビティ確認
MCP 対応
Nibgate MCPサーバーは、機械可読なクイック共有マニフェストを解決する`resolve_share`ツールを公開します。マニフェストはプライベート共有へのアクセスを記述しますが、READMEには他のMCPツールの詳細はありません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.nibgate.xyz/mcpclaude mcp add --transport http fortunesayspump-nibgate https://api.nibgate.xyz/mcp{"mcpServers":{"fortunesayspump-nibgate":{"type":"http","url":"https://api.nibgate.xyz/mcp"}}}Cursor で開く{"servers":{"fortunesayspump-nibgate":{"type":"http","url":"https://api.nibgate.xyz/mcp"}}}VS Code で開く{"mcpServers":{"fortunesayspump-nibgate":{"type":"http","url":"https://api.nibgate.xyz/mcp"}}}{"mcpServers":{"fortunesayspump-nibgate":{"serverUrl":"https://api.nibgate.xyz/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | いいえ | タイトル、説明、タグ、サイト名、ドメインを対象とする検索語。 |
| skip | integer | いいえ | ページネーションのオフセット。 |
| sort | enum | いいえ | 並べ替え順。デフォルトはトレンド順です。trending | best-sellers | hot-new |
| type | enum | いいえ | コンテンツタイプのフィルター。article | music | video | image | document | all |
| limit | integer | いいえ | 結果の最大件数(デフォルトは 20)。 |
詳細
Nibgate — 有料コンテンツのためのオープンプロトコル
Nibgate は、クリエイター自身が所有するコンテンツのための、検証済みコンテンツの発見、ロック解除、評価を実現するレイヤーです。クリエイターは自身のドメインにコンテンツを保持します。Nibgate はソースを検証し、構造化された公開メタデータをインデックス化し、ロック解除や支払いのシグナルを記録します。コンテンツを閉じたマーケットプレイスに移すことなく、人間や AI エージェントが質の高いコンテンツを見つけられるよう支援します。
Arc と x402 プロトコル上に構築され、メインネットで稼働中です。テストネットとのミラーリングに対応し、2 種類の決済方法を提供します。Circle Gateway(EIP-3009 ファシリテーター)と、クリエイターの受取先への USDC 直接送金です。
主要パッケージ:
- SDK(
packages/nibgate/) — あらゆるクリエイターのサイトで有料コンテンツを制御するための@nibgate/sdknpm パッケージです。ブラウザーとサーバーのエントリーポイント、x402/Gateway によるロック解除、イベントストリーミング、オンチェーン評価を備えています。両方の決済方法で使用する共通のアクセス制御ルール(canAccess、normalizeWhitelist、paidCutoffWallets)と、暗号化プリミティブ(crypto.js)が含まれます。 - ウォレット(
packages/wallet/) —./reactエントリーを備えた@nibgate/walletnpm パッケージです。共通の Reown AppKit(AppKit + wagmi)ウォレットプロバイダー、SIWE サインイン、ハブのヘッダー、Nibshare、Subblogs で使われる<NibgateUnlock>/GatewayWalletによる単一チェックアウトを提供します。 - Subblogs(
subblogs/) —*.nibgate.xyzのクリエイター向けフルブログプラットフォームです。記事、写真、音楽、動画、ドキュメント、無料投稿、有料投稿に対応します。Next.js フロントエンド(ポート 3002)、Express バックエンド(ポート 4000)、PostgreSQL を使用します。SIWE ウォレット認証、ホワイトリスト/招待限定のティア、保存時の AES-256-GCM 暗号化に対応します。 - ハブ(
frontend/+backend/) — メインのnibgate.xyzアプリです。公開サイト、クリエイターダッシュボード、Explore によるコンテンツ発見、分析、API、Nibshare クイック共有機能、ウィジェットホスティングを提供します。 - CLI(
packages/cli/) — ローカル開発、サイト検証、ハブ接続のための内部ツールです。 - ドキュメント(
docs/) — docs.nibgate.xyz のドキュメントサイトです。
プロダクトの考え方
オープンウェブには、有料で質の高いリソースを見つけるためのコンテンツ発見標準が必要です。Nibgate は、次のことを示す検証済みレイヤーを提供します。
- このドメインはこのクリエイターによって管理されています
- このコンテンツはこのルートに存在します
- このコンテンツは人間またはエージェントがロック解除できます
- このクリエイターは、検証済みの活動に基づく実際の評価シグナルを持っています
- この支払い履歴は、そのリソースに設定された受取先へ直接送金されます
クリエイター自身が所有するサイトが引き続き信頼できる情報源となり、ハブは検証済みコンテンツを取り巻く公開インデックス、分析画面、評価グラフとなります。
次の 4 つの要素が連携して構成されています。
- ウィジェット:クリエイターはサイトにスクリプトを 1 つ貼り付けます。ドメインの所有権を証明し、訪問者/セッションのコンテキストを作成して、ブラウザーで安全に扱えるページアクティビティを Nibgate に送信します。
- パッケージ:クリエイターは
@nibgate/sdknpm パッケージをインストールし、自身のサイトにある実際のコンテンツを制御します。パッケージはコンテンツ、ロック解除、支払いのライフサイクルを把握し、ウィジェットブリッジを通じてイベントを報告します。 - ハブ:
nibgate.xyzはクリエイターダッシュボード、コンテンツ発見画面、分析レイヤーです。サイトを検証し、コンテンツメタデータを保存し、指標を集約して、プロフィール/サイト/コンテンツ/収益のデータを表示します。 - 発見レイヤー:Explore、公開プロフィール、コンテンツメタデータ、レシート、評価シグナルにより、検証済みのクリエイターコンテンツを人々や AI エージェントが読めるようにします。
リポジトリの構成
backend/ Express hub API — payment verification, hosted-pay resolution,
metrics, site/manifest sync, revenue keeper (fee-wallet sweeps)
frontend/ Next.js hub UI — public site, dashboard, Explore, leaderboards
subblogs/ Subblogs — full blog platform for creators (Express+Prisma + Next.js)
packages/ @nibgate/sdk npm package + wallet package + CLI tooling
contracts/ Solidity + Foundry: reputation contracts, per-creator
GatewayFeeWallet / GatewayFeeWalletFactory (revenue model),
and TipHoldingFactory / TipHoldingWallet (no-key per-domain
tip boxes: deterministic CREATE2, keeper release/refund)
docs/ Nextra docs site for docs.nibgate.xyz
scripts/ E2E flows and deployment tooling (reputation, revenue factory)
e2e/ Playwright browser harness (extension + tip flows; run outputs ignored)
extension/ MV3 wallet extension — content detection, tip/hold/refund UI, JEV fallback
jev/ JEV decision layer — deterministic decide/selectMany engine plus
the real JEV decisions-model client (OpenRouter)
tipping/ Nib Tip design record (DESIGN/SPEC/FEES/NON-NIBGATE-CREATORS) —
protocol reference; implementation lives in packages/nibgate,
backend tip routes, contracts, and the extension
dr-nib/ Dr. Nib research agent — backend service + hub UI + spend/escrow
rails (see dr-nib/README.md for the Done/Partial/Pending status)
mcp-registry/ MCP registry record for the hub MCP server
nibgate.config.json Sample CLI config (routes to local demo content)
ローカル専用で、追跡対象外:video/、v2-labs/、revenue-model/(調査/概念実証)、E2E ツールと実行出力(e2e/)。.gitignore を参照してください。
ワークスペースの構成
backend/ & frontend/(ハブ)
ハブは、Nibgate のメインアプリおよび API サーフェスです。クリエイター向けダッシュボード、公開サイト、コンテンツを探すためのディレクトリとして機能します。
/exploreすべてのクリエイターコンテンツを掲載した、ディスカバリー用の石積み状グリッドです。/ledger公開アクティビティフィードです。すべてのサイトにおけるアンロック、支払い、チップ(保留中の入金済みホールドを含む)、評価、nibshare を検索・フィルタリングできます。返金はマイナスのチップ項目として表示されます。/pending-tipsNibgate に登録されていない外部サイトを含む、任意の完全一致ドメインに対する入金済み・未請求チップの公開確認ページです。デプロイ先のネットワークに従い、nibgate.xyzではメインネット、testnet.nibgate.xyzではテストネットを使用します。/discovery.mdエージェント向けのガイダンスです。Nibgate のエンドポイント、支払いフロー、AI エージェント向けの評価フローを平易な言葉で説明します。/auth/*Sign-In with Ethereum(SIWE)認証です。/hub/*ハブへの接続、同期、検証、イベントの取り込みを行います。/hub/ledger?domain=Xサイトごとのアクティビティを確認するための、任意のドメインフィルターに対応した公開台帳エンドポイントです。/hub/tips/held?domain=X未請求チップを完全一致ドメインで検索する公開エンドポイントです。対応するネットワークのメインネットまたはテストネットの API ホストを使用してください。
subblogs/(サブブログ — クリエイター向けブログプラットフォーム)
これは、有料コンテンツの閲覧を制限する機能を備えたクリエイター向けブログの例です。2 つのサービスがあります。
subblogs/backend/(Express + Prisma) — コンテンツページを提供し、ハブ経由で支払いを処理して、アンロック証明を発行します。R2 が設定されている場合、すべての投稿本文とメディアは保存時に暗号化されます(無料・有料の両方)。無料コンテンツはサーバー側で復号して誰でも閲覧できるようにし、有料コンテンツはオンチェーン証明の検証後にのみ提供します。アクセスエンドポイント(GET /api/<type>/<slug>。GET /api/nibgate/accessの短縮ミラー)はプレミアムコンテンツの唯一の信頼できる情報源であり、証明の検証後にのみ投稿本文を返します。各投稿ページはエージェント向けの自己記述機能も備えています。GET /api/nibgate/manifest?path=/<type>/<slug>は投稿ごとの機械可読なコントラクトを返します(<link rel="alternate">要素およびLinkレスポンスヘッダーで通知されます)。subblogs/frontend/(Next.js) — 公開ブログの UI です。プレミアムコンテンツが HTML に含まれることは決してありません。NibgateUnlockコンポーネントは、証明の検証後に保護されたアクセスエンドポイントからコンテンツを取得します。管理パネル(/admin/posts)には投稿ごとの統計シートがあり、各投稿のアンロック数、USDC 建ての収益、基となるレシートを確認できます。
重要なルール: GET /api/blog/posts/:slug エンドポイントは、無料投稿の本文を復号して返し、有料投稿からは body を取り除きます。プレミアムコンテンツの本文が返されるのは、有効な証明の提示後にアクセスエンドポイント(GET /api/<type>/<slug> または GET /api/nibgate/access)を呼び出した場合のみです。これにより、有料コンテンツがページソースに含まれるのを防ぎながら、無料コンテンツは引き続き公開されます。
nibshare(クイック共有のゲート付きコンテンツ)
ハブ内でホストされるクイック共有レールです。ウォレットの所有者は、暗号化されたペイロードを公開し、任意で価格やウォレットの許可リストを設定できます。有効期限の設定は必須で、最長7日後までです。nibgate.xyz/ns/<slug> の短縮リンクが発行されます。独自ドメインは不要です。本文とメディアは、Cloudflare R2 に保存される際、常に AES-256-GCM で暗号化されます。ロック解除には、サーバー側の復号プロキシを介した Arc 上の x402 USDC を使用します(公開共有は無料でそのまま閲覧でき、招待制の共有はセッションで確認された許可リスト内のウォレットが必要です。有料共有は支払い後に閲覧できます)。これはプライベートな製品です。コンテンツは公開ディスカバリーやレピュテーションにはインデックス登録されず、プライバシーに配慮した金融台帳の記録には共有リンクが含まれません。共有ページはエージェント向けに自己記述型になっています。GET /nibshare/:slug/manifest(https://api.nibgate.xyz/ns/<slug> からもアクセスできる短縮読み取りルート)は、機械可読なコントラクトを返します(<meta name="nibgate:*">、JSON-LD、data-nibgate-* 属性、<link rel="alternate"> 要素、Link レスポンスヘッダーで告知)。また、Nibgate MCP サーバーはこれを resolve_share ツールとして公開します。
サーバーのソースは backend/src/server/nibshare/{controller,service,utils,routes}.js にあります。アクセス判定は SDK の access-policy.js(所持ルール、拒否前の支払い処理、冪等なレシート付与)に委譲し、Subblogs と同じ権利付与/禁止/取り消しの仕組みを提供します。
ドキュメントは独立したトップレベルフォルダーではなく、実装と同じ場所にあります。
backend/src/server/nibshare/README.md— 製品、脅威モデル、認証、環境変数backend/src/server/nibshare/API.md— HTTP コントラクトbackend/src/server/nibshare/STORAGE.md— R2 の構成、暗号化、メディア配信backend/src/server/nibshare/STORAGE-TIER-PLAN.md— 計画中の Arweave/Lit ティア(未リリース)
packages/nibgate/
これは公開クリエイターパッケージです。意図的に小規模で、フレームワークに依存しません。
npm install @nibgate/sdk
エージェントとコーディングアシスタントは、クリエイターのサイトを編集する前に、簡潔な統合ガイドを確認してください。
- パッケージ内のコピー:
node_modules/@nibgate/sdk/SKILL.md - 公開版のコピー:
https://nibgate.xyz/skill.md
担当する機能:
- ブラウザーのエントリーポイント:
createGate(...)、nibgate.content(...)、nibgate.view(...)、nibgate.unlockStarted(...)、nibgate.unlockCompleted(...)、nibgate.paymentCompleted(...) - サーバーのエントリーポイント:
createNibgateServer(...)、protect(...)、nibgateServer.accessFor(...)、支払いチャレンジ、ロック解除トークンの検証 - Hub ウィジェットの準備が整うまでのイベントのキューイング
- コンテンツタイプを
music、video、article、image、documentに正規化 - 人間とエージェント向けのアクセス方針:
free、paid、blocked - MVP では
one_timeから始め、後から従量制の閲覧、ストリーミング、パス、エージェントの利用枠に対応できるようにしたロック解除方針
packages/cli/
公開されている @nibgate/cli パッケージは、クリエイター向けのセットアップおよび運用ヘルパーを提供します。担当する機能:
npx @nibgate/cli- ローカルの状態確認とセットアップ確認
- 設定ファイル生成ヘルパー
- ハブへの接続とドメイン検証のコマンド
- 今後追加予定の、ウィジェット/パッケージ設定に関するスキャフォールディング
公開されている @nibgate/sdk パッケージは、ルート保護、支払いチャレンジのメタデータ、ロック解除トークン、パッケージのイベント API を担当します。
demo/
ローカル専用で、このリポジトリでは追跡されません。クリエイター所有のサイトのように動作するオリジンアプリで、ハブのコードを汚すことなく、インストールフロー、DB に基づくコンテンツのマッピング、パッケージのイベント、保護されたコンテンツのフローを検証するために使用します。実際のテンプレート例は demo/examples/* に配置してください。各例は、見覚えのあるスターターレポジトリから始め、Nibgate パッケージの統合を追加します。チェックアウトに demo/ ディレクトリがない場合は、以下のデモコマンドをスキップしてください。それ以外はすべて、デモなしで実行できます。
ネットワークとデプロイ
Nibgate は、並行する 2 つのスタックを運用しています。メインネットは本番環境であり、テストネットはステージング用にこれを反映します。アイデンティティはスタック間で同期されますが、資金とコンテンツは同期されません。サイト(ドメイン、検証、オーナーウォレット、パブリッシャープロフィール)、ユーザーアカウント(同じウォレットなら、どこでも同じ管理者)、公開済みの編集ブログ記事は testnet<->mainnet 間でミラーリングされます。コンテンツカタログ、ロック解除、支払い、評価、メトリクス、セッションはスタックごとに保持されます。すべてのコンテンツ/台帳の行にはハブが付与した network タグがあり、別のスタックのチェーンであることが証明されたレシートは拒否されます。
| メインネット | テストネット | |
|---|---|---|
| ハブサイト | https://nibgate.xyz | https://testnet.nibgate.xyz |
| ハブ API | https://api.nibgate.xyz | https://testnet-api.nibgate.xyz |
| サブブログ | https://{sub}.nibgate.xyz | https://{sub}.testnet.nibgate.xyz |
| サブブログ API | https://api-subblogs.nibgate.xyz | https://testnet-api-subblogs.nibgate.xyz |
| シェア | https://nibgate.xyz/ns/{slug} | https://testnet.nibgate.xyz/ns/{slug} |
| Arc チェーン | 5042(eip155:5042) | 5042002(eip155:5042002) |
| ゲートウェイ API | https://gateway-api.circle.com | https://gateway-api-testnet.circle.com |
| Railway | nibgate-mainnet プロジェクト | nibgate-testnet プロジェクト(Hub、Dr. Nib、統合済み Subblogs バックエンド)。統合サービスの検証後、旧式の単独 nibgate-subblogs-testnet プロジェクトは削除されました |
| Vercel | nibgate-frontend、nibgate-subblogs-mainnet | nibgate-frontend-testnet、nibgate-subblogs-testnet |
選択は環境変数で制御され、デフォルトはテストネットです。
- バックエンド:
NIBGATE_NETWORK=mainnet|testnet(デフォルトはtestnet。変数が設定されていなくても、実際の資金が移動することはありません) - フロントエンド:
NEXT_PUBLIC_NIBGATE_NETWORK=mainnet|testnet - 値ごとの明示的な環境変数(RPC URL、コントラクトアドレス、オリジン)は、常にネットワークのデフォルトより優先されます。
- Railway の RPC の順序には意図があります。Canteen はテストネットのプライマリ、dRPC はメインネットのプライマリであり、対応する公式 Arc エンドポイントは同じチェーン上の最終フォールバックです。使用する箇所では
ARC_RPC_URL、NIBGATE_PAYMENT_RPC_URL、NIBGATE_REPUTATION_RPC_URLをプライマリに設定し、ARC_RPC_FALLBACK_URLSとNIBGATE_RPC_MIRRORSの両方を公式エンドポイントに設定してください。Dr. Nib ではさらに、独立した署名前のチェーンおよびブロック高の確認用に、公式エンドポイントをDRNIB_RPC_BACKUPに設定します。
チェーンパラメーターは、やむを得ず複数の場所に存在します(公開済みの @nibgate/wallet は非公開の @nibgate/internal をインポートできず、Subblogs はローカルの SDK/ウォレットのソースを参照し、ops スクリプトは単独で実行されます)。正規のレジストリは packages/internal/src/networks.js です。ミラーは packages/wallet/src/chain.js、subblogs/backend/src/lib/network.js、subblogs/frontend/src/lib/network.ts、scripts/network.mjs、contracts/deployments/arc-mainnet.json にあります。pnpm networks:check(pnpm test の一部でもあります)は、これらに不整合があるとビルドを失敗させます。詳細はネットワークを参照してください。
実行
Node 22 を使い、リポジトリのルートから一度だけインストールします。
npx [email protected] install --frozen-lockfile
バックエンドを起動します。
npm run dev:backend
フロントエンドを起動します。
npm run dev:frontend
クリエイター用のサンプルオリジンを起動します(ローカル限定の demo/ ディレクトリが必要です。チェックアウトに存在しない場合はスキップしてください)。
cd demo/examples/next-mdx-blog
NIBGATE_SITE_ORIGIN=http://localhost:4301 npm run dev -- -p 4301
次を開きます。
環境
バックエンドの変数:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/railway
CORS_ORIGIN=https://nibgate.xyz,https://testnet.nibgate.xyz,http://localhost:3001
BLOG_OWNER_WALLET=0x558e7BFaF2Cf1A494F44E50D92431Afc060c9D12
RESEND_API_KEY=your_resend_api_key
RESEND_NEWSLETTER_SEGMENT_ID=seg_your_newsletter_segment_id
RESEND_NEWSLETTER_TOPIC_ID=topic_your_newsletter_topic_id
METRIC_HASH_SALT=generate_a_long_random_secret
TRACKING_RATE_LIMIT_MAX=180
TRACKING_RATE_LIMIT_WINDOW_MS=60000
TRACKING_VIEW_DEDUPE_WINDOW_MS=1800000
MANIFEST_SYNC_INTERVAL_MS=900000
MANIFEST_SYNC_RETRY_AFTER_MS=1800000
MANIFEST_SYNC_BATCH_SIZE=100
本番環境では、Railway Postgres データベースをバックエンドサービスに接続し、Railway の DATABASE_URL の値を使用してください。Prisma のデータソースは現在 PostgreSQL のみをサポートしているため、すべてのバックエンド環境で DATABASE_URL を設定する必要があります。
BLOG_OWNER_WALLET は、/dashboard/blog から投稿の作成、編集、公開、下書き保存、削除を行える唯一の署名済みウォレットです。ほかのウォレットはエディター API にアクセスできません。
ニュースレターの登録情報は、まずローカルの NewsletterSubscriber テーブルに保存されます。RESEND_API_KEY が設定されている場合、バックエンドは各登録情報を Resend Contacts にも同期します。RESEND_NEWSLETTER_SEGMENT_ID と RESEND_NEWSLETTER_TOPIC_ID は任意ですが、ニュースレター登録者をトランザクション連絡先と分けてグループ化するため、設定を推奨します。Resend の環境変数がない場合も、登録情報は保留中の同期ステータスでローカルに保存されます。
METRIC_HASH_SALT は、分析データの重複排除に使う、プライバシーを保護したサーバー側の訪問者ハッシュを作成するために使用されます。本番環境では安定したシークレットを使用してください。ローテーションすると、ユニーク訪問者の継続性がリセットされます。追跡の重複排除期間は、ページ/リソースの閲覧が30分、コンテンツ登録と支払い/ロック解除の支払い ID が24時間、時間イベントが5分、エンゲージメントイベントが30秒です。バックエンドでは、サイト/IP/訪問者のバケットごとに /hub/evt(従来の /api/hub/track エイリアスも引き続き使用できます)へのリクエストもレート制限されます。
マニフェスト同期により、クリエイターがタイトル、説明、画像、価格、タグ、ルートを変更した際に、Explore とダッシュボードのメタデータが最新の状態に保たれます。バックエンドは、検証済みサイトのマニフェストを /nibgate.json、/.well-known/nibgate.json、/v1/nibgate/manifest、または /v1/nibgate/nibgate.json から読み取ります。クリエイターは /dashboard/sites から手動でサイトを更新することもできます。ウィジェット/パッケージからのイベントトラフィックも、安定したコンテンツ ID が再び確認されるたびに、同じコンテンツレコードを更新します。
フロントエンドの変数:
NEXT_PUBLIC_API_URL=https://api.nibgate.xyz # mainnet; testnet builds use https://testnet-api.nibgate.xyz
NEXT_PUBLIC_NIBGATE_NETWORK=mainnet # or testnet (default testnet — a missing var never moves real money)
ローカルで実行する場合は、NEXT_PUBLIC_API_URL をローカルのバックエンドに設定してください。これにより、/api/* のリライトと、公開されているサーバー側レンダリングのブログページが同じ API からデータを取得します。
使い捨てのローカル開発データベースでは、意図的に変更した Prisma スキーマを同期し、バックエンドを実行する前にクライアントを再生成してください。
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/railway \
pnpm --filter @nibgate/cli exec prisma db push
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/railway \
pnpm --filter @nibgate/cli exec prisma generate
本番環境の起動時に、データベーススキーマのプロビジョニングや変更は行われません。新規インストールやスキーマのアップグレードでは、新しいバックエンドがトラフィックを処理する前に、正しいデータベースを対象とした、個別にレビュー済みのプロビジョニング/マイグレーション手順が必要です。SQL またはスキーマ差分を確認し、バックアップと権限を確認してください。また、破壊的な起動時フォールバックは使用しないでください。Prisma クライアントの生成だけではテーブルは作成されません。これは Hub、Subblogs、Dr. Nib に適用されます(dr-nib/DEPLOY.md を参照)。現在の SDK/RPC リリースではスキーマ変更は不要です。Hub では、network が null の従来のコンテンツ/レシート/評価/メトリック/イベント行にタグを付ける、既存の冪等な起動時バックフィルが維持されます。スキーマを変更しない起動でも、既存のデータ更新は引き続き行われます。
CLI
便利なローカルコマンド:
npm run routes
npx @nibgate/cli status
npx @nibgate/cli connect
npx @nibgate/cli verify
npx @nibgate/cli event resource_view premium-article
npx @nibgate/cli balance
npx @nibgate/cli deposit 1.0
パッケージ向けの形式:
npx @nibgate/cli init
npx @nibgate/cli dev
npx @nibgate/cli routes
製品フロー
Nibgate は、検証済みのディスカバリーイベントアーキテクチャを採用しています。
Creator site
Hub widget
- verifies ownership
- owns siteId/token/session context
- sends events to the backend
Nibgate package
- gates real creator content
- knows content metadata and unlock/payment lifecycle
- calls window.nibgateHub when content is viewed, unlocked, or paid for
Nibgate backend
- validates siteId/token/origin
- stores content metadata
- stores metric events
- aggregates dashboard data
- updates discovery and reputation signals
クリエイターが自身のサイトに @nibgate/sdk をインストールすると、このパッケージが以下を担当します。
- サーバー側のアクセスチェックにより、クリエイターのオリジン上の有料ルートとゲート付きコンテンツを保護する
- x402/Circle のロック解除ロジックを処理する
music、video、article、image、documentのコンテンツメタデータを登録するresource_view、unlock_started、unlock_completed、payment_completedなどのコンテンツ単位のイベントを発行する- ユーザーが保護されたコンテンツを操作したときに、リソース ID、タイトル、価格、パスを Hub ウィジェットに渡す
実際のブログや CMS を利用したサイトでは、ゲーティングフィールドはクリエイター自身のデータベースまたは管理画面にあるコンテンツレコードの隣に置く必要があります。Nibgate は、そのレコードをリソースにマッピングします。
{
id,
title,
type,
price,
path,
access: {
humans: 'free' | 'paid' | 'blocked',
agents: 'free' | 'paid' | 'blocked'
},
unlock: {
mode: 'one_time'
}
}
これは、Next.js、React と API バックエンドの組み合わせ、Express、NestJS、Remix、SvelteKit、Astro SSR、MDX サーバーレンダリング、ヘッドレス CMS アプリ、従来型 CMS のプラグイン環境で動作します。通常の静的 HTML でも、検証とイベント送信にウィジェットを使用できますが、保護されたコンテンツには引き続きサーバー、エッジ関数、API ルート、または署名付き URL が必要です。
本番環境でのライブフロー — 一度支払えば、いつまでも読めます。
pay once -> verify receipt/proof -> issue unlock token -> serve content -> report receipt to Nibgate
このパッケージには unlock ポリシーフィールドが用意されているため、今後のバージョンでクリエイター側の統合形式を変更せずに、より高度なモードを追加できます。
unlock: { mode: 'one_time' } // live in production (Arc mainnet + testnet)
unlock: { mode: 'metered_stream' } // later: pay by watched seconds/minutes
unlock: { mode: 'metered_read' } // later: pay by section/paragraph/token window
unlock: { mode: 'time_pass' } // later: pay for time-limited access
unlock: { mode: 'agent_quota' } // later: pay for agent reads/crawls
現在、本番環境で利用できるのは one_time のみです。それ以外は今後追加されるモードです。
Hub ウィジェットは以下を担当します。
- クリエイターのドメインにスクリプトタグを 1 つ追加して、サイトの所有権を証明する
- ページビューを自動的に送信する
data-nibgate-*属性またはnibgate:*メタタグからコンテンツマーカーを検出するwindow.nibgateHub.registerContent(...)、window.nibgateHub.track(...)、およびロック解除・支払い用ヘルパーを公開し、パッケージが個々のリソースイベントをストリーミングできるようにする- バックエンドに送信する前に、サイト ID、公開トークン、訪問者 ID、セッション ID、URL、パス、リファラー、スクロール深度を付加する
Hub は以下を担当します。
- サイトを登録する
- クリエイターのホームページを取得し、ウィジェットトークンを確認してドメインの所有権を検証する
- ページビュー、コンテンツビュー、ロック解除、収益、パフォーマンスのイベントを取り込む
- ストリーミングされたパッケージ/ウィジェットイベントからリソースメタデータをインデックス化する
これにより、実際のコンテンツとアクセス制御はクリエイターのドメイン上に置いたまま、Hub にはディスカバリー、分析、収益、評判に必要なメタデータ、イベント、レシート、集計データのみが保存されます。
ディスカバリーとレピュテーション
Nibgate のディスカバリーは、単なる公開ギャラリーではありません。人間やエージェントが安心して閲覧、引用、ロック解除でき、支払い先として選べる、検証済みのクリエイター所有コンテンツを集めたインデックスです。
公開台帳(/ledger)では、すべての閲覧、ロック解除、支払い、評価を、オンチェーンの証明リンク付きでリアルタイムに監査可能なフィードとして確認できます。各行を展開すると、ウォレットアドレス、トランザクションハッシュ、タイムスタンプなどの詳細を確認できます。統計の合計値は更新時にアニメーション表示されます。
ハブでは、以下を使ってコンテンツをランキング表示したり、絞り込んだりできます。
- 検証済みのドメイン所有権
- コンテンツの種類:
music、video、article、image、document - クリエイターのプロフィールとユーザー名
- ページビュー、コンテンツビュー、ロック解除の試行回数、支払い済みのロック解除回数
- x402 / Arc メインネット・テストネットの直接的なレシートメタデータ
- 新しさ、タグ、ソースルート、リファラーのシグナル
- 実際のインタラクションに紐づく、今後の人間やエージェントからのフィードバック
レピュテーションはコンテンツ単位で始まります。現在の MVP では、コンテンツ、サイト、クリエイターのレピュテーションは、検証済みのパッケージ/ウィジェットのアクティビティに、支払い、ロック解除レシート、インデックス化されたオンチェーン評価の強いシグナルを組み合わせて算出されます。レピュテーションに関わる重要な操作には証明が必要です。支払い/ロック解除レシートにはプロバイダーの証明が必要で、評価はロック解除の適格性が確認された後に、オンチェーンのレピュテーションコントラクト/インデクサーを通じて受け付けられます。
想定されるロック解除モデルは、引き続きクリエイターのサイトを基盤とします。
- クリエイターが自身のサイトからコンテンツメタデータを公開する
- 購入者またはエージェントが、x402、Gateway、ウォレットからの直接支払い、またはサイト所有の別の決済手段を通じてコンテンツを支払い、ロック解除する
- パッケージがロック解除/支払いレシートを Nibgate に報告する
- 検証済みのレシートによって、そのウォレットが評価を送信できるようになる
- ウォレットがコンテンツに対するオンチェーン評価トランザクションを送信する
- Nibgate が評価イベントをインデックス化し、ロック解除の証明と照合して、分析コンテキストとあわせてレピュテーションを更新する
公開されるコンテンツのレピュテーションは、0.0-5.0 の星評価で表示できます。サイトのレピュテーションとクリエイターのレピュテーションは、コンテンツ評価に、検証の健全性、一貫性、レシート、ソースの品質を加味して集約されます。
クリエイターのレピュテーションは、検証済みサイトと、その配下のコンテンツを所有するウォレット/アカウントに対する 1-100 のスコアとします。つまり、実際のロック解除、支払いレシート、適格なウォレット/エージェントからの評価、有益なエージェントのフィードバック、検証済みのソースに紐づくコンテンツ品質のシグナルによって、クリエイターの信頼度が高まります。また、クリエイター全体のレピュテーションが高くても、新しい特定のコンテンツは信頼を獲得している途中という場合もあります。
ローカル接続フロー
- ウォレットで Hub にサインインします。
- ダッシュボードからサイトを追加します。
- 生成されたウィジェットスクリプトをコピーします。
- クリエイターサイトの HTML に貼り付けます。
- クリエイターサイトをデプロイします。
- Hub で「確認」をクリックします。
ウィジェットスニペットの形式:
<script
async
src="https://www.nibgate.xyz/widget.js"
data-nibgate-site="SITE_ID"
data-nibgate-token="PUBLIC_SITE_TOKEN"
data-nibgate-api="https://api.nibgate.xyz"
></script>
コンテンツレベルの登録とトラッキングは、ウィジェットを通じてパッケージから送信する必要があります。
import { createGate } from '@nibgate/sdk';
const premiumGuide = createGate({
id: "premium-guide",
title: "Premium Guide",
type: "article",
price: "0.01",
path: "/premium-guide",
access: {
humans: "paid",
agents: "paid"
},
unlock: {
mode: "one_time"
}
});
premiumGuide.content();
premiumGuide.view();
await premiumGuide.unlock(async () => {
// Run payment and server-side verification here.
return {
paymentId: "payment_123",
paymentProvider: "arc-mainnet",
txHash: "0x...",
chainExplorerUrl: "https://arcscan.app/tx/0x...",
revenue: 0.01,
currency: "USDC"
};
});
高度な統合では、低レベルのブリッジも引き続き利用できます。
import { nibgate } from '@nibgate/sdk';
nibgate.unlockCompleted("premium-guide", {
revenue: 0.01,
currency: "USDC"
});
パッケージは内部で window.nibgateHub と通信します。非同期ウィジェットの読み込みが完了する前にクリエイターのコードが実行された場合、パッケージイベントはブラウザー内でキューに入れられ、ウィジェットが利用可能になった時点で送信されます。
サーバー側の保護機能は @nibgate/sdk/server にあります。
import { createCircleGatewayServer } from '@nibgate/sdk/server';
const nibgateServer = createCircleGatewayServer({
secret: process.env.NIBGATE_SECRET,
recipient: process.env.NIBGATE_SELLER_ADDRESS,
async verifyPayment({ payment }) {
// Plug Circle/x402 verification here.
return Boolean(payment.paymentId);
}
});
export const GET = nibgateServer.protect({
id: "premium-guide",
title: "Premium Guide",
type: "article",
price: "0.01",
path: "/premium-guide"
}, async () => {
return new Response("Premium content");
});
収益は非カストディアルです。パッケージ/サーバーフローでは、そのクリエイターサイトに設定された受取アドレスに支払いを送信する必要があります。1 人のクリエイターが複数のサイトを接続でき、サイトごとに異なる受取先を設定できます。Nibgate Hub は分析と会計のために支払い/ロック解除の記録を保存しますが、資金を保管したり、出金フローを提供したりすることはありません。
レシートの処理はプロバイダーに応じて異なります。
- Circle Gateway での支払いでは、Circle またはゲートウェイ統合から実際のレシート URL が返された場合に限り、
paymentProvider: "circle-gateway"、paymentId、receiptUrlを保存します。 - Arc での支払いでは、
paymentProvider: "arc-mainnet"(テストネットでは"arc-testnet")、txHash、chainId、および任意で Arcscan のトランザクションページ(https://arcscan.app/tx/0x...、テストネット:https://testnet.arcscan.app/tx/0x...)のchainExplorerUrlを保存します。 - Circle のレシート URL も Arc のエクスプローラー URL もない場合、Hub は架空のレシートを作成せず、内部に記録された支払い ID/ハッシュを表示します。
または、マークアップで宣言します。
<article
data-nibgate-resource
data-nibgate-id="premium-guide"
data-nibgate-title="Premium Guide"
data-nibgate-type="article"
data-nibgate-price="0.01"
>
...
</article>
Hub エンドポイント:
POST /hub/sites/registerPOST /hub/sites/:websiteId/verifyPOST /hub/trackGET /hub/sitesGET /hub/dashboard/contentGET /hub/dashboard/analyticsGET /hub/dashboard/earnings
トラッキングモデル
ウィジェットは、サイト全体を区別のない 1 つのデータとして扱いません。次の情報を記録できます。
- スクリプトが読み込まれる各ルートのページビュー
- ページに
data-nibgate-resourceマークアップまたはnibgate:*メタタグがある場合のリソースビュー - インストール済みの
nibgateランタイムがwindow.nibgateHub.track(...)を呼び出した際のパッケージイベント - 特定のリソース ID に紐づくロック解除イベントと支払いイベント
つまり、1 つのドメインに複数のトラッキング対象リソースを含められますが、Nibgate のコンテンツタイプは意図的に music、video、article、image、document に限定されています。
ストレージモデル
Hub のストアには Prisma 経由で PostgreSQL を使用します。
- クリエイターのコンテンツは、引き続きクリエイターサイトに保存されます。
- リソースのメタデータは、ストリーミングされたウィジェット/パッケージイベントから作成または更新されます。
- サイト、コンテンツ、分析、収益の記録は Postgres に保存されます。
支払い
ブラウザーウォレットでのチェックアウトでは、クリエイターのアクセスルートが Circle Gateway の実際の PAYMENT-REQUIRED バッチチャレンジを返す必要があります。最も簡単で安全な設定は createCircleGatewayServer(...) を使う方法です。手動で同等の設定を行う場合は、createNibgateServer({ paymentMode: 'circle-gateway', network: 'eip155:5042' })(メインネット)または network: 'eip155:5042002'(テストネット)を指定します。
収益モデル(手数料ウォレット+プロトコル手数料)
Nibgate がホストするサーフェス(ハブウィジェットのチェックアウト、Subblogs)では、支払いはクリエイターの EOA ではなく、クリエイターごとの GatewayFeeWallet コントラクトに送られます。このコントラクトは不変で(プロキシ/管理者なし)、クリエイターに 99%を残し、distribute() の実行時に 1%のプロトコル手数料をトレジャリーに送ります。デプロイ時に設定される 5%の上限により、オンチェーンで強制されます。バックグラウンドキーパーが、決済済みの残高をクリエイターのウォレットに送金します。モデル全体、図、環境変数のリファレンスについては、docs/revenue-model と contracts/GatewayFeeWallet.sol をご覧ください。
NIBGATE_HOSTED_PAY=true \
NIBGATE_FEE_WALLET_FACTORY=0xYourFactoryAddress \
NIBGATE_TREASURY=0xYourTreasuryAddress \
NIBGATE_FEE_KEEPER=1 \
NIBGATE_KEEPER_PRIVATE_KEY=0xyourKeeperPrivateKey \
npm run dev
キーパーは、デプロイと決済に必要な推定ガス代の合計を賄えるだけの Arc ネイティブトークン残高も維持する必要があります。保留中のクレーム/返金のリレーでは、まず推定値を取得し、estimate * gasPrice とキーパーの残高を比較します。署名またはブロードキャストの前に、条件を満たさない場合は keeper-gas-insufficient で安全側に失敗させます。安全マージンを設けてキーパーを監視し、資金を補充してください。ERC-20 の USDC 残高ではネイティブガス代を支払えません。
Circle Gateway モード(ローカル専用の demo/ ディレクトリが必要です):
NIBGATE_PAYMENT_MODE=circle-gateway \
NIBGATE_SELLER_ADDRESS=0xYourSellerWallet \
NIBGATE_BUYER_PRIVATE_KEY=0xyourBuyerPrivateKey \
NIBGATE_BUYER_CHAIN=arcTestnet \
npm run dev:demo
Gateway 残高ヘルパー:
NIBGATE_PAYMENT_MODE=circle-gateway \
NIBGATE_BUYER_PRIVATE_KEY=0xyourBuyerPrivateKey \
NIBGATE_BUYER_CHAIN=arcTestnet \
npx @nibgate/cli balance
NIBGATE_PAYMENT_MODE=circle-gateway \
NIBGATE_BUYER_PRIVATE_KEY=0xyourBuyerPrivateKey \
NIBGATE_BUYER_CHAIN=arcTestnet \
npx @nibgate/cli deposit 1.0
直接レール(送金)
2 つ目の決済レールでは、Gateway ファシリテーターを介さず、購入者のウォレットからクリエイターの payTo アドレスへ USDC を直接送金します。ブラウザーのチェックアウトで送金をブロードキャストし、アクセス再試行時にトランザクションハッシュを x-nibgate-transfer-tx として送信します。サーバーは、コンテンツのアンロック証明を発行する前に、オンチェーンでマイニング済みのレシートを検証します(USDC の Transfer ログにより、価格以上の金額が販売者に送金されたことを確認します)。レシートは paymentProvider: 'direct-transfer' とともに保存されます。アンロック UI では、NibgateUnlock/useNibgateUnlock が paymentRail オプション('gateway' または 'transfer')を介して 2 つのレールを切り替えます。
ブロードキャストされた送金は公開チェーンデータであるため、再試行時には所有権証明も送信する必要があります。これは、支払いに使用したウォレットが次の内容に対して作成する EIP-191 署名です。
Nibgate transfer ownership
tx:<txHash lowercased>
resource:<resource path or url>
これは x-nibgate-tx-owner ヘッダーとして送信します(transferOwnershipMessage() がこの文字列を作成します)。証明がない場合や一致しない場合は、transfer-ownership-proof-required/transfer-owner-mismatch エラーになります。セルフホストする場合は NIBGATE_TX_OWNER_PROOF_OPTIONAL=true でこの要件を無効にできます。ホストされたサーフェスでは、さらに各 txHash をコンテンツ ID ごとに一度だけ使用できるようにします。
import { payWithTransfer, createTransferCheckout } from '@nibgate/sdk'
await payWithTransfer(resource, {
accessPath: '/api/nibgate/access',
checkout: createTransferCheckout(resource, {
sendTransfer: async ({ recipient, amount }) => /* broadcast USDC transfer, return { txHash } */
})
})
ウォレットに紐づくアクセス
有料アンロックはデバイスではなくウォレットに紐づきます。支払い後、レシートに基づいてウォレットに有効期限のない権利が付与されます。どのデバイスでもウォレットを再接続し、SIWE でサインインすれば、サーバーがレシートと禁止ステータスを再検証してコンテンツを再配信するため、再度支払う必要はありません。アンロック UI は、ウォレットが接続されていない限り、デバイスに保存された証明を使ってアンロックすることはありません。また、接続が解除されるとロックし直し(ペイロードを破棄し、証明を消去し)ます。
ローカル URL
- ハブフロントエンド:
http://localhost:3001 - ハブの Explore:
http://localhost:3001/explore - ハブバックエンド API:
http://localhost:3000 - Subblogs フロントエンド:
http://localhost:3002 - Subblogs バックエンド API:
http://localhost:4000 - サンプルオリジン:
http://localhost:4301 - デモの有料ルート:
http://localhost:4301/hello-world - ハブウィジェット:
http://localhost:3001/widget.js
まずバックエンドを起動し、次にローカルの package-to-hub 証明スクリプトを実行します。
npm run dev:backend
npm run e2e:nibgate
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。