Parity
如何獲得solidity函式返回
我有一份叫做跟踪的契約。它有一個名為 move() 的函式,我使用程式碼呼叫了這個函式:
import {bonds} from 'oo7-parity'; const counterABI = [...] const ContractAddress = '...' constructor() { super() this.counter = bonds.makeContract(ContractAddress, counterABI) } /*hidden code*/ this.counter.move(data, this.state.caminho[this.state.caminho.length - 1], id)
此函式 move() 返回真或假。但是我怎樣才能訪問這個返回值呢?
我嘗試了以下方法:
let res = this.counter.move(data, this.state.caminho[this.state.caminho.length - 1], id) console.log(res)
但是是行不通的。這只是列印一個巨大的 json,我不知道返回值在哪裡(真或假)
您可能希望使用事件來執行此操作。因此,在您的契約中,您將在契約頂部添加類似這樣的內容。
event Minted(uint256 amount, uint256 totalCost);
在您的方法中,您將發出如下事件:
function mint(uint256 numTokens) public payable { uint256 priceForTokens = priceToMint(numTokens); require(msg.value >= priceForTokens); totalSupply = totalSupply.add(numTokens); balances[msg.sender] = balances[msg.sender].add(numTokens); poolBalance = poolBalance.add(priceForTokens); if (msg.value > priceForTokens) { msg.sender.transfer(msg.value - priceForTokens); } emit Minted(numTokens, priceForTokens); }
然後在您的 Node.js 程式碼中,您可以使用 .getPastEvents() 方法遍歷事件:
await EthPolynomialCurveToken.getPastEvents(['Minted', 'Burned'], {fromBlock: blockNum, toBlock: 'latest'}, async (err, events) => { for(var i = 0; i < events.length(); i++){ // Something like tokensMinted = events[i].returnValues.amount; } })
如果您想要最近的事件,您可以執行以下操作:
events[events.length()].returnValues.amount