Dgn
4월 26, 2022, 8:24오전
1
안녕하세요. KIP7 스마트 컨트랙트 코드 관련 질문 드립니다.
function transferToken(address _to, uint256 amount) external payable nonReentrant canTransfer(_to, amount) {
_transfer(ownerAddress, _to, amount);
}
위 코드 _transfer 의 첫번째 인자에 msg.sender 를 넣는것과 ownerAddress를 넣는것의 차이점이 무엇인지 알 수 있을까요???
ownerAddress는 토큰 발행 후 토큰을 가지고 있는 지갑의 주소입니다.
일단 ownerAddress 를 넣으시려면, transferToken(address ownerAddress, …) 형태로 인수를 추가해 주셔야겠죠?
msg.sender 의 경우에는 별도의 인자 없이, 해당 컨트랙트를 실행시키는 (트랜잭션에 서명한) 주소를 활용할수 있습니다.
@lorance.call
안녕하세요. 답변 감사합니다!
ownerAddress 는 상수로 관리하고 있습니다.
구현하고자 하는게 사용자가 토큰을 달라고 할 때 amount 만큼 ownerAddress에서 전송해 주려고 합니다.
ownerAddress를 상수로 넣어놔서 다른 사람이 토큰 컨트랙트 주소 및 abi파일만 알 면 토큰을 계속 빼갈거 같은데 혹시 어떤식으로 구현해야 할까요?
transferToken 함수에
required( 조건 ); 을 넣으시면됩니다. 예를들어
mapping(address → bool) allowedAddress;
function addAllowedAddress(address user) {
allowedAddress[user] = true;
}
이런 식의 프로퍼티를 생성하시고,
required(allowedAddress[msg.sender], ‘Not allowed address’);
이런식으로 조건이 부합하지 않은경우 revert 되도록 처리하시면 됩니다.