自分のウォレットで完結するノンカストディアルなロックシステム
このシステムは、「Miyako Pad」 において実際に採用されている
ノンカストディアル(非預託型)トークンロックシステムの技術解説です。
MiyakoPadでは、ユーザーが購入したトークンを自分のウォレットに保持したまま、一定期間ロックできる設計を導入しています。
🏁 はじめに:なぜ「預けないロック」を採用したのか
トークンロックの仕組みは、ベスティング(権利確定)や投資家保護など、Web3プロジェクトの運営に欠かせない要素です。
特にチームトークンや初期投資分のロックは、プロジェクトの透明性や信頼性を担保するために重要です。
ただし、多くのロックシステムは「専用のコントラクトにトークンを預ける」ことを前提としています。
つまり、ロック=ウォレットの外に出すという構造です。
この「預ける」という行為は、どうしてもカストディリスク(第三者に依存するリスク)を伴います。
「トークンを預けずに、一定期間ロックすることはできないか?」
この問いから生まれたのが、ノンカストディアル(非預託型)ロックシステムです。
この仕組みでは、トークンを自分のウォレットに残したまま、
譲渡不可能なNFT(SBT)をロック証明として発行し、送金時に制限をかけるよう設計しています。
現在このノンカストディアルロックは、
MIYAKOトークンおよびTBCZトークン(The Boost Coffee Project)において実際に運用されています。
実際の運用の中で、信頼性と安全性を両立する仕組みとして機能しています。
🧩 仕組みの概要:預けずにロックするとは?
従来のロックシステムでは、次のような流れが一般的です。
専用コントラクトにトークンを送る(=預ける)
ロック期間が終了するまで待つ
期間後にコントラクトから引き出す
この構造では、ロックコントラクトが資産を完全に保有する形になるため、
万が一バグや脆弱性が存在すると、トークンを取り出せなくなるリスクが高いという問題があります。
一方、今回の仕組みは違います。
トークンは常にユーザーのウォレットに残ったまま
代わりに「ロック証明NFT(譲渡不可能)」を発行し、送金時にこのNFTを参照して制限をかけます。

⚙️ 実装の仕組み:3つの要素で構成
1. ロック対応トークン
通常のERC20トークンに「送金制御ロジック」を追加。
ウォレット内に存在するロックNFTを確認し、ロック量を差し引いた分しか送金できないようにします。
(送金処理においては、常にロック量を上回るトークン残高が維持されるように設計されており、ロック量を下回るような送金は実行されません。)
2. ロック証明NFT(Soulbound Token)
NFTには以下の情報を記録します。
ロックしたトークン量
ロック期間(期限)
発行者・保有者
このNFTは譲渡不可(SBT仕様)で、バーン(削除)以外の操作はできません。
ロック解除は、期限経過後にバーンすることで行われます。
3. ロック集計モジュール
ユーザーが複数のロックNFTを持っている場合でも、
全NFTを参照して「合計ロック量」を動的に計算。
トークン送金時の制御が常に正確に保たれます。
🔄 実際の利用フロー

🔒 ロック時
「1000トークンを4年ロック」と指定
ロック証明NFTが自動発行
トークンはウォレットに残るが、1000トークン分は送金不可
🔓 解除時
4年後経過後、NFTをバーン
トークン全量が再び自由に動かせる状態に
👀 ウォレット上の見え方
トークン残高:5,000
ロック証明NFT:1,000トークン・4年ロック中
送金可能額:4,000
🧠 技術的ポイント
✅ ノンカストディアルの実現
トークンの所有権は常にユーザーにある
コントラクトには「制約情報」だけを記録
送金時にロックNFTを参照して制御をかけることで、実質的なロックを実現
✅ 複数ロックにも対応
500トークンを1年ロック(NFT #1)
300トークンを4年ロック(NFT #2)
→ 合計800トークンがロック扱い
→ 各NFTは独立してバーン可能
✅ 見やすいNFTメタデータ
NFTメタデータには以下を格納します。
{
"lockedAmount": "1000",
"unlockDate": "2028-12-31",
"remainingDays": "45",
"token": "MIYAKO"
}OpenSeaなどでも残り日数が確認でき、視覚的にロック状態を管理できます。
🧪 動作テスト結果
ケース①:基本ロック
トークン残高:5000
1000トークンを4年ロック
→ ロック証明NFT発行
→ 送金可能:4000
→ ✅ 意図通り動作
ケース②:複数ロック
500トークン(4年)+300トークン(1年)ロック
→ 合計800トークン制限
→ ✅ 正常に集計
ケース③:期限後バーン
期間前は削除不可
期間後に削除可能
→ ✅ 期限管理正確
💡 実運用で見えたこと
🧭 ノンカストディアルの安心感
「預けている」のではなく「制約があるだけ」という構造は、
ユーザーにとって想像以上に安心感を与えます。
運営やコントラクトに依存せず、常に自分のウォレットで残高を確認できる点が特徴的です。
🎨 NFTによる可視化の効果
「今何がロックされているか」が一目でわかる
OpenSea上で確認できる
UI次第でロック期間を色や進行度で表現できる
唯一の課題は、NFTが増えたときの一覧性の低下。
UX面での工夫(フィルタリングや期間表示UIなど)が次の改善ポイントです。
🚀 応用可能性と今後の展開
想定ユースケース
トークンセール購入者ロック
自己保有のままロック → 信頼性と透明性の両立チームトークンの透明化
運営メンバー各自のウォレットでロック → コミュニティに安心感コミュニティ特典やアクセス制御
「一定数のトークンをロックしている人限定チャンネル」など、NFTを証明として活用。
実際にこの仕組みは、Miyako Pad の Discord Bot にも組み込まれています。
Botはウォレットアドレスを検証し、TBCZトークンを一定数(160,000以上)ロックしているユーザーを認識。
条件を満たしたユーザーには、Discord内で専用ロールを付与し、
「ロック保有者限定チャンネル」へのアクセスを開放しています。
改善アイデア
ロック延長オプション
ガス効率化(集計・NFT管理)
動的NFT化(残り日数に応じた画像変化)
🔮 まとめ:機能と信頼の両立へ
「ノンカストディアルなロック」は、
Web3の原点である 「自己管理の自由」 と 「安全な制約」 を両立する仕組みです。
この仕組みはすでに MIYAKOトークン および TBCZトークン で実運用されています。
実際に運用する中で、以下のような価値を確認できました。
預けない安心感
NFTによる透明性
柔軟な拡張性
これらの要素が、既存のロックモデルにはない信頼性と操作感を実現しています。
トークンセール、DAOガバナンス、コミュニティ設計など、
「預けずに制約を共有する」 という考え方は、これからのWeb3において重要な役割を果たす可能性があると感じています。
次回は、Zenn/Mirror 向けにもう少し技術的な側面も紹介予定です。
