如何修复错误 error: sending a transaction requires a signer (operation="sendtransaction", code=unsupported_operation, version=contracts/5.5.0)
这对初学Web 3的开发者来说是一个相当普遍的问题。
sending a transaction requires a signer (operation="sendtransaction", code=unsupported_operation, version=contracts/5.5.0)
在与以太坊区块链上的智能合约互动时,可以在不使用Gas的情况下进行读取操作,为此,我们不需要签署交易。
另一方面,当你想调用一个需要改变区块链状态的智能合约方法时,例如存储或修改一些数据,一般需要向网络支付ETH的费用。
为了支付费用,你需要用你连接的钱包的密钥(例如:MetaMask)签署交易。
我们需要这样来创建我们的 provider
provider = new ethers.providers.Web3Provider(window.ethereum)
然后像这样实例化智能合约。
contract = new ethers.Contract(address, abi, provider)
现在可以用这一行来获得签名者。
signer = provider.getSigner()
通过这种方式将签字人与 Contract
连接起来。
contractWithSigner = contract.connect(signer)
接下来要使用智能合约的方法的时候,可以用 contractWithSigner
来代替 contract
。
现在应该就能解决如题的错误了
区块链子分类