Contract-Invocation
我看不到獲取非視圖函式的返回值的方法(ethers.js)
在 Buidler 測試中,我有:
const { expect } = require("chai"); describe("SumOfTokens", function() { it("Checks correct transfers", async function() { const SumOfTokens = await ethers.getContractFactory("SumOfTokens"); const sumOfTokens = await SumOfTokens.deploy(); await sumOfTokens.deployed(); console.log(await sumOfTokens.newToken()); }); });
1
它列印了一些廢話,而不是外部非視圖函式的返回值(應該是)newToken
。如何獲取
newToken
其呼叫後的返回值?
非常量(既不是
pure
也不是view
)函式的返回值只有在函式被鏈上呼叫時才可用(即,從這個合約或從另一個合約)。當您從鏈下(例如,從 ethers.js 腳本)呼叫此類函式時,您需要在交易中執行它,並且返回值是該交易的雜湊值。
這是因為不知道交易何時會被探勘並添加到區塊鏈中。
此外,即使將交易添加到區塊鏈中,也可以稍後將其從區塊鏈中刪除。
它在區塊鏈上停留的時間越長,它在未來被移除的可能性就越小。
在假設它將永遠保留在區塊鏈中之前,習慣於確認 12 個塊。
為了在從鏈下呼叫非常量函式時獲得它的返回值,您可以發出一個包含您將要返回的值的事件。
然後,您可以在交易收據中獲得此事件的內容,您可以通過交易雜湊獲得該收據。