Contract의 tranfer함수에 msg.sender 질문드립니다

자꾸 질문드리는 것 같아 죄송합니다…

그래서 처음부터 KlaytnIDE를 통해 컨트랙트를 다시 확인하면서 테스트를 진행하고 있습니다.

참고URL을 확인하여
transfer를 작성하였는데

function transfer(address _to, uint256 _amount) public returns (bool) {
        require(_to != address(0));
        require(_amount <= _balances[msg.sender]);
        _transfer(msg.sender, _to, _amount);
        return true;
    }

이렇게 작성하였고
컨트랙트 주소를 "0xfc8867072ee97d1a7d36574dcb9595f285d1d897"로 받았습니다.

그리고 transfer의 _to에 "baobab.wallet.klaytn.com"에서 만든 지갑주소(0x30f645dcce248679dbb51024c85865bcbed9b7f8)를 입력하였고 _amount에 "1"을 입력하고 실행했는데 오류가 발생했습니다.

스코프에서 확인하니
from에는 KlaytnIDE의 Run탭에 Account의 지갑주소가 나오고 to에는 제가 배포한 컨트랙트 주소인 "0xfc8867072ee97d1a7d36574dcb9595f285d1d897"가 설정되었습니다.

_to에 제가 입력한 지갑주소로 하려고 하고 싶습니다.

  • payable이나 ownable 관련된 설정같은데 포럼에 참고할 만한 링크가 없는 것 같아 질문드립니다.

안녕하세요.

baobab scope에서 transaction을 보고 이야기하시는 것 같습니다.

transactionHash의 to는 배포하신 contract의 address가 표시되는 게 맞고,
hash 내용을 들어가셔서 Input Data를 보시면
[0] : 00000000000000000000000030f645dcce248679dbb51024c85865bcbed9b7f8
[1] : 0000000000000000000000000000000000000000000000000000000000000001
로 표기된 것을 보실 겁니다.

[0]은 ToTheMoon 님이 말씀하신 주소가 표기돼 있고,
[1]은 amount가 기록돼 있습니다.

정상적인 처리라고 해석되는데 execution reverted 로 실패한 이유는
보내시는 address EOA에 klay가 없거나,
require의 조건문에 부합하지 않았거나…로 유추됩니다.

만약 전송에 성공을 했다면,
token transfers 기록에는
from , to 가 말씀하신 address들로 표기가 됩니다.

도움이 되셨기를… :slight_smile:

(추가)
msg sender에 klay가 있는 걸 보니, require 조건에 부합하지 않은 것 같습니다.

1 Like

@reinforcement
답변 감사합니다

어떤 require 조건에 부합하지 않은건지 확인하려고 하는데
Klaytn IDE로 제가 확인이 가능할까요??

직접 구현체를 보지 못해서 제약이 있습니다만… ^^

혹시
0xfc8867072ee97d1a7d36574dcb9595f285d1d897
이 컨트랙트가 무엇인지요?
ERC20, KIP7이라면 token일텐데 그런 것 같지는 않네요.

그리고 msg.sender인 0x8dca68a7dc727a6ae623ad633efb720d966d4609 의
balance가 1 이상이어야 문제가 없었을텐데 scope에서는 확인을 할 수가 없네요.

IDE에서 확인이 되실까요?
마지막으로 txHash의 input data가 기록된 것으로 보아 _transfer는 있는 그대로 사용하셨을 것으로 생각됩니다.

맞는지요?

0xfc8867072ee97d1a7d36574dcb9595f285d1d897 컨트랙트는
기본적인 transfer를 실행하는 테스트용 컨트랙트입니다.

저희가 배포한 토큰을 이체하는 배포목적으로 배포하였습니다.
참고URL을 통해서 컨트랙트를 작성해서 배포하였구요

0x8dca68a7dc727a6ae623ad633efb720d966d4609에 저희가 배포한 토큰잔고랑 Klay는 baobab.wallet.klaytn.com에서 60.9 / 3.304173 으로 조회가 됩니다.

pragma solidity >=0.4.24 <=0.5.6;

import "./ERC20.sol";
import "./SafeMath.sol";

contract TransferMulti is ERC20{
    using SafeMath for uint256;
    mapping(address => uint256) _balances;
    uint256 private _totalSupply;

    /**
     * @dev `IERC20.totalSupply`를 참조하세요.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    
    /**
     * @dev `IERC20.balanceOf`를 참조하세요.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    
    /**
     * @dev `IERC20.transfer`를 참조하세요.
     *
     * 요구사항 :
     *
     * - `recipient`는 영 주소(0x0000...0)가 될 수 없습니다.
     * - 호출자의 잔고는 적어도 `amount` 이상이어야 합니다.
     */
    function transfer(address _to, uint256 _amount) public returns (bool) {
        _transfer(msg.sender, _to, _amount);
        return true;
    }
}

구현체는 이렇게 구현했습니다.

안녕하세요, 문제가 해결된 건가요? 상단에 솔루션이 선택되어 있어서요.

@colin.kim

네 해결 되었습니다.

저희 회사에서 EN노드를 통해 블록체인 서비스를 운영하고 있는데
EN노드로 운영 중인 서비스를 KAS로 이관검토를 하면서 테스트를 진행했었는데
제가 블록체인 기술을 처음 접하다 보니 이해를 잘못하여 발생했었습니다…

요청사항이 있는데 이거는 혹시 검토가 되고 있는지 문의드립니다.