TypeError: x.p pubkey.toBase58不是一个函数



我使用@solana/spl-token库来创建和铸造令牌。createMint()函数抛出错误。

TypeError: x.pubkey.toBase58 is not a function
at /home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:1565:23
at Array.sort (<anonymous>)
at Transaction.compileMessage (/home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:1553:17)
at Transaction._compile (/home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:1660:26)
at Transaction.sign (/home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:1765:26)
at Connection.sendTransaction (/home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:6734:21)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async sendAndConfirmTransaction (/home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+web3.js@1.66.2/node_modules/@solana/web3.js/lib/index.cjs.js:2219:21)
at async mintTo (file:///home/denimcodes/Projects/solpay/node_modules/.pnpm/@solana+spl-token@0.3.6_@solana+web3.js@1.66.2/node_modules/@solana/spl-token/lib/esm/actions/mintTo.js:23:12)
at async file:///home/denimcodes/Projects/solpay/main.mjs:40:1

这里我张贴了完整的代码

import {
getOrCreateAssociatedTokenAccount,
mintTo,
getAccount,
getMint,
createMint,
} from "@solana/spl-token";
import {
Keypair,
Connection,
clusterApiUrl,
LAMPORTS_PER_SOL,
} from "@solana/web3.js";
const payer = Keypair.generate();
const mintAuthority = payer;
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
const airdropSignature = await connection.requestAirdrop(
payer.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(airdropSignature);
const mint = await createMint(
connection,
payer,
mintAuthority.publicKey,
mintAuthority.publicKey,
9
);
const tokenAccount = await getOrCreateAssociatedTokenAccount(
connection,
payer,
mint,
mintAuthority.publicKey
);
await mintTo(
connection,
payer,
mint,
tokenAccount,
mintAuthority,
100 * (10 ^ 9)
);
const mintInfo = await getMint(connection, mint);
console.log(`Mint supply: ${mintInfo.supply}`);
const tokenAccountInfo = await getAccount(connection, tokenAccount);
console.log(`Token account amount: ${tokenAccountInfo.amount}`);

x.pubkey。toBase58不是函数通常在传递给指令的PublicKey(作为参数,例如mintTo)不是实际的PublicKey或者是错误的PublicKey(如@solana/web3.js中定义的)时抛出。

在本例中,您将getOrCreateAssociatedTokenAccount的响应传递给mintTo调用,如下所示:

const **tokenAccount** = await *getOrCreateAssociatedTokenAccount*(
connection,
payer,
mint,
mintAuthority.publicKey
);
await mintTo(
connection,
payer,
mint,
**tokenAccount**,
mintAuthority,
100 * (10 ^ 9)
);

你的问题是,从getOrCreateAssociatedTokenAccount的响应不只是返回一个PublicKey,而是一个帐户。因此,令牌帐户是一个无效的PublicKey对象。

要解决这个问题,只需要取消对令牌帐户地址的引用,如下所示

const **tokenAccount** = await *getOrCreateAssociatedTokenAccount*(
connection,
payer,
mint,
mintAuthority.publicKey
);
await mintTo(
connection,
payer,
mint,
**tokenAccount.address**,
mintAuthority,
100 * (10 ^ 9)
);

祝你的索拉纳之旅好运:)如果你想要一个额外的挑战,创建一个包含所有这些指令的单一交易,以便它自动完成(创建薄荷账户,创建令牌账户,并将令牌铸造在一起)。您应该能够在提供的链接上找到该信息。

最新更新