reactjs - Solana React TypeError:this.wallet.signTransaction 不是函数
问题描述
现在我要连接 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 为空。 在此处输入图像描述
我怎么解决这个问题?
解决方案
您正在使用锚 rpc 程序方法,因此您需要调用该useAnchorWallet
方法。
import { useAnchorWallet } from "@solana/wallet-adapter-react";
const wallet = useAnchorWallet();
如果您查看该useAnchorWallet
方法,它包含一个期望 aTransaction
作为输入的接口:
signTransaction(transaction: Transaction): Promise<Transaction>;
标准钱包适配器具有相同的方法命名空间,但具有不同的接口:
signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;
推荐阅读
- azure-devops - Azure DevOps 是否支持 API 来查询托管在 Azure Devops 中的 git repo?
- javascript - 单击后如何替换组件并传递先前的数据?
- angularjs - 通过模板加载html时未注册名称的控制器
- javascript - 从网络下载时捷克字符的编码是什么
- node.js - JSONB 限制:类型字符变化的值太长(255)续集错误
- javascript - 简化重复的标签值 jQuery / Javascript
- vue.js - Nuxt.js 错误:客户端渲染的虚拟 DOM 树与服务器渲染的内容不匹配
- json - com.google.apps.appmaker.shared.json.JsonException:JSON 不是对象
- vb.net - 点击时以 pdf 格式显示 iTextSharp 字母
- python - 无法从 openweathermap 获取天气图标