- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在更新 Metaplex NFT 元数据时遇到了一些问题。我使用了@metaplex/js,这是我的代码。
import { programs } from '@metaplex/js';
export const updateMetadataV1 = async () => {
let { metadata : {Metadata, UpdateMetadata, MetadataDataData, Creator} } = programs;
let signer = loadWalletKey(keyfile);
let nftMintAccount = new PublicKey("EC8gGdtVFDoTf3vEGbLvPp7SVWta2xQrs99iWMbaFrdE");
let metadataAccount = await Metadata.getPDA(nftMintAccount);
const metadat = await Metadata.load(solConnection, metadataAccount);
let newUri = "https://arweave.net/my arweave address";
if (metadat.data.data.creators != null) {
const creators = metadat.data.data.creators.map(
(el) =>
new Creator({
...el,
}),
);
let newMetadataData = new MetadataDataData({
name: metadat.data.data.name,
symbol: metadat.data.data.symbol,
uri: newUri,
creators: [...creators],
sellerFeeBasisPoints: metadat.data.data.sellerFeeBasisPoints,
})
const updateTx = new UpdateMetadata(
{ feePayer: signer.publicKey },
{
metadata: metadataAccount,
updateAuthority: signer.publicKey,
metadataData: newMetadataData,
newUpdateAuthority: signer.publicKey,
primarySaleHappened: metadat.data.primarySaleHappened,
},
);
let result = await sendAndConfirmTransaction(solConnection, updateTx, [signer]);
console.log("result =", result);
}
}
交易结果没有错误,代表交易成功。我在 Solana Explorer 上查看过。但是元数据不会改变。怎么了?
最佳答案
要解决此问题,可以使用此代码,这是使用 mpl-token-metadata npm 包调用链上 updateMetadata 函数的低级代码。
import { Wallet } from "@project-serum/anchor";
import * as anchor from "@project-serum/anchor";
import {createUpdateMetadataAccountV2Instruction,DataV2,UpdateMetadataAccountV2InstructionArgs,UpdateMetadataAccountV2InstructionAccounts} from "@metaplex-foundation/mpl-token-metadata"
const fs = require("fs");
(async() => {
// This is the Update Authority Secret Key
const secretKey = fs.readFileSync(
"/Users/pratiksaria/.config/solana/id.json",
"utf8"
);
const keypair = anchor.web3.Keypair.fromSecretKey(
Buffer.from(JSON.parse(secretKey))
);
const endpoint = "https://metaplex.devnet.rpcpool.com/";
const connection = new anchor.web3.Connection(endpoint);
const wallet = new Wallet(keypair);
console.log("Connected Wallet", wallet.publicKey.toString());
const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey(
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
);
// You have to enter your NFT Mint address Over Here
const mintKey = new anchor.web3.PublicKey("5iSxT33FyHWsnb8NYSytY17TTXfkFn62FiCyFVFxYhqY");
const [metadatakey] = await anchor.web3.PublicKey.findProgramAddress(
[
Buffer.from("metadata"),
TOKEN_METADATA_PROGRAM_ID.toBuffer(),
mintKey.toBuffer(),
],
TOKEN_METADATA_PROGRAM_ID
);
// BTW DeGods is my FAV collection although i cant afford one 🥲
const updated_data: DataV2 = {
name: "DeGods",
symbol: "DG",
uri: "https://metadata.degods.com/g/4924.json",
sellerFeeBasisPoints: 1000,
creators: [
{
address: new anchor.web3.PublicKey(
"CsEYyFxVtXxezfLTUWYwpj4ia5oCAsBKznJBWiNKLyxK"
),
verified: false,
share: 0,
},
{
address: wallet.publicKey,
verified: false,
share: 100,
},
],
collection: null,
uses: null,
};
const accounts:UpdateMetadataAccountV2InstructionAccounts = {
metadata: metadatakey,
updateAuthority: wallet.publicKey,
}
const args:UpdateMetadataAccountV2InstructionArgs = {
updateMetadataAccountArgsV2: {
data: updated_data,
updateAuthority: wallet.publicKey,
primarySaleHappened: true,
isMutable: true,
}
}
const updateMetadataAccount = createUpdateMetadataAccountV2Instruction(
accounts,
args
);
const transaction = new anchor.web3.Transaction()
transaction.add(updateMetadataAccount);
const {blockhash} = await connection.getLatestBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = wallet.publicKey;
const signedTx = await wallet.signTransaction(transaction);
const txid = await connection.sendRawTransaction(signedTx.serialize());
console.log("Transaction ID --",txid);
})()
关于solana - 更新 Metaplex NFT 的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69956957/
我很好奇目前是否有任何方法可以在 Solana 程序中创建随机性? 我知道 Solana 使用权益证明机制,这对我来说意味着区块哈希不可靠,因为权益证明机制可以轻松创建新的区块哈希。 我也熟悉 Cha
我是 Solana/web3 的新手,并开始学习如何为 Solana 开发 dApp。在我看来,“账户”本质上只是去中心化“计算机”内存中分配的一 block 空间。 这是否意味着,例如,如果我为竞价
向 Solana NFT 社区寻求帮助! 我有一个托管在 arweave 上的收藏。薄荷是通过糖果机 v2。然而,只类型转换了预期供应量的一半。这在拥有超过最大供应量的 NFT 的持有者中引起了混淆。
在 Anchor 测试中注意到此代码注释: ATA 代表什么?为什么它对于 DAO 控制的机构很重要? 最佳答案 ATA 是关联的 token 地址。 可以使用 findProgramAddress
不推荐使用 confirmTransaction 方法。相反,有一个 sendandconfirmtransaction 方法,但它在连接对象上不可用,所以我不能用于要使用 phantom 签名的交易
在 Anchor 测试中注意到此代码注释: ATA 代表什么?为什么它对于 DAO 控制的机构很重要? 最佳答案 ATA 是关联的 token 地址。 可以使用 findProgramAddress
不推荐使用 confirmTransaction 方法。相反,有一个 sendandconfirmtransaction 方法,但它在连接对象上不可用,所以我不能用于要使用 phantom 签名的交易
Uncaught (in promise) WalletSignTransactionError: Transaction recentBlockhash required at PhantomWal
什么是 Aux 帐户? 我已经创建了自己的 spl-token。我可以用我的主要地址为我自己的帐户类型转换初始供应。我创建了另一个地址并为其创建了 token 帐户: spl-token create
当我尝试部署带有 anchor 的 IDL 时,我收到一条神秘的“自定义错误 0x1004”消息。这是什么意思:? $ anchor idl init --provider.cluster testn
我正在尝试使用 web3.js 和 spl-token.js 创建 NFT。 但是,我需要添加元数据(如 token 名称或其他属性),否则它只会在我的钱包中显示为“未知 token ”。 这是我类型
我在运行: solana airdrop 10 7Fbdg5vecamm8MLxDw7bPN2xENaBE7fP65tKW935BEhq 7Fbdg5vecamm8MLxDw7bPN2xENaBE7f
我来自以太坊环境,Solana 概念有点令人困惑。我找到了各种指导代码步骤的教程,但并没有真正解释逻辑背后的概念。 我知道在 Solana 中我们有程序,它们不包含数据,只是逻辑 - 网络中的可执行实
我正在使用 solana-web3.js但找不到任何关于如何创建和类型转换我自己的代币的示例。最好的方法是什么? 最佳答案 为此,您还需要使用我们的 token 程序 js 绑定(bind)。您可以通
我正在尝试对 Serum DEX V3 发出订单请求: tx.add(market.makeNewOrderV3Instruction( { owner, payer, sid
我正在尝试对 Serum DEX V3 发出订单请求: tx.add(market.makeNewOrderV3Instruction( { owner, payer, sid
我正在尝试通过使用下面这篇文章的公认答案来获得收藏的类型转换版本: How to find all NFTs minted from a v2 candy machine 但是当我尝试查询时,我收到了
运行此命令后出现此错误:./scripts/cargo-install-all.sh。 error: failed to run custom build command for `prost-bui
我正在尝试使用 solana-wallet 适配器传输自定义 SPL token 。但是,我无法获取钱包的 key /签署交易。 我已经查看了这些用于编写传输代码的答案,但我需要获取签名者并且我无法弄
我写了一个Sol程序,但是在初始化的时候,我需要填一些默认地址。 问题 1:我可以使用 Solana 文档中的 Solana 烧录地址:1nc1nerator111111111111111111111
我是一名优秀的程序员,十分优秀!