So sehen Sie den bereitgestellten „StandardToken“-Vertragsinhaber mit der Truffle-Konsole

Ich habe einen Testrpc-Vertrag mit ERC20-Token bereitgestellt, der folgenden Konstruktor hat:

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;
    }
}

Soweit ich weiß, wird der Vertrag vom 0. testrpc-Konto bereitgestellt. Allerdings, wenn ich es tue

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

Es zeigt an

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

Das Konto scheint also kein Guthaben zu haben. Ich kann auch das Guthaben auf der Registerkarte "Token" der Metamaske nicht sehen. Anscheinend wurde eine andere Adresse zum Erstellen des Kontos verwendet. Ich kann jedoch keine Funktion finden, um zu sehen, wer der Vertragsersteller ist (wer war msg.sender).

Ist es in der Truffle-Konsole möglich zu sehen, wer ein Vertragsersteller ist?

Aktualisieren

Das Problem mit dem Gleichgewicht war auf den Tippfehler zurückzuführen: Konstruktorname war TotorialTokenanstelle von TutorialToken.

Die ursprüngliche Frage bleibt jedoch bestehen: Wie druckt man Vertragsinhaber?

Update Nr. 2

Um den Vertragsinhaber tatsächlich zu sehen, kann ich so etwas tun (danke pabloruiz55 für den Vorschlag):

address owner;

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

Das funktioniert. StandardTokenIch denke, meine Frage ist dann anders: Enthält das OpenZeppelin- ownerFeld, auf das zugegriffen werden kann?

Antworten (3)

Der einfachste Weg wäre, den Eigentümer/Ersteller des Vertrags bei der Bereitstellung in einer Zustandsvariablen zu speichern.

pragma solidity ^0.4.8;
contract myContract  {

    address public owner;

    function myContract() {
        owner = msg.sender;
    }
}
Danke für den Vorschlag. Ich habe herausgefunden, dass meine Frage etwas anders ist, und die Frage aktualisiert.

Inspektion von StandardToken, gezeigt in der folgenden Vererbungshierarchie:

  ERC20Basic
   /      \
ERC20  BasicToken
   \      /
 StandardToken

Mit folgenden Feldern in jedem Vertrag:

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

ERC20:
    none

BasicToken: 
    mapping(address => uint256) balances

ERC20Basic:
    uint totalSupply

Um ownereinen Eigentumsvertrag zu haben, sollte der Besitzvertrag verlängert werden ( danke Ismael für den Tipp):

contract TutorialToken is StandardToken, Ownable {
   ...
}
Aber es sollte möglich sein, importieren Sie 'zeppelin-solidity/contracts/ownership/Ownable.sol' an den Anfang der Datei und fügen Sie dann Ownable zur Klasse inheritance hinzu contract TutorialToken is StandardToken, Ownable {.

Dies funktionierte von mir aus der Entwicklungskonsole:

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