Solana React TypeError: this.wallet.signTransaction is not a function

Solana React TypeError: this.wallet.signTransaction is not a function

现在我要连接 solana 和 React.js。 我也试过这样弄钱包

import { useConnection, useWallet } from '@solana/wallet-adapter-react';
....
function Header(props) {
 const wallet = useWallet();
    const initialize = async () => {
        const provider = await getProvider()
        const program = new Program(contractJson, programID, provider);
        console.log('program', program)
        try {
            /* interact with the program via rpc */
            await program.rpc.initialize({
                accounts: {
                    myOntology: provider.wallet.publicKey,
                    user: provider.wallet.publicKey,
                    systemProgram: SystemProgram.programId,
                    rent: anchor.web3.SYSVAR_RENT_PUBKEY,
                    clock: anchor.web3.SYSVAR_CLOCK_PUBKEY,
                },
            });
        } catch (err) {
            console.log("Transaction error: ", err);
        }

    }
}

当我调用初始化方法时,出现了这个错误。 类型错误:this.wallet.signTransaction 不是函数 所以我已经记录了钱包和 signTransaction 为空。 enter image description here

我该如何解决这个问题?

您传入程序的提供商需要合并您的钱包

const wallet = useWallet();
const connection = new Connection('<devnet url here>')

const provider = new anchor.Provider(connection, wallet, anchor.Provider.defaultOptions()) 

const program = new Program(contractJson, programID, provider);

您正在使用锚点 rpc 程序方法,因此您需要调用 useAnchorWallet 方法。

import { useAnchorWallet } from "@solana/wallet-adapter-react";

const wallet = useAnchorWallet();

如果您查看 useAnchorWallet 方法,它包含一个需要 Transaction 作为输入的接口:

signTransaction(transaction: Transaction): Promise<Transaction>;

标准钱包适配器具有相同的方法命名空间,但具有不同的接口:

signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;