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

**URL:** <https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741>\
**Category:** Kaia\
**Created:** [8월 27, 2021, 6:03오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741 "2021-08-27T06:03:00Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ToTheMoon](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@ToTheMoon](https://devforum.kaia.io/u/ToTheMoon)\
**Post date:** [8월 27, 2021, 6:03오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/1 "2021-08-27T06:03:00Z")

</div>

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

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

[참고URL](https://ko.docs.klaytn.com/smart-contract/sample-contracts/erc-20/1-erc20)을 확인하여  
transfer를 작성하였는데

```auto
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](http://baobab.wallet.klaytn.com)"에서 만든 지갑주소(0x30f645dcce248679dbb51024c85865bcbed9b7f8)를 입력하였고 \_amount에 "1"을 입력하고 실행했는데 오류가 발생했습니다.

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

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

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

---

<div class="post-metadata">

**Author:** ![reinforcement](https://avatars.discourse-cdn.com/v4/letter/r/278dde/32.png) [@reinforcement](https://devforum.kaia.io/u/reinforcement)\
**Post date:** [8월 27, 2021, 7:26오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/2 "2021-08-27T07:26:02Z")

</div>

안녕하세요.

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들로 표기가 됩니다.

도움이 되셨기를… 🙂

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

---

<div class="post-metadata">

**Author:** ![ToTheMoon](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@ToTheMoon](https://devforum.kaia.io/u/ToTheMoon)\
**Post date:** [8월 27, 2021, 7:34오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/3 "2021-08-27T07:34:25Z")

</div>

@reinforcement  
답변 감사합니다

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

---

<div class="post-metadata">

**Author:** ![reinforcement](https://avatars.discourse-cdn.com/v4/letter/r/278dde/32.png) [@reinforcement](https://devforum.kaia.io/u/reinforcement)\
**Post date:** [8월 27, 2021, 8:01오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/4 "2021-08-27T08:01:37Z")

</div>

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

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

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

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

맞는지요?

---

<div class="post-metadata">

**Author:** ![ToTheMoon](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@ToTheMoon](https://devforum.kaia.io/u/ToTheMoon)\
**Post date:** [8월 27, 2021, 8:12오전 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/5 "2021-08-27T08:12:05Z")

</div>

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

저희가 배포한 토큰을 이체하는 배포목적으로 배포하였습니다.  
[참고URL](https://ko.docs.klaytn.com/smart-contract/sample-contracts/erc-20/1-erc20)을 통해서 컨트랙트를 작성해서 배포하였구요

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

```auto
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;
    }
}

```

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

---

<div class="post-metadata">

**Author:** ![colin.kim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/colin.kim/32/55_2.png) [@colin.kim](https://devforum.kaia.io/u/colin.kim)\
**Post date:** [9월 1, 2021, 3:03오후 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/6 "2021-09-01T15:03:05Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ToTheMoon](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@ToTheMoon](https://devforum.kaia.io/u/ToTheMoon)\
**Post date:** [9월 1, 2021, 11:32오후 UTC](https://devforum.kaia.io/t/contract-tranfer-msg-sender/1741/7 "2021-09-01T23:32:25Z")

</div>

@colin.kim

네 해결 되었습니다.

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

[요청사항](https://devforum.kaia.io/t/kas-api-v2-tranfer/1753)이 있는데 이거는 혹시 검토가 되고 있는지 문의드립니다.
