Как увидеть развернутого владельца контракта «StandardToken» с помощью консоли truffle

Я развернул контракт testrpc с токеном ERC20, который имеет следующий конструктор:

pragma solidity ^0.4.4;
import 'zeppelin-solidity/contracts/token/StandardToken.sol';

contract TutorialToken is StandardToken {
    string public name = 'TutorialToken';
    string public symbol = 'TT';
    uint public decimals = 2;
    uint public INITIAL_SUPPLY = 12000;

    function TotorialToken() {
        totalSupply = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
    }
}

Насколько я понимаю, контракт будет развернут 0-й учетной записью testrpc. Однако, когда я делаю

TutorialToken.deployed().then(c => c.balanceOf('<0th account addr>').then(b => console.log(b)))

Он отображает

{ [String: '0'] s: 1, e: 0, c: [ 0 ] }

Получается, что на счету нет баланса. Я также не вижу баланс на вкладке «Токен» метамаски. Похоже, для создания учетной записи использовался какой-то другой адрес. Однако я не могу найти какую-либо функцию, чтобы увидеть, кто является создателем контракта (кто был msg.sender).

Можно ли в консоли трюфеля увидеть, кто является создателем контракта?

Обновлять

Проблема с балансом была из-за опечатки: имя конструктора было TotorialTokenвместо TutorialToken.

Однако первоначальный вопрос остается в силе: как напечатать владельца контракта?

Обновление №2

Чтобы увидеть владельца контракта, я могу сделать что-то вроде этого (спасибо pabloruiz55 за предложение):

address owner;

function TutorialToken() {
    owner = msg.sender;
    ...
}

Это работает. Итак, я думаю, мой вопрос в другом: StandardTokenсодержит ли OpenZeppelin ownerполе, к которому можно получить доступ?

Ответы (3)

Самый простой способ — сохранить владельца/создателя контракта в переменной состояния при развертывании.

pragma solidity ^0.4.8;
contract myContract  {

    address public owner;

    function myContract() {
        owner = msg.sender;
    }
}
Спасибо за предложение. Я узнал, что мой вопрос немного отличается, обновил вопрос.

Проверка StandardToken показала следующую иерархию наследования:

  ERC20Basic
   /      \
ERC20  BasicToken
   \      /
 StandardToken

Со следующими полями в каждом договоре:

StandardToken:
    mapping (address => mapping (address => uint256)) allowed

ERC20:
    none

BasicToken: 
    mapping(address => uint256) balances

ERC20Basic:
    uint totalSupply

Для того, чтобы иметь ownerимущественный контракт, необходимо расширить имущественный контракт (спасибо Ismael за подсказку):

contract TutorialToken is StandardToken, Ownable {
   ...
}
Но это должно быть возможно, добавьте import 'zeppelin-solidity/contracts/ownership/Ownable.sol' в начало файла, а затем добавьте Ownable в наследование класса contract TutorialToken is StandardToken, Ownable {.

Это сработало у меня из консоли разработки:

x = TutorialToken.deployed() x.then( i => i.owner().then(console.log))