Я хочу создать смарт-контракт (называемый Deal), который после развертывания вызывает другой смарт-контракт (называемый AddressBook), чтобы зарегистрировать свой адрес в глобальном смарт-контракте AddressBook. Код, который я использую, работает, но, к сожалению, мой недавно развернутый смарт-контракт не использует адрес из смарт-контракта AddressBook, а вместо этого использует свой собственный адрес для вызова функции addAddress. Красная маркировка показывает вывод, если я вызываю addressbook.getAddresses (address) внутри договора сделки. Синяя маркировка показывает вывод, если я вызываю функцию getAddresses в контракте AddressBook. Так что я хочу синий вывод в контракте сделки
Изображение с выхода
Кто-нибудь может мне сказать, как я могу добавить адреса моего развернутого контракта в глобальный контракт AddressBook?
Так выглядит мой умный контракт в адресной книге. Я хотел бы добавить все развернутые смарт-контракты к этому контакту.
contract AddressBook {
mapping(address => address[]) private _addresses;
mapping(address => mapping(address => string)) private _aliases;
function getAddresses() public view returns (address[]) {
return _addresses[msg.sender];
}
function addAddress(address addr, string _alias) public payable {
_addresses[msg.sender].push(addr);
_aliases[msg.sender][addr] = _alias;
}
function removeAddress(address addr) public payable {
uint length = _addresses[msg.sender].length;
for(uint i = 0; i < length; i++) {
if (addr == _addresses[msg.sender][i]) {
if (1 < _addresses[msg.sender].length && i < length-1) {
_addresses[msg.sender][i] = _addresses[msg.sender][length-1];
}
delete _addresses[msg.sender][length-1];
_addresses[msg.sender].length--;
delete _aliases[msg.sender][addr];
break;
}
}
}
function getAlias(address addr) public view returns (string) {
return _aliases[msg.sender][addr];
}
}
Это умный контракт, который я хочу развернуть и зарегистрировать на глобальном
AddressBook smart contract:
contract Deal {
AddressBook addressBook;
address public owner;
address public buyerAddr;
address private addr;
string private metaData;
uint private duration;
uint private price;
string private typeOfData;
string private gateKeeper;
event SafepaySent(address buyer, uint value, uint now);
/// The smart contract's constructor
function Deal(address _addressBook) public payable {
/// The seller is the contract's owner
owner = msg.sender;
AddressBook a = AddressBook(_addressBook);
a.addAddress(owner,"test");
}
}
function getAddresses(address _addressBook) public view returns (address[]) {
return AddressBook(_addressBook).getAddresses();
}
}
contract AddressBook {
function getAddresses() public view returns (address[]);
function addAddress(address addr, string _alias) public payable ;
function removeAddress(address addr) public payable;
function getAlias(address addr) public view returns (string);
}
Теперь я хочу вызвать функцию AddressBook.getAddresses () в смарт-контракте AddressBook и получить адреса всех развернутых контрактов. Однако я не получаю никаких адресов в рамках смарт-контракта с адресной книгой. Если я вызываю функцию Deal.getAddresses («адрес глобальной адресной книги»), я получаю адрес недавно развернутого смарт-контракта. Но это не то, что я хочу.