Solana 链中的打字稿错误。 (测试网中的 Solana 交易)
Posted
技术标签:
【中文标题】Solana 链中的打字稿错误。 (测试网中的 Solana 交易)【英文标题】:Typescript error in the Solana chain. (Solana transaction in testnet) 【发布时间】:2021-11-10 08:32:07 【问题描述】:我正在尝试使用 Typescript & react 制作 Solana NFT 交易代码。
仅在 Typescript 中运行此代码时,它可以正常工作。
但在反应中,会发生错误。
import Keypair ,Connection, Transaction, sendAndConfirmTransaction, PublicKey from "@solana/web3.js";
import Wallet from "@project-serum/sol-wallet-adapter";
import Token, TOKEN_PROGRAM_ID from"@solana/spl-token"
const Solana = new Connection("https://api.testnet.solana.com/","confirmed")
import EventEmitter from eventemitter3
interface WalletAdapter extends EventEmitter
publicKey: PublicKey | null;
signTransaction: (transaction: Transaction) => Promise<Transaction>;
connect: () => any;
disconnect: () => any;
const wallet: WalletAdapter = new Wallet("https://www.sollet.io", "https://api.testnet.solana.com/");
const letsNftTrans = async () =>
const DEMO_FROM_SECRET_KEY = new Uint8Array([
223, 119, 171, 5, 237, 138, 42, 140, 176, 163, 74,
107, 25, 143, 90, 97, 250, 158, 203, 102, 238, 19,
77, 228, 211, 238, 147, 149, 40, 50, 211, 155, 51,
207, 14, 53, 86, 230, 164, 27, 14, 202, 78, 181,
185, 250, 16, 52, 134, 242, 96, 16, 12, 67, 2,
178, 106, 241, 156, 212, 11, 150, 114, 72]);
const DEMO_Keypair = Keypair.fromSecretKey(DEMO_FROM_SECRET_KEY)
let mint;
let myToken;
let toTokenAccount;
mint = await Token.createMint(Solana, DEMO_Keypair, DEMO_Keypair.publicKey, null, 9, TOKEN_PROGRAM_ID)
myToken = await mint.getOrCreateAssociatedAccountInfo(DEMO_Keypair.publicKey)
setTimeout(async function ()
mint = await Token.createMint(Solana, DEMO_Keypair, DEMO_Keypair.publicKey, null, 9, TOKEN_PROGRAM_ID)
console.log('mint public address: ' + mint.publicKey.toBase58());
myToken = await mint.getOrCreateAssociatedAccountInfo(DEMO_Keypair.publicKey)
toTokenAccount = await mint.getOrCreateAssociatedAccountInfo(wallet?.publicKey!)
mint.mintTo(myToken.address, DEMO_Keypair.publicKey,[], 1000000000);
await mint.setAuthority(mint.publicKey, null, "MintTokens", DEMO_Keypair.publicKey, [])
const mintTransaction = new Transaction().add(Token.createTransferInstruction(
TOKEN_PROGRAM_ID,
myToken.address,
toTokenAccount.address,
DEMO_Keypair.publicKey,
[],
1000000000
)
)
const signature = await sendAndConfirmTransaction(
Solana,
mintTransaction,
[DEMO_Keypair],
commitment:"confirmed"
)
console.log('SIGNATURE', signature)
, 20000)
这是发生错误的地方。
console.log('token public address : '+ myToken.address.toBase58());
toTokenAccount = await mint.getOrCreateAssociatedAccountInfo(wallet?.publicKey!)
console.log('ToTokenAccount :'+toTokenAccount)
这是从 Chrome 控制台窗口输出的错误消息。
浏览器 js:47 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'digest')
此外,它在本地和网络环境中的工作方式也不同。 本地:http://localhost:port => 没有错误。 在您的网络上:http://xxx.xxx.xx.xx:port // 错误。
我该如何解决这个问题?
【问题讨论】:
这里似乎缺少一些上下文。错误是围绕一个尚未在其他地方声明的wallet
变量。也许钱包在测试网上不可用,但在你的本地网络上有足够的资金。
谢谢,我已经处理了丢失的部分。 :D
【参考方案1】:
您的wallet
似乎尚未连接,这就是它没有关联publicKey
的原因。
一定要连接钱包才能真正加载一些东西!这是要调用的重要函数,在 sol-wallet-adapter
示例中:https://github.com/project-serum/sol-wallet-adapter/blob/be3fb1414425dc8ae64d67599d677f9acc09fe4c/example/src/App.tsx#L57
【讨论】:
以上是关于Solana 链中的打字稿错误。 (测试网中的 Solana 交易)的主要内容,如果未能解决你的问题,请参考以下文章