如何使用 @solana/web3.js 从 Solana 中的自定义令牌中删除铸币权限?

Posted

技术标签:

【中文标题】如何使用 @solana/web3.js 从 Solana 中的自定义令牌中删除铸币权限?【英文标题】:How do I remove the minting authority from my custom token in Solana using @solana/web3.js? 【发布时间】:2021-11-02 03:16:28 【问题描述】:

我已经能够使用使用 web3.Keypair.generate() 生成的自定义钱包创建自定义代币,但是我现在如何限制这些代币的供应或删除这些 SPL 代币的铸造权限,可以这么说?

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

为防止再铸币,您需要将铸币权限设置为None。在 JS 中,您可以在 [1] 中使用authorityType = MintTokens 调用setAuthority 期间简单地将newAuthority 设置为null

[1]https://github.com/solana-labs/solana-program-library/blob/36e886392b8c6619b275f6681aed6d8aae6e70f9/token/js/client/token.js#L985

【讨论】:

【参考方案2】:

扩展 Jon Cinque 的答案

import  Connection, clusterApiUrl, Keypair, PublicKey  from '@solana/web3.js'
import  Token, TOKEN_PROGRAM_ID  from '@solana/spl-token'
import * as bs58 from 'bs58';

(async () => 
  const connection = new Connection(clusterApiUrl('mainnet-beta'))

  const bytes = bs58.decode(process.env.PRIVATE_KEY)
  const account = Keypair.fromSecretKey(bytes)

  const tokenMint = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v')
  const token = new Token(connection, tokenMint, TOKEN_PROGRAM_ID, account)

  await token.setAuthority(tokenMint, null, 'MintTokens', account.publicKey, [account])

)()

【讨论】:

以上是关于如何使用 @solana/web3.js 从 Solana 中的自定义令牌中删除铸币权限?的主要内容,如果未能解决你的问题,请参考以下文章

使用 @Solana\web3.js 传输 SPL 令牌

如何获取在与@solana/web3.js 的交易中转移的自定义令牌数量?

如何通过“@solana/web3.js”和“@solana/spl-token”调用 nft 程序?

使用 @solana/web3.js 将元数据添加到 Solana 令牌

如何使用现有钱包签署使用节点 JS 脚本运行的 solana 交易?

尝试发送 USDC 时无法获取钱包签名者 @solana-labs/web3.js