繁体   English   中英

未捕获(承诺中)错误:发送交易需要签名者

[英]Uncaught (in promise) Error: sending a transaction requires a signer

嘿我收到这个错误

                                      `Uncaught (in promise) Error: sending a transaction requires a signer (operation="sendTransaction", code=UNSUPPORTED_OPERATION, version=contracts/5.2.0)
at Logger.makeError (ethers-5.2.umd.min.js:1:59669)
at Logger.throwError (ethers-5.2.umd.min.js:1:59874)
at Contract.<anonymous> (ethers-5.2.umd.min.js:1:312289)
at step (ethers-5.2.umd.min.js:1:305047)
at Object.next (ethers-5.2.umd.min.js:1:304307)
at ethers-5.2.umd.min.js:1:303953
at new Promise (<anonymous>)
at __awaiter (ethers-5.2.umd.min.js:1:303591)
at Contract.<anonymous> (ethers-5.2.umd.min.js:1:312138)
at vote (index.html:338:34)`

在这段代码上

function vote(){ provider = new ethers.providers.Web3Provider(window.ethereum); signer = provider.getSigner(0); const contract = new ethers.Contract("0xF1bFB2277C269DC90D8726DDf60A680aeffA2AbF", abi, provider); console.log("workin"); var propval = document.getElementById("select").value; var castvote = contract.vote(propval); castvote.then(function(){ document.getElementById("mp").innerHTML = transaction; }) }

任何人请帮我解决这个问题

在 ethers.js 中,提供者允许您从区块链中查询数据。 它们代表了您连接到区块链的方式。 使用它们,您只能调用合约的视图方法并从这些合约中获取数据。

签名者是提供者,但可以访问以太坊帐户。 因此,他们可以签署修改区块链 state 的交易(您在区块链上存储或更改信息的交易)。

当你实例化你的合约时,你传递的是提供者而不是签名者。 所以,在这个合约上,你应该只能调用视图方法。 因为投票方法修改了区块链上的 state,所以你得到了你得到的错误。

要解决此问题,您需要做的唯一更改是在合同实例中传递签名者而不是提供者:

const contract = new ethers.Contract("0xF1bFB2277C269DC90D8726DDf60A680aeffA2AbF", abi, signer);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM