Verify with Dial
Verify with Dial lets you gate Beacon actions behind wallet verification. Visitors prove wallet ownership via SIWE (Sign-In with Ethereum) or SIWS (Sign-In with Solana) before accessing protected features — verified support, holder-only content, role-based access, and more.
How It Works
1. User clicks a "verify_then" action
2. Beacon calls DialClient.auth.getNonce(walletAddress)
3. User signs a SIWE/SIWS message in their wallet
4. Beacon calls DialClient.auth.authenticate({ message, signature })
5. SDK returns auth result with verified wallet
6. Beacon checks scopes (wallet, role, social) via profile/registry
7. Gate satisfied → next action executes automaticallyThe Dial SDK handles all auth plumbing. Beacon orchestrates the UX.
Configuration
Enable verification and define gates:
{
"verify": {
"enabled": true,
"provider": "dial",
"gates": {
"holder-gate": {
"required": true,
"scopes": ["wallet", "role:holder"],
"onSuccessActionId": "holder-perks"
},
"basic-verify": {
"required": true,
"scopes": ["wallet"],
"onSuccessActionId": "verified-support"
}
}
}
}Gates
A gate defines the verification requirements for a specific action.
| Property | Type | Description |
|---|---|---|
required | boolean | Whether verification is mandatory |
scopes | string[] | Required scopes to pass the gate |
onSuccessActionId | string | Action to execute after successful verification |
Scopes
Scopes determine what the verification checks:
| Scope | Description |
|---|---|
wallet | Basic wallet ownership verification (default) |
role:* | Role-based access (e.g., role:holder, role:admin, role:vip) |
social:* | Social account verification (e.g., social:x, social:discord) |
Multiple scopes can be combined — all must be satisfied for the gate to pass.
Linking Actions to Gates
Use the verify_then action type to create a verification-gated action:
{
"quickActions": [
{
"id": "claim-role",
"label": "Claim Holder Role",
"icon": "badge",
"type": "verify_then",
"nextActionId": "holder-perks"
},
{
"id": "holder-perks",
"label": "View Holder Perks",
"icon": "gift",
"lane": "community",
"type": "open_link",
"url": "https://example.com/perks"
}
],
"verify": {
"enabled": true,
"provider": "dial",
"gates": {
"claim-role": {
"required": true,
"scopes": ["wallet", "role:holder"],
"onSuccessActionId": "holder-perks"
}
}
}
}The gate ID matches the verify_then action ID. When the user clicks “Claim Holder Role”:
- Wallet verification is triggered
- On-chain holder status is checked
- If verified, “View Holder Perks” executes automatically
Wallet Provider
Beacon uses the standard EIP-1193 wallet provider (window.ethereum) for wallet interactions. Users need a browser wallet (MetaMask, Coinbase Wallet, etc.) installed.
Use Cases
Anti-Spam Verification
Gate support chat behind basic wallet verification to prevent spam:
{
"id": "verified-support",
"label": "Verified Support (Anti-Spam)",
"icon": "shield",
"type": "verify_then",
"nextActionId": "support-chat"
}NFT Holder Access
Verify NFT ownership before granting access to exclusive content:
{
"gates": {
"nft-gate": {
"required": true,
"scopes": ["wallet", "role:holder"],
"onSuccessActionId": "exclusive-content"
}
}
}Priority Support
Offer priority support to verified wallets:
{
"gates": {
"priority": {
"required": true,
"scopes": ["wallet"],
"onSuccessActionId": "priority-chat"
}
}
}Analytics Events
Verification triggers two analytics events:
verify_started— when the verification flow beginsverify_completed— when verification succeeds
See Analytics for details.