本文介绍了Solana上的嵌入式智能钱包(Account Abstraction wallets)的核心功能和实现方法,强调其在用户体验、灵活性和安全性方面的优势,同时详细对比了智能钱包、嵌入式钱包及非执行账户的区别,并提供了创建和交互智能钱包的代码示例。
嵌入式智能钱包(也称为账户抽象钱包)现已向开发者开放,适用于Solana。这意味着应用程序可以为用户提供更简单的注册和用户体验。
同时,开发者也受益于更好的灵活性、安全性和合规性,这最终将我们引向更安全、更用户友好的链上体验。
与不可执行账户(数据账户)和传统嵌入式钱包不同,智能钱包是可编程的,这解锁了一整套新一代的功能:Gas赞助、每个钱包拥有多个签名者、花费限制等。
在本文中,你将了解Solana上的嵌入式智能钱包与其他钱包解决方案之间的关键区别。
你还将了解智能钱包在Solana上是如何工作的,以及如何将嵌入式智能钱包集成到你的应用程序中。
智能钱包是包含可执行代码的可执行程序账户。与传统钱包仅由单个私钥控制的简单密钥对不同,Solana上的智能钱包作为程序实现,具有特殊的逻辑和功能。
智能钱包消除了对助记词及其相关丢失风险的需求。相反,它们允许用户指定一个或多个“签名者”或密钥来控制钱包。
这种灵活性使得更加用户友好的密钥管理选项成为可能,如生物识别(例如,面部识别、指纹识别或通过键)以及高级安全方案(例如,多重签名)或企业级控制(例如,服务器端管理员密钥)。
智能钱包能通过启用开发者用SOL或其他SPL代币如USDC来赞助费用,轻松将费用抽象化,从而实现更熟悉的Web2式用户体验。
这意味着你可以构建无需交易批准提示、无需丢失助记词或私钥的应用程序,并且由程序(智能合约)强制执行可编程安全性。
嵌入式智能钱包 | 嵌入式钱包 | 不可执行 | |
---|---|---|---|
实现 | 带有自定义逻辑的智能合约 | 嵌入在应用程序中的非智能合约账户 | 独立应用程序或浏览器扩展 |
账户控制 | 灵活 - 用户可以指定一个或多个签名者(从EOA如Phantom到通过钥匙和社交登录钱包)并可选择性应用程序规则 | 由社交登录保护的密钥对(通常在TEE或MPC集群中) | 由用户拥有的密钥对直接控制 |
资产管理模式 | 灵活。可以设置为用户自我保管、由开发者保管,甚至为混合模式,两个模式同时存在 | 通常是非托管的 - 但一些恢复方法可以将其转变为托管 | 由最终用户自我保管 |
密钥管理 | 多种授权方法(MPC、社交恢复等) | 通常由应用程序管理 | 用户管理的助记词/私钥 |
交易授权 | 自定义验证逻辑(多重签名、时间锁、限制) | 应用程序使用嵌入的私钥进行签名 | 用户明确批准每笔交易 |
费用支付 | 支持费用抽象和赞助,允许使用其他SPL代币如USDC或USDT支付 | 用户支付所有交易费用。每个应用程序都需要入金 | 用户支付所有交易费用 |
安全模型 | 在开源智能合约代码中执行安全,带有可选的可编程约束 | 安全依赖于嵌入钱包提供者的闭源代码 | 安全依赖于客户端,闭源代码 |
恢复选项 | 可编程恢复(社交、监护密钥) | 应用程序提供的恢复方法 | 仅基于助记词的恢复 |
支出控制 | 可编程支出限制、批准工作流 | 一些嵌入式钱包支持服务器端交易政策(注意 - 如果实现不当,可能会创建托管架构) | 无 |
合规考虑 | 灵活 - custody可以被编程,并允许根据不断变化的监管要求调整钱包 | 咨询特定钱包提供者 | 审查较低 - 用户控制 |
企业功能 | 基于角色的访问控制、批准工作流 | 一些嵌入式钱包有有限的服务器端控制 | 无 |
供应商锁定 | 低。智能钱包基于开源程序。可以在不更改地址的情况下从基础设施提供商迁移用户 | 高。离开嵌入式钱包的唯一方法是让每个用户进行私钥恢复 - 这可能不安全并可能要求用户执行手动步骤 | 低。依赖于用户 |
Solana智能钱包在需要灵活的托管架构时非常有用,例如:
代表签名者的一个关键特征是,可以限制他们对钱包的权限,例如支出或资产类别限制。
Solana上的智能钱包通过链上程序和链下基础设施的结合运行,具有一些独特的Solana特性:
与不可执行账户(数据账户)不同,Solana智能钱包(或可执行程序账户)通常作为控制一个或多个账户(PDA)的链上程序实现。
智能钱包使用自定义授权逻辑,而不是单个私钥:
用户可以将特定权限委托给不同的地址,从而对每个密钥/设备能做什么进行更精细的控制。
智能钱包使用Solana的标准版本化交易格式。
账户抽象(AA)使开发者可以创建可定制的智能合约账户,超越与单一密钥对相关的不可执行账户,允许更灵活的用户体验。
AA允许自定义验证逻辑,这意味着账户可以实现安全特性,如社交恢复、多重签名要求或支出限制,而无需依赖于区块链的默认规则。
AA的主要目标是通过去除技术障碍(例如交易费用和助记词)使区块链技术对用户不可见,同时保持自我保管的优势。
智能钱包在免手续费交易方面的主要优势是,抽象发生在账户层面,而不需要特定于dApp的实现,从而创建了更无缝的体验,用户可能甚至不会意识到交易费用的存在。
这意味着开发者可以实现:
智能钱包可以直接在其架构中整合费用赞助。钱包合约本身可以定义谁支付费用以及在什么情况下。
如果你不希望为用户的交易费用提供赞助,他们可以使用SOL或USDC或USDT等代币进行支付。
智能钱包可以实现自定义验证逻辑,以确定在何时允许赞助交易,例如限速或限制到特定应用程序。
有多种方法可以将智能钱包集成到你的应用中:客户端、服务器端或针对AI代理的双钥架构。
在下面的教程中,你将学习如何在服务器端部署你的第一个智能钱包。
首先,在Crossmint Staging Console中创建一个开发者账户。
然后,导航到项目设置 > 一般,并将钱包类型更改为“智能钱包”。
你可以通过转到集成 > 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 = {
// 在生产中,你可能希望使用MPC解决方案,例如
// crossmint管理的MPC密钥
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 Testnet USDXM水龙头并粘贴你在上一步中获取的钱包地址,以获得Solana上的测试USDXM。
现在你有了一些代币,我们来检查钱包的余额(checkBalance.ts
):
const apiKey = "YOUR_API_KEY";
const walletAddress = "YOUR_WALLET_ADDRESS"; // 来自前一步
const tokens = ["sol", "usdc", "usdxm"]; // 要获取余额的代币
const chains = ["solana"]; // 查询余额的链
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,我们很高兴能够为从知识产权到忠诚度计划再到AI代理的广泛用例提供支持,依靠我们的简单API和无代码工具,针对钱包、支付和代币化,可以可靠地扩展到数百万用户,并现在通过推出Solana嵌入式智能钱包为金融科技和AI代理应用提供动力。
如果你想了解更多有关如何在你的项目中实现Solana智能钱包的信息,请联系我们,我们很乐意帮助你。
- 原文链接: helius.dev/blog/solana-s...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!