原文引用自HackQuest:
关于 SPL Token,假如我们现在想要向其他人发送一些 Kitty 代币,
但其他人目前没有任何关于 Kitty 代币的账户,那该怎么办?难到我们要为他们创建一个新的 Kitty 代币帐户,
然后才能向他们发送 Kitty 代币吗?通过前面对 Solana 基础课程的学习,我们知道解决方案就是 PDA (程序派生地址),
它使用特殊算法从其他公钥派生出新的公钥。这样,给定一个“钱包账户”和一个“铸币账户”,我们就可以确定地找到关联的代币账户,这些账户被称为 ATA (关联令牌账户)。
如何理解上面的话
-
SPL Token 和 Kitty 代币:
• 你可能正在处理一个名为 “Kitty” 的代币(可以是任何基于 SPL 标准的代币)。在 Solana 上,每种代币都有相应的账户来存储它。 -
问题:没有 Kitty 代币账户:
• 如果你想给其他人发送一些 Kitty 代币,但他们没有一个用于接收 Kitty 代币的账户,直接发送是行不通的,因为每个代币账户专门用于存储一种代币。
• 你不能把 Kitty 代币直接发送到一个普通的钱包地址,这种钱包需要有一个专门的代币账户来存放 Kitty 代币。 -
解决方案:PDA(程序派生地址)和 ATA(关联令牌账户):
• PDA(Program Derived Address,程序派生地址):PDA 是通过特定算法从一个已有的公钥派生出来的,它不需要私钥就可以推导出对应的地址。你可以通过已知的公钥来计算出新的地址。
• ATA(Associated Token Account,关联令牌账户):ATA 是一种使用 PDA 派生出来的专属代币账户。在 Solana 上,每个用户的每种代币都有一个唯一的 ATA,通过钱包地址和代币铸造地址可以确定出这个 ATA。 -
实际操作:
• 当你要发送 Kitty 代币给某人时,尽管他们没有 Kitty 代币账户,你可以通过 PDA 计算出他们的 ATA,这个 ATA 是专门用来存储 Kitty 代币的。
• 你不需要手动为对方创建 Kitty 代币账户,系统可以根据 PDA 自动生成正确的代币账户地址,然后你就可以把 Kitty 代币发送到这个 ATA 上。
这样,ATA 确保了每个用户都有一个专属账户来存放每种 SPL Token,同时通过 PDA 来计算地址,简化了账户创建的流程。