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 交易)的主要内容,如果未能解决你的问题,请参考以下文章

解析 testcafe 打字稿测试中的模块

用玩笑测试打字稿中的私有函数

模型中的打字稿方法给出错误“不是函数”[重复]

使用笑话模拟时的打字稿错误

绑定和返回函数中的“this”上下文中的打字稿错误

如何访问打字稿中的字段验证错误?