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