Web3js
在 React.js 中,如何從智能合約方法中獲取返回數據,包括事件和發射?
我有智能合約伺服器功能,該功能包括發射和事件。
event TokenMinted( address indexed _recipient, uint256 indexed _tokenId ); function mintToken(address to, address[] memory bundle) public { // Mint new token uint256 tokenId = _tokenIdCounter.current(); ......... // Emit TokenMinted event emit TokenMinted(to, tokenId); // Increase the token counter _tokenIdCounter.increment(); }
不是我要呼叫這個函式,希望得到tokenId。
但是在我的 React 前端程式碼中,我找不到獲取 tokenId 的方法。
export const mintToken = async (contract, to, address) => { let tokenId = await contract.mintToken(to, address); console.log('contracts', contract) // console.log('contract.events', contract.filters.TokenMinted()) //get the latest blocknumber return tokenId; }
合約是這樣生成的。
new ethers.Contract(ROCI_MINTER_ADDR, ROCI_MINTER_ABI, library.getSigner());
我怎樣才能正確獲得這個值?感謝關注。
那既不是 a
view
也不是pure
函式,因此您可能正在尋找類似的東西(請查看此處的文件):let tx = await contract.mintToken(to, address).send({from: '0x123123123123'}); let events = tx.receipt.events console.log(events)
最新的文件說要執行以下操作:
contract.events.TokenMinted().on('data', this.contractEventHandler )
這取決於您擁有的 web3 版本。這是文件。https://web3js.readthedocs.io/en/v1.5.2/web3-eth-contract.html#id50
筆記; 當我嘗試在 contractEventHandler 中本地複制和操作反應狀態變數時遇到錯誤,但是,執行以下操作對我有用
setState({tokens:[...this.state.tokens,token]});