Wie erhalte ich das Token-Guthaben eines externen Tokens in meinem Vertrag

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?

Antworten (1)

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