新消息:Helius 收购 Light Protocol
什么是 Solana 智能钱包
博客/开发

什么是 Solana 智能钱包?对比与实施指南

Crossmint 增长业务X 上的 Dwight TorculasLinkedIn 上的 Dwight Torculas
阅读需 8 分钟

开发者现在可以在 Solana 上使用嵌入式智能钱包(也称为账户抽象钱包)。这意味着应用可以为用户提供更简单的入门流程和使用体验。

与此同时,开发者也能获得更高的灵活性、安全性和合规性,最终带来更安全、更易用的链上体验。 

与非可执行账户(数据账户)和传统嵌入式钱包不同,智能钱包可编程,因此能够解锁新一代功能:Gas 费赞助、每个钱包支持多个签名者、支出限额等。

本文将介绍 Solana 上的嵌入式智能钱包与其他钱包解决方案之间的主要区别。

你还将了解智能钱包在 Solana 上的工作原理,以及如何在应用中实现嵌入式智能钱包。

什么是智能钱包?

智能钱包是包含可执行代码的可执行程序账户。传统钱包只是由单个私钥控制的简单密钥对,而 Solana 上的智能钱包以程序形式实现,并具备特殊逻辑和功能。  

智能钱包有哪些优势?

智能钱包不再需要助记词,也消除了助记词丢失带来的风险。用户可以指定一个或多个“签名者”或密钥来控制钱包。

这种灵活性支持更易用的密钥管理方式,例如生物识别(如 Face ID、Touch ID 或通行密钥),以及高级安全方案(如多签)或企业级控制(如服务端管理员密钥)。

智能钱包允许开发者使用 SOL 或 USDC 等其他 SPL 代币代付费用,并轻松向最终用户隐藏费用细节,从而实现免手续费交易,带来更接近用户熟悉的 web2 体验。  

这意味着,你可以构建无需交易批准提示、不会丢失助记词或私钥,并通过程序(智能合约)强制实施可编程安全机制的应用。

嵌入式智能钱包、嵌入式钱包与非可执行账户对比

嵌入式智能钱包嵌入式钱包非可执行账户
实现方式包含自定义逻辑的智能合约嵌入应用的非智能合约账户独立应用或浏览器扩展
账户控制灵活——用户可以指定一个或多个签名者(从 Phantom 等 EOA 到通行密钥和社交登录钱包),并可选择设置程序化规则由社交登录保护的密钥对(通常位于 TEE 或 MPC 集群中)由用户拥有的密钥对直接控制
托管模式灵活。既可以设为由用户自行托管,也可以由开发者托管,甚至可以在同一钱包中结合两种模式通常为非托管,但某些恢复方式可能使其转变为托管模式由最终用户自行托管
密钥管理支持多种授权方式(MPC、社交恢复等)通常由应用管理由用户管理助记词/私钥
交易授权自定义验证逻辑(多签、时间锁、限额)应用使用嵌入式私钥签名用户明确批准每笔交易
费用支付支持费用抽象和代付,并允许使用 USDC 或 USDT 等其他 SPL 代币支付用户支付所有交易费用。每个应用都需要提供法币入金渠道用户支付所有交易费用
安全模型通过开源智能合约代码实施安全机制,并可选择添加可编程约束安全性取决于嵌入式钱包提供商的闭源代码安全性取决于客户端闭源代码
恢复选项可编程恢复(社交恢复、守护者密钥)由应用提供的恢复方式仅支持基于助记词的恢复
支出控制可编程支出限额和审批工作流部分嵌入式钱包支持服务端交易策略(注意:如果实现不当,可能形成托管架构)无
监管考量灵活——托管模式可以编程,并能让钱包适应不断变化的监管要求请咨询具体的钱包提供商审查较少——由用户控制
企业功能基于角色的访问控制、审批工作流部分嵌入式钱包提供有限的服务端控制无
供应商锁定低。智能钱包基于开源程序。可以将用户从一个基础设施提供商迁移到另一个,而无需更改用户地址。高。要离开嵌入式钱包,唯一的方法是让每位用户恢复私钥,这可能不安全,也可能要求用户手动操作低。取决于用户

智能钱包的典型用例

当你需要灵活的托管架构时,Solana 智能钱包非常实用,例如:

  • 由多名员工共同管理的公司财库钱包
  • 代理金融用例中的 AI 智能体钱包,其中智能体所有者需要一把密钥,智能体本身也需要另一把密钥
  • 用户自行托管资产,但选择允许银行扣款(例如定期付款)的新型银行和金融应用

委托签名者的一个关键特性是,可以限定其权限范围,限制其对钱包的操作,例如设置支出限制或资产类别限制。

智能钱包在 Solana 上具体如何运作?

Solana 上的智能钱包结合链上程序与链下基础设施运行,并具备一些 Solana 特有的特性:

基于程序的架构

与非可执行账户(数据账户)不同,Solana 智能钱包(即可执行程序账户)通常实现为控制一个或多个账户(PDA)的链上程序。

交易授权

智能钱包不使用单个私钥,而是采用自定义身份验证逻辑:

  • 可以要求多个签名者(多签功能)
  • 可以支持多种身份验证方式(密钥、生物识别、社交验证)
  • 可以通过程序强制实施时间锁和支出限额

账户委托

用户可以将特定权限委托给不同地址,从而更精细地控制每个密钥或设备可以执行的操作。

支持版本化交易

智能钱包使用 Solana 的标准版本化交易格式。

什么是账户抽象?

账户抽象(AA)让开发者能够创建可自定义的智能合约账户,突破绑定单个密钥对的非可执行账户的限制,从而提供更灵活的用户体验。

AA 支持自定义验证逻辑,因此账户无需依赖区块链的默认规则,即可实现社交恢复、多签要求或支出限额等安全功能。 

AA 的主要目标是在保留自托管优势的同时,消除交易费用和助记词等技术门槛,让用户无需感知区块链技术。

Solana 上的免手续费交易如何运作?

对于免手续费交易,智能钱包的关键优势在于抽象发生在账户层,而不需要针对特定 dApp 单独实现。这带来了更顺畅的体验,用户甚至可能完全意识不到交易费用的存在。

这意味着开发者可以实现:

内置费用抽象

智能钱包可以将费用代付直接纳入其架构。钱包合约本身可以定义由谁在什么情况下支付费用。

灵活的费用币种

如果你不想为用户代付交易费用,用户可以使用 SOL 或 USDC、USDT 等代币支付。

批准机制

智能钱包可以实现自定义验证逻辑,以确定何时允许代付交易,例如设置频率限制或仅限特定应用。

如何使用 Crossmint 将 Solana 智能钱包添加到你的应用

你可以通过多种方式将智能钱包集成到应用中:在客户端集成、在服务端集成,或为 AI 智能体采用双密钥架构。

在下面的教程中,你将学习如何在服务端部署第一个智能钱包。

前提条件

首先,在 Crossmint 预发布控制台中创建开发者账户。 

然后,前往项目的设置 > 常规,将钱包类型更改为“智能钱包”。

前往集成 > API 密钥,并在“服务端密钥”部分选择“创建新密钥”,即可获取 API 密钥。

在 Wallets API 类别下,选择以下权限范围:

  • wallets.create
  • wallets.read
  • wallets:signatures.create
  • wallets:transactions.create
  • wallets:transactions.read
  • wallets:transactions.sign

点击“创建服务端密钥”,保存该密钥以供下一步使用。

创建你的第一个智能钱包

创建一个文件(例如 createWallet.ts),然后输入以下代码:

代码
const apiKey = "YOUR_API_KEY";
const walletType = "solana-smart-wallet";
const adminSigner = {
    // In production, you may want to use an MPC solution, like
    // crossmint-managed MPC keys
    type: "solana-keypair",
};

async function createWallet() {
    const response = await fetch("https://staging.crossmint.com/api/2022-06-09/wallets", {
        method: "POST",
        headers: {
            "X-API-KEY": apiKey,
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            type: walletType,
            config: {
                adminSigner,
            },
        }),
    });

    return await response.json();
}

createWallet()
    .then((json) => console.log(json))
    .catch((err) => console.error(`error: ${err}`));

运行前,使用上一步获取的密钥填写 YOUR_API_KEY。

现在运行脚本:

代码
npx tsx createWallet.ts

API 将返回包含新钱包详细信息的响应。

保存钱包地址,因为下一步会用到它。

与你的钱包交互

现在,我们已经在你的服务器上设置好钱包,接下来与它们进行交互。

首先,访问 Crossmint 测试网 USDXM 水龙头,粘贴上一步获得的钱包地址,以在 Solana 上领取测试 USDXM。

现在你已经拥有一些代币,接下来检查钱包余额(checkBalance.ts):

代码
const apiKey = "YOUR_API_KEY";
const walletAddress = "YOUR_WALLET_ADDRESS"; // From previous step
const tokens = ["sol", "usdc", "usdxm"]; // Tokens to fetch balances for
const chains = ["solana"]; // Chains to query balances from

async function getWalletBalance() {
    const url = new URL(`https://staging.crossmint.com/api/v1-alpha2/wallets/${walletAddress}/balances`);
    url.search = new URLSearchParams({
        tokens: tokens.join(','),
        chains: chains.join(',')
    }).toString();

    const response = await fetch(url, {
        method: "GET",
        headers: {
            "X-API-KEY": apiKey,
            "Content-Type": "application/json",
        },
    });

    return await response.json();
}

getWalletBalance()
    .then((json) => console.log(json))
    .catch((err) => console.error(`error: ${err}`));

恭喜,你现在已经在服务器上部署了智能钱包!

接下来,你可以查阅文档,了解如何发起第一笔交易、添加委托签名者等。

总结

智能钱包将推动新一代 Solana 应用的发展,改善用户入门流程、使用体验、安全性和合规性。

Crossmint 很高兴能通过简单的 API 和无代码钱包、支付及代币化工具,为从 IP、忠诚度计划到 AI 智能体的广泛用例提供支持。这些工具可以可靠扩展至数百万用户。现在,随着 Solana 嵌入式智能钱包的推出,我们也开始为金融科技和 AI 智能体应用提供支持。

如果你想进一步了解如何在项目中实现 Solana 智能钱包,请联系我们,我们很乐意提供帮助。

其他资源

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新

放大图片