第27章 · Crypto Product は Web2 Product と何が違うのか
なぜ Crypto 製品は Web2 の手順をそのまま使えないのか?
- 練習する能力
- BuilderSystem ThinkingAI Literacy
- 実践
- dApp を初めて使う手順を各段階で撮影し、署名ごとに何を許可したか明記する。
- AI Lab
- AI に機能の PRD 草案を作らせ、取引失敗、停滞、先回り取引といった見落とした失敗経路を人手で補う。
現実の問題
Web2の商品を八年作った人が、オンチェーンのチームへ入った。
最初は簡単な依頼だ。ステーブルコインを別資産へ替えるワンクリック購入を作る。慣れた手順で、読み込み、進捗、成功画面、再試行、計測、A/Bテストをすべてそろえた。
二週間で、サポートとデータに六つが出た。
- 押しても何も起きない。買う資金はあるが、手数料のネイティブトークンがない。
- 三回押した。四十秒待って止まったと思い、さらに二回押す。三取引とも成立した。
- 成功後に、いつ取り消せるかと聞く。
- アドレスを間違え、返金を求める。
- 十六進数の画面を承認し、三週後に資金を失う。署名は無制限の承認だった。
- 表示1.02、約定0.97と苦情が来る。何が起きたか画面にない。
Web2には残高検査、連打防止、取消API、返金、平易な権限表示、価格固定という標準解がある。ここではどれもそのまま成立しない。
能力不足ではなく、慣れた手順の三前提が、チェーンではすべて成立しないからだ。
課題は、三前提は何で、失われるとどこを変えるかだ。
思考実験
一度に考えず、一前提ずつ取り除こう。
第一:取消を削除する。
ボタンを隠すのでなく、物理的に存在させない。確認すると発生し、自分、データベース、裁判所を含め誰も逆転できない。
多くの設計が崩れる。
- 確認画面が通過点から主画面になる。 取消可能なら礼儀だが、不可逆なら最後の防御だ。
- サポートは解決から説明へ変わる。 救済を教える話法の半分が無効になる。
- 本番流量で試行錯誤できない。 小規模公開して戻す道具がなく、対象者の資金は実際に失われる。
- 初心者案内を先にする。 とりあえず試して直すとは言えない。
第二:毎行動に鍵を取り出し、その場で署名させる。
鍵は自分になく、代理も保管もできない。毎回ウォレットが、理解しにくい内容を示して押すかを求める。
さらに崩れる。
- 手数が圧縮すべき費用になる。 Web2では体験だが、追加署名は離脱点とリスク点だ。
- 書いた文案を利用者が見るとは限らない。 別のウォレットが描画し、影響はできても支配できない。
- 選択を記憶する設計が危険になる。 対応するのは、一承認が永久で無制限という状態だ。
第三:知らないうちに誰でも他の製品を接続できる。
申請、契約、同意なく、インターフェースを読んでコードを呼ぶだけでつながる。
最大の利点と問題を同時に生む。
- 何もしなくても流通が起こる。 相手の利用者が自分の利用者になる。
- 利用仮定が破れる。 人でなく契約、一件ずつでなく一取引に百件来る。
- 単独でインターフェースを変えられない。 接続先が一緒に壊れ、誰なのかも知らない。
残るのはチェーンを足したWeb2ではなく、制約がまったく違う製品だ。
あなたが決める
ワンクリック再投資を作る。収益を再び入れるには、受取、承認、入金の三つが要る。
結果を観察する
一文へまとまる。
難しさは機能ではなく、状態と信頼の境界が引き直されたことだ。
三つの暗黙前提を、現実と並べる。
| Web2の前提 | 現実 | 補うもの |
|---|---|---|
| 誤りは直せる | 確認後は誰も直せない | 事前情報、シミュレーション、金額とアドレスの再照合 |
| サーバーが代理する | 本人の署名が要る | 回数圧縮、内容翻訳、境界固定 |
| インターフェースと利用者を支配する | 誰でも契約から呼べる | 安定性の約束、異常処理、組合せ仮定 |
| リクエスト成功が完了 | 中間状態があり、組み替えもある | 完全な状態機械と待機文案 |
| 無料利用 | 書込は毎回有料 | 事前費用検査、失敗費用の説明、代払いの選択 |
後の二つは追加の、忘れやすい差だ。
第四:Web2の中間は読み込みだけだが、署名済み未配信、メモリプール待機、格納済み未確定、組替えで消失など、それぞれ意味が違う。
第五:試すにも価格があり、料金が行動を変える。迷い、まとめて行い、高い時は来ない。
モデルを作る
交渉できない三制約
- 不可逆
- 署名必須
- 組み合わせ可能
| 制約 | 消すもの | 生む設計 |
|---|---|---|
| 不可逆 | 取消、返金、巻戻し、本番試行 | 事前確認、模擬、上限、許可リスト |
| 署名 | サーバー代理、静かな更新 | 手数圧縮、翻訳、量と期限 |
| 組合せ | 呼出者支配、自由なインターフェース変更 | 安定インターフェース、防御仮定、バッチと契約対応 |
第三は技術だけでなく位置付けだ。入口にも、他人の部品にもなる。 入口は使いやすさ、部品は安定、明確な文書、予測可能な動作が要る。多くは選び切れず、両方不足する。
六状態
各欄に画面と文案が必要だ。 抜ければ利用者が想像し、大抵最悪を想像する。
- 構築
- 署名待ち
- 配信済み
- 確認待ち
- 確認済み
- 最終確定
| 状態 | 体験 | よくある誤り |
|---|---|---|
| 構築 | 金額、経路、費用を計算 | 表示と約定の差を説明しない |
| 署名待ち | ウォレットが開く | 自画面に意味の説明なし |
| 配信済み | ネットワークへ入る | 確認できる取引証跡なし |
| 確認待ち | 格納されたが数不足 | 成功と表示。最も高くつく |
| 確認済み | 必要数を満たす | 基準を説明しない |
| 最終確定 | 実際には変更不能 | 前と混同する |
不足時の成功表示は、保証できない約束だ。 第1章の到着表示と決済完了の時差を、製品が表す責任を持つ。
失敗経路
最も写すべき表だ。 取引機能のPRDで一つずつ使う。
| 失敗 | 見えるもの | 対応 |
|---|---|---|
| ネイティブなし | 反応なし | 開始前検査と不足・補充先 |
| 残高不足 | エラーの文字列 | 先に検査し利用上限を入力欄へ |
| 承認不足 | 失敗し費用は引かれる | 上限検査と承認・実行の説明 |
| スリッページ超過 | 巻き戻る | 原因と調整入口、勝手に広げない |
| 先回り実行 | 悪い約定価格 | 保護と見積期限 |
| メモリプール停滞 | 回り続ける | 証跡、照会、対処 |
| 契約途中失敗 | 費用は返らない | 先に模擬し必ず失敗するものを止める |
| 本人が取消 | 元へ戻る | 失敗と取消を区別 |
| 混雑・料金上昇 | 格納されない | 費用水準と待つ選択 |
| 再編 | 成功した取引が消える | 第四で成功と書かない |
七つは署名前に止められる。一回の追加検査は最も費用対効果が高く、離脱、損失、問い合わせを同時に減らす。
四つの署名
ウォレットが区別しないかもしれず、自画面で分ける。
| 種類 | 動作 | 取消 | 説明 |
|---|---|---|---|
| 送金 | 資産を送る | 不可 | 宛先、額、終了 |
| 承認 | 契約に資産使用を許す | 自分で取り消せる | 上限、期限、更新可能か |
| メッセージ | 所有の証明。非オンチェーン・無料 | 対象外 | お金を動かさないと明示する |
| オフライン注文 | 他人が実行する承認 | 設計次第 | 期限、実行者、無効化 |
第二は第24章の入口だ。必要量、期限、履歴閲覧と取消の三つで減らす。
第四は無料・非配信で第三に見えるが、実行可能な権限で、時点を本人が決めない。期限と無効化を必ず書く。
何と呼ぶか
支配できないアプリで、毎操作を承認してもらうこと。
重要な転換が他人の画面で起こる構造だ。自側で説明し、移る回数を減らす二つしかない。
表示、上限・期限対応、同じ呼出データの翻訳が違う多数と向き合う。設計時に三主要ウォレットの見え方を問う。T13で実装差を扱う。
秘密鍵で内容へ許可する、唯一の同意。
偽造不能、否認不能、場でなく内容に効力が依存するの三つだ。
第三がリスクだ。無読確認の習慣は偽サイトにも持ち込まれる。読む教育は安全教育だけでなく製品の一部だ。
ネットワークに実行してもらう費用。
ネイティブで払うためステーブルだけの新人は進めず、混雑で変動し、失敗でも引かれる。
必失敗を事前模擬で止めれば、費用だけでなく挫折も省ける。
代払は初回の障壁を下げるが、製品側の費用になり、それを取る専門アドレスを呼ぶ。第28章の問題だ。
確認後、誰も取り消せないこと。
第1章の現金に似るという製品上の意味だ。渡せば終わりで、サポートはない。
Web2で誤り後へ使う全努力を、前へ移す。 確認、検査、模擬、上限、照合は磨き込みではなく本体だ。
同意なしで契約を呼び、相手の製品へ接続できること。
費用なしで相手の利用者が来る。第9章の特別な性質だ。
呼出者支配、自由変更、使用仮定を失う。人でなくコード、一件でなく百件かもしれない。論理へ書く前に、コードが呼んでも成立するか問う。
実践
このLabの目的は製品を使うことではなく、操作を一コマずつ分解することだ。 速さより、各段階で止まり画面を撮ることが重要になる。
まず、新しく作った、まっさらなウォレットアドレスを用意する。普段のウォレットは使わない。テストネットのフォーセットでネイティブトークンを少量受け取り、未経験のDAppを選ぶ。
トップページを開くところから、初めて意味のある操作が完了するまで撮影する。
読み込み、エラー、ウォレットのポップアップも含め、全画面を撮る。ウォレットの画面は全部撮る。 展開しないと見えない部分も含める。
全体の画面数、判断が必要な画面数、署名回数を数える。この三つが製品の初回利用コストだ。
署名画面を一つずつ読み解き、表を埋める。
| 何回目の署名 | ウォレットの表示 | 四種類のどれか | 上限額 | 有効期限 | 製品画面に説明があるか |
|---|---|---|---|---|---|
| 1 | |||||
| 2 |
上限額の列が重要だ。 利用許可の署名なら、要求額が今回必要な数量か、極端に大きな数かを調べる。後者は無制限の許可だ。
読めない内容はコピーし、エクスプローラーでコントラクトのインターフェース名を調べる。何度か行うと、よくある署名の種類を直感で見分けられるようになる。
三種類の失敗をわざと起こし、それぞれ撮影する。
| 起こし方 | 観察すること |
|---|---|
| ネイティブトークンを使い切って再度操作する | 事前チェックがあるか。説明は理解できる言葉か、エラーコードだけか |
| 残高より大きな数字を入力する | 入力時に止めるか、署名してから失敗するか |
| ウォレットで「拒否」を押す | 利用者のキャンセルと取引失敗を区別するか |
三つ目は製品の成熟度をよく表す。 利用者が自分で中止したのに「取引失敗。再試行してください」と伝えるのは、よくある、利用者を困らせる誤りだ。
状態が変わった時刻をすべて記録する。
確認を押してから計測し、最初の画面変化、取引の証跡が表示された時刻、「成功」と表示された時刻を記す。
証跡をエクスプローラーで確認する。製品が「成功」と表示した瞬間、承認は何回だったか。
これはLab全体で最も価値のある数字だ。「成功」「送信済み」「承認待ち」のどれが画面に書かれていたか、照らし合わせる。
許可の状態を点検し、取り消す。
許可を調べるツール、またはエクスプローラーのコントラクト読み取り機能で、この新しいアドレスが与えた許可と各上限額を確認する。
さっきの一操作で、無期限・無制限の許可が残っているかもしれない。取り消し、必要な操作数と手数料の支払い回数を記録する。
これは第24章の「自分で署名した」という流出経路を閉じる操作だ。終わったら、普段のウォレットでも同じ点検を行う。
三段構成で結論を書く。
この製品の良い点三つ:
この製品が見落とした失敗経路三つ:
自分が改善するなら最初に直す点:二段目は先ほどの失敗経路リストと一つずつ照合する。十項目のうち三〜五項目が未対応なのはよくある。 それが製品の次の四半期の仕事になる。
AI Lab
この課題の分担は明確で、製品業務でAIができる範囲を理解するのに向いている。
モデルが得意なのは、機能の説明から、目標、役割、主要フロー、画面要素、計測、受入基準をそろえた文書を作ることだ。速く整った文書を書けるので、手作業を大きく減らせる。
モデルが構造的に苦手なのは失敗経路だ。学習資料にはオンチェーンよりWeb2の製品文書がはるかに多く、Web2は失敗経路自体が少なく、多くは救済できる。そのため、たまに抜けるのではなく、構造的に抜ける。
次の機能についてPRD草案を書いてください:
<機能の説明。例:利用者が保有するA資産をB資産へ、一度の操作で交換する>
対象チェーン:<チェーン名>。対象利用者:<この種類の製品を初めて使う人 / 経験者>。
第1部:主要フロー。各段階について次を記してください。
- 利用者には何が見えるか
- 署名が必要か。必要なら送金 / 利用許可 / メッセージ / オフライン注文のどれか
- 利用許可なら上限額と有効期限をどう設定するか。その理由
第2部:取引状態。「作成 / 署名待ち / 送信済み / 承認待ち / 承認済み / 最終確定」
の六状態ごとに、表示する文言と利用者ができる操作を記してください。
何番目の状態で「成功」と表示するか、判断基準も明示してください。
第3部:失敗経路。一つずつ、発生条件、利用者の表示、製品側の処理を書いてください。
ネイティブトークンなし / 残高不足 / 許可額不足 / スリッページ超過 / 先回り実行 /
メモリプールでの滞留 / コントラクト実行失敗 / 利用者のキャンセル / ネットワーク混雑 / チェーン再編
第4部:不確かな点を別に列挙してください。
規則:
- オンチェーンでの実現方法を説明できない取消・ロールバック・返金処理は書かないでください。
- 各失敗経路には具体的な画面文言を用意してください。「親切な案内を出す」だけでは不十分です。このプロンプトには失敗経路十項目をそのまま書いている。 意図的だ。列挙しなければ書かないが、列挙すれば十分に書ける。これは役立つ発見だ。モデルに足りないのは能力より、このリストである。そしてリストは人が渡す必要がある。
草案を受け取ったら、次の三つを行う。
- 第3部の十項目を一つずつ点検する。 全部あるか。それぞれの処理は本当にオンチェーンで実行できるか。
- 第2部を自分のLabの観察と比較する。 実測した製品はどの状態で成功を表示したか。モデルの記述と同じか。
- 作り出した機能を探す。 よくあるのは「直前の取引をワンクリックで取り消す」と「失敗時に自動再試行し手数料を返す」。前者は存在せず、後者では手数料を取り戻せない。
この課題で頻発する誤りを、危険度の順に四つ挙げる。
- Web2の取消可能という前提を持ち込む。 「15分以内ならキャンセルできる」と書くが、オンチェーンには実装経路がない。
- 送信済みの段階で成功を表示する。 状態を二つに圧縮する最もよくある誤りで、最初の節の六つの問い合わせの直接の原因だ。
- 無制限の許可を既定にする。 「初回利用時に許可を求める」とだけ書き、額を示さない。実装では上限なしになりやすい。
- 先回り実行に全く触れない。 Web2に対応物がないため、自発的に思いつくことは少ない。仕組みの詳細はT24を参照する。
補足部分は別に保存する。三機能ほど続けると、自分の追記が何度も繰り返されていることに気づく。それが、どんなテンプレートより使いやすい自分のオンチェーン製品チェックリストになる。
AI の回答後、自分で必ず検証すること
- 成功経路で「取引を送信した」を「操作が完了した」と扱っていないか
- 十の失敗経路をいくつ網羅したか。特にネイティブトークンなし、許可額不足、スリッページ超過が抜けやすい
- ウォレットでのキャンセルを扱っているか。取引失敗とは別の事象だ
- 各署名の種類、上限額、有効期限を説明しているか
- 許可は無制限を前提にしているか、必要額だけか
- メモリプールに滞留している間の表示と利用者の操作を書いているか
- 先回り実行に触れていないか、それとも具体的な製品側の対策があるか
- 最重要点:再試行・取消・ロールバックの処理は本当にオンチェーンで成立するか
実例
初期のオンチェーン製品は操作を減らすため、最初に極端に大きい上限額を求めた。一度許可すれば、以後ポップアップは不要になる。当時の実際の体験問題を解決した方法が慣行となり、後続の製品もそのまま採用した。
数年後、別の代償が現れた。ウォレットには、利用者が忘れた無期限・無制限の許可が大量に蓄積した。 許可先には更新可能なコントラクトもある。第24章の第五の資金流出経路の損失は、多くがここで起きる。
当初の判断を批判するより、この例は製品の既定値の寿命を示す。クリックを一回減らすための判断が、製品が消えてずっと後も他人のウォレットで効き続ける。
ある製品は取引がブロックへ取り込まれた瞬間、緑のチェックと「取引成功」を表示する。たいていは問題ない。
しかし一度、小さな再編でそのブロックが置き換わり、取引は再取り込みされなかった。利用者はすでに成功を見て、ページを閉じ、受け取った前提で次の行動をしていた。
再編はシステムの通常の挙動だ。問題は製品が、保証する権限のないことを約束した点にある。
適切な対応には文言を少し増やせばよい。承認数が不足している間は「送信済み、承認待ち(現在2/12)」と示し、閾値で成功を表示する。状態を一行増やせば、事故の一分類を減らせる。
利用者が画面の見積もりを見て確認を押す。取引は公開メモリプールへ入り、実行前から誰でも見える。
価格を動かすほどの大口注文と察知したプログラムが、その前後に自分の取引を挟み、差額を得る。利用者の約定価格は表示された価格より悪くなる。
オンチェーンではすべて正常で、コントラクトは破られていない。公開メモリプールの自然な帰結であり、事故ではない。
製品側は見積もりの期限を明示し、価格許容幅を無理解のまま調整させず意味を説明し、大口取引の危険を知らせる。公開メモリプールを通らない送信方式も使える。まず画面で、この事象が存在すると認めることだ。 約定後に利用者が価格差の理由を推測するしかない状態が最悪だ。詳細はT24を参照する。
公開時には、人が自前の画面から一件ずつ呼ぶと仮定した。頻度制限、リスク管理、統計はすべてこの前提に立っていた。
数か月後、別チームが自社製品へ組み込み、利用者はそちらで操作し、呼び出しはこちらで発生する。見えるのはコントラクトアドレス、一取引に数十回の呼び出し、画面側の事前チェックなしという状態だ。
日次利用者数はすぐに歪む。 第23章のアグリゲーター問題だ。頻度制限は機能せず、事業上の前提も成立しなくなる場合がある。
誰かの過失ではなく、組み合わせ可能性の代償だ。設計時に、呼ぶのが人ではなくコードでも、すべての前提が成立するかを答える必要がある。
変数を一つ変える
初回利用のハードルは大きく下がる。別の場所でネイティブトークンを用意する必要がなくなり、最もよくある失敗経路が消える。
ただし三つが生じる。費用はあなたへ移る。 しかも制御できない混雑に応じて変動する。悪用を防ぐ仕組みが必要になる。 代払い枠を消費するためだけのアドレスが来るからだ。第28章がその経済を扱う。利用者は費用を意識しなくなる。 他の製品でなぜ支払うか理解できず、環境への認識自体を変えてしまう。
さらに、代払いには通常、利用者がオフライン許可へ署名し、あなたがオンチェーンで実行する必要がある。 署名は第一種から第四種へ移り、リスク構造も変わる。署名は残り、対象が変わるだけだ。体験が滑らかでも、この点を画面で説明しなければならない。
六状態は圧縮されて見える。ほぼ待たず、費用も気にならず、再試行の代償も小さい。多くの設計は簡略化できる。
ただし三制約は残る。不可逆性は変わらない。 速い承認は不可逆になるのも速いということだ。署名は必要だ。 回数のコストは待ち時間から中断へ移り、中断も離脱を生む。組み合わせ可能性も変わらない。
逆向きの効果もある。安い手数料は気軽な試用を安くする一方、水増しや報酬獲得の費用も下げる。 体験で省いたコストを成長施策側で払い直すかもしれない。
速く安いチェーンだからWeb2流に作れる、と考えない。 変わるのはパラメーターで、制約ではない。
新規利用者向け案内を改善する問題ではなく、製品形態を選ぶ問題だ。道は三つある。
第一は教育。 ウォレット、署名、手数料をすべて教える。転換率は低いが、残る人は自分の行為を理解する。
第二は隠すこと。 ウォレットを意識せず使えるようにする。この場合、秘密鍵を誰が持つのかを慎重に答える必要がある。あなたならカストディ事業者だ。利用者の鍵を包み込んでいるだけなら、あなたが消えた後の管理権回復を説明する。
第三は利用者を変えること。 この機能は完全な初心者に適さないと認め、まずウォレット保有者を対象にする。
どれも成立する選択だが、明示的に一つを選ぶ必要がある。 複雑さを隠しながら保管責任を避けると、カストディに見えるのにその保証がないものを作ってしまう。
入口から部品へ変わり、評価基準も丸ごと変わる。
重要になるのは、インターフェースの安定、文書の品質、予測できる挙動、一括呼び出しやコントラクトからの呼び出しへの対応、組み込み費用の低さだ。
重要でなくなるのは、見た目、新規利用案内、転換ファネルだ。組み込む側の仕事になる。
非常に難しくなるのは利用者の識別だ。呼び出しは他のコントラクトから来て、見えるのはアドレスだけ。第26章の損益表は作れても、第28章の継続率分析は難しくなる。
分配が自然に起き得る一方、成長は他者の製品判断に左右される。 第29章のBDの仕事には、この道で統合を進めるものが多い。
持ち帰る問い
この章はオンチェーン特有の問いを加える。来るのは人か、コントラクトか。
他製品に組み込まれたプロトコルを呼ぶのはコードだ。統計の定義だけでなく、利用者行動に関するすべての前提を崩し得る。機能を作る前に問う。コードから呼ばれても、この前提は成立するか。
製品では問いが具体的になる。この署名の後に起き得る最悪の事態は何か、誰が損失を負うか。
利用許可では上限内の資産がすべて移される。オフライン注文では、利用者に不利な時刻に実行される。この二文を書けない機能は公開すべきではない。
この章では人間向けの問いになる。製品が求める署名は、相手に何の権限を、どの上限額で、いつまで与えるか。
三つとも答えられない許可は、第24章のリスク経路の入口だ。製品ができるのは必要額だけの許可、有効期限、確認して取り消せる場所の用意だ。この三つを備えた製品は、安全教育だけを行う製品より安全になる。
オンチェーン製品では明白な答えがある。不可逆な資金操作の最後の一押しは、人が行う必要がある。
自動化が信頼できないからではなく、不可逆なら二度目の試行で誤りを直せないからだ。 設計の焦点は人の確認を残すかより、確認前に十分な情報をどう見せるかになる。この章の失敗経路リストは、そのためにある。
章末チェック
不可逆性。 取消、返金、ロールバック、段階公開による試行錯誤を失う。製品は力点を事後から事前へ移す必要がある。確認画面、事前チェック、シミュレーション、上限、アドレス照合だ。
署名が必要。 サーバーが利用者の代わりに動けなくなる。毎回本人の許可が、あなたに制御できない画面で行われる。署名回数はコストであり、署名内容を説明するのはあなたの責任だ。
組み合わせ可能性。 呼出者の制御と自由なインターフェース変更を失う。誰でも組み込めて、利用者だと思った相手がコードかもしれない。
合わせると、ブロックチェーンを足したWeb2製品ではなく、全く異なる制約を持つ製品だ。 フローの丸写しが成立しないのは、その前提がなくなっているからである。
製品が保証する権限のないことを約束するからだ。
取り込まれた取引は一つのブロックに入っただけだ。承認が不足しているとブロックが置き換わり、取引が消えることがある。利用者はすでに緑のチェックを見てページを閉じ、受領した前提で行動している。
送信済み、承認待ち(現在数と閾値を表示)、承認済み、最終確定を分ける。状態の文言を一行増やせば、事故の一分類を減らせる。
背景には第1章の、入金表示と決済完了は同時ではないという区別がある。Web2では裏側が吸収する差を、オンチェーンでは製品が表す必要がある。
送金の署名。 資産を送り、取消不可で、一度に実行される。
利用許可の署名。 コントラクトに特定資産を使わせる。一度の署名が、自分で取り消すまで有効だ。 既定の上限は無制限も多く、四種で最も危険である。
メッセージの署名。 アドレスの管理を証明する。オンチェーンで実行せず、費用も資産移動もない。製品が説明しなければ取引承認と誤解される。
オフライン注文の署名。 他者が持ち込んでオンチェーンで実行できる許可を署名する。無料でオンチェーンにも出ないためメッセージに見えるが、実行可能であり、時刻も利用者が決められない。
ウォレットが区別するとは限らないので、製品画面で四種を説明する責任がある。利用許可には必要額、有効期限、取消入口も用意する。
見てきた文書はWeb2が圧倒的に多く、Web2では失敗経路が少なく、多くは後から救済できる。学習した完全なPRDの型に、この節がないのだ。
具体的には、取消可能という前提の持込み(実現できないキャンセル機能)、送信時点での成功表示、無制限の許可を既定にすること、先回り実行への言及なしという四つになる。
対応はモデル交換より、十の失敗経路をプロンプトで直接渡すことだ。 渡せば書け、渡さなければ書かない。足りないのは能力ではなく、人が用意するリストだ。
この段階で繰り返す分担でもある。モデルは構造を埋め、人はこの環境で経験しなければ分からないことを補う。
標準解答はない。次を調べる。
- 画面からの推測か、実際に失敗を起こしたのか。最低三項目は実測する。
- ネイティブトークン不足は開始前に点検するか、署名後にエラーを出すか。
- 利用者のキャンセルと取引失敗を区別するか。
- どの状態で成功を表示するか。その時点の承認数をエクスプローラーで照合したか。
- 許可額は必要額か無制限か。有効期限があるか。
- 過去の許可を確認・取消できる場所が製品内にあるか。
- 先回り実行の存在を画面で認めているか。
経験上、十項目の三〜五項目が抜けることは珍しくない。 特に後半のメモリプールでの滞留、先回り実行、チェーン再編に偏る。Web2に対応物がなく、他業界由来の製品感覚では丸ごと飛ばしやすい。
終えたら結論を実際の継続率と比べる。失敗経路への対応が悪い製品は初回利用に離脱が集中しやすい。それを第28章で数値化する。
要点
不可逆性、署名、コンポーザビリティ。この 3 つがほぼすべてのプロダクト判断を変える。