# Fee\_delegated\_smart\_contract\_execution 오류

**URL:** <https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563>\
**Category:** KAS (아카이브)\
**Tags:** fee-delegation, caver-js, klaytn\
**Created:** [12월 21, 2020, 2:25오후 UTC](https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563 "2020-12-21T14:25:14Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![yuha](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/yuha/32/350_2.png) [@yuha](https://devforum.kaia.io/u/yuha)\
**Post date:** [12월 21, 2020, 2:25오후 UTC](https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563/1 "2020-12-21T14:25:14Z")

</div>

밑의 sender 코드를 실행시켜, 모든 정보가 각 명령어마다 들어가는 것을 확인하였습니다. 마지막 부분까지 실행된 것 까지 확인하였습니다. 그런데 feepayer로 넘어가는 과정에서 오류가 생긴것 같은데… 무엇이 문제인지 잘 모르겠어서, 질문드립니다!

sender 코드:

```
sendFeeDelegateTx = async (functionABI, address) => {
  const {
    rawTransaction: senderRawTransaction,
  } = await caver.klay.accounts.signTransaction(
    {
      type: "FEE_DELEGATED_SMART_CONTRACT_EXECUTION",
      from: address,
      to: contractAddress,
      gas: "300000",
      value: caver.utils.toPeb("0", "KLAY"),
      data: functionABI,
    },
    buyerPrivateKey
  );

  client.connect(1337, '127.0.0.1', function() {
    console.log('Connected to fee delegated service');
  });
  client.write(senderRawTransaction);

  client.on("data", function (data) {
    console.log("Received data from server: " + data);
  });

  client.on("close", function () {
    console.log("Connection closed");
  });
};

```

오류 코드:

```
connected to fee delegated service
klaytn/blockchain/sender_client_contract.js:117
Received data from client: 0x31f8eb808505d21dba00830493e094a87573559a9e5e4c973307b2b8ffc1018446482d80942666473b61c97c1cdedf42d9a676b35d154a0698b86482b9865b0000000000000000000000002666473b61c97c1cdedf42d9a676b35d154a06980000000000000000000000007b62efe851271ecdbc32376f63e8f0a077a123110000000000000000000000000000000000000000000000000000000000001388f847f8458207f5a03ef969bd495587d32e0cc5c5c2bddca82907f9c8f2e17badb63437a32933d44da07883a470d66bc3789c33520442124be9ec9bd882c7a3c484c71c8bdd4e38965080c4c3018080
klaytn/blockchain/feepayer_server_contract.js:52
Received data from server: This is fee delegating serviceFee payer is 0xec6a7d57e8c269a7b650c7f64e27050c4c79031a
klaytn/blockchain/sender_client_contract.js:122
Error: Returned error: invalid transaction v, r, s values of the sender
    at Object.ErrorResponse (/Users/gnong/Documents/workspace/kidari-project/node_modules/caver-js/packages/caver-core-helpers/src/errors.js:84:16)
    at /Users/gnong/Documents/workspace/kidari-project/node_modules/caver-js/packages/caver-core-requestmanager/src/index.js:155:44
    at XMLHttpRequest.request.onreadystatechange (/Users/gnong/Documents/workspace/kidari-project/node_modules/caver-js/packages/caver-core-requestmanager/caver-providers-http/src/index.js:119:13)
    at XMLHttpRequestEventTarget.dispatchEvent (/Users/gnong/Documents/workspace/kidari-project/node_modules/xhr2-cookies/xml-http-request-event-target.ts:44:13)
    at XMLHttpRequest._setReadyState (/Users/gnong/Documents/workspace/kidari-project/node_modules/xhr2-cookies/xml-http-request.ts:219:8)
    at XMLHttpRequest._onHttpResponseEnd (/Users/gnong/Documents/workspace/kidari-project/node_modules/xhr2-cookies/xml-http-request.ts:345:8)
    at IncomingMessage.<anonymous> (/Users/gnong/Documents/workspace/kidari-project/node_modules/xhr2-cookies/xml-http-request.ts:311:39)
    at IncomingMessage.emit (<node_internals>/events.js:203:15)
    at endReadableNT (<node_internals>/_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19) {stack: 'Error: Returned error: invalid transaction v,…allback (internal/process/next_tick.js:63:19)', message: 'Returned error: invalid transaction v, r, s values of the sender'}
```

---

<div class="post-metadata">

**Author:** ![Jamie](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jamie/32/1472_2.png) [@Jamie](https://devforum.kaia.io/u/Jamie)\
**Post date:** [12월 22, 2020, 12:20오전 UTC](https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563/2 "2020-12-22T00:20:52Z")

</div>

안녕하세요 먼저 질문을 올려주셔서 감사합니다 🙂

위에 올려주신 코드에는 수수료 대납자가 어떠한 방식으로 동작하고 있는지 코드가 나와있지 않아 정확하게 말씀을 드릴 수는 없습니다만, 발생한 에러를 봤을 때, 트랜잭션의 sender, 즉 address를 주소로 갖는 계정에서 사용해야 하는 키가buyerPrivateKey가 아닌 것 같습니다.

계정의 [accountKey](https://docs.klaytn.com/klaytn/design/accounts#account-key)를 확인하실 때에는 [caver.klay.getAccountKey](https://docs.klaytn.com/bapp/sdk/caver-js/v1.4.1/api-references/caver.klay/account#getaccountkey) 를 사용하시면 됩니다.  
keyType이 1인 경우, PrivateKey-PublicKey-Address 강결합인 상태이어야 합니다.  
그 이외의 경우, 리턴된 오브젝트의 key에서 사용하고자 하는 buyerPrivateKey에서 파생된 PublicKey가 있는지 확인해야 합니다.  
buyerPrivateKey에서 파생된 PublicKey는 [privateKeyToPublicKey](https://docs.klaytn.com/bapp/sdk/caver-js/v1.4.1/api-references/caver.klay.accounts#privatekeytopublickey)를 사용할 수 있으며, [xyPointFromPublicKey](https://docs.klaytn.com/bapp/sdk/caver-js/v1.4.1/api-references/caver.utils_1.4.1#xypointfrompublickey)를 사용하여 x, y 포인트를 구할 수 있습니다.

주신 예제를 베이스로 간단하게 예제를 작성하여 동작을 확인했는데, 계정에서 사용해야 하는 private key에 문제 없는 경우 트랜잭션이 정상적으로 전송되는 것을 확인했습니다.  
만약 address를 주소로 갖는 계정에서 사용되어야 하는 키가 `buyerPrivateKey` 가 아닌 경우, 글에 남겨주신 것과 동일한 에러가 발생되는 것을 확인했습니다.

아래 예제를 참고해 주시면 감사하겠습니다.  
추가적인 질문이 있으신 경우 편하게 글 남겨주세요.

```
const acct = caver.klay.accounts.wallet.add('0x{private key}')
const buyerPrivateKey = acct.privateKey
const contractAddress = '0xd4eba39375ac5692a0f4cf9b8f8f105b3052e983'

const sendFeeDelegateTx = async (functionABI, address) => {
    const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction(
        {
            type: 'FEE_DELEGATED_SMART_CONTRACT_EXECUTION',
            from: address,
            to: contractAddress,
            gas: '300000',
            value: caver.utils.toPeb('0', 'KLAY'),
            data: functionABI,
        },
        buyerPrivateKey
    )

    const feePayer = caver.klay.accounts.wallet.add('0x{private key}')
    const receipt = await caver.klay.sendTransaction({
        senderRawTransaction,
        feePayer: feePayer.address,
    })
    console.log(receipt)
}

sendFeeDelegateTx(
    '0xa9059cbb0000000000000000000000005b9e34df6b9bf6ced39c02874e041ffd4bef851d0000000000000000000000000000000000000000000000000000000000000001',
    acct.address
)
```

---

<div class="post-metadata">

**Author:** ![yuha](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/yuha/32/350_2.png) [@yuha](https://devforum.kaia.io/u/yuha)\
**Post date:** [12월 23, 2020, 7:59오전 UTC](https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563/3 "2020-12-23T07:59:32Z")

</div>

해주신 대로 다시 확인해보니 해당 오류는 수정했습니다!

이를 해결하니, 새로운 오류가 발생하였습니다.

> Fail : ErrExecutionReverted - uint(0x09)

별로 문제가 없는듯 한대, 지속적으로 오류가 떠 추가 질문드립니다…  
수수료 대납자나 최초 보내는 사람에게 모두 클레이를 주어서 테스트 해보았는데도, 오류가 생겼습니다.  
테스트는 바오밥에서 진행하였습니다.

문제 tx: 0x872dcef572071cdefbcd2006baf6b62af5b08efe4b86ca89415c919ae60892ad

---

<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:** [12월 23, 2020, 10:34오전 UTC](https://devforum.kaia.io/t/fee-delegated-smart-contract-execution/563/4 "2020-12-23T10:34:47Z")

</div>

안녕하세요, 해당 에러의 경우 스마트 컨트랙트 실행과정에서 revert가 된 것 같습니다.

컨트랙트 실행을 확인 부탁드리겠습니다.

감사합니다.
