Solidity

當你從 Javascript 測試中呼叫 solidity 函式時,你應該使用 call()

  • June 25, 2021

假設我的可靠性程式碼是

contract MetaCoin {

uint256 public balance = 0;

function getBalance() public view returns(uint) {
   return balance
  }

}

假設我想在我的 javascript 測試中呼叫 getBalance 函式;我有兩種方法可以做到

const MetaCoin = artifacts.require("MetaCoin");
const metaCoinInstance = await MetaCoin.deployed();
// Way 1 using call
const metaCoinBalance = (await metaCoinInstance.getBalance.call()).toNumber();
// Way 2 without using call
const metaCoinBalance = (await metaCoinInstance.getBalance()).toNumber();

哪種方式更好,兩種呼叫方式有什麼區別?

我會說這主要是一種偏好,但我會選擇這個.call(...)版本。效果完全相同,但.call(...)版本清楚地向讀者表明這是一個不修改狀態的常量方法呼叫,而您將使用它.send(...)來呼叫一個確實修改狀態的非常量方法。

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