강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của anateanon0509
anateanon0509

câu hỏi đã được viết

Phát triển hợp đồng thông minh dựa trên blockchain

Bán token thông qua Crowdsale

질문있습니다.

Viết

·

269

0

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

blockchainEthereumdappsolidity

Câu trả lời 1

0

JeungJoo Lee님의 프로필 이미지
JeungJoo Lee
Người chia sẻ kiến thức

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

}

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

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

Hình ảnh hồ sơ của anateanon0509
anateanon0509

câu hỏi đã được viết

Đặt câu hỏi