인프런 커뮤니티 질문&답변

ana teanon님의 프로필 이미지
ana teanon

작성한 질문수

블록체인 기반의 스마트컨트랙트 개발

크라우드세일을 통한 토큰 판매

질문있습니다.

작성

·

197

0

세일종료후 컨트랙트에 남은 토큰은 어떻게 빼내나요?

답변 1

0

JeungJoo Lee님의 프로필 이미지
JeungJoo Lee
지식공유자

안녕하세요 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 계정이여야합니다

}

위의 방법이 가장 적합한 방법일 것 같습니다. 답변이 제대로 되었는지 모르겠는데요

궁금한 거 있으시면 다시 질문주세요!

ana teanon님의 프로필 이미지
ana teanon

작성한 질문수

질문하기