# 컨트랙트 배포 후 테스트 시 오류가 발생하여 문의드립니다

**URL:** <https://devforum.kaia.io/t/topic/1721>\
**Category:** Kaia\
**Created:** [8월 25, 2021, 6:48오전 UTC](https://devforum.kaia.io/t/topic/1721 "2021-08-25T06:48:25Z")\
**Posts on this page:** 10\
**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월 25, 2021, 6:48오전 UTC](https://devforum.kaia.io/t/topic/1721/1 "2021-08-25T06:48:25Z")

</div>

테스트넷(Baobab)에서 하나의 블록에 여러 Tx를 담아 토큰전송을 하여 가스비를 줄이고 싶어서 컨트랙트를 배포했습니다.

비슷한 질문을 드린 적이 있는데

> [@KAS API /v2/transfer, /v2/tx/fd-user/value(/v2/tx/value) 관련 질문입니다](https://devforum.kaia.io/t/kas-api-v2-transfer-v2-tx-fd-user-value-v2-tx-value/1665/4):
>
> 안녕하세요, 하나의 트랜잭션으로 여러번의 KLAY 전송을 위해서는 이 기능을 수행할수 있는 컨트랙트를 별도로 구현하셔야 합니다. 이 기능을 수행할 수 있는 함수를 컨트랙트에 특정함수로 구현하신다음 그 함수를 호출하시면 여러번 KLAY 전송을 하실 수 있습니다. 자세한 구현에 대해서는 아래 질문 참고 부탁드립니다. 또한, 클레이튼은 이더리움에 비해서는 가스비용이 저렴하기 때문에, 가스비를 아끼기 위해서 컨트랙트로 구현하여 KLAY를 전송하는 것이 맞을지에 대해서는 좀 더 고민하시는 편이 좋을 것 같습니다. (구현 비용 vs 절약되는 가스비) 배포한 코인이 KIP-7 기반의 코인이라고 하시면 [KIP-7 토큰 전송](https://refs.klaytnapi.com/ko/kip7/latest#operation/TransferToken)을 이용하실 수 있습니다. 다만 이 기능의 경우에는 KAS Wallet API의 계정으로만 전송을 할 수 있기 때문에, 원하시는 니즈에 맞지 않을 수 있을 것 같습니다. 이 경우에는 caver-js의 [kip7.transfer](https://docs.klaytn.com/bapp/sdk/caver-js/api-references/caver.kct/kip7#kip7-transfer) 함수를 이용하실 수 있습니다. 답변이 되…

답변을 받고 컨트랙트를 Baobab에 배포하였습니다.

배포한 컨트랙트의 주소는 0x632d333f6090a489e8296dc091689ebb21491abc 이고 소스는 아래처럼 배포했습니다.

```auto
contract MCCBroker {

    /**
     * @dev transferMulti 
     * @param _tokenAddr ERC20 Token Address
     */
    function transferMulti(address _tokenAddr, address[] memory targets, uint256[] memory values) public {
        ERC20 tokenAddr = ERC20(_tokenAddr);

        for( uint i = 0 ; i < targets.length ; i++ ) {
            tokenAddr.transfer(targets[i], values[i]);
        }
    }

    function transferFromMulti(address _tokenAddr, address fromAddr, address[] memory targets, uint256[] memory values) public {
        ERC20 tokenAddr = ERC20(_tokenAddr);

        for( uint i = 0 ; i < targets.length ; i++ ) {
            tokenAddr.transferFrom(fromAddr, targets[i], values[i]);
        }
    }
}

```

해당 컨트랙트의 transferMulti를 Klaytn IDE에서 실행을 했을 때  
“Error encoding arguments: Error: expected array value (arg=”“, coderType=“array”, type=“string”, value=“1”)” 라는 에러가 발생했습니다.

![스크린샷 2021-08-25 오후 3.47.45](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/1X/a8b1de3366fc9bc913f26da362aa7e0097ad2883.png)  
Input값은 이렇게 되는데 오류내용을 잘 이해하지 못해서 질문드립니다.

---

<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:** [8월 25, 2021, 7:23오전 UTC](https://devforum.kaia.io/t/topic/1721/2 "2021-08-25T07:23:15Z")

</div>

안녕하세요, 클레이튼 포럼에 질문을 올려주셔서 감사드립니다.

일단 해당 에러는 values 필드에 아래처럼 입력을 해야 한다는 에러입니다.

`["1", "2"]`

확인 부탁드리겠습니다.

감사합니다.

---

<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월 25, 2021, 7:44오전 UTC](https://devforum.kaia.io/t/topic/1721/3 "2021-08-25T07:44:18Z")

</div>

감사합니다

알려주신대로  
\_tokenAddr 계정을 KAS Console에서 생성 후 클레이를 9.222899994998999995개 가지고 있어서  
[“1”, "1]로 보냈습니다.

transactionHash(0x6f95cb75116501f3e6b8b783e098cb5d5150b310d26f1a488bd27bee6fd68b0a)를 scope에서 검색했을 때 “Fail : ErrExecutionReverted - uint(0x09)” 이런 오류가 발생하였습니다.

[구글링한 결과](https://ethereum.stackexchange.com/questions/82158/transfer-erc20-token-encountered-during-contract-execution-reverted)를 보니

```auto
From: 0x87ee3337108a31ab539e244f3d22f4070f03d12a
To: Contract 0x812a27078f0644b5bb88d5c0b9d616eb3550bcec

Function: transferFrom(address _from, address _to, uint256 _value)

[0]: 00000000000000000000000018c7abf493c747f39ce006abeb9bd6d2592e833e
[1]: 000000000000000000000000b7a5329bcb48308e3fba671dfe7e0f6477b1f759
[2]: 00000000000000000000000000000000000000000000000000000000000186a0

```

주소가 이런식으로 되어 있던데  
제가 입력한 16진수의 주소를 Uint256으로 변경해줘야할까요??

---

<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:** [8월 26, 2021, 3:04오전 UTC](https://devforum.kaia.io/t/topic/1721/4 "2021-08-26T03:04:03Z")

</div>

“0x18c7abf493c747f39ce006abeb9bd6d2592e833e”  
이 주소에는 클레이가 아니고 해당 컨트랙트 토큰이 충분히 있어야 합니다. 그 부분 먼저 확인 부탁드립니다.

또한 이 컨트랙트 실행 주체와 from에 적힌 주소가 다른데, 그럴경우 approve를 통해 전송할 수 있는 권한이 먼저 확보되어야 합니다.

해당 컨트랙트가 ERC-20 컨트랙트가 맞다면, approve()함수가 어떻게 동작하는지 확인 부탁드립니다.

감사합니다.

---

<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월 26, 2021, 3:56오전 UTC](https://devforum.kaia.io/t/topic/1721/5 "2021-08-26T03:56:26Z")

</div>

아… 클레이가 아니라 토큰이 있어야 하는거였군요  
감사합니다

approve() 함수 동작도 같이 확인해보겠습니다

=============================================  
@colin.kim  
답변주신 내용을 확인하다가 궁금한게 생겨 문의드립니다.

0x18c7abf493c747f39ce006abeb9bd6d2592e833e 주소가 컨트랙트 주소인가요?  
어제 제가 배포한 컨트랙트 주소는 "0x632d333f6090a489e8296dc091689ebb21491abc"인데  
이 컨트랙트에 주소가 없어서 문의드립니다.

---

<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월 26, 2021, 5:42오전 UTC](https://devforum.kaia.io/t/topic/1721/6 "2021-08-26T05:42:59Z")

</div>

“0xb99d23a33f109345f9a565cdfd33496ccac3bdaa275d93a72d7d0d1e98346ae7”

확인해보니 제가 기존에 \_tokenAddr에 토큰에대한 컨트랙트 주소를 넣어야했는데 제가 잘못넣었습니다.  
다시 수정해서 전송한 트랜잭션해시값이 제일 위에 있는 해시값입니다.

```auto
_tokenAddr : "0x0bbcd245044c507ba1c9c3011d69b33ff3cbc7ed",
targets : ["0x30f645dcce248679dbb51024c85865bcbed9b7f8", "0xb7cc824e26fea75cb930f1036d9159eb65f73f8d"],
values : ["1", "1"]

```

로 진행하였습니다.

그때도 동일하게 Fail : ErrExecutionReverted - uint(0x09) 에러가 발생했습니다.

from에 해당하는 계정에 Klay와 저희가 배포한 ERC20토큰 수량은

 ![스크린샷 2021-08-26 오후 2.42.16](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/1X/a4e65f588b6c67dddc9a7f3c92aa722e36546aee.jpeg)  
위와 같이 있습니다.

---

<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:** [8월 26, 2021, 6:32오전 UTC](https://devforum.kaia.io/t/topic/1721/7 "2021-08-26T06:32:13Z")

</div>

transferMulti()라는 함수 구현을 보면 결국 MCCBroker라는 계정에서 target address로 보내는데, 그럼 토큰을 보유하고 있는 계정 주소는 “0x632d333f6090a489e8296dc091689ebb21491abc” 이 주소여야 하는데, 맞나요?

---

<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월 26, 2021, 6:37오전 UTC](https://devforum.kaia.io/t/topic/1721/8 "2021-08-26T06:37:00Z")

</div>

@colin.kim  
토큰을 보유하고 있는 계정주소는 “0x8dca68a7dc727a6ae623ad633efb720d966d4609” 입니다.  
"0x632d333f6090a489e8296dc091689ebb21491abc"주소는 컨트랙트 주소입니다.

---

<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:** [8월 26, 2021, 7:41오전 UTC](https://devforum.kaia.io/t/topic/1721/9 "2021-08-26T07:41:23Z")

</div>

MCCBroker라는 함수에서 transferMulti()라는 함수를 사용하게 되면 transfer(recipient, amount)를 호출하게 됩니다. 여기에는 sender의 주소가 들어가지 않습니다. 즉, 해당 컨트랙트가 보유한 토큰을 전송한다는 의미입니다.

원하시는 기능은 "0x8dca68a7dc727a6ae623ad633efb720d966d4609"이 계정의 토큰을 전송하고 싶으신 것 같습니다.

그렇다면 transferFromMulti()라는 함수를 사용하시는 것이 맞을 것 같고, 실행하기 전에 approve()가 되어있어야 합니다.

---

<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월 26, 2021, 7:47오전 UTC](https://devforum.kaia.io/t/topic/1721/10 "2021-08-26T07:47:31Z")

</div>

감사합니다!  
다시 디버깅해보도록 하겠습니다
