cómo llamar a una función de contrato en otro contrato

contract xyz {
    mapping(address => bool) Users;
    function add(address userAddress) {
            require(userAddress != 0x0 && !Users[userAddress]);             
            Users[userAddress] = true;    
    }
    function pass(address passAddress) returns (bool) {   
        return Users[passAddress];
    }
}

contract SaveData {
    address[] addrs;
    string[] hashSet;
    xyz asd = xyz();
    function Save(address PubAddress) {
        require(asd.pass(PubAddress)==true);
        addrs.push(PubAddress);    //saving public addresses

    }
//function to save hash
    function saveHash(string hashStr) {
        hashSet.push(hashStr);
    }
}

Soy nuevo en Solidity, estoy creando un registro de usuario simple y verificándolo y guardándolo usando otro contrato. El contrato xyz funciona bien, pero ahora quiero llamarlo a SaveData Contract y verificar la dirección usando la función de paso que si la dirección está en la lista blanca, solo guardará la dirección.

gracias de antemano

Posible duplicado de función Call en otro contrato
@MichaelKohl lo que necesito es que haya implementado mi contrato xyz y genere una dirección. Ahora necesito enviar la misma dirección en el contrato de datos guardados y guardarlo usando la función de guardar.
Esto se ve bien, excepto que nunca está llamando a asd.add() para incluir en la lista blanca sus direcciones. ¿Qué estás encontrando que no funciona? (Además, no es necesario "==true" en su requerimiento).

Respuestas (1)

Lo principal es lanzar una variable como una instancia de su contrato, luego la instancia en la dirección donde espera que esté.

Algo como

MyContract myContract; 
myContract = MyContract(contractAddress);

No pude evitarlo y ajusté los nombres de algunas cosas.

pragma solidity 0.4.21;

contract UserReg {

    mapping(address => bool) public isUser;

    function add(address userAddress) public {
        require(userAddress != 0x0 && !isUser[userAddress]);             
        isUser[userAddress] = true;    
    }

    function pass(address passAddress) public view returns(bool) {   
        return isUser[passAddress];
    }

    // Added this for safety check near 31

    function isUserReg() public pure returns(bool isIndeed) {
        return true;
    }
}

contract SaveData {

    address[] public addrs;

    UserReg userReg;

    function instantiateXyz(address userRegAddr) public returns(bool success) {
        userReg = UserReg(userRegAddr);     // instantiate asd instance of Zyz
        require(userReg.isUserReg());       // should return true, right?
        return true;
    }

    function saveAddress(address pubAddress) public returns(bool success) {
        require(userReg.pass(pubAddress)==true);
        addrs.push(pubAddress);    //saving public addresses
        return true;
    }

}

Espero eso ayude.