ブロックチェーン技術詳細
VeriCerts Zeroのブロックチェーン連携における技術的な詳細を説明します。
Note: ブロックチェーン連携はエンタープライズプラン向け機能です。 概要についてはなぜブロックチェーンを使うのかをご覧ください。
アーキテクチャ概要
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ VeriCerts API │ ───▶ │ Account │ ───▶ │ Blockchain │
│ │ │ Abstraction │ │ (ERC-1056/VC) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
│ 非同期処理 │
└──────────────────────────────────────────────────┘
トランザクション完了通知ガスレストランザクション
ガスレストランザクションとは
ブロックチェーンへの書き込みには通常「ガス代」と呼ばれる手数料が必要です。ガスレストランザクションは、この手数料をエンドユーザーに負担させない仕組みです。
従来の課題
| 課題 | 説明 |
|---|---|
| ガス代の準備 | ユーザーが暗号資産を購入・保有する必要がある |
| 価格変動 | ネットワーク混雑時にガス代が高騰 |
| UXの悪化 | 一般ユーザーにとって複雑なプロセス |
VeriCerts Zeroの解決策
VeriCerts Zeroでは、Paymaster(ガス代の代理支払い者)がトランザクション手数料を負担します。
1. ユーザーがVC発行をリクエスト
2. VeriCerts APIがUserOperation(署名済みトランザクション)を生成
3. Paymasterがガス代を代理支払い
4. Bundlerがトランザクションをブロックチェーンに送信
5. ユーザーはガス代を支払わずに完了Account Abstraction
Account Abstractionとは
Account Abstraction(アカウント抽象化、ERC-4337)は、従来のEOA(Externally Owned Account)に代わる新しいアカウントモデルです。スマートコントラクトをウォレットとして使用することで、柔軟なトランザクション処理が可能になります。
従来のEOAとの比較
| 項目 | 従来(EOA) | Account Abstraction |
|---|---|---|
| アカウント | 秘密鍵から生成されるアドレス | スマートコントラクト |
| トランザクション署名 | 秘密鍵で直接署名 | コントラクトロジックで検証 |
| ガス代 | 自分で支払い必須 | Paymasterによる代理支払い可能 |
| ウォレット | MetaMask等が必須 | 不要(API経由で操作) |
開発者へのメリット
- ウォレット不要: エンドユーザーにMetaMask等のインストールを要求しない
- Web2的UX: ブロックチェーンを意識させないユーザー体験が可能
- バッチ処理: 複数のトランザクションを1回にまとめて効率化
UUPSアップグレードパターン
UUPSとは
UUPS(Universal Upgradeable Proxy Standard)は、スマートコントラクトをアップグレード可能にするデザインパターンです。
コントラクトアドレスの固定
VeriCerts Zeroのスマートコントラクト(VCRegistry)はUUPSパターンを採用しています。
┌─────────────────┐ ┌─────────────────┐
│ Proxy │ ───▶ │ Implementation │
│ (アドレス固定) │ │ (V1 → V2 → V3) │
└─────────────────┘ └─────────────────┘
↑
開発者はこのアドレスを参照
(バージョンアップしても変わらない)開発者へのメリット
| 従来のアップグレード | UUPSパターン |
|---|---|
| 新コントラクトをデプロイ | 実装のみ更新 |
| アドレスが変わる | アドレス固定 |
| 連携システムの修正が必要 | 修正不要 |
| データ移行が必要 | データ保持 |
セキュリティ
- アップグレード権限は特定のロール(UPGRADER_ROLE)を持つアドレスのみに制限をしております
- OpenZeppelin Contractsベースの実装を採用しています
非同期処理
なぜ非同期なのか
ブロックチェーンへの書き込みは数秒〜数十秒かかるため、同期的に待機するとユーザー体験が低下します。VeriCerts Zeroでは非同期処理を採用し、VC発行は即座に完了します。
処理フロー
1. VC発行API呼び出し
└─▶ 即座にVC発行完了(データベースに保存)
2. バックグラウンドスケジューラー(定期実行)
└─▶ 未書き込みのVCをブロックチェーンに登録VC発行とブロックチェーン書き込みは分離されているため、ユーザーは書き込み完了を待つ必要がありません。
スマートコントラクト仕様
Note: コントラクトアドレスやABIの取得については営業窓口までお問い合わせください。
VCRegistry
VCの登録・検証・失効を管理するコントラクトです。
主要な関数
| 関数 | 説明 |
|---|---|
registerVC() | VCをオンチェーン登録 |
verifyVC() | VCの有効性を検証 |
revokeVC() | VCを失効(永久) |
suspendVC() | VCを一時停止(復帰可能) |
VCステータス
Active ──────▶ Revoked(永久失効、復帰不可)
│
└────────▶ Suspended ◀────▶ Active(一時停止、復帰可能)ERC-1056(DID Registry)
DIDの属性管理に使用します。
| 関数 | 説明 |
|---|---|
setAttribute() | DIDに属性(公開鍵など)を追加 |
addDelegate() | 委任を設定 |
revokeDelegate() | 委任を取り消し |
※ DID自体は発行時にオンチェーン書き込み不要。属性変更時のみ記録されます。
関連リンク
- なぜブロックチェーンを使うのか - 概念的な説明
- 外部システム連携 - API連携の準備