Solana 中的代币、账户和相关账户之间的概念差异



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

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

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

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

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

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

所以,我想知道

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

这里有很多问题要介绍,所以让我们一点一点地介绍一下。

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

  • 铸币账户,处理新代币的创建
  • 持有账户
  • (有时也称为代币账户),实际持有大量代币,并由某人拥有

关键的一点是,这些都是账户。 因此,要回答您的问题:

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

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

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

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

关联账户有什么用?

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

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

mintTo创建全新的代币,并将它们放入持有账户,根本不进行转账。

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

您不需要元数据的新程序 - 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#L222 转账以及相关代币账户程序的所有代币程序逻辑,网址为https://github.com/solana-labs/solana-program-library/blob/7caf27cca6a9f58055f93517774318eb2b2f97bf/associated-token-account/program/src/processor.rs#L66

相关内容

  • 没有找到相关文章

最新更新