繁体   English   中英

Solana 中 Token、Account 和 Associated 账户的概念区别

[英]Conceptual difference between Token, Account and Associated account in Solana

我来自以太坊环境,Solana 的概念有点混乱。 我找到了各种指导代码步骤的教程,但并没有真正解释逻辑背后的概念。

我知道在 Solana 中我们有程序,不包含数据,只是逻辑 - 网络中的可执行实体。 然后我们得到了实际包含数据的帐户。

我已经阅读了 Solana 文档和程序库(例如Token Program ),但我仍然有一些理解空白点。

我必须建立一个自动化的 NFT 铸造管道,我在代币、账户和关联账户的概念之间有点迷失了。

现在,如果我遵循令牌程序教程(上面链接),它将指导我完成:

  1. 创建薄荷
  2. 创建(或获取)关联帐户
  3. 向该帐户铸造代币

所以,我想知道

  • 一旦我创建了铸币厂,并在 Solscan 中搜索它,它就会打开一个 Account 实体。 那么,铸币厂其实并不是一个代币,而只是一个持有数据的账户? (例如这里)。 另一方面,我实际上可以在 Solscan 中找到Token实体。 有什么不同?
  • 这个令牌(或帐户)没有任何元数据......实际上什么都没有。 它就像一个数据占位符。 它是已经实际铸造的代币还是半生不熟的东西? 如果是后者,那么我必须在之后附加元数据吗?
  • 关联账户有什么用?
  • SPL 库有一个mintTo函数,该函数在 Solana 文档的上述链接教程中使用。 这是将代币转移到另一个钱包的行为吗? 该示例实际上将其转移(铸造)到关联帐户。 这里的逻辑是什么?
  • 如果我使用公共 Metaplex 程序来铸造代币,并且我部署了我自己的 Anchor 程序 - 这个程序是否用于将元数据添加到铸造的代币中? 这是什么概念,我不明白。
  • 当我准备好 NFT(铸造 + 元数据)并且我想将其转移到其他人的钱包时 - 我真的必须为该钱包创建一个关联帐户,然后将令牌转移到该帐户吗? 基本概念是什么?

这里有很多问题要解决,所以让我们一点一点来。

最重要的一点是“帐户”一词的重载,这意味着许多不同的东西。 Solana 中的帐户就像普通操作系统中的文件,它可以包含程序定义的任何数据。 令牌程序定义:

  • mint 帐户,用于处理新代币的创建
  • 持有账户(有时也称为代币账户),实际上持有一定数量的代币,并由某人拥有

关键是这些都是账户。 所以要回答你的问题:

一旦我创建了铸币厂,并在 Solscan 中搜索它,它就会打开一个 Account 实体。 那么,铸币厂其实并不是一个代币,而只是一个持有数据的账户? (例如这里)。 另一方面,我实际上可以在 Solscan 中找到 Token 实体。 有什么不同?

在此示例中, JAf858mSrDuQuHQCVqfA3KN8PNaVxZokMVNAJiC3zMpr是铸币厂地址(或代币类型), 4FLiMhW2Weagy8LjtMCVkFQkLrB3zmF2VUcJDq2NQcJN是用户持有该代币类型的代币地址。 Solscan 将其称为“代币账户”。

这个令牌(或帐户)没有任何元数据......实际上什么都没有。 它就像一个数据占位符。 它是已经实际铸造的代币还是半生不熟的东西? 如果是后者,那么我必须在之后附加元数据吗?

正确,4FLiMhW2Weagy8LjtMCVkFQkLrB3zmF2VUcJDq2NQcJN 的帐户没有元数据,铸币JAf858mSrDuQuHQCVqfA3KN8PNaVxZokMVNAJiC3zMpr 4FLiMhW2Weagy8LjtMCVkFQkLrB3zmF2VUcJDq2NQcJN没有元数据。 元数据附加在一个单独的帐户中,就像在 Metaplex 令牌元数据标准中一样。 在该模型中,如果您具有铸币权,则可以将其附加到铸币厂。

关联账户有什么用?

关联代币账户是一个标准,它定义了一个“规范”账户,用于为给定钱包持有特定类型的代币,以便更容易找到为用户发送特定类型代币的位置。 这样,只需使用您的钱包地址E5GvXygLz1AbCFqtcp14feEo8hy6YAv8wr74Xnpo1qBH ,我就可以通过派生相关的代币账户知道将任何类型的代币发送到哪里。 4FLiMhW2Weagy8LjtMCVkFQkLrB3zmF2VUcJDq2NQcJN是代币铸币厂JAf858mSrDuQuHQCVqfA3KN8PNaVxZokMVNAJiC3zMpr的派生地址。

SPL 库有一个 mintTo 函数,该函数在 Solana 文档的上述链接教程中使用。 这是将代币转移到另一个钱包的行为吗? 该示例实际上将其转移(铸造)到关联帐户。 这里的逻辑是什么?

mintTo创建全新的代币,并将它们放在一个持有账户中,根本不进行任何转移。

如果我使用公共 Metaplex 程序来铸造代币,并且我部署了我自己的 Anchor 程序 - 这个程序是否用于将元数据添加到铸造的代币中? 这是什么概念,我不明白。

您不需要新的元数据程序——Metaplex 令牌元数据程序可以为您完成。 它是一个无状态程序,就像任何其他程序一样,它定义了如何将数据写入帐户的逻辑。 在这种情况下,该数据是代币铸币厂的元数据。

当我准备好 NFT(铸造 + 元数据)并且我想将其转移到其他人的钱包时 - 我真的必须为该钱包创建一个关联帐户,然后将令牌转移到该帐户吗? 基本概念是什么?

这是最好的做法。 您从一个关联令牌帐户转移到另一个,如果目标用户的关联令牌帐户尚不存在,您可以使用关联令牌帐户程序创建它。 它将在该地址创建一个新的代币帐户,例如4FLiMhW2Weagy8LjtMCVkFQkLrB3zmF2VUcJDq2NQcJN ,并将其分配给正确的所有者,例如E5GvXygLz1AbCFqtcp14feEo8hy6YAv8wr74Xnpo1qBH

您可以在https://github.com/solana-labs/solana-program-library/blob/7caf27cca6a9f58055f93517774318eb2b2f97bf/token/program/src/processor.rs#L516找到所有用于铸造的令牌程序逻辑,并在https进行转移://github.com/solana-labs/solana-program-library/blob/7caf27cca6a9f58055f93517774318eb2b2f97bf/token/program/src/processor.rs#L222https://github.com/solana-实验室/solana-program-library/blob/7caf27cca6a9f58055f93517774318eb2b2f97bf/associated-token-account/program/src/processor.rs#L66

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM