如何修复错误 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

现在应该就能解决如题的错误了

区块链子分类