为啥它可以获得新生成地址的关联帐户?

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找到更多关于程序派生地址的信息

【讨论】:

以上是关于为啥它可以获得新生成地址的关联帐户?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能获得贝宝的商家帐户 ID?

为啥 html5 地理位置无法获得结果?

格子 - 更新模式与重新关联帐户

如何使用 JavaScript 从 Apple Pay 获取与 Apple Pay 帐户关联的用户电子邮件地址

为啥即使帐户已关联,我也无法将转化事件从 Firebase 导入 AdWords?

为啥不能与internet同步时间,提示没有此操作权限,请联系计算机管理员已获得帮助。