【发布时间】:2022-06-13 04:43:21
【问题描述】:
我是 Solidity 的新手,我提出了这个问题。
我想开发一个名为senderContract {} 的合约,它可以从任何地址接收以太币,然后自动将这些资金转移到另一个名为receiverContract {} 的合约中。在第二个合约中,你会发现两个函数,第一个函数 (manualTransfer()) 工作正常,允许手动引入合约合约地址来发送以太币。但是第二个 (autoTransfer()) 不起作用。
我发现一旦部署第二个合约,第一个合约中的constructor() 会更改变量recipient 的值。构造函数中的变量如何从其初始化值更改?构造函数不应该只执行一次吗?
是否有任何原因导致无法执行此操作,或者我只是没有编写正确的代码?我把代码留在这里:
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);
}
}
提前谢谢你!
【问题讨论】:
标签: inheritance ethereum solidity smartcontracts