2

现在我要连接 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);
        }

    }
}

当我调用初始化方法时,我得到了这个错误。 TypeError:this.wallet.signTransaction 不是函数 所以我已经记录了钱包并且signTransaction 为空。 在此处输入图像描述

我怎么解决这个问题?

4

2 回答 2

1

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

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

const wallet = useAnchorWallet();

如果您查看该useAnchorWallet方法,它包含一个期望 aTransaction作为输入的接口:

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

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

signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;
于 2021-11-18T07:41:41.077 回答
1

您传递到程序中的提供商需要合并您的钱包

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);
于 2021-09-22T11:06:18.460 回答