
Solana Blinks Actions: Tương Tác Blockchain Trên Mọi Nơi
Solana Blinks (Blockchain Links) và Actions là chuẩn mới chuyển đổi trải nghiệm Web3 từ “kết nối ví → ký giao dịch” thành “click link → hành động on-chain ngay lập tức”. Được công bố năm 2024, Blinks cho phép nhúng bất kỳ Solana Action nào (swap, vote, mint, pay, stake) vào URL, button, QR code hoặc embed — hoạt động trên mọi platform hỗ trợ hyperlink.

Blinks và Actions Là Gì
Actions (Solana Actions) là spec chuẩn hóa để định nghĩa một hành động on-chain dưới dạng API REST. Mỗi Action trả về metadata (title, icon, description) và các trường transaction cần thiết. Client (ví, bot, website) đọc metadata, hiển thị UI, user xác nhận, client sign và broadcast transaction.
Blinks (Blockchain Links) là URL đặc biệt encode Action ID và parameters. Format: https://dial.to/?action=solana-action:. Khi user click Blink link, wallet/dial.to resolve Action, render UI, user sign — hoàn thành trong một luồng liền mạch.
| Thành Phần | Vai Trò |
|---|---|
| Action Provider | Server expose GET /actions/ (metadata) và POST /actions/ (transaction) |
| Blink URL | Link chia sẻ encode action + params (query string hoặc path) |
| Client (Wallet/Dial.to) | Resolve Blink → fetch Action metadata → render UI → sign tx → broadcast |
| User | Click link, review details, approve signature trong wallet |
Kiến Trúc Chi Tiết
1. Action Specification (GET)
Endpoint: GET https://api.example.com/actions/swap
{
"title": "Swap SOL → USDC",
"icon": "https://example.com/swap-icon.png",
"description": "Swap 1 SOL for USDC at current market rate",
"label": "Swap",
"links": {
"actions": [
{
"label": "Confirm Swap",
"href": "/actions/swap?amount=1&input=SOL&output=USDC",
"parameters": [
{"name": "amount", "label": "SOL Amount", "type": "number", "required": true},
{"name": "slippage", "label": "Slippage %", "type": "number", "required": false}
]
}
]
}
}
2. Transaction Building (POST)
Client POST đến href với parameters, server trả về unsigned transaction(s):
POST /actions/swap?amount=1&input=SOL&output=USDC
{
"account": "user_wallet_public_key"
}
Response:
{
"transaction": "base64_encoded_unsigned_transaction",
"message": "Swap 1 SOL → USDC (est. 145.23 USDC)"
}
3. Blink URL Format
# Dial.to format (canonical)
https://dial.to/?action=solana-action:https://api.example.com/actions/swap?amount=1&input=SOL&output=USDC
# Direct action URL (if client supports)
solana-action:https://api.example.com/actions/swap?amount=1&input=SOL&output=USDC

Các Loại Actions Phổ Biến
- Token Swap: Jupiter, Orca, Raydium actions — swap ngay trong tweet/email
- Governance Vote: Realms, SPL Governance — vote proposal bằng 1 click
- NFT Mint/Buy: Magic Eden, Tensor — mint collection hoặc buy listing
- Payments: Solana Pay integration — pay invoice, tip creator, donate
- Staking: Marinade, Jito, Lido — stake/unstake SOL liquid staking
- DeFi Actions: Borrow/lend (Kamino, MarginFi), provide LP, claim rewards
- Identity/Social: Follow on Farcaster, claim handle, verify credential
Ví Dụ Code: Tạo Action Swap Đơn Giản
Dưới đây là implement tối giản cho Action swap SOL→USDC dùng Jupiter API:
# Python (FastAPI) - Action Provider
from fastapi import FastAPI, Query
from pydantic import BaseModel
import httpx, base64
app = FastAPI()
class ActionResponse(BaseModel):
title: str
icon: str
description: str
label: str
links: dict
@app.get("/actions/swap")
async def get_swap_action():
return ActionResponse(
title="Swap SOL → USDC",
icon="https://example.com/jupiter-icon.png",
description="Instant swap SOL for USDC via Jupiter Aggregator",
label="Swap",
links={
"actions": [{
"label": "Confirm Swap",
"href": "/actions/swap/execute",
"parameters": [
{"name": "amount", "label": "SOL Amount", "type": "number", "required": True},
{"name": "slippage", "label": "Slippage %", "type": "number", "required": False, "default": 0.5}
]
}]
}
)
@app.post("/actions/swap/execute")
async def execute_swap(account: str, amount: float = Query(...), slippage: float = Query(0.5)):
# 1. Fetch quote from Jupiter
async with httpx.AsyncClient() as client:
quote_resp = await client.get(
"https://quote-api.jup.ag/v6/quote",
params={
"inputMint": "So11111111111111111111111111111111111111112", # SOL
"outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC
"amount": int(amount * 1e9), # lamports
"slippageBps": int(slippage * 100)
}
)
quote = quote_resp.json()
# 2. Get swap transaction
swap_resp = await client.post(
"https://quote-api.jup.ag/v6/swap",
json={"quoteResponse": quote, "userPublicKey": account}
)
swap_tx = swap_resp.json()["swapTransaction"]
return {"transaction": swap_tx, "message": f"Swap {amount} SOL → USDC"}
# Blink URL để chia sẻ:
# https://dial.to/?action=solana-action:https://your-api.com/actions/swap?amount=0.5
Tích Hợp Vào Ứng Dụng
1. Website/Blog: Button Blink
2. Social Media: Tweet với Blink
Twitter/X hỗ trợ render Blink card khi detect URL dial.to. User click card → mở wallet popup → sign.
3. Email/Newsletter: QR Code Blink
Generate QR từ Blink URL, user scan bằng mobile wallet (Phantom, Backpack, Solflare) → sign ngay.
4. Discord/Telegram Bot: Slash Command
/swap sol 1 usdc
# Bot reply với Blink button hoặc direct link

So Với Solana Pay Và Wallet Adapter
| Tiêu Chí | Solana Pay | Wallet Adapter | Blinks/Actions |
|---|---|---|---|
| Scope | Payments only | Kết nối ví + sign tx | Bất kỳ action on-chain nào |
| Shareability | QR code, URL | Chỉ trong app | URL, button, QR, embed — universal |
| Discoverability | Thấp | Thấp | Cao (metadata + Blink registry) |
| Composability | Khó | Manual | Chuẩn REST, dễ compose |
| Client Support | Wallets implement | React/JS apps | Wallets, Dial.to, bots, browsers |
Lợi Ích Cho Developer Và User
- Zero-friction UX: Không cần connect wallet, switch network, copy address — click và sign
- Distribution miễn phí: Blink là URL, lan truyền tự nhiên qua social, email, QR, NFC
- Composability: Actions có thể chain nhau (swap → stake → vote trong 1 flow)
- Analytics: Track click-through, conversion, drop-off tại từng step
- Multi-wallet: Phantom, Backpack, Solflare, Glow, Brave Wallet đều hỗ trợ
Thách Thức Và Lưu Ý
- Trust: User phải trust Action provider (tx được build bởi server). Cần verify transaction trước khi sign
- Simulation: Wallet nên simulate tx hiển thị balance changes trước khi user approve
- Rate limiting: Action providers cần protect khỏi spam/abuse
- Mobile UX: Deep link vào wallet app cần handle tốt trên iOS/Android
- Spec evolution: Spec vẫn đang phát triển (v1/v2), breaking changes có thể xảy ra
Tương Lai: Actions Registry Và Discovery
Solana Foundation đang xây dựng Actions Registry — catalog searchable các Actions đã verify, tương tự npm cho Web3. Developer publish Action, user discover qua category, rating, audit status. Kết hợp với Agent Registry (AI agents discover và execute Actions tự động) mở ra tiềm năng agentic payments trên Solana.
