0

我正在尝试发送 1 个 solana

我有这个代码

但它会抛出一个错误: Uncaught (in promise) TypeError: y.pubkey.toBase58 is not a function at transaction.ts:264:33

帮助解决这个错误

async function connectWallet() {

    let provider = null

    if ("solana" in window) {
        provider = window.solana;
        if (provider.isPhantom) {
            console.log('provider', provider)
        }
    } else {
        window.open("https://phantom.app/", "_blank");
    }

    publicKey = null

    if (provider != null) {
        try {
            const resp = await window.solana.connect();
            publicKey = resp.publicKey.toString();

        } catch (err) {
            // { code: 4001, message: 'User rejected the request.' }
            console.log(err)
        }
    }

    if (publicKey != null) {
        const message = `Sign below to authenticate`;
        const encodedMessage = new TextEncoder().encode(message);
        const signedMessage = await window.solana.request({
            method: "signMessage",
            params: {
                message: encodedMessage,
                display: "utf-8",
            },
        });

        var recieverWallet = new solanaWeb3.PublicKey("4iSD5Q6AnyhRHu6Uz4u1KAzXh3TwNwwQshEGhZbEXUTw");


        const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl("mainnet-beta"));

        var transaction = new solanaWeb3.Transaction().add(
            solanaWeb3.SystemProgram.transfer({
              fromPubkey: publicKey,
              toPubkey: recieverWallet,
              lamports: solanaWeb3.LAMPORTS_PER_SOL
            }),
        );              

        transaction.feePayer = publicKey;
        let blockhashObj = await connection.getRecentBlockhash();
        transaction.recentBlockhash = await blockhashObj.blockhash;

        if(transaction) {
          console.log("Txn created successfully");
        }                

        let signed = await provider.signTransaction(transaction);
        let signature = await connection.sendRawTransaction(signed.serialize());
        await connection.confirmTransaction(signature);
    }
}

我认为问题出在这一行 let signed = await provider.signTransaction(transaction);

4

1 回答 1

2

The problem is that your publicKey variable is a string and not a PublicKey, so when trying to compile your transaction, the compilation fails with the TypeError: y.pubkey.toBase58 is not a function at transaction.ts:264:33.

Instead, you can do:

publicKey = resp.publicKey;

于 2022-02-23T20:26:13.667 回答