共有アドレスが機能しない理由
暗号資産を受け付けるプラットフォームは、どこも同じ壁に同じ順序でぶつかります。たいていは、誰も見つけられない支払いについての最初の問い合わせが来た後です。
- 1つのアドレスからわかるのは金額と送信元だけで、それがどのユーザーのものかは決してわかりません。金額で突き合わせる方法は、2人が同じ数字を送った最初の瞬間に破綻します。
- よくある回避策は、いったん一箇所にまとめて後から支払うことです。しかしそれは決済機能を、他人の資金を預かる行為に変えてしまいます。プラットフォームが引き受け得るもののなかで、最も重いものです。
- メモや参照番号を貼るようユーザーに頼む方法は、誰かが忘れるまでは機能します。そして忘れられた後は、人間がブロックチェーンを手作業で照合することになります。
ユーザーごとに1回だけの呼び出し
ユーザーに対するあなた自身の識別子を送ると、変わることのないアドレスが返ります。ですからこの呼び出しは登録時に1度だけで、以後は必要ありません。
- 01
自分のIDで顧客を作成する
既存のユーザーIDを `external_ref` として渡します。Unheldが新しい識別子を発行して、あなたがそれを保存し対応付ける必要はありません。レコードは、すでにあなたのデータベースが使っているIDで引けます。
- 02
返ってきたアドレスを保存する
レスポンスには、そのユーザー向けの入金アドレスが含まれます。あなた自身のウォレットから導出されたものです。固定なので、画面に表示しても、QRコードにしても、ユーザーに保存させてどこからでも送金してもらっても構いません。
- 03
ウェブフックが届いたらアカウントに反映する
そのアドレスへの支払いは、帰属する顧客に紐づけられ、通知にはあなた自身の `externalRef` が添えて返されます。あなたのアプリケーションは、金額を突き合わせることもチェーンを読むこともなく、すでに知っているユーザーIDに反映できます。
実際の呼び出し
リクエスト
curl -X POST https://api.unheld.io/api/v1/customers \
-H "Authorization: Bearer $UNHELD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "user_8412",
"label": "Ada Lovelace",
"supported_assets": ["ETH", "USDC"],
"evm": true
}'レスポンス
{
"id": "c7f1…",
"external_ref": "user_8412",
"label": "Ada Lovelace",
"evm_address": "0x…",
"supported_assets": ["ETH", "USDC"],
"receive_method": "auto"
}`customers:write` スコープを持つAPIキーが必要です。読み出しには `customers:read` が必要です。ユーザーが支払えるすべてのチェーンのアドレスは `GET /api/v1/customers/:id/addresses` から取得できます。
支払いはどうやってユーザーにたどり着くのか
アドレスそのものが識別子です。ちょうど1人の顧客に属し、決して変わらないため、届いた支払いはメモも参照フィールドも金額の照合もなしに帰属します。その3つはいずれも、本番環境で壊れるものです。
請求書も `customerId` で顧客に紐づけられるので、単発の請求と常設の入金アドレスが、ダッシュボード上でもウェブフック上でも同じユーザーに帰属します。
資金が実際にどこにあるのか
資金はあなた自身のウォレットから導出されたアドレスに届きます。Unheldが保存するのは閲覧専用の公開部分だけなので、動かすことも、凍結することも、失うこともできません。後からあなたに支払うためにここで保持している残高もありません。
そこからはわからないのは、あなたのプラットフォームがユーザーのために資金を保有しているかどうかです。あなたが管理するアドレスに支払いが届き、その価値をユーザーに対して負っているのであれば、おそらく保有しています。これはあなたの取り決めと法域についての問いであり、当社が代わりに答えられるものではありません。専門家の助言を得てください。当社が言えるのは当社側のことだけです。資金がUnheldを経由することはありません。
この上に設計する
どれも、本番で出くわすより今のうちに設計へ織り込むほうが簡単です。
- すべてのユーザーアドレスは1つのウォレット、つまりあなたのウォレットから導出されます。これにより守るべきリカバリーフレーズはユーザーごとではなく1つで済みますが、同時に、資金が鍵によってユーザーごとに分別されているわけではないということでもあります。
- 固定アドレスは設計上再利用されます。それが帰属を成り立たせています。それは同時に、そのアドレスを知った誰もが、そのユーザーからあなたへの支払い履歴をオンチェーンで結び付けられるということでもあります。
- ユーザーのアドレスはチェーンの系統ごとに固定されるので、同じEVMアドレスが、有効にしたすべてのEVMネットワークで受け取れます。新しいチェーンを有効にしても、アドレスを再発行する必要はありません。
- 顧客を削除すると、プラットフォームはそのアドレスの監視をやめます。すでにそこへ送られたものを動かすことはなく、またできません。削除後に届いた資金も依然としてあなたのものですが、それについて通知されることはありません。
質問
Unheldは私のユーザーの資金を保有しますか。
いいえ。支払いはあなた自身のウォレットから導出されたアドレスへ届き、Unheldが保存するのは閲覧専用の公開鍵だけです。ですからここに残高はなく、引き出すものもありません。あなたのプラットフォーム自身がユーザーのために価値を保有しているかどうかは、あなた自身の取り決めについての別の問いであり、マーケティングページの回答ではなく専門家の助言を得るべきものです。
何人のユーザーが固有のアドレスを持てますか。
ユーザーあたりのアドレス数に上限はありません。アドレスはプールから割り当てられるのではなく導出されるため、100万人目の顧客を作る操作は1人目とまったく同じです。計測されるのはプランの顧客数と取引数の割当で、料金ページに記載しています。
ユーザーのアドレスが変わることはありますか。
ありません。設計全体がその性質の上に成り立っています。アドレスがユーザーを識別するので、一度発行されたら変わりません。画面に表示しても、QRコードに埋め込んでも、ユーザー自身のウォレットに保存してもらっても、1年後も正しいままです。
2人のユーザーが同時に同じ金額を支払ったらどうなりますか。
曖昧なことは何も起きません。金額が誰かを識別するために使われることは一切ないからです。各支払いはちょうど1人の顧客に属するアドレスへ届き、ウェブフックはその顧客に対するあなた自身の参照情報を運びます。金額が同じでも、時刻が同じでも、送信元が同じでも、すべて無関係です。