Ich baue einen Token-Vertrag mit einer Verkaufs- und Kauffunktion. Der Benutzer sollte meinen Token nicht nur für eth kaufen können, sondern auch für einen anderen Token, den ich definiere. Daher benötige ich das Saldo-Mapping des externen Tokens in meinem Vertrag. Ich habe es versucht:
contract externalToken {
function transfer(address receiver, uint amount){ }
mapping (address => uint256) public balanceOf; }
und in meiner Kauffunktion:
...
amount = externalToken.balanceOf[msg.sender] / buyPrice;
...
Aber es zeigt diesen Fehler:
Der indizierte Ausdruck muss ein Typ, Mapping oder Array sein (ist Funktion (Adresse) gibt (uint256) zurück) if (exchangeToken.balanceOf[msg.sender] < buyPrice) throw;
Wie macht man das richtig?
Ein funktionierendes Beispiel finden Sie unter Wie erhalte ich eine Rückerstattung für den Betrag, den ich über 1 Ether für 100 The DAO-Tokens bezahlt habe .
Es gibt einen ExtraBalToken
Vertrag mit einer balanceOf(...)
Methode:
contract ExtraBalToken {
...
mapping (address => uint256) public balanceOf;
...
}
So greifen Sie auf ExtraBalToken.balanceOf(...)
von zu WithdrawDAO
:
contract DAO {
function balanceOf(address addr) returns (uint);
...
}
contract WithdrawDAO {
DAO constant public mainDAO = DAO(0x5c40ef6f527f4fba68368774e6130ce6515123f2);
...
function withdraw(){
uint balance = mainDAO.balanceOf(msg.sender);
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
throw;
}
...
}