在本文中,我们将深入探讨账户抽象AA的技术核心概念,并介绍如何使用 AWS 和 Alchemy 的 Account Kit SDK 构建解决方案。我们将细致分析用于该解决方案的 Account Kit 组件,包括 AASDK、Bundler 和 Gas Manager API。
在第一部分中,我们介绍了账户抽象的概念以及如何通过它来改善用户体验。文章中还讨论了 AA 的不同应用场景,例如市场营销活动及大规模用户注册。
以太坊改进提案EIP4337 解释了如何在不更新以太坊协议的情况下实现账户抽象,AA 钱包和外部拥有账户EOA之间的主要区别在于每个 AA 钱包都是智能合约。根据 Vitalik Buterin 的帖子,这“让我们可以使用智能合约逻辑来指定交易的效果,以及费用的支付和验证逻辑。这为许多重要的安全性好处提供了可能性,例如多重签名和智能恢复钱包,可以在不改变钱包的情况下更改密钥,以及量子安全性。”
如前所述,以太坊上的账户抽象不需要任何协议级别的更改,这有两个好处。首先,不需要任何可能导致不稳定的更新,从而消除对协议其他部分的影响。其次,AA 开发可以独立于协议开发进行。以下图表展示了从 AA 钱包提交交易的总体交易流,此类交易被称为 UserOperation。有关传统 EOA 钱包交易流的更多信息,请参阅第一部分。
UserOperation 通过以下步骤处理:
用户通过他们的智能合约钱包授权交易,并使用私钥对其进行签名,从而创建 UserOperation。UserOperation 被发送到一个捆绑器,这是一个可以处理用户操作批次的离线实体。捆绑器模拟这些 UserOperation,并评估 UserOperation 中提交的签名是否与相关智能合约钱包中的地址对应。在验证一批 UserOperation 之后,捆绑器将一到几条 UserOperation 打包成一个捆绑交易,然后提交到以太坊区块链上,最终包含在以太坊块中。有关 AA 钱包的更多信息和技术深度解析,请参考 理解账户抽象。
以下架构图展示了解决方案的构成。
可在公共的 web3workshop GitHub 仓库中获取 AWS 组件的可部署 AWS 云开发工具包 (AWS CDK) 库。本文章涉及的架构包括 Build Web3 workshop 第一模块的步骤 1 和 4。有关部署解决方案的说明,请参考 README。
基于 AWS 的账户抽象解决方案由以下构建模块组成如上述图中编号所示:
Amazon API Gateway,这是一个全面管理的服务,可以创建、发布、维护、监控和保护大规模 API。在本解决方案中,API Gateway 用于将所有必要功能以精确的 REST 接口展示,验证与 Amazon Cognito 用户池的 JSON Web Token (JWT) 令牌,并将经过身份验证的调用内部转换为 Lambda 函数调用。Amazon Cognito,这是一个完全托管的身份和访问管理服务,适用于网页和移动应用程序。借助 Amazon Cognito,开发人员可以选择他们想要使用的身份验证机制,例如电子邮件和密码或社交登录。用户成功登录后,系统会生成一个 JWT 令牌,其中包含有关用户的各种元数据,包括他们的 AA 钱包地址。即使用户从未与其交互,该 AA 钱包地址也已可靠计算出来。AWS Step Functions,这是一个无服务器工作流编排服务。基于 Step Functions 的 表达式工作流 是本解决方案中使用的主要无服务器编排服务。在用户通过 Amazon Cognito 成功登录后,工作流会在 JWT 生成期间触发。Step Functions 工作流检查用户是否已经通过与关联的 Amazon DynamoDB 表的查找来获取密钥。如果尚不存在密钥,工作流会调用密钥管理 AWS Lambda 函数以生成新密钥。密钥管理、用户操作签名和区块链 Lambda 函数:密钥管理函数负责与 AWS KMS 进行交互,以通过调用 generatedatakeypairwithoutplaintext 以安全方式获取新生成的私钥。该密钥将存储在关联的 DynamoDB 表中。UserOperation 签名函数负责在提交的 UserOperations 上创建签名。为此,该函数有权通过 AWS KMS 解密特定的私钥。然后使用这些私钥对提交的 UserOperation 哈希创建签名。区块链处理函数使用 Alchemy AASDK。它组装 UserOperation,通过 UserOperation 签名 Lambda 获取签名哈希,并通过 Alchemy AASDK 与 Alchemy 的账户抽象 API 进行交互。AWS Key Management Service (AWS KMS),这是一个完全托管的密钥管理服务。使用 AWS KMS,非常容易创建和控制应用程序使用的加密密钥。在本解决方案中,当用户首次登录时,将为其使用 secp256k1 曲线创建 KMS 数据密钥对。此密钥对将被加密,并且只能通过 AWS KMS 上的关联密钥进行解密。Amazon DynamoDB,这是一个完全托管的无服务器键值 NoSQL 数据库,旨在支持高性能应用程序。在此解决方案中,DynamoDB 用于存储用户的数据密钥对的加密私钥。在用户登录期间,将检查 DynamoDB 以验证是否已有唯一用户 ID又称 sub。如果存在,将返回现有的密钥材料。如果 sub 不存在,则会在 AWS KMS 中创建一个新密钥,并将返回的加密私钥与用户 ID 一起存储在 DynamoDB 中。一个 Amazon Managed Blockchain 的以太坊节点,这是一个完全托管的 RPC 节点。AA 钱包需要访问区块链,例如获取通过 ethcall API 计算出的确定性钱包地址,或使用 ethgasPrice 获取当前网络的燃料费用。本解决方案使用 Managed Blockchain Goerli 以太坊节点用于区块链访问,处理与以太坊的 JSON 远程过程调用 (RPC) 请求。要了解更多关于如何部署 Managed Blockchain 以太坊 RPC 节点的信息,请参考如何在 AWS 上部署以太坊节点。Alchemy Account Kit,这是一个在您的 Web3 应用中嵌入智能账户的框架,解锁例如燃料赞助、批处理交易等强大功能。Alchemy 的 AASDK 使得集成和部署智能账户、发送用户操作以及仅需几行代码即可赞助燃料变得非常简单。让我们深入了解用于我们解决方案的 Account Kit 组件。
AASDK 是一个类型安全且高效的 TypeScript 库,基于 viem 构建,提供用于发送用户操作、赞助燃料和部署智能账户的方法。它在底层处理 ERC4337 的复杂性,以便使账户抽象变得简单。
您可以通过 AASDK 与 Alchemy 的捆绑器和燃料管理器进行交互。让我们通过走访其主要接触点来探索如何使用 AASDK。
利用 AASDK 的第一步是设置提供者。该提供者作为与区块链交互的网关,发送 UserOperations (UOs) 并管理智能账户。
啊哈加速器新版本下载
该提供者连接到 LightAccount 智能账户实现Alchemy 的燃料优化智能账户实现。这定义了您将通过“提供者”控制的智能账户AA 钱包的接口。请记得用您实际的 Alchemy API 密钥可在 Alchemy 仪表盘 获取和私钥替换占位符。
javascriptimport { createLightAccountAlchemyClient } from @alchemy/aaalchemyimport { LocalAccountSigner sepolia type Hex } from @alchemy/aacore
const chain = sepolia
// 您的 EOA 私钥,将作为 Light Account 的签名者const PRIVATEKEY = 0xYourEOAPrivateKey as Hexconst signer = LocalAccountSignerprivateKeyToAccountSigner(PRIVATEKEY)
// 创建一个提供者以从智能账户发送用户操作const provider = await createLightAccountAlchemyClient({ // 获取您在 https//dashboardalchemycom 上的 Alchemy API 密钥 apiKey ALCHEMYAPIKEY chain signer})
// 通过向账户地址提供 ETH 来发送用户操作//例如,获取 Sepolia ETH 请访问 https//sepoliafaucetcomconsolelog(providergetAddress()) // 记录智能账户地址
这将记录您的智能账户地址到控制台。用 SepoliaETH 为您的账户地址提供资金,以便通过它发送 UOs。
此时,您已准备好发送 UOs。 UOs 类似于从您的智能账户AA 钱包发送的交易。以下是如何发送简单 UO 的示例:
javascript// 从您的智能账户发送用户操作const { hash uoHash } = await providersendUserOperation({ uo { target 0xTargetAddress // 目标合约地址 data 0xCallData // 设想的调用数据 value 0n // (可选) 要发送到目标合约地址的值 }})
consolelog(uoHash) // 记录用户操作哈希
UO 中的“data”字段允许您定义意图的操作。对于简单的价值转移,可以为空;对于合约调用则需要详细。有关构造调用数据的进一步指导,请访问 这里。
执行以上代码后,UOs 将被发送到 Alchemy Bundler 进行处理,并记录 UserOperationHash,允许您在 Jiffyscan 等平台上跟踪 UO 的状态。
将多个 UOs 打包成单个 UserOperation 是降低燃料成本和便利复杂操作的有效策略。例如,在 Web3 游戏中,玩家可以通过单个 UO 执行多个链上操作,而无需为每个操作批准 UO,从而提升用户体验。以下是如何批处理 UOs 的示例:
javascriptconst { hash uoHash } = await providersendUserOperation({ uo [ { target 0x data 0xcallDataTransacation1 } { target 0x data 0xcallDataTransacation2 } ]})
这些 UOs 将按数组中的顺序依次执行。需要注意的是,并非每个智能账户实现都支持批处理。Alchemy 的 LightAccount 和 ModularAccount 实现支持此功能。
有关 UOs 批处理的更多信息,请参阅 Account Kit 文档。
Paymaster 是一个链上合约,允许某个实体为另一个实体赞助燃料费用。它可以帮助去中心化应用抽象掉燃料的概念,从而显著提升用户体验,并帮助更多 Web3 用户上手。
燃料管理器 是 Alchemy 的 Paymaster 实现。您可以按照以下步骤通过 AASDK 使用燃料管理器来赞助 UOs:
注册 Alchemy 帐号 :要访问燃料管理器,您需要一个 Alchemy 帐号。请 注册,然后访问 燃料管理器选项卡。
创建新的燃料政策 :燃料政策是一组规则,用于定义哪些 UOs 有资格获得燃料赞助。您可以通过定义规则来控制哪些操作有资格获得赞助:
消费规则 :限制政策可以赞助的金额或 UOs 的数量。白名单 :限制可获得赞助的钱包地址。政策将只为来自该列表上的地址所发送的 UOs 赞助燃料。黑名单 :禁止特定地址根据此政策获得赞助。政策持续时间 :定义政策的持续时间和赞助到期时间。在生成后,这段时间是燃料管理器签名支付方数据将保持有效的时长。确保燃料政策链接到您在为提供者创建的 API 密钥的特定 Alchemy 应用。燃料政策只能与一个 Alchemy 应用关联,并且将只接受通过关联应用的 API 密钥发送的请求。
要了解有关政策配置的更多信息,请参考 Alchemy 的 设置燃料政策。
将燃料政策链接到您的 AASDK 中的提供者 :接下来,您必须在 AASDK 中将燃料政策链接到您的提供者,这将确保任何通过您的提供者发送的合格 UOs 都会获得燃料赞助。在燃料管理器仪表板的政策页面顶部找到您的政策 ID。
创建一个使用您政策的提供者:
javascript// 使用燃料管理器来赞助燃料的客户端// 在 dashboardalchemycom/gasmanager/policy/create 查找您的燃料管理器政策 IDconst provider = await createLightAccountAlchemyClient({ // 获取您的 Alchemy API 密钥 https//dashboardalchemycom apiKey ALCHEMYAPIKEY chain signer gasManagerConfig { policyId YourGasManagerPolicyId }})
发送赞助的 UOs :现在,您已准备好发送赞助的 UOs,这意味着燃料管理器将承担通过您的提供者发送的任何合格 UO 的费用。
亚马逊 DataZone 在预览中推出与 OpenLineage 兼容的数据 lineage 可视化
Amazon DataZone 推出与 OpenLineage 兼容的数据血缘可视化预览核心要点Amazon DataZone 现已引入与 OpenLineage 兼容的数据血缘可视化功能,帮助用户捕获、存储和可视化数据资产的流动和转化情况。通过 API,数据管理员和数据生产者可以捕获超出 Amaz...
卫星通信在AWS上:泰雷兹将机上WiFi服务云化 网络与内容交付
AWS上的卫星通信:Thales云化机上WiFi服务by Young Jung Chakri Botlaguduru (嘉宾) Kenneth Sullivan (嘉宾) Seshu Dommaraju (嘉宾) Yann Nicolas (嘉宾) and Sebastien Maugeais 于2...