本文介绍了如何使用Privy和Helius为Solana构建无缝的链上体验,包括使用Privy SDK提供自托管嵌入式钱包、通过安全钱包赞助gas费以实现无gas交易、集成法币入口、以及原生桥接流动性到Solana。通过这些技术,开发者可以构建如Pump.fun、Jupiter和Moonwalk等用户体验极佳的Solana应用。
6 分钟阅读
2025年6月2日
开发者指南:使用 Privy 和 Helius 实现嵌入式钱包、无 gas 交易和无摩擦 onboarding。
如今,大多数面向消费者的加密应用程序都依赖于外部钱包,这迫使用户管理助记词、浏览多个重定向,并手动批准每笔交易。
对于不熟悉区块链的普通用户来说,这是一个不可能的要求。助记词、gas 费和钱包弹窗不仅会造成摩擦,还会导致用户流失。这意味着拥有出色产品的应用程序会在用户甚至开始使用之前就失去他们。
情况不必如此。
在本指南中,你将学习如何使用 Privy 和 Helius 为 Solana 构建无缝的链上体验,实现无 gas 交易、嵌入式钱包以及延迟低于 20 毫秒的即时交易。
我们将介绍如何:
让我们深入了解如何通过你的 Solana 应用程序引入数百万用户。
无缝 onboarding 不仅仅是一个锦上添花的功能;它还是一个增长倍增器。使用嵌入式钱包的应用程序可以实现 40%+ 的月度用户留存率,特别是当以加密货币新手为目标用户时。
对于大多数消费者来说,gas、滑点、优先费用和小费等加密货币原生概念既陌生又令人难以承受。
为了留住用户,应用程序必须使其 onboarding 易于上手。这意味着让用户有可能与 USDC 等稳定币 互动,或者通过担保交易支付 gas 费。
目标很简单:让用户在无需学习加密货币工作原理的情况下进行签名、交换和质押。
Pump.fun 是 Solana 上增长最快的交易平台之一,它将嵌入式钱包与无 gas 交易相结合,提供无需弹窗、批准或钱包切换的即时一键交易。
最初是为高频交易者设计的,Advanced 体验被证明非常有效,因此推广到所有用户。
如今,任何人都可以启动一个 token 并在几秒钟内开始在移动设备上进行交易。一些用户甚至通过 Privy 支持的钱包交易了数百万美元,而无需离开移动应用程序。
Jupiter 的 Quick Account 体验展示了无缝交易的强大之处。每个用户,无论是通过 Phantom、Solflare、Backpack 登录,还是仅仅通过电子邮件或 X 登录,都在底层通过 Privy 的嵌入式钱包基础设施进行交互。
这种设置可以实现无需交易签名的即时交易,每次都提供无摩擦和最佳价格的执行路径。
当用户准备好时,他们可以将密钥导出到外部钱包,保留完全控制权并避免供应商锁定。
Moonwalk 通过让用户像任何其他 Web2 消费者应用程序一样使用电子邮件、社交帐户或短信注册,提供无摩擦的移动 onboarding 体验。
在后台,每次注册都会使用 Privy 自动配置一个功能齐全的嵌入式钱包。用户不必担心助记词、钱包扩展程序或任何加密货币特定的设置。
相反,他们只需开始行走和赚取,而从不知道他们是在链上。
在后台创建嵌入式钱包只是开始。为了真正提供无缝的应用程序体验,开发者还必须解决账户充值和跨链流动性问题,这两个是用户流失最常见的来源。
最好的消费者应用程序会消除每一步的摩擦,包括用户需要为其钱包充值的时刻。
通过将 法币 on-ramp 直接嵌入到应用程序体验中,用户无需离开界面即可购买 SOL 或 USDC。
Privy 的 SDK 可以轻松集成 MoonPay 和 Coinbase Pay 等 on-ramp 提供商,只需点击几下即可原生购买 Solana 资产。
另一个关键解锁是 原生流动性桥接。如果用户的 Solana 钱包资金不足,开发者可以配置其 Privy 钱包以桥接来自 Ethereum、Base 或 Polygon 等 EVM 链的余额。
这会将你的应用程序变成一个流动性接收器,从你的用户已有的任何地方提取资产,并将它们直接带入你的 Solana 体验。无需切换应用程序。无需复制钱包地址。只需无缝的跨链价值转移。
除了账户充值和跨链桥接之外,与传统的密钥对相比,Privy 的钱包提供安全的密钥管理,并且是专门为费用支付者设置而构建的。
要为你的用户设置无 gas 交易,你需要配置一个充当“费用支付者”的托管钱包。
此钱包将代表你的用户处理 gas 费,为他们提供无缝且无成本的体验。
在 Privy Dashboard 中启用托管钱包后,你可以使用 Privy Node.js SDK 在服务器端以编程方式创建一个。
import { PrivyClient } from '@privy-io/server-sdk';
// 初始化 Privy 客户端
const privy = new PrivyClient({
apiKey: process.env.PRIVY_API_KEY
});
// 创建一个新的 Solana 托管钱包
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}`); // 创建了带有 ID 的费用支付者钱包
console.log(`Wallet address: ${address}`); // 钱包地址
return { id, address };
}
// 确保为此钱包充值 SOL 以支付交易费用
钱包 ID 和地址将在后续步骤中用于担保交易。
设置并充值托管钱包后,你就可以开始为用户启用无 gas 交易。
当用户进行身份验证时,Privy 会配置一个与其登录凭据关联的 嵌入式钱包。用户像往常一样签署交易,但不是将它们提交到区块链,而是将交易发送到你的后端,你的托管钱包在那里签署并提交它们。
本指南侧重于 Privy 的嵌入式钱包。但是,担保交易模式适用于任何 Solana 钱包。用户签署交易,而你的服务器支付 gas 费并将交易广播到网络。
这种设置解锁了无缝的用户体验,同时让用户完全控制自己的密钥。
import { useSolanaWallets } from '@privy-io/react-auth/solana';
import {
TransactionMessage,
PublicKey,
VersionedTransaction,
Connection
} from '@solana/web3.js';
async function sendGaslessTransaction(instructions) {
// 获取用户的嵌入式钱包
const { wallets } = useSolanaWallets();
const embeddedWallet = wallets.find(wallet =>
wallet.walletClientType === 'privy'
);
if (!embeddedWallet) {
throw new Error('No embedded wallet found'); // 未找到嵌入式钱包
}
// 通过 Helius 连接到 Solana 以获得更好的性能
const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_API_KEY');
const { blockhash } = await connection.getLatestBlockhash();
// 将你的托管钱包设置为费用支付者
const feePayerAddress = 'YOUR_PRIVY_SERVER_WALLET_ADDRESS';
// 构建以托管钱包作为支付者的交易
const message = new TransactionMessage({
payerKey: new PublicKey(feePayerAddress),
recentBlockhash: blockhash,
instructions
}).compileToV0Message();
const transaction = new VersionedTransaction(message);
// 让用户签署交易
const provider = await embeddedWallet.getProvider();
const serializedMessage = Buffer.from(
transaction.message.serialize()
).toString('base64');
const { signature } = await provider.request({
method: 'signMessage',
params: { message: serializedMessage }
});
// 添加用户签名
const userSignature = Buffer.from(signature, 'base64');
transaction.addSignature(
new PublicKey(embeddedWallet.address),
userSignature
);
// 发送到你的后端以获取费用支付者签名
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 网络。
// pages/api/sponsor-transaction.js
import { VersionedTransaction } from '@solana/web3.js';
import { PrivyClient } from '@privy-io/server-sdk';
// 初始化 Privy SDK
const privy = new PrivyClient({
apiKey: process.env.PRIVY_API_KEY
});
// 对于 App Router (Next.js 13+)
export async function POST(request) {
try {
const { transaction: serializedTx } = await request.json();
// 反序列化交易以验证它(可选)
const txBuffer = Buffer.from(serializedTx, 'base64');
const transaction = VersionedTransaction.deserialize(txBuffer);
// 验证交易(检查费用支付者,根据策略进行验证)
// ...在此处添加验证逻辑...
// 使用你的 Privy 托管钱包一步完成签名和发送
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)、嵌入式 on-ramp 或原生桥接,Privy 的技术栈都可以根据你的产品需求进行扩展。
- 原文链接: helius.dev/blog/web3-ux...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!