為什麼我的智能合約功能不被 web3 辨識?
我正在嘗試開發一個新的 Dapp。我已經編寫了智能合約,它們執行良好。我現在需要使用 web3 與智能合約進行互動,現在使用 ropsten 或 rinkeby。
我收到錯誤“未擷取的 TypeError:myCollection.methods.getNumberObjects.call(…) 不是函式”
以下是相關程式碼:
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script> <script language="javascript" type="text/javascript" src="collection_abi.js"></script> window.addEventListener('load', function() { window.ethereum.enable(); // Checking if Web3 has been injected by the browser (Mist/MetaMask) if (typeof web3 !== 'undefined') { // Use MetaMask's provider web3js = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers - Ropesten web3js = new Web3.providers.HttpProvider("http://localhost:3000"); } web3js.eth.defaultAccount = web3js.eth.accounts[0]; // Now start app: startApp() })
…
function startApp() { collectionAddress = '0xaff...' myCollection = new web3js.eth.Contract(collectionABI, collectionAddress); updateCollection(); }
這是我在 Windows 電腦上傳入的內容:
- 紗線精簡版伺服器
- 紗線節點
- 紗線節點gyp
- 紗線網3
- 紗線 web3-eth
這是 package.json:
{“名稱”:“測試”,“版本”:“1.0.0”,“主”:“index.js”,“腳本”:{“開發”:“精簡伺服器”,“測試”:“迴聲” “錯誤:未指定測試”&& 退出 1”},“儲存庫”:“https://github.com/prutovitz/Test.git”,“作者”:“Philip Rutovitz prutovitz@gmail.com”,“許可證” :“MIT”,“依賴項”:{“lite-server”:“^2.6.1”,“node”:“^16.10.0”,“node-gyp”:“^8.2.0”,“web3” : “^1.6.0”, “web3-eth”: “^1.6.0” } }
我得到實際錯誤的地方是:
// Update Collection data function updateCollection() { myCollection.getNumberObjects (function(errGNO, resGNO) {
getNumberObjects 定義為:
function getNumberObjects() public view returns(uint) { return objects.length; } // function getNumberObjects()
儘管我沒有收到錯誤消息,但似乎 web3 連接不正確。
誰能幫我?
謝謝!
據我所見,我在您的程式碼中的任何地方都看不到您實際呼叫該方法的語法。您有契約的實例,
myCollection
但您沒有正確呼叫該函式。而不是這個:function updateCollection() { myCollection.getNumberObjects (function(errGNO, resGNO) {
你可以試試這個:
let collection = myCollection.methods.getNumberObjects().call()
也許看看 react.js 的類組件和功能組件。我認為這比你現在擁有的方法更好。這是一個提出想法的連結:https ://www.pluralsight.com/guides/manipulating-arrays-and-objects-in-state-with-react