Parity

如何獲得solidity函式返回

  • June 11, 2018

我有一份叫做跟踪的契約。它有一個名為 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

引用自:https://ethereum.stackexchange.com/questions/50983