簡體   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