Работа с трюфелем

Ниже приведен мой код в солидности

pragma solidity ^0.4.2;

contract DappToken {
  //Constructor
  // set no of Tokens
  // Read the total number of Tokens
  uint256 public totalSupply;

  function DappToken () public {
    totalSupply = 10000000;
  }
}

Теперь я собираюсь взаимодействовать с Truffle 1) Я выполнил миграцию Truffle

2) В консоли Truffle я использовал DappToken.deployed().then(function(i) {token = i;})

3)deployed() возвращает обещание, а затем перезванивает (поправьте меня, если я ошибаюсь)

4) Далее я использовал

 token.totalSupply 
{ [Function]
  call: [Function],
  sendTransaction: [Function],
  request: [Function: bound ],
  estimateGas: [Function] }

// Он показывает следующий вывод

totalSupply - это имя переменной, которую я дал, но она показывает функцию в квадратных скобках. Может ли кто-нибудь объяснить, как трюфель компилируется внутри и почему он показывает меня как функцию, которую я пробовал token.DappToken.totalSupply , это показывает мне ошибку, я думал он войдет внутрь контракта и вызовет переменную

Ответы (2)

Solidity не предоставляет переменные напрямую, но создает общедоступную функцию получения.

Ваш пример будет вести себя так.

contract DappToken {
  uint256 public _totalSupply;

  function DappToken () public {
    _totalSupply = 10000000;
  }
  function totalSupply() public view returns (uint256) {
    return _totalSupply;
  }
}

Чтобы получить общий запас, вы должны сделать вызов, как обычную функцию.

token.totalSupply().then((result) => { console.log(result); } )

Вот документация . Я думаю, вам нужно вызвать token.totalSupplyвнутри then(), как в примере ниже:

var account_one = "0x1234..."; // an address

var meta;
MetaCoin.deployed().then(function(instance) {
  meta = instance;
  return meta.getBalance.call(account_one, {from: account_one});
}).then(function(balance) {
  // If this callback is called, the call was successfully executed.
  // Note that this returns immediately without any waiting.
  // Let's print the return value.
  console.log(balance.toNumber());
}).catch(function(e) {
  // There was an error! Handle it.
})