
无摩擦且安全的用户体验:助力数百万用户加入 Solana 的技术栈
开发者指南:使用 Privy 和 Helius 实现嵌入式钱包、无 gas 费交易和无摩擦的新用户引导。
如今,大多数面向消费者的加密应用都依赖外部钱包,迫使用户管理助记词、经历多次跳转,并手动批准每笔交易。
对于不熟悉区块链的普通用户来说,这些要求几乎不可能完成。助记词、gas 费和钱包弹窗不仅会增加操作阻力,还会导致用户流失。这意味着,即使产品出色,应用也可能在用户真正开始使用前就失去他们。
事情本不必如此。
本指南将介绍如何使用 Privy 和 Helius 在 Solana 上打造无缝的链上体验,实现无 gas 费交易、嵌入式钱包,以及延迟低至 < 20 ms 的即时交易。
我们将介绍如何:
- 通过简单的登录方式(电子邮件、社交账号、SMS)创建自托管嵌入式钱包,同时支持 Phantom、Solflare、Backpack 等外部钱包——所有功能均通过 Privy SDK 实现
- 通过安全钱包代付费用,启用无 gas 费交易
- 将 MoonPay 或 Coinbase Pay 等法币入金通道集成到你的 UI 中
- 将流动性无缝原生桥接至 Solana
- 构建移动端应用,提供如 Web2 般流畅的链上用户体验
接下来,让我们深入了解如何通过你的 Solana 应用吸引未来数百万用户。
加密应用的新用户引导实践:DeFi 与消费者应用示例
无缝的新用户引导并非锦上添花,而是增长倍增器。采用嵌入式钱包的应用可以实现超过 40% 的月度用户留存率,在面向加密领域新用户时尤其如此。
对大多数消费者而言,gas、滑点、优先费和小费等加密原生概念既陌生又复杂。
为了留住用户,应用必须让新用户引导更加简单易懂。这意味着用户可以与USDC 等稳定币交互,或通过赞助交易支付 gas 费。
目标很简单:让用户无需了解加密技术的运行原理,就能完成签名、兑换和质押。
Pump.fun — 代币发行平台
Pump.fun 是 Solana 上增长最快的交易平台之一。它将嵌入式钱包与无 gas 费交易相结合,无需弹窗、批准或切换钱包,即可一键完成即时交易。
高级版体验最初为高频交易者打造,后来因效果出色而向所有用户开放。
如今,任何人都能在几秒内通过移动端发行代币并开始交易。一些用户甚至通过由 Privy 提供支持的钱包完成了数百万美元的交易,全程无需离开移动应用。
Jupiter — DEX 聚合器
Jupiter 的 Quick Account 体验展现了无缝交易的强大能力。无论用户通过 Phantom、Solflare、Backpack,还是仅使用电子邮件或 X 登录,底层交互都由 Privy 的嵌入式钱包基础设施提供支持。
这种架构无需用户签署交易即可即时完成交易,并且每次都能通过无摩擦的执行路径获得最优价格。
准备好后,用户可以将密钥导出至外部钱包,保留完整控制权,并避免供应商锁定。
Moonwalk — 边走边赚移动应用
Moonwalk 允许用户像使用其他 Web2 消费者应用一样,通过电子邮件、社交账号或 SMS 注册,提供无摩擦的移动端新用户引导体验。
在后台,每次注册都会使用 Privy 自动创建一个功能完整的嵌入式钱包。用户无需操心助记词、钱包扩展程序或任何加密领域特有的设置。
他们只需开始走路并赚取奖励,甚至无需意识到自己正在进行链上操作。
打造无缝的链上用户体验:原生账户入金
在后台创建嵌入式钱包只是第一步。要真正提供无缝的应用体验,开发者还必须解决账户入金和跨链流动性问题——这两者是最常见的用户流失原因。
嵌入式入金通道
优秀的消费者应用会消除每个环节的操作阻力,包括用户需要向钱包充值的时刻。
通过将法币入金通道直接嵌入应用体验,用户无需离开界面即可购买 SOL 或 USDC。
Privy SDK 可轻松集成 MoonPay 和 Coinbase Pay 等入金服务商,让用户只需点击几次即可原生购买 Solana 资产。
原生跨链桥接
另一个关键能力是原生流动性跨链桥接。如果用户的 Solana 钱包资金不足,开发者可以配置其 Privy 钱包,从 Ethereum、Base 或 Polygon 等 EVM 链桥接余额。
这会让你的应用成为流动性汇聚点,从用户已有资产的任何位置获取资产,并将其直接带入你的 Solana 体验。无需切换应用,无需复制钱包地址,只需无缝完成跨链价值转移。
如何使用 Privy 和 Helius 设置无 gas 费交易
除账户入金和跨链桥接外,与传统密钥对相比,Privy 钱包还提供安全的密钥管理,并专为费用支付方架构而设计。
1. 创建托管钱包
要为用户设置无 gas 费交易,你需要创建一个充当“费用支付方”的托管钱包。
该钱包会代用户支付 gas 费,为他们提供无缝且免费的使用体验。
在 Privy Dashboard 中启用托管钱包后,你可以使用 Privy Node.js SDK 在服务器端以编程方式创建钱包。
使用 Privy NodeJS SDK:
import { PrivyClient } from '@privy-io/server-sdk';
// Initialize the Privy client
const privy = new PrivyClient({
apiKey: process.env.PRIVY_API_KEY
});
// Create a new Solana managed wallet
async function createFeePayerWallet() {
const { id, address, chainType } = await privy.walletApi.create({
chainType: 'solana',
policyIds: ['optional_policy_id'],
idempotencyKey: 'unique_request_identifier'
});
console.log(`Created fee payer wallet with ID: ${id}`);
console.log(`Wallet address: ${address}`);
return { id, address };
}
// Make sure to fund this wallet with SOL to cover transaction fees
钱包 ID 和地址将在后续步骤中用于赞助交易。
2. 实现赞助交易
托管钱包设置完成并注入资金后,就可以开始为用户启用无 gas 费交易。
用户完成身份验证后,Privy 会创建一个与其登录凭据绑定的嵌入式钱包。用户照常签署交易,但交易不会直接提交到区块链,而是发送至你的后端。托管钱包会在那里完成签名,并代用户提交交易。
本指南重点介绍 Privy 的嵌入式钱包。不过,赞助交易模式适用于任何 Solana 钱包。用户签署交易,而你的服务器支付 gas 费并将交易广播到网络。
这种架构在提供无缝用户体验的同时,也让用户保留对密钥的完全控制权。
客户端实现(搭配 Privy SDK 的 React)
import { useSolanaWallets } from '@privy-io/react-auth/solana';
import {
TransactionMessage,
PublicKey,
VersionedTransaction,
Connection
} from '@solana/web3.js';
async function sendGaslessTransaction(instructions) {
// Get user's embedded wallet
const { wallets } = useSolanaWallets();
const embeddedWallet = wallets.find(wallet =>
wallet.walletClientType === 'privy'
);
if (!embeddedWallet) {
throw new Error('No embedded wallet found');
}
// Connect to Solana via Helius for better performance
const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_API_KEY');
const { blockhash } = await connection.getLatestBlockhash();
// Set your managed wallet as fee payer
const feePayerAddress = 'YOUR_PRIVY_SERVER_WALLET_ADDRESS';
// Build transaction with managed wallet as payer
const message = new TransactionMessage({
payerKey: new PublicKey(feePayerAddress),
recentBlockhash: blockhash,
instructions
}).compileToV0Message();
const transaction = new VersionedTransaction(message);
// Have user sign the transaction
const provider = await embeddedWallet.getProvider();
const serializedMessage = Buffer.from(
transaction.message.serialize()
).toString('base64');
const { signature } = await provider.request({
method: 'signMessage',
params: { message: serializedMessage }
});
// Add user signature
const userSignature = Buffer.from(signature, 'base64');
transaction.addSignature(
new PublicKey(embeddedWallet.address),
userSignature
);
// Send to your backend for fee payer signature
const serializedTx = Buffer.from(
transaction.serialize()
).toString('base64');
const response = await fetch('/api/sponsor-transaction', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ transaction: serializedTx })
});
const { transactionHash } = await response.json();
return transactionHash;
}
最后,部分签名的交易会从客户端发送至后端,在那里完成验证、由托管钱包签名,并广播到 Solana 网络。
后端实现(Next.js API Route)
// pages/api/sponsor-transaction.js
import { VersionedTransaction } from '@solana/web3.js';
import { PrivyClient } from '@privy-io/server-sdk';
// Initialize Privy SDK
const privy = new PrivyClient({
apiKey: process.env.PRIVY_API_KEY
});
// For App Router (Next.js 13+)
export async function POST(request) {
try {
const { transaction: serializedTx } = await request.json();
// Deserialize the transaction to verify it (optional)
const txBuffer = Buffer.from(serializedTx, 'base64');
const transaction = VersionedTransaction.deserialize(txBuffer);
// Verify the transaction (check fee payer, validate against policies)
// ...verification logic here...
// Sign AND send with your Privy managed wallet in one step
const serverWalletId = process.env.PRIVY_SERVER_WALLET_ID;
const { hash } = await privy.walletApi.solana.signAndSendTransaction({
walletId: serverWalletId,
caip2: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', // Mainnet
transaction: serializedTx,
rpcUrl: 'https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_API_KEY',
options: {
maxRetries: 5,
skipPreflight: true
}
});
return Response.json({
transactionHash: hash,
message: 'Transaction sent successfully'
}, { status: 200 });
} catch (error) {
console.error('Error processing transaction:', error);
return Response.json({
error: 'Failed to process transaction',
details: error.message
}, { status: 500 });
}
}
将 Privy 的安全钱包与 Helius 的优化交易基础设施相结合,你可以在不牺牲可靠性或灵活性的前提下,为用户提供无缝、无 gas 费的体验。
打造无缝应用体验的灵活技术栈
Privy 的模块化 SDK 与 Helius 的高性能 RPC 节点相结合,为开发者打造一流的 Solana 应用提供了强大且灵活的基础。
无论你是从底层钱包 API 起步并使用自己的身份验证技术栈,还是使用 Privy 实现身份验证及多因素身份验证(MFA)、嵌入式入金通道或原生跨链桥接等高级功能,Privy 的技术栈都能随你的产品需求扩展。
更多资源
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


