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?
Das Problem mit dem Gleichgewicht war auf den Tippfehler zurückzuführen: Konstruktorname war TotorialToken
anstelle von TutorialToken
.
Die ursprüngliche Frage bleibt jedoch bestehen: Wie druckt man Vertragsinhaber?
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. StandardToken
Ich denke, meine Frage ist dann anders: Enthält das OpenZeppelin- owner
Feld, auf das zugegriffen werden kann?
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;
}
}
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 owner
einen Eigentumsvertrag zu haben, sollte der Besitzvertrag verlängert werden ( danke Ismael für den Tipp):
contract TutorialToken is StandardToken, Ownable {
...
}
contract TutorialToken is StandardToken, Ownable {
.Dies funktionierte von mir aus der Entwicklungskonsole:
x = TutorialToken.deployed() x.then( i => i.owner().then(console.log))
yname