我正在尝试在 Solana 网络上创建代币,但有一个问题。 我安装了 @metaplex-foundation/mpl-token-metadata 并将其导入到我的代码中,但它给了我一个错误
错误:
Property 'PROGRAM_ID' does not exist on type 'typeof import("d:/Documents/VSC_Files/Token/node_modules/@metaplex-foundation/mpl-token-metadata/dist/src/index")'.
这是代码:
import * as mpl from "@metaplex-foundation/mpl-token-metadata";
import * as web3 from "@solana/web3.js"
import * as anchor from '@project-serum/anchor'
export function loadWalletKey(keypairFile: string): web3.Keypair {
const fs = require("fs");
const loaded = web3.Keypair.fromSecretKey(
new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())),
);
return loaded;
}
async function main() {
console.log("Let's name some tokens");
const myKeypair = loadWalletKey("AfkbuWt6YuU7xLzUz2M5rBRVpqBcCutyH9895v9YxU6w.json")
console.log(myKeypair.publicKey.toBase58())
const mint = new web3.PublicKey("EcUBmCbntM3SniLH54B92TdqR3JexjbW57y8jXmmugxC.json")
const seed1 = Buffer.from(anchor.utils.bytes.utf8.encode("metadata"));
const seed2 = Buffer.from(mpl.PROGRAM_ID.toBytes());
const seed3 = Buffer.from(mint.toBytes());
const [metadataPDA, _bump] = web3.PublicKey.findProgramAddressSync([seed1, seed2, seed3], mpl.PROGRAM_ID);
const accounts = {
metadata: metadataPDA,
mint,
mintAuthority: myKeypair.publicKey,
payer: myKeypair.publicKey,
updateAuthority: myKeypair.publicKey,
}
const dataV2 = {
name: "Echo Token",
symbol: "ECHO",
uri: "https://indigo-efficient-sparrow-269.mypinata.cloud/ipfs/QmbQBemXZBS7Uvhd2LdHauBoZimqmy8vDDKCohAnEx49k6?_gl=1*16nlwuc*_ga*MTI0NzMwNTIwMy4xNzA0MzE5OTIx*_ga_5RMPXG14TE*MTcwNDMxOTkyMi4xLjEuMTcwNDMyMDk0MS42MC4wLjA.",
sellerFeeBasisPoints: 0,
creators: null,
collection: null,
uses: null
}
const args = {
createMetadataAccountArgsV2: {
data: dataV2,
isMutable: true
}
};
const ix = mpl.createCreateMetadataAccountV2Instruction(accounts, args);
const tx = new web3.Transaction();
tx.add(ix);
const connection = new web3.Connection("https://api.devnet.solana.com");
const txid = await web3.sendAndConfirmTransaction(connection, tx, [myKeypair]);
console.log(txid);
}
main()
我尝试安装metaplex js和metaplex umi并导入它们,但没有帮助。
首先请注意,最新的
@metaplex-foundation/mpl-token-metadata
包依赖于 umi,所以你将无法使用 web3js publickey
类型,但需要 umi publickey
类型。
您可能还想使用 mpl-token-metadata 辅助方法,而不是直接调用指令
createV1
:
await createFungible(umi, {
mint,
name: 'Echo Token',
symbol: 'ECHO',
uri: 'https://indigo-efficient-sparrow-269.mypinata.cloud/ipfs/QmbQBemXZBS7Uvhd2LdHauBoZimqmy8vDDKCohAnEx49k6?_gl=1*16nlwuc*_ga*MTI0NzMwNTIwMy4xNzA0MzE5OTIx*_ga_5RMPXG14TE*MTcwNDMxOTkyMi4xLjEuMTcwNDMyMDk0MS42MC4wLjA.',
sellerFeeBasisPoints: percentAmount(0),
}).sendAndConfirm(umi)
(https://developers.metaplex.com/token-metadata/mint#creating-accounts)
如果您实际上只是在寻找令牌元数据程序 ID
@metaplex-foundation/mpl-token-metadata
,则将其设置为 MPL_TOKEN_METADATA_PROGRAM_ID
(https://mpl-token-metadata-js-docs.vercel.app/functions/getMplTokenMetadataProgramId.html)