¿Qué tan descriptivo debo ser en las llamadas externas a los contratos implementados?

Digamos que tengo un contrato en este momento que quiero interactuar con un contrato futuro o existente. Este contrato tiene dos modificadores (onlyPermittedContracts y onlyOwner) que dictan si un contrato o usuario puede o no invocar una determinada función.

contract owned {
    address public owner;
    mapping (address => bool) public permittedContracts;
    function owned(){
        owner = msg.sender;
    }
    modifier onlyOwner{
        if(msg.sender != owner){
            throw;
        }
        _;
    }
    function transferOwnership (address newOwner) onlyOwner{
        owner = newOwner;
    }
    function addPermittedContract(address newPermittedContract)onlyOwner{
        if(permittedContracts[newPermittedContract]==true){
            throw;
        }
        permittedContracts[newPermittedContract]=true;
    }
    function removePermittedContract(address oldPermittedContract)onlyOwner{
        if(permittedContracts[oldPermittedContract]!=true){
            throw;
        }
        permittedContracts[oldPermittedContract]=false;
    }
    modifier onlyPermittedContracts{
        if(permittedContracts[msg.sender]!= true){
            throw;
        }
        _;
    }
}

contract ExistingContract is owned{
    //stuff has been removed
    mapping (address=> uint) public balanceOf;
    function issueNewToken(address recipient, uint amount)onlyOwner onlyPermittedContracts{
        if(balanceOf[recipient]+amount<balanceOf[recipient]){throw;}
        balanceOf[recipient]+=amount;
    }
}

Ahora digamos que quiero hacer un nuevo contrato que se refiera a este contrato pre-implementado existente:

contract NewToken{
    oldToken previousToken = new oldToken();
    previousToken.issueNewToken(xxxxx, yyyy);

}

//an abstract contract
contract OldToken{
    function issueNewToken(address recipient, uint amount){}
}

Mi pregunta es, ¿cuánta información necesito incluir en la función issueNewToken() en el contrato abstracto que tengo en mi segundo contrato? ¿Necesito describir los diversos modificadores o es suficiente para que se ejecute el programa? Gracias.

Respuestas (1)

La forma en que lo estás haciendo es correcta. Los modificadores son parte de cómo funciona el contrato internamente, pero no afectan la interfaz externa de ninguna manera. Desde solo el nombre de la función y los tipos de argumentos, la función se puede llamar sin ambigüedades.

Para obtener más detalles, consulte la especificación ABI