¿Cómo un contrato inteligente interactúa con otro contrato inteligente usando web3js?

Este es mi contrato médico.

pragma solidity ^0.4.24;

contract doctor {

    struct doctor_ds {
        address doctor_address;
        string speciality;
    }
    mapping(address => doctor_ds) public doctors_list;
    address hospital_address;

    function doctor() {
        hospital_address = msg.sender;
    }

    function add_doctors(address _new_doctor_address, string _speciality) {

        doctors_list[_new_doctor_address].doctor_address = _new_doctor_address;
        doctors_list[_new_doctor_address].speciality = _speciality;
    }

    function doctor_exist(address _doctor) public view returns(bool) {
        if (doctors_list[_doctor].doctor_address == _doctor) {
            return true;
        } else {
            return false;
        }
    }
}

================

Este es mi contrato de paciente.

pragma solidity ^0.4.24;

import "./doctor.sol";

contract patient {

    doctor doctor_obj;

    function patient(address _doctor_contract) {
        doctor_obj = doctor(_doctor_contract);
    }

    function check_if_doctor(address _ddoctor) returns(bool) {

        return doctor_obj.doctor_exist(_ddoctor);
    }

    function add_doc(address _d, string _s) {
        doctor_obj.add_doctors(_d, _s);
    }

    function A() payable {

    }
}

Recibo un error de exceso de gas, cuando llamo al médico existe en el contrato del paciente (usando remix y blockchain privado de ethereum) y también quiero crear un front-end para el contrato del paciente, pero ¿cómo se usará el ABI del contacto del médico para llamar a add_doc y check_if_doctor del contrato del paciente? funciones No conozco el código para web3js cuando los contratos interactúan entre sí. Alguien por favor ayuda

Respuestas (1)

Intenté compilarlo después de cambiar el constructor del paciente a:

doctor_obj = new doctor();

De esta manera, creará automáticamente un nuevo contrato médico cuando se despliegue un paciente. Después de eso, "add_doc" y "check_if_doctor" funcionan bien.

Entonces, implemente al paciente, el resultado abi incluirá las funciones de ambos contratos porque el paciente depende del médico. Creo que podrás usar la misma abi para interactuar directamente con los dos contratos. Pero las direcciones del contrato serán diferentes.

He usado la interfaz en Solidity y funciona bien. Gracias siid por responder.