
エアドロップと報酬
1人に1回だけ配布。1台の端末にウォレットが50個あっても受け取りは1回です。
Xodianは、アプリの利用者一人ひとりが正規の端末を使う実在の人物であることを確認します。自撮りも、本人確認書類のアップロードも、個人情報も不要です。アプリは署名付きの非公開の証明書を受け取り、1台の端末が1つのアプリで作れる証明書は1つだけです。
なぜ必要か
ウォレットを50個持つファーマーは、50人の利用者に見えてしまいます。Xodianはすべての応答を正規の端末1台のハードウェアキーに結び付けるので、そのファームは再び1人になります。
ウォレット1つが1人として数えられ、端末ファーム1つがキャンペーンを食い尽くします。
同じ端末、同じ人、同じsub。残り49個のウォレットは1つのIDにまとまります。
実測ではなく、ルールを示す例です。Xodianは1台の端末上のすべてのウォレットに同じIDを返します。
活用シーン

1人に1回だけ配布。1台の端末にウォレットが50個あっても受け取りは1回です。

ランク戦、体験版、初回ボーナスはプレイヤー1人につき1アカウント。

誰なのかを聞かずに、1人1票。

KYCの前にボットを除外し、本人確認の費用を実在の人物だけに使えます。
仕組み
コードを読み取り、共有される内容を確認し、omniで確定するだけ。サーバーは追加の通信なしで検証できる証明書を受け取ります。
Acme Airdropがあなたが実在の人物か確認しようとしています
Acme Airdropに伝わったのは、あなたが実在の人物であることだけです。
◆ 信頼済み設計段階からのプライバシー
利用者はプライバシーを守れ、あなたは不要なデータを保管する責任を負わずに済みます。
{
"iss": "https://xodian.xode.net",
"aud": "rp_acme",
"sub": "oid_9f3c1a…e07b", // only you see this
"human": true,
"level": 2,
"level_name": "established",
"uniqueness": "new",
"nonce": "claim-8812",
"receipt": "1759651200-a1b2c3d4"
}
保証レベル
セッションを開くときにminLevelを指定します。基準に満たない場合はrejectedだけが返り、条件を満たす方法はomniが本人にだけ案内します。
端末はセキュアチップから出せない鍵で署名します。ウォレットのシードをコピーしても通りません。
GoogleとAppleが、端末とアプリが正規で改ざんされていないことを保証します。
アプリごとに異なるIDなので、パートナー同士がデータを突き合わせて個人を追跡できません。
すべての判定は毎時XODEチェーンに記録され、後から変更されていないことを誰でも確認できます。
連携
ふつうのHTTPSと標準のJWTなので、どの言語・どのJOSEライブラリでも連携できます。
サンドボックス
テストキーは本番キーと同じように動き、端末の代わりにシミュレーターが応答します。トークンは同じコードで検証でき、"test": trueが付きます。本番環境ではこのフラグを拒否してください。
無料ですぐに発行されます。キーは1日5個まで、各キーで1日500セッションまで使えます。
シークレットが表示されるのは今回だけです。ページを離れる前に保存してください。
あなたのキーでセッションが開きます。次に「端末」がどう応答するかを選んでください。
// Get a test key to begin. Every call you make appears here,
// with the exact request your server would send.
ライブデモ
本番サービスで動いています。右側がパートナーのサーバーが受け取る内容そのものです。
端末でomniを開き、コードを読み取ってください。スマホではボタンでomniが直接開きます。
// Waiting. Press "Verify with Xodian" to start.
APIリファレンス
ベースURLはhttps://xodian.xode.netです。サーバーからの呼び出しはAuthorization: Bearer osk_…で認証します。
| エンドポイント | 認証 | 用途 |
|---|---|---|
POST/v1/sessions | secret | 本文{scope, minLevel, reference}。sessionId、url、deeplink、pollToken、expiresAt(5分)を返します。 |
GET/v1/sessions/{id} | secret | 状態。承認後はidToken、sub、levelも返します。 |
GET/v1/sessions/{id}/status?t= | pollToken | 状態のみ。ブラウザから呼んでも安全で、ウィジェットが使います。 |
POST/v1/test/clients | none | セルフサービスのサンドボックスキー:{name} → クライアントIDとシークレット。 |
POST/v1/test/sessions/{id}/simulate | test session | テストセッションへの応答:approve、deny、reject、expire。 |
GET/v1/.well-known/jwks.json | public | 署名用の公開鍵(ES256、kidで選択)。 |
GET/sentinel/receipt/{receipt} | public | 判定がXODEチェーンに記録されたことを示すマークル証明。 |
pending → approved | denied | rejected | expired。各セッションは1回だけ使えます。
session.*とgrant.revokedのイベントを、X-Omni-Signature: t=…,v1=HMAC_SHA256(secret, t.body)で署名して送ります。
署名を確認したうえでiss、aud、expを確認し、nonceが送ったreferenceと一致するか確かめてください。利用者キーにはsubを使います。
new、returning(同じ人または同じ端末)、contested(他人が使った端末に移ってきたウォレット)。contestedは重複の可能性が高いと考えてください。
よくある質問
いいえ。Xodianが証明するのは、正規の端末を使う実在の人物が1人であることだけです。その人が誰なのかは知ることも共有することもありません。多くのチームがKYCの手前で使い、通過した人だけに本人確認の費用をかけています。
いいえ。自撮りも顔のスキャンも書類のアップロードもありません。証明は端末のハードウェアキーと、Google Play IntegrityまたはApple App Attestによるものです。
ウォレットが引き継がれるので、アプリでは同じIDのままです。他人が使った端末に移ってきたウォレットはcontestedとして返るので、扱いを決められます。
はい、正規の端末1台につきIDは1つです。レベル2では端末ごとに数週間の利用が必要になるため、コストが大きくなります。Xodianが防ぐのは安上がりな手口、つまり1台の端末での複数ウォレット、エミュレーター、改ざんアプリです。
XodianはXODE上でサービスを作るパートナー向けにアーリーアクセス中です。テストキーは無料です。本番キーと料金はお問い合わせください。