Это мой контракт с доктором.
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;
}
}
}
================
Это мой терпеливый контракт.
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 {
}
}
Я получаю сообщение об ошибке превышения газа, когда я звоню врачу, существующему в контракте с пациентом (используя ремикс и частную цепочку блоков Эфириума), а также я хочу создать внешний интерфейс для контракта с пациентом, но как ABI контакта врача будет использоваться при вызове контракта с пациентом add_doc и check_if_doctor функции. Я не знаю кода для web3js, когда контракты взаимодействуют друг с другом. Кто-нибудь, пожалуйста, помогите
Я попытался скомпилировать его после изменения конструктора пациента на:
doctor_obj = new doctor();
Таким образом, он автоматически создаст новый контракт с врачом при развертывании пациента. После этого "add_doc" и "check_if_doctor" работают нормально.
Итак, разверните пациента, результат abi будет включать в себя обе функции контракта, потому что пациент зависит от врача. Я думаю, вы сможете использовать одно и то же аби для прямого взаимодействия с двумя контрактами. Но адреса контрактов будут другими.
Ананд Кумар