I am new to Solidity and I've come up with this issue.
I want to develop a contract called senderContract {} that can receive ether from any address and then automatically transfer these funds to another contract called receiverContract {}. In this second contract, you will find two functions, the first one (manualTransfer()) is working correctly and allows to introduce manually the contract contract address to send the ether. But the second one (autoTransfer()) is not working.
I've discovered that the constructor() in the first contract changes the value of the variable recipient once the second contract es deployed. How is it possible that a variable in a constructor changes from its initialized value? Is the contructor not supposed to be executed just once?
Is there any reason for this action not being possible or am I just not writing the correct code? I leave the code here:
pragma solidity >= 0.7.0 < 0.9.0;
contract receiverContract {
event Log(uint);
address public recipient;
constructor () {
recipient = address(this);
}
fallback () external payable {
emit Log(gasleft());
}
receive () external payable {}
function getThisAddress() public view returns(address) {
return address(this);
}
function getBalance() public view returns (uint) {
return address(this).balance;
}
}
contract senderContract is receiverContract {
function manualTransfer (address payable _to) public payable {
_to.transfer(msg.value);
}
function autoTransfer () public payable {
payable(recipient).transfer(msg.value);
}
}
Thank you in advance!