답변 1
0
안녕하세요 ana teanon 님 !
세일 종료후 CA(Contract Account) 어드레스에서 돈을 뺄 수 있는 방법을 질문 해주셨는데요..
질문의 소스가 만약 제 강의의 CrowdSale이라고 한다면 최초의 Constructor 에서 wallet으로 설정되어있는 크라우드 세일 모금 지갑 주소로 자동으로 보내지기 때문에 별도의 CA에서 출금을 할 필요는 없습니다. 토큰을 유저가 사는 순간 초기에 설정되어있는 wallet으로 가니까요~ 해당 소스에서 보시면
constructor(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0);
require(_wallet != address(0));
require(_token != address(0));
rate = _rate;
wallet = _wallet;
token = _token;
}
Constructor 선언부에 토큰을 구매했을 때 바로 wallet 주소에 들어갈 거구요... 해당 wallet은 사용자가 buyTokens 를 했을 때
function _forwardFunds() internal { wallet.transfer(msg.value);
}
위의 wallet 주소로 transfer 됩니다. 고로 CA 에는 ether가 남아있지 않을 것입니다. 바로바로 보내주기 때문에...
다른 한편으로, 질문이 CrowdSale이 저 형식이 아닌 다른 형식으로 CA에 ether를 보관한다면 향후 CA를 만든 Owner의 EOA 주소를 상태 변수에 setting을 해주고 Owner만이 출금을 할 수 있도록 아래와 같이 function을 추가해주시면 될것같습니다.
function withdrawFund() public { require(msg.sender == owner); // 이 require는 OpenZeppelin에서 배포한 Ownable.sol을 참조하면 좋을듯합니다.
owner.transfer(this.value); // owner는 EOA 계정이여야합니다
}
위의 방법이 가장 적합한 방법일 것 같습니다. 답변이 제대로 되었는지 모르겠는데요
궁금한 거 있으시면 다시 질문주세요!