Web3js
如何在 DAPP 中呼叫智能合約功能?
我正在嘗試製作 DAPP。
我跟著這個連結 -
這就是我的“Setup.js”的外觀。
import Web3 from 'web3'; const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); const marketplaceContract = new web3.eth.Contract( ABI , 'Smart Contract Address', { from: '0x123....', // default from address gasPrice: '20000000000' // default gas price in wei, 20 gwei in this case }); //const marketplaceContract = web3.eth.contract(MarketABI).at(MarketAddress); export { marketplaceContract };
如您所見,我正在導入名為“marketplaceContract”的智能合約。
當我使用智能合約呼叫一個函式時 -
marketplaceContract.addGoods(name, user, age, brand, size, sp);
我得到的輸出為
TypeError: _Setup__WEBPACK_IMPORTED_MODULE_5__.marketplaceContract.addAccounts is not a function
雖然, addAccounts 是一個函式。
不知道是不是web3版本的問題。請幫助。還有其他方法可以呼叫我的 React-JS 文件中的函式嗎?
PS - 我不知道我是否必須把整個程式碼放在這裡。如果需要,請告訴我,我會將智能合約和 React 文件都放在這裡。我沒有放它,因為它很大。請不要開始鄙視我。
編輯
當我有一個
.call()
功能時,它執行良好。但是當我有一個在區塊鏈中以結構數據類型儲存一些數據的函式時,它就不起作用了。我用於.send({from: accounts[0]})
那個功能。然後錯誤彈出未處理的拒絕(TypeError):無法讀取未定義的屬性“匹配”
我搜尋了這個錯誤。我刪除了我的 package-lock.json 文件和 node_modules,然後安裝了 npm。不過,我得到了同樣的錯誤。我應該如何進行?
請檢查https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#id10。您必須將 .methods 添加到您的合約實例中,然後呼叫智能合約方法。
getMinABI: function () { return [ { "constant": true, "inputs": [{"name": "_owner", "type": "address"}], "name": "balanceOf", "outputs": [{"name": "balance", "type": "uint256"}], "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [{"name": "", "type": "uint8"}], "type": "function" }, { "constant": false, "inputs": [{"name": "_to", "type": "address"}, {"name": "_value", "type": "uint256"}], "name": "transfer", "outputs": [{"name": "success", "type": "bool"}], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]; } let contract = new Web3.eth.Contract(this.getMinABI(), 'contract address', { from: 'your address' }); contract.methods.balanceOf('your address').call().then((balance) => { console.log(balance) });
希望對你有幫助