수수료대납 feeDelegation 관련

안녕하세요. 현재 caver-js 1.6.4 버젼으로 개발중에 있습니다.

const walletInstance = caver.klay.accounts.privateKeyToAccount(privateKey)
      caver.klay.accounts.wallet.add(walletInstance)

사용자의 개인키만을 입력받아서 로그인 한 후 스마트 계약을 실행하고자 하는데
이후에 수수료 대납 계정을 생성해 수수료를 대납하는 프로세스를 구성하고자 합니다.
하지만

> 블록 따옴표
을 참고해서 코드를 작성해보니

Error: Contract sign/signAsFeePayer works with 'caver.wallet'. Set to use'caver.wallet' by calling'contract.setWallet'.

이와 같은 에러가 발생합니다.
찾아보니 keyring을 이용해서 생성한 instance로 작업을 해야 되는거 같은데
앞서 제가 시도한 caver.klay.accounts.privateKey를 통해 생성한 walletInstance로는 수수료 대납 프로세스를 구성할 수 없나요? 만약에 있다면 레퍼런스 링크 좀 부탁합니다.
감사합니다.

안녕하세요
FeePayer Sign 링크 참고하셔서 한번 해보시면 좋을거같습니다.

또한 아래의 링크는 서버 클라이언트를 구성하여 대납을하는 예제입니다. 이부분도 참고하시면 도움되실것같아요
FeeDelegation example

말씀하신 예제들을 참고하던 중 해당 예제 sendTransaction(FEE_DELEGATED) 에서 이해가 가지 않은 부분이 있어 문의드립니다.

// using the promise
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
  type: 'FEE_DELEGATED_SMART_CONTRACT_EXECUTION',
  from: sender.address,
  to:   '0xe56a7260015ad92dd48a305ed232090e51e02391',
  data: '0x6353586b0000000000000000000000001d389d91886fd0af55f44c56e1240eb6162ddff8',
  gas:  '300000',
  value: caver.utils.toPeb('1', 'KLAY'),
}, sender.privateKey)

caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: feePayer.address,
})
.then(function(receipt){
    ...
});

여기에서 'data’에 속하는 부분은 어떤 것을 의미하는 건가요? rawTransaction은 RLP 인코딩을 통해 생성한 senderTxhash과 Txhash 중 어떤 데이터를 사용해야 되는건가요?
감사합니다

해당 트랜잭션은 스마트 컨트랙트를 실행하기 위한 것으로서, 말 그대로 이에 필요한 데이터입니다.

컨트랙트가 아니라면 FEE_DELEGATED_VALUE_TRANSFER등을 이용하시면 됩니다.

아 제 질문이 명확하지 않았나 봅니다. 기존에 배포한 스마트 컨트랙트에 접근하여 어떠한 조회나 값을 수정하는 기능을 시행하려고 하는데 type, from,to,gas,value parameter에 대해서는 개별 매개인자를 어떠한 것을 전달해야 될지 알겠습니다. 다만 data는 어떠한 데이터를 사용해야 될지 모르겠어서 질문합니다. 제가 수행하고자 하는 기능을 어떠한 인코딩을 통해서 생성후 data에 string 형태로 전달하는 식으로 해당 함수를 사용해야 되나요? 혹시 맞다면 docs에 어떠한 부분을 참고해야 할지 알려주시면 감사하겠습니다.

data는 smart contract의 함수 실행과 관련되어 function signature과 parameter값들이 encoded 된 것입니다.
caver.abi - Klaytn Docs 이 encode함수를 참고하시면 될 것 같습니다.

해당 encodeFunctionCall 메소드를 사용한 예제를 여기서 확인하실 수 있습니다: https://klaytn.github.io/klaytn-online-toolkit/smartcontract/functionCall
abi와 parameter들을 입력하여 function call을 encode하고 encoded된 값을 사용해서 실제로 컨트랙트의 함수를 실행 해볼 수 있습니다.

2 Likes