Research/Solana

Solana Blinks and Actions: One-Click Blockchain Transactions in Any Interface

Solana Actions and Blinks let users execute blockchain transactions from social media, websites, and messaging apps with one click.

bcTanjiAug 12, 2026

Blockchain transactions typically require users to leave whatever they are doing, open a wallet application, paste an address, set parameters, and confirm. Solana Actions and Blinks collapse that entire flow into a single click from any URL-capable surface: a social media post, a messaging app, a blog, or a QR code. The result is a pattern where blockchain interactions feel native to the context they appear in, rather than forcing users into a separate application.

Introduced by Solana Labs and community contributors in mid-2024, the Actions specification defines a standardized API for returning signable Solana transactions from any server. Blinks (short for "blockchain links") are the client-side layer that detects these Action URLs, renders interactive UIs around them, and routes the resulting transaction to the user's wallet for signing. Together, they represent one of the most aggressive attempts to push decentralized application interactions beyond dedicated dApp frontends and into the broader web.

What Are Solana Actions?

A Solana Action is a specification-compliant API endpoint that returns a signable transaction (or message) in response to an HTTP request. Any server can implement the Actions API: the specification imposes no requirements on framework, language, or hosting. The protocol uses a simple GET/POST flow that any web developer can implement without deep blockchain expertise.

Actions are identified by URLs using the solana-action: protocol scheme. A client that understands this scheme can parse the URL, make the appropriate HTTP requests, and present the user with a transaction to sign. The specification is published as the @solana/actions-spec npm package, providing TypeScript type definitions that Action providers implement against.

The GET/POST Transaction Flow

The interaction between a client (wallet, browser extension, or Blink renderer) and an Action server follows a two-step handshake:

  1. The client sends a GET request to the Action URL. The server responds with metadata describing the action: an icon (SVG, PNG, or WebP), a title, a human-readable description, a default button label, and optionally a set of linked actions with parameter inputs.
  2. When the user clicks to execute, the client sends a POST request with the user's public key in the body. The server returns a base64-encoded serialized Solana transaction. The client decodes the transaction, presents it for signing, and submits it to the Solana network.
No wallet SDK required on the server: The Action server never touches private keys. It constructs an unsigned transaction using the user's public key (received in the POST body) and returns it. All signing happens client-side in the user's wallet. This separation means any backend can serve Actions without integrating wallet infrastructure.

The actions.json Discovery File

For a domain to advertise that it supports Solana Actions, it hosts an actions.json file at its root (for example, https://example-dapp.com/actions.json). This file maps URL patterns on the domain to their corresponding Action API endpoints. Clients use this file to determine which URLs on a site are actionable and where to send the GET request. The file must return valid CORS headers (Access-Control-Allow-Origin: *) so that any Blink client can fetch it cross-origin.

Blinks are the client-side counterpart to Actions. A Blink is any client application that detects Action-compatible URLs, introspects the Action API, and renders an interactive UI that lets users preview and execute the transaction. The term "Blink" is short for "blockchain link": a shareable URL that encodes a concrete on-chain intent.

When a user shares an Action URL on a platform that supports Blinks, the platform automatically unfurls it into a rich card showing the action's icon, title, description, and one or more buttons. The user clicks a button, their wallet prompts for a signature, and the transaction lands on-chain. The entire flow happens without navigating away from the platform where the link was shared.

Three categories of clients can render Blinks:

  • Browser extensions (such as Phantom or Backpack) that detect Action URLs on any webpage and render inline transaction UIs
  • Dedicated Blink platforms (such as Dialect's actions.dialect.to or TipLink) that serve as interstitial signing pages when no wallet extension is installed
  • Native app integrations where mobile wallets or messaging apps parse Action URLs and present signing flows within their own UI

The interstitial model is particularly important for onboarding: users who do not have a browser extension wallet are redirected to a signing page that supports "connect to wallet" flows, including embedded wallets tied to email addresses or phone numbers.

Technical Architecture

Action Response Structure

The GET response from an Action server follows the ActionGetResponse interface. Key fields include:

FieldTypeDescription
typeStringMust be "action" for the initial response
iconURLAbsolute HTTPS URL to an SVG, PNG, or WebP image
titleStringShort title displayed to the user
descriptionStringHuman-readable explanation of what the action does
labelStringDefault button text (e.g. "Tip 1 SOL")
links.actionsArrayLinked actions with parameter inputs (buttons, text fields)
disabledBooleanOptional flag to render the action as non-interactive
errorObjectNon-fatal error message displayed to the user

POST Response and Transaction Delivery

The POST response contains the transaction payload the user will sign:

FieldTypeDescription
transactionStringBase64-encoded serialized Solana transaction
messageStringHuman-readable description of the transaction (item name, discount applied, etc.)
links.nextObjectOptional pointer to the next Action in a chain

The client base64-decodes the transaction, deserializes it, and presents it to the user's wallet for review and signing. The wallet should display the transaction details (token transfers, program interactions, estimated fees) before the user approves.

Action Chaining

Actions support sequential chaining through the links.next field in POST responses. After a transaction is confirmed on-chain, the client fetches the next Action URL and presents it to the user. This enables multi-step workflows: a user might first approve a token, then execute a swap, then stake the result, all within a single Blink session without writing custom frontend code.

The chaining mechanism uses a PostNextActionLink that includes a same-origin callback URL. The client POSTs the transaction signature and the user's account to this callback, which responds with a NextAction describing the follow-up step. An optional state field allows the server to pass opaque context between steps.

Social Media Tipping

Content creators can attach a Blink URL to posts that invites tips in SOL or SPL tokens. The Blink unfurls into a card with preset tip amounts (0.1 SOL, 1 SOL, custom) and the creator's avatar. Tipping happens in one click without the sender leaving their social feed. The fee-aware flow is tuned for small amounts, making micropayments practical in social contexts.

Embedded Commerce

Merchants can embed purchase Blinks in product pages, emails, or chat messages. A physical goods seller could share a "Buy for 5 USDC" Blink that constructs a payment token transfer to the merchant's address. The transaction includes an on-chain memo with the order ID for reconciliation, and action chaining can handle multi-step checkout flows (select size, confirm shipping, pay).

Donation and Fundraising

Nonprofits and open-source projects can distribute donation Blinks across any channel. Unlike traditional donation pages that require form fills and payment processing, a donation Blink is a single URL that renders a "Donate" button wherever it appears. DAOs use similar patterns for treasury contributions, with the Blink card displaying the current fundraising progress pulled from on-chain state.

NFT Minting

Artists share mint Blinks that display collection metadata, remaining supply, and price directly in the link preview. Users mint with one click from wherever they encounter the link. The Action server checks supply and constructs the mint transaction dynamically, so the Blink automatically disables when the collection sells out by returning the disabled flag.

Governance Voting

DAO governance platforms can distribute vote Blinks in Discord, Telegram, or forum posts. Each Blink renders the proposal title, voting options, and current tally. Members cast votes without navigating to the governance portal: the Action server constructs the vote instruction, and the user signs it directly from their messaging app.

Security Model and Trust Registry

Universal transaction links introduce a real phishing attack surface. A malicious actor could distribute Blinks that look like legitimate tip requests but actually drain wallet balances through hidden token approvals or account authority transfers. The Solana ecosystem addresses this through a layered security model.

Dialect maintains a public registry of verified Blink providers as a public good for the Solana ecosystem, with support from the Solana Foundation. Action providers register their domains and undergo verification to establish trust. Wallets and Blink clients query this registry to determine how to render each Action.

Trust Tiers

Blink clients render Actions differently based on their registry status:

StatusVisual TreatmentUser Experience
TrustedNeutral (no warning)Action renders normally with full interactivity
UnregisteredYellow warning badgeAction renders with a caution indicator; user proceeds at own risk
BlockedRed warning / hiddenAction is flagged as malicious; interaction is prevented
Centralization tradeoff: The registry model introduces a centralized trust authority: Dialect and the Solana Foundation decide which Actions are trusted. While client applications can choose to use alternative registries or none at all, the practical reality is that major wallets like Phantom and Backpack rely on Dialect's registry. This creates a gatekeeping layer that contradicts the permissionless nature of the underlying protocol. Dialect has stated a long-term goal of decentralizing trust management, but the current model is centrally administered.

Wallet-Level Protections

Beyond the registry, wallets implement their own security layers. Phantom and Backpack perform domain checks against known malicious sites, simulate transactions before presenting them to users, and display clear breakdowns of what a transaction will do (tokens transferred, programs invoked, account authorities changed). Transaction simulation is critical: it allows the wallet to detect hidden instructions that the Blink's visual UI might not reveal, such as token approval grants that exceed the displayed transfer amount.

The Phishing Attack Surface

Despite these protections, the Blink model expands the phishing attack surface in several ways:

  • Social engineering becomes easier when transaction prompts appear inline in trusted contexts like social media feeds or chat apps
  • Unregistered Actions can still render (with warnings) in some clients, and users habituated to clicking through warnings may not pause
  • Action servers control the transaction construction: a server could return different transactions to different users, making community auditing harder
  • Solana's account model allows ownership transfers through SetAuthority instructions that may not be immediately obvious in transaction previews

In January 2026, a phishing campaign exploited Solana's Owner permission field to silently transfer account control through seemingly legitimate transaction prompts, resulting in individual losses exceeding $3 million according to blockchain security firm SlowMist. While this attack was not Blinks-specific, it illustrates the risks that universal transaction links amplify: any surface that can present a "sign this" prompt becomes a potential phishing vector.

The Blinks model represents a fundamentally different distribution strategy compared to traditional web3 application frontends.

AspectTraditional dApp FrontendBlinks / Actions
DistributionUsers must navigate to the dApp websiteTransactions can be triggered from any URL-capable surface
Development effortFull frontend application with wallet integrationSingle API endpoint returning a transaction
User contextUser leaves their current contextUser stays in their current app or feed
DiscoverabilityRequires SEO, marketing, or direct linksViral through social sharing of actionable links
Complexity ceilingFull application logic and multi-step flowsBest for single-action or short-chain flows
Security modelUser trusts the specific dApp domainUser trusts registry + wallet simulation
Offline supportRequires the dApp server to be onlineRequires the Action server to be online

Limitations and Tradeoffs

Solana-Only

The Actions specification is tightly coupled to Solana's transaction format and account model. The POST response contains a serialized Solana transaction, and the protocol assumes Solana wallet adapters on the client side. There is no cross-chain version of the spec: a Blink cannot trigger a Bitcoin, Ethereum, or Layer 2 transaction. Projects like the @note-protocol/actions-spec have forked the specification for other chains, but these are independent efforts without ecosystem-wide support.

Server Trust

Users must trust that the Action server constructs the transaction honestly. The server receives the user's public key and returns an arbitrary transaction: nothing in the protocol prevents the server from including malicious instructions. Wallet-side transaction simulation partially mitigates this, but simulation cannot catch all attack vectors (time-dependent exploits, MEV-related manipulation, or instructions that appear benign in isolation but are harmful in combination).

Complexity Ceiling

Blinks work best for simple, single-purpose transactions. Complex multi-step workflows are possible through action chaining, but each step requires a separate transaction confirmation. Applications with sophisticated state management, conditional logic, or real-time data requirements are better served by full dApp frontends. The Blink model trades application depth for distribution breadth.

Platform Dependency

Blink rendering depends on the host platform. Social media sites can block unfurling of Action URLs. Messaging apps may strip URL parameters. Browser extensions require user installation. Each distribution channel introduces its own constraints, and there is no guarantee that any particular platform will support Blinks natively or continue to do so.

The Broader Pattern: Embedded Blockchain Interactions

Solana Blinks represent a specific implementation of a broader design principle: making blockchain interactions feel native to whatever context users are already in. Rather than asking users to context-switch to a dedicated crypto application, the transaction comes to them. This embedded UX pattern is gaining traction across the industry.

On Bitcoin, Spark pursues a similar design goal through a different mechanism. Instead of wrapping transactions in shareable URLs, Spark enables payment infrastructure that developers embed directly into any application: fintech apps, messaging platforms, point-of-sale systems, or social platforms. The Spark SDK allows developers to add self-custodial Bitcoin and stablecoin transfers without requiring users to understand Layer 2 mechanics, manage channels, or interact with blockchain-native interfaces.

The design philosophies converge on the same insight: the biggest barrier to blockchain adoption is not transaction speed or fees but context-switching friction. Whether through Solana's URL-based Actions or Spark's SDK-based embedded payments, the winning pattern is meeting users where they already are. For developers building on Bitcoin, Spark's documentation and SDK provide the tools to implement this pattern with instant settlement and self-custody guarantees. For a working example of this approach, General Bread demonstrates a Spark-powered wallet where Bitcoin and stablecoin payments feel native to the app rather than bolted on.

The comparison between Solana's approach and Bitcoin Layer 2 strategies highlights fundamental architectural tradeoffs. Solana Blinks leverage the chain's high throughput and low fees to make one-click transactions economically viable, while Bitcoin Layer 2 solutions like Spark must solve for instant finality and fee efficiency off-chain. Both approaches aim to make blockchain payments as invisible as tapping a credit card, but they take different paths to get there.

Building with Solana Actions

For developers interested in implementing Actions, the Solana Actions developer guide provides a complete walkthrough. The @solana/actions npm package includes helper functions for constructing Action responses, and the solana-actions GitHub repository provides reference implementations. Key steps for an integration include:

  1. Create an API endpoint that responds to GET requests with an ActionGetResponse containing your action's metadata and linked actions
  2. Handle POST requests by receiving the user's public key, constructing an unsigned Solana transaction, and returning it as a base64-encoded string
  3. Host an actions.json file at your domain root mapping URL patterns to Action endpoints
  4. Register your Blink with the Dialect registry for trusted rendering in major wallets
  5. Optionally implement action chaining via links.next for multi-step workflows

The server-side implementation is framework-agnostic. Action servers have been built with Express, Next.js, Hono, and serverless functions. The only requirement is returning spec-compliant JSON responses with proper CORS headers.

This article is for educational purposes only. It does not constitute financial or investment advice. Bitcoin and Layer 2 protocols involve technical and financial risk. Always do your own research and understand the tradeoffs before using any protocol.