есть ли разница между звонком из контракта и web3js?

В чем разница между звонком с контракта и web3. Я рассматривал пример, и в комментариях было упомянуто, что нельзя звонить из контракта. Разве звонки с контракта и веб3 не должны быть одинаково дорогими?

   This method MUST NEVER be called by smart contract code. First, it's 
     fairly
    ///  expensive (it walks the entire Persons array looking for persons 
    belonging to owner),
         ///  but it also returns a dynamic array, which is only supported 
       for web3 calls, and
     ///  not contract-to-contract calls.
  function tokensOfOwner(address _owner) public view returns(uint256[] 
     ownerTokens) {
uint256 tokenCount = balanceOf(_owner);
if (tokenCount == 0) {
    // Return an empty array
  return new uint256[](0);
} else {
  uint256[] memory result = new uint256[](tokenCount);
  uint256 totalPersons = totalSupply();
  uint256 resultIndex = 0;

  uint256 personId;
  for (personId = 0; personId <= totalPersons; personId++) {
    if (personIndexToOwner[personId] == _owner) {
      result[resultIndex] = personId;
      resultIndex++;
    }
  }
  return result;
}
}

Ответы (1)

Когда вы вызываете функцию только для чтения из web3js, этот вызов не потребляет газа.

Когда та же самая функция только для чтения вызывается методом смарт-контракта, выполняемым ethereum vm, это стоит газа.