как вызвать одну функцию контракта в другой контракт

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);
    }
}

Я новичок в Solidity, я создаю простую пользовательскую регистрацию, проверяю и сохраняю ее, используя другой контракт. Контракт xyz работает нормально, но теперь я хочу вызвать его в контракт SaveData и проверить адрес с помощью функции передачи, которая, если адрес занесен в белый список, только сохранит адрес.

заранее спасибо

@MichaelKohl мне нужно, чтобы я развернул свой контракт xyz и сгенерировал адрес. Теперь мне нужно отправить тот же адрес в контракте сохранения данных и сохранить его с помощью функции сохранения.
Это выглядит нормально, за исключением того, что вы никогда не вызываете asd.add() для внесения ваших адресов в белый список. Что вы находите не работает? (также нет необходимости в «== true» в вашем запросе.)

Ответы (1)

Главное, вы приводите переменную в качестве экземпляра вашего контракта, а затем создаете ее экземпляр по адресу, где вы ожидаете, что он будет.

Что-то вроде

MyContract myContract; 
myContract = MyContract(contractAddress);

Я не удержался и поправил названия некоторых вещей.

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

}

Надеюсь, поможет.