Я пытаюсь вернуть значение, используя функцию развернутого смарт-контракта в блокчейне.
pragma solidity 0.6.2;
contract Caller {
address cont;
function changeAdd(address _change) public {
cont = _change;
}
function caller (bytes memory test) public returns(bool, bytes memory) {
bytes memory payload = abi.encodeWithSignature("callMe(bytes)", test);
(bool success, bytes memory result)= address(cont).call(payload);
return (success, (result));
}
function viewCont() public view returns(address) {
return cont;
}
}
И развернутый тестовый контракт выглядит так:
pragma solidity 0.6.2;
contract Store {
uint counter;
function callMe(bytes calldata test) external returns(bytes memory) {
counter++;
return abi.encode(test);
}
function viewCounter () public view returns(uint256) {
return(counter);
}
function clearCounter() public {
counter = 0 ;
}
}
В этом примере я развертываю контракт "Store" на блокчейне, где ему назначен случайный адрес, который может быть указанным через функцию Caller.changeAdd, чтобы использовать функцию Caller.caller. Таким образом, я пытаюсь отправить данные в виде байтов в контракт Store, который должен отправить те же данные в контракт Caller. Я пытаюсь изолировать только те данные, которые первоначально отправлялись, чтобы я мог использовать их для проверки взаимодействия между смарт-контрактами в блокчейне. Сначала я попытался отправить целое число, но не смог найти способ сделать это. Поэтому я использовал байты, и это сработало, но, тем не менее, данные, которые я получаю, не совпадают с отправляемыми в первую очередь (например, я посылаю 0x0 и получаю большое число байтов, которое не совпадает с 0x0).
Я был бы признателен за любую помощь в том, как получать и обрабатывать данные между двумя разными несвязанными умными контрактами, заранее спасибо.