本文详细介绍了Solana中的关联代币账户(ATA),解释了ATA的定义、创建方式及其运作原理。作者通过示例和代码演示了如何在Solana平台上创建和管理关联代币账户,使读者能够轻松理解这一技术概念。
Solana 账户模型 组织和存储所有链上数据,关联Token账户(ATAs)是该模型的关键部分之一。本文将解释什么是 ATA,它是如何工作的,以及如何为自己创建一个关联Token账户。
关联Token账户是通过 Solana 关联Token账户程序创建的,它记录关于特定Token的信息、其余额及其所有者。 这是一种 程序派生地址(Program Derived Address) 的变体。
以下是每个术语的含义:
关联 Token 账户 - 与Token相关联的账户(可以想成 Solana Token程序)
程序 派生 地址 - 由 Solana 程序(即,关联Token账户程序)“派生”(创建)出的地址
关联Token账户之间的转账直接在账户之间发生,间接通过它们的钱包地址进行。
Token账户相当于以太坊上的 ERC-20 Token,但有一个根本的区别:以太坊智能合约拥有其状态和代码,而 Solana 上的Token账户仅包含其代码,并“导出”其状态(例如,Token余额)到为该Token的每个所有者创建的关联Token账户中。
让我们快速查看 USDC,以概述我们迄今为止所学的内容:
Solana 上的 USDC 是一个Token账户
Token账户由 系统程序 创建,但由 SPL Token程序初始化为Token铸造
一旦 USDC Token被初始化,用户就可以开始进行转账
拥有 USDC Token的用户会具有通过关联Token账户程序(ATP)创建的关联Token账户
两个用户之间的 USDC 交换发生在用户的 ATAs 之间
Solana 上的关联Token账户
USDC 的转账直接发生在用户的 ATAs 之间,并间接发生在它们在 Solana 节点 上的钱包地址之间。这些转账必须发生在种子相同的用户的 ATAs 之间。
作为 Solana 程序库 的一部分,关联Token账户程序是每个 ATA 的母程序,它将用户钱包映射到其拥有权限的 ATAs。 此外,ATA 程序确保如果用户想将Token发送给其他用户,接收方即使没有对应Token的 ATA 也能收到Token。在这种情况下,程序将在智能合约在 RPC 节点 上执行时自动创建一个 ATA 账户。
关联Token账户程序的源代码用 Rust 编写,可在 GitHub 上查看。
以下是在 TypeScript 中创建 ATA 的过程:
在 Solana 上创建关联账户程序的源代码
关联Token账户程序中发生的事情如下:
首先,我们获取 TOKEN_PROGRAM_ID
和 SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID
常量。程序 ID 是程序地址的更高级名称。
然后,我们继续使用 findAssociatedTokenAddress
函数,它返回 publicKey,将是新创建的 ATA 的地址。
在函数体内,调用 findProgramAddress
方法并传入两个参数:
种子数组
SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID
由于 ATA 是程序派生地址(PDA)的一种形式,可以通过将参数传递给程序来创建该账户。PDA 的创建涉及将种子作为参数传递,在这种情况下为:
wallet_address - 将拥有 ATA 中资金的账户的地址(权限)
token_program_id - SPL Token程序的程序 ID
token_mint_address - 将存储在 ATA 中的Token账户的地址
关联Token账户程序的 ID 是 SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID。
创建关联Token账户就像在 Solana 上使用 spl-token-cli 调用 create-token 一样简单。 创建 ATA 也假设将与其“关联”的Token已存在。
在 Solana 上创建关联Token账户
代码调用 create-account
命令,接受 <TOKEN_MINT_ADDRESS>
作为参数。
要创建关联Token账户,你必须遵循以下四个步骤:
转移 SOL - 系统程序初始化 ATA 并使其免租
创建空闲空间 - 系统程序分配 ATA 的空闲空间。
转移所有权 - 系统程序将账户的所有权转移给 SPL 关联Token账户程序
初始化账户 - 该过程总结了账户初始化,并设置Token地址、新创建的 ATA 地址及其所有者
所有者 是控制 ATA 的 Solana 程序的类型,而 权限 是向所有者程序发送交易的账户(钱包),然后该程序代表权限者更改 ATA 中的数据。
默认情况下,关联Token账户在创建时必须标记为 免租 ,因此账户必须持有的最低金额至少为 0.00203928 SOL。 系统程序将该 SOL 转移到 ATA,这笔钱将从发起交易的账户中扣除。
除此初始费用外,任何进一步的交互费用不会高于 Solana 上的普通交易费用。
你可以通过 Phantom 等客户端检查关联Token账户,这些客户端会自动派生用户钱包拥有的所有 ATAs。 此外,由于区块链是公开的,你也可以通过如 Solscan.io 的浏览器访问此信息。
将你想检查的钱包地址粘贴进去,它的 ATAs 将在Token账户下可视化显示:
Solscan.io 检查钱包的 ATAs 界面
将关联Token账户链接到现有账户是在后台默认完成的。由于 ATA 的创建方式, 程序或客户端可以轻松查看每个账户的种子。 它们可以视为与以下内容的“链接”:
具有 ATA 权限的钱包。
Token账户的地址(即 ATA 持有的Token类型)。
使用 Alchemy 构建你的 Solana Dapp
了解关联Token账户是成为全面 Solana 开发者的第一步之一。当你掌握了 Solana 节点并选择了一个 RPC 提供者后,可以使用我们用户友好的 Solana API 开始构建你的第一个 dApp。
- 原文链接: alchemy.com/overviews/as...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!