为啥它可以获得新生成地址的关联帐户?
Posted
技术标签:
【中文标题】为啥它可以获得新生成地址的关联帐户?【英文标题】:why could it get the associated account for a new generated address?为什么它可以获得新生成地址的关联帐户? 【发布时间】:2021-11-05 23:34:08 【问题描述】:奇怪的是,它是新生成的地址,它可以获取关联的帐户。
const account = Keypair.generate();
let address = await Token.getAssociatedTokenAddress(
ASSOCIATED_TOKEN_PROGRAM_ID,
TOKEN_PROGRAM_ID,
token.publicKey,
account
);
【问题讨论】:
为什么很奇怪?您基本上是通过传递它需要的所有必需参数来生成一个帐户。帐户可以是空的,其中没有数据或余额 (SOL)。只有在一个 epoch 之后才会被清理。 我看了getAssociatedTokenAddress
的源码,确实会调用findProgramAddress
返回地址。返回 null 是违反直觉的。
【参考方案1】:
getAssociatedTokenAddress
生成的地址是确定性的,因此给定相同的公钥输入,它将始终具有相同的输出。此外,它是程序派生地址,因此只能由程序“签名”。
您可以在https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses找到更多关于程序派生地址的信息
【讨论】:
以上是关于为啥它可以获得新生成地址的关联帐户?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript 从 Apple Pay 获取与 Apple Pay 帐户关联的用户电子邮件地址