verify-proof について
verify-proofは、ファイルのタイムスタンプ証明を作成・検証するCLIとライブラリです。アカウントやネットワーク接続なしで証明バンドルをローカル検証でき、作成時はProofLedger APIにファイルのハッシュを送信します。AIアシスタント向けの任意のMCPサーバーもあります。
主な機能
- 01オフラインでの証明検証
- 02ローカルでのSHA-256計算
- 03ProofLedger経由の証明作成
- 04証明の一括作成
- 05Merkle証明の検証
- 06PythonおよびNode.jsパッケージ
活用シーン
- 01保存済みバンドルによるファイル検証
- 02リリース成果物や契約書のタイムスタンプ
- 03レコードIDを付けた複数ファイルのアンカー
- 04AIアシスタントのワークフローへの証明作成追加
MCP 対応
任意のMCPサーバーが、複数ファイルの一括作成を含む証明関連ツールをAIアシスタントに提供します。証明の作成にはProofLedgerを使い、検証はローカルでオフライン実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
verify-proof
ブロックチェーンのタイムスタンプ証明を自分のマシンで検証し、API を使って作成します。
verify-proof はファイルの SHA-256 ハッシュを再計算し、証明バンドルと照合するため、アンカーされた時点までにこのファイルが存在し、それ以降 1 バイトも変更されていないことを確認できます。検証は純粋な計算処理です。必要なのはファイルとバンドルだけで、アカウントもネットワーク呼び出しも不要です。オンラインで実行されるのは証明を作成するコマンドだけで、無料キーを使って ProofLedger の API に接続します。無料、MIT ライセンス、Python 標準ライブラリのみを使用します。
Node.js 版も利用できます:
npm install verify-proof。依存関係ゼロで、同じ証明形式とセマンティクスを共有するポートです。同じフィクスチャを使ってテストされています。js/を参照してください。
以下の各セクションでは、よくある質問に、実現するための最短のコードを添えて回答します。
- インストール
- コードで、ファイルが特定の時刻に存在していたことを証明するには?
- サービスを信頼せず、オフラインでタイムスタンプ証明を検証するには?
- コードで Merkle 証明を検証するには?
- 独自のレコード ID を使って、複数のファイルを一度にアンカーするには?
- アンカーの確定時に Webhook を受け取るには?
- 自分でホストするサーバーに対して実行できますか?
- Zapier、Make、n8n のワークフローにタイムスタンプ処理を追加するには?
- AI エージェントが何をしたか、エージェントが見たものを保存せずに証明するには?
- リリース成果物にタイムスタンプを付与する GitHub Action や GitHub App はありますか?
- AI アシスタントから使う(MCP サーバー、Claude Code、Cursor)
- 証明ファイル形式
- 証明で示せること、示せないこと
インストール
pip install verify-proof
基本インストールでは依存関係を一切インストールせず(Python 標準ライブラリのみを使用)、verify-proof コマンドを利用できます:
verify-proof --help
Claude Desktop または Cursor 用の MCP サーバーとして使うには、代わりにオプションの追加機能をインストールしてください(詳細は以下):
pip install "verify-proof[mcp]"
ソースから実行したい場合は、クローンしてください。CLI は同じように動作します:
git clone https://github.com/Fulcrum-Enterprises/verify-proof.git
cd verify-proof
python verify_proof.py --help
コードで、ファイルが特定の時点に存在したことを証明するには?
ファイルをローカルでハッシュ化し、そのハッシュを公開ブロックチェーンのトランザクションにアンカーして、そのトランザクションの記録をファイルの隣に保存します。トランザクションのブロック時刻が「遅くともその時点には存在した」という日付になり、ハッシュによって対象をこの正確なバイト列に結び付けます。ファイル自体がマシンの外に出ることはありません。
このパッケージはハッシュ化と検証を行います。ProofLedger は Polygon 上でアンカーを行い、通常は1分以内に完了します。無料の API キーが利用できます(Free プランでは月100件の API による証明を利用できます)。
コマンドラインから:
export PROOFLEDGER_API_KEY=sk_... # Account > API Keys
verify-proof create contract.pdf
verify-proof create contract.pdf --no-filename # send only the hash
マシンの外に送信されるのは64文字の SHA-256 ダイジェストのみです。ただし、--no-filename を指定しない場合はファイル名も送信されます。その後、証明のバンドルをファイルの隣に保存します。以降は、以下のオフラインの verify コマンドを ProofLedger なしで実行できます。
curl -H "Authorization: Bearer $PROOFLEDGER_API_KEY" \
"https://proofledger.io/api/v1/proof/42/bundle?download=1" -o contract.pdf.proof.json
Python からは、パッケージに付属する小さな API クライアントを使えます(標準ライブラリのみ)。
from proofledger_api import submit_proof, get_bundle
from verify_proof import hash_file
import json
proof = submit_proof(hash_file("contract.pdf"), filename="contract.pdf",
external_id="contract-2026-10") # key from PROOFLEDGER_API_KEY
print(proof["id"], proof["certificate_url"])
bundle = get_bundle(proof["id"]) # once the anchor has landed
json.dump(bundle, open("contract.pdf.proof.json", "w"), indent=2)
Node.js から:
import { hashFile, ProofLedger } from "verify-proof";
const pl = new ProofLedger({ apiKey: process.env.PROOFLEDGER_API_KEY });
const proof = await pl.createProof({ sha256: hashFile("contract.pdf"), externalId: "contract-2026-10" });
const bundle = await pl.getBundle(proof.id); // once the anchor has landed
または API に直接リクエストします。{"sha256": "<64 hex>"} と Bearer sk_... ヘッダーを指定して、POST https://proofledger.io/api/v1/proof を送信します。API のドキュメントは proofledger.io/api にあり、OpenAPI 仕様は /openapi.json にあります。
external_id は独自のレコード ID です。同じ ID を再度送信すると、新しい証明を作成する代わりに既存の証明が返されるため、ジョブを再試行してもアンカーが二重に作成されることはありません。
サービスを信頼せずに、タイムスタンプの証明をオフラインで検証するには?
verify-proof verify contract.pdf --proof bundle.json
# VERIFIED: File matches the proof bundle. The bundle says it was anchored on polygon at 2026-10-15T02:11:09.512Z in transaction 0xabc123.... Look that transaction up on a block explorer to confirm it: https://polygonscan.com/tx/0xabc123...
検証はローカルで実行されます。ファイルをハッシュ化し、結果をバンドル内のハッシュと比較します。バンドルにパスが含まれている場合は Merkle ルートを計算し、ブロックエクスプローラーで確認するトランザクションを報告します。ブロックチェーンは読み取らないため、そのトランザクションを確認するまでは、アンカーはバンドルに記載された内容に基づきます。情報がどこにも送信されないため、証明を発行したサービスがまだ存在するかどうかに関係なく、同じように動作します。
Python からも同じ検証を行えます。
from verify_proof import hash_file, load_proof, verify_proof
result = verify_proof(hash_file("contract.pdf"), load_proof("bundle.json"))
print(result["verified"], result["tx_id"], result.get("explorer_url"))
Node.js からも実行できます:verifyProof(hashFile("contract.pdf"), loadProof("bundle.json"))。
どのベンダーの証明でも実行できるテストがあります。ベンダーのドメインをブロックしてから検証してください。それでも検証に合格すれば、その証明はあなたのものです。「有効」と伝えるためにベンダーのサーバーが必要なら、そのベンダーが事業を継続することに依存しています。
ファイルの SHA-256 ハッシュを計算する
verify-proof hash contract.pdf
# SHA256: a1b2c3d4e5f6...
# File: contract.pdf
デフォルトでは静かな動作
verify が成功すると、同様の証明を作成する方法を示す1行が stderr に出力されます。出力がパイプまたはリダイレクトされている場合は表示されないため、スクリプトに影響することはなく、どちらの場合も stdout は変わりません。常に表示しないようにするには:
export VERIFY_PROOF_NO_HINT=1
コードで Merkle 証明を検証するには?
Merkle パスとは、リーフ(ファイルのハッシュ)と、ブロックチェーン上に記録されたルートとの間にある兄弟ハッシュのリストです。検証では、兄弟ハッシュを使ってハッシュを上位へ順にたどり、結果をトランザクション内のルートと比較します。このパッケージで使われる規則の全容は次のとおりです。
import hashlib
def merkle_root(leaf_hex: str, path: list[dict]) -> str:
current = leaf_hex
for step in path: # [{"hash": "<hex>", "position": "left" | "right"}, ...]
sibling = step["hash"]
combined = sibling + current if step.get("position") == "left" else current + sibling
current = hashlib.sha256(bytes.fromhex(combined)).hexdigest()
return current
各レベルでは、position で指定された順序で2つのハッシュを生のバイト列として連結し、その結果を SHA-256 でハッシュ化します。バンドルに merkle_path が含まれている場合、verify_proof() はこの処理をそのまま実行し、ルートを merkle_root として返して出力するため、トランザクションに記録されたルートと比較できます。ブロックチェーン上の値との比較はユーザー自身が行います。このパッケージがブロックチェーンを読み取ることはありません。
Polygon では、ProofLedger は各証明を個別のトランザクションにアンカーするため、merkle_path は空で、トランザクション内のハッシュがファイルのハッシュそのものになります。他のサービスが Bitcoin にアンカーした証明と、2026-10-15 より前に ProofLedger が Bitcoin にアンカーした一部の証明には、パスが含まれています。
独自のレコード ID を使って、一度に多数のファイルをアンカーするにはどうすればよいですか?
1 回の呼び出しで最大 100 個のハッシュを送信でき、それぞれに独自の external_id を指定できます。そのため、再実行しても二重にアンカーされず、すでに存在する証明が返されます。
from proofledger_api import submit_batch, get_proof_by_external_id
from verify_proof import hash_file
result = submit_batch([
{"sha256": hash_file("invoice-1001.pdf"), "external_id": "invoice-1001", "filename": "invoice-1001.pdf"},
{"sha256": hash_file("invoice-1002.pdf"), "external_id": "invoice-1002"},
])
print(result["summary"]) # created / exists / invalid counts
for item in result["items"]:
print(item["result"], (item.get("proof") or {}).get("id"))
later = get_proof_by_external_id("invoice-1001") # None if you never anchored it
Node.js では、await pl.createProofs(items) に同じリストを渡せます。また、pl.getProofByExternalId(id) で該当する証明を検索できます。AI アシスタントからは、create_proofs_batch MCP ツールを使ってファイルのリストを処理できます。このツールは、各ファイルの名前をレコード ID として使用します。
アイテムは最初にチェックされ、まとめて書き込まれます。バッチ処理は Polygon 専用です。通常のリクエスト再試行には、作成エンドポイントで任意の Idempotency-Key ヘッダーも使用できます(24 時間以内に同じキーと本文を送信すると、保存済みの応答が再生されます)。ただし、送信を安全に再試行するには external_id を使う方法がより簡単です。
アンカーの確定時に Webhook を受け取るにはどうすればよいですか?
公開 https URL を一度登録すると、ProofLedger は証明の Polygon アンカーが確定したときに、署名付き JSON イベント proof.polygon.anchored を POST します。このイベントには証明のバンドルが含まれているため、追加で何かを取得しなくても、ハンドラーでファイルと一緒に保存できます。
import { ProofLedger, verifyWebhookSignature } from "verify-proof";
const pl = new ProofLedger({ apiKey: process.env.PROOFLEDGER_API_KEY });
const hook = await pl.registerWebhook("https://example.com/proofledger", ["proof.polygon.anchored"]);
// hook.secret is shown once; keep it for the check below
信頼する前に、すべての配信を検証してください。ヘッダーは ProofLedger-Signature: t=<unix>,v1=<hex HMAC-SHA256> です。t + "." + raw body に対する署名なので、本文は受信したとおりに渡してください。
from proofledger_api import verify_webhook_signature
ok = verify_webhook_signature(secret, request.headers["ProofLedger-Signature"], request.get_data())
Node.js では、verifyWebhookSignature(secret, header, rawBody) を使います。どちらも純粋な計算処理で、ネットワーク通信は行いません。配信に失敗すると、ほぼ 2 日間で 7 回再試行され、その後エンドポイントが無効になり、アカウントにメールが送信されます。Webhook が発火するのは、エンドポイント登録後に作成された証明のみです。管理用エンドポイントは、POST /api/v1/webhooks、一覧取得の GET、DELETE /api/v1/webhooks/:id、POST /api/v1/webhooks/:id/test です。
自分でホストするサーバーで実行できますか?
はい。ProofLedger Community は、独自の Polygon キーを使って実行するオープンソース(AGPL-3.0)の Node + SQLite サーバーで、ProofLedger と同じ証明コアを使用しています。同じ v1 API 形式(external_id を使った単一およびバッチの証明、バンドル、一覧、公開検証、証明書、署名付き Webhook、Idempotency-Key、キーごとのレート制限)に対応し、proofledger.io と同じトランザクション形式を書き込むため、このツールはそのバンドルも同じ方法で検証します。
git clone https://github.com/Fulcrum-Enterprises/proofledger-community.git
cd proofledger-community
cp .env.example .env # set PUBLIC_BASE_URL, POLYGON_RPC_URL and POLYGON_PRIVATE_KEY
docker compose up -d # pulls ghcr.io/fulcrum-enterprises/proofledger-community
docker compose exec proofledger node src/cli.js user add [email protected]
docker compose exec proofledger node src/cli.js key create [email protected] "laptop"
次に、このパッケージの接続先を設定します。CLI では --base-url https://proofs.example.com、Python では base_url=、Node では baseUrl を指定してください。proofledger.io のホスト型サービスは別の製品です(マネージド署名、バックアップ、ブランディング、各種インテグレーション、サポートを提供)であり、オープンソースではありません。
Zapier、Make、n8n のワークフローにタイムスタンプのステップを追加するにはどうすればよいですか?
3 つとも通常の ProofLedger プルーフを生成するため、このツールでほかのプルーフと同様にバンドルを検証できます。
- n8n: コミュニティノード
n8n-nodes-proofledger(Settings > Community Nodes からインストール)。ProofLedger ノードは n8n 内のバイナリフィールドをハッシュ化し、ハッシュのみを送信します。または、すでにあるハッシュを 1 件ずつ、あるいは 1 回の呼び出しで 100 件まで受け取り、プルーフの読み取り、バンドルの取得、検証、Webhook の管理を行います。ProofLedger Trigger は Webhook を自動で登録し、各配信の署名を確認します。ソース:github.com/Fulcrum-Enterprises/n8n-nodes-proofledger。これはコミュニティノードであり、n8n 検証済みのノードではありません。 - Zapier: 非公開インテグレーションです。Zapier に掲載されるまでは招待リンクからのみ利用できます:こちらから参加。トリガー Proof Anchored(署名確認済み)、Create Proof From Hash と Create Proof From File(Zap の実行中にハッシュ化し、ProofLedger に送られるのはハッシュのみ)を作成し、Find Proof by External ID と Verify Hash を検索します。
- Make: カスタムアプリです。招待リンクからのみ利用できます:こちらからインストール。SHA-256 ハッシュからのプルーフ作成、id または external id による取得、バンドルの取得、ハッシュの検証、プルーフの一覧表示、および即時トリガーの Watch anchored proofs 用モジュールを利用できます。Make にはファイル用モジュールがありません。先にファイルをハッシュ化してください。
AI エージェントが何を見たかを保存せずに、エージェントの実行内容を証明するにはどうすればよいですか?
エージェント実行レシートを使用します。これは、1 回の実行の各ステップをつなぐハッシュチェーンです。各ステップには、コンテンツの SHA-256 フィンガープリント(実行ごとのシークレットでソルト付け)、タイプ、時刻、任意の短いラベルのみが保存されます。チェーンヘッドは ProofLedger に通常のプルーフとしてアンカーされ、バンドルはレシートに保存されます。レシートを持つ人は誰でもチェーンを再計算し、オフラインでバンドルと照合してヘッドを確認できます。そこからプロンプト、ツール呼び出し、出力を読み取ることはできません。
from agent_receipt import RunReceipt
r = RunReceipt("support-ticket-48213", agent={"name": "support-bot", "model": "claude-sonnet-5-5"})
r.prompt(customer_message, label="customer message")
r.tool_call(json.dumps(call), label="lookup_order")
r.tool_result(result_text)
r.output(reply, label="reply sent")
r.anchor() # one API proof; waits for the Polygon anchor (key from PROOFLEDGER_API_KEY)
r.save("ticket-48213.receipt.json")
verify-proof receipt verify ticket-48213.receipt.json # offline: chain + bundle
verify-proof receipt verify ticket-48213.receipt.json --step 0 --content customer-message.txt
verify-proof receipt show ticket-48213.receipt.json # labels and fingerprints, never content
verify-proof receipt anchor ticket-48213.receipt.json # anchor a saved, unanchored receipt
レシートを第三者に渡す前に、secret フィールドを削除してください。チェーンの検証は引き続き可能で、ファイル内の情報を推測することもできません。ステップをコンテンツと照合するには、シークレット(--secret)が必要です。形式は proofledger-agent-run-receipt/1 です。examples/receipt.json は、Python 版と Node 版の両方で検証できるサンプルです。また、examples/langchain_receipt_callback.py は、実行内容からレシートを作成する LangChain コールバックハンドラーです。チェーンのルールは agent_receipt.py のモジュール docstring に記載されているため、どの言語でも再計算できます。Node.js には同じ RunReceipt、verifyReceipt、verifyStep があります。
レシートは、この正確な一連のステップがアンカー時刻までに存在し、それ以降変更されていないこと、さらにステップのコンテンツとシークレットがあれば、そのコンテンツからステップが作成されたことを示します。エージェントの判断が正しかったことや、誰が実行したかを示すものではありません。
リリース成果物にタイムスタンプを付与する GitHub Action または GitHub App はありますか?
同じアカウントから、どちらも利用できます。
Action の ProofLedger Release Timestamp は GitHub Marketplace で提供されています。ランナー上で成果物のハッシュを計算し(ファイルがランナーの外に出ることはありません)、ハッシュを送信して Polygon へのアンカーを待ち、証明をリリースノートに記載し、バンドル(<label>.proof.json)をリリースに添付します。このツールは後でこのバンドルを使ってファイルを検証します。
name: Timestamp Release
on:
release:
types: [published]
jobs:
timestamp:
runs-on: ubuntu-latest
permissions:
contents: write # needed to update the release body and attach the proof bundle
steps:
- uses: actions/checkout@v4
- name: Build release artifact
run: zip -r dist/release.zip src/
- name: Timestamp with ProofLedger
uses: Fulcrum-Enterprises/proofanchor-github-action@v2
with:
api-key: ${{ secrets.PROOFLEDGER_API_KEY }}
file: dist/release.zip
(リポジトリ名は以前のままです。uses: の行は上記のままにしてください。)
App の github.com/apps/proofledger はワークフローを必要としません。リポジトリにインストールし、一度 ProofLedger アカウントに接続すれば、そこで公開されるすべてのリリースが自動的にアンカーされます。GitHub が報告する SHA-256 から、リリース内の各ファイルにつき 1 つの証明が作成されます(ファイルはダウンロードされません)。リリースノートには証明の表が記載され、ハッシュが Polygon に記録されるとバンドルが添付されます。選択したリポジトリに対する Contents の読み取りと書き込みのみを許可し、それ以外の権限は要求しません。このページからインストールできます。GitHub Marketplace では提供されていません。ドキュメント:proofledger.io/api.html#sec-github。
AI アシスタントから利用する(MCP サーバー、Claude Code、Cursor)
verify-proof にはオプションの Model Context Protocol サーバーが付属しているため、MCP 対応の AI クライアント(Claude Desktop、Cursor など)は会話の中でブロックチェーンのタイムスタンプ証明を直接検証できます。ファイルがマシンの外に出ることはありません。ハッシュ計算と検証はローカルで実行され、結果のハッシュのみが証明と照合されます。
MCP 用の追加機能をインストールする
pip install "verify-proof[mcp]"
基本インストールは依存関係を必要としません。[mcp] 追加機能をインストールすると、MCP SDK が追加され、verify-proof-mcp コマンド(stdio サーバー)がインストールされます。
公開されるツール
| ツール | 説明 |
|---|---|
compute_file_hash | ローカルファイルの SHA-256(またはその他の)ハッシュを計算します |
verify_file | ローカルファイルを証明 JSON ファイルと照合して検証します |
verify_hash | 既知のハッシュをインラインまたはファイルベースの証明データと照合して検証します |
explain_proof | 証明が何を主張しているか、ブロックエクスプローラーでどのように確認するかを平易な言葉で説明します |
create_proof | ファイルのハッシュを ProofLedger にアンカーして、新しい証明を作成します。ネットワーク接続が必要で、API キーを使用します |
create_proofs_batch | 1 回の API 呼び出しで最大 100 個のファイルをアンカーします。ファイル名は外部 ID として使用されるため、変更されていないファイルに対して再実行すると既存の証明が返されます。ファイルが変更されても名前が同じ場合、以前の証明が返されるため、名前を変更するか、create_proof でアンカーしてください。ネットワーク接続と API キーが必要です |
get_proof_status | 自分の証明の現在のアンカー状態を取得します。ネットワーク接続と API キーが必要です |
save_proof_bundle | 証明のバンドル(このパッケージの証明形式)をダウンロードし、ファイルの隣に保存します。これにより、後で検証する際に ProofLedger から情報を取得する必要がなくなります。ネットワーク接続と API キーが必要です |
start_run_receipt | エージェント実行レシートファイルを開始します(新しいシークレット、ステップなし)。オフラインで使用できます |
add_receipt_step | 1 つのステップ(prompt、tool_call、tool_result、output、note)のフィンガープリントをレシートに追加します。コンテンツはハッシュ化されるだけです。オフラインで使用できます |
anchor_run_receipt | レシートのチェーンヘッドを 1 つの証明としてアンカーし、バンドルをレシートに保存します。ネットワーク接続と API キーが必要です |
verify_run_receipt | チェーンを再計算してバンドルと照合します。必要に応じて、1 つのステップのコンテンツも確認できます。オフラインで使用できます |
Claude Code(プラグイン)
このリポジトリは Claude Code プラグインマーケットプレイスでもあります。proofledger プラグインには、MCP サーバー(uvx で起動するため、uv だけが必要です)と、/proofledger:anchor、/proofledger:verify、/proofledger:receipt の 3 つのスキルが含まれています。
/plugin marketplace add Fulcrum-Enterprises/verify-proof
/plugin install proofledger@proofledger
次のように依頼してください:「dist/app-1.4.0.zip をアンカーして、その証明をファイルの隣に保存してください。」 証明の作成時には、Claude Code を起動したシェルから PROOFLEDGER_API_KEY を読み込みます。検証にはキーは必要ありません。詳細は claude-plugin/ を参照してください。
Claude Desktop
claude_desktop_config.json に以下を追加します(examples/claude_desktop_config.json を参照してください)。
{
"mcpServers": {
"verify-proof": {
"command": "verify-proof-mcp"
}
}
}
Claude Desktop を再起動します。verify-proof-mcp が PATH 上に見つからない場合は、代わりに Python モジュール形式を使用します。"command": "python"、"args": ["-m", "verify_proof_mcp"] としてください。
Cursor
uv がインストールされていれば、ワンクリックで設定できます(Cursor は uvx でサーバーを起動するため、pip でインストールするものはありません)。
または、~/.cursor/mcp.json(もしくはプロジェクトの .cursor/mcp.json)に手動で追加します。
{
"mcpServers": {
"verify-proof": {
"command": "uvx",
"args": ["--from", "verify-proof[mcp]", "verify-proof-mcp"]
}
}
}
プルーフの作成では、Cursor の実行環境にある PROOFLEDGER_API_KEY を読み取ります。検証に API キーは必要ありません。claude-plugin/ フォルダーには Cursor プラグインマニフェスト(.cursor-plugin/plugin.json、mcp.json、同じ 3 つのスキル)も含まれているため、このリポジトリを Cursor マーケットプレイスとしてインポートできます。
次のようなことをアシスタントに尋ねてみてください。
- "
~/contract.pdfを~/contract-proof.jsonと照合して検証してください。" - "このプルーフファイルが実際に証明しているのは何ですか?"
- "このファイルにタイムスタンプを付与し、バンドルをその隣に保存してください。"
検証ツールはアカウントを必要とせず、ネットワークへの接続も行いません。アンカーそのものを確認するには、任意のブロックエクスプローラーでトランザクションを検索してください。例外となる作成、バッチ、ステータス、バンドルの各ツールは、ファイルではなくハッシュとファイル名を ProofLedger に送信します。送信には API キーを使用します。
プルーフファイル形式
バンドルは 1 つの JSON ドキュメントです。以下は一部を抜粋したものです。
{
"format": "verify-proof/1",
"service": "proofledger",
"hash": "a1b2c3d4e5f6...",
"algorithm": "sha256",
"blockchain": "polygon",
"tx_id": "0xabc123...",
"anchored_at": "2026-10-15T02:11:09.512Z",
"merkle_path": [],
"proof_id": 42,
"certificate_url": "https://proofledger.io/cert/42"
}
Merkle パスが含まれている場合、verify は Merkle ルートを計算して出力します(コードで Merkle プルーフを検証するには? を参照してください)。トランザクションに記録されたルートと比較してください。
"merkle_path": [
{"hash": "def456...", "position": "right"},
{"hash": "789abc...", "position": "left"}
]
examples/ には形式のサンプルが含まれています。sample.txt と、そのハッシュを記録した proof.json です。ここにあるトランザクションは架空のもので、Polygon 上には存在しないため、ブロックエクスプローラーで検索しても見つかりません。これはファイル形式のみを示すものであり、実際のアンカーではありません。
仕組み
verify-proofはローカルファイルの SHA-256 ハッシュを計算します- プルーフ JSON を読み取り、最初にアンカーされたハッシュを取得します
- ハッシュが一致すれば、タイムスタンプ付与後にファイルが変更されていないことを示します
- Merkle パスが含まれている場合は Merkle ルートを計算して出力します。トランザクションに記録されたルートと比較してください
- チェーンは読み取りません。アンカーを確認するには、任意のブロックエクスプローラーでトランザクションを検索してください(Polygon の場合、判定結果に polygonscan へのリンクが表示されます)
プルーフが示すこと、示さないこと
プルーフは、この SHA-256 フィンガープリントと完全に一致するファイルがアンカー時刻までに存在し、その後変更されていないことを示します。記録は特定の企業のデータベースではなく公開チェーン上に保存されるため、誰でもアカウントなしで、ファイルを見ずに確認できます。
ファイルを誰が作成したかは示しません。また、著作権登録ではなく、誰かがファイルをコピーするのを防ぐものでもありません。
対応サービス
このツールは、次のサービスで作成されたプルーフを検証します。
- ProofLedger:API として提供される存在証明サービスです。ハッシュを送信すると、誰でも当社に頼らずに検証できる Polygon アンカー付き証明書を取得できます。無料プランでは、月に 100 件の API プルーフを利用できます。
- ProofLedger Community:同じプルーフのコア機能を備えたオープンソース(AGPL-3.0)のサーバーです。独自の Polygon キーを使ってホストできます。API とバンドル形式は同じです。このツールから接続するには
--base-url(Python ではbase_url=、Node ではbaseUrl)を指定してください。 - SHA-256 ハッシュのプルーフとブロックチェーンのトランザクション参照を生成するサービス全般。
ライセンス
MIT ライセンスです。自由に使用、変更、配布できます。
概要
FULCRUM ENTERPRISES LLC が開発しました。ブロックチェーンで検証できる存在証明ツールを構築しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。